| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /** Read-only projection of the current Cordis Loader plugin entries. */
- import type { Context, FiberState } from '@deepseek-ai/cordis'
- import type {} from '@deepseek-ai/cordis-plugin-loader'
- import { TypertRemoteService, Remote } from '@deepseek-ai/dsh-typert-protocol'
- // Typert-generated ./typert and ./remote artifacts import Zod at runtime.
- import type {} from 'zod'
- import type {
- PluginEntryId,
- PluginFiberPhase,
- PluginInventoryEntry,
- PluginInventorySnapshot,
- } from './types.ts'
- export type * from './types.ts'
- /** Brand an existing Loader-tree entry id at the owning boundary. */
- function pluginEntryId(value: string): PluginEntryId {
- return value as PluginEntryId
- }
- /** Runtime mirror: FiberState is a cross-package const enum. */
- const FIBER_STATE = {
- PENDING: 0 as FiberState.PENDING,
- LOADING: 1 as FiberState.LOADING,
- ACTIVE: 2 as FiberState.ACTIVE,
- FAILED: 3 as FiberState.FAILED,
- DISPOSED: 4 as FiberState.DISPOSED,
- UNLOADING: 5 as FiberState.UNLOADING,
- } as const
- /** Complete public projection of Cordis Fiber states. */
- const FIBER_PHASE = {
- [FIBER_STATE.PENDING]: 'pending',
- [FIBER_STATE.LOADING]: 'loading',
- [FIBER_STATE.ACTIVE]: 'active',
- [FIBER_STATE.FAILED]: 'failed',
- [FIBER_STATE.DISPOSED]: null,
- [FIBER_STATE.UNLOADING]: 'unloading',
- } as const satisfies Record<FiberState, PluginFiberPhase>
- /** Remote-only service exposing the Loader's current non-group entry state. */
- export class PluginInventoryGateway extends TypertRemoteService {
- static inject = ['loader']
- constructor(ctx: Context) {
- super(ctx, 'pluginInventory')
- }
- /**
- * Read the Loader directly on every call. Cordis's internal plugin/status
- * events already maintain Entry.fiber and Fiber.state, so a second cache
- * would only add another lifecycle truth to keep synchronized.
- * @returns Current non-group Loader entries in Loader order.
- */
- @Remote('list')
- list(): PluginInventorySnapshot {
- const entries: PluginInventoryEntry[] = []
- for (const entry of this.ctx.loader.entries()) {
- if (entry.options.group) continue
- entries.push({
- entryId: pluginEntryId(entry.id),
- moduleName: entry.options.name,
- enabled: !entry.disabled,
- fiberPhase: entry.fiber === undefined ? null : FIBER_PHASE[entry.fiber.state],
- })
- }
- return { entries }
- }
- }
- export default PluginInventoryGateway
|