@klarkxy/dsh-model-center 0.1.0

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.
@@ -0,0 +1,76 @@
1
+ import { AI_RPC_CHANNEL, AiPolicy, AiPolicy as AiPolicy$1, MODEL_SETTINGS_SLOT, ModelRole, ModelRole as ModelRole$1, ModelRoute, ModelRoute as ModelRoute$1, ModelTarget, ModelTarget as ModelTarget$1, PurposeSpec, ResolvedRoute, ResolvedRoute as ResolvedRoute$1, RpcResult } from "@klarkxy/dsh-ai-services/contracts";
2
+ //#region src/contracts.d.ts
3
+ declare const MODEL_CENTER_RPC_CHANNEL = "/dsh-model-center";
4
+ declare const MODEL_CENTER_PLUGIN = "@klarkxy/dsh-model-center";
5
+ declare const MODEL_CENTER_ENTRY_ID = "model-center";
6
+ declare const MODEL_ROLES: readonly ["weak", "normal", "strong", "fantasy"];
7
+ interface ModelCenterStatus {
8
+ enabled: boolean;
9
+ plugin: typeof MODEL_CENTER_PLUGIN;
10
+ }
11
+ interface RegisteredPurpose {
12
+ id: string;
13
+ label: string;
14
+ defaultTarget: ModelTarget$1;
15
+ plugin: string;
16
+ maxOutputTokens?: number;
17
+ maxInputChars?: number;
18
+ timeoutMs?: number;
19
+ }
20
+ interface AiServicesStatus {
21
+ policy: AiPolicy$1;
22
+ purposes: RegisteredPurpose[];
23
+ storageFailed: boolean;
24
+ }
25
+ interface AiServicesUpdateRequest {
26
+ policy: Omit<AiPolicy$1, 'revision'>;
27
+ expectedRevision: number;
28
+ }
29
+ interface AiServicesResolveRequest {
30
+ purpose: string;
31
+ sessionId?: string;
32
+ override?: ModelTarget$1;
33
+ }
34
+ type ModelCenterLocale = 'zh' | 'en';
35
+ type ModelCenterTab = 'policy' | 'runtime' | 'providers';
36
+ interface ModelCenterRenderProps {
37
+ sessionId?: string;
38
+ locale?: ModelCenterLocale;
39
+ renderProviders?: (options?: {
40
+ includeWritingRoutes?: boolean;
41
+ }) => unknown;
42
+ renderChatModel?: () => unknown;
43
+ }
44
+ interface ProviderListing {
45
+ id: string;
46
+ displayName: string;
47
+ settingsNs: string;
48
+ settingsPath: string[];
49
+ live: boolean;
50
+ declared?: boolean;
51
+ error?: string;
52
+ auth: 'configured' | 'missing' | 'unknown';
53
+ writable?: boolean;
54
+ credentialRef?: string;
55
+ }
56
+ interface DiscoveredModel {
57
+ id: string;
58
+ name?: string;
59
+ contextWindow?: number;
60
+ maxTokens?: number;
61
+ }
62
+ type RoutePreview = {
63
+ ok: true;
64
+ route: ResolvedRoute$1;
65
+ conflict?: string;
66
+ } | {
67
+ ok: false;
68
+ error: string;
69
+ target?: ModelTarget$1;
70
+ policyRevision: number;
71
+ };
72
+ declare function isModelRole(value: unknown): value is ModelRole$1;
73
+ declare function isBoundRoute(route: ModelRoute$1 | undefined): route is ModelRoute$1;
74
+ //#endregion
75
+ export { AI_RPC_CHANNEL, type AiPolicy, AiServicesResolveRequest, AiServicesStatus, AiServicesUpdateRequest, DiscoveredModel, MODEL_CENTER_ENTRY_ID, MODEL_CENTER_PLUGIN, MODEL_CENTER_RPC_CHANNEL, MODEL_ROLES, MODEL_SETTINGS_SLOT, ModelCenterLocale, ModelCenterRenderProps, ModelCenterStatus, ModelCenterTab, type ModelRole, type ModelRoute, type ModelTarget, ProviderListing, type PurposeSpec, RegisteredPurpose, type ResolvedRoute, RoutePreview, type RpcResult, isBoundRoute, isModelRole };
76
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { AI_RPC_CHANNEL, MODEL_SETTINGS_SLOT } from "@klarkxy/dsh-ai-services/contracts";
2
+ //#region src/contracts.ts
3
+ const MODEL_CENTER_RPC_CHANNEL = "/dsh-model-center";
4
+ const MODEL_CENTER_PLUGIN = "@klarkxy/dsh-model-center";
5
+ const MODEL_CENTER_ENTRY_ID = "model-center";
6
+ const MODEL_ROLES = [
7
+ "weak",
8
+ "normal",
9
+ "strong",
10
+ "fantasy"
11
+ ];
12
+ function isModelRole(value) {
13
+ return value === "normal" || value === "weak" || value === "strong" || value === "fantasy";
14
+ }
15
+ function isBoundRoute(route) {
16
+ return Boolean(route && route.provider.trim() && route.model.trim());
17
+ }
18
+ //#endregion
19
+ export { AI_RPC_CHANNEL, MODEL_CENTER_ENTRY_ID, MODEL_CENTER_PLUGIN, MODEL_CENTER_RPC_CHANNEL, MODEL_ROLES, MODEL_SETTINGS_SLOT, isBoundRoute, isModelRole };
20
+
21
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","names":[],"sources":["../src/contracts.ts"],"sourcesContent":["export {\n AI_RPC_CHANNEL,\n MODEL_SETTINGS_SLOT,\n} from '@klarkxy/dsh-ai-services/contracts'\nexport type {\n AiPolicy,\n ModelRole,\n ModelRoute,\n ModelTarget,\n PurposeSpec,\n ResolvedRoute,\n RpcResult,\n} from '@klarkxy/dsh-ai-services/contracts'\n\nimport type { AiPolicy, ModelRole, ModelRoute, ModelTarget, ResolvedRoute } from '@klarkxy/dsh-ai-services/contracts'\n\nexport const MODEL_CENTER_RPC_CHANNEL = '/dsh-model-center'\nexport const MODEL_CENTER_PLUGIN = '@klarkxy/dsh-model-center'\nexport const MODEL_CENTER_ENTRY_ID = 'model-center'\n\nexport const MODEL_ROLES = ['weak', 'normal', 'strong', 'fantasy'] as const satisfies readonly ModelRole[]\n\nexport interface ModelCenterStatus {\n enabled: boolean\n plugin: typeof MODEL_CENTER_PLUGIN\n}\n\nexport interface RegisteredPurpose {\n id: string\n label: string\n defaultTarget: ModelTarget\n plugin: string\n maxOutputTokens?: number\n maxInputChars?: number\n timeoutMs?: number\n}\n\nexport interface AiServicesStatus {\n policy: AiPolicy\n purposes: RegisteredPurpose[]\n storageFailed: boolean\n}\n\nexport interface AiServicesUpdateRequest {\n policy: Omit<AiPolicy, 'revision'>\n expectedRevision: number\n}\n\nexport interface AiServicesResolveRequest {\n purpose: string\n sessionId?: string\n override?: ModelTarget\n}\n\nexport type ModelCenterLocale = 'zh' | 'en'\nexport type ModelCenterTab = 'policy' | 'runtime' | 'providers'\n\nexport interface ModelCenterRenderProps {\n sessionId?: string\n locale?: ModelCenterLocale\n renderProviders?: (options?: { includeWritingRoutes?: boolean }) => unknown\n renderChatModel?: () => unknown\n}\n\nexport interface ProviderListing {\n id: string\n displayName: string\n settingsNs: string\n settingsPath: string[]\n live: boolean\n declared?: boolean\n error?: string\n auth: 'configured' | 'missing' | 'unknown'\n writable?: boolean\n credentialRef?: string\n}\n\nexport interface DiscoveredModel {\n id: string\n name?: string\n contextWindow?: number\n maxTokens?: number\n}\n\nexport type RoutePreview = {\n ok: true\n route: ResolvedRoute\n conflict?: string\n} | {\n ok: false\n error: string\n target?: ModelTarget\n policyRevision: number\n}\n\nexport function isModelRole(value: unknown): value is ModelRole {\n return value === 'normal' || value === 'weak' || value === 'strong' || value === 'fantasy'\n}\n\nexport function isBoundRoute(route: ModelRoute | undefined): route is ModelRoute {\n return Boolean(route && route.provider.trim() && route.model.trim())\n}\n"],"mappings":";;AAgBA,MAAa,2BAA2B;AACxC,MAAa,sBAAsB;AACnC,MAAa,wBAAwB;AAErC,MAAa,cAAc;CAAC;CAAQ;CAAU;CAAU;AAAS;AA2EjE,SAAgB,YAAY,OAAoC;CAC9D,OAAO,UAAU,YAAY,UAAU,UAAU,UAAU,YAAY,UAAU;AACnF;AAEA,SAAgB,aAAa,OAAoD;CAC/E,OAAO,QAAQ,SAAS,MAAM,SAAS,KAAK,KAAK,MAAM,MAAM,KAAK,CAAC;AACrE"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { ModelCenterStatus, RpcResult } from "./contracts.js";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ //#region src/index.d.ts
4
+ declare const name = "@klarkxy/dsh-model-center";
5
+ declare const inject: readonly ["connection", "webServer"];
6
+ declare class ModelCenter {
7
+ status(): ModelCenterStatus;
8
+ }
9
+ declare module '@deepseek-ai/cordis' {
10
+ interface Context {
11
+ modelCenter: ModelCenter;
12
+ }
13
+ }
14
+ declare function handleHostRpc(endpoint: string, _payload: unknown, signal: AbortSignal, service?: ModelCenter): Promise<RpcResult<ModelCenterStatus>>;
15
+ declare function apply(ctx: Context): void;
16
+ //#endregion
17
+ export { ModelCenter, apply, handleHostRpc, inject, name };
18
+ //# sourceMappingURL=index.d.ts.map
package/lib/index.js ADDED
@@ -0,0 +1,43 @@
1
+ import { MODEL_CENTER_PLUGIN, MODEL_CENTER_RPC_CHANNEL } from "./contracts.js";
2
+ import { registerHostRpc } from "@klarkxy/dsh-ai-services/host-rpc";
3
+ //#region src/index.ts
4
+ const name = MODEL_CENTER_PLUGIN;
5
+ const inject = ["connection", "webServer"];
6
+ var ModelCenter = class {
7
+ status() {
8
+ return {
9
+ enabled: true,
10
+ plugin: MODEL_CENTER_PLUGIN
11
+ };
12
+ }
13
+ };
14
+ async function handleHostRpc(endpoint, _payload, signal, service = new ModelCenter()) {
15
+ if (signal.aborted) return {
16
+ ok: false,
17
+ error: {
18
+ code: "MODEL_CENTER_CANCELLED",
19
+ message: "已取消。"
20
+ }
21
+ };
22
+ if (endpoint === "status") return {
23
+ ok: true,
24
+ value: service.status()
25
+ };
26
+ return {
27
+ ok: false,
28
+ error: {
29
+ code: "MODEL_CENTER_INVALID_REQUEST",
30
+ message: "未知操作。"
31
+ }
32
+ };
33
+ }
34
+ function apply(ctx) {
35
+ const host = ctx;
36
+ const service = new ModelCenter();
37
+ ctx.provide("modelCenter", service);
38
+ ctx.effect(() => registerHostRpc(host, MODEL_CENTER_RPC_CHANNEL, (endpoint, payload, signal) => handleHostRpc(endpoint, payload, signal, service)), "model-center.rpc");
39
+ }
40
+ //#endregion
41
+ export { ModelCenter, apply, handleHostRpc, inject, name };
42
+
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { Context } from '@deepseek-ai/cordis'\nimport {\n MODEL_CENTER_PLUGIN, MODEL_CENTER_RPC_CHANNEL, type ModelCenterStatus, type RpcResult,\n} from './contracts.ts'\nimport { registerHostRpc, type HostRpcContext } from './host-rpc.ts'\n\nexport const name = MODEL_CENTER_PLUGIN\nexport const inject = ['connection', 'webServer'] as const\n\nexport class ModelCenter {\n status(): ModelCenterStatus {\n return { enabled: true, plugin: MODEL_CENTER_PLUGIN }\n }\n}\n\ndeclare module '@deepseek-ai/cordis' {\n interface Context {\n modelCenter: ModelCenter\n }\n}\n\nexport async function handleHostRpc(\n endpoint: string,\n _payload: unknown,\n signal: AbortSignal,\n service: ModelCenter = new ModelCenter(),\n): Promise<RpcResult<ModelCenterStatus>> {\n if (signal.aborted) return { ok: false, error: { code: 'MODEL_CENTER_CANCELLED', message: '已取消。' } }\n if (endpoint === 'status') return { ok: true, value: service.status() }\n return { ok: false, error: { code: 'MODEL_CENTER_INVALID_REQUEST', message: '未知操作。' } }\n}\n\nexport function apply(ctx: Context): void {\n const host = ctx as Context & HostRpcContext\n const service = new ModelCenter()\n ctx.provide('modelCenter', service)\n ctx.effect(() => registerHostRpc(host, MODEL_CENTER_RPC_CHANNEL, (endpoint, payload, signal) => (\n handleHostRpc(endpoint, payload, signal, service)\n )), 'model-center.rpc')\n}\n"],"mappings":";;;AAMA,MAAa,OAAO;AACpB,MAAa,SAAS,CAAC,cAAc,WAAW;AAEhD,IAAa,cAAb,MAAyB;CACvB,SAA4B;EAC1B,OAAO;GAAE,SAAS;GAAM,QAAQ;EAAoB;CACtD;AACF;AAQA,eAAsB,cACpB,UACA,UACA,QACA,UAAuB,IAAI,YAAY,GACA;CACvC,IAAI,OAAO,SAAS,OAAO;EAAE,IAAI;EAAO,OAAO;GAAE,MAAM;GAA0B,SAAS;EAAO;CAAE;CACnG,IAAI,aAAa,UAAU,OAAO;EAAE,IAAI;EAAM,OAAO,QAAQ,OAAO;CAAE;CACtE,OAAO;EAAE,IAAI;EAAO,OAAO;GAAE,MAAM;GAAgC,SAAS;EAAQ;CAAE;AACxF;AAEA,SAAgB,MAAM,KAAoB;CACxC,MAAM,OAAO;CACb,MAAM,UAAU,IAAI,YAAY;CAChC,IAAI,QAAQ,eAAe,OAAO;CAClC,IAAI,aAAa,gBAAgB,MAAM,2BAA2B,UAAU,SAAS,WACnF,cAAc,UAAU,SAAS,QAAQ,OAAO,CACjD,GAAG,kBAAkB;AACxB"}
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@klarkxy/dsh-model-center",
3
+ "version": "0.1.0",
4
+ "description": "Model Center for provider status and purpose model routing",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": ">=22"
9
+ },
10
+ "main": "./lib/index.js",
11
+ "types": "./lib/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./lib/index.d.ts",
15
+ "import": "./lib/index.js",
16
+ "default": "./lib/index.js"
17
+ },
18
+ "./contracts": {
19
+ "types": "./lib/contracts.d.ts",
20
+ "import": "./lib/contracts.js",
21
+ "default": "./lib/contracts.js"
22
+ },
23
+ "./client": {
24
+ "default": "./lib/client.js"
25
+ },
26
+ "./package.json": "./package.json"
27
+ },
28
+ "files": [
29
+ "lib",
30
+ "cordis.patch.yml",
31
+ "README.md",
32
+ "LICENSE",
33
+ "docs/README.zh-CN.md"
34
+ ],
35
+ "dsh": {
36
+ "bundle": {
37
+ "patch": "./cordis.patch.yml"
38
+ },
39
+ "client": {
40
+ "platform": "web",
41
+ "inject": [
42
+ "@deepseek-ai/dsh-client-connection",
43
+ "@deepseek-ai/dsh-api-remotes"
44
+ ]
45
+ }
46
+ },
47
+ "dshEditor": {
48
+ "role": "feature",
49
+ "visibility": "public",
50
+ "wrapClient": true,
51
+ "entries": [
52
+ {
53
+ "id": "model-center",
54
+ "title": "模型中心",
55
+ "description": "按功能选择模型并管理供应商连接",
56
+ "feature": "model-center",
57
+ "service": "modelCenter"
58
+ }
59
+ ]
60
+ },
61
+ "dependencies": {
62
+ "@klarkxy/dsh-ai-services": "0.1.0"
63
+ },
64
+ "peerDependencies": {
65
+ "@deepseek-ai/cordis": "^4.0.3"
66
+ },
67
+ "devDependencies": {
68
+ "@deepseek-ai/cordis": "^4.0.3",
69
+ "react": "^18.2.0",
70
+ "@types/react": "18.3.31"
71
+ },
72
+ "keywords": [
73
+ "dsh",
74
+ "dsh-plugin",
75
+ "deepseek-harness",
76
+ "model-center"
77
+ ],
78
+ "repository": {
79
+ "type": "git",
80
+ "url": "git+https://github.com/klarkxy/dsh-editor.git",
81
+ "directory": "packages/dsh-model-center"
82
+ },
83
+ "homepage": "https://github.com/klarkxy/dsh-editor/tree/main/packages/dsh-model-center#readme",
84
+ "bugs": {
85
+ "url": "https://github.com/klarkxy/dsh-editor/issues"
86
+ },
87
+ "publishConfig": {
88
+ "access": "public",
89
+ "registry": "https://registry.npmjs.org/"
90
+ },
91
+ "dshRelease": {
92
+ "contentHash": "sha256-47d9c130265a95bf1b0dd3ca88b59d4eda74ce10511fc6f9a5027243e078bae8"
93
+ },
94
+ "scripts": {
95
+ "build": "tsdown && node ../../scripts/wrap-client.mjs @klarkxy/dsh-model-center",
96
+ "typecheck": "tsc --noEmit -p tsconfig.json",
97
+ "test": "vitest run --root ../.. packages/dsh-model-center/src"
98
+ }
99
+ }