diff --git a/src/main/skills/managed-skill-fallback-message.ts b/src/main/skills/managed-skill-fallback-message.ts index 215caa9faed..269239957cc 100644 --- a/src/main/skills/managed-skill-fallback-message.ts +++ b/src/main/skills/managed-skill-fallback-message.ts @@ -3,46 +3,46 @@ import type { ManagedAgentSkillFallbackReason } from '../../shared/skills' export function getManagedSkillFallbackMessage(reason: ManagedAgentSkillFallbackReason): string { switch (reason) { case 'target-required': - return 'Orca could not resolve the runtime that should read this skill.' + return "Orca couldn't tell which runtime should use this skill." case 'unsupported-skill': - return 'This is not an Orca-managed agent skill.' + return "This isn't an Orca-managed skill." case 'repair-required-runtime': - return 'The selected runtime needs repair before Orca can inspect its skills.' + return 'This runtime needs repair before Orca can inspect its skills.' case 'remote-runtime': - return 'Remote runtimes are not updated in the background.' + return 'This skill is on a remote runtime, so Orca needs you to update it there.' case 'wsl-runtime': - return 'WSL skill updates are manual in this version.' + return 'This skill is in WSL, so Orca needs you to update it there.' case 'missing-install': - return 'The managed skill is not installed in the selected runtime.' + return "This skill isn't installed for this runtime yet." case 'project-install': - return 'Project-scoped skills are not updated in the background.' + return "This skill is installed in the project, so Orca won't update it automatically." case 'ambiguous-install': - return 'Orca found both global and project-scoped copies of this skill.' + return 'Orca found more than one copy of this skill and needs you to choose the right one.' case 'bundled-or-plugin-install': - return 'Bundled and plugin-cache skills are not mutated by Orca.' + return "This skill comes from Orca or a plugin, so Orca won't modify it here." case 'symlinked-global-install': - return 'Symlinked global skills are not safe for background updates yet.' + return "This global skill is symlinked, so Orca won't change it automatically." case 'unsupported-cli-contract': - return 'This build does not include the verified skills CLI update contract.' + return "This Orca build can't verify skill updates yet." case 'expected-hash-missing': - return 'This build does not include an expected hash for this managed skill.' + return "This Orca build can't verify the expected version of this skill." case 'lockfile-missing': - return 'Orca could not find the global skills lockfile.' + return "Orca couldn't find the global skills lockfile needed to verify this update." case 'lockfile-malformed': - return 'The global skills lockfile could not be parsed.' + return "Orca couldn't read the global skills lockfile needed to verify this update." case 'lockfile-unsupported-schema': - return 'The global skills lockfile uses an unsupported schema version.' + return "The global skills lockfile uses a format Orca doesn't support yet." case 'lock-entry-missing': - return 'The global skills lockfile does not track this skill.' + return "The global skills lockfile doesn't track this skill, so Orca can't verify the update." case 'lock-entry-unmanaged-source': - return 'The installed skill is not tracked as Orca-managed source.' + return "This installed skill isn't tracked as Orca-managed, so Orca won't update it automatically." case 'background-update-disabled': - return 'Automatic skill updates are turned off, so this update needs manual review.' + return 'Automatic skill updates are off, so Orca needs you to run this update.' case 'cooldown': return 'Orca recently tried this managed-skill check and is cooling down.' case 'update-failed': - return 'The managed-skill update command failed.' + return 'Orca tried to update this skill automatically, but the command failed.' case 'update-timeout': - return 'The managed-skill update command timed out.' + return 'Orca tried to update this skill automatically, but the command timed out.' } } diff --git a/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx b/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx index b21e7a9b9ec..bbf320f38cb 100644 --- a/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx +++ b/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx @@ -218,6 +218,13 @@ describe('AgentSkillSetupPanel', () => { expect(buttonMarkupByLabel(html, 'Install')).toContain('disabled=""') }) + it('omits description copy when the enclosing surface already provides context', () => { + const html = renderPanel({ description: undefined, hideHeader: true }) + + expect(html).not.toContain('Enables agents to use Orca workflows.') + expect(buttonLabels(html)).toEqual(['Install', 'Re-check']) + }) + it('opens not-installed setup with the install command for preview, copy, and terminal', async () => { await renderInteractivePanel({ installedCommand: UPDATE_COMMAND }) diff --git a/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx b/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx index 1453eaf02e4..ddb153ec449 100644 --- a/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx +++ b/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx @@ -16,7 +16,7 @@ type SkillPrerequisiteStatus = Awaited )}
-

