Skip to content

Update easydict extension - #30706

Merged
raycastbot merged 9 commits into
raycast:mainfrom
maxchang3:ext/easydict
Sep 9, 2026
Merged

Update easydict extension#30706
raycastbot merged 9 commits into
raycast:mainfrom
maxchang3:ext/easydict

Conversation

@maxchang3

@maxchang3 maxchang3 commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Description

⚠️ Behavioral Changes

🆕 Custom AI Providers

  • Connect LLMs through Raycast AI or any OpenAI-compatible endpoint for translation and word lookup.
  • Existing settings migrate automatically. Open Search Word or Manage Providers to convert configured OpenAI and Gemini settings into ordinary AI providers, preserving connection settings, enablement, and ordering. Previously imported providers keep their edits; previously retired providers stay removed.
  • Manage AI providers in Manage Providers. Old Extension Settings remain available as import sources, but no longer run separate providers. Editing, disabling, or deleting an AI provider does not restore an old service. Use Add from Legacy OpenAI/Gemini Settings… to create another copy, initially disabled.
  • Provider ordering is now managed in Manage Providers. Built-in and AI providers share one order and can be moved together with the Move Up/Move Down actions or Cmd+Shift+Up/Down on macOS and Ctrl+Shift+Up/Down on Windows. The Legacy Service List Order preference only initializes this order until it is saved.

✨ New Features

AI-Generated Dictionary Entries

  • For each provider, choose Plain Translation or AI-Generated Dictionary Entry in Word & Term Results.
  • Dictionary mode applies to words and terms; other input remains plain translation. New or connection-related provider changes offer Test & Save by default, with Save Without Testing still available. JSON output defaults follow provider presets. Explicitly unsupported native JSON switches the provider to prompt-based output and shows a notice; malformed output is retried once without changing the setting. Dictionary generation may take longer.

Chinese Stroke Order

  • Use Show Stroke Order from live or saved translation results to view stroke-order diagrams for Chinese characters.

Screencast

Custom AI Providers Chinese Stroke Order

Checklist

@raycastbot raycastbot added extension fix / improvement Label for PRs with extension's fix improvements extension: easydict Issues related to the easydict extension platform: macOS platform: Windows OP is contributor The OP of the PR is a contributor of the extension labels Sep 2, 2026
@raycastbot

Copy link
Copy Markdown
Collaborator

Thank you for your contribution! 🎉

🔔 @tisfeng @ViGeng @LitoMore you might want to have a look.

You can use this guide to learn how to check out the Pull Request locally in order to test it.

📋 Quick checkout commands
BRANCH="ext/easydict"
FORK_URL="https://github.com/maxchang3/raycast-extensions.git"
EXTENSION_NAME="easydict"
REPO_NAME="raycast-extensions"

git clone -n --depth=1 --filter=tree:0 -b $BRANCH $FORK_URL
cd $REPO_NAME
git sparse-checkout set --no-cone "extensions/$EXTENSION_NAME"
git checkout
cd "extensions/$EXTENSION_NAME"
npm install && npm run dev

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 15 business days.

@maxchang3
maxchang3 marked this pull request as draft September 2, 2026 06:08
@greptile-apps

greptile-apps Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR substantially updates Easydict with configurable AI providers, AI-generated dictionary entries, unified provider ordering and migration, and Chinese stroke-order views.

  • Adds custom OpenAI-compatible and Raycast AI provider configuration, discovery, testing, persistence, and runtime integrations.
  • Adds structured AI dictionary generation with parsing, retries, and fallback behavior.
  • Adds provider management, ordering, legacy-setting migration, and expanded automated coverage.
  • Adds stroke-order rendering and access from live and saved translation results.
  • Updates extension metadata, documentation, assets, dependencies, and changelog.

Confidence Score: 4/5

The implementation appears functionally safe, but the explicit changelog placeholder requirement must be restored before merging.

Both previous concurrency findings were manually resolved and are not outstanding. The only remaining issue is the hard-coded changelog date, which violates the repository’s merge-date placeholder requirement.

Files Needing Attention: extensions/easydict/CHANGELOG.md

Important Files Changed

Filename Overview
extensions/easydict/CHANGELOG.md Documents the release features, but the latest revision hard-codes the merge date instead of retaining the required placeholder.
extensions/easydict/src/ai-providers/repository.ts Implements serialized AI-provider persistence and migration state management; the previously reported concurrent-update finding is resolved.
extensions/easydict/src/components/pages/ProviderManagementPage.tsx Implements unified provider management and serialized reorder actions; the previously reported rapid-reorder finding is resolved.
extensions/easydict/src/hooks/useQueryEngine.ts Integrates AI-provider profiles, migration, provider ordering, and dictionary-mode query execution.
extensions/easydict/src/components/pages/StrokeOrderPage.tsx Adds the Chinese stroke-order diagram view and its navigation behavior.
Prompt To Fix All With AI
### Issue 1
extensions/easydict/CHANGELOG.md:3
**Hard-Coded Changelog Date**

This heading replaces the required `{PR_MERGE_DATE}` template with `2026-09-09`. The repository requires changelog headings to retain that placeholder so merge automation can populate the date, and this requirement must be satisfied before merging.

```suggestion
## [v3.2.0] - {PR_MERGE_DATE}
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (8): Last reviewed commit: "Update CHANGELOG.md" | Re-trigger Greptile

@socket-security

socket-security Bot commented Sep 2, 2026

Copy link
Copy Markdown

@maxchang3
maxchang3 marked this pull request as ready for review September 9, 2026 02:42
Comment thread extensions/easydict/src/ai-providers/repository.ts Outdated
Comment thread extensions/easydict/src/components/pages/ProviderManagementPage.tsx Outdated
@pernielsentikaer pernielsentikaer self-assigned this Sep 9, 2026

@pernielsentikaer pernielsentikaer left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @maxchang3 👋

Thanks for the provider-management improvements 💪

The configuration-reset action in extensions/easydict/src/components/pages/ProviderManagementPage.tsx currently calls controller.update, which rejects invalid or unsupported saved data before the reset callback runs. This prevents recovery from the error screen.

Could you use saveAIProviderState for the confirmed reset, then reload the controller? For example, with the corresponding imports:

try {
  await saveAIProviderState({
    ...createEmptyAIProviderState(),
    migratedLegacyProviders: [...LEGACY_AI_PROVIDER_NAMES],
  });
  await controller.revalidate();
} catch (error) {
  await showFailureToast(error, {
    title: "Failed to Reset AI Provider Configuration",
  });
}

Please add regression coverage for malformed JSON, invalid configuration shapes, and unsupported versions.


I’ll convert this PR into a draft after submitting this review. Please press Ready for review when it’s ready and we’ll have a look 😊

@pernielsentikaer
pernielsentikaer marked this pull request as draft September 9, 2026 10:28
@maxchang3

Copy link
Copy Markdown
Contributor Author

@pernielsentikaer

Thanks for catching this! Fixed in b61f48a.

Reset now uses a dedicated resetAIProviderConfiguration path and revalidates the controller afterward, with failures surfaced via showFailureToast.

I also added regression tests for malformed JSON, invalid v1/v2 configuration shapes, and unsupported versions, verifying that invalid data is preserved until reset is confirmed and only then replaced with an empty configuration.

@maxchang3
maxchang3 marked this pull request as ready for review September 9, 2026 12:02

@pernielsentikaer pernielsentikaer left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Looks good to me, approved 🔥

@raycastbot
raycastbot merged commit b69329f into raycast:main Sep 9, 2026
1 check passed
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Published to the Raycast Store:
https://raycast.com/isfeng/easydict

@raycastbot

Copy link
Copy Markdown
Collaborator

🎉 🎉 🎉

We've rewarded your Raycast account with some credits. You will soon be able to exchange them for some swag.

@@ -1,11 +1,34 @@
# `Easydict` Changelog

## [v3.2.0] - 2026-09-09

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.

P2 Hard-Coded Changelog Date

This heading replaces the required {PR_MERGE_DATE} template with 2026-09-09. The repository requires changelog headings to retain that placeholder so merge automation can populate the date, and this requirement must be satisfied before merging.

Suggested change
## [v3.2.0] - 2026-09-09
## [v3.2.0] - {PR_MERGE_DATE}

Rule Used: What: Changelog entries must use {PR_MERGE_DATE}... (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/easydict/CHANGELOG.md
Line: 3

Comment:
**Hard-Coded Changelog Date**

This heading replaces the required `{PR_MERGE_DATE}` template with `2026-09-09`. The repository requires changelog headings to retain that placeholder so merge automation can populate the date, and this requirement must be satisfied before merging.

```suggestion
## [v3.2.0] - {PR_MERGE_DATE}
```

**Rule Used:** What: Changelog entries must use `{PR_MERGE_DATE}`... ([source](https://app.greptile.com/raycast/-/custom-context?memory=c2214c11-df56-490a-b1c0-09a385df481a))

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

raycastbot added a commit that referenced this pull request Sep 10, 2026
* Update launchdarkly extension

- Add Windows support to LaunchDarkly extension
- [Color Picker] Fix grey color swatches for some color formats (#30936)
- Update twitter extension (#30930)
- Update chatgpt extension (#30945)
- Update CODEOWNERs (242403b)
- Add Windows support for Mozilla Firefox extension (#30285)
- Update CODEOWNERs (5888116)
- Update powertoys-tool-runner extension (#30937)
- Update CODEOWNERs (988e550)
- Capso: Initial release (#30596)
- Update easydict extension (#30706)
- Update CODEOWNERs (1b57711)
- Update github extension (#30931)
- [Clockify] Honor the project\'s billable default when creating time entries (#30927)
- Add cached usage on open and configurable background refresh (#30925)
- Update CODEOWNERs (3e513c4)
- Add storage-benchmark extension (#30563)
- Update CODEOWNERs (8b29f51)
- [Day One] Support renamed CLI command (#30926)
- Agent Usage: Antigravity quota when the app is closed (#30901)
- Update CODEOWNERs (a6da092)
- Add dated-folder extension (#30600)
- [Google Cloud CLI] Add Cloud SQL (#30728)
- Update CODEOWNERs (d2dc991)
- Font Search: fix font preview in dark mode (#30923)
- Clockify: fix requests being sent to an undefined workspace (#30894)
- [Telegram] Fix bot messages showing as Unknown (migrate archived GramJS to teleproto) (#30836)
- Agent Usage: apply saved provider order in the menu bar (#30902)
- [Statamic Docs] Fix crash on launch in newer Raycast versions (#30921)
- [UpNote] Fix special characters breaking note, notebook and tag actions (#30920)
- Update CODEOWNERs (afdcfd0)
- [Safari] Add New Window command (#30909)
- Update CODEOWNERs (075336a)
- Update twitter extension (#30905)
- Update CODEOWNERs (2e9c66f)
- Update speedtest extension (#30880)
- Update Sunsama extension (#30899)
- fix(browser-tabs): keep maximized windows maximized on Windows (#30908)
- Update attio extension (#30910)
- Downloads Manager: align shortcuts with Search Screenshots (#30912)
- Update CODEOWNERs (97cd688)
- Update attio extension (#30881)
- Update CODEOWNERs (81d3f54)
- Update weather extension (#30897)
- [Telegram] Fix blank photo previews and Unknown message senders (#30835)
- Add Xerox status OIDs (#30860)
- Add Hermoso to Model Context Protocol Registry (#30907)
- Fix Orc Pictures Windows copy and Store icon (#30893)
- Update codex extension (#30898)
- Update Window-Sizer extension (#30900)
- Update CODEOWNERs (9ce2c3f)
- Transfer OpenQR extension ownership to the OpenQR organisation (#30654)
- Docs: update for the new API release
- Update app-updates extension (#30868)
- Update CODEOWNERs (98c565e)
- Add ui-component-search extension (#30485)
- Update CODEOWNERs (e5dfcbb)
- Agent Usage: add OpenRouter credit balance (#30855)
- Update launchdarkly extension (#30882)
- Update CODEOWNERs (36ad63c)
- Add load-bearing-reply extension (#30445)
- Update brew extension (#30852)
- Update CODEOWNERs (17dd4b2)
- Update in the time zone extension (#30888)
- Update CODEOWNERs (8bba2b9)
- Add Orc Pictures extension (#30870)
- docs: correct eight Keyboard.Shortcut.Common bindings against the shipped runtime (#30879)
- Update CODEOWNERs (bbdee3a)
- Clockify: fix project dropdown resetting selection and timer failing to start (#30877)
- HackMD: Add workspace and profile browser actions (#30876)
- launchdarkly: refresh store screenshots for the new UI
- launchdarkly: final review fixes
- launchdarkly: mock server covers projects, 404s and browser pages
- launchdarkly: make Switch Project an action instead of a command
- launchdarkly: update README and changelog for the new features
- launchdarkly: extend mock server for new endpoints
- launchdarkly: add Recent Changes and Switch Project commands
- launchdarkly: rebuild flag list and details views
- launchdarkly: add API client layer, typed endpoints and data hooks
- launchdarkly: upgrade dependencies and migrate to ESLint flat config
- launchdarkly: drop unsupported expand param and stale refetch
- launchdarkly: fix targeting display

* launchdarkly: declare Windows variants for custom shortcuts

* Update extensions/launchdarkly/README.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update CHANGELOG.md

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: raycastbot <bot@raycast.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extension: easydict Issues related to the easydict extension extension fix / improvement Label for PRs with extension's fix improvements OP is contributor The OP of the PR is a contributor of the extension platform: macOS platform: Windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants