zidane-ui 9.1.4 → 9.1.6
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/dist/adapters/server-extensions-host.js +1 -1
- package/dist/adapters/server-host.js +2 -1
- package/dist/adapters/server-machines-host.js +1 -1
- package/dist/adapters/server-session-host.js +87 -13
- package/dist/adapters/server-settings-host.js +1 -1
- package/dist/appearance/AppearanceProvider.js +2 -2
- package/dist/appearance/headless/index.js +1 -1
- package/dist/approvals/headless/index.js +2 -2
- package/dist/chat/HostTranscript.d.ts +5 -1
- package/dist/chat/HostTranscript.js +16 -4
- package/dist/chat/RunEstimateChip.d.ts +5 -3
- package/dist/chat/RunEstimateChip.js +33 -3
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/ConversationBadges.js +16 -10
- package/dist/chat/composer/composer-bus.d.ts +2 -2
- package/dist/chat/composer/composer-bus.js +2 -2
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/composer/use-run-meter.js +1 -1
- package/dist/chat/headless/composer/conversation-badges.d.ts +8 -3
- package/dist/chat/headless/composer/conversation-badges.js +26 -11
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/composer/labels-chrome.d.ts +3 -1
- package/dist/chat/headless/composer/labels-chrome.js +3 -1
- package/dist/chat/headless/index.d.ts +6 -3
- package/dist/chat/headless/index.js +16 -13
- package/dist/chat/headless/labels.d.ts +54 -1
- package/dist/chat/headless/labels.js +62 -2
- package/dist/chat/headless/secrets.d.ts +32 -0
- package/dist/chat/headless/secrets.js +43 -0
- package/dist/chat/headless/session-list.d.ts +45 -0
- package/dist/chat/headless/sidebar/estimates.js +13 -1
- package/dist/chat/headless/sidebar/history.d.ts +71 -0
- package/dist/chat/headless/sidebar/history.js +174 -0
- package/dist/chat/headless/sidebar/index.d.ts +3 -2
- package/dist/chat/headless/sidebar/index.js +2 -1
- package/dist/chat/headless/sidebar/labels.d.ts +50 -0
- package/dist/chat/headless/sidebar/labels.js +1 -0
- package/dist/chat/headless/sidebar/query.d.ts +2 -2
- package/dist/chat/headless/sidebar/query.js +6 -3
- package/dist/chat/headless/sidebar/types.d.ts +7 -1
- package/dist/chat/headless/sidebar/view.js +2 -0
- package/dist/chat/headless/transcript/auth-failure.d.ts +67 -0
- package/dist/chat/headless/transcript/auth-failure.js +87 -0
- package/dist/chat/headless/transcript/index.d.ts +2 -1
- package/dist/chat/headless/transcript/index.js +2 -1
- package/dist/chat/headless/transcript/nesting.d.ts +3 -3
- package/dist/chat/headless/transcript/nesting.js +12 -4
- package/dist/chat/index.d.ts +4 -2
- package/dist/chat/index.js +3 -1
- package/dist/chat/interactions/InboxPanel.d.ts +6 -2
- package/dist/chat/interactions/InboxPanel.js +82 -44
- package/dist/chat/interactions/PlanCard.d.ts +2 -2
- package/dist/chat/interactions/PlanCard.js +1 -1
- package/dist/chat/interactions/QuestionField.d.ts +8 -3
- package/dist/chat/interactions/QuestionField.js +89 -8
- package/dist/chat/interactions/QuestionForm.d.ts +3 -1
- package/dist/chat/interactions/QuestionForm.js +48 -10
- package/dist/chat/interactions/SecretInput.d.ts +32 -0
- package/dist/chat/interactions/SecretInput.js +72 -0
- package/dist/chat/interactions/card-ui.d.ts +5 -3
- package/dist/chat/interactions/card-ui.js +5 -3
- package/dist/chat/interactions/index.d.ts +2 -1
- package/dist/chat/interactions/index.js +2 -1
- package/dist/chat/sidebar/SessionSidebar.js +2 -0
- package/dist/chat/sidebar/SidebarFilterMenu.d.ts +7 -2
- package/dist/chat/sidebar/SidebarFilterMenu.js +26 -2
- package/dist/chat/sidebar/SidebarSessionRow.d.ts +3 -1
- package/dist/chat/sidebar/SidebarSessionRow.js +8 -3
- package/dist/chat/sidebar/sidebar-live.js +8 -4
- package/dist/chat/transcript/AuthFailureCard.d.ts +34 -0
- package/dist/chat/transcript/AuthFailureCard.js +358 -0
- package/dist/chat/transcript/InteractionToolBody.js +12 -2
- package/dist/chat/transcript/actions.d.ts +24 -1
- package/dist/chat/transcript/index.d.ts +3 -2
- package/dist/chat/transcript/index.js +2 -1
- package/dist/chat/transcript/notices.d.ts +2 -1
- package/dist/chat/transcript/notices.js +13 -1
- package/dist/chat/transcript/script-input.d.ts +1 -1
- package/dist/chat/transcript/shell-block.js +1 -1
- package/dist/components/HowItWorks.d.ts +8 -1
- package/dist/components/HowItWorks.js +2 -2
- package/dist/components/RowActionsMenu.d.ts +6 -1
- package/dist/components/RowActionsMenu.js +4 -0
- package/dist/core.css +24 -0
- package/dist/dist/{index-WlE93Q6d.d.ts → index-DqCio7Nd.d.ts} +36 -3
- package/dist/dist/index-f-XWIoYo.d.ts +1 -0
- package/dist/dist/index.d.ts +6 -0
- package/dist/dist/sandbox-B4OW6oNx.d.ts +2 -0
- package/dist/dist/timeout-B5pO5I5a.d.ts +30 -0
- package/dist/extensions/ExtensionSettingsPage.js +1 -1
- package/dist/extensions/ExtensionSettingsSidebar.js +1 -1
- package/dist/extensions/headless/fixture-host.js +1 -1
- package/dist/extensions/headless/index.js +4 -4
- package/dist/extensions/hooks.js +1 -1
- package/dist/files/DiffsTab.js +1 -1
- package/dist/files/EditorColumn.js +1 -1
- package/dist/files/MediaDiff.js +1 -1
- package/dist/files/SearchPanel.js +121 -53
- package/dist/files/headless/name-match.js +29 -14
- package/dist/files/useEntryActions.js +1 -1
- package/dist/files/useOpenFiles.js +1 -1
- package/dist/git/WherePicker.js +2 -2
- package/dist/git/headless/environment.d.ts +6 -1
- package/dist/git/headless/environment.js +5 -2
- package/dist/git/headless/labels.d.ts +2 -0
- package/dist/git/headless/labels.js +2 -0
- package/dist/git/index.d.ts +2 -1
- package/dist/git/index.js +2 -1
- package/dist/git/useStartFromPanel.d.ts +22 -0
- package/dist/git/useStartFromPanel.js +91 -0
- package/dist/keybindings/KeyCommands.js +1 -1
- package/dist/keybindings/KeybindingsProvider.js +1 -1
- package/dist/keybindings/headless/catalog.d.ts +1 -1
- package/dist/keybindings/headless/catalog.js +14 -2
- package/dist/keybindings/headless/index.js +2 -2
- package/dist/keybindings/headless/key-scope.d.ts +4 -2
- package/dist/keybindings/headless/key-scope.js +17 -2
- package/dist/keybindings/headless/overrides.js +1 -1
- package/dist/machines/HostSyncPanel.js +1 -1
- package/dist/machines/SyncOutcomeBadge.js +1 -1
- package/dist/machines/headless/index.js +1 -1
- package/dist/onboarding/demos/features.d.ts +9 -1
- package/dist/onboarding/demos/features.js +107 -2
- package/dist/onboarding/demos/how-it-works.d.ts +5 -1
- package/dist/onboarding/demos/how-it-works.js +120 -2
- package/dist/onboarding/demos/index.js +1 -1
- package/dist/onboarding/headless/labels.d.ts +17 -0
- package/dist/onboarding/headless/labels.js +17 -0
- package/dist/onboarding/index.js +4 -4
- package/dist/onboarding/marks.d.ts +1 -2
- package/dist/onboarding/marks.js +4 -12
- package/dist/onboarding/steps/ConnectorsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +1 -1
- package/dist/onboarding/steps/SkillsStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/onboarding/tutorials.d.ts +3 -1
- package/dist/onboarding/tutorials.js +2 -1
- package/dist/palette/app-sources.js +1 -1
- package/dist/palette/headless/app-sources.js +10 -0
- package/dist/palette/headless/labels.js +2 -0
- package/dist/session/ArtifactsPanel.js +1 -1
- package/dist/session/PanelAttention.d.ts +14 -6
- package/dist/session/PanelAttention.js +35 -24
- package/dist/session/PlanTracker.d.ts +54 -0
- package/dist/session/PlanTracker.js +413 -0
- package/dist/session/ProjectHome.d.ts +15 -2
- package/dist/session/ProjectHome.js +158 -85
- package/dist/session/RemindersPanel.d.ts +25 -0
- package/dist/session/RemindersPanel.js +526 -0
- package/dist/session/SecretsPanel.d.ts +19 -0
- package/dist/session/SecretsPanel.js +241 -0
- package/dist/session/SessionProvider.d.ts +26 -5
- package/dist/session/SessionProvider.js +51 -6
- package/dist/session/StepStatusIcon.d.ts +24 -0
- package/dist/session/StepStatusIcon.js +50 -0
- package/dist/session/TodoList.d.ts +4 -3
- package/dist/session/TodoList.js +6 -5
- package/dist/session/headless/fixture-host.d.ts +32 -22
- package/dist/session/headless/fixture-host.js +86 -51
- package/dist/session/headless/fixture-plans.d.ts +57 -0
- package/dist/session/headless/fixture-plans.js +141 -0
- package/dist/session/headless/fixture-schedules.d.ts +49 -0
- package/dist/session/headless/fixture-schedules.js +133 -0
- package/dist/session/headless/home-layout.d.ts +10 -2
- package/dist/session/headless/home-layout.js +7 -2
- package/dist/session/headless/host.d.ts +85 -13
- package/dist/session/headless/index.d.ts +5 -3
- package/dist/session/headless/index.js +5 -3
- package/dist/session/headless/labels.d.ts +95 -12
- package/dist/session/headless/labels.js +67 -18
- package/dist/session/headless/plans.d.ts +53 -0
- package/dist/session/headless/plans.js +78 -0
- package/dist/session/headless/reminder-labels.d.ts +63 -0
- package/dist/session/headless/reminder-labels.js +84 -0
- package/dist/session/headless/schedules.d.ts +93 -0
- package/dist/session/headless/schedules.js +190 -0
- package/dist/session/headless/secrets.d.ts +28 -0
- package/dist/session/headless/secrets.js +48 -0
- package/dist/session/index.d.ts +7 -5
- package/dist/session/index.js +6 -4
- package/dist/session/testing/contract.d.ts +18 -5
- package/dist/session/testing/contract.js +351 -43
- package/dist/session/testing/index.d.ts +4 -2
- package/dist/session/testing/index.js +4 -2
- package/dist/settings/headless/catalog.js +17 -1
- package/dist/settings/headless/index.d.ts +2 -2
- package/dist/settings/headless/index.js +3 -3
- package/dist/settings/headless/labels.d.ts +0 -2
- package/dist/settings/headless/labels.js +0 -2
- package/dist/settings/headless/layout.js +7 -1
- package/dist/settings/headless/providers.d.ts +17 -1
- package/dist/settings/headless/providers.js +19 -1
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/rows.d.ts +1 -1
- package/dist/settings/rows.js +2 -2
- package/dist/settings/sections/appearance/AppearanceSection.js +2 -2
- package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
- package/dist/settings/sections/editor/EditorSection.js +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ChangeOriginDialog.js +1 -1
- package/dist/settings/sections/extensions/CreateExtensionDialog.js +1 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +1 -1
- package/dist/settings/sections/host-catalog/HostCatalogSection.js +1 -1
- package/dist/settings/sections/instructions/InstructionsSection.js +1 -1
- package/dist/settings/sections/keybindings/labels.d.ts +2 -0
- package/dist/settings/sections/keybindings/labels.js +2 -0
- package/dist/settings/sections/keybindings/rows.js +8 -0
- package/dist/settings/sections/mcp/McpSection.js +1 -1
- package/dist/settings/sections/mcp/McpServerRow.js +1 -1
- package/dist/settings/sections/models/ModelRows.js +2 -2
- package/dist/settings/sections/providers/ProvidersSection.js +209 -201
- package/dist/settings/sections/providers/ServerProvidersSection.js +1 -1
- package/dist/settings/sections/shared/catalog.js +1 -1
- package/dist/settings/sections/skills/SkillList.js +1 -1
- package/dist/settings/sections/skills/SkillsSection.js +2 -2
- package/dist/styles.css +59 -1
- package/dist/terminal/HostTerminalSurface.js +2 -2
- package/dist/workspace/PanelContentView.d.ts +22 -4
- package/dist/workspace/PanelContentView.js +112 -16
- package/dist/workspace/PanelGlyph.d.ts +21 -0
- package/dist/workspace/PanelGlyph.js +33 -0
- package/dist/workspace/PanelHome.js +5 -3
- package/dist/workspace/PanelStrip.js +11 -4
- package/dist/workspace/PanelToolbar.d.ts +32 -0
- package/dist/workspace/PanelToolbar.js +194 -0
- package/dist/workspace/WorkspaceProvider.d.ts +3 -1
- package/dist/workspace/WorkspaceProvider.js +6 -2
- package/dist/workspace/extension-tabs.js +5 -2
- package/dist/workspace/headless/host.d.ts +4 -0
- package/dist/workspace/headless/index.d.ts +3 -1
- package/dist/workspace/headless/index.js +4 -2
- package/dist/workspace/headless/labels.d.ts +10 -0
- package/dist/workspace/headless/labels.js +11 -1
- package/dist/workspace/headless/pages.d.ts +15 -0
- package/dist/workspace/headless/pages.js +49 -0
- package/dist/workspace/headless/tab-mark.d.ts +14 -0
- package/dist/workspace/headless/tab-mark.js +27 -0
- package/dist/workspace/headless/view.d.ts +7 -1
- package/dist/workspace/index.d.ts +3 -2
- package/dist/workspace/index.js +3 -2
- package/dist/workspace/testing/index.js +6 -0
- package/dist/workspace/workspace-key-commands.js +3 -3
- package/package.json +2 -2
- package/src/styles/motion.css +13 -0
- package/src/styles/onboarding.css +0 -1
- package/src/styles/primitives.css +10 -0
- package/src/styles/workspace.css +17 -0
- package/dist/session/TodosPanel.d.ts +0 -19
- package/dist/session/TodosPanel.js +0 -251
- package/dist/session/headless/todos.d.ts +0 -22
- package/dist/session/headless/todos.js +0 -38
|
@@ -51,11 +51,14 @@ function resolveDraftDescriptor(descriptors, draft) {
|
|
|
51
51
|
function resolveDraftEnvironment(descriptors, draft) {
|
|
52
52
|
const descriptor = resolveDraftDescriptor(descriptors, draft);
|
|
53
53
|
if (!descriptor || descriptor.kind === "local") return;
|
|
54
|
-
const
|
|
54
|
+
const picked = draft?.kind === descriptor.kind ? draft : null;
|
|
55
|
+
const typed = picked ? picked.branch.trim() : "";
|
|
55
56
|
const branch = descriptor.takesBranch ? typed || descriptor.suggestedBranch : void 0;
|
|
57
|
+
const checkout = descriptor.takesBranch && typed && picked?.checkout ? picked.checkout : void 0;
|
|
56
58
|
return {
|
|
57
59
|
kind: descriptor.kind,
|
|
58
|
-
...branch ? { branch } : {}
|
|
60
|
+
...branch ? { branch } : {},
|
|
61
|
+
...checkout ? { checkout } : {}
|
|
59
62
|
};
|
|
60
63
|
}
|
|
61
64
|
/**
|
|
@@ -5,6 +5,8 @@ type Checks = NonNullable<GitPullRequest['checks']>;
|
|
|
5
5
|
declare const DEFAULT_GIT_LABELS: {
|
|
6
6
|
/** A host call the host cannot make here. */
|
|
7
7
|
gitUnavailable: string;
|
|
8
|
+
gitStartNoWorktree: string;
|
|
9
|
+
gitStartCheckedOutElsewhere: (path: string) => string;
|
|
8
10
|
gitBranchButton: (branch: string) => string;
|
|
9
11
|
gitBranchDetached: (commit: string) => string;
|
|
10
12
|
gitBranchSwitch: string;
|
|
@@ -9,6 +9,8 @@ const plural = (n, one) => `${n} ${one}${n === 1 ? "" : "s"}`;
|
|
|
9
9
|
const DEFAULT_GIT_LABELS = {
|
|
10
10
|
/** A host call the host cannot make here. */
|
|
11
11
|
gitUnavailable: "Not available here.",
|
|
12
|
+
gitStartNoWorktree: "Worktrees are not available for this folder.",
|
|
13
|
+
gitStartCheckedOutElsewhere: (path) => `That branch is checked out in ${path}. Open it in a worktree instead.`,
|
|
12
14
|
gitBranchButton: (branch) => `Branch ${branch}`,
|
|
13
15
|
gitBranchDetached: (commit) => `Detached at ${commit}`,
|
|
14
16
|
gitBranchSwitch: "Switch branch",
|
package/dist/git/index.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ import { GIT_BAR_ITEM, SyncChip, SyncChipProps } from "./SyncChip.js";
|
|
|
8
8
|
import { WhereMenu, WhereMenuProps, WherePicker, WherePickerProps } from "./WherePicker.js";
|
|
9
9
|
import { GitBarState, useGitBar } from "./useGitBar.js";
|
|
10
10
|
import { useEnvironmentChoices } from "./useEnvironmentChoices.js";
|
|
11
|
-
|
|
11
|
+
import { StartFromPanelDraft, StartFromPanelResult, useStartFromPanel } from "./useStartFromPanel.js";
|
|
12
|
+
export { BranchMenu, BranchMenuProps, BranchMenuWorktree, GIT_BAR_ITEM, GitBar, GitBarBranchMenuProps, GitBarProps, GitBarState, GitProvider, GitProviderProps, ImportRepoDialog, ImportRepoDialogProps, ImportRepoTarget, MoveSessionDialog, MoveSessionDialogProps, RemoteFolderBrowser, RemoteFolderBrowserProps, RemoteFolderPicker, RemoteFolderPickerProps, StartFromPanelDraft, StartFromPanelResult, SyncChip, SyncChipProps, WhereMenu, WhereMenuProps, WherePicker, WherePickerProps, useEnvironmentChoices, useGitBar, useGitHost, useGitLabels, useImportRepo, useMoveSession, useStartFromPanel };
|
package/dist/git/index.js
CHANGED
|
@@ -8,4 +8,5 @@ import { useGitBar } from "./useGitBar.js";
|
|
|
8
8
|
import { GitBar } from "./GitBar.js";
|
|
9
9
|
import { MoveSessionDialog, useMoveSession } from "./MoveSessionDialog.js";
|
|
10
10
|
import { WhereMenu, WherePicker } from "./WherePicker.js";
|
|
11
|
-
|
|
11
|
+
import { useStartFromPanel } from "./useStartFromPanel.js";
|
|
12
|
+
export { BranchMenu, GIT_BAR_ITEM, GitBar, GitProvider, ImportRepoDialog, MoveSessionDialog, RemoteFolderBrowser, RemoteFolderPicker, SyncChip, WhereMenu, WherePicker, useEnvironmentChoices, useGitBar, useGitHost, useGitLabels, useImportRepo, useMoveSession, useStartFromPanel };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DraftTarget } from "../chat/composer/use-draft-target.js";
|
|
2
|
+
import { PanelStartSession } from "zidane/chat/pure";
|
|
3
|
+
//#region src/git/useStartFromPanel.d.ts
|
|
4
|
+
/** What a start answered: done, or why not in words. */
|
|
5
|
+
type StartFromPanelResult = {
|
|
6
|
+
ok: true;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
/** The draft a start sets up. */
|
|
12
|
+
type StartFromPanelDraft = Pick<DraftTarget, 'environment' | 'setEnvironment' | 'environmentChoices'>;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the start for `cwd`'s draft: it sets the draft's environment, switches the folder when asked, replaces
|
|
15
|
+
* the composer's text with the row's prompt and focuses it.
|
|
16
|
+
*
|
|
17
|
+
* @param draft - The new-chat draft on screen.
|
|
18
|
+
* @param cwd - The folder the panel is for.
|
|
19
|
+
*/
|
|
20
|
+
declare function useStartFromPanel(draft: StartFromPanelDraft, cwd: string): (start: PanelStartSession) => Promise<StartFromPanelResult>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { StartFromPanelDraft, StartFromPanelResult, useStartFromPanel };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { gitErrorText } from "./headless/labels.js";
|
|
2
|
+
import { useGitHost, useGitLabels } from "./GitProvider.js";
|
|
3
|
+
import { focusComposer, pushComposerDraft } from "../chat/composer/composer-bus.js";
|
|
4
|
+
import { useCallback } from "react";
|
|
5
|
+
import { parseMachineKind } from "zidane/chat/pure";
|
|
6
|
+
//#region src/git/useStartFromPanel.ts
|
|
7
|
+
/**
|
|
8
|
+
* A panel row's "start a session" (`PanelStartSession`: a pull request's or a ticket's Open in worktree, Switch
|
|
9
|
+
* to branch, Open here) on the new-chat draft on screen: the draft's environment and the composer's text. Nothing
|
|
10
|
+
* is sent: the user reviews the prompt and sends it.
|
|
11
|
+
*
|
|
12
|
+
* - `worktree`: the draft runs in a worktree on the row's branch, checked out as it is
|
|
13
|
+
* (`DraftEnvironment.checkout`): the local branch, `origin`'s, else the pull request's head.
|
|
14
|
+
* - `here`: the folder switches to the pull request or branch first (`GitHost.checkout`, never forced: git's
|
|
15
|
+
* refusal comes back as the result), and the draft runs in the folder itself.
|
|
16
|
+
*/
|
|
17
|
+
const isWorktreeKind = (kind) => kind === "worktree" || parseMachineKind(kind)?.base === "worktree";
|
|
18
|
+
const isLocalKind = (kind) => kind === "local" || parseMachineKind(kind)?.base === "local";
|
|
19
|
+
/**
|
|
20
|
+
* The worktree kind to start in: the draft's own when it is one (a machine's), else this computer's. `null`: none
|
|
21
|
+
* offered or available.
|
|
22
|
+
*/
|
|
23
|
+
function worktreeKind(draft) {
|
|
24
|
+
const choices = draft.environmentChoices.filter((d) => d.available && isWorktreeKind(d.kind));
|
|
25
|
+
return ((draft.environment && choices.find((d) => d.kind === draft.environment.kind)) ?? choices.find((d) => d.kind === "worktree") ?? null)?.kind ?? null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns the start for `cwd`'s draft: it sets the draft's environment, switches the folder when asked, replaces
|
|
29
|
+
* the composer's text with the row's prompt and focuses it.
|
|
30
|
+
*
|
|
31
|
+
* @param draft - The new-chat draft on screen.
|
|
32
|
+
* @param cwd - The folder the panel is for.
|
|
33
|
+
*/
|
|
34
|
+
function useStartFromPanel(draft, cwd) {
|
|
35
|
+
const git = useGitHost();
|
|
36
|
+
const labels = useGitLabels();
|
|
37
|
+
const { environment, environmentChoices, setEnvironment } = draft;
|
|
38
|
+
return useCallback(async (start) => {
|
|
39
|
+
if (start.where === "worktree") {
|
|
40
|
+
const kind = worktreeKind({
|
|
41
|
+
environment,
|
|
42
|
+
environmentChoices,
|
|
43
|
+
setEnvironment
|
|
44
|
+
});
|
|
45
|
+
if (!kind) return {
|
|
46
|
+
ok: false,
|
|
47
|
+
message: labels.gitStartNoWorktree
|
|
48
|
+
};
|
|
49
|
+
const branch = start.branch ?? (start.pullRequest ? `pr-${start.pullRequest}` : "");
|
|
50
|
+
const pick = {
|
|
51
|
+
kind,
|
|
52
|
+
branch,
|
|
53
|
+
...branch ? { checkout: start.pullRequest ? { pullRequest: start.pullRequest } : {} } : {}
|
|
54
|
+
};
|
|
55
|
+
setEnvironment(pick);
|
|
56
|
+
} else {
|
|
57
|
+
const target = start.pullRequest ? { pullRequest: start.pullRequest } : start.branch ? { branch: start.branch } : null;
|
|
58
|
+
if (target) {
|
|
59
|
+
if (!git?.checkout) return {
|
|
60
|
+
ok: false,
|
|
61
|
+
message: labels.gitUnavailable
|
|
62
|
+
};
|
|
63
|
+
const result = await git.checkout(cwd, target);
|
|
64
|
+
if (!result.ok) return {
|
|
65
|
+
ok: false,
|
|
66
|
+
message: result.worktree ? labels.gitStartCheckedOutElsewhere(result.worktree.path) : gitErrorText(result.error, labels)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const local = environmentChoices.find((d) => d.available && d.kind === "local") ?? environmentChoices.find((d) => d.available && isLocalKind(d.kind));
|
|
70
|
+
setEnvironment(local ? {
|
|
71
|
+
kind: local.kind,
|
|
72
|
+
branch: ""
|
|
73
|
+
} : null);
|
|
74
|
+
}
|
|
75
|
+
pushComposerDraft({
|
|
76
|
+
text: start.prompt ?? "",
|
|
77
|
+
attachments: []
|
|
78
|
+
});
|
|
79
|
+
focusComposer();
|
|
80
|
+
return { ok: true };
|
|
81
|
+
}, [
|
|
82
|
+
git,
|
|
83
|
+
labels,
|
|
84
|
+
cwd,
|
|
85
|
+
environment,
|
|
86
|
+
environmentChoices,
|
|
87
|
+
setEnvironment
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { useStartFromPanel };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { createKeyCommandRegistry } from "./headless/commands.js";
|
|
1
2
|
import { getMergedKeybindings } from "./headless/overrides.js";
|
|
2
3
|
import { loadOnce } from "./load-once.js";
|
|
3
4
|
import { bindKeyListeners, useKeybindingsHost } from "./KeybindingsProvider.js";
|
|
4
|
-
import { createKeyCommandRegistry } from "./headless/commands.js";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
import { createContext, useContext, useEffect, useLayoutEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
7
7
|
//#region src/keybindings/KeyCommands.tsx
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LabelsProvider } from "../labels.js";
|
|
2
2
|
import { DEFAULT_KEYBINDINGS, KEYBINDING_DEF_BY_ACTION } from "./headless/catalog.js";
|
|
3
|
-
import { bindingAllowedIn, keyScopeOf } from "./headless/key-scope.js";
|
|
4
3
|
import { getMergedKeybindings } from "./headless/overrides.js";
|
|
4
|
+
import { bindingAllowedIn, keyScopeOf } from "./headless/key-scope.js";
|
|
5
5
|
import { loadOnce } from "./load-once.js";
|
|
6
6
|
import { matchesBinding } from "./match.js";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParsedBinding, bindingAlternatives, parseBindingSpec, parseBindingSpecs } from "zidane/chat/pure";
|
|
2
2
|
//#region src/keybindings/headless/catalog.d.ts
|
|
3
3
|
/** Every action a key binding can fire. */
|
|
4
|
-
type KeyAction = 'openSettings' | 'openSessionDetails' | 'openModelPicker' | 'openEffortPicker' | 'openTodos' | 'openArtifacts' | 'openMainSession' | 'openUsagePanel' | 'newSession' | 'openKeybindings' | 'openPalette' | 'cancelToolCall' | 'cycleAgent' | 'enterSelectTurnMode' | 'toggleSidebar' | 'sessionGenerateTitle' | 'sessionCompact' | 'sessionExportMarkdown' | 'sessionExportJson' | 'sessionDelete' | 'sessionCopyId' | 'sessionFavorite' | 'zoomIn' | 'zoomOut' | 'zoomReset' | 'panelNext' | 'panelPrev' | 'tabNext' | 'tabPrev' | 'closeTab' | 'toggleTerminal' | 'newTerminal' | 'annotatePage' | 'splitTabRight' | 'splitTabDown';
|
|
4
|
+
type KeyAction = 'openSettings' | 'openSessionDetails' | 'openModelPicker' | 'openEffortPicker' | 'openTodos' | 'openArtifacts' | 'openMainSession' | 'openUsagePanel' | 'newSession' | 'openKeybindings' | 'openPalette' | 'cancelToolCall' | 'cycleAgent' | 'enterSelectTurnMode' | 'toggleSidebar' | 'navigateBack' | 'navigateForward' | 'sessionGenerateTitle' | 'sessionCompact' | 'sessionExportMarkdown' | 'sessionExportJson' | 'sessionDelete' | 'sessionCopyId' | 'sessionFavorite' | 'zoomIn' | 'zoomOut' | 'zoomReset' | 'panelNext' | 'panelPrev' | 'tabNext' | 'tabPrev' | 'closeTab' | 'toggleTerminal' | 'newTerminal' | 'annotatePage' | 'splitTabRight' | 'splitTabDown';
|
|
5
5
|
/** One action of the catalog. */
|
|
6
6
|
interface KeyBindingDef {
|
|
7
7
|
/** The action. */
|
|
@@ -33,8 +33,8 @@ const KEYBINDING_DEFS = [
|
|
|
33
33
|
{
|
|
34
34
|
action: "openTodos",
|
|
35
35
|
default: "ctrl+t",
|
|
36
|
-
label: "
|
|
37
|
-
description: "open the
|
|
36
|
+
label: "plan",
|
|
37
|
+
description: "open the Inbox: what waits on you, the plan in progress and the recent ones"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
action: "openArtifacts",
|
|
@@ -103,6 +103,18 @@ const KEYBINDING_DEFS = [
|
|
|
103
103
|
label: "sidebar",
|
|
104
104
|
description: "show or hide the chats sidebar"
|
|
105
105
|
},
|
|
106
|
+
{
|
|
107
|
+
action: "navigateBack",
|
|
108
|
+
default: "cmd+left | cmd+[",
|
|
109
|
+
label: "back",
|
|
110
|
+
description: "go back to the conversation shown before, like a browser"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
action: "navigateForward",
|
|
114
|
+
default: "cmd+right | cmd+]",
|
|
115
|
+
label: "forward",
|
|
116
|
+
description: "go forward again to the conversation you went back from"
|
|
117
|
+
},
|
|
106
118
|
{
|
|
107
119
|
action: "sessionGenerateTitle",
|
|
108
120
|
default: "ctrl+shift+t",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DEFAULT_KEYBINDINGS, KEYBINDING_DEFS, KEYBINDING_DEF_BY_ACTION, bindingAlternatives, parseBindingSpec, parseBindingSpecs } from "./catalog.js";
|
|
2
|
-
import { KEYSCOPE_ATTR, bindingAllowedIn, isTypingFocused, isTypingTarget, keyScopeOf } from "./key-scope.js";
|
|
3
|
-
import { createKeybindingOverrides, filterOverrides, getMergedKeybindings } from "./overrides.js";
|
|
4
2
|
import { createKeyCommandRegistry } from "./commands.js";
|
|
3
|
+
import { createKeybindingOverrides, filterOverrides, getMergedKeybindings } from "./overrides.js";
|
|
4
|
+
import { KEYSCOPE_ATTR, bindingAllowedIn, isTypingFocused, isTypingTarget, keyScopeOf } from "./key-scope.js";
|
|
5
5
|
import { DEFAULT_KEYBINDINGS_LABELS } from "./labels.js";
|
|
6
6
|
export { DEFAULT_KEYBINDINGS, DEFAULT_KEYBINDINGS_LABELS, KEYBINDING_DEFS, KEYBINDING_DEF_BY_ACTION, KEYSCOPE_ATTR, bindingAllowedIn, bindingAlternatives, createKeyCommandRegistry, createKeybindingOverrides, filterOverrides, getMergedKeybindings, isTypingFocused, isTypingTarget, keyScopeOf, parseBindingSpec, parseBindingSpecs };
|
|
@@ -25,8 +25,10 @@ declare function isTypingFocused(): boolean;
|
|
|
25
25
|
/**
|
|
26
26
|
* Whether an app-level binding may fire under `scope`. In the editor,
|
|
27
27
|
* `ctrl+<letter>` without shift belongs to the editor (movement and
|
|
28
|
-
* editing chords)
|
|
29
|
-
*
|
|
28
|
+
* editing chords), and so do `cmd+[` / `cmd+]` (indent). In the editor and
|
|
29
|
+
* text fields, an arrow with ⌘ or ⌥ alone (shift or not) moves the caret.
|
|
30
|
+
* Everything else with shift, meta or a non-letter key is an app intent
|
|
31
|
+
* (settings, panels, zoom).
|
|
30
32
|
*
|
|
31
33
|
* @param scope - Who owns the press.
|
|
32
34
|
* @param spec - The binding.
|
|
@@ -51,18 +51,33 @@ function isTypingFocused() {
|
|
|
51
51
|
}
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
|
+
const ARROWS = /* @__PURE__ */ new Set([
|
|
55
|
+
"left",
|
|
56
|
+
"right",
|
|
57
|
+
"up",
|
|
58
|
+
"down"
|
|
59
|
+
]);
|
|
60
|
+
/** An arrow with ⌘ or ⌥ (not both, no ctrl): a text surface's line, word and document moves. */
|
|
61
|
+
function movesCaret(spec) {
|
|
62
|
+
return ARROWS.has(spec.name) && !spec.ctrl && spec.meta !== spec.alt;
|
|
63
|
+
}
|
|
54
64
|
/**
|
|
55
65
|
* Whether an app-level binding may fire under `scope`. In the editor,
|
|
56
66
|
* `ctrl+<letter>` without shift belongs to the editor (movement and
|
|
57
|
-
* editing chords)
|
|
58
|
-
*
|
|
67
|
+
* editing chords), and so do `cmd+[` / `cmd+]` (indent). In the editor and
|
|
68
|
+
* text fields, an arrow with ⌘ or ⌥ alone (shift or not) moves the caret.
|
|
69
|
+
* Everything else with shift, meta or a non-letter key is an app intent
|
|
70
|
+
* (settings, panels, zoom).
|
|
59
71
|
*
|
|
60
72
|
* @param scope - Who owns the press.
|
|
61
73
|
* @param spec - The binding.
|
|
62
74
|
* @param action - The binding's action (`closeTab` fires everywhere).
|
|
63
75
|
*/
|
|
64
76
|
function bindingAllowedIn(scope, spec, action) {
|
|
77
|
+
if (scope !== "editor" && scope !== "input") return true;
|
|
78
|
+
if (movesCaret(spec)) return false;
|
|
65
79
|
if (scope !== "editor") return true;
|
|
80
|
+
if (spec.meta && !spec.ctrl && !spec.alt && !spec.shift && (spec.name === "[" || spec.name === "]")) return false;
|
|
66
81
|
if (action === "closeTab") return true;
|
|
67
82
|
return !(spec.ctrl && !spec.shift && !spec.meta && !spec.alt && /^[a-z]$/i.test(spec.name));
|
|
68
83
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { writable } from "../../chat/headless/store.js";
|
|
2
1
|
import { DEFAULT_KEYBINDINGS } from "./catalog.js";
|
|
2
|
+
import { writable } from "../../chat/headless/store.js";
|
|
3
3
|
//#region src/keybindings/headless/overrides.ts
|
|
4
4
|
/**
|
|
5
5
|
* The overrides model every `KeybindingsHost` shares: read the stored map,
|
|
@@ -2,8 +2,8 @@ import { BTN_SECONDARY } from "../components/button.js";
|
|
|
2
2
|
import { Checkbox, OpLine, SegmentedRow } from "../components/Form.js";
|
|
3
3
|
import { constant, useReadable } from "../chat/headless/store.js";
|
|
4
4
|
import { machinesError } from "./headless/host.js";
|
|
5
|
-
import { useMachinesConfirm, useMachinesHost, useMachinesLabels } from "./MachinesProvider.js";
|
|
6
5
|
import { shortList, syncBlockedReason } from "./headless/sync.js";
|
|
6
|
+
import { useMachinesConfirm, useMachinesHost, useMachinesLabels } from "./MachinesProvider.js";
|
|
7
7
|
import { useHostCapabilities } from "./HostCapabilities.js";
|
|
8
8
|
import { SyncAccounts } from "./SyncAccounts.js";
|
|
9
9
|
import { SyncOutcomeBadge } from "./SyncOutcomeBadge.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Tooltip } from "../components/Tooltip.js";
|
|
2
2
|
import { MetaChip } from "../components/Form.js";
|
|
3
|
-
import { useMachinesLabels } from "./MachinesProvider.js";
|
|
4
3
|
import { syncOutcome } from "./headless/sync.js";
|
|
4
|
+
import { useMachinesLabels } from "./MachinesProvider.js";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/machines/SyncOutcomeBadge.tsx
|
|
7
7
|
const MAX_LINES = 12;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { isMachinesError, isPermitted, machinesError } from "./host.js";
|
|
2
|
-
import { DEFAULT_MACHINES_LABELS } from "./labels.js";
|
|
3
2
|
import { createPresenceStore } from "./presence.js";
|
|
4
3
|
import { createMachineLists, createOnlineMachines, lazyReadable } from "./stores.js";
|
|
5
4
|
import { createHostSyncReads, shortList, syncBlockedReason, syncOutcome } from "./sync.js";
|
|
5
|
+
import { DEFAULT_MACHINES_LABELS } from "./labels.js";
|
|
6
6
|
import { UPDATE_BUSY_STATES, agoText, daemonStatusText, hostCheckMessage, hostCheckOkLine, hostStatusText, hostStatusTone, linkStateText, updateStateLine, uptimeText } from "./messages.js";
|
|
7
7
|
import { hostOfSettingsFocus, hostSettingsFocus } from "./settings-focus.js";
|
|
8
8
|
export { DEFAULT_MACHINES_LABELS, UPDATE_BUSY_STATES, agoText, createHostSyncReads, createMachineLists, createOnlineMachines, createPresenceStore, daemonStatusText, hostCheckMessage, hostCheckOkLine, hostOfSettingsFocus, hostSettingsFocus, hostStatusText, hostStatusTone, isMachinesError, isPermitted, lazyReadable, linkStateText, machinesError, shortList, syncBlockedReason, syncOutcome, updateStateLine, uptimeText };
|
|
@@ -37,6 +37,10 @@ declare function UsageDemo({ on, className, style }: UsageDemoProps): import("re
|
|
|
37
37
|
type DaemonDemoProps = DemoProps;
|
|
38
38
|
/** Background service: two windows share one running session through the link between them. */
|
|
39
39
|
declare function DaemonDemo({ on, className, style }: DaemonDemoProps): import("react").JSX.Element;
|
|
40
|
+
/** Props of {@link RemindersDemo}. */
|
|
41
|
+
type RemindersDemoProps = DemoProps;
|
|
42
|
+
/** Reminders: you type `/remind`, its chip counts down to now, and the reminder lands in the session. */
|
|
43
|
+
declare function RemindersDemo({ on, className, style }: RemindersDemoProps): import("react").JSX.Element;
|
|
40
44
|
/** Props of {@link BrowserDemo}. */
|
|
41
45
|
type BrowserDemoProps = DemoProps;
|
|
42
46
|
/** Browser tab: a page at localhost:5173, and the agent's pointer that clicks its button. */
|
|
@@ -53,6 +57,10 @@ declare function NotificationsDemo({ on, className, style }: NotificationsDemoPr
|
|
|
53
57
|
type ProjectExtensionsDemoProps = DemoProps;
|
|
54
58
|
/** Project extensions: the .zidane/extensions folder of a project, behind a trust lock. */
|
|
55
59
|
declare function ProjectExtensionsDemo({ on, className, style }: ProjectExtensionsDemoProps): import("react").JSX.Element;
|
|
60
|
+
/** Props of {@link SecretsDemo}. */
|
|
61
|
+
type SecretsDemoProps = DemoProps;
|
|
62
|
+
/** Secrets: the agent asks for a key in a password field, and the transcript says it was saved, never the value. */
|
|
63
|
+
declare function SecretsDemo({ on, className, style }: SecretsDemoProps): import("react").JSX.Element;
|
|
56
64
|
/**
|
|
57
65
|
* Whether a feature has a demo.
|
|
58
66
|
*
|
|
@@ -71,4 +79,4 @@ interface FeatureDemoProps extends DemoProps {
|
|
|
71
79
|
*/
|
|
72
80
|
declare function FeatureDemo({ feature, on, className, style }: FeatureDemoProps): import("react").JSX.Element | null;
|
|
73
81
|
//#endregion
|
|
74
|
-
export { AutoTitleDemo, AutoTitleDemoProps, AutocompleteDemo, AutocompleteDemoProps, BrowserDemo, BrowserDemoProps, CodemodeDemo, CodemodeDemoProps, DaemonDemo, DaemonDemoProps, FeatureDemo, FeatureDemoProps, NotificationsDemo, NotificationsDemoProps, ProjectExtensionsDemo, ProjectExtensionsDemoProps, RunEstimatesDemo, RunEstimatesDemoProps, SpacesDemo, SpacesDemoProps, TerminalDemo, TerminalDemoProps, UpdatesDemo, UpdatesDemoProps, UsageDemo, UsageDemoProps, WebSearchDemo, WebSearchDemoProps, hasFeatureDemo };
|
|
82
|
+
export { AutoTitleDemo, AutoTitleDemoProps, AutocompleteDemo, AutocompleteDemoProps, BrowserDemo, BrowserDemoProps, CodemodeDemo, CodemodeDemoProps, DaemonDemo, DaemonDemoProps, FeatureDemo, FeatureDemoProps, NotificationsDemo, NotificationsDemoProps, ProjectExtensionsDemo, ProjectExtensionsDemoProps, RemindersDemo, RemindersDemoProps, RunEstimatesDemo, RunEstimatesDemoProps, SecretsDemo, SecretsDemoProps, SpacesDemo, SpacesDemoProps, TerminalDemo, TerminalDemoProps, UpdatesDemo, UpdatesDemoProps, UsageDemo, UsageDemoProps, WebSearchDemo, WebSearchDemoProps, hasFeatureDemo };
|
|
@@ -375,6 +375,61 @@ function DaemonDemo({ on, className, style }) {
|
|
|
375
375
|
})
|
|
376
376
|
});
|
|
377
377
|
}
|
|
378
|
+
/** Reminders: you type `/remind`, its chip counts down to now, and the reminder lands in the session. */
|
|
379
|
+
function RemindersDemo({ on, className, style }) {
|
|
380
|
+
const labels = useOnboardingLabels();
|
|
381
|
+
return /* @__PURE__ */ jsx(DemoStage, {
|
|
382
|
+
on,
|
|
383
|
+
className,
|
|
384
|
+
style,
|
|
385
|
+
children: /* @__PURE__ */ jsxs("span", {
|
|
386
|
+
className: "flex flex-col items-stretch gap-2 w-full max-w-[300px] min-w-0",
|
|
387
|
+
children: [/* @__PURE__ */ jsxs(MiniWindow, {
|
|
388
|
+
className: "w-full",
|
|
389
|
+
bodyClassName: "px-2.5 pt-0.5 pb-2.5 gap-1.5",
|
|
390
|
+
children: [
|
|
391
|
+
/* @__PURE__ */ jsx(Line, { width: "64%" }),
|
|
392
|
+
/* @__PURE__ */ jsx(Line, { width: "42%" }),
|
|
393
|
+
/* @__PURE__ */ jsxs("span", {
|
|
394
|
+
className: "flex items-center gap-2 pt-0.5 min-w-0",
|
|
395
|
+
children: [/* @__PURE__ */ jsxs(MetaChip, { children: [/* @__PURE__ */ jsx("span", {
|
|
396
|
+
"aria-hidden": true,
|
|
397
|
+
className: "i-ph-alarm"
|
|
398
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
399
|
+
className: "zg-demo-stack",
|
|
400
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
401
|
+
className: "zg-loop zg-demo-before",
|
|
402
|
+
children: labels.demoReminderIn
|
|
403
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
404
|
+
className: "zg-loop zg-demo-after text-[var(--zg-accent)]",
|
|
405
|
+
children: labels.demoReminderNow
|
|
406
|
+
})]
|
|
407
|
+
})] }), /* @__PURE__ */ jsx("span", {
|
|
408
|
+
className: "relative flex-1 h-1 rounded-full overflow-hidden zg-demo-track",
|
|
409
|
+
children: /* @__PURE__ */ jsx("span", { className: "zg-loop zg-demo-grow absolute inset-0 rounded-full bg-[var(--zg-accent-dot)]" })
|
|
410
|
+
})]
|
|
411
|
+
}),
|
|
412
|
+
/* @__PURE__ */ jsxs("span", {
|
|
413
|
+
className: "zg-loop zg-demo-after zg-tray self-end flex flex-col gap-0.5 max-w-[85%] px-2 py-1 rounded-zg-md min-w-0",
|
|
414
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
415
|
+
className: "zg-meta truncate",
|
|
416
|
+
children: labels.demoReminderFrom
|
|
417
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
418
|
+
className: "text-zg-label truncate",
|
|
419
|
+
children: labels.demoReminderText
|
|
420
|
+
})]
|
|
421
|
+
})
|
|
422
|
+
]
|
|
423
|
+
}), /* @__PURE__ */ jsx(Composer, { children: /* @__PURE__ */ jsxs("span", {
|
|
424
|
+
className: "flex items-center min-w-0 flex-1 text-zg-label whitespace-nowrap overflow-hidden",
|
|
425
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
426
|
+
className: "zg-loop zg-demo-type-early truncate",
|
|
427
|
+
children: labels.demoReminderTyped
|
|
428
|
+
}), /* @__PURE__ */ jsx(Caret, {})]
|
|
429
|
+
}) })]
|
|
430
|
+
})
|
|
431
|
+
});
|
|
432
|
+
}
|
|
378
433
|
/** Browser tab: a page at localhost:5173, and the agent's pointer that clicks its button. */
|
|
379
434
|
function BrowserDemo({ on, className, style }) {
|
|
380
435
|
const labels = useOnboardingLabels();
|
|
@@ -570,6 +625,54 @@ function ProjectExtensionsDemo({ on, className, style }) {
|
|
|
570
625
|
})
|
|
571
626
|
});
|
|
572
627
|
}
|
|
628
|
+
/** Secrets: the agent asks for a key in a password field, and the transcript says it was saved, never the value. */
|
|
629
|
+
function SecretsDemo({ on, className, style }) {
|
|
630
|
+
const labels = useOnboardingLabels();
|
|
631
|
+
return /* @__PURE__ */ jsx(DemoStage, {
|
|
632
|
+
on,
|
|
633
|
+
className,
|
|
634
|
+
style,
|
|
635
|
+
children: /* @__PURE__ */ jsxs(MiniWindow, {
|
|
636
|
+
className: "w-full max-w-[280px]",
|
|
637
|
+
bodyClassName: "px-3 pt-1 pb-2.5 gap-1.5",
|
|
638
|
+
children: [
|
|
639
|
+
/* @__PURE__ */ jsx("span", {
|
|
640
|
+
className: "truncate text-zg-label",
|
|
641
|
+
children: labels.demoSecretPrompt
|
|
642
|
+
}),
|
|
643
|
+
/* @__PURE__ */ jsxs("span", {
|
|
644
|
+
className: "zg-well flex items-center gap-1.5 h-6 px-2 rounded-zg-md min-w-0",
|
|
645
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
646
|
+
"aria-hidden": true,
|
|
647
|
+
className: "i-ph-lock-simple text-zg-label text-[var(--zg-text-muted)] shrink-0"
|
|
648
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
649
|
+
className: "zg-loop zg-demo-type-early truncate font-mono text-zg-badge text-[var(--zg-text)]",
|
|
650
|
+
children: labels.demoSecretDots
|
|
651
|
+
})]
|
|
652
|
+
}),
|
|
653
|
+
/* @__PURE__ */ jsxs("span", {
|
|
654
|
+
className: "flex items-center gap-2 pt-0.5 min-w-0",
|
|
655
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
656
|
+
className: `${buttonClass({
|
|
657
|
+
variant: "solid",
|
|
658
|
+
size: "xs"
|
|
659
|
+
})} zg-loop zg-demo-press`,
|
|
660
|
+
children: labels.demoSecretSave
|
|
661
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
662
|
+
className: "zg-loop zg-demo-after ml-auto min-w-0",
|
|
663
|
+
children: /* @__PURE__ */ jsxs(MetaChip, {
|
|
664
|
+
tone: "success",
|
|
665
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
666
|
+
"aria-hidden": true,
|
|
667
|
+
className: "i-ph-shield-check"
|
|
668
|
+
}), labels.demoSecretSaved]
|
|
669
|
+
})
|
|
670
|
+
})]
|
|
671
|
+
})
|
|
672
|
+
]
|
|
673
|
+
})
|
|
674
|
+
});
|
|
675
|
+
}
|
|
573
676
|
const DEMOS = {
|
|
574
677
|
codemode: CodemodeDemo,
|
|
575
678
|
webSearch: WebSearchDemo,
|
|
@@ -580,10 +683,12 @@ const DEMOS = {
|
|
|
580
683
|
checkForUpdates: UpdatesDemo,
|
|
581
684
|
subscriptionUsage: UsageDemo,
|
|
582
685
|
useDaemon: DaemonDemo,
|
|
686
|
+
schedules: RemindersDemo,
|
|
583
687
|
browser: BrowserDemo,
|
|
584
688
|
terminal: TerminalDemo,
|
|
585
689
|
notifications: NotificationsDemo,
|
|
586
|
-
loadProjectExtensions: ProjectExtensionsDemo
|
|
690
|
+
loadProjectExtensions: ProjectExtensionsDemo,
|
|
691
|
+
secrets: SecretsDemo
|
|
587
692
|
};
|
|
588
693
|
/**
|
|
589
694
|
* Whether a feature has a demo.
|
|
@@ -607,4 +712,4 @@ function FeatureDemo({ feature, on, className, style }) {
|
|
|
607
712
|
}) : null;
|
|
608
713
|
}
|
|
609
714
|
//#endregion
|
|
610
|
-
export { AutoTitleDemo, AutocompleteDemo, BrowserDemo, CodemodeDemo, DaemonDemo, FeatureDemo, NotificationsDemo, ProjectExtensionsDemo, RunEstimatesDemo, SpacesDemo, TerminalDemo, UpdatesDemo, UsageDemo, WebSearchDemo, hasFeatureDemo };
|
|
715
|
+
export { AutoTitleDemo, AutocompleteDemo, BrowserDemo, CodemodeDemo, DaemonDemo, FeatureDemo, NotificationsDemo, ProjectExtensionsDemo, RemindersDemo, RunEstimatesDemo, SecretsDemo, SpacesDemo, TerminalDemo, UpdatesDemo, UsageDemo, WebSearchDemo, hasFeatureDemo };
|
|
@@ -34,7 +34,11 @@ declare function AccountsScene({ step, className, style }: AccountsSceneProps):
|
|
|
34
34
|
type HostsSceneProps = SceneProps;
|
|
35
35
|
/** Hosts: zidane-server starts on a machine, prints a device token, then this app runs its sessions there. */
|
|
36
36
|
declare function HostsScene({ step, className, style }: HostsSceneProps): import("react").JSX.Element;
|
|
37
|
+
/** Props of {@link SecretsScene}. */
|
|
38
|
+
type SecretsSceneProps = SceneProps;
|
|
39
|
+
/** Secrets: a password field the agent asks with, the private file that keeps the key, then a command whose output hides it. */
|
|
40
|
+
declare function SecretsScene({ step, className, style }: SecretsSceneProps): import("react").JSX.Element;
|
|
37
41
|
/** The scene of each tutorial. */
|
|
38
42
|
declare const TUTORIAL_SCENES: Readonly<Record<TutorialTopic, ComponentType<SceneProps>>>;
|
|
39
43
|
//#endregion
|
|
40
|
-
export { AccountsScene, AccountsSceneProps, ConnectorsScene, ConnectorsSceneProps, EnvironmentsScene, EnvironmentsSceneProps, ExtensionsScene, ExtensionsSceneProps, FilesScene, FilesSceneProps, HostsScene, HostsSceneProps, InstructionsScene, InstructionsSceneProps, SkillsScene, SkillsSceneProps, TUTORIAL_SCENES };
|
|
44
|
+
export { AccountsScene, AccountsSceneProps, ConnectorsScene, ConnectorsSceneProps, EnvironmentsScene, EnvironmentsSceneProps, ExtensionsScene, ExtensionsSceneProps, FilesScene, FilesSceneProps, HostsScene, HostsSceneProps, InstructionsScene, InstructionsSceneProps, SecretsScene, SecretsSceneProps, SkillsScene, SkillsSceneProps, TUTORIAL_SCENES };
|