Refine Linear setup prompt copy

This commit is contained in:
brennanb2025
2026-06-12 17:24:30 -07:00
parent f6fe291388
commit 592ac93bd8
10 changed files with 65 additions and 52 deletions
@@ -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 })
@@ -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}
>
<Terminal className="size-3.5" />
{installed ? installedInstallLabel : installLabel}
{installed ? actionLabel : installLabel}
</Button>
) : null}
{!installed || showRecheckWhenInstalled ? (
@@ -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.'
})
)
})
@@ -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)
}
@@ -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.'
)
}
+6 -6
View File
@@ -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.",
+6 -6
View File
@@ -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.",
+6 -6
View File
@@ -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": "プロジェクトに接続できませんでした。",
+6 -6
View File
@@ -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": "프로젝트에 연결하지 못했습니다.",
+6 -6
View File
@@ -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": "无法连接到项目。",