Skip to content

fix: acp agent remove#1431

Merged
zerob13 merged 4 commits intodevfrom
fix/acp-agent-remove
Apr 4, 2026
Merged

fix: acp agent remove#1431
zerob13 merged 4 commits intodevfrom
fix/acp-agent-remove

Conversation

@zerob13
Copy link
Copy Markdown
Collaborator

@zerob13 zerob13 commented Apr 4, 2026

fixed #1430

Summary by CodeRabbit

  • New Features

    • Add uninstall flow for registry-installed ACP agents in settings with confirmation and success/failure feedback.
    • Uninstall disables the agent and clears locally managed install data while allowing reinstallation from the registry.
  • Improvements

    • Refresh ACP settings and agent list after uninstall.
    • Selection logic: clear chosen agent when it becomes disabled or is removed.
  • Tests

    • Add unit and UI tests covering uninstall cleanup, safe-path checks, state reset, and confirmation dialog wiring.
  • Documentation

    • New spec and plan documents describing end-to-end uninstall UX and acceptance criteria.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 4, 2026

📝 Walkthrough

Walkthrough

Adds an ACP Registry agent uninstall workflow: orchestration entrypoint, service-level uninstall and path-safe filesystem cleanup, repository state reset, renderer uninstall UI with confirmation, i18n/type additions, and tests covering repository, service, and UI behavior.

Changes

Cohort / File(s) Summary
Specs
docs/specs/acp-agent-uninstall/plan.md, docs/specs/acp-agent-uninstall/spec.md
New spec and plan documents describing end-to-end uninstall behavior, acceptance criteria, non-goals, and required test coverage.
Orchestration / Service
src/main/presenter/configPresenter/index.ts, src/main/presenter/configPresenter/acpLaunchSpecService.ts
Added ConfigPresenter.uninstallAcpRegistryAgent(agentId) and AcpLaunchSpecService.uninstallRegistryAgent(...). Introduced isPathWithinRoot() and helpers to remove install dirs, validate paths, and prune empty agent install roots.
Repository / Persistence
src/main/presenter/agentRepository/index.ts
Added AgentRepository.clearRegistryAcpAgentInstallation(agentId, installState) to disable registry agents and reset their install state (write updated state_json).
Renderer UI
src/renderer/settings/components/AcpSettings.vue, src/renderer/src/stores/ui/agent.ts
Added uninstall UI flow: AlertDialog confirmation, uninstall button next to enable switch, uninstallRegistryAgent handler calling presenter, and adjusted selection logic to clear selection for disabled agents.
Types & Presenter API
src/shared/types/presenters/legacy.presenters.d.ts, src/types/i18n.d.ts
Exposed IConfigPresenter.uninstallAcpRegistryAgent(agentId: string): Promise<void> and added i18n type entries for uninstall strings.
Internationalization
src/renderer/src/i18n/.../settings.json (13 locales)
src/renderer/src/i18n/da-DK/settings.json, en-US, fa-IR, fr-FR, he-IL, ja-JP, ko-KR, pt-BR, ru-RU, zh-CN, zh-HK, zh-TW
Added registryUninstallAction, registryUninstallConfirm, registryUninstallDescription, and registryUninstallFailed strings across locales.
Tests
test/main/presenter/agentRepository.test.ts, test/main/presenter/configPresenter/acpLaunchSpecService.test.ts, test/renderer/components/AcpSettings.test.ts
New unit tests: repository state-reset behavior, service uninstall cleanup and unsafe-path rejection, and renderer uninstall dialog wiring, API call, reload, and toast.

Sequence Diagram(s)