{description}

+ {description ? ( +

{description}

+ ) : null} {actionRow} {actionHint ?
{actionHint}
: null} {!installed && preInstallNotice && preInstallNoticeVisible ? ( diff --git a/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.test.ts b/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.test.ts index 3a2f8f9479f..a786c070b35 100644 --- a/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.test.ts +++ b/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.test.ts @@ -2,7 +2,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { ManagedAgentSkillFallback } from '../../../../shared/skills' import { getManagedSkillFallbackDisplayMessage, - getManagedSkillContextCopy + getManagedSkillContextCopy, + getManagedSkillContextWorkspaceCopy } from './managed-agent-skill-dialog-copy' import { advanceManagedAgentSkillFallbackQueue, @@ -52,21 +53,28 @@ beforeEach(() => { }) describe('ManagedAgentSkillSetupDialogHost copy', () => { - it('names the agent-triggered orchestration context', () => { - expect(getManagedSkillContextCopy('agent-orchestration')).toBe( - 'An agent just tried to use Orca orchestration. Orca needs the orchestration skill before agents can coordinate reliably.' + it('uses neutral orchestration context copy when no workspace is available', () => { + expect(getManagedSkillContextCopy('agent-orchestration', 'Update')).toBe( + 'Orca Orchestration was used. Update the orchestration skill to enable agents to coordinate reliably.' ) }) it('names the Linear worktree context', () => { - expect(getManagedSkillContextCopy('linear-worktree')).toBe( - 'This Linear task workflow needs the Linear agent skill. Orca could not update it automatically.' + expect(getManagedSkillContextCopy('linear-worktree', 'Install')).toBe( + 'A worktree was started from a Linear task. Install the Linear agent skill to enable agents to read and update Linear issues.' ) }) + it('splits workspace-aware context copy so the workspace can expose its full path', () => { + expect(getManagedSkillContextWorkspaceCopy('agent-computer-use', 'Install')).toEqual({ + beforeWorkspace: 'Computer Use was used in ', + afterWorkspace: '. Install the Computer Use skill to enable agents to control apps reliably.' + }) + }) + it('localizes fallback reason copy in the renderer', () => { expect(getManagedSkillFallbackDisplayMessage('remote-runtime')).toBe( - 'Remote runtimes are not updated in the background.' + 'This skill is on a remote runtime, so Orca needs you to update it there.' ) }) }) diff --git a/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.tsx b/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.tsx index b23c3a065f3..5c767bb1bc5 100644 --- a/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.tsx +++ b/src/renderer/src/components/skills/ManagedAgentSkillSetupDialogHost.tsx @@ -8,6 +8,7 @@ import { } from '@/hooks/useInstalledAgentSkills' import { getManagedSkillContextCopy, + getManagedSkillContextWorkspaceCopy, getManagedSkillFallbackDisplayMessage } from './managed-agent-skill-dialog-copy' import { @@ -32,6 +33,7 @@ import { AGENT_SKILL_CLI_PREREQUISITE_NOTICE, isOrcaCliAvailableOnPath } from '@/lib/agent-skill-cli-prerequisite' +import { basename } from '@/lib/path' import { translate } from '@/i18n/i18n' const DISMISS_STORAGE_PREFIX = 'orca:managed-agent-skill-setup-dismissed:' @@ -84,7 +86,11 @@ export function ManagedAgentSkillSetupDialogHost(): React.JSX.Element | null { } }, [enqueueFallback]) - const contextCopy = active ? getManagedSkillContextCopy(active.context) : '' + const contextActionLabel = + active?.manualCommand?.kind === 'update' + ? translate('auto.components.skills.ManagedAgentSkillSetupDialogHost.update', 'Update') + : translate('auto.components.skills.ManagedAgentSkillSetupDialogHost.install', 'Install') + const contextCopy = active ? getManagedSkillContextCopy(active.context, contextActionLabel) : '' const installedCommand = useMemo( () => (active ? buildAgentFeatureSkillUpdateCommand(active.skillName) : ''), [active] @@ -134,6 +140,12 @@ export function ManagedAgentSkillSetupDialogHost(): React.JSX.Element | null { const command = active.manualCommand?.command const loading = installedState.loading || rechecking + const workspacePath = active.request.discoveryTarget?.projectRootPath?.trim() || null + const workspaceName = workspacePath ? basename(workspacePath) || workspacePath : null + const workspaceContextCopy = + workspacePath && workspaceName + ? getManagedSkillContextWorkspaceCopy(active.context, contextActionLabel) + : null return ( - {contextCopy} + + {workspaceContextCopy && workspacePath && workspaceName ? ( + <> + {workspaceContextCopy.beforeWorkspace} + + {workspaceName} + + {workspaceContextCopy.afterWorkspace} + + ) : ( + contextCopy + )} +
- +

{getManagedSkillFallbackDisplayMessage(active.reason)}

@@ -170,7 +194,6 @@ export function ManagedAgentSkillSetupDialogHost(): React.JSX.Element | null { 'auto.components.skills.ManagedAgentSkillSetupDialogHost.panelTitle', 'Set up managed agent skill' )} - description={contextCopy} command={command} installedCommand={installedCommand} terminalTitle={translate( @@ -186,17 +209,7 @@ export function ManagedAgentSkillSetupDialogHost(): React.JSX.Element | null { installed={installedState.installed} loading={loading} error={installedState.error} - installLabel={ - active.manualCommand?.kind === 'update' - ? translate( - 'auto.components.skills.ManagedAgentSkillSetupDialogHost.update', - 'Update' - ) - : translate( - 'auto.components.skills.ManagedAgentSkillSetupDialogHost.install', - 'Install' - ) - } + installLabel={contextActionLabel} installedInstallLabel={translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.update', 'Update' diff --git a/src/renderer/src/components/skills/managed-agent-skill-dialog-copy.ts b/src/renderer/src/components/skills/managed-agent-skill-dialog-copy.ts index b7f4caf444f..8e84120cbfc 100644 --- a/src/renderer/src/components/skills/managed-agent-skill-dialog-copy.ts +++ b/src/renderer/src/components/skills/managed-agent-skill-dialog-copy.ts @@ -4,31 +4,99 @@ import type { } from '../../../../shared/skills' import { translate } from '@/i18n/i18n' -export function getManagedSkillContextCopy(context: ManagedAgentSkillContext): string { +export type ManagedSkillContextWorkspaceCopy = { + beforeWorkspace: string + afterWorkspace: string +} + +export function getManagedSkillContextCopy( + context: ManagedAgentSkillContext, + actionLabel: string +): string { switch (context) { case 'linear-worktree': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.linearWorktreeContext', - 'This Linear task workflow needs the Linear agent skill. Orca could not update it automatically.' + 'A worktree was started from a Linear task. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.', + { actionLabel } ) case 'agent-orchestration': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentOrchestrationContext', - 'An agent just tried to use Orca orchestration. Orca needs the orchestration skill before agents can coordinate reliably.' + 'Orca Orchestration was used. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.', + { actionLabel } ) case 'agent-computer-use': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentComputerUseContext', - 'An agent just tried to use Computer Use. Orca needs the Computer Use skill before agents can control apps reliably.' + 'Computer Use was used. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.', + { actionLabel } ) case 'agent-orca-cli': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentOrcaCliContext', - "An agent just tried to use Orca's CLI skill for this workflow. Orca needs the CLI skill before this workflow can continue reliably." + 'The Orca CLI skill was used. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.', + { actionLabel } ) } } +export function getManagedSkillContextWorkspaceCopy( + context: ManagedAgentSkillContext, + actionLabel: string +): ManagedSkillContextWorkspaceCopy { + switch (context) { + case 'linear-worktree': + return { + beforeWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.linearWorktreeContextBeforeWorkspace', + 'A worktree was started from a Linear task in ' + ), + afterWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.linearWorktreeContextAfterWorkspace', + '. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.', + { actionLabel } + ) + } + case 'agent-orchestration': + return { + beforeWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentOrchestrationContextBeforeWorkspace', + 'Orca Orchestration was used in ' + ), + afterWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentOrchestrationContextAfterWorkspace', + '. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.', + { actionLabel } + ) + } + case 'agent-computer-use': + return { + beforeWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentComputerUseContextBeforeWorkspace', + 'Computer Use was used in ' + ), + afterWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentComputerUseContextAfterWorkspace', + '. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.', + { actionLabel } + ) + } + case 'agent-orca-cli': + return { + beforeWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentOrcaCliContextBeforeWorkspace', + 'The Orca CLI skill was used in ' + ), + afterWorkspace: translate( + 'auto.components.skills.ManagedAgentSkillSetupDialogHost.agentOrcaCliContextAfterWorkspace', + '. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.', + { actionLabel } + ) + } + } +} + export function getManagedSkillFallbackDisplayMessage( reason: ManagedAgentSkillFallbackReason ): string { @@ -36,92 +104,92 @@ export function getManagedSkillFallbackDisplayMessage( case 'target-required': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.targetRequired', - 'Orca could not resolve the runtime that should read this skill.' + "Orca couldn't tell which runtime should use this skill." ) case 'unsupported-skill': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.unsupportedSkill', - 'This is not an Orca-managed agent skill.' + "This isn't an Orca-managed skill." ) case 'repair-required-runtime': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.repairRequiredRuntime', - 'The selected runtime needs repair before Orca can inspect its skills.' + 'This runtime needs repair before Orca can inspect its skills.' ) case 'remote-runtime': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.remoteRuntime', - 'Remote runtimes are not updated in the background.' + 'This skill is on a remote runtime, so Orca needs you to update it there.' ) case 'wsl-runtime': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.wslRuntime', - 'WSL skill updates are manual in this version.' + 'This skill is in WSL, so Orca needs you to update it there.' ) case 'missing-install': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.missingInstall', - 'The managed skill is not installed in the selected runtime.' + "This skill isn't installed for this runtime yet." ) case 'project-install': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.projectInstall', - 'Project-scoped skills are not updated in the background.' + "This skill is installed in the project, so Orca won't update it automatically." ) case 'ambiguous-install': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.ambiguousInstall', - 'Orca found both global and project-scoped copies of this skill.' + 'Orca found more than one copy of this skill and needs you to choose the right one.' ) case 'bundled-or-plugin-install': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.bundledOrPluginInstall', - 'Bundled and plugin-cache skills are not mutated by Orca.' + "This skill comes from Orca or a plugin, so Orca won't modify it here." ) case 'symlinked-global-install': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.symlinkedGlobalInstall', - 'Symlinked global skills are not safe for background updates yet.' + "This global skill is symlinked, so Orca won't change it automatically." ) case 'unsupported-cli-contract': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.unsupportedCliContract', - 'This build does not include the verified skills CLI update contract.' + "This Orca build can't verify skill updates yet." ) case 'expected-hash-missing': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.expectedHashMissing', - 'This build does not include an expected hash for this managed skill.' + "This Orca build can't verify the expected version of this skill." ) case 'lockfile-missing': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.lockfileMissing', - 'Orca could not find the global skills lockfile.' + "Orca couldn't find the global skills lockfile needed to verify this update." ) case 'lockfile-malformed': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.lockfileMalformed', - 'The global skills lockfile could not be parsed.' + "Orca couldn't read the global skills lockfile needed to verify this update." ) case 'lockfile-unsupported-schema': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.lockfileUnsupportedSchema', - 'The global skills lockfile uses an unsupported schema version.' + "The global skills lockfile uses a format Orca doesn't support yet." ) case 'lock-entry-missing': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.lockEntryMissing', - 'The global skills lockfile does not track this skill.' + "The global skills lockfile doesn't track this skill, so Orca can't verify the update." ) case 'lock-entry-unmanaged-source': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.lockEntryUnmanagedSource', - 'The installed skill is not tracked as Orca-managed source.' + "This installed skill isn't tracked as Orca-managed, so Orca won't update it automatically." ) case 'background-update-disabled': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.backgroundUpdateDisabled', - 'Automatic skill updates are turned off, so this update needs manual review.' + 'Automatic skill updates are off, so Orca needs you to run this update.' ) case 'cooldown': return translate( @@ -131,12 +199,12 @@ export function getManagedSkillFallbackDisplayMessage( case 'update-failed': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.updateFailed', - 'The managed-skill update command failed.' + 'Orca tried to update this skill automatically, but the command failed.' ) case 'update-timeout': return translate( 'auto.components.skills.ManagedAgentSkillSetupDialogHost.updateTimeout', - 'The managed-skill update command timed out.' + 'Orca tried to update this skill automatically, but the command timed out.' ) } } diff --git a/src/renderer/src/i18n/locales/en.json b/src/renderer/src/i18n/locales/en.json index c5d470f74ae..f7b436676bb 100644 --- a/src/renderer/src/i18n/locales/en.json +++ b/src/renderer/src/i18n/locales/en.json @@ -153,7 +153,7 @@ "d2e43e426a": "{{value0}} must be an object.", "fb290366b2": "Unavailable on web.", "76122208ca": "Shortcut for \"{{value0}}\" was ignored: {{value1}}", - "remoteManagedSkillRuntime": "Remote runtimes are not updated in the background.", + "remoteManagedSkillRuntime": "This skill is on a remote runtime, so Orca needs you to update it there.", "remoteManagedSkillCooldown": "Orca recently tried this managed-skill check and is cooling down." } }, @@ -3315,31 +3315,39 @@ "recheck": "Re-check", "dontShowAgain": "Don't show again", "notNow": "Not now", - "linearWorktreeContext": "This Linear task workflow needs the Linear agent skill. Orca could not update it automatically.", - "agentOrchestrationContext": "An agent just tried to use Orca orchestration. Orca needs the orchestration skill before agents can coordinate reliably.", - "agentComputerUseContext": "An agent just tried to use Computer Use. Orca needs the Computer Use skill before agents can control apps reliably.", - "agentOrcaCliContext": "An agent just tried to use Orca's CLI skill for this workflow. Orca needs the CLI skill before this workflow can continue reliably.", - "targetRequired": "Orca could not resolve the runtime that should read this skill.", - "unsupportedSkill": "This is not an Orca-managed agent skill.", - "repairRequiredRuntime": "The selected runtime needs repair before Orca can inspect its skills.", - "remoteRuntime": "Remote runtimes are not updated in the background.", - "wslRuntime": "WSL skill updates are manual in this version.", - "missingInstall": "The managed skill is not installed in the selected runtime.", - "projectInstall": "Project-scoped skills are not updated in the background.", - "ambiguousInstall": "Orca found both global and project-scoped copies of this skill.", - "bundledOrPluginInstall": "Bundled and plugin-cache skills are not mutated by Orca.", - "symlinkedGlobalInstall": "Symlinked global skills are not safe for background updates yet.", - "unsupportedCliContract": "This build does not include the verified skills CLI update contract.", - "expectedHashMissing": "This build does not include an expected hash for this managed skill.", - "lockfileMissing": "Orca could not find the global skills lockfile.", - "lockfileMalformed": "The global skills lockfile could not be parsed.", - "lockfileUnsupportedSchema": "The global skills lockfile uses an unsupported schema version.", - "lockEntryMissing": "The global skills lockfile does not track this skill.", - "lockEntryUnmanagedSource": "The installed skill is not tracked as Orca-managed source.", - "backgroundUpdateDisabled": "Automatic skill updates are turned off, so this update needs manual review.", + "linearWorktreeContext": "A worktree was started from a Linear task. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContext": "Orca Orchestration was used. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContext": "Computer Use was used. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContext": "The Orca CLI skill was used. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.", + "linearWorktreeContextBeforeWorkspace": "A worktree was started from a Linear task in ", + "linearWorktreeContextAfterWorkspace": ". {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContextBeforeWorkspace": "Orca Orchestration was used in ", + "agentOrchestrationContextAfterWorkspace": ". {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContextBeforeWorkspace": "Computer Use was used in ", + "agentComputerUseContextAfterWorkspace": ". {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContextBeforeWorkspace": "The Orca CLI skill was used in ", + "agentOrcaCliContextAfterWorkspace": ". {{actionLabel}} the CLI skill to enable this workflow to continue reliably.", + "targetRequired": "Orca couldn't tell which runtime should use this skill.", + "unsupportedSkill": "This isn't an Orca-managed skill.", + "repairRequiredRuntime": "This runtime needs repair before Orca can inspect its skills.", + "remoteRuntime": "This skill is on a remote runtime, so Orca needs you to update it there.", + "wslRuntime": "This skill is in WSL, so Orca needs you to update it there.", + "missingInstall": "This skill isn't installed for this runtime yet.", + "projectInstall": "This skill is installed in the project, so Orca won't update it automatically.", + "ambiguousInstall": "Orca found more than one copy of this skill and needs you to choose the right one.", + "bundledOrPluginInstall": "This skill comes from Orca or a plugin, so Orca won't modify it here.", + "symlinkedGlobalInstall": "This global skill is symlinked, so Orca won't change it automatically.", + "unsupportedCliContract": "This Orca build can't verify skill updates yet.", + "expectedHashMissing": "This Orca build can't verify the expected version of this skill.", + "lockfileMissing": "Orca couldn't find the global skills lockfile needed to verify this update.", + "lockfileMalformed": "Orca couldn't read the global skills lockfile needed to verify this update.", + "lockfileUnsupportedSchema": "The global skills lockfile uses a format Orca doesn't support yet.", + "lockEntryMissing": "The global skills lockfile doesn't track this skill, so Orca can't verify the update.", + "lockEntryUnmanagedSource": "This installed skill isn't tracked as Orca-managed, so Orca won't update it automatically.", + "backgroundUpdateDisabled": "Automatic skill updates are off, so Orca needs you to run this update.", "cooldown": "Orca recently tried this managed-skill check and is cooling down.", - "updateFailed": "The managed-skill update command failed.", - "updateTimeout": "The managed-skill update command timed out." + "updateFailed": "Orca tried to update this skill automatically, but the command failed.", + "updateTimeout": "Orca tried to update this skill automatically, but the command timed out." } }, "sidebar": { diff --git a/src/renderer/src/i18n/locales/es.json b/src/renderer/src/i18n/locales/es.json index 1f7ecd1d99a..d686c1262ae 100644 --- a/src/renderer/src/i18n/locales/es.json +++ b/src/renderer/src/i18n/locales/es.json @@ -3315,10 +3315,10 @@ "recheck": "Volver a comprobar", "dontShowAgain": "No volver a mostrar", "notNow": "Ahora no", - "linearWorktreeContext": "Este flujo de tarea de Linear necesita la habilidad de agente de Linear. Orca no pudo actualizarla automáticamente.", - "agentOrchestrationContext": "Un agente acaba de intentar usar la orquestación de Orca. Orca necesita la habilidad de orquestación para que los agentes puedan coordinarse de forma fiable.", - "agentComputerUseContext": "Un agente acaba de intentar usar Computer Use. Orca necesita la habilidad Computer Use para que los agentes puedan controlar apps de forma fiable.", - "agentOrcaCliContext": "Un agente acaba de intentar usar la habilidad de CLI de Orca para este flujo. Orca necesita la habilidad de CLI para que este flujo pueda continuar de forma fiable.", + "linearWorktreeContext": "A worktree was started from a Linear task. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContext": "Orca Orchestration was used. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContext": "Computer Use was used. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContext": "The Orca CLI skill was used. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.", "targetRequired": "Orca no pudo resolver el entorno de ejecución que debe leer esta habilidad.", "unsupportedSkill": "Esta no es una habilidad de agente administrada por Orca.", "repairRequiredRuntime": "El entorno de ejecución seleccionado necesita reparación antes de que Orca pueda inspeccionar sus habilidades.", @@ -3339,7 +3339,15 @@ "backgroundUpdateDisabled": "Las actualizaciones automáticas de habilidades están desactivadas, por lo que esta actualización necesita revisión manual.", "cooldown": "Orca intentó recientemente esta comprobación de habilidad administrada y está esperando antes de volver a intentarlo.", "updateFailed": "El comando de actualización de la habilidad administrada falló.", - "updateTimeout": "El comando de actualización de la habilidad administrada agotó el tiempo de espera." + "updateTimeout": "El comando de actualización de la habilidad administrada agotó el tiempo de espera.", + "linearWorktreeContextBeforeWorkspace": "A worktree was started from a Linear task in ", + "linearWorktreeContextAfterWorkspace": ". {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContextBeforeWorkspace": "Orca Orchestration was used in ", + "agentOrchestrationContextAfterWorkspace": ". {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContextBeforeWorkspace": "Computer Use was used in ", + "agentComputerUseContextAfterWorkspace": ". {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContextBeforeWorkspace": "The Orca CLI skill was used in ", + "agentOrcaCliContextAfterWorkspace": ". {{actionLabel}} the CLI skill to enable this workflow to continue reliably." } }, "sidebar": { diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json index 8499ddd598f..f461251fc21 100644 --- a/src/renderer/src/i18n/locales/ja.json +++ b/src/renderer/src/i18n/locales/ja.json @@ -3315,10 +3315,10 @@ "recheck": "再チェック", "dontShowAgain": "今後表示しない", "notNow": "今はしない", - "linearWorktreeContext": "この Linear タスクのワークフローには Linear エージェントスキルが必要です。Orca は自動更新できませんでした。", - "agentOrchestrationContext": "エージェントが Orca オーケストレーションを使おうとしました。エージェントが確実に連携するには、Orca にオーケストレーションスキルが必要です。", - "agentComputerUseContext": "エージェントが Computer Use を使おうとしました。エージェントがアプリを確実に操作するには、Orca に Computer Use スキルが必要です。", - "agentOrcaCliContext": "エージェントがこのワークフローで Orca の CLI スキルを使おうとしました。このワークフローを確実に続行するには、Orca に CLI スキルが必要です。", + "linearWorktreeContext": "A worktree was started from a Linear task. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContext": "Orca Orchestration was used. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContext": "Computer Use was used. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContext": "The Orca CLI skill was used. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.", "targetRequired": "Orca はこのスキルを読み取るランタイムを解決できませんでした。", "unsupportedSkill": "これは Orca 管理のエージェントスキルではありません。", "repairRequiredRuntime": "Orca がスキルを検査する前に、選択したランタイムの修復が必要です。", @@ -3339,7 +3339,15 @@ "backgroundUpdateDisabled": "スキルの自動更新がオフになっているため、この更新には手動確認が必要です。", "cooldown": "Orca は最近この管理対象スキルのチェックを試行したため、クールダウン中です。", "updateFailed": "管理対象スキルの更新コマンドに失敗しました。", - "updateTimeout": "管理対象スキルの更新コマンドがタイムアウトしました。" + "updateTimeout": "管理対象スキルの更新コマンドがタイムアウトしました。", + "linearWorktreeContextBeforeWorkspace": "A worktree was started from a Linear task in ", + "linearWorktreeContextAfterWorkspace": ". {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContextBeforeWorkspace": "Orca Orchestration was used in ", + "agentOrchestrationContextAfterWorkspace": ". {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContextBeforeWorkspace": "Computer Use was used in ", + "agentComputerUseContextAfterWorkspace": ". {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContextBeforeWorkspace": "The Orca CLI skill was used in ", + "agentOrcaCliContextAfterWorkspace": ". {{actionLabel}} the CLI skill to enable this workflow to continue reliably." } }, "sidebar": { diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json index 39ac2499aeb..2b9d6860a3b 100644 --- a/src/renderer/src/i18n/locales/ko.json +++ b/src/renderer/src/i18n/locales/ko.json @@ -3315,10 +3315,10 @@ "recheck": "다시 확인", "dontShowAgain": "다시 표시하지 않기", "notNow": "나중에", - "linearWorktreeContext": "이 Linear 작업 흐름에는 Linear 에이전트 스킬이 필요합니다. Orca가 자동으로 업데이트할 수 없습니다.", - "agentOrchestrationContext": "에이전트가 방금 Orca 오케스트레이션을 사용하려고 했습니다. 에이전트가 안정적으로 조율되려면 Orca에 오케스트레이션 스킬이 필요합니다.", - "agentComputerUseContext": "에이전트가 방금 Computer Use를 사용하려고 했습니다. 에이전트가 앱을 안정적으로 제어하려면 Orca에 Computer Use 스킬이 필요합니다.", - "agentOrcaCliContext": "에이전트가 이 흐름에서 Orca의 CLI 스킬을 사용하려고 했습니다. 이 흐름을 안정적으로 계속하려면 Orca에 CLI 스킬이 필요합니다.", + "linearWorktreeContext": "A worktree was started from a Linear task. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContext": "Orca Orchestration was used. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContext": "Computer Use was used. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContext": "The Orca CLI skill was used. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.", "targetRequired": "Orca가 이 스킬을 읽어야 하는 런타임을 확인할 수 없습니다.", "unsupportedSkill": "Orca가 관리하는 에이전트 스킬이 아닙니다.", "repairRequiredRuntime": "Orca가 스킬을 검사하기 전에 선택한 런타임을 복구해야 합니다.", @@ -3339,7 +3339,15 @@ "backgroundUpdateDisabled": "자동 스킬 업데이트가 꺼져 있어 이 업데이트는 수동 검토가 필요합니다.", "cooldown": "Orca가 최근 이 관리형 스킬 확인을 시도했으며 현재 대기 중입니다.", "updateFailed": "관리형 스킬 업데이트 명령이 실패했습니다.", - "updateTimeout": "관리형 스킬 업데이트 명령 시간이 초과되었습니다." + "updateTimeout": "관리형 스킬 업데이트 명령 시간이 초과되었습니다.", + "linearWorktreeContextBeforeWorkspace": "A worktree was started from a Linear task in ", + "linearWorktreeContextAfterWorkspace": ". {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContextBeforeWorkspace": "Orca Orchestration was used in ", + "agentOrchestrationContextAfterWorkspace": ". {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContextBeforeWorkspace": "Computer Use was used in ", + "agentComputerUseContextAfterWorkspace": ". {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContextBeforeWorkspace": "The Orca CLI skill was used in ", + "agentOrcaCliContextAfterWorkspace": ". {{actionLabel}} the CLI skill to enable this workflow to continue reliably." } }, "sidebar": { diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json index f23031056bb..4ad1597209b 100644 --- a/src/renderer/src/i18n/locales/zh.json +++ b/src/renderer/src/i18n/locales/zh.json @@ -3315,10 +3315,10 @@ "recheck": "重新检查", "dontShowAgain": "不再显示", "notNow": "稍后", - "linearWorktreeContext": "此 Linear 任务流程需要 Linear 代理技能。Orca 无法自动更新它。", - "agentOrchestrationContext": "代理刚刚尝试使用 Orca 编排。Orca 需要编排技能,代理才能可靠地协作。", - "agentComputerUseContext": "代理刚刚尝试使用 Computer Use。Orca 需要 Computer Use 技能,代理才能可靠地控制应用。", - "agentOrcaCliContext": "代理刚刚尝试在此流程中使用 Orca 的 CLI 技能。Orca 需要 CLI 技能,此流程才能可靠地继续。", + "linearWorktreeContext": "A worktree was started from a Linear task. {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContext": "Orca Orchestration was used. {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContext": "Computer Use was used. {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContext": "The Orca CLI skill was used. {{actionLabel}} the CLI skill to enable this workflow to continue reliably.", "targetRequired": "Orca 无法解析应读取此技能的运行时。", "unsupportedSkill": "这不是 Orca 托管的代理技能。", "repairRequiredRuntime": "所选运行时需要修复,Orca 才能检查其技能。", @@ -3339,7 +3339,15 @@ "backgroundUpdateDisabled": "自动技能更新已关闭,因此此次更新需要手动审核。", "cooldown": "Orca 最近已尝试此托管技能检查,正在等待重试。", "updateFailed": "托管技能更新命令失败。", - "updateTimeout": "托管技能更新命令超时。" + "updateTimeout": "托管技能更新命令超时。", + "linearWorktreeContextBeforeWorkspace": "A worktree was started from a Linear task in ", + "linearWorktreeContextAfterWorkspace": ". {{actionLabel}} the Linear agent skill to enable agents to read and update Linear issues.", + "agentOrchestrationContextBeforeWorkspace": "Orca Orchestration was used in ", + "agentOrchestrationContextAfterWorkspace": ". {{actionLabel}} the orchestration skill to enable agents to coordinate reliably.", + "agentComputerUseContextBeforeWorkspace": "Computer Use was used in ", + "agentComputerUseContextAfterWorkspace": ". {{actionLabel}} the Computer Use skill to enable agents to control apps reliably.", + "agentOrcaCliContextBeforeWorkspace": "The Orca CLI skill was used in ", + "agentOrcaCliContextAfterWorkspace": ". {{actionLabel}} the CLI skill to enable this workflow to continue reliably." } }, "sidebar": { diff --git a/src/renderer/src/store/slices/worktrees.test.ts b/src/renderer/src/store/slices/worktrees.test.ts index dca09347e21..770bcd65909 100644 --- a/src/renderer/src/store/slices/worktrees.test.ts +++ b/src/renderer/src/store/slices/worktrees.test.ts @@ -90,7 +90,7 @@ const mockApi = { scope: 'missing', reason: 'remote-runtime', uiKey: 'remote::linear-tickets:linear-worktree', - message: 'Remote runtimes are not updated in the background.', + message: 'This skill is on a remote runtime, so Orca needs you to update it there.', request: { skillName: 'linear-tickets', context: 'linear-worktree', diff --git a/src/renderer/src/web/web-preload-api.ts b/src/renderer/src/web/web-preload-api.ts index bcd7c94648e..c9ffb86ed77 100644 --- a/src/renderer/src/web/web-preload-api.ts +++ b/src/renderer/src/web/web-preload-api.ts @@ -2341,7 +2341,7 @@ function createSkillsApi(): NonNullable['skills']> { uiKey, message: translate( 'auto.web.web.preload.api.remoteManagedSkillRuntime', - 'Remote runtimes are not updated in the background.' + 'This skill is on a remote runtime, so Orca needs you to update it there.' ), request } satisfies ManagedAgentSkillFallback