mirror of
https://github.com/stablyai/orca.git
synced 2026-10-01 08:01:56 +00:00
* fix(onboarding): build the agent step around skills, not CLI registration The checklist step "Enable Orca CLI" was marked done once the agent skills were installed, while Settings -> Browser still showed CLI registration as a pending step. Orca terminals already put the bundled CLI on PATH, so registration only matters for shells Orca did not launch, plus WSL, where `orca-ide` exists only once registered. - Rename the step to "Give agents Orca skills"; setup registers the CLI only for WSL (isOrcaCliRegistrationRequired), via onboarding-cli-registration.ts. - Settings -> Browser drops the CLI step outside WSL (2 steps instead of 3). - Skills panel: "All skills installed" + "Update skills" replaces the disabled button; status pills sit top-right; no "Installed" beside "Unavailable". - Full Disk Access moves to the "Start work in multiple repos" step. Fixes STA-8306 / #22524. * refactor(onboarding): simplify agent-skill step state after review - One done rule: isAgentCapabilitiesDone in feature-wall-setup-progress.ts, reused by the skills panel instead of a mirrored copy. - 'unavailable' is an install-status tone instead of a second boolean; pill/note rendering moves to AgentCapabilityStatusBadges.tsx. - "Update skills" skips Computer Use when it can't run (no warning toast); setup takes an explicit selection. - The WSL gate lives in registerOnboardingCliIfRequired; onboarding deps drop the now-unreachable host CLI branches. - BrowserUsePane: one cliRequired/cliReady pair, no host CLI status fetch, WSL-only enable path, single "Finish the steps below." string. - Full Disk Access placement goes through a SelectedStepFooter switch. - Prune orphaned locale keys (and their boot-bundle entries); fix a stale comment. * fix(skills): require CLI registration only for WSL setup * fix(skills): retain CLI install labels for WSL * docs(skills): clarify remaining WSL registration fallback * fix(skills): skip WSL registration when the host confirms managed CLI access * fix(wsl): prepare managed shell wrappers before onboarding probes * test: update daemon capability and terminal hook expectations * refactor(onboarding): remove CLI registration checks from skill setup * refactor(setup): remove redundant state and obsolete registration scaffolding * fix(settings): stop registering the CLI before installing the CLI skill The General > Orca CLI skill panel still registered `orca` on PATH before opening the install terminal, contradicting the rest of skill setup. Orca terminals already provide the CLI, so the shell command toggle now says it is only for terminals outside Orca. * style(onboarding): polish the setup checklist and first-run steps Make onboarding monochrome: completion is a neutral check, selection a neutral outline, and color only flags real problems. Tighten the checklist rail and header, single-line agent cards with a grid that scrolls only when it runs out of room, a labeled permission switch under the grid, calmer notification and skill cards, sentence-case copy, and a labeled "Hide checklist from sidebar" action. Workspace setup leads with "Add project" when no git project exists. * fix(emulator): drop the Enable Orca CLI step from agent control setup Agents that drive the emulator run in Orca terminals, which already provide the `orca` command. Agent control setup in the emulator card and Settings is now a single step: install the Orca CLI skill. * fix(onboarding): hide the Full Disk Access card once access is granted A granted card has no remaining action and only takes space on the add projects step. It also no longer flashes a "Checking" state before the first status arrives. * fix(onboarding): address review on permission warning, hide button, and translations - Name the permission switch "Yolo mode" (matching Settings > Agents) and state the risk: agents act without asking and some bypass their sandbox. - Hide the modal's "Hide checklist from sidebar" button below sm, where the header centers its title under it; the sidebar entry keeps its own control. - Translate every string this PR adds into es, fr, ja, ko, and zh.
125 lines
3.9 KiB
TypeScript
125 lines
3.9 KiB
TypeScript
export type FeatureWallSetupStepId =
|
|
| 'default-agent'
|
|
| 'add-two-repos'
|
|
| 'notifications'
|
|
| 'two-worktrees'
|
|
| 'browser'
|
|
| 'task-sources'
|
|
| 'agent-capabilities'
|
|
| 'setup-script'
|
|
|
|
export type FeatureWallSetupStep = {
|
|
readonly id: FeatureWallSetupStepId
|
|
readonly name: string
|
|
readonly subtitle: string
|
|
readonly description: string
|
|
}
|
|
|
|
export const FEATURE_WALL_SETUP_PARALLEL_WORK_STEP_IDS = [
|
|
'two-worktrees',
|
|
'browser'
|
|
] as const satisfies readonly FeatureWallSetupStepId[]
|
|
|
|
export type FeatureWallSetupSectionId = 'parallel-work' | 'setup'
|
|
|
|
export const FEATURE_WALL_SETUP_STEPS: readonly FeatureWallSetupStep[] = [
|
|
{
|
|
id: 'two-worktrees',
|
|
name: 'Work on two tasks at once',
|
|
subtitle: 'Work on two tasks at once',
|
|
description:
|
|
'Work in 2 different worktrees at once. Each one is isolated (even in the same project). Perfect for working on 2 features at once.'
|
|
},
|
|
{
|
|
id: 'browser',
|
|
name: "Use Orca's browser",
|
|
subtitle: "Use Orca's browser",
|
|
description:
|
|
'Browse your web app without leaving Orca. Grab any element and send its exact source and styles to an agent with one click.'
|
|
},
|
|
{
|
|
id: 'notifications',
|
|
name: 'Turn on notifications',
|
|
subtitle: 'Turn on notifications',
|
|
description: 'Know the moment an agent finishes, needs attention, or gets blocked.'
|
|
},
|
|
{
|
|
id: 'default-agent',
|
|
name: 'Choose your default agent',
|
|
subtitle: 'Choose your default agent',
|
|
description: 'Start new work faster with your preferred agent already selected.'
|
|
},
|
|
{
|
|
id: 'agent-capabilities',
|
|
name: 'Give agents Orca skills',
|
|
subtitle: 'Give agents Orca skills',
|
|
description:
|
|
"Install the skills agents use to drive Orca's browser, control your computer, and coordinate multi-step work."
|
|
},
|
|
{
|
|
id: 'task-sources',
|
|
name: 'Connect integrations',
|
|
subtitle: 'Connect integrations',
|
|
description: 'Start an agent from a task in one click and keep PR status in view.'
|
|
},
|
|
{
|
|
id: 'setup-script',
|
|
name: 'Automate workspace setup',
|
|
subtitle: 'Automate workspace setup',
|
|
description:
|
|
'Run install and setup commands automatically so every new worktree is ready for agents.'
|
|
},
|
|
{
|
|
id: 'add-two-repos',
|
|
name: 'Start work in multiple repos',
|
|
subtitle: 'Start work in multiple repos',
|
|
description:
|
|
'Bring your key repos into Orca so you can start agent work without hunting for folders.'
|
|
}
|
|
] as const
|
|
|
|
export const FEATURE_WALL_SETUP_STEP_IDS = FEATURE_WALL_SETUP_STEPS.map((step) => step.id)
|
|
|
|
export function getFeatureWallSetupSteps(): readonly FeatureWallSetupStep[] {
|
|
return FEATURE_WALL_SETUP_STEPS
|
|
}
|
|
|
|
export function getFeatureWallSetupSectionId(
|
|
stepId: FeatureWallSetupStepId
|
|
): FeatureWallSetupSectionId {
|
|
return FEATURE_WALL_SETUP_PARALLEL_WORK_STEP_IDS.includes(
|
|
stepId as (typeof FEATURE_WALL_SETUP_PARALLEL_WORK_STEP_IDS)[number]
|
|
)
|
|
? 'parallel-work'
|
|
: 'setup'
|
|
}
|
|
|
|
export function getFeatureWallSetupStepsForSection(
|
|
sectionId: FeatureWallSetupSectionId
|
|
): readonly FeatureWallSetupStep[] {
|
|
return FEATURE_WALL_SETUP_STEPS.filter(
|
|
(step) => getFeatureWallSetupSectionId(step.id) === sectionId
|
|
)
|
|
}
|
|
|
|
export function getFirstIncompleteFeatureWallSetupStepId(
|
|
stepDone: Partial<Record<FeatureWallSetupStepId, boolean>>
|
|
): FeatureWallSetupStepId {
|
|
// Why: onboarding should prioritize Setup, while durable definitions retain the original order.
|
|
const setupStep = getFeatureWallSetupStepsForSection('setup').find((step) => !stepDone[step.id])
|
|
if (setupStep) {
|
|
return setupStep.id
|
|
}
|
|
const parallelStep = getFeatureWallSetupStepsForSection('parallel-work').find(
|
|
(step) => !stepDone[step.id]
|
|
)
|
|
return parallelStep?.id ?? FEATURE_WALL_SETUP_STEPS[0].id
|
|
}
|
|
|
|
export function isFeatureWallSetupStepId(value: unknown): value is FeatureWallSetupStepId {
|
|
return (
|
|
typeof value === 'string' &&
|
|
FEATURE_WALL_SETUP_STEP_IDS.includes(value as FeatureWallSetupStepId)
|
|
)
|
|
}
|