sequenceDiagram
    participant User as User (Renderer)
    participant UI as AcpSettings UI
    participant CP as ConfigPresenter
    participant LS as AcpLaunchSpecService
    participant AR as AgentRepository
    participant FS as File System
    participant DB as SQLite DB

    User->>UI: Click uninstall button
    UI->>UI: Show AlertDialog confirmation
    User->>UI: Confirm uninstall
    UI->>CP: uninstallAcpRegistryAgent(agentId)

    CP->>LS: uninstallRegistryAgent(agent, installState)
    LS->>LS: Resolve paths & validate with isPathWithinRoot
    alt installDir within managed root
        LS->>FS: Remove installDir (recursive)
        FS-->>LS: Deleted
        LS->>FS: Prune empty agents/<agentId> dir
        FS-->>LS: Pruned
    else unsafe installDir
        LS-->>CP: throw Unsafe ACP install directory for uninstall
    end
    LS-->>CP: cleanup complete

    CP->>AR: clearRegistryAcpAgentInstallation(agentId, not_installed)
    AR->>DB: SELECT agent row
    DB-->>AR: Agent record
    AR->>DB: UPDATE enabled=0, state_json.installState=not_installed
    DB-->>AR: Updated
    AR-->>CP: state reset

    CP->>CP: handleAcpAgentsMutated([agentId])
    CP-->>UI: notify completion
    UI->>UI: Reload ACP data and show success toast
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I hopped to click the bold uninstall,

Paths checked safe, no stray install,
Disabled, cleaned, and state set right,
Thirteen tongues now sing goodnight,
A tidy burrow, code in light.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title "fix: acp agent remove" clearly identifies the main change as implementing ACP agent uninstall functionality, which aligns with the comprehensive changeset including backend, frontend, and test implementations.
Linked Issues check ✅ Passed The PR fully addresses issue #1430 by implementing complete ACP agent uninstall functionality: backend operations (AgentRepository, AcpLaunchSpecService, ConfigPresenter), UI uninstall actions in AcpSettings.vue with confirmation dialogs, and comprehensive test coverage for uninstall operations.
Out of Scope Changes check ✅ Passed All changes are directly related to implementing ACP agent uninstall: specifications, backend services, repository methods, renderer UI components, i18n strings, and tests. The store selection logic update is a necessary refinement to support disabled agents post-uninstall.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/acp-agent-remove

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/types/i18n.d.ts (1)

1998-2003: ⚠️ Potential issue | 🟡 Minor

Add missing registryUninstallDescription in ACP i18n type contract.

acp.registryUninstallDescription is present in locale JSON but absent in DefineLocaleMessage.acp, so typed locale coverage is incomplete.

💡 Proposed fix
       registryInstallAction: string
       registryUninstallAction: string
       registryUninstallConfirm: string
+      registryUninstallDescription: string
       registryInstallTitle: string
       registryInstallDescription: string
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/types/i18n.d.ts` around lines 1998 - 2003, The ACP i18n type is missing
the registryUninstallDescription property, causing the typed locale contract
(DefineLocaleMessage.acp) to not match the locale JSON; add a new property named
registryUninstallDescription: string to the ACP section of the
DefineLocaleMessage type (or the interface/type where registryUninstallAction,
registryUninstallConfirm, registryInstallTitle, etc. are declared) so the
TypeScript type covers acp.registryUninstallDescription used in the locales.
🧹 Nitpick comments (2)
test/main/presenter/agentRepository.test.ts (1)

1-2: Mirror the source path in the test tree.

This suite exercises src/main/presenter/agentRepository/index.ts, so it should live under test/main/presenter/agentRepository/index.test.ts instead of flattening the directory here. That keeps source and test navigation one-to-one.

As per coding guidelines, "Vitest test suites should mirror the source structure under test/main/** and test/renderer/**"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/main/presenter/agentRepository.test.ts` around lines 1 - 2, Move this
test to mirror the source directory: rename and relocate
test/main/presenter/agentRepository.test.ts to
test/main/presenter/agentRepository/index.test.ts so the test tree mirrors
src/main/presenter/agentRepository/index.ts; update any relative imports in the
moved file as needed (the test references AgentRepository) so they still resolve
from the new location.
test/renderer/components/AcpSettings.test.ts (1)

