zidane-ui 9.1.1 → 9.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/ModalProvider.d.ts +3 -1
- package/dist/app/ModalProvider.js +15 -9
- package/dist/approvals/headless/index.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/index.js +1 -1
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/headless/block-runs.d.ts +57 -0
- package/dist/chat/headless/block-runs.js +123 -0
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/fixture-transcript.d.ts +6 -1
- package/dist/chat/headless/fixture-transcript.js +49 -0
- package/dist/chat/headless/host.d.ts +3 -0
- package/dist/chat/headless/index.d.ts +2 -1
- package/dist/chat/headless/index.js +12 -11
- package/dist/chat/headless/labels.d.ts +42 -0
- package/dist/chat/headless/labels.js +42 -0
- package/dist/chat/headless/session-list.d.ts +27 -0
- package/dist/chat/headless/sidebar/index.js +1 -1
- package/dist/chat/headless/sidebar/labels.d.ts +27 -0
- package/dist/chat/headless/streams/index.js +1 -1
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +2 -2
- package/dist/chat/headless/streams/store.js +2 -2
- package/dist/chat/headless/transcript/batch.d.ts +21 -1
- package/dist/chat/headless/transcript/batch.js +55 -10
- package/dist/chat/headless/transcript/collapse.js +18 -3
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/index.js +1 -1
- package/dist/chat/headless/transcript/rows.d.ts +7 -1
- package/dist/chat/index.d.ts +6 -1
- package/dist/chat/index.js +7 -2
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/TranscriptRow.js +19 -2
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/index.d.ts +6 -1
- package/dist/chat/transcript/index.js +6 -1
- package/dist/chat/transcript/markdown.js +9 -0
- package/dist/chat/transcript/renderers.d.ts +7 -0
- package/dist/chat/transcript/script-input.d.ts +17 -0
- package/dist/chat/transcript/script-input.js +16 -0
- package/dist/chat/transcript/shell-block-scope.d.ts +29 -0
- package/dist/chat/transcript/shell-block-scope.js +18 -0
- package/dist/chat/transcript/shell-block.d.ts +27 -0
- package/dist/chat/transcript/shell-block.js +306 -0
- package/dist/chat/transcript/tool-parts.d.ts +18 -6
- package/dist/chat/transcript/tool-parts.js +15 -5
- package/dist/chat/transcript/tool-payload.js +6 -3
- package/dist/chat/transcript/tool-row.js +155 -96
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/code/HighlightedCode.js +3 -69
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/core.css +6 -2
- package/dist/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +101 -3
- package/dist/extensions/ExtensionSettingsSidebar.js +19 -3
- package/dist/extensions/kit.d.ts +1 -1
- package/dist/git/BranchMenu.d.ts +1 -7
- package/dist/git/BranchMenu.js +17 -40
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/onboarding/index.js +1 -1
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +2 -2
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +15 -8
- package/dist/settings/headless/catalog.js +5 -0
- package/dist/settings/headless/layout.js +2 -1
- package/dist/settings/headless/registry.d.ts +2 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +2 -2
- package/dist/settings/sections/models/ModelRows.js +1 -1
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/styles.css +291 -2
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +10 -0
- package/dist/terminal/headless/store.js +16 -0
- package/dist/terminal/index.d.ts +2 -2
- package/dist/terminal/index.js +2 -2
- package/dist/theme/runtime-icons.d.ts +50 -0
- package/dist/theme/runtime-icons.js +95 -0
- package/package.json +3 -6
- package/src/styles/primitives.css +5 -2
- package/src/styles/transcript.css +281 -0
- package/src/adapters/browser-appearance-host.ts +0 -51
- package/src/adapters/browser-keybindings-host.ts +0 -48
- package/src/adapters/browser-workspace-host.ts +0 -92
- package/src/adapters/closable-client.ts +0 -34
- package/src/adapters/extension-modules.ts +0 -360
- package/src/adapters/index.ts +0 -35
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -270
- package/src/adapters/run-host.ts +0 -238
- package/src/adapters/server-approvals-host.ts +0 -102
- package/src/adapters/server-client.ts +0 -15
- package/src/adapters/server-composer-host.ts +0 -459
- package/src/adapters/server-extensions-host.ts +0 -979
- package/src/adapters/server-files-host.ts +0 -287
- package/src/adapters/server-git-host.ts +0 -289
- package/src/adapters/server-host.ts +0 -489
- package/src/adapters/server-machines-host.ts +0 -283
- package/src/adapters/server-oauth-flow.ts +0 -133
- package/src/adapters/server-onboarding-host.ts +0 -363
- package/src/adapters/server-palette-host.ts +0 -134
- package/src/adapters/server-session-host.ts +0 -241
- package/src/adapters/server-settings-accounts.ts +0 -212
- package/src/adapters/server-settings-host.ts +0 -120
- package/src/adapters/server-settings-models.ts +0 -46
- package/src/adapters/server-settings-performance.ts +0 -58
- package/src/adapters/server-settings-sections.ts +0 -222
- package/src/adapters/server-sidebar-host.ts +0 -59
- package/src/adapters/server-terminal-host.ts +0 -124
- package/src/adapters/server-transcript-members.ts +0 -131
- package/src/adapters/sse-host.ts +0 -264
- package/src/adapters/sse-parser.ts +0 -82
- package/src/adapters/sse-protocol.ts +0 -118
- package/src/adapters/stream-pacer.ts +0 -122
- package/src/adapters/worker-host.ts +0 -192
- package/src/adapters/worker-protocol.ts +0 -97
- package/src/app/AppHostProvider.tsx +0 -135
- package/src/app/ModalProvider.tsx +0 -731
- package/src/app/headless/app-host.ts +0 -61
- package/src/app/headless/index.ts +0 -6
- package/src/app/headless/resource.ts +0 -444
- package/src/app/index.ts +0 -9
- package/src/app/testing/index.ts +0 -90
- package/src/app/useConfirm.tsx +0 -65
- package/src/app/useResource.ts +0 -30
- package/src/appearance/AppearanceProvider.tsx +0 -383
- package/src/appearance/apply.ts +0 -69
- package/src/appearance/headless/fixture-host.ts +0 -111
- package/src/appearance/headless/fonts.ts +0 -224
- package/src/appearance/headless/host.ts +0 -65
- package/src/appearance/headless/index.ts +0 -12
- package/src/appearance/headless/prefs.ts +0 -252
- package/src/appearance/headless/storage.ts +0 -127
- package/src/appearance/headless/zoom-commands.ts +0 -21
- package/src/appearance/index.ts +0 -11
- package/src/appearance/testing/contract.ts +0 -210
- package/src/appearance/testing/index.ts +0 -6
- package/src/approvals/ApprovalBar.tsx +0 -234
- package/src/approvals/ApprovalConcern.tsx +0 -33
- package/src/approvals/ApprovalShell.tsx +0 -69
- package/src/approvals/ApprovalsProvider.tsx +0 -110
- package/src/approvals/FileEditApproval.tsx +0 -310
- package/src/approvals/HunkPreviews.tsx +0 -225
- package/src/approvals/SafelistPanel.tsx +0 -149
- package/src/approvals/headless/fixture-host.ts +0 -73
- package/src/approvals/headless/fixtures.ts +0 -86
- package/src/approvals/headless/heads.ts +0 -81
- package/src/approvals/headless/host.ts +0 -80
- package/src/approvals/headless/index.ts +0 -12
- package/src/approvals/headless/labels.ts +0 -67
- package/src/approvals/headless/pending.ts +0 -91
- package/src/approvals/headless/preview.ts +0 -94
- package/src/approvals/headless/safelist.ts +0 -63
- package/src/approvals/index.ts +0 -13
- package/src/approvals/key-scope.ts +0 -33
- package/src/approvals/testing/contract.ts +0 -230
- package/src/approvals/testing/index.ts +0 -7
- package/src/brands/marks.ts +0 -298
- package/src/chat/ChatProvider.tsx +0 -60
- package/src/chat/DaemonOrb.tsx +0 -107
- package/src/chat/HostBadge.tsx +0 -71
- package/src/chat/HostStatusDot.tsx +0 -53
- package/src/chat/HostTranscript.tsx +0 -101
- package/src/chat/PdfPreview.tsx +0 -65
- package/src/chat/RunEstimateChip.tsx +0 -168
- package/src/chat/SessionFilterMenu.tsx +0 -397
- package/src/chat/SessionGroupHeader.tsx +0 -177
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -296
- package/src/chat/SessionStreamsProvider.tsx +0 -253
- package/src/chat/StatusDot.tsx +0 -128
- package/src/chat/TextPreview.tsx +0 -121
- package/src/chat/Throbber.tsx +0 -270
- package/src/chat/Transcript.tsx +0 -523
- package/src/chat/composer/AgentPicker.tsx +0 -155
- package/src/chat/composer/AgentPickerDialog.tsx +0 -99
- package/src/chat/composer/ApprovalDock.tsx +0 -64
- package/src/chat/composer/ArchivedBanner.tsx +0 -44
- package/src/chat/composer/AttachmentTiles.tsx +0 -211
- package/src/chat/composer/Composer.tsx +0 -500
- package/src/chat/composer/ComposerBadges.tsx +0 -339
- package/src/chat/composer/ComposerControls.tsx +0 -243
- package/src/chat/composer/ComposerEditor.tsx +0 -101
- package/src/chat/composer/ComposerHostProvider.tsx +0 -46
- package/src/chat/composer/ComposerShell.tsx +0 -129
- package/src/chat/composer/ContextBreakdown.tsx +0 -382
- package/src/chat/composer/ContextOrb.tsx +0 -176
- package/src/chat/composer/ConversationBadges.tsx +0 -168
- package/src/chat/composer/DockCard.tsx +0 -126
- package/src/chat/composer/EffortPickerDialog.tsx +0 -184
- package/src/chat/composer/HostComposer.tsx +0 -135
- package/src/chat/composer/HostContextOrb.tsx +0 -94
- package/src/chat/composer/HostModelChainList.tsx +0 -102
- package/src/chat/composer/HostPicker.tsx +0 -97
- package/src/chat/composer/HostPickers.tsx +0 -320
- package/src/chat/composer/ImageModelList.tsx +0 -151
- package/src/chat/composer/ModelChainList.tsx +0 -442
- package/src/chat/composer/ModelChainParts.tsx +0 -247
- package/src/chat/composer/ModelChainRow.tsx +0 -191
- package/src/chat/composer/ModelChainRows.tsx +0 -223
- package/src/chat/composer/ModelChainTooltip.tsx +0 -121
- package/src/chat/composer/ModelFacts.tsx +0 -204
- package/src/chat/composer/ModelOptionsPicker.tsx +0 -257
- package/src/chat/composer/ModelPicker.tsx +0 -513
- package/src/chat/composer/ModelPickerDialog.tsx +0 -99
- package/src/chat/composer/ModelProviderPills.tsx +0 -141
- package/src/chat/composer/PickerPill.tsx +0 -41
- package/src/chat/composer/ProjectMenu.tsx +0 -187
- package/src/chat/composer/PromptHistoryProvider.tsx +0 -214
- package/src/chat/composer/RetryPill.tsx +0 -47
- package/src/chat/composer/RunStatusChip.tsx +0 -150
- package/src/chat/composer/ScopeToggle.tsx +0 -94
- package/src/chat/composer/SelectTurnHint.tsx +0 -40
- package/src/chat/composer/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -188
- package/src/chat/composer/attachment-ingest.ts +0 -413
- package/src/chat/composer/attachments.tsx +0 -176
- package/src/chat/composer/badge-order.ts +0 -65
- package/src/chat/composer/composer-bus.ts +0 -317
- package/src/chat/composer/index.ts +0 -63
- package/src/chat/composer/load-composer-editor.ts +0 -25
- package/src/chat/composer/model-catalog.ts +0 -424
- package/src/chat/composer/model-list-layout.ts +0 -118
- package/src/chat/composer/prompt-history-nav.ts +0 -60
- package/src/chat/composer/scope-side.ts +0 -7
- package/src/chat/composer/suggestion-extension.ts +0 -113
- package/src/chat/composer/suggestions.tsx +0 -115
- package/src/chat/composer/use-agent-profiles.ts +0 -97
- package/src/chat/composer/use-cache-hints.ts +0 -93
- package/src/chat/composer/use-composer-stores.ts +0 -140
- package/src/chat/composer/use-draft-target.ts +0 -317
- package/src/chat/composer/use-new-session-defaults.ts +0 -201
- package/src/chat/composer/use-provider-ready-poll.ts +0 -35
- package/src/chat/composer/use-run-meter.ts +0 -140
- package/src/chat/composer/use-send-prompt.ts +0 -188
- package/src/chat/composer/use-session-meters.ts +0 -109
- package/src/chat/composer/use-sustained-work.ts +0 -74
- package/src/chat/composer/useAttachmentIngest.ts +0 -116
- package/src/chat/composer/useModelListSpy.ts +0 -19
- package/src/chat/headless/badge-refs.ts +0 -76
- package/src/chat/headless/chip-labels.ts +0 -40
- package/src/chat/headless/chip-settle.ts +0 -53
- package/src/chat/headless/chip-views.ts +0 -215
- package/src/chat/headless/composer/attachment-dedupe.ts +0 -50
- package/src/chat/headless/composer/commands.ts +0 -16
- package/src/chat/headless/composer/composer-sources.ts +0 -150
- package/src/chat/headless/composer/conversation-badges.ts +0 -227
- package/src/chat/headless/composer/draft-sync.ts +0 -199
- package/src/chat/headless/composer/editor-markdown.ts +0 -137
- package/src/chat/headless/composer/ghost-autocomplete.ts +0 -381
- package/src/chat/headless/composer/host-chrome.ts +0 -197
- package/src/chat/headless/composer/host.ts +0 -250
- package/src/chat/headless/composer/index.ts +0 -17
- package/src/chat/headless/composer/labels-chrome.ts +0 -83
- package/src/chat/headless/composer/labels-editor.ts +0 -44
- package/src/chat/headless/composer/labels.ts +0 -18
- package/src/chat/headless/composer/live-cost.ts +0 -67
- package/src/chat/headless/composer/model-knobs.ts +0 -179
- package/src/chat/headless/composer/model-names.ts +0 -145
- package/src/chat/headless/composer/model-picker-prefs.ts +0 -90
- package/src/chat/headless/composer/models.ts +0 -86
- package/src/chat/headless/composer/new-session-defaults.ts +0 -68
- package/src/chat/headless/composer/prompt-suggestions.ts +0 -72
- package/src/chat/headless/composer/remember-model-pick.ts +0 -132
- package/src/chat/headless/composer/run-meter.ts +0 -228
- package/src/chat/headless/composer-modes.ts +0 -170
- package/src/chat/headless/draft-scope.ts +0 -136
- package/src/chat/headless/draft-target.ts +0 -87
- package/src/chat/headless/extension-sources.ts +0 -64
- package/src/chat/headless/file-chip.ts +0 -175
- package/src/chat/headless/fixture-host.ts +0 -294
- package/src/chat/headless/fixture-transcript.ts +0 -125
- package/src/chat/headless/fixtures/demo-transcript-all-kinds.ts +0 -233
- package/src/chat/headless/fixtures/demo-transcript.ts +0 -244
- package/src/chat/headless/host.ts +0 -264
- package/src/chat/headless/hosts.ts +0 -55
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -373
- package/src/chat/headless/markdown-chunks.ts +0 -134
- package/src/chat/headless/path-resolver.ts +0 -178
- package/src/chat/headless/prompt-origin.ts +0 -90
- package/src/chat/headless/reference-store.ts +0 -285
- package/src/chat/headless/send-flow.ts +0 -347
- package/src/chat/headless/session-list.ts +0 -400
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -190
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -1046
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/estimates.ts +0 -146
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -18
- package/src/chat/headless/sidebar/labels.ts +0 -161
- package/src/chat/headless/sidebar/notifications.ts +0 -61
- package/src/chat/headless/sidebar/pinned-projects.ts +0 -51
- package/src/chat/headless/sidebar/pinned-sessions.ts +0 -27
- package/src/chat/headless/sidebar/project-icons.ts +0 -116
- package/src/chat/headless/sidebar/query.ts +0 -621
- package/src/chat/headless/sidebar/rows.ts +0 -427
- package/src/chat/headless/sidebar/types.ts +0 -96
- package/src/chat/headless/sidebar/view.ts +0 -367
- package/src/chat/headless/site-icons.ts +0 -51
- package/src/chat/headless/smooth-stream.ts +0 -76
- package/src/chat/headless/store.ts +0 -62
- package/src/chat/headless/streams/actions.ts +0 -85
- package/src/chat/headless/streams/index.ts +0 -25
- package/src/chat/headless/streams/live-events.ts +0 -124
- package/src/chat/headless/streams/merge.ts +0 -60
- package/src/chat/headless/streams/pacer.ts +0 -189
- package/src/chat/headless/streams/prompt-previews.ts +0 -64
- package/src/chat/headless/streams/scheduler.ts +0 -36
- package/src/chat/headless/streams/selectors.ts +0 -76
- package/src/chat/headless/streams/session-streams.ts +0 -407
- package/src/chat/headless/streams/store.ts +0 -1107
- package/src/chat/headless/streams/transcript.ts +0 -41
- package/src/chat/headless/streams/types.ts +0 -84
- package/src/chat/headless/transcript/batch.ts +0 -429
- package/src/chat/headless/transcript/collapse.ts +0 -789
- package/src/chat/headless/transcript/fold-actions.ts +0 -269
- package/src/chat/headless/transcript/fold-attachments.ts +0 -78
- package/src/chat/headless/transcript/fold.ts +0 -382
- package/src/chat/headless/transcript/index.ts +0 -41
- package/src/chat/headless/transcript/nesting.ts +0 -73
- package/src/chat/headless/transcript/pairing.ts +0 -124
- package/src/chat/headless/transcript/rows.ts +0 -377
- package/src/chat/headless/transcript/run-failures.ts +0 -72
- package/src/chat/headless/transcript/select-stops.ts +0 -151
- package/src/chat/headless/transcript/tool-media.ts +0 -42
- package/src/chat/headless/transcript-host.ts +0 -180
- package/src/chat/headless/transcript-labels.ts +0 -12
- package/src/chat/headless/turn-labels.ts +0 -28
- package/src/chat/headless/turn-prompt.ts +0 -32
- package/src/chat/index.ts +0 -31
- package/src/chat/interactions/HostInteractions.tsx +0 -76
- package/src/chat/interactions/InboxPanel.tsx +0 -226
- package/src/chat/interactions/InteractionCard.tsx +0 -111
- package/src/chat/interactions/PlanCard.tsx +0 -186
- package/src/chat/interactions/QuestionField.tsx +0 -336
- package/src/chat/interactions/QuestionForm.tsx +0 -283
- package/src/chat/interactions/card-ui.tsx +0 -86
- package/src/chat/interactions/hooks.ts +0 -49
- package/src/chat/interactions/index.ts +0 -8
- package/src/chat/provider-color.ts +0 -71
- package/src/chat/rich-composer/MentionList.tsx +0 -238
- package/src/chat/rich-composer/RichComposer.tsx +0 -1071
- package/src/chat/rich-composer/badge-decorations.ts +0 -157
- package/src/chat/rich-composer/composer-controls.tsx +0 -102
- package/src/chat/rich-composer/composer-extensions.ts +0 -388
- package/src/chat/rich-composer/composer-keys.ts +0 -416
- package/src/chat/rich-composer/ghost-plugin.ts +0 -89
- package/src/chat/rich-composer/index.ts +0 -3
- package/src/chat/rich-composer/mention-popover.ts +0 -336
- package/src/chat/rich-composer/slash-completion.ts +0 -143
- package/src/chat/rich-composer/use-composer-bus.ts +0 -57
- package/src/chat/rich-composer/use-composer-editor.ts +0 -216
- package/src/chat/rich-composer/use-composer-sources.ts +0 -90
- package/src/chat/rich-composer/use-draft-mirror.ts +0 -398
- package/src/chat/rich-composer/use-editor-handover.ts +0 -45
- package/src/chat/rich-composer/use-extension-composer.ts +0 -80
- package/src/chat/rich-composer/use-ghost-lifecycle.ts +0 -265
- package/src/chat/rich-composer/use-prompt-ghost.ts +0 -90
- package/src/chat/rich-composer/use-staged-attachments.ts +0 -65
- package/src/chat/sidebar/MainSessionRow.tsx +0 -102
- package/src/chat/sidebar/ProjectIcon.tsx +0 -399
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -1039
- package/src/chat/sidebar/SidebarDecoration.tsx +0 -93
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -270
- package/src/chat/sidebar/SidebarFooter.tsx +0 -244
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -263
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarRowView.tsx +0 -151
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -317
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -341
- package/src/chat/sidebar/SpacesSection.tsx +0 -259
- package/src/chat/sidebar/collapsed.ts +0 -61
- package/src/chat/sidebar/index.ts +0 -109
- package/src/chat/sidebar/session-menu.ts +0 -441
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -666
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useAgentNames.ts +0 -12
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSaveViewAsSpace.ts +0 -42
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -128
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -167
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -508
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -159
- package/src/chat/testing/fixture-composer-host.ts +0 -147
- package/src/chat/testing/fixture-sidebar-host.ts +0 -99
- package/src/chat/testing/index.ts +0 -12
- package/src/chat/testing/sidebar.contract.ts +0 -196
- package/src/chat/transcript/BadgeMenu.tsx +0 -241
- package/src/chat/transcript/CardMarkdown.tsx +0 -102
- package/src/chat/transcript/ChipCard.tsx +0 -187
- package/src/chat/transcript/ChipCards.tsx +0 -100
- package/src/chat/transcript/DiffLines.tsx +0 -122
- package/src/chat/transcript/EarlierHistory.tsx +0 -136
- package/src/chat/transcript/EditDiffBlock.tsx +0 -176
- package/src/chat/transcript/FileChip.tsx +0 -361
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -211
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/MermaidDiagram.tsx +0 -484
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -168
- package/src/chat/transcript/ReferenceText.tsx +0 -198
- package/src/chat/transcript/SelectCursor.tsx +0 -118
- package/src/chat/transcript/SelectTurnHint.tsx +0 -81
- package/src/chat/transcript/SelectTurnProvider.tsx +0 -150
- package/src/chat/transcript/SubagentBlock.tsx +0 -224
- package/src/chat/transcript/TranscriptRow.tsx +0 -362
- package/src/chat/transcript/TranscriptSearch.tsx +0 -171
- package/src/chat/transcript/TurnMenu.tsx +0 -217
- package/src/chat/transcript/actions.tsx +0 -77
- package/src/chat/transcript/badges.tsx +0 -155
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- package/src/chat/transcript/extension-renderers.tsx +0 -148
- package/src/chat/transcript/fold-attachments.tsx +0 -221
- package/src/chat/transcript/fold-status.tsx +0 -112
- package/src/chat/transcript/fold-worker.tsx +0 -160
- package/src/chat/transcript/fold.tsx +0 -522
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -66
- package/src/chat/transcript/markdown-cache.ts +0 -84
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -351
- package/src/chat/transcript/messages.tsx +0 -169
- package/src/chat/transcript/notices.tsx +0 -508
- package/src/chat/transcript/prompt-lines.tsx +0 -55
- package/src/chat/transcript/prompt.tsx +0 -258
- package/src/chat/transcript/prose.tsx +0 -171
- package/src/chat/transcript/recent-map.ts +0 -32
- package/src/chat/transcript/references.ts +0 -108
- package/src/chat/transcript/remark-references.ts +0 -157
- package/src/chat/transcript/remark-refs.ts +0 -176
- package/src/chat/transcript/renderer-slots.tsx +0 -35
- package/src/chat/transcript/renderers.tsx +0 -251
- package/src/chat/transcript/row-estimate.ts +0 -158
- package/src/chat/transcript/run-rows.tsx +0 -291
- package/src/chat/transcript/site-icons.ts +0 -27
- package/src/chat/transcript/thumbnails.ts +0 -146
- package/src/chat/transcript/tool-batch.tsx +0 -102
- package/src/chat/transcript/tool-details.tsx +0 -31
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-payload.tsx +0 -76
- package/src/chat/transcript/tool-row.tsx +0 -496
- package/src/chat/transcript/turn-commands.ts +0 -101
- package/src/chat/transcript/use-transcript-rows.ts +0 -195
- package/src/chat/transcript/useComposerSearch.ts +0 -106
- package/src/chat/transcript/useSelectTurnKeys.ts +0 -204
- package/src/chat/transcript/useSettledReveal.ts +0 -57
- package/src/chat/transcript/useStickToBottom.ts +0 -600
- package/src/chat/transcript/useTranscriptFind.ts +0 -70
- package/src/chat/transcript/useTranscriptFindKey.ts +0 -52
- package/src/chat/transcript/useTranscriptScroll.ts +0 -163
- package/src/chat/transcript/useTranscriptSearch.tsx +0 -382
- package/src/chat/transcript/useTranscriptSelectionCopy.ts +0 -63
- package/src/chat/transcript/useWheelHoverPause.ts +0 -79
- package/src/chat/transcript/user-bash.tsx +0 -134
- package/src/chat/transcript-options.ts +0 -51
- package/src/chat/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -156
- package/src/code/code-themes.ts +0 -187
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -429
- package/src/code/editor/DiagnosticAnnotation.tsx +0 -73
- package/src/code/editor/DiagnosticsChip.tsx +0 -85
- package/src/code/editor/DiffView.tsx +0 -197
- package/src/code/editor/EditorColumn.tsx +0 -256
- package/src/code/editor/FileIcon.tsx +0 -89
- package/src/code/editor/FileTabPill.tsx +0 -101
- package/src/code/editor/FileTree.tsx +0 -414
- package/src/code/editor/FileView.tsx +0 -462
- package/src/code/editor/HighlightWorkers.tsx +0 -84
- package/src/code/editor/LanguageEditor.tsx +0 -210
- package/src/code/editor/_vendor/tree-icon-colors.ts +0 -72
- package/src/code/editor/diagnostics.ts +0 -140
- package/src/code/editor/edit-session.ts +0 -32
- package/src/code/editor/environment.tsx +0 -88
- package/src/code/editor/find/FindBar.tsx +0 -126
- package/src/code/editor/find/find-highlight.ts +0 -138
- package/src/code/editor/find/find-model.ts +0 -123
- package/src/code/editor/find/settle-scroll.ts +0 -77
- package/src/code/editor/find/useFind.ts +0 -203
- package/src/code/editor/fs-adapter.ts +0 -37
- package/src/code/editor/index.ts +0 -36
- package/src/code/editor/language.ts +0 -31
- package/src/code/editor/patch-parse.ts +0 -176
- package/src/code/editor/patch-parse.worker.ts +0 -12
- package/src/code/editor/pierre-theme.ts +0 -155
- package/src/code/editor/prime-diff.ts +0 -37
- package/src/code/editor/reveal.ts +0 -58
- package/src/code/editor/scroll-reach.ts +0 -28
- package/src/code/editor/useCodeDocument.ts +0 -226
- package/src/code/editor/useDefinition.ts +0 -159
- package/src/code/editor/useDetachCleanup.ts +0 -36
- package/src/code/editor/useFileDocument.ts +0 -87
- package/src/code/editor/useRevealLine.ts +0 -92
- package/src/code/editor/word-at.ts +0 -145
- package/src/code/highlight.worker.ts +0 -16
- package/src/code/highlighter.ts +0 -181
- package/src/code/highlights.ts +0 -51
- package/src/code/mermaid-lexer.ts +0 -331
- package/src/code/shiki-theme.ts +0 -46
- package/src/components/BrandMark.tsx +0 -118
- package/src/components/Breadcrumb.tsx +0 -105
- package/src/components/BrowserChrome.tsx +0 -189
- package/src/components/BrowserSignIn.tsx +0 -210
- package/src/components/ChoiceCards.tsx +0 -170
- package/src/components/CodeFrame.tsx +0 -225
- package/src/components/ConfirmDialog.tsx +0 -119
- package/src/components/CopyButton.tsx +0 -85
- package/src/components/EditableTitle.tsx +0 -199
- package/src/components/ErrorBoundary.tsx +0 -208
- package/src/components/Form.tsx +0 -593
- package/src/components/Highlighted.tsx +0 -68
- package/src/components/HowItWorks.tsx +0 -123
- package/src/components/IconButton.tsx +0 -101
- package/src/components/IconToggle.tsx +0 -71
- package/src/components/Keycap.tsx +0 -334
- package/src/components/Lightbox.tsx +0 -257
- package/src/components/LoadError.tsx +0 -45
- package/src/components/MediaNav.tsx +0 -85
- package/src/components/Menu.tsx +0 -435
- package/src/components/Overlay.tsx +0 -327
- package/src/components/PanelEmpty.tsx +0 -80
- package/src/components/PanelRows.tsx +0 -107
- package/src/components/PreviewWindow.tsx +0 -53
- package/src/components/ReorderTabs.tsx +0 -103
- package/src/components/RowActionsMenu.tsx +0 -383
- package/src/components/SegmentSpinner.tsx +0 -88
- package/src/components/Segmented.tsx +0 -126
- package/src/components/StepFrame.tsx +0 -151
- package/src/components/Stepper.tsx +0 -157
- package/src/components/Surface.tsx +0 -191
- package/src/components/SwatchPicker.tsx +0 -147
- package/src/components/SwitchGlyph.tsx +0 -56
- package/src/components/TabPill.tsx +0 -188
- package/src/components/ThemeThumb.tsx +0 -52
- package/src/components/ToggleCard.tsx +0 -120
- package/src/components/Tooltip.tsx +0 -288
- package/src/components/ZoomableImage.tsx +0 -322
- package/src/components/button.ts +0 -120
- package/src/components/floating/FloatingSurface.tsx +0 -158
- package/src/components/floating/HoverCard.tsx +0 -143
- package/src/components/floating/Popover.tsx +0 -166
- package/src/components/floating/useAnchoredPosition.ts +0 -186
- package/src/components/floating/usePopover.ts +0 -158
- package/src/components/image-clipboard.ts +0 -70
- package/src/components/keyboard-layout.ts +0 -115
- package/src/components/palette/PaletteList.tsx +0 -432
- package/src/components/palette/PalettePanel.tsx +0 -338
- package/src/components/palette/palette-layout.ts +0 -86
- package/src/components/report-error.ts +0 -142
- package/src/components/zoom.ts +0 -133
- package/src/extensions/ExtensionComponent.tsx +0 -167
- package/src/extensions/ExtensionDialogHost.tsx +0 -445
- package/src/extensions/ExtensionRenderer.tsx +0 -100
- package/src/extensions/ExtensionScreen.tsx +0 -122
- package/src/extensions/ExtensionSettingsPage.tsx +0 -112
- package/src/extensions/ExtensionSettingsPages.tsx +0 -44
- package/src/extensions/ExtensionSettingsSidebar.tsx +0 -373
- package/src/extensions/ExtensionSlot.tsx +0 -213
- package/src/extensions/ExtensionWebview.tsx +0 -104
- package/src/extensions/ExtensionsProvider.tsx +0 -124
- package/src/extensions/SettingsWireForm.tsx +0 -182
- package/src/extensions/headless/dialog-queue.ts +0 -92
- package/src/extensions/headless/effect-channel.ts +0 -50
- package/src/extensions/headless/effect-router.ts +0 -107
- package/src/extensions/headless/fixture-host.ts +0 -381
- package/src/extensions/headless/host.ts +0 -398
- package/src/extensions/headless/index.ts +0 -17
- package/src/extensions/headless/labels.ts +0 -64
- package/src/extensions/headless/links.ts +0 -56
- package/src/extensions/headless/select.ts +0 -249
- package/src/extensions/headless/webview-bridge.ts +0 -127
- package/src/extensions/headless/wire.ts +0 -175
- package/src/extensions/hooks.ts +0 -209
- package/src/extensions/index.ts +0 -25
- package/src/extensions/kit.ts +0 -79
- package/src/extensions/links.tsx +0 -165
- package/src/extensions/testing/contract.ts +0 -382
- package/src/extensions/testing/index.ts +0 -6
- package/src/extensions/useExtensionsLabels.ts +0 -14
- package/src/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -581
- package/src/files/EditorColumn.tsx +0 -453
- package/src/files/EditorEnvironmentRoot.tsx +0 -63
- package/src/files/FilesDiagnosticsChip.tsx +0 -32
- package/src/files/FilesProvider.tsx +0 -58
- package/src/files/FilesTab.tsx +0 -441
- package/src/files/MediaDiff.tsx +0 -61
- package/src/files/MediaView.tsx +0 -170
- package/src/files/ReviewDraft.tsx +0 -88
- package/src/files/ReviewableDiff.tsx +0 -72
- package/src/files/SearchPanel.tsx +0 -325
- package/src/files/TreeColumn.tsx +0 -229
- package/src/files/code-excerpt.ts +0 -265
- package/src/files/code-menu.ts +0 -53
- package/src/files/drafts-store.ts +0 -192
- package/src/files/file-actions.ts +0 -152
- package/src/files/headless/editor-prefs.ts +0 -230
- package/src/files/headless/entries.ts +0 -172
- package/src/files/headless/fixture-host.ts +0 -260
- package/src/files/headless/host.ts +0 -387
- package/src/files/headless/index.ts +0 -14
- package/src/files/headless/labels.ts +0 -123
- package/src/files/headless/lsp-edits.ts +0 -58
- package/src/files/headless/media.ts +0 -57
- package/src/files/headless/name-match.ts +0 -38
- package/src/files/headless/search.ts +0 -23
- package/src/files/headless/view.ts +0 -114
- package/src/files/headless/workspace-diff.ts +0 -82
- package/src/files/index.ts +0 -25
- package/src/files/lazy-tabs.tsx +0 -41
- package/src/files/session-patch.ts +0 -45
- package/src/files/tab-hooks.ts +0 -37
- package/src/files/testing/contract.ts +0 -279
- package/src/files/testing/demo.ts +0 -36
- package/src/files/testing/index.ts +0 -7
- package/src/files/useCodeReview.tsx +0 -177
- package/src/files/useDiagnostics.ts +0 -59
- package/src/files/useDiagnosticsRun.ts +0 -86
- package/src/files/useEntryActions.ts +0 -280
- package/src/files/useFilesDiagnostics.ts +0 -51
- package/src/files/useFilesLabels.ts +0 -14
- package/src/files/useFolderChanges.ts +0 -38
- package/src/files/useLsp.ts +0 -181
- package/src/files/useOpenFiles.ts +0 -402
- package/src/files/useWorkspace.ts +0 -148
- package/src/files/working-tree-diff.ts +0 -142
- package/src/git/BranchMenu.tsx +0 -988
- package/src/git/GitBar.tsx +0 -297
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -390
- package/src/git/MoveSessionDialog.tsx +0 -396
- package/src/git/RemoteFolderPicker.tsx +0 -475
- package/src/git/SyncChip.tsx +0 -275
- package/src/git/WherePicker.tsx +0 -358
- package/src/git/headless/environment.ts +0 -132
- package/src/git/headless/host.ts +0 -353
- package/src/git/headless/index.ts +0 -14
- package/src/git/headless/labels.ts +0 -230
- package/src/git/headless/move.ts +0 -101
- package/src/git/headless/remote-clone.ts +0 -44
- package/src/git/headless/status-reads.ts +0 -77
- package/src/git/headless/switcher.ts +0 -215
- package/src/git/headless/sync.ts +0 -71
- package/src/git/index.ts +0 -17
- package/src/git/testing/contract.ts +0 -551
- package/src/git/testing/index.ts +0 -537
- package/src/git/useEnvironmentChoices.ts +0 -50
- package/src/git/useGitBar.ts +0 -180
- package/src/hooks/keyed-store.ts +0 -65
- package/src/hooks/useDisplayPath.tsx +0 -93
- package/src/hooks/useHydrated.ts +0 -16
- package/src/hooks/useMinuteTick.ts +0 -49
- package/src/hooks/useNearViewport.ts +0 -111
- package/src/hooks/usePersistedState.ts +0 -98
- package/src/hooks/useResizeDrag.ts +0 -240
- package/src/hooks/useTabDrag.ts +0 -88
- package/src/index.ts +0 -119
- package/src/keybindings/KeyCommands.tsx +0 -123
- package/src/keybindings/KeyHint.tsx +0 -78
- package/src/keybindings/KeybindingsProvider.tsx +0 -231
- package/src/keybindings/headless/catalog.ts +0 -360
- package/src/keybindings/headless/commands.ts +0 -77
- package/src/keybindings/headless/fixture-host.ts +0 -51
- package/src/keybindings/headless/host.ts +0 -29
- package/src/keybindings/headless/index.ts +0 -13
- package/src/keybindings/headless/key-scope.ts +0 -91
- package/src/keybindings/headless/labels.ts +0 -14
- package/src/keybindings/headless/overrides.ts +0 -64
- package/src/keybindings/index.ts +0 -15
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- package/src/keybindings/press.ts +0 -80
- package/src/keybindings/testing/contract.ts +0 -139
- package/src/keybindings/testing/index.ts +0 -6
- package/src/keybindings/useHelpKey.ts +0 -35
- package/src/keybindings/useKeybindingsLabels.ts +0 -14
- package/src/labels.tsx +0 -175
- package/src/machines/AddServerForm.tsx +0 -151
- package/src/machines/Banners.tsx +0 -172
- package/src/machines/DaemonMenu.tsx +0 -413
- package/src/machines/HostCapabilities.tsx +0 -245
- package/src/machines/HostSignIn.tsx +0 -63
- package/src/machines/HostSyncPanel.tsx +0 -275
- package/src/machines/HostsSection.tsx +0 -312
- package/src/machines/MachinesProvider.tsx +0 -164
- package/src/machines/ServerCard.tsx +0 -347
- package/src/machines/ServerMachinesPanel.tsx +0 -547
- package/src/machines/ServerUpdatePanel.tsx +0 -160
- package/src/machines/SyncAccounts.tsx +0 -148
- package/src/machines/SyncMarker.tsx +0 -87
- package/src/machines/SyncOutcomeBadge.tsx +0 -84
- package/src/machines/TokensPanel.tsx +0 -249
- package/src/machines/headless/fixture-host.ts +0 -519
- package/src/machines/headless/fixtures.ts +0 -164
- package/src/machines/headless/host.ts +0 -381
- package/src/machines/headless/index.ts +0 -13
- package/src/machines/headless/labels.ts +0 -364
- package/src/machines/headless/messages.ts +0 -209
- package/src/machines/headless/presence.ts +0 -110
- package/src/machines/headless/settings-focus.ts +0 -25
- package/src/machines/headless/stores.ts +0 -137
- package/src/machines/headless/sync.ts +0 -207
- package/src/machines/index.ts +0 -29
- package/src/machines/settings-section.tsx +0 -37
- package/src/machines/testing/contract.ts +0 -617
- package/src/machines/testing/index.ts +0 -7
- package/src/machines/testing/sync.contract.ts +0 -260
- package/src/motion/SwapIcon.tsx +0 -29
- package/src/motion/collapse.ts +0 -21
- package/src/motion/grow.tsx +0 -86
- package/src/motion/layout-animating.ts +0 -50
- package/src/motion/presence.ts +0 -191
- package/src/motion/provider.tsx +0 -63
- package/src/motion/reduced.ts +0 -36
- package/src/motion/roll.tsx +0 -131
- package/src/motion/shimmer.ts +0 -15
- package/src/motion/size.tsx +0 -192
- package/src/motion/springs.ts +0 -413
- package/src/motion/swap.tsx +0 -216
- package/src/motion/title-text.tsx +0 -74
- package/src/onboarding/ConnectProviderCard.tsx +0 -49
- package/src/onboarding/OnboardingFlow.tsx +0 -176
- package/src/onboarding/OnboardingProvider.tsx +0 -209
- package/src/onboarding/OnboardingStepFrame.tsx +0 -80
- package/src/onboarding/conversation.tsx +0 -196
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -488
- package/src/onboarding/demos/how-it-works.tsx +0 -698
- package/src/onboarding/demos/index.ts +0 -11
- package/src/onboarding/demos/parts.tsx +0 -133
- package/src/onboarding/demos/tour.tsx +0 -217
- package/src/onboarding/headless/controller.ts +0 -110
- package/src/onboarding/headless/fixture-host.ts +0 -269
- package/src/onboarding/headless/fixtures.ts +0 -486
- package/src/onboarding/headless/host.ts +0 -176
- package/src/onboarding/headless/index.ts +0 -8
- package/src/onboarding/headless/labels.ts +0 -282
- package/src/onboarding/index.ts +0 -21
- package/src/onboarding/marks.tsx +0 -107
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -128
- package/src/onboarding/skills/parts.tsx +0 -464
- package/src/onboarding/sources/SourceBrowser.tsx +0 -400
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -222
- package/src/onboarding/steps/ConversationStep.tsx +0 -132
- package/src/onboarding/steps/ExtensionsStep.tsx +0 -113
- package/src/onboarding/steps/FeatureExample.tsx +0 -46
- package/src/onboarding/steps/FeaturesStep.tsx +0 -88
- package/src/onboarding/steps/ImportStep.tsx +0 -156
- package/src/onboarding/steps/LookStep.tsx +0 -276
- package/src/onboarding/steps/ReadyStep.tsx +0 -278
- package/src/onboarding/steps/SkillsStep.tsx +0 -45
- package/src/onboarding/steps/StepSection.tsx +0 -63
- package/src/onboarding/steps/Tradeoff.tsx +0 -45
- package/src/onboarding/steps/WelcomeStep.tsx +0 -147
- package/src/onboarding/steps/connect/KeyForm.tsx +0 -112
- package/src/onboarding/steps/connect/ProviderPanel.tsx +0 -149
- package/src/onboarding/steps/connect/ProviderReady.tsx +0 -171
- package/src/onboarding/steps/connect/ready-text.ts +0 -17
- package/src/onboarding/steps/index.ts +0 -12
- package/src/onboarding/steps/tasks.tsx +0 -84
- package/src/onboarding/testing/contract.ts +0 -472
- package/src/onboarding/testing/index.ts +0 -7
- package/src/onboarding/tutorials.tsx +0 -45
- package/src/onboarding/useSignIn.ts +0 -58
- package/src/palette/CommandPalette.tsx +0 -59
- package/src/palette/PaletteDialog.tsx +0 -186
- package/src/palette/PaletteProvider.tsx +0 -149
- package/src/palette/PaletteRows.tsx +0 -208
- package/src/palette/app-sources.ts +0 -62
- package/src/palette/headless/app-sources.ts +0 -515
- package/src/palette/headless/gather.ts +0 -50
- package/src/palette/headless/host.ts +0 -129
- package/src/palette/headless/index.ts +0 -15
- package/src/palette/headless/labels.ts +0 -124
- package/src/palette/headless/rank-protocol.ts +0 -23
- package/src/palette/headless/recents.ts +0 -35
- package/src/palette/headless/session-sources.ts +0 -218
- package/src/palette/headless/sources.ts +0 -313
- package/src/palette/headless/store.ts +0 -105
- package/src/palette/index.ts +0 -17
- package/src/palette/rank.worker.ts +0 -30
- package/src/palette/setup.ts +0 -19
- package/src/palette/testing/contract.ts +0 -250
- package/src/palette/testing/index.ts +0 -152
- package/src/palette/useConversationSearch.ts +0 -115
- package/src/palette/usePaletteController.ts +0 -229
- package/src/palette/useRankedItems.ts +0 -122
- package/src/path.ts +0 -199
- package/src/server/demo-tools.ts +0 -34
- package/src/server/environment.ts +0 -118
- package/src/server/index.ts +0 -7
- package/src/server/scripted-provider.ts +0 -174
- package/src/server/sse-handler.ts +0 -457
- package/src/server/testing/index.ts +0 -7
- package/src/session/ArtifactRowChips.tsx +0 -260
- package/src/session/ArtifactsPanel.tsx +0 -426
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProjectHome.tsx +0 -733
- package/src/session/ProviderUsageProvider.tsx +0 -113
- package/src/session/QueueTab.tsx +0 -669
- package/src/session/RunningWorkDialog.tsx +0 -178
- package/src/session/SessionCacheFacts.tsx +0 -190
- package/src/session/SessionDetailsDialog.tsx +0 -627
- package/src/session/SessionHeader.tsx +0 -242
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -320
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -279
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -358
- package/src/session/WelcomeScreen.tsx +0 -88
- package/src/session/headless/artifacts.ts +0 -101
- package/src/session/headless/diff-tree.ts +0 -167
- package/src/session/headless/fixture-host.ts +0 -362
- package/src/session/headless/home-layout.ts +0 -276
- package/src/session/headless/host.ts +0 -263
- package/src/session/headless/index.ts +0 -23
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -337
- package/src/session/headless/queue-attachments.ts +0 -73
- package/src/session/headless/queue.ts +0 -122
- package/src/session/headless/running-work.ts +0 -85
- package/src/session/headless/session-actions.ts +0 -198
- package/src/session/headless/session-diffs.ts +0 -136
- package/src/session/headless/side.ts +0 -63
- package/src/session/headless/todos.ts +0 -62
- package/src/session/headless/usage-format.ts +0 -19
- package/src/session/headless/usage.ts +0 -407
- package/src/session/index.ts +0 -31
- package/src/session/modal-shell.tsx +0 -24
- package/src/session/testing/contract.ts +0 -588
- package/src/session/testing/demo.ts +0 -224
- package/src/session/testing/index.ts +0 -7
- package/src/session/useSessionLabels.ts +0 -14
- package/src/session/useUsageSummary.ts +0 -82
- package/src/settings/SettingsHeadingText.tsx +0 -54
- package/src/settings/SettingsHostSwitcher.tsx +0 -93
- package/src/settings/SettingsNav.tsx +0 -198
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -218
- package/src/settings/SettingsShell.tsx +0 -337
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -570
- package/src/settings/headless/claude-import.ts +0 -61
- package/src/settings/headless/enabled.ts +0 -44
- package/src/settings/headless/fixture-accounts.ts +0 -260
- package/src/settings/headless/fixture-host.ts +0 -162
- package/src/settings/headless/fixture-models.ts +0 -51
- package/src/settings/headless/fixture-performance.ts +0 -350
- package/src/settings/headless/fixture-sections.ts +0 -391
- package/src/settings/headless/host.ts +0 -127
- package/src/settings/headless/index.ts +0 -22
- package/src/settings/headless/labels.ts +0 -63
- package/src/settings/headless/layout-sections.ts +0 -41
- package/src/settings/headless/layout.ts +0 -732
- package/src/settings/headless/mcp.ts +0 -319
- package/src/settings/headless/models.ts +0 -51
- package/src/settings/headless/page-counts.ts +0 -40
- package/src/settings/headless/performance.ts +0 -524
- package/src/settings/headless/providers.ts +0 -117
- package/src/settings/headless/registry.ts +0 -62
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -340
- package/src/settings/index.ts +0 -32
- package/src/settings/rows.tsx +0 -152
- package/src/settings/section.tsx +0 -165
- package/src/settings/sections/appearance/AppearanceSection.tsx +0 -667
- package/src/settings/sections/appearance/labels.ts +0 -77
- package/src/settings/sections/claude-import/ClaudeImportDialog.tsx +0 -258
- package/src/settings/sections/claude-import/labels.ts +0 -42
- package/src/settings/sections/claude-import/use-claude-import-available.ts +0 -35
- package/src/settings/sections/descriptors.tsx +0 -261
- package/src/settings/sections/editor/EditorSection.tsx +0 -521
- package/src/settings/sections/editor/labels.ts +0 -84
- package/src/settings/sections/enabled-list/EnabledListSection.tsx +0 -112
- package/src/settings/sections/enabled-list/labels.ts +0 -37
- package/src/settings/sections/environments/EnvironmentsSection.tsx +0 -549
- package/src/settings/sections/environments/labels.ts +0 -31
- package/src/settings/sections/extensions/ChangeOriginDialog.tsx +0 -218
- package/src/settings/sections/extensions/CreateExtensionDialog.tsx +0 -210
- package/src/settings/sections/extensions/ExtensionConfigRows.tsx +0 -508
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -356
- package/src/settings/sections/extensions/ExtensionPicksBar.tsx +0 -112
- package/src/settings/sections/extensions/ExtensionSourceBrowser.tsx +0 -244
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -665
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -64
- package/src/settings/sections/extensions/options-labels.ts +0 -34
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -457
- package/src/settings/sections/host-catalog/labels.ts +0 -44
- package/src/settings/sections/index.ts +0 -60
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -385
- package/src/settings/sections/instructions/labels.ts +0 -33
- package/src/settings/sections/keybindings/KeybindingsSection.tsx +0 -124
- package/src/settings/sections/keybindings/labels.ts +0 -72
- package/src/settings/sections/keybindings/rows.ts +0 -103
- package/src/settings/sections/logs/LogsSection.tsx +0 -153
- package/src/settings/sections/logs/labels.ts +0 -20
- package/src/settings/sections/mcp/McpAddForm.tsx +0 -245
- package/src/settings/sections/mcp/McpSection.tsx +0 -358
- package/src/settings/sections/mcp/McpServerRow.tsx +0 -404
- package/src/settings/sections/mcp/labels.ts +0 -193
- package/src/settings/sections/models/AgentDefaults.tsx +0 -365
- package/src/settings/sections/models/ModelListPicker.tsx +0 -265
- package/src/settings/sections/models/ModelPickField.tsx +0 -220
- package/src/settings/sections/models/ModelRows.tsx +0 -381
- package/src/settings/sections/models/SpacesDefaultsSection.tsx +0 -102
- package/src/settings/sections/models/labels.ts +0 -119
- package/src/settings/sections/models/model-test.tsx +0 -125
- package/src/settings/sections/performance/PerfSparkline.tsx +0 -64
- package/src/settings/sections/performance/PerformanceHud.tsx +0 -110
- package/src/settings/sections/performance/PerformanceSection.tsx +0 -770
- package/src/settings/sections/performance/labels.ts +0 -114
- package/src/settings/sections/performance/use-perf-monitor.ts +0 -26
- package/src/settings/sections/plugins/PluginsSection.tsx +0 -151
- package/src/settings/sections/plugins/labels.ts +0 -23
- package/src/settings/sections/providers/CredentialSources.tsx +0 -237
- package/src/settings/sections/providers/ProvidersSection.tsx +0 -389
- package/src/settings/sections/providers/ServerProvidersSection.tsx +0 -244
- package/src/settings/sections/providers/ServerSignIn.tsx +0 -137
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -265
- package/src/settings/sections/shared/labels.ts +0 -31
- package/src/settings/sections/skills/SkillList.tsx +0 -494
- package/src/settings/sections/skills/SkillsSection.tsx +0 -249
- package/src/settings/sections/skills/labels.ts +0 -54
- package/src/settings/sections/use-section-labels.ts +0 -10
- package/src/settings/testing/accounts-demo.ts +0 -110
- package/src/settings/testing/accounts.contract.ts +0 -319
- package/src/settings/testing/claude-import.contract.ts +0 -93
- package/src/settings/testing/contract.ts +0 -192
- package/src/settings/testing/extension-options.contract.ts +0 -163
- package/src/settings/testing/index.ts +0 -11
- package/src/settings/testing/models.contract.ts +0 -135
- package/src/settings/testing/performance.contract.ts +0 -219
- package/src/settings/testing/sections.contract.ts +0 -306
- package/src/terminal/HostTerminalSurface.tsx +0 -917
- package/src/terminal/TerminalDrawer.tsx +0 -228
- package/src/terminal/TerminalPanel.tsx +0 -740
- package/src/terminal/TerminalProvider.tsx +0 -201
- package/src/terminal/TerminalSurface.tsx +0 -262
- package/src/terminal/box-glyphs.ts +0 -333
- package/src/terminal/ghostty.ts +0 -116
- package/src/terminal/grid-size.ts +0 -46
- package/src/terminal/headless/fixture-host.ts +0 -250
- package/src/terminal/headless/host.ts +0 -99
- package/src/terminal/headless/index.ts +0 -11
- package/src/terminal/headless/labels.ts +0 -69
- package/src/terminal/headless/layout.ts +0 -57
- package/src/terminal/headless/links.ts +0 -227
- package/src/terminal/headless/order.ts +0 -28
- package/src/terminal/headless/output-cursor.ts +0 -66
- package/src/terminal/headless/recent.ts +0 -20
- package/src/terminal/headless/replay.ts +0 -45
- package/src/terminal/headless/scope.ts +0 -60
- package/src/terminal/headless/store.ts +0 -637
- package/src/terminal/index.ts +0 -40
- package/src/terminal/keys.ts +0 -34
- package/src/terminal/testing/contract.ts +0 -274
- package/src/terminal/testing/demo.ts +0 -40
- package/src/terminal/testing/index.ts +0 -7
- package/src/terminal/theme.ts +0 -110
- package/src/terminal/useTerminalLabels.ts +0 -14
- package/src/theme/accents.ts +0 -46
- package/src/theme/color.ts +0 -450
- package/src/theme/css-vars.ts +0 -187
- package/src/theme/derive.ts +0 -700
- package/src/theme/from-theme.ts +0 -52
- package/src/theme/stylesheet.ts +0 -55
- package/src/theme/themes.ts +0 -767
- package/src/theme/without-transitions.ts +0 -18
- package/src/uno.ts +0 -167
- package/src/workspace/LayoutBudget.tsx +0 -143
- package/src/workspace/PanelContentView.tsx +0 -523
- package/src/workspace/PanelCorner.tsx +0 -111
- package/src/workspace/PanelGroups.tsx +0 -264
- package/src/workspace/PanelHome.tsx +0 -71
- package/src/workspace/PanelItems.tsx +0 -368
- package/src/workspace/PanelStrip.tsx +0 -316
- package/src/workspace/SidePanel.tsx +0 -240
- package/src/workspace/TabParking.tsx +0 -120
- package/src/workspace/WorkspaceProvider.tsx +0 -558
- package/src/workspace/dnd/engine.ts +0 -371
- package/src/workspace/dnd/hooks.ts +0 -72
- package/src/workspace/dnd/index.ts +0 -57
- package/src/workspace/dnd/parking.tsx +0 -181
- package/src/workspace/extension-tabs.tsx +0 -174
- package/src/workspace/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -129
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -44
- package/src/workspace/headless/layout-memory.ts +0 -649
- package/src/workspace/headless/layouts.ts +0 -224
- package/src/workspace/headless/open-target.ts +0 -125
- package/src/workspace/headless/ops.ts +0 -163
- package/src/workspace/headless/panel-focus.ts +0 -58
- package/src/workspace/headless/panel-tree.ts +0 -259
- package/src/workspace/headless/resolve.ts +0 -146
- package/src/workspace/headless/reveal-at.ts +0 -27
- package/src/workspace/headless/strip-drop.ts +0 -81
- package/src/workspace/headless/tree.ts +0 -480
- package/src/workspace/headless/view.ts +0 -164
- package/src/workspace/index.ts +0 -23
- package/src/workspace/panel-group-keys.ts +0 -36
- package/src/workspace/panel-visibility.ts +0 -28
- package/src/workspace/tab-scopes.ts +0 -245
- package/src/workspace/testing/contract.ts +0 -282
- package/src/workspace/testing/index.ts +0 -140
- package/src/workspace/use-split-drag.ts +0 -73
- package/src/workspace/useScopeLayout.ts +0 -26
- package/src/workspace/useViewport.ts +0 -22
- package/src/workspace/useWorkspaceLabels.ts +0 -14
- package/src/workspace/workspace-key-commands.ts +0 -108
- /package/dist/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +0 -0
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-session counters of the current run, for the composer's run chip and
|
|
3
|
-
* the cost pill: when it started, the output tokens of its settled parent
|
|
4
|
-
* turns, the cost of turns settled since the last cost read, and the
|
|
5
|
-
* streaming turn's live counters (`stream:progress`).
|
|
6
|
-
*
|
|
7
|
-
* Kept per session, outside React, from every session's stream signals
|
|
8
|
-
* (`handle`): an app keeps one for the window's life, so switching
|
|
9
|
-
* conversations never resets them. The live counters tick about 4 times a
|
|
10
|
-
* second, so only the pills read them.
|
|
11
|
-
*/
|
|
12
|
-
import type { Readable } from '../store';
|
|
13
|
-
import type { LiveStreamProgress } from './live-cost';
|
|
14
|
-
|
|
15
|
-
/** One session's run counters. */
|
|
16
|
-
export interface RunMeterState {
|
|
17
|
-
/**
|
|
18
|
-
* When the run began: the host's `run:start` stamp, else its saved run
|
|
19
|
-
* record (a session row's `runStartedAt`, or the read of a run this window
|
|
20
|
-
* joined mid-way), else when this window first saw it (an older host, which
|
|
21
|
-
* sends neither).
|
|
22
|
-
*/
|
|
23
|
-
startedAt: number | null;
|
|
24
|
-
/** Where `startedAt` came from: the host's own signal wins, the run's record corrects a first sighting. */
|
|
25
|
-
startedFrom: 'host' | 'record' | 'seen' | null;
|
|
26
|
-
/**
|
|
27
|
-
* Output tokens of the run's settled parent turns: the host's count from
|
|
28
|
-
* each `turn:end` (`runOutputTokens`) or the joined run's read, summed
|
|
29
|
-
* here only for an older host.
|
|
30
|
-
*/
|
|
31
|
-
outputTokens: number;
|
|
32
|
-
/** Σ `turn:end` usage cost since the last cost read that settled it (`settleCost`). */
|
|
33
|
-
accruedCost: number;
|
|
34
|
-
/**
|
|
35
|
-
* Bumped at each run's start and end: a read issued during one run must
|
|
36
|
-
* not land on the next state (settle a newer run's accrual, seed a run
|
|
37
|
-
* that has ended).
|
|
38
|
-
*/
|
|
39
|
-
generation: number;
|
|
40
|
-
/** The streaming parent turn's live counters, `null` between turns. */
|
|
41
|
-
progress: LiveStreamProgress | null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** The counters of a session with no run seen. */
|
|
45
|
-
export const EMPTY_RUN_METER: RunMeterState = Object.freeze({
|
|
46
|
-
startedAt: null,
|
|
47
|
-
startedFrom: null,
|
|
48
|
-
outputTokens: 0,
|
|
49
|
-
accruedCost: 0,
|
|
50
|
-
generation: 0,
|
|
51
|
-
progress: null,
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
/** The stream signals the meter follows (the host's `HostSignal` variants, structurally). */
|
|
55
|
-
export type RunMeterSignal =
|
|
56
|
-
| { kind: 'run:start'; sessionId: string; startedAt?: number }
|
|
57
|
-
| {
|
|
58
|
-
kind: 'stream:progress';
|
|
59
|
-
sessionId: string;
|
|
60
|
-
turnId: string;
|
|
61
|
-
outputTokens: number;
|
|
62
|
-
estimated: boolean;
|
|
63
|
-
elapsedMs: number;
|
|
64
|
-
estCostUsd?: number;
|
|
65
|
-
}
|
|
66
|
-
| {
|
|
67
|
-
kind: 'turn:end';
|
|
68
|
-
sessionId: string;
|
|
69
|
-
childId?: string;
|
|
70
|
-
usage?: { output?: number; cost?: number };
|
|
71
|
-
runOutputTokens?: number;
|
|
72
|
-
}
|
|
73
|
-
| { kind: 'run:end'; sessionId: string };
|
|
74
|
-
|
|
75
|
-
/** A session row's word on its run (the session list's `runStartedAt`). */
|
|
76
|
-
export interface RunMeterRow {
|
|
77
|
-
/** The session. */
|
|
78
|
-
id: string;
|
|
79
|
-
/** Its status (`running` counts). */
|
|
80
|
-
status: string;
|
|
81
|
-
/** When its run began (epoch ms). */
|
|
82
|
-
runStartedAt?: number;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** The run counters of every session. */
|
|
86
|
-
export interface RunMeter {
|
|
87
|
-
/** Follows one stream signal. Other kinds are ignored. */
|
|
88
|
-
handle(signal: { kind: string; sessionId?: string }): void;
|
|
89
|
-
/** Drops a deleted session's counters. */
|
|
90
|
-
forget(sessionId: string): void;
|
|
91
|
-
/** A session's counters as a store (one per session, the same each call). */
|
|
92
|
-
session(sessionId: string): Readable<RunMeterState>;
|
|
93
|
-
/** A session's counters now. */
|
|
94
|
-
get(sessionId: string): RunMeterState;
|
|
95
|
-
/** A running run with no start known yet counts from now. */
|
|
96
|
-
noteSeen(sessionId: string): void;
|
|
97
|
-
/** The session list's run starts: a window that missed a `run:start` times the run from its real start. */
|
|
98
|
-
noteStarts(rows: readonly RunMeterRow[]): void;
|
|
99
|
-
/** A run this window joined midway, as its host counts it; dropped when the run changed while it was read. */
|
|
100
|
-
noteProgress(sessionId: string, generation: number, progress: { startedAt: number; outputTokens: number }): void;
|
|
101
|
-
/** The session's run generation, to hand back to `settleCost` / `noteProgress`. */
|
|
102
|
-
generation(sessionId: string): number;
|
|
103
|
-
/** A cost read issued while idle settled every turn: zero the accrual, unless a newer run started since. */
|
|
104
|
-
settleCost(sessionId: string, generation: number): void;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Creates an empty {@link RunMeter}.
|
|
109
|
-
*
|
|
110
|
-
* @param now - The clock (epoch ms), for runs whose start the host does not stamp.
|
|
111
|
-
*/
|
|
112
|
-
export function createRunMeter(now: () => number = () => Date.now()): RunMeter {
|
|
113
|
-
const meters = new Map<string, RunMeterState>();
|
|
114
|
-
const listeners = new Map<string, Set<() => void>>();
|
|
115
|
-
const stores = new Map<string, Readable<RunMeterState>>();
|
|
116
|
-
|
|
117
|
-
const get = (sessionId: string): RunMeterState => meters.get(sessionId) ?? EMPTY_RUN_METER;
|
|
118
|
-
const notify = (sessionId: string) => {
|
|
119
|
-
for (const listener of listeners.get(sessionId) ?? []) listener();
|
|
120
|
-
};
|
|
121
|
-
const update = (sessionId: string, patch: Partial<RunMeterState>): void => {
|
|
122
|
-
const prev = get(sessionId);
|
|
123
|
-
const next = { ...prev, ...patch };
|
|
124
|
-
if ((Object.keys(patch) as (keyof RunMeterState)[]).every((k) => prev[k] === next[k])) return;
|
|
125
|
-
meters.set(sessionId, next);
|
|
126
|
-
notify(sessionId);
|
|
127
|
-
};
|
|
128
|
-
const subscribe = (sessionId: string, listener: () => void): (() => void) => {
|
|
129
|
-
let set = listeners.get(sessionId);
|
|
130
|
-
if (!set) {
|
|
131
|
-
set = new Set();
|
|
132
|
-
listeners.set(sessionId, set);
|
|
133
|
-
}
|
|
134
|
-
set.add(listener);
|
|
135
|
-
return () => {
|
|
136
|
-
set.delete(listener);
|
|
137
|
-
if (set.size === 0 && listeners.get(sessionId) === set) listeners.delete(sessionId);
|
|
138
|
-
};
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const handle = (raw: { kind: string; sessionId?: string }): void => {
|
|
142
|
-
if (typeof raw.sessionId !== 'string') return;
|
|
143
|
-
const signal = raw as RunMeterSignal;
|
|
144
|
-
const id = signal.sessionId;
|
|
145
|
-
const meter = get(id);
|
|
146
|
-
switch (signal.kind) {
|
|
147
|
-
case 'run:start':
|
|
148
|
-
update(id, {
|
|
149
|
-
startedAt: signal.startedAt ?? now(),
|
|
150
|
-
startedFrom: signal.startedAt !== undefined ? 'host' : 'seen',
|
|
151
|
-
outputTokens: 0,
|
|
152
|
-
// The previous run's turns are in `run.cost` now; this run accrues from zero.
|
|
153
|
-
accruedCost: 0,
|
|
154
|
-
generation: meter.generation + 1,
|
|
155
|
-
progress: null,
|
|
156
|
-
});
|
|
157
|
-
return;
|
|
158
|
-
case 'stream:progress':
|
|
159
|
-
update(id, {
|
|
160
|
-
progress: {
|
|
161
|
-
turnId: signal.turnId,
|
|
162
|
-
outputTokens: signal.outputTokens,
|
|
163
|
-
estimated: signal.estimated,
|
|
164
|
-
elapsedMs: signal.elapsedMs,
|
|
165
|
-
...(signal.estCostUsd !== undefined ? { estCostUsd: signal.estCostUsd } : {}),
|
|
166
|
-
},
|
|
167
|
-
});
|
|
168
|
-
return;
|
|
169
|
-
case 'turn:end': {
|
|
170
|
-
const parent = signal.childId === undefined;
|
|
171
|
-
// The host's count as is: one this window seeded mid-run never takes a turn twice.
|
|
172
|
-
const outputTokens = signal.runOutputTokens ?? meter.outputTokens + (signal.usage?.output ?? 0);
|
|
173
|
-
update(id, {
|
|
174
|
-
...(parent ? { progress: null, outputTokens } : {}),
|
|
175
|
-
accruedCost: meter.accruedCost + (signal.usage?.cost ?? 0),
|
|
176
|
-
});
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
case 'run:end':
|
|
180
|
-
update(id, { progress: null, startedAt: null, startedFrom: null, generation: meter.generation + 1 });
|
|
181
|
-
return;
|
|
182
|
-
default:
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
return {
|
|
187
|
-
handle,
|
|
188
|
-
forget(sessionId) {
|
|
189
|
-
stores.delete(sessionId);
|
|
190
|
-
if (meters.delete(sessionId)) notify(sessionId);
|
|
191
|
-
},
|
|
192
|
-
session(sessionId) {
|
|
193
|
-
let store = stores.get(sessionId);
|
|
194
|
-
if (!store) {
|
|
195
|
-
store = { get: () => get(sessionId), subscribe: (listener) => subscribe(sessionId, listener) };
|
|
196
|
-
stores.set(sessionId, store);
|
|
197
|
-
}
|
|
198
|
-
return store;
|
|
199
|
-
},
|
|
200
|
-
get,
|
|
201
|
-
noteSeen(sessionId) {
|
|
202
|
-
if (get(sessionId).startedAt === null) update(sessionId, { startedAt: now(), startedFrom: 'seen' });
|
|
203
|
-
},
|
|
204
|
-
noteStarts(rows) {
|
|
205
|
-
for (const row of rows) {
|
|
206
|
-
if (row.status !== 'running' || row.runStartedAt === undefined) continue;
|
|
207
|
-
const meter = get(row.id);
|
|
208
|
-
// The host's own `run:start` stamp stays: a row can be older than it.
|
|
209
|
-
if (meter.startedFrom !== 'host' && meter.startedAt !== row.runStartedAt) {
|
|
210
|
-
update(row.id, { startedAt: row.runStartedAt, startedFrom: 'record' });
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
},
|
|
214
|
-
noteProgress(sessionId, generation, progress) {
|
|
215
|
-
const meter = get(sessionId);
|
|
216
|
-
if (meter.generation !== generation) return;
|
|
217
|
-
update(sessionId, {
|
|
218
|
-
...(meter.startedFrom !== 'host' ? { startedAt: progress.startedAt, startedFrom: 'record' as const } : {}),
|
|
219
|
-
// Never back: a `turn:end` that came meanwhile carries a newer count.
|
|
220
|
-
outputTokens: Math.max(meter.outputTokens, progress.outputTokens),
|
|
221
|
-
});
|
|
222
|
-
},
|
|
223
|
-
generation: (sessionId) => get(sessionId).generation,
|
|
224
|
-
settleCost(sessionId, generation) {
|
|
225
|
-
if (get(sessionId).generation === generation) update(sessionId, { accruedCost: 0 });
|
|
226
|
-
},
|
|
227
|
-
};
|
|
228
|
-
}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Composer prompt modes — pure state-machine helpers for the `!` (shell)
|
|
3
|
-
* and `?` (transcript search) sentinels, mirroring the TUI's grammar
|
|
4
|
-
* (src/tui/prompt/ `useSyncBuffer` / `usePromptKeyDown`):
|
|
5
|
-
*
|
|
6
|
-
* - Entry: the sentinel must be TYPED as the first character of an
|
|
7
|
-
* empty composer (exactly-one-char transition — pasted/recalled
|
|
8
|
-
* `!cmd` stays literal text). The sentinel is consumed; it never
|
|
9
|
-
* enters the buffer.
|
|
10
|
-
* - Exit: Backspace with the caret at offset 0 leaves the mode
|
|
11
|
-
* (search also exits on Delete-at-0 and on Esc; shell does NOT
|
|
12
|
-
* exit on Esc — TUI parity).
|
|
13
|
-
* - Submit (shell): the bang is re-attached (`!cmd`) so the host
|
|
14
|
-
* routing and prompt history keep the TUI's on-disk grammar; a
|
|
15
|
-
* blank command is a no-op.
|
|
16
|
-
* - History: `!`-prefixed entries recall INTO shell mode with the
|
|
17
|
-
* bang stripped; stashing a shell-mode draft re-encodes the bang.
|
|
18
|
-
*
|
|
19
|
-
* Kept free of TipTap/React so the grammar is unit-testable.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
export type ComposerMode = 'normal' | 'shell' | 'search';
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Mode entered by typing `char` into the composer, or `null` when the
|
|
26
|
-
* keystroke should be handled as ordinary input. Requires an empty
|
|
27
|
-
* buffer and no active mode — matches the TUI's exactly-`!` /
|
|
28
|
-
* exactly-`?` on `lastSynced === ''` checks (`useSyncBuffer`,
|
|
29
|
-
* src/tui/prompt/use-sync-buffer.ts).
|
|
30
|
-
*
|
|
31
|
-
* @param char - The character just typed.
|
|
32
|
-
* @param mode - The composer's mode now.
|
|
33
|
-
* @param bufferEmpty - Whether the composer was empty before it.
|
|
34
|
-
*/
|
|
35
|
-
export function modeForTypedChar(char: string, mode: ComposerMode, bufferEmpty: boolean): ComposerMode | null {
|
|
36
|
-
if (mode !== 'normal' || !bufferEmpty) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (char === '!') {
|
|
41
|
-
return 'shell';
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (char === '?') {
|
|
45
|
-
return 'search';
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Is the caret effectively at the buffer start for the mode-exit check?
|
|
53
|
-
*
|
|
54
|
-
* The obvious answer (`selection.empty && from === atStart`) misses a
|
|
55
|
-
* ProseMirror trap: Cmd/Ctrl+A creates an `AllSelection`, and deleting
|
|
56
|
-
* it leaves that SAME AllSelection spanning the now-empty doc — `empty`
|
|
57
|
-
* stays `false`, `from` stays `0` — until a click or a typed character
|
|
58
|
-
* replaces it. Without the empty-doc escape hatch, Backspace after a
|
|
59
|
-
* select-all-clear can never exit shell mode (Esc doesn't exit it
|
|
60
|
-
* either), so the mode — and its ghost-autocomplete suppression — stick
|
|
61
|
-
* for the rest of the draft.
|
|
62
|
-
*
|
|
63
|
-
* A Backspace on an empty doc is a no-op edit whatever the selection
|
|
64
|
-
* shape — exactly the TUI's "backspace at offset 0" exit trigger
|
|
65
|
-
* (`handleShellExitKey`, src/tui/prompt/prompt-key-handlers.ts).
|
|
66
|
-
*
|
|
67
|
-
* @param selection - The editor's selection: where the caret is and whether it spans text.
|
|
68
|
-
* @param atStartPos - The document position of the start of the text.
|
|
69
|
-
* @param docEmpty - Whether the document holds no text.
|
|
70
|
-
*/
|
|
71
|
-
export function caretEffectivelyAtStart(
|
|
72
|
-
selection: { empty: boolean; from: number },
|
|
73
|
-
atStartPos: number,
|
|
74
|
-
docEmpty: boolean,
|
|
75
|
-
): boolean {
|
|
76
|
-
if (selection.empty) {
|
|
77
|
-
return selection.from === atStartPos;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return docEmpty;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Whether `key` (a DOM `KeyboardEvent.key`) exits the active mode.
|
|
85
|
-
* `caretAtStart` = collapsed selection at buffer offset 0.
|
|
86
|
-
*
|
|
87
|
-
* - shell: Backspace-at-0 only (`handleShellExitKey`) — Esc stays free
|
|
88
|
-
* for its global meaning (stop run).
|
|
89
|
-
* - search: Backspace/Delete-at-0 (`isTranscriptSearchExitKey`,
|
|
90
|
-
* src/tui/prompt/prompt-key-handlers.ts) or Esc (`usePromptModes`,
|
|
91
|
-
* src/tui/prompt/use-prompt-modes.ts).
|
|
92
|
-
*
|
|
93
|
-
* @param mode - The composer's mode now.
|
|
94
|
-
* @param key - The key pressed (`KeyboardEvent.key`).
|
|
95
|
-
* @param caretAtStart - Whether the caret is at the start of the text.
|
|
96
|
-
*/
|
|
97
|
-
export function exitsModeOnKey(mode: ComposerMode, key: string, caretAtStart: boolean): boolean {
|
|
98
|
-
if (mode === 'shell') {
|
|
99
|
-
return key === 'Backspace' && caretAtStart;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (mode === 'search') {
|
|
103
|
-
return key === 'Escape' || ((key === 'Backspace' || key === 'Delete') && caretAtStart);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Final submit text for the active mode, or `null` when the submit is
|
|
111
|
-
* a no-op. Shell re-attaches the consumed bang (TUI `submit` in
|
|
112
|
-
* src/tui/prompt/use-composer-actions.ts);
|
|
113
|
-
* a blank shell command never submits, even with attachments staged.
|
|
114
|
-
* Search mode never submits — Enter navigates matches instead.
|
|
115
|
-
*
|
|
116
|
-
* @param mode - The composer's mode.
|
|
117
|
-
* @param text - The composer's text.
|
|
118
|
-
*/
|
|
119
|
-
export function composeSubmitText(mode: ComposerMode, text: string): string | null {
|
|
120
|
-
if (mode === 'search') {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (mode === 'shell') {
|
|
125
|
-
const command = text.trim();
|
|
126
|
-
|
|
127
|
-
return command.length > 0 ? `!${command}` : null;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return text;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* A submit that was not sent (its chat could not be created) back as the
|
|
135
|
-
* draft it came from: the box is cleared on Enter, so a failure must not
|
|
136
|
-
* lose what was typed. The inverse of {@link composeSubmitText}.
|
|
137
|
-
*
|
|
138
|
-
* @param submitted - The text the composer submitted (a `!` command keeps its sentinel).
|
|
139
|
-
*/
|
|
140
|
-
export function unsentDraft(submitted: string): { text: string; shell: boolean } {
|
|
141
|
-
return submitted.startsWith('!') ? { text: submitted.slice(1), shell: true } : { text: submitted, shell: false };
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Encode the in-progress draft for the prompt-history stash so a
|
|
146
|
-
* shell-mode draft survives the cycle round trip with its bang
|
|
147
|
-
* (`usePromptHistory`, src/tui/prompt/use-prompt-history.ts). Search-mode drafts are never stashed (history
|
|
148
|
-
* cycling is disabled in search mode).
|
|
149
|
-
*
|
|
150
|
-
* @param mode - The composer's mode the entry was sent in.
|
|
151
|
-
* @param text - The text sent.
|
|
152
|
-
*/
|
|
153
|
-
export function encodeHistoryDraft(mode: ComposerMode, text: string): string {
|
|
154
|
-
return mode === 'shell' ? `!${text}` : text;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Decode a recalled history entry: `!`-prefixed entries recall INTO
|
|
159
|
-
* shell mode with the bang stripped (`applyRecalledPrompt`,
|
|
160
|
-
* src/tui/prompt/use-prompt-history.ts); everything else recalls as a normal prompt.
|
|
161
|
-
*
|
|
162
|
-
* @param entry - A prompt history entry.
|
|
163
|
-
*/
|
|
164
|
-
export function decodeHistoryEntry(entry: string): { mode: 'normal' | 'shell'; text: string } {
|
|
165
|
-
if (entry.startsWith('!')) {
|
|
166
|
-
return { mode: 'shell', text: entry.slice(1) };
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return { mode: 'normal', text: entry };
|
|
170
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The new-chat draft's scope: its id, the local folder picked for it and that
|
|
3
|
-
* folder's project root. Only a local folder makes a draft scope (a folderless
|
|
4
|
-
* draft, or one on a server or machine, has none). The id is renewed after
|
|
5
|
-
* each send, and when the draft moves to another project, so what was opened
|
|
6
|
-
* in one draft (its terminals, its layout) never leaks into the next.
|
|
7
|
-
*/
|
|
8
|
-
import type { Readable } from './store';
|
|
9
|
-
|
|
10
|
-
/** The draft's state, as {@link DraftScopeStore} holds it. */
|
|
11
|
-
export interface DraftScopeState {
|
|
12
|
-
/** The draft's id (what its terminals open under). */
|
|
13
|
-
id: string;
|
|
14
|
-
/** The local folder picked for the draft, `null` for none (or not local). */
|
|
15
|
-
folder: string | null;
|
|
16
|
-
/** The folder's project root once resolved. */
|
|
17
|
-
root: string | null;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** A draft's scope: where its terminals and layout attach. */
|
|
21
|
-
export interface DraftScope {
|
|
22
|
-
/** The project root. */
|
|
23
|
-
root: string;
|
|
24
|
-
/** The folder things open in. */
|
|
25
|
-
cwd: string;
|
|
26
|
-
/** The draft's id. */
|
|
27
|
-
draft: string;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** What {@link createDraftScopeStore} asks the app. */
|
|
31
|
-
export interface DraftScopeStoreOptions {
|
|
32
|
-
/** The folder's project root (worktrees fold into their main checkout); `null` when unknown. */
|
|
33
|
-
projectRoot(folder: string): Promise<string | null>;
|
|
34
|
-
/** A draft id was replaced: release what was opened under it (its terminals stay with the old project). */
|
|
35
|
-
release?(draftId: string): void;
|
|
36
|
-
/** A draft id is never shown again: forget what was kept for it (its layout record). */
|
|
37
|
-
forget?(draftId: string): void;
|
|
38
|
-
/** A new draft id. Default: `crypto.randomUUID`, else a time-and-random id. */
|
|
39
|
-
newId?(): string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/** The draft's scope, readable (`get` returns the same state until it changes). */
|
|
43
|
-
export interface DraftScopeStore extends Readable<DraftScopeState> {
|
|
44
|
-
/** The draft's local folder (`null` for folderless, server or machine drafts). */
|
|
45
|
-
publishFolder(folder: string | null): void;
|
|
46
|
-
/** A send turned the draft into a session: the next draft starts fresh. */
|
|
47
|
-
renew(): void;
|
|
48
|
-
/** The draft's scope, `null` while it has no local folder or its root is still resolving. */
|
|
49
|
-
scope(): DraftScope | null;
|
|
50
|
-
/** Back to a fresh draft with nothing cached (tests). */
|
|
51
|
-
reset(): void;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function randomId(): string {
|
|
55
|
-
return typeof crypto !== 'undefined' && 'randomUUID' in crypto
|
|
56
|
-
? crypto.randomUUID()
|
|
57
|
-
: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* The scope of a draft state, `null` while it has none.
|
|
62
|
-
*
|
|
63
|
-
* @param state - The draft's state.
|
|
64
|
-
*/
|
|
65
|
-
export function draftScopeOf(state: DraftScopeState): DraftScope | null {
|
|
66
|
-
return state.folder && state.root ? { root: state.root, cwd: state.folder, draft: state.id } : null;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Creates the draft's scope store.
|
|
71
|
-
*
|
|
72
|
-
* @param options - How roots resolve and what a replaced id releases.
|
|
73
|
-
*/
|
|
74
|
-
export function createDraftScopeStore(options: DraftScopeStoreOptions): DraftScopeStore {
|
|
75
|
-
const newId = options.newId ?? randomId;
|
|
76
|
-
const listeners = new Set<() => void>();
|
|
77
|
-
const roots = new Map<string, string | null>();
|
|
78
|
-
let draft: DraftScopeState = { id: newId(), folder: null, root: null };
|
|
79
|
-
/** The project root the current id has been scoped to, `null` before it had one. */
|
|
80
|
-
let idRoot: string | null = null;
|
|
81
|
-
|
|
82
|
-
const forget = (id: string) => options.forget?.(id);
|
|
83
|
-
|
|
84
|
-
const set = (input: DraftScopeState) => {
|
|
85
|
-
let next = input;
|
|
86
|
-
// Moved to another project: its terminals stay with the old one, under a new id.
|
|
87
|
-
if (next.id === draft.id && next.root && idRoot && next.root !== idRoot) {
|
|
88
|
-
const old = draft.id;
|
|
89
|
-
options.release?.(old);
|
|
90
|
-
forget(old);
|
|
91
|
-
next = { ...next, id: newId() };
|
|
92
|
-
}
|
|
93
|
-
if (next.root) idRoot = next.root;
|
|
94
|
-
if (next.id === draft.id && next.folder === draft.folder && next.root === draft.root) return;
|
|
95
|
-
draft = next;
|
|
96
|
-
for (const listener of listeners) listener();
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
return {
|
|
100
|
-
get: () => draft,
|
|
101
|
-
subscribe(listener) {
|
|
102
|
-
listeners.add(listener);
|
|
103
|
-
return () => listeners.delete(listener);
|
|
104
|
-
},
|
|
105
|
-
publishFolder(folder) {
|
|
106
|
-
if (folder === draft.folder) return;
|
|
107
|
-
if (!folder) {
|
|
108
|
-
set({ ...draft, folder: null, root: null });
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (roots.has(folder)) {
|
|
112
|
-
set({ ...draft, folder, root: roots.get(folder) ?? null });
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
set({ ...draft, folder, root: null });
|
|
116
|
-
void options
|
|
117
|
-
.projectRoot(folder)
|
|
118
|
-
.catch(() => null)
|
|
119
|
-
.then((root) => {
|
|
120
|
-
roots.set(folder, root);
|
|
121
|
-
if (draft.folder === folder) set({ ...draft, root });
|
|
122
|
-
});
|
|
123
|
-
},
|
|
124
|
-
renew() {
|
|
125
|
-
idRoot = null;
|
|
126
|
-
forget(draft.id);
|
|
127
|
-
set({ ...draft, id: newId() });
|
|
128
|
-
},
|
|
129
|
-
scope: () => draftScopeOf(draft),
|
|
130
|
-
reset() {
|
|
131
|
-
draft = { id: newId(), folder: null, root: null };
|
|
132
|
-
idRoot = null;
|
|
133
|
-
roots.clear();
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Where the new-chat draft runs, as rules: the recent folders its folder menu
|
|
3
|
-
* offers, the folder it is in, and when that folder makes the window's draft
|
|
4
|
-
* scope. The app keeps the picks (they reset with the draft) and feeds them in.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/** A session row as {@link recentLocalFolders} reads it. */
|
|
8
|
-
export interface DraftFolderSource {
|
|
9
|
-
/** The session's folder (`''`: none). */
|
|
10
|
-
cwd?: string | null;
|
|
11
|
-
/** Set for a server's session: its folders are not on this computer. */
|
|
12
|
-
hostId?: string | null;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* This computer's recent folders, most recent first (the rows' order), each once.
|
|
17
|
-
*
|
|
18
|
-
* @param sessions - The session rows, most recently updated first.
|
|
19
|
-
* @param limit - How many to keep.
|
|
20
|
-
*/
|
|
21
|
-
export function recentLocalFolders(sessions: readonly DraftFolderSource[], limit = 5): string[] {
|
|
22
|
-
const seen = new Set<string>();
|
|
23
|
-
const out: string[] = [];
|
|
24
|
-
for (const s of sessions) {
|
|
25
|
-
if (!s.cwd || s.hostId || seen.has(s.cwd)) continue;
|
|
26
|
-
seen.add(s.cwd);
|
|
27
|
-
out.push(s.cwd);
|
|
28
|
-
if (out.length >= limit) break;
|
|
29
|
-
}
|
|
30
|
-
return out;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* A saved server's recent folders (its sessions' folders there), most recent first, each once.
|
|
35
|
-
*
|
|
36
|
-
* @param sessions - The session rows, most recently updated first.
|
|
37
|
-
* @param hostId - The server.
|
|
38
|
-
* @param limit - How many to keep.
|
|
39
|
-
*/
|
|
40
|
-
export function recentHostFolders(sessions: readonly DraftFolderSource[], hostId: string, limit = 5): string[] {
|
|
41
|
-
const seen = new Set<string>();
|
|
42
|
-
const out: string[] = [];
|
|
43
|
-
for (const s of sessions) {
|
|
44
|
-
if (!s.cwd || s.hostId !== hostId || seen.has(s.cwd)) continue;
|
|
45
|
-
seen.add(s.cwd);
|
|
46
|
-
out.push(s.cwd);
|
|
47
|
-
if (out.length >= limit) break;
|
|
48
|
-
}
|
|
49
|
-
return out;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** What {@link draftFolderPath} and {@link draftLocalFolder} read. */
|
|
53
|
-
export interface DraftFolderState {
|
|
54
|
-
/** The open session's folder (`''` for none); `undefined` on the draft. */
|
|
55
|
-
sessionCwd?: string;
|
|
56
|
-
/** The draft runs on a saved server. */
|
|
57
|
-
onServer: boolean;
|
|
58
|
-
/** The draft runs on a machine's environment. */
|
|
59
|
-
onMachine?: boolean;
|
|
60
|
-
/** "Start without a folder" was picked for this draft. */
|
|
61
|
-
folderless: boolean;
|
|
62
|
-
/** The folder new chats open in (`null`: none picked yet). */
|
|
63
|
-
defaultFolder: string | null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* The conversation's folder: `null` while the draft has none picked (the
|
|
68
|
-
* folder gate shows), `''` for none (a server's draft has none on this
|
|
69
|
-
* computer), else the folder.
|
|
70
|
-
*
|
|
71
|
-
* @param state - The draft's picks, or the open session's folder.
|
|
72
|
-
*/
|
|
73
|
-
export function draftFolderPath(state: DraftFolderState): string | null {
|
|
74
|
-
if (state.sessionCwd !== undefined) return state.sessionCwd;
|
|
75
|
-
return state.onServer || state.folderless ? '' : state.defaultFolder;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* The draft's folder when it is a folder on this computer, the only kind that
|
|
80
|
-
* makes a draft scope (a server's or machine's draft, or a folderless one, has none).
|
|
81
|
-
*
|
|
82
|
-
* @param state - The draft's picks (`sessionCwd` set: not a draft, `null`).
|
|
83
|
-
*/
|
|
84
|
-
export function draftLocalFolder(state: DraftFolderState): string | null {
|
|
85
|
-
if (state.sessionCwd !== undefined || state.onServer || state.onMachine || state.folderless) return null;
|
|
86
|
-
return draftFolderPath(state) || null;
|
|
87
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The chat's extension references and badge actions read from the
|
|
3
|
-
* extensions host (`ExtensionsHost`: its `reference` and `badge-action`
|
|
4
|
-
* items, resolved and run through `invoke`), for an app whose chat host
|
|
5
|
-
* leaves `references` / `badges` out. A chat host that has them keeps them:
|
|
6
|
-
* zidane's registry already serves the extensions' `Reference` and `BadgeAction`
|
|
7
|
-
* items through those members, so the chat reads one source, never both.
|
|
8
|
-
*
|
|
9
|
-
* The extensions host follows the folder on screen, so `cwd` is not
|
|
10
|
-
* consulted: the providers are the ones loaded there.
|
|
11
|
-
*/
|
|
12
|
-
import type { BadgeActionEffect, BadgeMenuItem, BadgeTarget } from 'zidane/chat/pure';
|
|
13
|
-
|
|
14
|
-
import type { ExtensionsHost } from '../../extensions/headless/host';
|
|
15
|
-
import type { ChatBadgeActions, ChatReferences } from './transcript-host';
|
|
16
|
-
|
|
17
|
-
const references = new WeakMap<ExtensionsHost, ChatReferences>();
|
|
18
|
-
const badges = new WeakMap<ExtensionsHost, ChatBadgeActions>();
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The extensions host's references as the chat reads them, or `undefined` when it can't resolve any.
|
|
22
|
-
*
|
|
23
|
-
* @param host - The extensions host.
|
|
24
|
-
*/
|
|
25
|
-
export function extensionsChatReferences(host: ExtensionsHost | null | undefined): ChatReferences | undefined {
|
|
26
|
-
if (!host?.invoke) return undefined;
|
|
27
|
-
let made = references.get(host);
|
|
28
|
-
if (!made) {
|
|
29
|
-
const invoke = host.invoke.bind(host);
|
|
30
|
-
const items = host.items.reference;
|
|
31
|
-
made = {
|
|
32
|
-
providers: async () => items.get().map((e) => e.item),
|
|
33
|
-
resolve: (_cwd, list) =>
|
|
34
|
-
Promise.all(
|
|
35
|
-
list.map(({ providerId, key }) => invoke('reference.resolve', { providerId, key }).catch(() => null)),
|
|
36
|
-
),
|
|
37
|
-
onChanged: (listener) => items.subscribe(() => listener({ kind: 'all' })),
|
|
38
|
-
};
|
|
39
|
-
references.set(host, made);
|
|
40
|
-
}
|
|
41
|
-
return made;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* The extensions host's badge actions as the badge menu reads them, or `undefined` when it can't run any.
|
|
46
|
-
*
|
|
47
|
-
* @param host - The extensions host.
|
|
48
|
-
*/
|
|
49
|
-
export function extensionsBadgeActions(host: ExtensionsHost | null | undefined): ChatBadgeActions | undefined {
|
|
50
|
-
if (!host?.invoke) return undefined;
|
|
51
|
-
let made = badges.get(host);
|
|
52
|
-
if (!made) {
|
|
53
|
-
const invoke = host.invoke.bind(host);
|
|
54
|
-
const items = host.items['badge-action'];
|
|
55
|
-
made = {
|
|
56
|
-
actions: async (_cwd: string, target: BadgeTarget): Promise<readonly BadgeMenuItem[]> =>
|
|
57
|
-
items.get().length === 0 ? [] : invoke('badge.menu', { target }),
|
|
58
|
-
run: (cwd: string, source: string, id: string, target: BadgeTarget): Promise<BadgeActionEffect> =>
|
|
59
|
-
invoke('badge.run', { source, actionId: id, target, ...(cwd ? { cwd } : {}) }),
|
|
60
|
-
};
|
|
61
|
-
badges.set(host, made);
|
|
62
|
-
}
|
|
63
|
-
return made;
|
|
64
|
-
}
|