Add Netx Ops Plugins settings card for URL and token.

Ship the browser half so Settings → Plugins can configure apiUrl/lang/python and NETX_API_TOKEN without OS env vars.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-09-04 22:16:14 +08:00
parent 45922ffd29
commit fd1a86ec2f
14 changed files with 1492 additions and 57 deletions

50
src/client/index.ts Normal file
View file

@ -0,0 +1,50 @@
/**
* Browser half — Settings → Plugins → Netx Ops card.
*/
import type { Context as ClientContext } from '@deepseek-ai/cordis'
import type {} from '@deepseek-ai/dsh-client-locale/client'
import type {} from '@deepseek-ai/dsh-client-ui-settings/client'
import type {} from '@deepseek-ai/dsh-client-ui-renderer/client'
import type {} from '@deepseek-ai/dsh-api-remotes/client'
import type {} from '@deepseek-ai/dsh-client-ui-settings-plugins/client'
import { NetxopsCard } from './NetxopsCard.tsx'
import { NETXOPS_NS, NetxopsCardController } from './controller.ts'
import { en, zh, type NetxopsLocaleKey } from './locales.ts'
declare module '@deepseek-ai/dsh-client-ui-slots' {
interface LocaleNamespaceMap {
'settings.netxops': NetxopsLocaleKey
}
}
const LOCALE_NS = 'settings.netxops'
export const inject = [
'slots',
'locale',
'remote',
'remote.credentials',
'settingsScope',
]
export function apply(ctx: ClientContext): void {
ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'netxops: locales')
const card = new NetxopsCardController(
ctx.settingsScope.bind({ namespace: NETXOPS_NS }),
ctx,
)
ctx.effect(
() => ctx.remote.$on('credentials/reference-updated', (ref) => { card.refreshCredential(ref) }),
'netxops: credential invalidations',
)
ctx.slots.inject('settings.plugin.item', () => ctx.slots.register({
name: 'settings.plugin.item',
key: NETXOPS_NS,
locale: LOCALE_NS,
inject: () => card.inject(),
}, NetxopsCard))
}