From 89f0127da60b745e7871034bd6e406eef3b36af1 Mon Sep 17 00:00:00 2001 From: Zhicheng Han <43314240+hanzckernel@users.noreply.github.com> Date: Sun, 10 May 2026 13:50:39 +0200 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=AA=E8=AF=BB=20Hermes?= =?UTF-8?q?=20=E6=8F=92=E4=BB=B6=E9=A1=B5=20(#592)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add read-only plugins page * fix: align plugins page i18n and header --- packages/client/src/api/hermes/plugins.ts | 37 ++ .../src/components/layout/AppSidebar.vue | 7 + packages/client/src/i18n/locales/de.ts | 69 +++ packages/client/src/i18n/locales/en.ts | 69 +++ packages/client/src/i18n/locales/es.ts | 69 +++ packages/client/src/i18n/locales/fr.ts | 69 +++ packages/client/src/i18n/locales/ja.ts | 69 +++ packages/client/src/i18n/locales/ko.ts | 69 +++ packages/client/src/i18n/locales/pt.ts | 69 +++ packages/client/src/i18n/locales/zh.ts | 69 +++ packages/client/src/router/index.ts | 5 + .../client/src/views/hermes/PluginsView.vue | 395 ++++++++++++++++++ .../server/src/controllers/hermes/plugins.ts | 10 + packages/server/src/routes/hermes/plugins.ts | 6 + packages/server/src/routes/index.ts | 2 + .../server/src/services/hermes/plugins.ts | 301 +++++++++++++ tests/server/plugins-routes.test.ts | 34 ++ 17 files changed, 1349 insertions(+) create mode 100644 packages/client/src/api/hermes/plugins.ts create mode 100644 packages/client/src/views/hermes/PluginsView.vue create mode 100644 packages/server/src/controllers/hermes/plugins.ts create mode 100644 packages/server/src/routes/hermes/plugins.ts create mode 100644 packages/server/src/services/hermes/plugins.ts create mode 100644 tests/server/plugins-routes.test.ts diff --git a/packages/client/src/api/hermes/plugins.ts b/packages/client/src/api/hermes/plugins.ts new file mode 100644 index 0000000..5cee32d --- /dev/null +++ b/packages/client/src/api/hermes/plugins.ts @@ -0,0 +1,37 @@ +import { request } from '../client' + +export type PluginConfigStatus = 'enabled' | 'disabled' | 'not-enabled' | 'auto' | 'provider-managed' +export type PluginEffectiveStatus = 'enabled' | 'disabled' | 'inactive' | 'auto-active' | 'provider-managed' + +export interface HermesPluginInfo { + key: string + name: string + kind: string + source: string + configStatus: PluginConfigStatus | string + effectiveStatus: PluginEffectiveStatus | string + version: string + description: string + author: string + path: string + providesTools: string[] + providesHooks: string[] + requiresEnv: Array> +} + +export interface HermesPluginsMetadata { + hermesAgentRoot: string + pythonExecutable: string + cwd: string + projectPluginsEnabled: boolean +} + +export interface HermesPluginsResponse { + plugins: HermesPluginInfo[] + warnings: string[] + metadata: HermesPluginsMetadata +} + +export async function fetchPlugins(): Promise { + return request('/api/hermes/plugins') +} diff --git a/packages/client/src/components/layout/AppSidebar.vue b/packages/client/src/components/layout/AppSidebar.vue index f48c61b..dc031b4 100644 --- a/packages/client/src/components/layout/AppSidebar.vue +++ b/packages/client/src/components/layout/AppSidebar.vue @@ -157,6 +157,13 @@ function openChangelog() { {{ t("sidebar.skills") }} +