DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

ADkun /

ADkun/dsh-anysearch-key-mgm

Verified

DSH 设置里多一页「AnySearch KEY」:登记多个 AnySearch API KEY(带备注),点一下就把 anysearch 插件切到那个 KEY —— 写 credentials 的 ANYSEARCH_API_KEY,逐次解析,切换立即生效、无需重启 dsh。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@d9030fdb

dsh-anysearch-key-mgm

DSH 设置里多一页 AnySearch KEY:登记多个 AnySearch API KEY(带备注),点一下就把它写进凭据 ANYSEARCH_API_KEY —— anysearch 插件每次操作都重新解析凭据,所以切换立即生效,不用重启 dsh。

给 @anysearch/anysearch-dsh 配的一个小面板: 换 KEY 不用改 .credentials.yaml、不用重启、也不会把完整 KEY 暴露在浏览器里。

装

git clone https://github.com/ADkun/dsh-anysearch-key-mgm.git D:/dsh/plugins/dsh-anysearch-key-mgm
dsh plugin --profile web add "link:D:/dsh/plugins/dsh-anysearch-key-mgm"

dsh plugin add 会把包名追加进 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles, 并链接 node_modules。装完刷新一次浏览器(设置页的槽位是启动时装配的),已运行的 dsh web 会热重载该插件。

用

设置 → AnySearch KEY:

  • 当前生效:显示凭据名、掩码值、来源(file = 本机凭据文件,env = 环境变量兜底)。
  • 收入当前生效的 KEY:把凭据里现在这条收进名单,之后就能在它和别的 KEY 之间来回切。
  • 添加 KEY:备注 + KEY(输入框是 password 类型,落盘后 HTTP 面只回掩码)。
  • 切换到此 KEY:写 credentials.set(ANYSEARCH_API_KEY, 选中值),anysearch 下一次调用就用它。
  • 删除:删掉生效中的那条会自动落到名单第一条;名单空了就 credentials.unset(),让环境变量重新接管。

数据放哪

  • 名单:${DSH_PROFILE_DIR || DSH_HOME || ~/.dsh}/anysearch-keys.json,0600,原子替换(tmp + rename)。
  • 生效值:由 DSH 凭据服务管,落在 ~/.dsh/.credentials.yaml 的 ANYSEARCH_API_KEY。
  • 完整 KEY 永不出 HTTP 面:GET /api/anysearch-key-mgm/keys 只回 as_sk_…4572 这种掩码。

配置

cordis.patch.yml 里只有一个键:

- insert:
    - id: dsh-anysearch-key-mgm
      name: dsh-anysearch-key-mgm
      config:
        credentialRef: ANYSEARCH_API_KEY

credentialRef 是「被管理的那个凭据名」。改它之前先确认 anysearch 行的 apiKeyEnv(默认 ANYSEARCH_API_KEY,见 @anysearch/anysearch-dsh 的 lib/index.js)。

实现要点

  • 宿主 index.js:ctx.inject(['webServer','credentials'], ...),webServer.register({kind:'prefix', path:'/api/anysearch-key-mgm'})。请求先过同源栅栏(Host 必须回环、sec-fetch-site: cross-site 拒、 origin/referer 的 scheme/host/port 必须与 Host 一致),再按 POST body.action 分派 add | activate | remove | rename | import。
  • 客户端 client.js:手写 window.__ModuleLoader__.load({id, factory}) bundle,inject = ['slots','locale'], 注册 settings.section(id: 'anysearch-key-mgm', order: 39,紧跟 adg-settings 的 38)。 除 shell 已提供的 react 外零依赖,颜色全部走 --dsw-alias-* 主题变量。
  • 没有 agent 工具、没有后台任务、不监听文件。

自测

node test/host.smoke.mjs     # 宿主:假 credentials + 假 webServer,11 条用例
node test/client.smoke.mjs   # 客户端:stub react/locale/slots,校验注册与字典

两个脚本都只碰临时目录(os.tmpdir()),不读写真实凭据与真实名单文件。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit d9030fdbdff8

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout