diff --git a/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx b/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx index e3974da03c2..e404928ff8a 100644 --- a/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx +++ b/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx @@ -53,6 +53,18 @@ describe('AgentSkillSetupPanel', () => { expect(buttonLabels(html)).not.toContain('Re-check') }) + it('uses the install copy when the skill is installed but the CLI prerequisite is missing', () => { + const html = renderPanel({ + installed: true, + installLabel: 'Install CLI & Skill', + preInstallNotice: 'Install the Orca CLI before running agent skill setup.' + }) + + expect(html).toContain('Installed') + expect(buttonLabels(html)).toContain('Install CLI & Skill') + expect(buttonLabels(html)).not.toContain('Update') + }) + it('can hide install after the skill is detected', () => { const html = renderPanel({ installed: true, showInstallWhenInstalled: false }) diff --git a/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx b/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx index fca5d39fec5..218275749e7 100644 --- a/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx +++ b/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx @@ -84,6 +84,7 @@ export function AgentSkillSetupPanel({ () => (getPrerequisiteStatus ?? window.api.cli.getInstallStatus)(), [getPrerequisiteStatus] ) + const actionLabel = installed && preInstallNoticeVisible ? installLabel : installedInstallLabel useEffect(() => { if (!preInstallNotice) { @@ -172,7 +173,7 @@ export function AgentSkillSetupPanel({ disabled={terminalOpen || installDisabled} > - {installed ? installedInstallLabel : installLabel} + {installed ? actionLabel : installLabel} ) : null} {!installed || showRecheckWhenInstalled ? ( diff --git a/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.test.tsx b/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.test.tsx index e3f5eca4e3f..17e69d39ce1 100644 --- a/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.test.tsx +++ b/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.test.tsx @@ -412,13 +412,13 @@ describe('LinearAgentSkillSetupPrompt', () => { 'Enable agents to read and edit the attached Linear ticket.' ) expect(toast.warning).toHaveBeenCalledWith( - 'Orca CLI and Linear agent skill are missing', + 'Orca CLI and Linear skill are missing', expect.objectContaining({ id: 'linear-agent-skill-setup-orca.linearTicketsSkill.setupDismissed.host', description: - 'Install them so agents started from linked Linear tickets can read and update the ticket context.', + 'Install the Orca CLI and the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI.', action: { - label: 'Open setup', + label: 'Set up Linear access', onClick: expect.any(Function) } }) @@ -439,11 +439,11 @@ describe('LinearAgentSkillSetupPrompt', () => { await renderPrompt({ linked: true, remote: false, surface: 'modal' }) expect(toast.warning).toHaveBeenCalledWith( - 'Orca CLI and Linear agent skill are missing', + 'Orca CLI and Linear skill are missing', expect.objectContaining({ id: 'linear-agent-skill-setup-orca.linearTicketsSkill.setupDismissed.host', description: - 'Install them so agents started from linked Linear tickets can read and update the ticket context.' + 'Install the Orca CLI and the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI.' }) ) }) @@ -567,11 +567,11 @@ describe('LinearAgentSkillSetupPrompt', () => { expect(toast.warning).toHaveBeenCalledTimes(1) expect(toast.warning).toHaveBeenCalledWith( - 'Orca CLI and Linear agent skill are missing', + 'Orca CLI and Linear skill are missing', expect.objectContaining({ id: 'linear-agent-skill-setup-orca.linearTicketsSkill.setupDismissed.host', description: - 'Install them so agents started from linked Linear tickets can read and update the ticket context.' + 'Install the Orca CLI and the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI.' }) ) }) diff --git a/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.tsx b/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.tsx index 100eb0d7f3c..3af0637b27d 100644 --- a/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.tsx +++ b/src/renderer/src/components/sidebar/LinearAgentSkillSetupPrompt.tsx @@ -183,7 +183,7 @@ export function LinearAgentSkillSetupPrompt({ const toastTitle = getLinearAgentSkillSetupToastTitle(cliAvailable, skill.installed) - const toastDescription = getLinearAgentSkillSetupToastDescription(remote, agentRuntime) + const toastDescription = getLinearAgentSkillSetupToastDescription(cliAvailable, skill.installed) useEffect(() => { if (surface !== 'modal' || !missingSetup || setupDialogOpen) { @@ -207,7 +207,7 @@ export function LinearAgentSkillSetupPrompt({ action: { label: translate( 'auto.components.sidebar.LinearAgentSkillSetupPrompt.openSetup', - 'Open setup' + 'Set up Linear access' ), onClick: () => setSetupDialogOpen(true) } diff --git a/src/renderer/src/components/sidebar/linear-agent-skill-setup-copy.ts b/src/renderer/src/components/sidebar/linear-agent-skill-setup-copy.ts index 3922bbb1dbd..604943ef0b3 100644 --- a/src/renderer/src/components/sidebar/linear-agent-skill-setup-copy.ts +++ b/src/renderer/src/components/sidebar/linear-agent-skill-setup-copy.ts @@ -30,7 +30,7 @@ export function getLinearAgentSkillSetupToastTitle( if (!cliAvailable && !skillInstalled) { return translate( 'auto.components.sidebar.LinearAgentSkillSetupPrompt.toastMissingCliAndSkill', - 'Orca CLI and Linear agent skill are missing' + 'Orca CLI and Linear skill are missing' ) } if (!cliAvailable) { @@ -41,29 +41,29 @@ export function getLinearAgentSkillSetupToastTitle( } return translate( 'auto.components.sidebar.LinearAgentSkillSetupPrompt.toastMissingSkill', - 'Linear agent skill is missing' + 'Linear skill is missing' ) } export function getLinearAgentSkillSetupToastDescription( - remote: boolean, - agentRuntime: LocalAgentRuntime + cliAvailable: boolean, + skillInstalled: boolean ): string { - if (remote) { + if (!cliAvailable && !skillInstalled) { return translate( - 'auto.components.sidebar.LinearAgentSkillSetupPrompt.remoteToastDescription', - 'Install local setup for host handoffs; remote agent environments may still need their own setup.' + 'auto.components.sidebar.LinearAgentSkillSetupPrompt.toastInstallCliAndSkillDescription', + 'Install the Orca CLI and the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI.' ) } - if (agentRuntime.runtime === 'wsl') { + if (!cliAvailable) { return translate( - 'auto.components.sidebar.LinearAgentSkillSetupPrompt.wslToastDescription', - 'Install them for the selected WSL agent runtime so linked Linear ticket handoffs include ticket context.' + 'auto.components.sidebar.LinearAgentSkillSetupPrompt.toastInstallCliDescription', + 'Install the Orca CLI to enable your agents to read and edit Linear tasks through the Orca CLI.' ) } return translate( - 'auto.components.sidebar.LinearAgentSkillSetupPrompt.hostToastDescription', - 'Install them so agents started from linked Linear tickets can read and update the ticket context.' + 'auto.components.sidebar.LinearAgentSkillSetupPrompt.toastInstallSkillDescription', + 'Install the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI.' ) } diff --git a/src/renderer/src/i18n/locales/en.json b/src/renderer/src/i18n/locales/en.json index 8a1ea730e4c..7bf116309d7 100644 --- a/src/renderer/src/i18n/locales/en.json +++ b/src/renderer/src/i18n/locales/en.json @@ -3958,13 +3958,13 @@ "install": "Install CLI & Skill", "wslCopy": "Install it for WSL agent handoffs from linked Linear work.", "wslLabel": "WSL default", - "openSetup": "Open setup", - "toastMissingCliAndSkill": "Orca CLI and Linear agent skill are missing", + "openSetup": "Set up Linear access", + "toastMissingCliAndSkill": "Orca CLI and Linear skill are missing", "toastMissingCli": "Orca CLI is missing", - "toastMissingSkill": "Linear agent skill is missing", - "remoteToastDescription": "Install local setup for host handoffs; remote agent environments may still need their own setup.", - "wslToastDescription": "Install them for the selected WSL agent runtime so linked Linear ticket handoffs include ticket context.", - "hostToastDescription": "Install them so agents started from linked Linear tickets can read and update the ticket context." + "toastMissingSkill": "Linear skill is missing", + "toastInstallCliAndSkillDescription": "Install the Orca CLI and the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI.", + "toastInstallCliDescription": "Install the Orca CLI to enable your agents to read and edit Linear tasks through the Orca CLI.", + "toastInstallSkillDescription": "Install the Linear skill to enable your agents to read and edit Linear tasks through the Orca CLI." }, "FolderWorkspaceComposerDialog": { "connectFailed": "Failed to connect to project.", diff --git a/src/renderer/src/i18n/locales/es.json b/src/renderer/src/i18n/locales/es.json index 621c3c60866..059bdc73281 100644 --- a/src/renderer/src/i18n/locales/es.json +++ b/src/renderer/src/i18n/locales/es.json @@ -3958,13 +3958,13 @@ "install": "Instalar CLI y habilidad", "wslCopy": "Instálala para traspasos de Agent en WSL desde trabajo Linear enlazado.", "wslLabel": "WSL predeterminado", - "openSetup": "Abrir configuración", - "toastMissingCliAndSkill": "Faltan la CLI de Orca y la habilidad de Agent de Linear", + "openSetup": "Configurar acceso a Linear", + "toastMissingCliAndSkill": "Faltan la CLI de Orca y la habilidad de Linear", "toastMissingCli": "Falta la CLI de Orca", - "toastMissingSkill": "Falta la habilidad de Agent de Linear", - "remoteToastDescription": "Instala la configuración local para traspasos del host; los entornos de Agent remotos pueden necesitar su propia configuración.", - "wslToastDescription": "Instálalas para el runtime de Agent WSL seleccionado, de modo que los traspasos de tickets Linear enlazados incluyan contexto del ticket.", - "hostToastDescription": "Instálalas para que los Agents iniciados desde tickets Linear enlazados puedan leer y actualizar el contexto del ticket." + "toastMissingSkill": "Falta la habilidad de Linear", + "toastInstallCliAndSkillDescription": "Instala la CLI de Orca y la habilidad de Linear para permitir que tus Agents lean y editen tareas de Linear a través de la CLI de Orca.", + "toastInstallCliDescription": "Instala la CLI de Orca para permitir que tus Agents lean y editen tareas de Linear a través de la CLI de Orca.", + "toastInstallSkillDescription": "Instala la habilidad de Linear para permitir que tus Agents lean y editen tareas de Linear a través de la CLI de Orca." }, "FolderWorkspaceComposerDialog": { "connectFailed": "No se pudo conectar al proyecto.", diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json index 46aaf418401..2301c65562c 100644 --- a/src/renderer/src/i18n/locales/ja.json +++ b/src/renderer/src/i18n/locales/ja.json @@ -3958,13 +3958,13 @@ "install": "CLI とスキルをインストール", "wslCopy": "リンクされた Linear 作業からの WSL agent 引き継ぎ用にインストールします。", "wslLabel": "WSL 既定", - "openSetup": "設定を開く", - "toastMissingCliAndSkill": "Orca CLI と Linear agent スキルがありません", + "openSetup": "Linear アクセスを設定", + "toastMissingCliAndSkill": "Orca CLI と Linear スキルがありません", "toastMissingCli": "Orca CLI がありません", - "toastMissingSkill": "Linear agent スキルがありません", - "remoteToastDescription": "ホスト引き継ぎ用にローカル設定をインストールします。リモート agent 環境では独自の設定が必要な場合があります。", - "wslToastDescription": "リンクされた Linear チケットの引き継ぎにチケットコンテキストが含まれるよう、選択した WSL agent ランタイムにインストールします。", - "hostToastDescription": "リンクされた Linear チケットから開始した Agents がチケットコンテキストを読み取り、更新できるようにインストールします。" + "toastMissingSkill": "Linear スキルがありません", + "toastInstallCliAndSkillDescription": "Orca CLI と Linear スキルをインストールして、agents が Orca CLI を通じて Linear タスクを読み書きできるようにします。", + "toastInstallCliDescription": "Orca CLI をインストールして、agents が Orca CLI を通じて Linear タスクを読み書きできるようにします。", + "toastInstallSkillDescription": "Linear スキルをインストールして、agents が Orca CLI を通じて Linear タスクを読み書きできるようにします。" }, "FolderWorkspaceComposerDialog": { "connectFailed": "プロジェクトに接続できませんでした。", diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json index 487e97f9941..d53a6e429f7 100644 --- a/src/renderer/src/i18n/locales/ko.json +++ b/src/renderer/src/i18n/locales/ko.json @@ -3958,13 +3958,13 @@ "install": "CLI 및 스킬 설치", "wslCopy": "연결된 Linear 작업에서 WSL agent 인계를 위해 설치합니다.", "wslLabel": "WSL 기본값", - "openSetup": "설정 열기", - "toastMissingCliAndSkill": "Orca CLI와 Linear agent 스킬이 없습니다", + "openSetup": "Linear 액세스 설정", + "toastMissingCliAndSkill": "Orca CLI와 Linear 스킬이 없습니다", "toastMissingCli": "Orca CLI가 없습니다", - "toastMissingSkill": "Linear agent 스킬이 없습니다", - "remoteToastDescription": "호스트 인계를 위해 로컬 설정을 설치하세요. 원격 agent 환경에는 자체 설정이 필요할 수 있습니다.", - "wslToastDescription": "연결된 Linear 티켓 인계에 티켓 컨텍스트가 포함되도록 선택한 WSL agent 런타임에 설치하세요.", - "hostToastDescription": "연결된 Linear 티켓에서 시작한 Agents가 티켓 컨텍스트를 읽고 업데이트할 수 있도록 설치하세요." + "toastMissingSkill": "Linear 스킬이 없습니다", + "toastInstallCliAndSkillDescription": "Orca CLI와 Linear 스킬을 설치하여 agents가 Orca CLI를 통해 Linear 작업을 읽고 편집할 수 있게 하세요.", + "toastInstallCliDescription": "Orca CLI를 설치하여 agents가 Orca CLI를 통해 Linear 작업을 읽고 편집할 수 있게 하세요.", + "toastInstallSkillDescription": "Linear 스킬을 설치하여 agents가 Orca CLI를 통해 Linear 작업을 읽고 편집할 수 있게 하세요." }, "FolderWorkspaceComposerDialog": { "connectFailed": "프로젝트에 연결하지 못했습니다.", diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json index e5365240045..9dcb07a38a2 100644 --- a/src/renderer/src/i18n/locales/zh.json +++ b/src/renderer/src/i18n/locales/zh.json @@ -3958,13 +3958,13 @@ "install": "安装 CLI 和技能", "wslCopy": "为已链接 Linear 工作的 WSL agent 交接安装此项。", "wslLabel": "WSL 默认值", - "openSetup": "打开设置", - "toastMissingCliAndSkill": "缺少 Orca CLI 和 Linear agent 技能", + "openSetup": "设置 Linear 访问权限", + "toastMissingCliAndSkill": "缺少 Orca CLI 和 Linear 技能", "toastMissingCli": "缺少 Orca CLI", - "toastMissingSkill": "缺少 Linear agent 技能", - "remoteToastDescription": "为主机交接安装本地设置;远程 agent 环境可能仍需要自己的设置。", - "wslToastDescription": "为所选 WSL agent 运行时安装它们,以便已链接 Linear ticket 的交接包含 ticket 上下文。", - "hostToastDescription": "安装它们后,从已链接 Linear ticket 启动的 Agents 可以读取并更新 ticket 上下文。" + "toastMissingSkill": "缺少 Linear 技能", + "toastInstallCliAndSkillDescription": "安装 Orca CLI 和 Linear 技能,让 Agents 可以通过 Orca CLI 读取并编辑 Linear 任务。", + "toastInstallCliDescription": "安装 Orca CLI,让 Agents 可以通过 Orca CLI 读取并编辑 Linear 任务。", + "toastInstallSkillDescription": "安装 Linear 技能,让 Agents 可以通过 Orca CLI 读取并编辑 Linear 任务。" }, "FolderWorkspaceComposerDialog": { "connectFailed": "无法连接到项目。",