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,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The composer's send and stop, bound to the hosts: the send flow
|
|
3
|
-
* (`sendPrompt`, `zidane-ui/chat/headless`: draft → session, `!` shell, queue
|
|
4
|
-
* while running, `/side`, the provider check, echo and send) over the
|
|
5
|
-
* `ChatHost`, the session host's queue, the composer host's `/` commands, the
|
|
6
|
-
* git host's machine folders and clone on send (`cloneOnServer`: a server
|
|
7
|
-
* draft started from a local project runs in a clone of its repository
|
|
8
|
-
* there), and the prompt history. The app gives what only it holds: how a
|
|
9
|
-
* session is created, the picks a new one starts with, the side panel's
|
|
10
|
-
* hand-over and the provider flag it keeps.
|
|
11
|
-
*/
|
|
12
|
-
import { parseCommandInvocation } from 'zidane/chat/pure';
|
|
13
|
-
import { useState, useSyncExternalStore } from 'react';
|
|
14
|
-
|
|
15
|
-
import { useGitHost } from '../../git/GitProvider';
|
|
16
|
-
import { useSessionHost } from '../../session/SessionProvider';
|
|
17
|
-
import { useChatHost } from '../ChatProvider';
|
|
18
|
-
import {
|
|
19
|
-
newSessionRequest,
|
|
20
|
-
sendPrompt,
|
|
21
|
-
type NewSessionDefaults,
|
|
22
|
-
type NewSessionRequest,
|
|
23
|
-
type SendAttachment,
|
|
24
|
-
} from '../headless/send-flow';
|
|
25
|
-
import type { Readable, Writable } from '../headless/store';
|
|
26
|
-
import { useSessionStreamActions } from '../SessionStreamsProvider';
|
|
27
|
-
import { useComposerHost, useComposerLabels } from './ComposerHostProvider';
|
|
28
|
-
import { usePromptHistory } from './PromptHistoryProvider';
|
|
29
|
-
import type { DraftTarget } from './use-draft-target';
|
|
30
|
-
|
|
31
|
-
/** What {@link useSendPrompt} sends from and through. */
|
|
32
|
-
export interface SendPromptOptions {
|
|
33
|
-
/** The conversation, `null` for the new-chat draft. */
|
|
34
|
-
session: { id: string } | null;
|
|
35
|
-
/** A run is in flight: a prompt is queued. */
|
|
36
|
-
running: boolean;
|
|
37
|
-
/** The draft's target (`useDraftTarget`). */
|
|
38
|
-
draft: DraftTarget;
|
|
39
|
-
/** The server the composer talks to (`null`: this computer). */
|
|
40
|
-
hostId: string | null;
|
|
41
|
-
/** Creates the draft's session. Rejects with why it can't (shown on the draft). */
|
|
42
|
-
createSession(request: NewSessionRequest): Promise<{ id: string; provisioning?: boolean }>;
|
|
43
|
-
/** What a new session starts with, read as it is created. */
|
|
44
|
-
newSessionDefaults(): Omit<NewSessionDefaults, 'untitled'>;
|
|
45
|
-
/** The draft's session exists: the picks that were for that chat only can reset. */
|
|
46
|
-
onSessionCreated?(): void;
|
|
47
|
-
/** Brings what was just sent into view (on the next frame). */
|
|
48
|
-
reveal?(): void;
|
|
49
|
-
/** Hands `/side [question]` over; returns why it can't, `null` once handed over. Absent: `/side` is a prompt. */
|
|
50
|
-
side?(sessionId: string | null, question: string): string | null;
|
|
51
|
-
/** Whether a provider is ready on this computer (`null`: not known), which a send checks and updates. Absent: never checked. */
|
|
52
|
-
providerReady?: Writable<boolean | null>;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** The composer's send and stop. */
|
|
56
|
-
export interface SendPromptControls {
|
|
57
|
-
/** Sends one prompt; rejects (the composer keeps the text) when it could not go. */
|
|
58
|
-
send(
|
|
59
|
-
text: string,
|
|
60
|
-
attachments: readonly SendAttachment[],
|
|
61
|
-
activatedSkills?: readonly string[],
|
|
62
|
-
options?: { keepDraft?: boolean },
|
|
63
|
-
): Promise<void>;
|
|
64
|
-
/** Stops the conversation's run. */
|
|
65
|
-
stop(): void;
|
|
66
|
-
/** A send found no provider: the app asks to connect one, until one is ready. */
|
|
67
|
-
needsProvider: boolean;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const UNKNOWN: Readable<boolean | null> = { get: () => null, subscribe: () => () => {} };
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Binds the send flow to the hosts and the app's inputs.
|
|
74
|
-
*
|
|
75
|
-
* @param options - See {@link SendPromptOptions}.
|
|
76
|
-
*/
|
|
77
|
-
export function useSendPrompt(options: SendPromptOptions): SendPromptControls {
|
|
78
|
-
const { session, running, draft, hostId, providerReady } = options;
|
|
79
|
-
const chat = useChatHost();
|
|
80
|
-
const git = useGitHost();
|
|
81
|
-
const composer = useComposerHost();
|
|
82
|
-
const queue = useSessionHost().queue;
|
|
83
|
-
const history = usePromptHistory();
|
|
84
|
-
const streams = useSessionStreamActions();
|
|
85
|
-
const labels = useComposerLabels();
|
|
86
|
-
|
|
87
|
-
const provider = providerReady ?? UNKNOWN;
|
|
88
|
-
const ready = useSyncExternalStore(provider.subscribe, provider.get, provider.get);
|
|
89
|
-
const [needsProvider, setNeedsProvider] = useState(false);
|
|
90
|
-
// A provider ready since: the notice goes, while rendering.
|
|
91
|
-
if (ready && needsProvider) setNeedsProvider(false);
|
|
92
|
-
|
|
93
|
-
// On a machine: its folder, or its first one, through the draft's host.
|
|
94
|
-
const machineRoot = async (machineId: string) => {
|
|
95
|
-
const listed = await git!.listFolders!({ hostId: draft.machineHost, machineId });
|
|
96
|
-
if (!listed.ok) throw new Error(listed.error.code === 'failed' ? listed.error.message : listed.error.code);
|
|
97
|
-
return listed.listing.path;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
// On a server with no folder picked: the local project's repository, cloned there first. `null`: nothing to clone.
|
|
101
|
-
const cloneForDraft = async (): Promise<string | null> => {
|
|
102
|
-
const { server, remoteFolder, remoteClone } = draft;
|
|
103
|
-
// Nothing to clone: a folder is picked, no local project, or cloning is off (the session starts in the first root).
|
|
104
|
-
if (!server || remoteFolder !== null || !remoteClone || remoteClone.state === 'off' || !git?.cloneOnServer)
|
|
105
|
-
return null;
|
|
106
|
-
draft.setCloning(true);
|
|
107
|
-
try {
|
|
108
|
-
const result = await git.cloneOnServer(server.id, remoteClone.input, remoteClone.parent);
|
|
109
|
-
if (result.ok) return result.path;
|
|
110
|
-
if ('cancelled' in result) throw new Error(labels.sendCloneCancelled);
|
|
111
|
-
const reason = result.error.code === 'failed' ? result.error.message : result.error.code;
|
|
112
|
-
throw new Error(labels.sendCloneFailed(remoteClone.input, reason));
|
|
113
|
-
} finally {
|
|
114
|
-
draft.setCloning(false);
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const createFromDraft = async (text: string) => {
|
|
119
|
-
const { machine, machineFolder } = draft;
|
|
120
|
-
draft.setError(null);
|
|
121
|
-
try {
|
|
122
|
-
const onMachine = machine ? (machineFolder ?? (await machineRoot(machine.id))) : null;
|
|
123
|
-
const cloned = machine ? null : await cloneForDraft();
|
|
124
|
-
const request = newSessionRequest(
|
|
125
|
-
cloned ? { ...draft, remoteFolder: cloned } : draft,
|
|
126
|
-
text,
|
|
127
|
-
{ ...options.newSessionDefaults(), untitled: labels.sendUntitled },
|
|
128
|
-
onMachine,
|
|
129
|
-
);
|
|
130
|
-
const created = await options.createSession(request);
|
|
131
|
-
options.onSessionCreated?.();
|
|
132
|
-
return created;
|
|
133
|
-
} catch (err) {
|
|
134
|
-
// Not created (its server went offline, …): say why; the composer puts the prompt back.
|
|
135
|
-
draft.setError(labels.sendCreateFailed((err as Error)?.message ?? String(err)));
|
|
136
|
-
throw err;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
const isCommand = async (cwd: string, text: string) => {
|
|
141
|
-
const list = composer.completions?.commands;
|
|
142
|
-
if (!list) return false;
|
|
143
|
-
const commands = await list({ cwd, hostId }).catch(() => []);
|
|
144
|
-
return parseCommandInvocation(text, commands) !== null;
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
const send: SendPromptControls['send'] = (text, attachments, activatedSkills = [], opts = {}) => {
|
|
148
|
-
const cwd = draft.folderPath ?? '';
|
|
149
|
-
return sendPrompt(
|
|
150
|
-
{
|
|
151
|
-
sessionId: session?.id ?? null,
|
|
152
|
-
text,
|
|
153
|
-
attachments,
|
|
154
|
-
activatedSkills,
|
|
155
|
-
keepDraft: opts.keepDraft,
|
|
156
|
-
running,
|
|
157
|
-
cwd,
|
|
158
|
-
remote: Boolean(hostId || draft.server),
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
host: chat,
|
|
162
|
-
streams,
|
|
163
|
-
createSession: createFromDraft,
|
|
164
|
-
...(queue?.add ? { enqueue: queue.add } : {}),
|
|
165
|
-
isCommand: (prompt) => isCommand(cwd, prompt),
|
|
166
|
-
remember: (id, prompt) => history.push(id, prompt),
|
|
167
|
-
...(options.reveal ? { reveal: () => requestAnimationFrame(options.reveal!) } : {}),
|
|
168
|
-
...(options.side ? { side: options.side } : {}),
|
|
169
|
-
draftError: (message) => draft.setError(message),
|
|
170
|
-
...(providerReady
|
|
171
|
-
? {
|
|
172
|
-
provider: {
|
|
173
|
-
known: providerReady.get,
|
|
174
|
-
ready: () => providerReady.set(true),
|
|
175
|
-
missing: () => setNeedsProvider(true),
|
|
176
|
-
},
|
|
177
|
-
}
|
|
178
|
-
: {}),
|
|
179
|
-
},
|
|
180
|
-
);
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const stop = () => {
|
|
184
|
-
if (session) chat.interrupt?.(session.id);
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
return { send, stop, needsProvider };
|
|
188
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A conversation's meters: its context gauge (`ComposerHost.context.status`),
|
|
3
|
-
* its cost as last read (`context.cost`) and its model, read for the session
|
|
4
|
-
* it shows: keyed by session, so a switch never shows the previous
|
|
5
|
-
* conversation's figures.
|
|
6
|
-
*/
|
|
7
|
-
import { useEffect, useMemo, useState } from 'react';
|
|
8
|
-
|
|
9
|
-
import type { ComposerContextStatus, ComposerCostStatus } from '../headless/composer/host-chrome';
|
|
10
|
-
import { useComposerHost } from './ComposerHostProvider';
|
|
11
|
-
import { useHostResource } from './use-composer-stores';
|
|
12
|
-
|
|
13
|
-
/** What {@link useSessionMeters} reads of a session. */
|
|
14
|
-
export interface SessionMetersTarget {
|
|
15
|
-
/** The session. */
|
|
16
|
-
id: string;
|
|
17
|
-
/** Its own model pick, if it has one. */
|
|
18
|
-
modelId?: string;
|
|
19
|
-
/** That model's provider. */
|
|
20
|
-
providerKey?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** A conversation's meters. */
|
|
24
|
-
export interface SessionMeters {
|
|
25
|
-
/** Its context gauge, `null` while unknown. */
|
|
26
|
-
contextStatus: ComposerContextStatus | null;
|
|
27
|
-
/** The cost as last read; the pills add what the run settled and streams since (`ComposerHost.runs`). */
|
|
28
|
-
fetchedCost: ComposerCostStatus | null;
|
|
29
|
-
/** The session's model: its own pick, else the one its context status reports. */
|
|
30
|
-
modelId: string | null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The meters of the session shown.
|
|
35
|
-
*
|
|
36
|
-
* @param session - The session, `null` for a draft.
|
|
37
|
-
* @param running - Whether it runs now (a run boundary reads the cost again).
|
|
38
|
-
*/
|
|
39
|
-
export function useSessionMeters(session: SessionMetersTarget | null, running: boolean): SessionMeters {
|
|
40
|
-
const id = session?.id ?? null;
|
|
41
|
-
const modelId = session?.modelId ?? null;
|
|
42
|
-
const providerKey = session?.providerKey ?? null;
|
|
43
|
-
const contextStatus = useSessionContextStatus(session);
|
|
44
|
-
const fetchedCost = useFetchedCost(id, running, modelId, providerKey);
|
|
45
|
-
return { contextStatus, fetchedCost, modelId: modelId ?? contextStatus?.modelId ?? null };
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The context gauge of a session alone (what the model and effort pickers
|
|
50
|
-
* read): the same keyed read as {@link useSessionMeters}', so one request.
|
|
51
|
-
*
|
|
52
|
-
* @param session - The session, `null` for a draft.
|
|
53
|
-
* @returns Its context status, `null` while unknown.
|
|
54
|
-
*/
|
|
55
|
-
export function useSessionContextStatus(session: SessionMetersTarget | null): ComposerContextStatus | null {
|
|
56
|
-
const context = useComposerHost().context;
|
|
57
|
-
const id = session?.id ?? null;
|
|
58
|
-
const modelId = session?.modelId ?? null;
|
|
59
|
-
const providerKey = session?.providerKey ?? null;
|
|
60
|
-
const resource = useMemo(
|
|
61
|
-
() => (id && context?.status ? context.status(id, modelId, providerKey) : null),
|
|
62
|
-
[context, id, modelId, providerKey],
|
|
63
|
-
);
|
|
64
|
-
return useHostResource(resource).data ?? null;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The session's cost, read when it opens, when a run starts or ends and when
|
|
69
|
-
* its model changes. The last figure stays up while the next one is read.
|
|
70
|
-
*/
|
|
71
|
-
function useFetchedCost(
|
|
72
|
-
id: string | null,
|
|
73
|
-
running: boolean,
|
|
74
|
-
modelId: string | null,
|
|
75
|
-
providerKey: string | null,
|
|
76
|
-
): ComposerCostStatus | null {
|
|
77
|
-
const { context, runs } = useComposerHost();
|
|
78
|
-
const [fetched, setFetched] = useState<{ id: string; cost: ComposerCostStatus | null } | null>(null);
|
|
79
|
-
useEffect(() => {
|
|
80
|
-
if (!id || !context?.cost) return undefined;
|
|
81
|
-
let cancelled = false;
|
|
82
|
-
/*
|
|
83
|
-
* Only a read issued while IDLE may zero the accrual: a run's cost is
|
|
84
|
-
* stamped at its end, so that read contains every turn accrued so far.
|
|
85
|
-
* One issued at run START (or on a model switch mid-run) does not: a fast
|
|
86
|
-
* first `turn:end` landing before the round trip would be wiped and the
|
|
87
|
-
* pill would under-report until run end. And if a new run began while an
|
|
88
|
-
* idle read was in flight, `run:start` already reset the accrual for it;
|
|
89
|
-
* resetting again would drop that run's early turns.
|
|
90
|
-
*/
|
|
91
|
-
const settlesAccrual = !running;
|
|
92
|
-
const generation = runs ? runs.meter(id).get().generation : 0;
|
|
93
|
-
context.cost(id).then(
|
|
94
|
-
(cost) => {
|
|
95
|
-
if (cancelled) return;
|
|
96
|
-
setFetched({ id, cost });
|
|
97
|
-
if (settlesAccrual) runs?.settleCost?.(id, generation);
|
|
98
|
-
},
|
|
99
|
-
() => {
|
|
100
|
-
if (!cancelled) setFetched({ id, cost: null });
|
|
101
|
-
},
|
|
102
|
-
);
|
|
103
|
-
return () => {
|
|
104
|
-
cancelled = true;
|
|
105
|
-
};
|
|
106
|
-
}, [context, runs, id, running, modelId, providerKey]);
|
|
107
|
-
// Never another session's figure, not even for the frames before this one's arrives.
|
|
108
|
-
return fetched?.id === id ? fetched.cost : null;
|
|
109
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The running work the composer's Running badge shows. A call shorter than
|
|
3
|
-
* `WORK_SHOW_MS` never shows it (a quick read doesn't flash a badge), and
|
|
4
|
-
* work that ended keeps it for `WORK_HOLD_MS` (back-to-back calls don't
|
|
5
|
-
* open and close the band between them).
|
|
6
|
-
*
|
|
7
|
-
* The wait is measured from the oldest item's own start, so after a reload
|
|
8
|
-
* or a conversation switch work that has been running a while shows at
|
|
9
|
-
* once. Capped at `WORK_SHOW_MS` from now: a server whose clock runs ahead
|
|
10
|
-
* never holds it back longer.
|
|
11
|
-
*/
|
|
12
|
-
import { useEffect, useState } from 'react';
|
|
13
|
-
|
|
14
|
-
import type { RunningWorkItem } from 'zidane/ipc';
|
|
15
|
-
|
|
16
|
-
/** Work shorter than this never shows. */
|
|
17
|
-
export const WORK_SHOW_MS = 800;
|
|
18
|
-
/** Work that ended keeps showing this long. */
|
|
19
|
-
export const WORK_HOLD_MS = 1500;
|
|
20
|
-
|
|
21
|
-
const NONE: readonly RunningWorkItem[] = [];
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* How long until `items` should show, in ms: 0 when they already should.
|
|
25
|
-
*
|
|
26
|
-
* @param items - The running work, non-empty.
|
|
27
|
-
* @param now - The current time, epoch ms.
|
|
28
|
-
*/
|
|
29
|
-
export function workShowDelay(items: readonly RunningWorkItem[], now: number): number {
|
|
30
|
-
const oldest = Math.min(...items.map((item) => item.startedAt));
|
|
31
|
-
return Math.min(WORK_SHOW_MS, Math.max(0, oldest + WORK_SHOW_MS - now));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* The running work to show for a conversation (see the header).
|
|
36
|
-
*
|
|
37
|
-
* @param sessionId - The conversation.
|
|
38
|
-
* @param items - Its running work now.
|
|
39
|
-
*/
|
|
40
|
-
export function useSustainedWork(
|
|
41
|
-
sessionId: string | null,
|
|
42
|
-
items: readonly RunningWorkItem[],
|
|
43
|
-
): readonly RunningWorkItem[] {
|
|
44
|
-
const initial = (): readonly RunningWorkItem[] =>
|
|
45
|
-
items.length > 0 && workShowDelay(items, Date.now()) === 0 ? items : NONE;
|
|
46
|
-
const [state, setState] = useState(() => ({ sessionId, shown: initial() }));
|
|
47
|
-
// Another conversation: its own work, as it stands, never the last one's held list.
|
|
48
|
-
if (state.sessionId !== sessionId) setState({ sessionId, shown: initial() });
|
|
49
|
-
const shown = state.sessionId === sessionId ? state.shown : NONE;
|
|
50
|
-
const showing = shown.length > 0;
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
if (items.length > 0) {
|
|
54
|
-
if (showing) {
|
|
55
|
-
// eslint-disable-next-line react-hooks/set-state-in-effect -- shown work follows the live list at once
|
|
56
|
-
setState((s) => (s.shown === items ? s : { ...s, shown: items }));
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
const show = () => setState((s) => ({ ...s, shown: items }));
|
|
60
|
-
const delay = workShowDelay(items, Date.now());
|
|
61
|
-
if (delay === 0) {
|
|
62
|
-
show();
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
const timer = setTimeout(show, delay);
|
|
66
|
-
return () => clearTimeout(timer);
|
|
67
|
-
}
|
|
68
|
-
if (!showing) return undefined;
|
|
69
|
-
const timer = setTimeout(() => setState((s) => ({ ...s, shown: NONE })), WORK_HOLD_MS);
|
|
70
|
-
return () => clearTimeout(timer);
|
|
71
|
-
}, [items, showing]);
|
|
72
|
-
|
|
73
|
-
return shown;
|
|
74
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The composer's staged attachments and the three ways in: paste (files, or
|
|
3
|
-
* a long text folded into a `.txt`), drop, and the file picker. Every file
|
|
4
|
-
* goes through the shared rule (`readAttachment`): images, PDFs and text
|
|
5
|
-
* attach; anything else is refused, each refusal a line in `notices` until
|
|
6
|
-
* dismissed or a few seconds pass. Disabled, every handler is a no-op that
|
|
7
|
-
* lets the event through.
|
|
8
|
-
*/
|
|
9
|
-
import { useCallback, useEffect, useRef, useState, type ChangeEvent, type DragEvent } from 'react';
|
|
10
|
-
|
|
11
|
-
import { useChatLabels } from '../useChatLabels';
|
|
12
|
-
import {
|
|
13
|
-
attachmentErrorText,
|
|
14
|
-
type ComposerAttachment,
|
|
15
|
-
pastedTextFilename,
|
|
16
|
-
readAttachment,
|
|
17
|
-
shouldFoldPasteToAttachment,
|
|
18
|
-
} from './attachment-ingest';
|
|
19
|
-
|
|
20
|
-
/** How long the notices about refused files stay, in milliseconds. */
|
|
21
|
-
export const ATTACHMENT_NOTICE_MS = 8000;
|
|
22
|
-
|
|
23
|
-
/** The latest notices kept: a large drop of refused files stays readable. */
|
|
24
|
-
const MAX_NOTICES = 3;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The notices about files a composer did not attach: `refuse` words what
|
|
28
|
-
* `readAttachment` rejected with; they clear on `dismiss`, or
|
|
29
|
-
* {@link ATTACHMENT_NOTICE_MS} after the latest one.
|
|
30
|
-
*/
|
|
31
|
-
export function useAttachmentNotices() {
|
|
32
|
-
const labels = useChatLabels();
|
|
33
|
-
const [refused, setRefused] = useState<ReadonlyArray<{ fileName: string; error: unknown }>>([]);
|
|
34
|
-
|
|
35
|
-
// A new refusal restarts the clock.
|
|
36
|
-
useEffect(() => {
|
|
37
|
-
if (refused.length === 0) return;
|
|
38
|
-
const timer = setTimeout(() => setRefused([]), ATTACHMENT_NOTICE_MS);
|
|
39
|
-
return () => clearTimeout(timer);
|
|
40
|
-
}, [refused]);
|
|
41
|
-
|
|
42
|
-
const refuse = useCallback((fileName: string, error: unknown) => {
|
|
43
|
-
setRefused((list) => [...list, { fileName: fileName || 'file', error }].slice(-MAX_NOTICES));
|
|
44
|
-
}, []);
|
|
45
|
-
const dismiss = useCallback(() => setRefused([]), []);
|
|
46
|
-
// The same file refused twice is one line.
|
|
47
|
-
const notices = [...new Set(refused.map((r) => attachmentErrorText(r.fileName, r.error, labels)))];
|
|
48
|
-
return { notices, refuse, dismiss };
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Manages the composer's staged attachments and the ways in: paste, drop, and the file picker. Images, PDFs and text files attach; anything else is refused with a notice.
|
|
53
|
-
*
|
|
54
|
-
* @param enabled - Turns the handlers on. When false every handler is a no-op that lets the event through.
|
|
55
|
-
* @param initial - Attachments staged on mount, for example a restored draft. Defaults to none.
|
|
56
|
-
*/
|
|
57
|
-
export function useAttachmentIngest(enabled: boolean, initial: readonly ComposerAttachment[] = []) {
|
|
58
|
-
const [attachments, setAttachments] = useState<ComposerAttachment[]>(() => [...initial]);
|
|
59
|
-
const { notices, refuse, dismiss } = useAttachmentNotices();
|
|
60
|
-
const [dragging, setDragging] = useState(false);
|
|
61
|
-
const inputRef = useRef<HTMLInputElement | null>(null);
|
|
62
|
-
|
|
63
|
-
const add = useCallback(
|
|
64
|
-
(files: readonly File[]) => {
|
|
65
|
-
for (const file of files) {
|
|
66
|
-
readAttachment(file).then(
|
|
67
|
-
(att) => setAttachments((list) => [...list, att]),
|
|
68
|
-
(error: unknown) => refuse(file.name, error),
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
[refuse],
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
attachments,
|
|
77
|
-
notices,
|
|
78
|
-
dismissNotices: dismiss,
|
|
79
|
-
dragging,
|
|
80
|
-
inputRef,
|
|
81
|
-
remove: (id: string) => setAttachments((list) => list.filter((a) => a.id !== id)),
|
|
82
|
-
clear: () => setAttachments([]),
|
|
83
|
-
restore: (list: readonly ComposerAttachment[]) => setAttachments([...list]),
|
|
84
|
-
/** ProseMirror's paste hook: true when the paste became attachments. */
|
|
85
|
-
paste(event: ClipboardEvent): boolean {
|
|
86
|
-
if (!enabled || !event.clipboardData) return false;
|
|
87
|
-
const files = Array.from(event.clipboardData.files);
|
|
88
|
-
if (files.length > 0) {
|
|
89
|
-
add(files);
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
const text = event.clipboardData.getData('text/plain');
|
|
93
|
-
if (!text || !shouldFoldPasteToAttachment(text)) return false;
|
|
94
|
-
add([new File([text], pastedTextFilename(), { type: 'text/plain' })]);
|
|
95
|
-
return true;
|
|
96
|
-
},
|
|
97
|
-
pick(event: ChangeEvent<HTMLInputElement>) {
|
|
98
|
-
add(Array.from(event.target.files ?? []));
|
|
99
|
-
event.target.value = '';
|
|
100
|
-
},
|
|
101
|
-
dragOver(event: DragEvent) {
|
|
102
|
-
if (!enabled || !Array.from(event.dataTransfer.types).includes('Files')) return;
|
|
103
|
-
event.preventDefault();
|
|
104
|
-
setDragging(true);
|
|
105
|
-
},
|
|
106
|
-
dragLeave(event: DragEvent) {
|
|
107
|
-
if (event.currentTarget === event.target) setDragging(false);
|
|
108
|
-
},
|
|
109
|
-
drop(event: DragEvent) {
|
|
110
|
-
setDragging(false);
|
|
111
|
-
if (!enabled || event.dataTransfer.files.length === 0) return;
|
|
112
|
-
event.preventDefault();
|
|
113
|
-
add(Array.from(event.dataTransfer.files));
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The model chain picker's scroll spy: the provider section under the list's
|
|
3
|
-
* top edge is the active one, whatever moved the list (wheel, keyboard, a
|
|
4
|
-
* jump). The list works it out from its own scroll position and the layout
|
|
5
|
-
* (`groupAt`, no DOM reads) and reports it here whenever it changes.
|
|
6
|
-
*/
|
|
7
|
-
import { useCallback, useState } from 'react';
|
|
8
|
-
|
|
9
|
-
export function useModelListSpy() {
|
|
10
|
-
const [spied, setSpied] = useState<string | null>(null);
|
|
11
|
-
/**
|
|
12
|
-
* A pill click names its section outright; a short last section can never
|
|
13
|
-
* reach the top edge, so the spy would disagree. The pin holds until the
|
|
14
|
-
* user moves the list themselves (wheel, drag, keyboard).
|
|
15
|
-
*/
|
|
16
|
-
const [pinned, setPinned] = useState<string | null>(null);
|
|
17
|
-
const unpin = useCallback(() => setPinned(null), []);
|
|
18
|
-
return { active: pinned ?? spied, report: setSpied, pin: setPinned, unpin };
|
|
19
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Text that renders as a badge without a completion having typed it: links
|
|
3
|
-
* anywhere in a prompt, and the `/name` a command invocation starts with.
|
|
4
|
-
* Shared by the composer (decorations over the typed text) and the sent
|
|
5
|
-
* prompt (chips), so a prompt reads the same in both.
|
|
6
|
-
*/
|
|
7
|
-
import type { PromptSegmentRef } from 'zidane/chat/pure';
|
|
8
|
-
|
|
9
|
-
/** `http(s)://` up to whitespace or a quote/bracket that cannot end a URL. */
|
|
10
|
-
const URL_RE = /\bhttps?:\/\/[^\s<>"'`]+/g;
|
|
11
|
-
|
|
12
|
-
/** Sentence punctuation after a link is not part of it; a `)` is, when the link opened one. */
|
|
13
|
-
function trimUrl(raw: string): string {
|
|
14
|
-
let url = raw.replace(/[.,;:!?]+$/, '');
|
|
15
|
-
while (url.endsWith(')') && (url.match(/\(/g)?.length ?? 0) < (url.match(/\)/g)?.length ?? 0)) {
|
|
16
|
-
url = url.slice(0, -1).replace(/[.,;:!?]+$/, '');
|
|
17
|
-
}
|
|
18
|
-
return url;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The links in a text, as prompt spans (`urls`): where each starts and ends.
|
|
23
|
-
*
|
|
24
|
-
* @param text - The text to scan.
|
|
25
|
-
*/
|
|
26
|
-
export function urlRefs(text: string): PromptSegmentRef[] {
|
|
27
|
-
const refs: PromptSegmentRef[] = [];
|
|
28
|
-
for (const m of text.matchAll(URL_RE)) {
|
|
29
|
-
const url = trimUrl(m[0]);
|
|
30
|
-
// A bare scheme (`https://`) is not a link yet.
|
|
31
|
-
if (url.length > url.indexOf('//') + 2) {
|
|
32
|
-
refs.push({ start: m.index!, end: m.index! + url.length, providerId: 'urls' });
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return refs;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The command an invocation starts with: its `/name`, plus the leading
|
|
40
|
-
* argument when that is one of the command's fixed values (`args`, which
|
|
41
|
-
* may be several words): `/fix conflicts now` reads `/fix conflicts`. The
|
|
42
|
-
* longest value wins, and it must end at a space or the end of the text.
|
|
43
|
-
*
|
|
44
|
-
* @param text - The prompt.
|
|
45
|
-
* @param args - The command's fixed arguments, so `/fix conflicts` is one span.
|
|
46
|
-
*/
|
|
47
|
-
export function commandRef(text: string, args: ReadonlySet<string> = NO_ARGS): PromptSegmentRef | null {
|
|
48
|
-
const name = /^\/[\w][\w:.-]*/.exec(text);
|
|
49
|
-
if (!name) return null;
|
|
50
|
-
const gap = /^ +/.exec(text.slice(name[0].length))?.[0].length ?? 0;
|
|
51
|
-
const rest = text.slice(name[0].length + gap).toLowerCase();
|
|
52
|
-
let value = 0;
|
|
53
|
-
if (gap > 0) {
|
|
54
|
-
for (const arg of args) {
|
|
55
|
-
const ends = rest.length === arg.length || /\s/.test(rest[arg.length] ?? '');
|
|
56
|
-
if (arg.length > value && ends && rest.startsWith(arg.toLowerCase())) value = arg.length;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return { start: 0, end: name[0].length + (value ? gap + value : 0), providerId: 'commands' };
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const NO_ARGS: ReadonlySet<string> = new Set();
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* `https://www.github.com/a/b/` → `github.com/a/b`, ellipsized past `max` characters.
|
|
66
|
-
*
|
|
67
|
-
* @param url - The address.
|
|
68
|
-
* @param max - The longest result, in characters.
|
|
69
|
-
*/
|
|
70
|
-
export function shortUrl(url: string, max = 40): string {
|
|
71
|
-
const short = url
|
|
72
|
-
.replace(/^https?:\/\//, '')
|
|
73
|
-
.replace(/^www\./, '')
|
|
74
|
-
.replace(/\/$/, '');
|
|
75
|
-
return short.length > max ? `${short.slice(0, max - 1)}…` : short;
|
|
76
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/** The strings of prose chips, their hover cards, references and the badge menu. Part of `TRANSCRIPT_LABELS`. */
|
|
2
|
-
export const CHIP_LABELS = {
|
|
3
|
-
// Chip hover cards: the facts' names
|
|
4
|
-
chipFactChanges: 'Changes',
|
|
5
|
-
chipFactDate: 'Date',
|
|
6
|
-
chipFactModel: 'Model',
|
|
7
|
-
chipFactContext: 'Context',
|
|
8
|
-
chipFactPrompts: 'Prompts',
|
|
9
|
-
chipFactTurns: 'Turns',
|
|
10
|
-
chipFactBranch: 'Branch',
|
|
11
|
-
chipFactUpdated: 'Updated',
|
|
12
|
-
chipFactAliases: 'Aliases',
|
|
13
|
-
chipFactSize: 'Size',
|
|
14
|
-
chipTokens: (count: string) => `~${count} tokens`,
|
|
15
|
-
chipSessionRunning: 'Running',
|
|
16
|
-
chipSessionError: 'Error',
|
|
17
|
-
chipUntitledChat: 'Untitled chat',
|
|
18
|
-
chipNotAmongChats: 'Not among your chats',
|
|
19
|
-
chipLoading: 'Loading…',
|
|
20
|
-
// Prose chips
|
|
21
|
-
chipCommit: (sha: string) => `Commit ${sha}`,
|
|
22
|
-
chipBranch: (name: string) => `Branch ${name}`,
|
|
23
|
-
chipRemoteFile: (path: string, host: string) => `${path}: on ${host}, not this computer`,
|
|
24
|
-
chipNotFound: (title: string) => `${title} (not found)`,
|
|
25
|
-
chipSkill: (name: string) => `Skill ${name}`,
|
|
26
|
-
chipCommand: (name: string) => `Command ${name}`,
|
|
27
|
-
chipChat: (name: string) => `Chat ${name}`,
|
|
28
|
-
// Plan / question calls in the transcript
|
|
29
|
-
interactionApproved: 'Approved',
|
|
30
|
-
interactionRevise: 'Revision requested',
|
|
31
|
-
interactionRejected: 'Rejected',
|
|
32
|
-
interactionWaitingDecision: 'Waiting for your decision',
|
|
33
|
-
interactionWaitingAnswers: 'Waiting for your answers',
|
|
34
|
-
interactionDismissed: 'Dismissed, no answer given',
|
|
35
|
-
interactionAnsweredBy: (who: string) => `Answered by ${who}`,
|
|
36
|
-
// Badge menu notices
|
|
37
|
-
badgePathUnavailable: 'Path unavailable.',
|
|
38
|
-
badgeNoComposer: 'No chat to add to here',
|
|
39
|
-
badgeCopied: 'Copied',
|
|
40
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Chip lookups in flight, app-wide: the reference providers and views
|
|
3
|
-
* (`reference-store.ts`) and the file / branch resolutions of prose chips
|
|
4
|
-
* (`path-resolver.ts`). Each answer can change a chip's
|
|
5
|
-
* size (plain text becoming a badge, a badge gaining its title), and a
|
|
6
|
-
* size change reflows the transcript. `whenChipsSettle` lets a thread that
|
|
7
|
-
* just opened wait for the lookups its rows started before it shows
|
|
8
|
-
* (`useSettledReveal`), so those reflows happen out of sight.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
let busy = 0;
|
|
12
|
-
const waiters = new Set<() => void>();
|
|
13
|
-
|
|
14
|
-
/** Mark one lookup as started; call the returned function once when it ends (success or not). */
|
|
15
|
-
export function beginChipWork(): () => void {
|
|
16
|
-
busy++;
|
|
17
|
-
let ended = false;
|
|
18
|
-
return () => {
|
|
19
|
-
if (ended) return;
|
|
20
|
-
ended = true;
|
|
21
|
-
busy--;
|
|
22
|
-
if (busy === 0) for (const done of [...waiters]) done();
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** Whether any lookup is in flight. */
|
|
27
|
-
export function chipWorkBusy(): boolean {
|
|
28
|
-
return busy > 0;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Resolves once no lookup is in flight, or after `timeoutMs`, whichever is first.
|
|
33
|
-
*
|
|
34
|
-
* @param timeoutMs - How long to wait at most.
|
|
35
|
-
*/
|
|
36
|
-
export function whenChipsSettle(timeoutMs: number): Promise<void> {
|
|
37
|
-
if (busy === 0) return Promise.resolve();
|
|
38
|
-
return new Promise((resolve) => {
|
|
39
|
-
const finish = () => {
|
|
40
|
-
clearTimeout(timer);
|
|
41
|
-
waiters.delete(finish);
|
|
42
|
-
resolve();
|
|
43
|
-
};
|
|
44
|
-
const timer = setTimeout(finish, timeoutMs);
|
|
45
|
-
waiters.add(finish);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Test seam. */
|
|
50
|
-
export function resetChipWorkForTests(): void {
|
|
51
|
-
busy = 0;
|
|
52
|
-
waiters.clear();
|
|
53
|
-
}
|