@deepseek-ai/dsh-host-plugin-inventory 0.0.1-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, DeepSeek
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,6 @@
1
+ # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
2
+ # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
+ # after editing either side, bring the other along and re-record with:
4
+ # pnpm run verify-translation-pairing --write packages/host/plugin-inventory/README.md
5
+ README.md: a91c02df5e7a57db89c9a63af6c4355573b843da
6
+ README.zh.md: 261db0b92cf025606b7fc18c5754d54f8cd34e48
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # @deepseek-ai/dsh-host-plugin-inventory
2
+
3
+ English | [中文](README.zh.md)
4
+
5
+ Read-only Host projection of the current Cordis Loader tree. `PluginInventoryGateway` registers the `pluginInventory` service and publishes one generated direct Remote, `pluginInventory/list`. Every call reads `ctx.loader.entries()` directly, skips structural group rows, and returns the remaining entries in Loader order with only their Loader entry id, module specifier, effective enablement, and current root Fiber phase.
6
+
7
+ The phase is `pending`, `loading`, `active`, `failed`, or `unloading`; it is `null` when the entry has no live root Fiber. The snapshot is intentionally point-in-time: Loader remains the sole lifecycle authority, while this package owns no cache, history, provenance model, event stream, or mutation path. Its public payload types live under `./types`, and Typert generates the Host and Client Remote artifacts exposed by `./typert` and `./remote`.
8
+
9
+ The service is Remote-only and deliberately declares no same-process Cordis `Context` merge. Client packages consume it through the explicit [`api-remotes`](../../api/remotes/README.md) assembly rather than importing the Host implementation.
10
+
11
+ ## Model Experience
12
+
13
+ None, as this Host-only inventory projection registers no prompt, tool, message, or provider request.
14
+
15
+ #### KV Cache effect
16
+
17
+ None; this package never assembles model input.
18
+
19
+ ## Known Limitations and Deferred Work
20
+
21
+ - **Point-in-time state only** — the result contains no durable failure history or subscription; a missing root Fiber is reported as `null`, regardless of why no live root exists.
22
+ - **No provenance or mutation** — the service does not identify which bundle, profile, or override introduced an entry, and it cannot enable, disable, add, or remove plugins.
package/README.zh.md ADDED
@@ -0,0 +1,22 @@
1
+ # @deepseek-ai/dsh-host-plugin-inventory
2
+
3
+ [English](README.md) | 中文
4
+
5
+ 当前 Cordis Loader 树的只读 Host 投影。`PluginInventoryGateway` 注册 `pluginInventory` 服务,并发布一个由 Typert 生成的直接 Remote:`pluginInventory/list`。每次调用都直接读取 `ctx.loader.entries()`,跳过结构性的 group 行,再按 Loader 顺序返回其余条目,并且只包含 Loader 条目 id、模块标识、有效启用状态与当前根 Fiber 阶段。
6
+
7
+ 阶段为 `pending`、`loading`、`active`、`failed` 或 `unloading`;条目没有存活的根 Fiber 时则为 `null`。该快照刻意只表示调用当下:Loader 仍是唯一的生命周期权威,本包不拥有缓存、历史、来源模型、事件流或修改路径。公开 payload 类型位于 `./types`,Typert 生成由 `./typert` 与 `./remote` 导出的 Host 和 Client Remote 产物。
8
+
9
+ 该服务仅供 Remote 使用,刻意不声明同进程 Cordis `Context` merge。Client 包通过显式的 [`api-remotes`](../../api/remotes/README.md) 组合消费它,而不导入 Host 实现。
10
+
11
+ ## 模型体验
12
+
13
+ 无,因为这个仅限 Host 的清单投影不注册提示词、工具、消息或提供方请求。
14
+
15
+ #### KV Cache 影响
16
+
17
+ 无;本包从不组装模型输入。
18
+
19
+ ## 已知限制与暂缓事项
20
+
21
+ - **仅表示调用当下** —— 结果不包含持久的失败历史或订阅;只要不存在存活的根 Fiber,就会报告 `null`,而不区分其原因。
22
+ - **无来源与修改能力** —— 服务不识别条目由哪个 bundle、profile 或 override 引入,也不能启用、停用、添加或移除插件。
package/lib/index.js ADDED
@@ -0,0 +1,118 @@
1
+ import { Remote, TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
2
+ //#region lib/types/index.js
3
+ /** Read-only projection of the current Cordis Loader plugin entries. */
4
+ var __runInitializers = function(thisArg, initializers, value) {
5
+ var useValue = arguments.length > 2;
6
+ for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
7
+ return useValue ? value : void 0;
8
+ };
9
+ var __esDecorate = function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
10
+ function accept(f) {
11
+ if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected");
12
+ return f;
13
+ }
14
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
15
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
16
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
17
+ var _, done = false;
18
+ for (var i = decorators.length - 1; i >= 0; i--) {
19
+ var context = {};
20
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
21
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
22
+ context.addInitializer = function(f) {
23
+ if (done) throw new TypeError("Cannot add initializers after decoration has completed");
24
+ extraInitializers.push(accept(f || null));
25
+ };
26
+ var result = (0, decorators[i])(kind === "accessor" ? {
27
+ get: descriptor.get,
28
+ set: descriptor.set
29
+ } : descriptor[key], context);
30
+ if (kind === "accessor") {
31
+ if (result === void 0) continue;
32
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
33
+ if (_ = accept(result.get)) descriptor.get = _;
34
+ if (_ = accept(result.set)) descriptor.set = _;
35
+ if (_ = accept(result.init)) initializers.unshift(_);
36
+ } else if (_ = accept(result)) if (kind === "field") initializers.unshift(_);
37
+ else descriptor[key] = _;
38
+ }
39
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
40
+ done = true;
41
+ };
42
+ /** Brand an existing Loader-tree entry id at the owning boundary. */
43
+ function pluginEntryId(value) {
44
+ return value;
45
+ }
46
+ /** Runtime mirror: FiberState is a cross-package const enum. */
47
+ const FIBER_STATE = {
48
+ PENDING: 0,
49
+ LOADING: 1,
50
+ ACTIVE: 2,
51
+ FAILED: 3,
52
+ DISPOSED: 4,
53
+ UNLOADING: 5
54
+ };
55
+ /** Complete public projection of Cordis Fiber states. */
56
+ const FIBER_PHASE = {
57
+ [FIBER_STATE.PENDING]: "pending",
58
+ [FIBER_STATE.LOADING]: "loading",
59
+ [FIBER_STATE.ACTIVE]: "active",
60
+ [FIBER_STATE.FAILED]: "failed",
61
+ [FIBER_STATE.DISPOSED]: null,
62
+ [FIBER_STATE.UNLOADING]: "unloading"
63
+ };
64
+ /** Remote-only service exposing the Loader's current non-group entry state. */
65
+ let PluginInventoryGateway = (() => {
66
+ let _classSuper = TypertRemoteService;
67
+ let _instanceExtraInitializers = [];
68
+ let _list_decorators;
69
+ return class PluginInventoryGateway extends _classSuper {
70
+ static {
71
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
72
+ _list_decorators = [Remote("list")];
73
+ __esDecorate(this, null, _list_decorators, {
74
+ kind: "method",
75
+ name: "list",
76
+ static: false,
77
+ private: false,
78
+ access: {
79
+ has: (obj) => "list" in obj,
80
+ get: (obj) => obj.list
81
+ },
82
+ metadata: _metadata
83
+ }, null, _instanceExtraInitializers);
84
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
85
+ enumerable: true,
86
+ configurable: true,
87
+ writable: true,
88
+ value: _metadata
89
+ });
90
+ }
91
+ static inject = ["loader"];
92
+ constructor(ctx) {
93
+ super(ctx, "pluginInventory");
94
+ __runInitializers(this, _instanceExtraInitializers);
95
+ }
96
+ /**
97
+ * Read the Loader directly on every call. Cordis's internal plugin/status
98
+ * events already maintain Entry.fiber and Fiber.state, so a second cache
99
+ * would only add another lifecycle truth to keep synchronized.
100
+ * @returns Current non-group Loader entries in Loader order.
101
+ */
102
+ list() {
103
+ const entries = [];
104
+ for (const entry of this.ctx.loader.entries()) {
105
+ if (entry.options.group) continue;
106
+ entries.push({
107
+ entryId: pluginEntryId(entry.id),
108
+ moduleName: entry.options.name,
109
+ enabled: !entry.disabled,
110
+ fiberPhase: entry.fiber === void 0 ? null : FIBER_PHASE[entry.fiber.state]
111
+ });
112
+ }
113
+ return { entries };
114
+ }
115
+ };
116
+ })();
117
+ //#endregion
118
+ export { PluginInventoryGateway, PluginInventoryGateway as default };
@@ -0,0 +1,13 @@
1
+ //#region lib/types/invariant.js
2
+ /** Package-owned invariant companion. @module @deepseek-ai/dsh-host-plugin-inventory/invariant */
3
+ const PACKAGE_NAME = "@deepseek-ai/dsh-host-plugin-inventory";
4
+ /** Cordis companion plugin name. */
5
+ const name = "host-plugin-inventory-invariant";
6
+ /** Service required before the companion can reserve package ownership. */
7
+ const inject = ["invariants"];
8
+ /** No runtime invariant: every snapshot is projected directly from Loader-owned state. */
9
+ const install = () => {};
10
+ /** Register this package's invariant companion. */
11
+ const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
12
+ //#endregion
13
+ export { apply, inject, name };
@@ -0,0 +1,3 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
+
3
+ export declare const TYPERT: unknown
@@ -0,0 +1,40 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
+ import { z } from 'zod'
3
+
4
+ const _deepseek_ai_dsh_host_plugin_inventory_pluginInventory_list_result$schema = z.object({
5
+ 'entries': z.array(z.object({
6
+ 'entryId': z.intersection(z.string(), z.unknown()).readonly(),
7
+ 'moduleName': z.string().readonly(),
8
+ 'enabled': z.boolean().readonly(),
9
+ 'fiberPhase': z.union([z.literal(null), z.literal("failed"), z.literal("pending"), z.literal("active"), z.literal("loading"), z.literal("unloading")]).readonly(),
10
+ })).readonly(),
11
+ })
12
+
13
+ export const TYPERT = {
14
+ package: '@deepseek-ai/dsh-host-plugin-inventory',
15
+ face: 'host',
16
+ schemas: [
17
+ ],
18
+ invocations: [
19
+ {
20
+ id: '@deepseek-ai/dsh-host-plugin-inventory#pluginInventory/list',
21
+ service: 'pluginInventory',
22
+ namespace: 'pluginInventory',
23
+ method: 'list',
24
+ invocation: { kind: 'direct' },
25
+ parameters: [
26
+ ],
27
+ result: {
28
+ mode: 'strict',
29
+ typeSymbol: '@deepseek-ai/dsh-host-plugin-inventory/types#PluginInventorySnapshot',
30
+ schema: _deepseek_ai_dsh_host_plugin_inventory_pluginInventory_list_result$schema,
31
+ },
32
+ sourceLocation: {"file":"packages/host/plugin-inventory/src/index.ts","line":57,"column":3},
33
+ },
34
+ ],
35
+ model: {
36
+ "services": [],
37
+ "events": [],
38
+ "objects": []
39
+ },
40
+ }
@@ -0,0 +1,22 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
2
+ import type {
3
+ RemoteResult,
4
+ TypertRemoteContribution,
5
+ } from '@deepseek-ai/dsh-typert-protocol'
6
+ import type { PluginInventorySnapshot } from '@deepseek-ai/dsh-host-plugin-inventory/types'
7
+
8
+ declare module '@deepseek-ai/dsh-typert-protocol' {
9
+ interface TypertRemoteNamespace$706c7567696e496e76656e746f7279 {
10
+ list: () => Promise<RemoteResult<PluginInventorySnapshot>>
11
+ }
12
+ interface TypertRemoteMap {
13
+ 'pluginInventory/list': () => Promise<RemoteResult<PluginInventorySnapshot>>
14
+ }
15
+ interface TypertRemoteNamespaceMap {
16
+ 'pluginInventory': TypertRemoteNamespace$706c7567696e496e76656e746f7279
17
+ }
18
+ }
19
+
20
+ export declare const TYPERT_REMOTE: TypertRemoteContribution
21
+ export default TYPERT_REMOTE
22
+ //# sourceMappingURL=typert.remote-client.d.ts.map
@@ -0,0 +1,34 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
2
+ import { z } from 'zod'
3
+
4
+ const _deepseek_ai_dsh_host_plugin_inventory_pluginInventory_list_result$schema = z.object({
5
+ 'entries': z.array(z.object({
6
+ 'entryId': z.intersection(z.string(), z.unknown()).readonly(),
7
+ 'moduleName': z.string().readonly(),
8
+ 'enabled': z.boolean().readonly(),
9
+ 'fiberPhase': z.union([z.literal(null), z.literal("failed"), z.literal("pending"), z.literal("active"), z.literal("loading"), z.literal("unloading")]).readonly(),
10
+ })).readonly(),
11
+ })
12
+
13
+ export const TYPERT_REMOTE = {
14
+ package: '@deepseek-ai/dsh-host-plugin-inventory',
15
+ descriptors: [
16
+ {
17
+ id: '@deepseek-ai/dsh-host-plugin-inventory#pluginInventory/list',
18
+ service: 'pluginInventory',
19
+ namespace: 'pluginInventory',
20
+ method: 'list',
21
+ invocation: { kind: 'direct' },
22
+ parameters: [
23
+ ],
24
+ result: {
25
+ mode: 'strict',
26
+ typeSymbol: '@deepseek-ai/dsh-host-plugin-inventory/types#PluginInventorySnapshot',
27
+ schema: _deepseek_ai_dsh_host_plugin_inventory_pluginInventory_list_result$schema,
28
+ },
29
+ sourceLocation: {"file":"packages/host/plugin-inventory/src/index.ts","line":57,"column":3},
30
+ },
31
+ ],
32
+ }
33
+
34
+ export default TYPERT_REMOTE
@@ -0,0 +1,19 @@
1
+ /** Read-only projection of the current Cordis Loader plugin entries. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
4
+ import type { PluginInventorySnapshot } from './types.ts';
5
+ export type * from './types.ts';
6
+ /** Remote-only service exposing the Loader's current non-group entry state. */
7
+ export declare class PluginInventoryGateway extends TypertRemoteService {
8
+ static inject: string[];
9
+ constructor(ctx: Context);
10
+ /**
11
+ * Read the Loader directly on every call. Cordis's internal plugin/status
12
+ * events already maintain Entry.fiber and Fiber.state, so a second cache
13
+ * would only add another lifecycle truth to keep synchronized.
14
+ * @returns Current non-group Loader entries in Loader order.
15
+ */
16
+ list(): PluginInventorySnapshot;
17
+ }
18
+ export default PluginInventoryGateway;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,100 @@
1
+ /** Read-only projection of the current Cordis Loader plugin entries. */
2
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
+ var useValue = arguments.length > 2;
4
+ for (var i = 0; i < initializers.length; i++) {
5
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
6
+ }
7
+ return useValue ? value : void 0;
8
+ };
9
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
10
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
11
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
12
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
13
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
14
+ var _, done = false;
15
+ for (var i = decorators.length - 1; i >= 0; i--) {
16
+ var context = {};
17
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
18
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
19
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
20
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
21
+ if (kind === "accessor") {
22
+ if (result === void 0) continue;
23
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
24
+ if (_ = accept(result.get)) descriptor.get = _;
25
+ if (_ = accept(result.set)) descriptor.set = _;
26
+ if (_ = accept(result.init)) initializers.unshift(_);
27
+ }
28
+ else if (_ = accept(result)) {
29
+ if (kind === "field") initializers.unshift(_);
30
+ else descriptor[key] = _;
31
+ }
32
+ }
33
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
+ done = true;
35
+ };
36
+ import { TypertRemoteService, Remote } from '@deepseek-ai/dsh-typert-protocol';
37
+ /** Brand an existing Loader-tree entry id at the owning boundary. */
38
+ function pluginEntryId(value) {
39
+ return value;
40
+ }
41
+ /** Runtime mirror: FiberState is a cross-package const enum. */
42
+ const FIBER_STATE = {
43
+ PENDING: 0,
44
+ LOADING: 1,
45
+ ACTIVE: 2,
46
+ FAILED: 3,
47
+ DISPOSED: 4,
48
+ UNLOADING: 5,
49
+ };
50
+ /** Complete public projection of Cordis Fiber states. */
51
+ const FIBER_PHASE = {
52
+ [FIBER_STATE.PENDING]: 'pending',
53
+ [FIBER_STATE.LOADING]: 'loading',
54
+ [FIBER_STATE.ACTIVE]: 'active',
55
+ [FIBER_STATE.FAILED]: 'failed',
56
+ [FIBER_STATE.DISPOSED]: null,
57
+ [FIBER_STATE.UNLOADING]: 'unloading',
58
+ };
59
+ /** Remote-only service exposing the Loader's current non-group entry state. */
60
+ let PluginInventoryGateway = (() => {
61
+ let _classSuper = TypertRemoteService;
62
+ let _instanceExtraInitializers = [];
63
+ let _list_decorators;
64
+ return class PluginInventoryGateway extends _classSuper {
65
+ static {
66
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
67
+ _list_decorators = [Remote('list')];
68
+ __esDecorate(this, null, _list_decorators, { kind: "method", name: "list", static: false, private: false, access: { has: obj => "list" in obj, get: obj => obj.list }, metadata: _metadata }, null, _instanceExtraInitializers);
69
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
70
+ }
71
+ static inject = ['loader'];
72
+ constructor(ctx) {
73
+ super(ctx, 'pluginInventory');
74
+ __runInitializers(this, _instanceExtraInitializers);
75
+ }
76
+ /**
77
+ * Read the Loader directly on every call. Cordis's internal plugin/status
78
+ * events already maintain Entry.fiber and Fiber.state, so a second cache
79
+ * would only add another lifecycle truth to keep synchronized.
80
+ * @returns Current non-group Loader entries in Loader order.
81
+ */
82
+ list() {
83
+ const entries = [];
84
+ for (const entry of this.ctx.loader.entries()) {
85
+ if (entry.options.group)
86
+ continue;
87
+ entries.push({
88
+ entryId: pluginEntryId(entry.id),
89
+ moduleName: entry.options.name,
90
+ enabled: !entry.disabled,
91
+ fiberPhase: entry.fiber === undefined ? null : FIBER_PHASE[entry.fiber.state],
92
+ });
93
+ }
94
+ return { entries };
95
+ }
96
+ };
97
+ })();
98
+ export { PluginInventoryGateway };
99
+ export default PluginInventoryGateway;
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ /** Package-owned invariant companion. @module @deepseek-ai/dsh-host-plugin-inventory/invariant */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ /** Cordis companion plugin name. */
4
+ export declare const name = "host-plugin-inventory-invariant";
5
+ /** Service required before the companion can reserve package ownership. */
6
+ export declare const inject: string[];
7
+ /** Register this package's invariant companion. */
8
+ export declare const apply: (ctx: Context) => Promise<() => void>;
9
+ //# sourceMappingURL=invariant.d.ts.map
@@ -0,0 +1,12 @@
1
+ /** Package-owned invariant companion. @module @deepseek-ai/dsh-host-plugin-inventory/invariant */
2
+ const PACKAGE_NAME = '@deepseek-ai/dsh-host-plugin-inventory';
3
+ /** Cordis companion plugin name. */
4
+ export const name = 'host-plugin-inventory-invariant';
5
+ /** Service required before the companion can reserve package ownership. */
6
+ export const inject = ['invariants'];
7
+ /** No runtime invariant: every snapshot is projected directly from Loader-owned state. */
8
+ const install = () => { };
9
+ /** Register this package's invariant companion. */
10
+ export const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
11
+ /* jscpd:ignore-end */
12
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1,19 @@
1
+ import type { Branded } from '@deepseek-ai/dsh-brand';
2
+ /** Stable Loader-tree identity of one configured plugin entry. */
3
+ export type PluginEntryId = Branded<'PluginEntryId'>;
4
+ /** Lifecycle state of an entry's root Fiber, or null when it has no live root Fiber. */
5
+ export type PluginFiberPhase = 'pending' | 'loading' | 'active' | 'failed' | 'unloading' | null;
6
+ /** One non-group Loader entry exposed to trusted clients. */
7
+ export interface PluginInventoryEntry {
8
+ readonly entryId: PluginEntryId;
9
+ /** Exact module specifier imported by the Loader entry. */
10
+ readonly moduleName: string;
11
+ /** Effective Loader enablement, including disabled ancestor groups. */
12
+ readonly enabled: boolean;
13
+ readonly fiberPhase: PluginFiberPhase;
14
+ }
15
+ /** Point-in-time inventory returned by the plugin inventory Remote. */
16
+ export interface PluginInventorySnapshot {
17
+ readonly entries: readonly PluginInventoryEntry[];
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@deepseek-ai/dsh-host-plugin-inventory",
3
+ "description": "Read-only Remote projection of current Cordis Loader plugin state",
4
+ "version": "0.0.1-rc.3",
5
+ "publishConfig": {
6
+ "access": "restricted"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
11
+ "directory": "packages/host/plugin-inventory"
12
+ },
13
+ "type": "module",
14
+ "main": "lib/index.js",
15
+ "types": "lib/types/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./lib/types/index.d.ts",
19
+ "default": "./lib/index.js"
20
+ },
21
+ "./invariant": {
22
+ "types": "./lib/types/invariant.d.ts",
23
+ "default": "./lib/invariant.js"
24
+ },
25
+ "./types": {
26
+ "types": "./lib/types/types.d.ts",
27
+ "default": "./lib/types/types.js"
28
+ },
29
+ "./typert": {
30
+ "types": "./lib/typert.host.d.ts",
31
+ "default": "./lib/typert.host.js"
32
+ },
33
+ "./remote": {
34
+ "types": "./lib/typert.remote-client.d.ts",
35
+ "default": "./lib/typert.remote-client.js"
36
+ },
37
+ "./src/*": "./src/*",
38
+ "./package.json": "./package.json"
39
+ },
40
+ "files": [
41
+ "lib/index.js",
42
+ "lib/invariant.js",
43
+ "lib/types/**/*.js",
44
+ "lib/types/**/*.d.ts",
45
+ "lib/typert.host.js",
46
+ "lib/typert.host.d.ts",
47
+ "lib/typert.remote-client.js",
48
+ "lib/typert.remote-client.d.ts"
49
+ ],
50
+ "license": "BSD-3-Clause",
51
+ "dependencies": {
52
+ "zod": "^4.4.3"
53
+ },
54
+ "peerDependencies": {
55
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.1-rc.1",
56
+ "@deepseek-ai/dsh-brand": "^0.0.1-rc.3",
57
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
58
+ "@deepseek-ai/dsh-typert-protocol": "^0.0.1-rc.3",
59
+ "@deepseek-ai/cordis": "^4.0.1-rc.1"
60
+ },
61
+ "devDependencies": {
62
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.1-rc.1",
63
+ "@deepseek-ai/dsh-brand": "^0.0.1-rc.3",
64
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
65
+ "@deepseek-ai/dsh-typert-protocol": "^0.0.1-rc.3",
66
+ "@deepseek-ai/cordis": "^4.0.1-rc.1"
67
+ }
68
+ }