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,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A tool call's own payload (the diff, the file it read, its media, or its
|
|
3
|
-
* input and output), never the app's `ToolBody`: what `ToolDetails` shows
|
|
4
|
-
* for a call the app doesn't draw, and the default an extension tool
|
|
5
|
-
* renderer falls back to. Internal to the transcript (not exported from the
|
|
6
|
-
* entry): `ToolDetails` is the public piece.
|
|
7
|
-
*/
|
|
8
|
-
import type { CSSProperties } from 'react';
|
|
9
|
-
|
|
10
|
-
import type { ToolRowModel } from '../headless/transcript';
|
|
11
|
-
import { EditDiffBlock } from './EditDiffBlock';
|
|
12
|
-
import { ToolMedia, useToolMedia } from './tool-media';
|
|
13
|
-
import { CODE_PANEL, LoadFullOutputButton, ReadFileBlock, ToolInput, useFullOutput } from './tool-parts';
|
|
14
|
-
|
|
15
|
-
/** Props for {@link ToolPayload}. */
|
|
16
|
-
export interface ToolPayloadProps {
|
|
17
|
-
/** The tool call whose payload to show. */
|
|
18
|
-
tool: ToolRowModel;
|
|
19
|
-
/** Extra classes on the root element. */
|
|
20
|
-
className?: string;
|
|
21
|
-
/** Inline styles on the root element. */
|
|
22
|
-
style?: CSSProperties;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* A tool call's own payload.
|
|
27
|
-
*
|
|
28
|
-
* @param props - The tool call, `className` and `style`.
|
|
29
|
-
*/
|
|
30
|
-
export function ToolPayload({ tool, className, style }: ToolPayloadProps) {
|
|
31
|
-
const { full, load, available, ready } = useFullOutput(tool);
|
|
32
|
-
const output = typeof full === 'string' ? full : tool.result;
|
|
33
|
-
const media = useToolMedia(tool, output);
|
|
34
|
-
const pre = `${CODE_PANEL} m-0 break-words max-h-80 overflow-auto`;
|
|
35
|
-
const loadButton = available && tool.resultClipped && typeof full !== 'string' && (
|
|
36
|
-
<LoadFullOutputButton loading={full === 'loading'} disabled={!ready} onClick={load} className="self-start" />
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const root = ['flex flex-col gap-1.5', className].filter(Boolean).join(' ');
|
|
40
|
-
|
|
41
|
-
if (tool.edit) return <EditDiffBlock edit={tool.edit} className={className} style={style} />;
|
|
42
|
-
// An image the call read, or a screenshot it took: the media itself, then any text around it.
|
|
43
|
-
if (media) {
|
|
44
|
-
return (
|
|
45
|
-
<div className={root} style={style}>
|
|
46
|
-
{tool.name !== 'read_file' && tool.rawInput && Object.keys(tool.rawInput).length > 0 && (
|
|
47
|
-
<ToolInput name={tool.name} input={tool.rawInput} />
|
|
48
|
-
)}
|
|
49
|
-
<ToolMedia media={media.media} url={media.url} name={readPath(tool)} />
|
|
50
|
-
{tool.name !== 'read_file' && media.rest !== '' && <pre className={pre}>{media.rest}</pre>}
|
|
51
|
-
</div>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
if (tool.name === 'read_file' && output !== null) {
|
|
55
|
-
return (
|
|
56
|
-
<div className={root} style={style}>
|
|
57
|
-
{loadButton}
|
|
58
|
-
<ReadFileBlock tool={tool} output={output} />
|
|
59
|
-
</div>
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
return (
|
|
63
|
-
<div className={root} style={style}>
|
|
64
|
-
{/* Shell commands, Codemode scripts and JSON inputs, each highlighted (`ToolInput`). */}
|
|
65
|
-
{tool.rawInput && Object.keys(tool.rawInput).length > 0 && <ToolInput name={tool.name} input={tool.rawInput} />}
|
|
66
|
-
{loadButton}
|
|
67
|
-
{output !== null && output.trim() !== '' && <pre className={pre}>{output}</pre>}
|
|
68
|
-
</div>
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** The file a `read_file` call read: the name its images go by. */
|
|
73
|
-
function readPath(tool: ToolRowModel): string | undefined {
|
|
74
|
-
const path = tool.rawInput?.path;
|
|
75
|
-
return typeof path === 'string' ? path.slice(path.lastIndexOf('/') + 1) : undefined;
|
|
76
|
-
}
|
|
@@ -1,496 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One tool call as a transcript row: a header line (glyph, name, target,
|
|
3
|
-
* edit counts, meta, timing) that opens onto the call's panels: its diff,
|
|
4
|
-
* the app's body for it (the `ToolBody` slot), its input, its output. A
|
|
5
|
-
* clipped output loads in full through `TranscriptActions.toolOutput`; a
|
|
6
|
-
* session the call addresses is the `SessionTitle` slot.
|
|
7
|
-
*/
|
|
8
|
-
import { Fragment, memo, useMemo, useState, type CSSProperties } from 'react';
|
|
9
|
-
import type { ToolFormatLine } from 'zidane/chat';
|
|
10
|
-
import { computeLineDiff } from 'zidane/chat/pure';
|
|
11
|
-
|
|
12
|
-
import { useDisplayPath } from '../../hooks/useDisplayPath';
|
|
13
|
-
import { useStaysMounted } from '../../motion/collapse';
|
|
14
|
-
import type { ToolRowModel } from '../headless/transcript';
|
|
15
|
-
import { useChatLabels } from '../useChatLabels';
|
|
16
|
-
import { useModelName } from './actions';
|
|
17
|
-
import { EditDiffBlock } from './EditDiffBlock';
|
|
18
|
-
import { Caret, FailedMark, type LineState } from './frame';
|
|
19
|
-
import { useTranscriptRenderers } from './renderers';
|
|
20
|
-
import {
|
|
21
|
-
CODE_PANEL,
|
|
22
|
-
LoadFullOutputButton,
|
|
23
|
-
ReadFileBlock,
|
|
24
|
-
ToolGlyph,
|
|
25
|
-
ToolInput,
|
|
26
|
-
ToolTiming,
|
|
27
|
-
useFullOutput,
|
|
28
|
-
} from './tool-parts';
|
|
29
|
-
import { drawsImageGeneration, ImageGenerationBlock } from './ImageGenerationBlock';
|
|
30
|
-
import { ToolMedia, useToolMedia } from './tool-media';
|
|
31
|
-
|
|
32
|
-
/** Props for {@link ToolRow}. */
|
|
33
|
-
export interface ToolRowProps {
|
|
34
|
-
/** The tool call to render. */
|
|
35
|
-
tool: ToolRowModel;
|
|
36
|
-
/** How the call is shown. `hidden` drops the row unless it has a diff, `formatted` shows a one-line target with an input panel, and `full` shows the raw input. */
|
|
37
|
-
mode: 'hidden' | 'formatted' | 'full';
|
|
38
|
-
/** Shows the call's output panel when the row is open. When false the user can still reveal it on demand. */
|
|
39
|
-
showResult: boolean;
|
|
40
|
-
/** Shows the edit diff for edit tools, even when `mode` is `hidden`. */
|
|
41
|
-
showDiff: boolean;
|
|
42
|
-
/**
|
|
43
|
-
* The call's state, for its line to show: a light sweep over the name while
|
|
44
|
-
* it runs, a red cross once it failed. `TranscriptRow` sets it when the
|
|
45
|
-
* transcript draws no row icons (the `showRowIcons` option), where the icon
|
|
46
|
-
* would have said it. Absent: the line shows neither.
|
|
47
|
-
*/
|
|
48
|
-
lineState?: LineState;
|
|
49
|
-
/** Extra classes on the root element. */
|
|
50
|
-
className?: string;
|
|
51
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
52
|
-
style?: CSSProperties;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Custom equality — the parent's `collapseEvents` rebuilds the `tool`
|
|
57
|
-
* Row object on every render (closes over a fresh `formatted`
|
|
58
|
-
* `formatToolCall` result). Default `React.memo` would reject the new
|
|
59
|
-
* reference and re-render every tool row on every delta. Shallow-compare
|
|
60
|
-
* the fields ToolRow actually reads: `name`, `displayName`, `result`,
|
|
61
|
-
* `ok`, `edit`, `rawInput`, and the formatted summary's primitive bits.
|
|
62
|
-
*/
|
|
63
|
-
function toolRowPropsEqual(prev: ToolRowProps, next: ToolRowProps): boolean {
|
|
64
|
-
if (
|
|
65
|
-
prev.mode !== next.mode ||
|
|
66
|
-
prev.showResult !== next.showResult ||
|
|
67
|
-
prev.showDiff !== next.showDiff ||
|
|
68
|
-
prev.lineState !== next.lineState ||
|
|
69
|
-
prev.className !== next.className ||
|
|
70
|
-
prev.style !== next.style
|
|
71
|
-
) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const a = prev.tool;
|
|
76
|
-
const b = next.tool;
|
|
77
|
-
|
|
78
|
-
return (
|
|
79
|
-
a.name === b.name &&
|
|
80
|
-
a.displayName === b.displayName &&
|
|
81
|
-
a.result === b.result &&
|
|
82
|
-
a.ok === b.ok &&
|
|
83
|
-
a.edit === b.edit &&
|
|
84
|
-
a.rawInput === b.rawInput &&
|
|
85
|
-
a.resultClipped === b.resultClipped &&
|
|
86
|
-
a.callId === b.callId &&
|
|
87
|
-
a.startedAt === b.startedAt &&
|
|
88
|
-
a.durationMs === b.durationMs &&
|
|
89
|
-
a.waitingFor === b.waitingFor &&
|
|
90
|
-
a.resuming === b.resuming &&
|
|
91
|
-
a.approval === b.approval &&
|
|
92
|
-
formattedEqual(a.formatted, b.formatted)
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function formattedEqual(a: ToolFormatLine | null, b: ToolFormatLine | null): boolean {
|
|
97
|
-
if (a === b) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (!a || !b) {
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (a.target !== b.target || a.detail !== b.detail || a.sessionId !== b.sessionId) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const ma = a.meta;
|
|
110
|
-
const mb = b.meta;
|
|
111
|
-
|
|
112
|
-
if (ma === mb) {
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (!ma || !mb || ma.length !== mb.length) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
for (let i = 0; i < ma.length; i++) {
|
|
121
|
-
if (ma[i] !== mb[i]) {
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/** Props for {@link ModelVerdict}. */
|
|
130
|
-
export interface ModelVerdictProps {
|
|
131
|
-
/** The call's approval record: the choice, the deciding model and its confidence (`p`). */
|
|
132
|
-
approval: NonNullable<ToolRowModel['approval']>;
|
|
133
|
-
/** Extra classes on the root element. */
|
|
134
|
-
className?: string;
|
|
135
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
136
|
-
style?: CSSProperties;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* The decision model's verdict on the call. A denial reads "auto-denied"
|
|
141
|
-
* with the model and its confidence as chips; an approval is only a sparkle
|
|
142
|
-
* (most calls of a model-approved session are), its verdict in the tooltip.
|
|
143
|
-
*
|
|
144
|
-
* @param props - Component props.
|
|
145
|
-
*/
|
|
146
|
-
export function ModelVerdict({ approval, className, style }: ModelVerdictProps) {
|
|
147
|
-
const labels = useChatLabels();
|
|
148
|
-
const modelName = useModelName();
|
|
149
|
-
const approved = approval.choice === 'approve';
|
|
150
|
-
const model = modelName(approval.model);
|
|
151
|
-
const confidence = approval.p !== undefined ? `${Math.round(approval.p * 100)}%` : null;
|
|
152
|
-
const title = labels.modelVerdictTitle(approved, model, confidence);
|
|
153
|
-
if (approved) {
|
|
154
|
-
return (
|
|
155
|
-
<span
|
|
156
|
-
data-testid="tool-model-verdict"
|
|
157
|
-
role="img"
|
|
158
|
-
aria-label={title}
|
|
159
|
-
title={title}
|
|
160
|
-
className={['i-ph-sparkle zg-meta shrink-0 self-center', className].filter(Boolean).join(' ')}
|
|
161
|
-
style={style}
|
|
162
|
-
/>
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
return (
|
|
166
|
-
<span
|
|
167
|
-
data-testid="tool-model-verdict"
|
|
168
|
-
title={title}
|
|
169
|
-
className={['zg-meta shrink-0 inline-flex items-center gap-1', className].filter(Boolean).join(' ')}
|
|
170
|
-
style={style}
|
|
171
|
-
>
|
|
172
|
-
<span aria-hidden className="i-ph-prohibit text-zg-danger" />
|
|
173
|
-
{labels.autoDenied}
|
|
174
|
-
{model && <span className="zg-meta-chip">{model}</span>}
|
|
175
|
-
{confidence && <span className="zg-meta-chip">{confidence}</span>}
|
|
176
|
-
</span>
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/** Renders a tool call as a collapsible row: glyph, name and target, timing, and, when opened, its input, output, diff, or media. */
|
|
181
|
-
export const ToolRow = memo(({ tool, mode, showResult, showDiff, lineState, className, style }: ToolRowProps) => {
|
|
182
|
-
const labels = useChatLabels();
|
|
183
|
-
// Paths in the target and its chips as the user reads them (the session's home folder as `~`).
|
|
184
|
-
const display = useDisplayPath();
|
|
185
|
-
const { SessionTitle, ToolBody, hasToolBody } = useTranscriptRenderers();
|
|
186
|
-
const [open, setOpen] = useState(false);
|
|
187
|
-
/** Output revealed on demand while the "Tool outputs" setting is off. */
|
|
188
|
-
const [revealOutput, setRevealOutput] = useState(false);
|
|
189
|
-
|
|
190
|
-
/* Lazy full-output fetch for clipped results (`useFullOutput`). */
|
|
191
|
-
const { full: fullResult, load: loadFullResult, available: canLoadFull, ready: fullReady } = useFullOutput(tool);
|
|
192
|
-
/*
|
|
193
|
-
* A closed row renders only its header: its panels (the output text, the
|
|
194
|
-
* pretty-printed input, a highlighted file, the diff) mount on open and
|
|
195
|
-
* stay through the collapse. Otherwise every settled tool call in a long
|
|
196
|
-
* transcript would carry all of that, invisible, in the DOM.
|
|
197
|
-
*/
|
|
198
|
-
const bodyMounted = useStaysMounted(open);
|
|
199
|
-
// Images, video and audio in the result, served by the app (`toolMediaUrl`).
|
|
200
|
-
const media = useToolMedia(tool, typeof fullResult === 'string' ? fullResult : tool.result);
|
|
201
|
-
|
|
202
|
-
/*
|
|
203
|
-
* When the user picked "hidden" tool display AND there's no edit-diff to show
|
|
204
|
-
* for this tool, we suppress the row entirely. Errors still surface — they
|
|
205
|
-
* arrived as `kind: 'error'` rows, not tool-rows.
|
|
206
|
-
*/
|
|
207
|
-
const hasDiff = showDiff && tool.edit;
|
|
208
|
-
|
|
209
|
-
/*
|
|
210
|
-
* +N / −N counts surfaced inline on the header row for
|
|
211
|
-
* edit / multi_edit / write_file. Kept lazy (only when we have an edit
|
|
212
|
-
* payload) so the typical read/grep/shell row pays nothing.
|
|
213
|
-
*/
|
|
214
|
-
const editCounts = useMemo(() => {
|
|
215
|
-
if (!tool.edit) {
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
let added = 0;
|
|
220
|
-
let removed = 0;
|
|
221
|
-
|
|
222
|
-
for (const h of tool.edit.hunks) {
|
|
223
|
-
const lines = computeLineDiff(h.oldString, h.newString);
|
|
224
|
-
|
|
225
|
-
for (const d of lines) {
|
|
226
|
-
if (d.op === 'add') {
|
|
227
|
-
added++;
|
|
228
|
-
} else if (d.op === 'remove') {
|
|
229
|
-
removed++;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
return { added, removed };
|
|
235
|
-
}, [tool.edit]);
|
|
236
|
-
|
|
237
|
-
if (mode === 'hidden' && !hasDiff) {
|
|
238
|
-
return null;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/*
|
|
242
|
-
* Expandable whenever there is SOMETHING behind the header: the call's
|
|
243
|
-
* input (always, unless the header already prints the raw JSON in `full`
|
|
244
|
-
* mode), its output (when tool outputs are on), or a diff. The input does
|
|
245
|
-
* not depend on the "Tool outputs" toggle: an `Ask user` row with
|
|
246
|
-
* the toggle off still opens onto its questions and answers.
|
|
247
|
-
*/
|
|
248
|
-
const hasInput = tool.rawInput !== undefined && Object.keys(tool.rawInput).length > 0;
|
|
249
|
-
// A call the app draws itself (the `ToolBody` slot: a plan, a question form,
|
|
250
|
-
// a todo list) renders that way instead of as input / output JSON.
|
|
251
|
-
const interaction = mode === 'formatted' && ToolBody !== undefined && hasToolBody?.(tool) === true;
|
|
252
|
-
const showInputPanel = mode === 'formatted' && hasInput && !interaction;
|
|
253
|
-
/*
|
|
254
|
-
* "Tool outputs" OFF hides result plumbing by default, it does not make
|
|
255
|
-
* it unreachable: the output stays one click away behind a "Show output"
|
|
256
|
-
* link inside the expanded row (`revealOutput`). ON shows it with the
|
|
257
|
-
* input as soon as the row opens.
|
|
258
|
-
*/
|
|
259
|
-
const hasOutput = tool.result !== null && !interaction;
|
|
260
|
-
const showOutputPanel = hasOutput && (showResult || revealOutput);
|
|
261
|
-
const hasExpandable = interaction || showInputPanel || hasOutput || (mode === 'full' && tool.rawInput) || hasDiff;
|
|
262
|
-
// A spawn waiting for a slot says so itself (its "waiting" chip): it is not running yet.
|
|
263
|
-
const sweep = lineState === 'running' && !tool.waitingFor;
|
|
264
|
-
|
|
265
|
-
return (
|
|
266
|
-
<div className={['text-xs', className].filter(Boolean).join(' ')} style={style}>
|
|
267
|
-
{/* Tool header — formatted summary, hidden, or full JSON */}
|
|
268
|
-
{mode !== 'hidden' && (
|
|
269
|
-
<button
|
|
270
|
-
type="button"
|
|
271
|
-
onClick={() => setOpen((current) => !current)}
|
|
272
|
-
aria-expanded={open}
|
|
273
|
-
className="zg-press-subtle flex flex-col items-stretch w-full zg-disclosure !text-[var(--zg-text)] text-left py-0.5"
|
|
274
|
-
>
|
|
275
|
-
<span className="flex items-baseline gap-2 min-w-0">
|
|
276
|
-
<ToolGlyph name={tool.name} />
|
|
277
|
-
<span className={`font-medium shrink-0${sweep ? ' zg-shimmer' : ''}`}>{tool.displayName}</span>
|
|
278
|
-
{/* Width truncation is CSS's job: no fixed max-w — the target uses
|
|
279
|
-
whatever room the row has (a 420px cap ellipsized spawn tasks
|
|
280
|
-
at ~60 chars with half the row empty). min-w-0 lets it shrink
|
|
281
|
-
FIRST; the meta/count siblings are shrink-0. */}
|
|
282
|
-
{mode === 'formatted' && tool.formatted?.target && (
|
|
283
|
-
// A session title is prose, not a path/command: same face as the
|
|
284
|
-
// session-event card's title (proportional, medium, accent) so
|
|
285
|
-
// the two rows name the session identically.
|
|
286
|
-
<span
|
|
287
|
-
// The real path one hover away when the shown one has `~`.
|
|
288
|
-
{...(!tool.formatted.sessionId && display.text(tool.formatted.target) !== tool.formatted.target
|
|
289
|
-
? { title: tool.formatted.target }
|
|
290
|
-
: {})}
|
|
291
|
-
className={`min-w-0 truncate ${
|
|
292
|
-
tool.formatted.sessionId
|
|
293
|
-
? 'font-medium text-[var(--zg-accent)]'
|
|
294
|
-
: 'font-mono text-[var(--zg-accent-hover)]'
|
|
295
|
-
}`}
|
|
296
|
-
>
|
|
297
|
-
{tool.formatted.sessionId ? (
|
|
298
|
-
<SessionTitle id={tool.formatted.sessionId} fallback={tool.formatted.target} />
|
|
299
|
-
) : (
|
|
300
|
-
display.text(tool.formatted.target)
|
|
301
|
-
)}
|
|
302
|
-
</span>
|
|
303
|
-
)}
|
|
304
|
-
{editCounts && (editCounts.added > 0 || editCounts.removed > 0) && (
|
|
305
|
-
<span className="zg-meta inline-flex items-baseline gap-1.5 shrink-0">
|
|
306
|
-
<span className="text-zg-success">+{editCounts.added}</span>
|
|
307
|
-
<span className="text-zg-danger">−{editCounts.removed}</span>
|
|
308
|
-
</span>
|
|
309
|
-
)}
|
|
310
|
-
{mode === 'formatted' && tool.formatted?.meta && tool.formatted.meta.length > 0 && (
|
|
311
|
-
<span className="zg-meta shrink-0 self-center inline-flex items-center gap-1">
|
|
312
|
-
{tool.formatted.meta.map((value, i) => (
|
|
313
|
-
<span key={i} className="zg-meta-chip">
|
|
314
|
-
{display.text(value)}
|
|
315
|
-
</span>
|
|
316
|
-
))}
|
|
317
|
-
</span>
|
|
318
|
-
)}
|
|
319
|
-
{mode === 'full' && tool.rawInput && (
|
|
320
|
-
<span className="font-mono text-[var(--zg-text-muted)] min-w-0 truncate">
|
|
321
|
-
{JSON.stringify(tool.rawInput)}
|
|
322
|
-
</span>
|
|
323
|
-
)}
|
|
324
|
-
{tool.approval && <ModelVerdict approval={tool.approval} />}
|
|
325
|
-
{tool.waitingFor ? (
|
|
326
|
-
<span
|
|
327
|
-
data-testid="tool-waiting"
|
|
328
|
-
title={labels.waitingForSlot(tool.waitingFor.max)}
|
|
329
|
-
className="zg-meta shrink-0 inline-flex items-baseline gap-1"
|
|
330
|
-
>
|
|
331
|
-
<span aria-hidden className="i-ph-pause-fill text-zg-badge self-center" />
|
|
332
|
-
{labels.stepWaiting}
|
|
333
|
-
</span>
|
|
334
|
-
) : tool.ok === null && tool.startedAt !== undefined ? (
|
|
335
|
-
<>
|
|
336
|
-
{tool.resuming && (
|
|
337
|
-
<span data-testid="tool-resuming" className="zg-meta shrink-0">
|
|
338
|
-
{labels.stepResuming}
|
|
339
|
-
</span>
|
|
340
|
-
)}
|
|
341
|
-
<ToolTiming startedAt={tool.startedAt} running />
|
|
342
|
-
</>
|
|
343
|
-
) : tool.durationMs !== undefined ? (
|
|
344
|
-
<ToolTiming durationMs={tool.durationMs} />
|
|
345
|
-
) : null}
|
|
346
|
-
{lineState === 'failed' && <FailedMark />}
|
|
347
|
-
{hasExpandable ? <Caret open={open} className="self-center" /> : null}
|
|
348
|
-
</span>
|
|
349
|
-
{/* Second line: the payload behind the action (a prompt sent to
|
|
350
|
-
another session), dimmed and clamped — prompts run long. */}
|
|
351
|
-
{mode === 'formatted' && tool.formatted?.detail && (
|
|
352
|
-
<span className="zg-line-clamp-2 mt-0.5 text-[var(--zg-text-muted)]">{tool.formatted.detail}</span>
|
|
353
|
-
)}
|
|
354
|
-
</button>
|
|
355
|
-
)}
|
|
356
|
-
|
|
357
|
-
{/* Generated images: always shown, the loader while the call runs. */}
|
|
358
|
-
{mode !== 'hidden' && drawsImageGeneration(tool) && <ImageGenerationBlock tool={tool} />}
|
|
359
|
-
|
|
360
|
-
{/* Edit diff — collapsed by default; expands with the row's chevron. */}
|
|
361
|
-
{hasDiff && tool.edit && (
|
|
362
|
-
<div className="zg-collapsible" data-open={open}>
|
|
363
|
-
<div className="zg-collapsible-inner">{bodyMounted && <EditDiffBlock edit={tool.edit} />}</div>
|
|
364
|
-
</div>
|
|
365
|
-
)}
|
|
366
|
-
|
|
367
|
-
{/*
|
|
368
|
-
* The panels below the header (an app-drawn body, input, output, raw
|
|
369
|
-
* input) each sit in their own `.zg-collapsible` and span the content
|
|
370
|
-
* column at its natural width: they start on the header label's left
|
|
371
|
-
* edge (the header button's `.zg-disclosure` bleed is only its hover
|
|
372
|
-
* pill), with no negative margin of their own.
|
|
373
|
-
*/}
|
|
374
|
-
{interaction && ToolBody && (
|
|
375
|
-
<div className="zg-collapsible" data-open={open}>
|
|
376
|
-
<div className="zg-collapsible-inner">
|
|
377
|
-
<div className="pt-2 pb-1">{bodyMounted && <ToolBody tool={tool} />}</div>
|
|
378
|
-
</div>
|
|
379
|
-
</div>
|
|
380
|
-
)}
|
|
381
|
-
|
|
382
|
-
{/* Input first, output second — the order the call happened in. Each
|
|
383
|
-
gets a caption only when both are present, so a lone output panel
|
|
384
|
-
looks exactly as before. */}
|
|
385
|
-
{showInputPanel && (
|
|
386
|
-
<div className="zg-collapsible" data-open={open}>
|
|
387
|
-
<div className="zg-collapsible-inner">
|
|
388
|
-
{bodyMounted && (
|
|
389
|
-
<>
|
|
390
|
-
{showOutputPanel && <PanelCaption>{labels.inputCaption}</PanelCaption>}
|
|
391
|
-
<ToolInput name={tool.name} input={tool.rawInput!} />
|
|
392
|
-
</>
|
|
393
|
-
)}
|
|
394
|
-
</div>
|
|
395
|
-
</div>
|
|
396
|
-
)}
|
|
397
|
-
{hasOutput && !showOutputPanel && (
|
|
398
|
-
<div className="zg-collapsible" data-open={open}>
|
|
399
|
-
<div className="zg-collapsible-inner">
|
|
400
|
-
<button
|
|
401
|
-
type="button"
|
|
402
|
-
onClick={() => setRevealOutput(true)}
|
|
403
|
-
className="zg-press-subtle mt-1.5 text-zg-meta text-[var(--zg-accent)] bg-transparent border-0 cursor-pointer px-0"
|
|
404
|
-
>
|
|
405
|
-
{labels.showOutput}
|
|
406
|
-
</button>
|
|
407
|
-
</div>
|
|
408
|
-
</div>
|
|
409
|
-
)}
|
|
410
|
-
{showOutputPanel && (
|
|
411
|
-
<div className="zg-collapsible" data-open={open}>
|
|
412
|
-
<div className="zg-collapsible-inner">
|
|
413
|
-
{bodyMounted && showInputPanel && <PanelCaption>{labels.outputCaption}</PanelCaption>}
|
|
414
|
-
{bodyMounted && canLoadFull && tool.resultClipped && typeof fullResult !== 'string' && (
|
|
415
|
-
<LoadFullOutputButton
|
|
416
|
-
loading={fullResult === 'loading'}
|
|
417
|
-
disabled={!fullReady}
|
|
418
|
-
onClick={loadFullResult}
|
|
419
|
-
className="mt-1.5"
|
|
420
|
-
/>
|
|
421
|
-
)}
|
|
422
|
-
{!bodyMounted ? null : media ? (
|
|
423
|
-
// An image the call read, or a screenshot it took: the media itself, then any text around it.
|
|
424
|
-
<div className="mt-1.5 flex flex-col gap-1.5">
|
|
425
|
-
{/* A generate_image row already shows its images above; a failed one draws none there. */}
|
|
426
|
-
{(!drawsImageGeneration(tool) || tool.ok === false) && (
|
|
427
|
-
<ToolMedia media={media.media} url={media.url} />
|
|
428
|
-
)}
|
|
429
|
-
{tool.name !== 'read_file' && media.rest !== '' && <pre className={CODE_PANEL}>{media.rest}</pre>}
|
|
430
|
-
</div>
|
|
431
|
-
) : tool.name === 'read_file' ? (
|
|
432
|
-
/*
|
|
433
|
-
* Render `read_file` results as a syntax-highlighted code
|
|
434
|
-
* block — the `CodeBlock` slot the assistant's fenced
|
|
435
|
-
* markdown uses. Language is inferred from the file
|
|
436
|
-
* extension; unknown extensions fall through to plaintext.
|
|
437
|
-
*/
|
|
438
|
-
<ReadFileBlock tool={tool} output={typeof fullResult === 'string' ? fullResult : (tool.result ?? '')} />
|
|
439
|
-
) : (
|
|
440
|
-
<pre className={`${CODE_PANEL} mt-1.5`}>{typeof fullResult === 'string' ? fullResult : tool.result}</pre>
|
|
441
|
-
)}
|
|
442
|
-
</div>
|
|
443
|
-
</div>
|
|
444
|
-
)}
|
|
445
|
-
|
|
446
|
-
{/* Full raw input — same outer rectangle as the result body / header collapsible. */}
|
|
447
|
-
{mode === 'full' && tool.rawInput && (
|
|
448
|
-
<div className="zg-collapsible" data-open={open}>
|
|
449
|
-
<div className="zg-collapsible-inner">
|
|
450
|
-
{bodyMounted && <ToolInput name={tool.name} input={tool.rawInput} />}
|
|
451
|
-
</div>
|
|
452
|
-
</div>
|
|
453
|
-
)}
|
|
454
|
-
</div>
|
|
455
|
-
);
|
|
456
|
-
}, toolRowPropsEqual);
|
|
457
|
-
|
|
458
|
-
/** Tiny caption above an expanded tool panel when input and output are both shown. */
|
|
459
|
-
function PanelCaption({ children }: { children: React.ReactNode }) {
|
|
460
|
-
return <div className="zg-section-label mt-2">{children}</div>;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
/** Props for {@link NestedToolCalls}: the display props every nested `ToolRow` gets, plus the child calls. */
|
|
464
|
-
export interface NestedToolCallsProps extends Omit<ToolRowProps, 'tool' | 'className' | 'style'> {
|
|
465
|
-
/** The child calls, drawn recursively; empty or absent renders nothing. */
|
|
466
|
-
tools: ToolRowModel['children'];
|
|
467
|
-
/** Extra classes on the root element. */
|
|
468
|
-
className?: string;
|
|
469
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
470
|
-
style?: CSSProperties;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
/**
|
|
474
|
-
* The calls a tool made (a codemode script's `tools.*`, its row's
|
|
475
|
-
* `children`), one step in under its row, open or not: they are the call's
|
|
476
|
-
* children, not its body. Each one is a regular `ToolRow` with its own state.
|
|
477
|
-
*
|
|
478
|
-
* @param props - The child calls, plus the display props every nested `ToolRow` gets.
|
|
479
|
-
*/
|
|
480
|
-
export function NestedToolCalls({ tools, className, style, ...display }: NestedToolCallsProps) {
|
|
481
|
-
if (!tools || tools.length === 0) return null;
|
|
482
|
-
return (
|
|
483
|
-
<div
|
|
484
|
-
className={['pl-4 pt-0.5 flex flex-col gap-0.5', className].filter(Boolean).join(' ')}
|
|
485
|
-
style={style}
|
|
486
|
-
data-testid="nested-tool-calls"
|
|
487
|
-
>
|
|
488
|
-
{tools.map((tool) => (
|
|
489
|
-
<Fragment key={tool.id}>
|
|
490
|
-
<ToolRow tool={tool} {...display} />
|
|
491
|
-
<NestedToolCalls tools={tool.children} {...display} />
|
|
492
|
-
</Fragment>
|
|
493
|
-
))}
|
|
494
|
-
</div>
|
|
495
|
-
);
|
|
496
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The turn commands the turn menu and select-turn share, so a copy, a rewind
|
|
3
|
-
* or an edit behaves the same from both: over the session host's stored turns
|
|
4
|
-
* (`SessionHost.turns`), the clipboard and the composer bus.
|
|
5
|
-
*/
|
|
6
|
-
import { useMemo } from 'react';
|
|
7
|
-
import { turnAsText } from 'zidane/chat/pure';
|
|
8
|
-
|
|
9
|
-
import { useSessionHost } from '../../session/SessionProvider';
|
|
10
|
-
import type { SessionTurns } from '../../session/headless/host';
|
|
11
|
-
import { hasComposerFor, pushComposerDraft } from '../composer/composer-bus';
|
|
12
|
-
import { wireAttachmentsToChat } from '../headless/composer/draft-sync';
|
|
13
|
-
import type { ChatEvent } from '../headless/host';
|
|
14
|
-
import { TURN_LABELS } from '../headless/turn-labels';
|
|
15
|
-
import { promptDraftOf } from '../headless/turn-prompt';
|
|
16
|
-
|
|
17
|
-
/** What {@link createTurnCommands} returns. */
|
|
18
|
-
export interface TurnCommands {
|
|
19
|
-
/** The turn's text as the transcript copies it, `fallback` when it cannot be loaded. */
|
|
20
|
-
turnText(sessionId: string, turnId: string, fallback?: string): Promise<string>;
|
|
21
|
-
/** Copies the turn. `false` when there was nothing to copy or the write failed. */
|
|
22
|
-
copyTurn(sessionId: string, turnId: string, fallback?: string): Promise<boolean>;
|
|
23
|
-
/** Keeps the history up to and including the turn. Absent: the host cannot rewind. */
|
|
24
|
-
rewindToTurn?(sessionId: string, turnId: string): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Cuts the history just before the prompt and puts its text and attachments back in the session's
|
|
27
|
-
* composer. Rejects, keeping the history, when that composer is not open. Absent: the host cannot rewind.
|
|
28
|
-
*/
|
|
29
|
-
editPrompt?(sessionId: string, turnId: string, events: readonly ChatEvent[], fallbackText?: string): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** Options of {@link createTurnCommands}. */
|
|
33
|
-
export interface TurnCommandsOptions {
|
|
34
|
-
/** Writes the clipboard. Default: `navigator.clipboard.writeText`. */
|
|
35
|
-
writeText?(text: string): Promise<void>;
|
|
36
|
-
/** The edit's refusal when the composer is gone. */
|
|
37
|
-
labels?: Pick<typeof TURN_LABELS, 'turnMenuEditNeedsComposer'>;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Creates the turn commands over a session host's stored turns.
|
|
42
|
-
*
|
|
43
|
-
* @param turns - The stored turns.
|
|
44
|
-
* @param options - The clipboard and the refusal wording.
|
|
45
|
-
*/
|
|
46
|
-
export function createTurnCommands(turns: SessionTurns, options: TurnCommandsOptions = {}): TurnCommands {
|
|
47
|
-
const writeText = options.writeText ?? ((text: string) => navigator.clipboard.writeText(text));
|
|
48
|
-
const labels = options.labels ?? TURN_LABELS;
|
|
49
|
-
const turnText = async (sessionId: string, turnId: string, fallback = '') => {
|
|
50
|
-
try {
|
|
51
|
-
const turn = await turns.get(sessionId, turnId);
|
|
52
|
-
return turn ? turnAsText(turn) : fallback;
|
|
53
|
-
} catch {
|
|
54
|
-
return fallback;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const rewind = turns.rewind?.bind(turns);
|
|
58
|
-
return {
|
|
59
|
-
turnText,
|
|
60
|
-
async copyTurn(sessionId, turnId, fallback = '') {
|
|
61
|
-
const text = await turnText(sessionId, turnId, fallback);
|
|
62
|
-
if (!text) return false;
|
|
63
|
-
try {
|
|
64
|
-
await writeText(text);
|
|
65
|
-
return true;
|
|
66
|
-
} catch {
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
...(rewind
|
|
71
|
-
? {
|
|
72
|
-
rewindToTurn: (sessionId: string, turnId: string) => rewind(sessionId, turnId, { inclusive: true }),
|
|
73
|
-
async editPrompt(sessionId: string, turnId: string, events: readonly ChatEvent[], fallbackText = '') {
|
|
74
|
-
const draft = promptDraftOf(events, turnId, fallbackText);
|
|
75
|
-
// Staged as data URLs first: a PDF's `zg-media:` address is served from the turn the cut removes.
|
|
76
|
-
const staged = await wireAttachmentsToChat(draft.attachments);
|
|
77
|
-
// The composer went away while staging: cutting now would lose the prompt.
|
|
78
|
-
if (!hasComposerFor(sessionId)) throw new Error(labels.turnMenuEditNeedsComposer);
|
|
79
|
-
await rewind(sessionId, turnId, { inclusive: false });
|
|
80
|
-
pushComposerDraft({ scopeKey: sessionId, text: draft.text, attachments: staged });
|
|
81
|
-
},
|
|
82
|
-
}
|
|
83
|
-
: {}),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* The turn commands over the session host's turns (stable while they are); `null` when the host has none.
|
|
89
|
-
*
|
|
90
|
-
* @param options - The clipboard and the refusal wording.
|
|
91
|
-
*/
|
|
92
|
-
export function useTurnCommands(options?: TurnCommandsOptions): TurnCommands | null {
|
|
93
|
-
const turns = useSessionHost().turns;
|
|
94
|
-
const writeText = options?.writeText;
|
|
95
|
-
const labels = options?.labels;
|
|
96
|
-
return useMemo(
|
|
97
|
-
() =>
|
|
98
|
-
turns ? createTurnCommands(turns, { ...(writeText ? { writeText } : {}), ...(labels ? { labels } : {}) }) : null,
|
|
99
|
-
[turns, writeText, labels],
|
|
100
|
-
);
|
|
101
|
-
}
|