1-4: Mirror the component path in the renderer test tree.

The source under test is src/renderer/settings/components/AcpSettings.vue, so this suite should live under test/renderer/settings/components/AcpSettings.test.ts. Right now the settings/ segment is dropped.

As per coding guidelines, "Vitest test suites should mirror the source structure under test/main/** and test/renderer/**"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/renderer/components/AcpSettings.test.ts` around lines 1 - 4, The test
file for AcpSettings.vue is placed under test/renderer/components but must
mirror the source tree (the source component is
settings/components/AcpSettings.vue); move or rename the test so it lives under
the renderer test tree that includes the settings segment (i.e.,
test/renderer/settings/components) and update any imports or test runner
references accordingly so the test file remains named AcpSettings.test.ts and
still imports the AcpSettings component correctly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/specs/acp-agent-uninstall/plan.md`:
- Line 14: Update the plan text that currently mentions using `window.confirm`
to instead describe the AlertDialog-based confirmation flow; replace the phrase
"window.confirm" with a description like "AlertDialog-based confirmation
(AlertDialog component/modal)" and note that it uses the AlertDialog UI flow for
lightweight confirmation so the document matches the implemented `AlertDialog`
component behavior.

In `@src/renderer/settings/components/AcpSettings.vue`:
- Around line 548-550: The copy shown by
t('settings.acp.registryUninstallDescription') is inaccurate for non-binary
installs; update the UI to use distribution-neutral wording or choose the
message based on the agent's distribution type: inspect where the template
renders t('settings.acp.registryUninstallDescription') in AcpSettings.vue and
replace it with either a new generic key (e.g.,
settings.acp.registryUninstallGeneric) or a conditional that picks keys like
settings.acp.registryUninstallBinary vs settings.acp.registryUninstallNpx based
on the agent/distribution property, and ensure the logic aligns with
ConfigPresenter.uninstallAcpRegistryAgent() and
AcpLaunchSpecService.uninstallRegistryAgent() behavior so the displayed text
matches what is actually removed.
- Around line 924-931: The catch block in uninstallRegistryAgent is using the
save-failed toast key (t('settings.acp.saveFailed')) which is incorrect for an
uninstall operation; update the call to handleError to pass
t('settings.acp.registryUninstallFailed') instead, and add the new
settings.acp.registryUninstallFailed string to the locale bundles next to other
uninstall strings so translations exist; locate the uninstallRegistryAgent
function and the catch that calls handleError(error, undefined, t(...)) and the
toast usage to make this change.

In `@src/renderer/src/i18n/ja-JP/settings.json`:
- Around line 1273-1275: Add the missing i18n type for the key
"registryUninstallDescription" by updating the i18n type declarations (in
src/types/i18n.d.ts) to include registryUninstallDescription: string on the
shared locale keys/interface (the same interface where registryUninstallAction
and registryUninstallConfirm are declared) so all locales including ja-JP are
properly typed for this key.

---

Outside diff comments:
In `@src/types/i18n.d.ts`:
- Around line 1998-2003: The ACP i18n type is missing the
registryUninstallDescription property, causing the typed locale contract
(DefineLocaleMessage.acp) to not match the locale JSON; add a new property named
registryUninstallDescription: string to the ACP section of the
DefineLocaleMessage type (or the interface/type where registryUninstallAction,
registryUninstallConfirm, registryInstallTitle, etc. are declared) so the
TypeScript type covers acp.registryUninstallDescription used in the locales.

---

Nitpick comments:
In `@test/main/presenter/agentRepository.test.ts`:
- Around line 1-2: Move this test to mirror the source directory: rename and
relocate test/main/presenter/agentRepository.test.ts to
test/main/presenter/agentRepository/index.test.ts so the test tree mirrors
src/main/presenter/agentRepository/index.ts; update any relative imports in the
moved file as needed (the test references AgentRepository) so they still resolve
from the new location.

In `@test/renderer/components/AcpSettings.test.ts`:
- Around line 1-4: The test file for AcpSettings.vue is placed under
test/renderer/components but must mirror the source tree (the source component
is settings/components/AcpSettings.vue); move or rename the test so it lives
under the renderer test tree that includes the settings segment (i.e.,
test/renderer/settings/components) and update any imports or test runner
references accordingly so the test file remains named AcpSettings.test.ts and
still imports the AcpSettings component correctly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 39d30c0b-bb2d-4b47-93ca-a2f8e083a1da

📥 Commits

Reviewing files that changed from the base of the PR and between 462da74 and 19f4ac3.

📒 Files selected for processing (24)
  • docs/specs/acp-agent-uninstall/plan.md
  • docs/specs/acp-agent-uninstall/spec.md
  • src/main/presenter/agentRepository/index.ts
  • src/main/presenter/configPresenter/acpLaunchSpecService.ts
  • src/main/presenter/configPresenter/index.ts
  • src/renderer/settings/components/AcpSettings.vue
  • src/renderer/src/i18n/da-DK/settings.json
  • src/renderer/src/i18n/en-US/settings.json
  • src/renderer/src/i18n/fa-IR/settings.json
  • src/renderer/src/i18n/fr-FR/settings.json
  • src/renderer/src/i18n/he-IL/settings.json
  • src/renderer/src/i18n/ja-JP/settings.json
  • src/renderer/src/i18n/ko-KR/settings.json
  • src/renderer/src/i18n/pt-BR/settings.json
  • src/renderer/src/i18n/ru-RU/settings.json
  • src/renderer/src/i18n/zh-CN/settings.json
  • src/renderer/src/i18n/zh-HK/settings.json
  • src/renderer/src/i18n/zh-TW/settings.json
  • src/renderer/src/stores/ui/agent.ts
  • src/shared/types/presenters/legacy.presenters.d.ts
  • src/types/i18n.d.ts
  • test/main/presenter/agentRepository.test.ts
  • test/main/presenter/configPresenter/acpLaunchSpecService.test.ts
  • test/renderer/components/AcpSettings.test.ts

Comment on lines +548 to +550
<AlertDialogDescription>
{{ t('settings.acp.registryUninstallDescription') }}
</AlertDialogDescription>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use distribution-neutral uninstall copy.

