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,149 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The "Always allow" entries the user granted, grouped by project, each with
|
|
3
|
-
* a Revoke action. It reads the host's `safelist` (again on mount and when the
|
|
4
|
-
* window regains focus: entries are granted from approval cards meanwhile).
|
|
5
|
-
*/
|
|
6
|
-
import { useCallback, useEffect, useState, type CSSProperties, type ReactNode } from 'react';
|
|
7
|
-
|
|
8
|
-
import { BTN_DANGER } from '../components/button';
|
|
9
|
-
import { ErrorNote, FormSection } from '../components/Form';
|
|
10
|
-
import { EmptyState, SectionLabel } from '../components/Surface';
|
|
11
|
-
import { useReadable } from '../chat/headless/store';
|
|
12
|
-
import { ApprovalShell, type ApprovalShellProps } from './ApprovalShell';
|
|
13
|
-
import { useApprovalsHost, useApprovalsLabels } from './ApprovalsProvider';
|
|
14
|
-
import type { ApprovalsError, ApprovalsSafelist } from './headless/host';
|
|
15
|
-
|
|
16
|
-
/** Props for {@link SafelistPanel}. */
|
|
17
|
-
export interface SafelistPanelProps {
|
|
18
|
-
/** Draws the panel around the list (an app's own modal shell). It receives the title, description and body. Default: {@link ApprovalShell}. */
|
|
19
|
-
renderShell?: (props: ApprovalShellProps) => ReactNode;
|
|
20
|
-
/** Extra classes on the default shell. */
|
|
21
|
-
className?: string;
|
|
22
|
-
/** Inline styles on the default shell. */
|
|
23
|
-
style?: CSSProperties;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Renders the safelist: each project's "Always allow" entries with a Revoke button (when the host
|
|
28
|
-
* offers `safelist.remove`), the empty state, and read or revoke errors. Renders nothing when the
|
|
29
|
-
* host has no safelist.
|
|
30
|
-
*
|
|
31
|
-
* @param props - An optional `renderShell`, `className` and `style`.
|
|
32
|
-
*/
|
|
33
|
-
export function SafelistPanel(props: SafelistPanelProps) {
|
|
34
|
-
const safelist = useApprovalsHost().safelist;
|
|
35
|
-
return safelist ? <SafelistBody safelist={safelist} {...props} /> : null;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function SafelistBody({
|
|
39
|
-
safelist,
|
|
40
|
-
renderShell,
|
|
41
|
-
className,
|
|
42
|
-
style,
|
|
43
|
-
}: SafelistPanelProps & { safelist: ApprovalsSafelist }) {
|
|
44
|
-
const labels = useApprovalsLabels();
|
|
45
|
-
const state = useReadable(safelist.state);
|
|
46
|
-
const groups = state.projects;
|
|
47
|
-
// A revoke's failure; a failed read shows its own error (never an empty list).
|
|
48
|
-
const [revokeError, setRevokeError] = useState<ApprovalsError | null>(null);
|
|
49
|
-
const shown = revokeError ?? (state.status === 'error' ? state.error : null);
|
|
50
|
-
const [busyKey, setBusyKey] = useState<string | null>(null);
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
void safelist.refresh();
|
|
54
|
-
const onFocus = () => void safelist.refresh();
|
|
55
|
-
window.addEventListener('focus', onFocus);
|
|
56
|
-
return () => window.removeEventListener('focus', onFocus);
|
|
57
|
-
}, [safelist]);
|
|
58
|
-
|
|
59
|
-
const remove = safelist.remove;
|
|
60
|
-
const revoke = useCallback(
|
|
61
|
-
async (project: string, entry: string) => {
|
|
62
|
-
if (!remove) return;
|
|
63
|
-
setBusyKey(`${project}::${entry}`);
|
|
64
|
-
try {
|
|
65
|
-
setRevokeError(null);
|
|
66
|
-
await remove(project, entry);
|
|
67
|
-
} catch (err) {
|
|
68
|
-
setRevokeError(err as ApprovalsError);
|
|
69
|
-
} finally {
|
|
70
|
-
setBusyKey(null);
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
[remove],
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
const empty = groups !== null && groups.every((g) => g.entries.length === 0);
|
|
77
|
-
|
|
78
|
-
const body = (
|
|
79
|
-
<>
|
|
80
|
-
{groups === null && state.status !== 'error' && (
|
|
81
|
-
<div className="text-sm text-[var(--zg-text-muted)]">{labels.safelistLoading}</div>
|
|
82
|
-
)}
|
|
83
|
-
|
|
84
|
-
{shown && (
|
|
85
|
-
<div className="mb-3">
|
|
86
|
-
<ErrorNote>{labels.approvalsError(shown)}</ErrorNote>
|
|
87
|
-
</div>
|
|
88
|
-
)}
|
|
89
|
-
|
|
90
|
-
{groups !== null && empty && (
|
|
91
|
-
<EmptyState icon="i-ph-shield-check-duotone" title={labels.safelistEmpty} hint={labels.safelistEmptyHint} />
|
|
92
|
-
)}
|
|
93
|
-
|
|
94
|
-
{groups !== null && !empty && (
|
|
95
|
-
<div className="flex flex-col gap-5">
|
|
96
|
-
{groups
|
|
97
|
-
.filter((g) => g.entries.length > 0)
|
|
98
|
-
.map((g) => (
|
|
99
|
-
<FormSection
|
|
100
|
-
key={g.project}
|
|
101
|
-
title={
|
|
102
|
-
<span className="flex items-baseline gap-2 min-w-0 normal-case tracking-normal">
|
|
103
|
-
<SectionLabel>{labels.safelistProject}</SectionLabel>
|
|
104
|
-
<span className="zg-meta !text-[var(--zg-text)] truncate" title={g.project}>
|
|
105
|
-
{g.project}
|
|
106
|
-
</span>
|
|
107
|
-
<span className="zg-meta">{labels.safelistCount(g.entries.length)}</span>
|
|
108
|
-
</span>
|
|
109
|
-
}
|
|
110
|
-
>
|
|
111
|
-
<ul className="list-none m-0 p-0 flex flex-col">
|
|
112
|
-
{g.entries.map((entry) => {
|
|
113
|
-
const key = `${g.project}::${entry}`;
|
|
114
|
-
return (
|
|
115
|
-
<li
|
|
116
|
-
key={key}
|
|
117
|
-
className="flex items-center gap-2 pl-3 pr-1 py-1 rounded-zg-md hover:bg-[var(--zg-row-hover)] transition-colors"
|
|
118
|
-
>
|
|
119
|
-
<span className="flex-1 min-w-0 font-mono text-xs text-[var(--zg-text)] truncate" title={entry}>
|
|
120
|
-
{entry}
|
|
121
|
-
</span>
|
|
122
|
-
{remove && (
|
|
123
|
-
<button
|
|
124
|
-
type="button"
|
|
125
|
-
onClick={() => void revoke(g.project, entry)}
|
|
126
|
-
disabled={busyKey === key}
|
|
127
|
-
className={BTN_DANGER}
|
|
128
|
-
>
|
|
129
|
-
{busyKey === key ? labels.safelistRevoking : labels.safelistRevoke}
|
|
130
|
-
</button>
|
|
131
|
-
)}
|
|
132
|
-
</li>
|
|
133
|
-
);
|
|
134
|
-
})}
|
|
135
|
-
</ul>
|
|
136
|
-
</FormSection>
|
|
137
|
-
))}
|
|
138
|
-
</div>
|
|
139
|
-
)}
|
|
140
|
-
</>
|
|
141
|
-
);
|
|
142
|
-
|
|
143
|
-
const shell: ApprovalShellProps = {
|
|
144
|
-
title: labels.safelistTitle,
|
|
145
|
-
description: labels.safelistDescription,
|
|
146
|
-
children: body,
|
|
147
|
-
};
|
|
148
|
-
return renderShell ? renderShell(shell) : <ApprovalShell {...shell} className={className} style={style} />;
|
|
149
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* An `ApprovalsHost` held in memory, for docs, demos and an app's own tests:
|
|
3
|
-
* the requests you give it are pending, a decision removes one, and the
|
|
4
|
-
* safelist answers from memory.
|
|
5
|
-
*/
|
|
6
|
-
import type { ApprovalDecision, ApprovalRequest, ApprovalsHost, SafelistProject } from './host';
|
|
7
|
-
import { createPendingApprovals } from './pending';
|
|
8
|
-
import { createSafelist } from './safelist';
|
|
9
|
-
|
|
10
|
-
/** Options for {@link createFixtureApprovalsHost}. */
|
|
11
|
-
export interface FixtureApprovalsOptions {
|
|
12
|
-
/** The approvals pending at the start, oldest first. Default: none. */
|
|
13
|
-
pending?: readonly ApprovalRequest[];
|
|
14
|
-
/** The safelist's projects. Default: empty. `false`: no safelist member. */
|
|
15
|
-
safelist?: readonly SafelistProject[] | false;
|
|
16
|
-
/** `false` leaves out `resolve` and `denyAll` (a host that shows approvals but can't answer them). Default `true`. */
|
|
17
|
-
canResolve?: boolean;
|
|
18
|
-
/** Called with every decision, after the request left the queue. */
|
|
19
|
-
onResolve?(requestId: string, decision: ApprovalDecision): void;
|
|
20
|
-
/** Called with every bulk deny (`undefined`: every session), after the requests left the queue. */
|
|
21
|
-
onDenyAll?(sessionId: string | undefined): void;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** The fixture host, plus a way to raise a request as a running agent would. */
|
|
25
|
-
export interface FixtureApprovalsHost extends ApprovalsHost {
|
|
26
|
-
/** Adds a request to the queue, as a tool call that needs approval does. */
|
|
27
|
-
raise(request: ApprovalRequest): void;
|
|
28
|
-
/** Removes a request without a decision, as when another window answered it. */
|
|
29
|
-
dismiss(requestId: string): void;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Creates an {@link ApprovalsHost} held in memory.
|
|
34
|
-
*
|
|
35
|
-
* @param options - The pending approvals, the safelist, and whether decisions are offered.
|
|
36
|
-
*/
|
|
37
|
-
export function createFixtureApprovalsHost(options: FixtureApprovalsOptions = {}): FixtureApprovalsHost {
|
|
38
|
-
const { canResolve = true, onResolve, onDenyAll } = options;
|
|
39
|
-
const pending = createPendingApprovals();
|
|
40
|
-
pending.merge(options.pending ?? []);
|
|
41
|
-
let projects: SafelistProject[] =
|
|
42
|
-
options.safelist === false ? [] : (options.safelist ?? []).map((p) => ({ ...p, entries: [...p.entries] }));
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
pending,
|
|
46
|
-
raise: pending.add,
|
|
47
|
-
dismiss: pending.drop,
|
|
48
|
-
...(canResolve
|
|
49
|
-
? {
|
|
50
|
-
async resolve(requestId: string, decision: ApprovalDecision) {
|
|
51
|
-
if (pending.take(requestId)) onResolve?.(requestId, decision);
|
|
52
|
-
},
|
|
53
|
-
async denyAll(sessionId?: string) {
|
|
54
|
-
pending.takeAll(sessionId);
|
|
55
|
-
onDenyAll?.(sessionId);
|
|
56
|
-
},
|
|
57
|
-
}
|
|
58
|
-
: {}),
|
|
59
|
-
...(options.safelist === false
|
|
60
|
-
? {}
|
|
61
|
-
: {
|
|
62
|
-
safelist: createSafelist({
|
|
63
|
-
list: async () =>
|
|
64
|
-
projects.filter((p) => p.entries.length > 0).map((p) => ({ ...p, entries: [...p.entries] })),
|
|
65
|
-
remove: async (project, entry) => {
|
|
66
|
-
projects = projects.map((p) =>
|
|
67
|
-
p.project === project ? { ...p, entries: p.entries.filter((e) => e !== entry) } : p,
|
|
68
|
-
);
|
|
69
|
-
},
|
|
70
|
-
}),
|
|
71
|
-
}),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Demo approvals for docs, galleries and tests: a shell command, a one-hunk
|
|
3
|
-
* edit, a multi-hunk edit with a hunk the resolver could not find, and a
|
|
4
|
-
* safelist.
|
|
5
|
-
*/
|
|
6
|
-
import type { ApprovalRequest, SafelistProject } from './host';
|
|
7
|
-
|
|
8
|
-
/** A shell command waiting for approval, with its working directory and timeout. */
|
|
9
|
-
export const DEMO_SHELL_APPROVAL: ApprovalRequest = {
|
|
10
|
-
id: 'demo-shell',
|
|
11
|
-
sessionId: 'demo',
|
|
12
|
-
cwd: '/work/api',
|
|
13
|
-
tool: 'shell',
|
|
14
|
-
input: { command: 'git push --force-with-lease origin main', cwd: '/work/api', timeout: 30000 },
|
|
15
|
-
suggestedSafelistEntries: ['shell:git:*'],
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/** A one-hunk `edit`, with its resolved preview. */
|
|
19
|
-
export const DEMO_EDIT_APPROVAL: ApprovalRequest = {
|
|
20
|
-
id: 'demo-edit',
|
|
21
|
-
sessionId: 'demo',
|
|
22
|
-
cwd: '/work/api',
|
|
23
|
-
tool: 'edit',
|
|
24
|
-
input: { file_path: 'src/limits.ts', old_string: 'const MAX = 10', new_string: 'const MAX = 50' },
|
|
25
|
-
suggestedSafelistEntries: ['edit'],
|
|
26
|
-
edit: {
|
|
27
|
-
tool: 'edit',
|
|
28
|
-
path: 'src/limits.ts',
|
|
29
|
-
hunks: [
|
|
30
|
-
{ oldString: 'const MAX = 10\nconst WINDOW_MS = 1000', newString: 'const MAX = 50\nconst WINDOW_MS = 60_000' },
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
|
-
preview: {
|
|
34
|
-
diffText: '',
|
|
35
|
-
perHunkDiff: [''],
|
|
36
|
-
resolution: [{ resolved: true, via: 'exact', occurrences: 1 }],
|
|
37
|
-
resolvedPayload: {
|
|
38
|
-
tool: 'edit',
|
|
39
|
-
path: 'src/limits.ts',
|
|
40
|
-
hunks: [
|
|
41
|
-
{ oldString: 'const MAX = 10\nconst WINDOW_MS = 1000', newString: 'const MAX = 50\nconst WINDOW_MS = 60_000' },
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const MULTI_HUNKS = [
|
|
48
|
-
{ oldString: "import { log } from './log'", newString: "import { log, warn } from './log'" },
|
|
49
|
-
{ oldString: " log('retrying')", newString: " warn('retrying', { attempt })" },
|
|
50
|
-
{ oldString: ' return null', newString: ' throw new RetryError(attempt)', replaceAll: true },
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
/** A three-hunk `multi_edit` from a subagent: one hunk matched a close variant, one is not in the file. */
|
|
54
|
-
export const DEMO_MULTI_EDIT_APPROVAL: ApprovalRequest = {
|
|
55
|
-
id: 'demo-multi-edit',
|
|
56
|
-
sessionId: 'demo',
|
|
57
|
-
cwd: '/work/api',
|
|
58
|
-
tool: 'multi_edit',
|
|
59
|
-
input: { file_path: 'src/retry.ts', edits: [] },
|
|
60
|
-
suggestedSafelistEntries: ['multi_edit'],
|
|
61
|
-
originator: { kind: 'child', label: 'child-2' },
|
|
62
|
-
edit: { tool: 'multi_edit', path: 'src/retry.ts', hunks: MULTI_HUNKS },
|
|
63
|
-
preview: {
|
|
64
|
-
diffText: '',
|
|
65
|
-
perHunkDiff: ['', '', ''],
|
|
66
|
-
resolution: [
|
|
67
|
-
{ resolved: true, via: 'exact', occurrences: 1 },
|
|
68
|
-
{ resolved: true, via: 'quotes', occurrences: 1 },
|
|
69
|
-
{ resolved: false, occurrences: 0 },
|
|
70
|
-
],
|
|
71
|
-
resolvedPayload: { tool: 'multi_edit', path: 'src/retry.ts', hunks: MULTI_HUNKS },
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
/** The demo approvals, oldest first. */
|
|
76
|
-
export const DEMO_APPROVALS: readonly ApprovalRequest[] = [
|
|
77
|
-
DEMO_SHELL_APPROVAL,
|
|
78
|
-
DEMO_EDIT_APPROVAL,
|
|
79
|
-
DEMO_MULTI_EDIT_APPROVAL,
|
|
80
|
-
];
|
|
81
|
-
|
|
82
|
-
/** A demo safelist: two projects. */
|
|
83
|
-
export const DEMO_SAFELIST: readonly SafelistProject[] = [
|
|
84
|
-
{ project: '/work/api', entries: ['shell:git:*', 'shell:bun:test', 'fetch_url'] },
|
|
85
|
-
{ project: '/work/site', entries: ['shell:npm:run:*'] },
|
|
86
|
-
];
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Each session's first pending approval, as its own store: a sidebar row or a
|
|
3
|
-
* status dot re-renders only when ITS session's head changes, never when an
|
|
4
|
-
* approval lands in another session.
|
|
5
|
-
*/
|
|
6
|
-
import type { Readable } from '../../chat/headless/store';
|
|
7
|
-
import type { ApprovalRequest } from './host';
|
|
8
|
-
|
|
9
|
-
/** Per-session heads of a pending queue. */
|
|
10
|
-
export interface ApprovalHeads {
|
|
11
|
-
/** The first pending approval of `sessionId` (same reference while it stays the head), or `null`. */
|
|
12
|
-
get(sessionId: string | null): ApprovalRequest | null;
|
|
13
|
-
/** Calls `onChange` when the head of `sessionId` changes. Returns the unsubscribe. A `null` session never changes. */
|
|
14
|
-
subscribe(sessionId: string | null, onChange: () => void): () => void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Indexes a pending queue by session: the first request of each session (first arrival wins).
|
|
19
|
-
* It listens to the queue only while a session has a subscriber; a read without one indexes the
|
|
20
|
-
* queue as it is.
|
|
21
|
-
*
|
|
22
|
-
* @param pending - The pending approvals, oldest first.
|
|
23
|
-
*/
|
|
24
|
-
export function createApprovalHeads(pending: Readable<readonly ApprovalRequest[]>): ApprovalHeads {
|
|
25
|
-
const heads = new Map<string, ApprovalRequest>();
|
|
26
|
-
const listeners = new Map<string, Set<() => void>>();
|
|
27
|
-
let indexed: readonly ApprovalRequest[] | null = null;
|
|
28
|
-
let off: (() => void) | null = null;
|
|
29
|
-
let count = 0;
|
|
30
|
-
|
|
31
|
-
/** Re-indexes when the queue changed; returns the sessions whose head changed. */
|
|
32
|
-
const sync = (): Set<string> => {
|
|
33
|
-
const queue = pending.get();
|
|
34
|
-
const touched = new Set<string>();
|
|
35
|
-
if (queue === indexed) return touched;
|
|
36
|
-
indexed = queue;
|
|
37
|
-
const next = new Map<string, ApprovalRequest>();
|
|
38
|
-
for (const entry of queue) if (!next.has(entry.sessionId)) next.set(entry.sessionId, entry);
|
|
39
|
-
for (const [sessionId, head] of next) if (heads.get(sessionId) !== head) touched.add(sessionId);
|
|
40
|
-
for (const sessionId of heads.keys()) if (!next.has(sessionId)) touched.add(sessionId);
|
|
41
|
-
heads.clear();
|
|
42
|
-
for (const [sessionId, head] of next) heads.set(sessionId, head);
|
|
43
|
-
return touched;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const onQueue = () => {
|
|
47
|
-
for (const sessionId of sync()) for (const fn of [...(listeners.get(sessionId) ?? [])]) fn();
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
get(sessionId) {
|
|
52
|
-
if (!sessionId) return null;
|
|
53
|
-
if (!off) sync();
|
|
54
|
-
return heads.get(sessionId) ?? null;
|
|
55
|
-
},
|
|
56
|
-
subscribe(sessionId, onChange) {
|
|
57
|
-
if (!sessionId) return () => undefined;
|
|
58
|
-
let set = listeners.get(sessionId);
|
|
59
|
-
if (!set) listeners.set(sessionId, (set = new Set()));
|
|
60
|
-
set.add(onChange);
|
|
61
|
-
count += 1;
|
|
62
|
-
if (!off) {
|
|
63
|
-
sync();
|
|
64
|
-
off = pending.subscribe(onQueue);
|
|
65
|
-
}
|
|
66
|
-
let live = true;
|
|
67
|
-
return () => {
|
|
68
|
-
if (!live) return;
|
|
69
|
-
live = false;
|
|
70
|
-
const current = listeners.get(sessionId);
|
|
71
|
-
current?.delete(onChange);
|
|
72
|
-
if (current?.size === 0) listeners.delete(sessionId);
|
|
73
|
-
count -= 1;
|
|
74
|
-
if (count === 0 && off) {
|
|
75
|
-
off();
|
|
76
|
-
off = null;
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The contract between the approval components and an app, as `ChatHost` is
|
|
3
|
-
* for the chat: the tool calls waiting for the user's decision (safe mode),
|
|
4
|
-
* the decisions, and the "Always allow" entries the user granted.
|
|
5
|
-
*
|
|
6
|
-
* The desktop app implements it over IPC, `createServerApprovalsHost`
|
|
7
|
-
* (`zidane-ui/adapters`) over zidane-server, `createFixtureApprovalsHost`
|
|
8
|
-
* (`zidane-ui/approvals/testing`) in memory.
|
|
9
|
-
*
|
|
10
|
-
* If the host leaves out a member, its UI does not show. Without `resolve`,
|
|
11
|
-
* the approval card shows the request without its buttons. Without
|
|
12
|
-
* `safelist`, there is no safelist panel to open.
|
|
13
|
-
*/
|
|
14
|
-
import type { ApprovalDecision, WireApprovalRequest } from 'zidane/chat';
|
|
15
|
-
|
|
16
|
-
import type { Readable } from '../../chat/headless/store';
|
|
17
|
-
|
|
18
|
-
/** A decision on an approval: allow once, for the session, always (safelist), deny, or a subset of an edit's hunks. */
|
|
19
|
-
export type { ApprovalDecision };
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* A tool call waiting for the user's decision: the tool and its input, the session that raised
|
|
23
|
-
* it, the safelist entries "Always allow" adds, and for edit tools the edit and its diff preview.
|
|
24
|
-
*/
|
|
25
|
-
export type ApprovalRequest = WireApprovalRequest;
|
|
26
|
-
|
|
27
|
-
/** What went wrong, for the UI to word through its labels. `detail` is the backend's own message. */
|
|
28
|
-
export interface ApprovalsError {
|
|
29
|
-
/** `read`: listing failed. `revoke`: removing a safelist entry failed. */
|
|
30
|
-
kind: 'read' | 'revoke';
|
|
31
|
-
/** The backend's message, shown as is by the default labels. */
|
|
32
|
-
detail: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** The "Always allow" entries of one project. */
|
|
36
|
-
export interface SafelistProject {
|
|
37
|
-
/** The project the entries apply to (its root folder). */
|
|
38
|
-
project: string;
|
|
39
|
-
/** The entries, as zidane stores them (`shell:git:*`, `fetch_url`…). */
|
|
40
|
-
entries: readonly string[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Where the safelist is: not read yet, being read, read, or failed. */
|
|
44
|
-
export interface SafelistState {
|
|
45
|
-
/** `idle` before the first read; `loading` while a read is in flight; `ready` or `error` after. */
|
|
46
|
-
status: 'idle' | 'loading' | 'ready' | 'error';
|
|
47
|
-
/** The projects from the last read that succeeded, `null` until one did. */
|
|
48
|
-
projects: readonly SafelistProject[] | null;
|
|
49
|
-
/** Why the last read failed, `null` when it did not. */
|
|
50
|
-
error: ApprovalsError | null;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** The safelist: what the user allowed with "Always allow", and revoking an entry. */
|
|
54
|
-
export interface ApprovalsSafelist {
|
|
55
|
-
/** The safelist as last read. */
|
|
56
|
-
state: Readable<SafelistState>;
|
|
57
|
-
/** Reads the safelist again. Never rejects: a failure lands in `state.error`. */
|
|
58
|
-
refresh(): Promise<void>;
|
|
59
|
-
/** Removes one entry, then reads the safelist again. Rejects with an {@link ApprovalsError}. Absent: the list is read-only. */
|
|
60
|
-
remove?(project: string, entry: string): Promise<void>;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/** What the approval components read and the decisions they send. */
|
|
64
|
-
export interface ApprovalsHost {
|
|
65
|
-
/**
|
|
66
|
-
* The approvals waiting for a decision, oldest first. The host keeps it current: new requests,
|
|
67
|
-
* requests answered elsewhere (another window, a terminal), and a re-read after a reconnect.
|
|
68
|
-
* The host starts listening when the store gets its first subscriber.
|
|
69
|
-
*/
|
|
70
|
-
pending: Readable<readonly ApprovalRequest[]>;
|
|
71
|
-
/**
|
|
72
|
-
* Answers a pending approval. The request leaves `pending` at once; an id that is not pending
|
|
73
|
-
* does nothing. Absent: the host can show approvals but not answer them.
|
|
74
|
-
*/
|
|
75
|
-
resolve?(requestId: string, decision: ApprovalDecision): Promise<void>;
|
|
76
|
-
/** Denies every pending approval, or only those of `sessionId`. Absent: no bulk deny. */
|
|
77
|
-
denyAll?(sessionId?: string): Promise<void>;
|
|
78
|
-
/** The "Always allow" entries. Absent: no safelist panel. */
|
|
79
|
-
safelist?: ApprovalsSafelist;
|
|
80
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `zidane-ui/approvals/headless`: the React-free half of the approvals area.
|
|
3
|
-
* The `ApprovalsHost` seam, the pending queue every host keeps
|
|
4
|
-
* (`createPendingApprovals`), the per-session heads, the safelist store,
|
|
5
|
-
* the preview helpers and the labels.
|
|
6
|
-
*/
|
|
7
|
-
export * from './host';
|
|
8
|
-
export * from './pending';
|
|
9
|
-
export * from './heads';
|
|
10
|
-
export * from './safelist';
|
|
11
|
-
export * from './preview';
|
|
12
|
-
export * from './labels';
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The approval components' strings. One flat dictionary, every key prefixed
|
|
3
|
-
* (`approval…`, `hunk…`, `safelist…`) so it shares a `<LabelsProvider>`
|
|
4
|
-
* with the other areas' keys; the headless helpers take it as an argument.
|
|
5
|
-
*/
|
|
6
|
-
import type { ModelApproval } from 'zidane/chat';
|
|
7
|
-
import { modelConcern } from 'zidane/chat/pure';
|
|
8
|
-
|
|
9
|
-
import type { ApprovalsError } from './host';
|
|
10
|
-
|
|
11
|
-
/** The default English strings of the approval components. Override any of them through `ApprovalsProvider` or `LabelsProvider`. */
|
|
12
|
-
export const DEFAULT_APPROVALS_LABELS = {
|
|
13
|
-
/** Before the tool name in the inline card's title: "Allow Zidane to run `shell`?". */
|
|
14
|
-
approvalRunBefore: 'Allow Zidane to run',
|
|
15
|
-
/** After the tool name in the inline card's title. */
|
|
16
|
-
approvalRunAfter: '?',
|
|
17
|
-
approvalDeny: 'Deny',
|
|
18
|
-
approvalAlwaysAllow: 'Always allow',
|
|
19
|
-
approvalAllowOnce: 'Allow once',
|
|
20
|
-
approvalAllowForSession: 'Allow for session',
|
|
21
|
-
approvalAllow: 'Allow',
|
|
22
|
-
approvalAllowNoneSelected: 'Allow (none selected)',
|
|
23
|
-
approvalApplySelected: (selected: number, total: number) => `Apply selected (${selected} of ${total})`,
|
|
24
|
-
approvalCwd: (cwd: string) => `cwd ${cwd}`,
|
|
25
|
-
approvalTimeout: (timeout: string) => `timeout ${timeout}`,
|
|
26
|
-
/** What worried the decision model when it handed the call to the user. */
|
|
27
|
-
approvalConcern: (concern: ModelApproval) => modelConcern(concern),
|
|
28
|
-
approvalFileEditTitle: (tool: string, path: string | null) => `Allow Zidane to ${tool}${path ? ` ${path}` : ''}?`,
|
|
29
|
-
approvalFileEditReview: 'Review the change before you allow it.',
|
|
30
|
-
approvalFileEditNoPath: 'No file path given. Check the input below.',
|
|
31
|
-
approvalFromSubagent: (label: string) => `From subagent ${label}`,
|
|
32
|
-
approvalClose: 'Close',
|
|
33
|
-
hunksOf: 'of',
|
|
34
|
-
hunksSelected: 'hunks selected',
|
|
35
|
-
hunksSelectAll: 'Select all',
|
|
36
|
-
hunksClear: 'Clear',
|
|
37
|
-
hunksSomeMissing: 'Some hunks are not in the file',
|
|
38
|
-
hunkInclude: (index: number, total: number) => `Include hunk ${index} of ${total}`,
|
|
39
|
-
hunkTitle: (index: number, total: number) => `Hunk ${index}/${total}`,
|
|
40
|
-
hunkReplaceAll: 'replace all',
|
|
41
|
-
hunkAmbiguous: (matches: number) => `ambiguous (${matches} matches)`,
|
|
42
|
-
hunkAmbiguousHint: (matches: number) =>
|
|
43
|
-
`The text to replace appears ${matches} times in the file. The edit needs a unique snippet, or to replace every match.`,
|
|
44
|
-
hunkNotInFile: 'not in file',
|
|
45
|
-
hunkNotInFileHint:
|
|
46
|
-
'The text to replace is not in the file. The file may have changed since the model read it. If you allow this hunk, it fails.',
|
|
47
|
-
hunkVia: (via: string) => `via ${via}`,
|
|
48
|
-
hunkViaHint: (via: string) => `The exact text to replace is not in the file. A close variant matched (${via}).`,
|
|
49
|
-
hunkFile: '(file)',
|
|
50
|
-
hunkNewFile: 'new file',
|
|
51
|
-
hunkAdded: (count: number) => `+${count}`,
|
|
52
|
-
hunkRemoved: (count: number) => `−${count}`,
|
|
53
|
-
safelistTitle: 'Safelisted commands',
|
|
54
|
-
safelistDescription: 'Commands you allowed with "Always allow". If you revoke one, Zidane asks again next time.',
|
|
55
|
-
safelistLoading: 'Loading…',
|
|
56
|
-
safelistEmpty: 'No safelisted commands yet',
|
|
57
|
-
safelistEmptyHint: 'Click "Always allow" on an approval to add one.',
|
|
58
|
-
safelistProject: 'Project',
|
|
59
|
-
safelistCount: (count: number) => `(${count})`,
|
|
60
|
-
safelistRevoke: 'Revoke',
|
|
61
|
-
safelistRevoking: 'Revoking…',
|
|
62
|
-
/** A failed read or revoke. The default shows the backend's message. */
|
|
63
|
-
approvalsError: (error: ApprovalsError) => error.detail,
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
/** The approval components' strings: the shape of {@link DEFAULT_APPROVALS_LABELS}. */
|
|
67
|
-
export type ApprovalsLabels = typeof DEFAULT_APPROVALS_LABELS;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The pending-approvals queue every host keeps the same way: new requests
|
|
3
|
-
* appended once (by id), requests answered elsewhere dropped without an
|
|
4
|
-
* answer, a re-read after a (re)connect merged in, and a decision taking the
|
|
5
|
-
* request out at once (optimistic, so a second click is a no-op).
|
|
6
|
-
*
|
|
7
|
-
* It listens to its backend only while someone reads it: `connect` runs on
|
|
8
|
-
* the first subscriber and its cleanup on the last unsubscribe.
|
|
9
|
-
*/
|
|
10
|
-
import { writable, type Readable } from '../../chat/headless/store';
|
|
11
|
-
import type { ApprovalRequest } from './host';
|
|
12
|
-
|
|
13
|
-
/** What a backend does to the queue: what `connect` receives. */
|
|
14
|
-
export interface PendingApprovalsSink {
|
|
15
|
-
/** Appends a request, unless one with its id is already pending. */
|
|
16
|
-
add(request: ApprovalRequest): void;
|
|
17
|
-
/** Drops a request answered elsewhere. Unknown ids do nothing. */
|
|
18
|
-
drop(requestId: string): void;
|
|
19
|
-
/** Appends the requests of a re-read that are not pending yet (a re-read never removes). */
|
|
20
|
-
merge(requests: readonly ApprovalRequest[]): void;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** The queue: a readable list, what a backend does to it, and taking requests out to answer them. */
|
|
24
|
-
export interface PendingApprovals extends Readable<readonly ApprovalRequest[]>, PendingApprovalsSink {
|
|
25
|
-
/** Takes a request out to answer it. `undefined` when it is not pending. */
|
|
26
|
-
take(requestId: string): ApprovalRequest | undefined;
|
|
27
|
-
/** Takes out every pending request, or those of `sessionId`, to deny them. */
|
|
28
|
-
takeAll(sessionId?: string): ApprovalRequest[];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Creates a pending-approvals queue.
|
|
33
|
-
*
|
|
34
|
-
* @param connect - Starts listening to the backend with the queue's sink; returns how to stop. Runs while the queue has subscribers.
|
|
35
|
-
*/
|
|
36
|
-
export function createPendingApprovals(connect?: (sink: PendingApprovalsSink) => () => void): PendingApprovals {
|
|
37
|
-
const list = writable<readonly ApprovalRequest[]>([]);
|
|
38
|
-
let subscribers = 0;
|
|
39
|
-
let stop: (() => void) | null = null;
|
|
40
|
-
|
|
41
|
-
const without = (keep: (r: ApprovalRequest) => boolean) => {
|
|
42
|
-
const prev = list.get();
|
|
43
|
-
const next = prev.filter(keep);
|
|
44
|
-
if (next.length !== prev.length) list.set(next);
|
|
45
|
-
return prev.filter((r) => !keep(r));
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const sink: PendingApprovalsSink = {
|
|
49
|
-
add(request) {
|
|
50
|
-
list.set((prev) => (prev.some((r) => r.id === request.id) ? prev : [...prev, request]));
|
|
51
|
-
},
|
|
52
|
-
drop(requestId) {
|
|
53
|
-
without((r) => r.id !== requestId);
|
|
54
|
-
},
|
|
55
|
-
merge(requests) {
|
|
56
|
-
list.set((prev) => {
|
|
57
|
-
const seen = new Set(prev.map((r) => r.id));
|
|
58
|
-
const additions = requests.filter((r) => !seen.has(r.id));
|
|
59
|
-
return additions.length === 0 ? prev : [...prev, ...additions];
|
|
60
|
-
});
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
return {
|
|
65
|
-
...sink,
|
|
66
|
-
get: list.get,
|
|
67
|
-
subscribe(onChange) {
|
|
68
|
-
const off = list.subscribe(onChange);
|
|
69
|
-
subscribers += 1;
|
|
70
|
-
if (subscribers === 1 && connect) stop = connect(sink);
|
|
71
|
-
let live = true;
|
|
72
|
-
return () => {
|
|
73
|
-
if (!live) return;
|
|
74
|
-
live = false;
|
|
75
|
-
off();
|
|
76
|
-
subscribers -= 1;
|
|
77
|
-
if (subscribers === 0 && stop) {
|
|
78
|
-
const done = stop;
|
|
79
|
-
stop = null;
|
|
80
|
-
done();
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
take(requestId) {
|
|
85
|
-
return without((r) => r.id !== requestId)[0];
|
|
86
|
-
},
|
|
87
|
-
takeAll(sessionId) {
|
|
88
|
-
return without((r) => sessionId !== undefined && r.sessionId !== sessionId);
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
}
|