ConfigPresenter.uninstallAcpRegistryAgent() clears install state for every registry agent, but AcpLaunchSpecService.uninstallRegistryAgent() only removes files for binary distributions. For installed npx/uvx agents this description is inaccurate, because there may be nothing on disk to remove. Please make the copy generic or branch it on distribution type.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/settings/components/AcpSettings.vue` around lines 548 - 550, The
copy shown by t('settings.acp.registryUninstallDescription') is inaccurate for
non-binary installs; update the UI to use distribution-neutral wording or choose
the message based on the agent's distribution type: inspect where the template
renders t('settings.acp.registryUninstallDescription') in AcpSettings.vue and
replace it with either a new generic key (e.g.,
settings.acp.registryUninstallGeneric) or a conditional that picks keys like
settings.acp.registryUninstallBinary vs settings.acp.registryUninstallNpx based
on the agent/distribution property, and ensure the logic aligns with
ConfigPresenter.uninstallAcpRegistryAgent() and
AcpLaunchSpecService.uninstallRegistryAgent() behavior so the displayed text
matches what is actually removed.

Comment on lines +924 to +931
const uninstallRegistryAgent = async (agent: AcpRegistryAgent) => {
setAgentPending(agent.id, true)
try {
await configPresenter.uninstallAcpRegistryAgent(agent.id)
await loadAcpData()
toast({ title: t('settings.acp.deleteSuccess') })
} catch (error) {
handleError(error, undefined, t('settings.acp.saveFailed'))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Don’t reuse the save-failed toast for uninstall errors.

If uninstall fails, this surfaces settings.acp.saveFailed, so the toast talks about saving while the user is performing a delete. Please switch this to an uninstall/delete-specific key and add that key to the locale bundles.

Suggested change
-    handleError(error, undefined, t('settings.acp.saveFailed'))
+    handleError(error, undefined, t('settings.acp.registryUninstallFailed'))

Add settings.acp.registryUninstallFailed alongside the other uninstall strings in the locale files.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const uninstallRegistryAgent = async (agent: AcpRegistryAgent) => {
setAgentPending(agent.id, true)
try {
await configPresenter.uninstallAcpRegistryAgent(agent.id)
await loadAcpData()
toast({ title: t('settings.acp.deleteSuccess') })
} catch (error) {
handleError(error, undefined, t('settings.acp.saveFailed'))
const uninstallRegistryAgent = async (agent: AcpRegistryAgent) => {
setAgentPending(agent.id, true)
try {
await configPresenter.uninstallAcpRegistryAgent(agent.id)
await loadAcpData()
toast({ title: t('settings.acp.deleteSuccess') })
} catch (error) {
handleError(error, undefined, t('settings.acp.registryUninstallFailed'))
}
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/settings/components/AcpSettings.vue` around lines 924 - 931, The
catch block in uninstallRegistryAgent is using the save-failed toast key
(t('settings.acp.saveFailed')) which is incorrect for an uninstall operation;
update the call to handleError to pass t('settings.acp.registryUninstallFailed')
instead, and add the new settings.acp.registryUninstallFailed string to the
locale bundles next to other uninstall strings so translations exist; locate the
uninstallRegistryAgent function and the catch that calls handleError(error,
undefined, t(...)) and the toast usage to make this change.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
src/renderer/settings/components/AcpSettings.vue (1)

951-960: Clear agent reference after uninstall to prevent stale state.

The agent reference is cleared only after uninstallRegistryAgent completes. If the uninstall fails, uninstallDialog.agent remains set even though the dialog is closed. Consider clearing it in a finally block or immediately after closing the dialog.

♻️ Suggested improvement
 const confirmRegistryAgentUninstallAction = async () => {
   const agent = uninstallDialog.agent
   if (!agent) {
     return
   }

   uninstallDialog.open = false
-  await uninstallRegistryAgent(agent)
   uninstallDialog.agent = null
+  await uninstallRegistryAgent(agent)
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/settings/components/AcpSettings.vue` around lines 951 - 960, The
handler confirmRegistryAgentUninstallAction currently clears
uninstallDialog.agent only after awaiting uninstallRegistryAgent, which can
leave a stale agent if the uninstall fails; change it to clear the reference
regardless by moving uninstallDialog.agent = null into a finally block (or set
it immediately after closing the dialog before awaiting) so that
uninstallDialog.agent is always reset even if uninstallRegistryAgent throws;
update the function confirmRegistryAgentUninstallAction to reference
uninstallDialog.agent, call uninstallRegistryAgent(agent), and ensure
uninstallDialog.agent = null runs in finally (or immediately after
uninstallDialog.open = false).
docs/specs/acp-agent-uninstall/plan.md (1)

19-21: Optional: Vary sentence structure in test section.

Static analysis flagged three successive sentences starting with "Cover". Consider minor rewording for readability.

📝 Optional rewording
 ## Tests

-- Cover binary uninstall cleanup and safe path handling in `AcpLaunchSpecService`.
-- Cover repository/state reset for registry agents.
-- Cover renderer uninstall CTA wiring in `AcpSettings.vue`.
+- Binary uninstall cleanup and safe path handling in `AcpLaunchSpecService`.
+- Repository/state reset for registry agents.
+- Renderer uninstall CTA wiring in `AcpSettings.vue`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/specs/acp-agent-uninstall/plan.md` around lines 19 - 21, The three
successive bullet points beginning with "Cover" reduce readability; rephrase one
or two to vary sentence structure — e.g., change the first to "Ensure binary
uninstall cleanup and safe path handling are implemented in
AcpLaunchSpecService", the second to "Reset repository/state for registry agents
where applicable", and the third to "Wire the renderer uninstall CTA in
AcpSettings.vue". Update the lines referencing AcpLaunchSpecService and
AcpSettings.vue accordingly to use the new varied phrasing.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@docs/specs/acp-agent-uninstall/plan.md`:
- Around line 19-21: The three successive bullet points beginning with "Cover"
reduce readability; rephrase one or two to vary sentence structure — e.g.,
change the first to "Ensure binary uninstall cleanup and safe path handling are
implemented in AcpLaunchSpecService", the second to "Reset repository/state for
registry agents where applicable", and the third to "Wire the renderer uninstall
CTA in AcpSettings.vue". Update the lines referencing AcpLaunchSpecService and
AcpSettings.vue accordingly to use the new varied phrasing.

In `@src/renderer/settings/components/AcpSettings.vue`:
- Around line 951-960: The handler confirmRegistryAgentUninstallAction currently
clears uninstallDialog.agent only after awaiting uninstallRegistryAgent, which
can leave a stale agent if the uninstall fails; change it to clear the reference
regardless by moving uninstallDialog.agent = null into a finally block (or set
it immediately after closing the dialog before awaiting) so that
uninstallDialog.agent is always reset even if uninstallRegistryAgent throws;
update the function confirmRegistryAgentUninstallAction to reference
uninstallDialog.agent, call uninstallRegistryAgent(agent), and ensure
uninstallDialog.agent = null runs in finally (or immediately after
uninstallDialog.open = false).

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: bce1f7ae-d180-43be-a1b3-da24f166e7d5

📥 Commits

Reviewing files that changed from the base of the PR and between 19f4ac3 and 2af8a20.

📒 Files selected for processing (15)
  • docs/specs/acp-agent-uninstall/plan.md
  • src/renderer/settings/components/AcpSettings.vue
  • src/renderer/src/i18n/da-DK/settings.json
  • src/renderer/src/i18n/en-US/settings.json
  • src/renderer/src/i18n/fa-IR/settings.json
  • src/renderer/src/i18n/fr-FR/settings.json
  • src/renderer/src/i18n/he-IL/settings.json
  • src/renderer/src/i18n/ja-JP/settings.json
  • src/renderer/src/i18n/ko-KR/settings.json
  • src/renderer/src/i18n/pt-BR/settings.json
  • src/renderer/src/i18n/ru-RU/settings.json
  • src/renderer/src/i18n/zh-CN/settings.json
  • src/renderer/src/i18n/zh-HK/settings.json
  • src/renderer/src/i18n/zh-TW/settings.json
  • src/types/i18n.d.ts
✅ Files skipped from review due to trivial changes (11)
  • src/renderer/src/i18n/da-DK/settings.json
  • src/renderer/src/i18n/en-US/settings.json
  • src/renderer/src/i18n/ru-RU/settings.json
  • src/renderer/src/i18n/ko-KR/settings.json
  • src/renderer/src/i18n/he-IL/settings.json
  • src/renderer/src/i18n/zh-CN/settings.json
  • src/renderer/src/i18n/fr-FR/settings.json
  • src/renderer/src/i18n/fa-IR/settings.json
  • src/renderer/src/i18n/zh-HK/settings.json
  • src/renderer/src/i18n/zh-TW/settings.json
  • src/renderer/src/i18n/ja-JP/settings.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/renderer/src/i18n/pt-BR/settings.json

@zerob13 zerob13 merged commit 7f1e1b1 into dev Apr 4, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

【bug】 acp agent在列表安装后卸载不了 v1.0.1

1 participant