dsh-llm-ustc 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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -0
  3. package/cordis.patch.yml +4 -0
  4. package/lib/adapter.js +211 -0
  5. package/lib/adapter.js.map +1 -0
  6. package/lib/client.js +506 -0
  7. package/lib/config.js +17 -0
  8. package/lib/config.js.map +1 -0
  9. package/lib/constants.js +11 -0
  10. package/lib/constants.js.map +1 -0
  11. package/lib/helper.js +302 -0
  12. package/lib/helper.js.map +1 -0
  13. package/lib/index.js +43 -0
  14. package/lib/index.js.map +1 -0
  15. package/lib/model-catalog.js +59 -0
  16. package/lib/model-catalog.js.map +1 -0
  17. package/lib/native.js +47 -0
  18. package/lib/native.js.map +1 -0
  19. package/lib/state.js +97 -0
  20. package/lib/state.js.map +1 -0
  21. package/lib/types/adapter.d.ts +24 -0
  22. package/lib/types/adapter.d.ts.map +1 -0
  23. package/lib/types/client/index.d.ts +112 -0
  24. package/lib/types/client/index.d.ts.map +1 -0
  25. package/lib/types/config.d.ts +12 -0
  26. package/lib/types/config.d.ts.map +1 -0
  27. package/lib/types/constants.d.ts +11 -0
  28. package/lib/types/constants.d.ts.map +1 -0
  29. package/lib/types/helper.d.ts +51 -0
  30. package/lib/types/helper.d.ts.map +1 -0
  31. package/lib/types/index.d.ts +7 -0
  32. package/lib/types/index.d.ts.map +1 -0
  33. package/lib/types/model-catalog.d.ts +14 -0
  34. package/lib/types/model-catalog.d.ts.map +1 -0
  35. package/lib/types/native.d.ts +7 -0
  36. package/lib/types/native.d.ts.map +1 -0
  37. package/lib/types/state.d.ts +15 -0
  38. package/lib/types/state.d.ts.map +1 -0
  39. package/lib/types/types.d.ts +34 -0
  40. package/lib/types/types.d.ts.map +1 -0
  41. package/lib/types/web.d.ts +64 -0
  42. package/lib/types/web.d.ts.map +1 -0
  43. package/lib/types.js +2 -0
  44. package/lib/types.js.map +1 -0
  45. package/lib/web.js +221 -0
  46. package/lib/web.js.map +1 -0
  47. package/package.json +112 -0
@@ -0,0 +1,112 @@
1
+ import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
2
+ declare const en: {
3
+ readonly title: "USTC LLM";
4
+ readonly intro: "Manage the USTC API credential, model catalog, and iWAN access.";
5
+ readonly expand: "Show settings";
6
+ readonly collapse: "Hide settings";
7
+ readonly apiKeyLabel: "USTC API Key";
8
+ readonly apiKeyPlaceholder: "Enter a new key";
9
+ readonly configured: "Configured";
10
+ readonly readOnly: "The active credential or settings provider is read-only.";
11
+ readonly save: "Save key";
12
+ readonly saving: "Saving...";
13
+ readonly remove: "Remove key";
14
+ readonly iwan: "iWAN access";
15
+ readonly beginOidc: "Start USTC sign-in";
16
+ readonly startingOidc: "Starting...";
17
+ readonly logoutIwan: "Sign out";
18
+ readonly loggingOut: "Signing out...";
19
+ readonly openLogin: "Open sign-in page";
20
+ readonly callbackLabel: "Callback URL";
21
+ readonly callbackPlaceholder: "Paste the complete com.panabit.mobile:// callback URL";
22
+ readonly completeOidc: "Finish sign-in";
23
+ readonly completingOidc: "Finishing...";
24
+ readonly noLine: "Select a line";
25
+ readonly selectLine: "Apply line";
26
+ readonly applyingLine: "Applying...";
27
+ readonly route: "Current route";
28
+ readonly refreshRoute: "Refresh route";
29
+ readonly directRoute: "Direct";
30
+ readonly iwanRoute: "iWAN";
31
+ readonly models: "Model catalog";
32
+ readonly syncModels: "Sync models";
33
+ readonly syncingModels: "Syncing...";
34
+ readonly refreshedAt: "Refreshed";
35
+ readonly never: "Never";
36
+ readonly loading: "Loading...";
37
+ readonly helperStopped: "Helper not started";
38
+ readonly retry: "Retry";
39
+ };
40
+ type LocaleKey = keyof typeof en;
41
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
42
+ interface LocaleNamespaceMap {
43
+ /** USTC LLM provider settings copy. */
44
+ 'llm-ustc': LocaleKey;
45
+ }
46
+ }
47
+ interface PublicServer {
48
+ id: string;
49
+ name: string;
50
+ endpoint: string;
51
+ }
52
+ interface HelperStatus {
53
+ protocol: 'v1';
54
+ target: 'api.llm.ustc.edu.cn:443';
55
+ route: 'direct' | 'iwan';
56
+ iwanConfigured: boolean;
57
+ selectedServerId?: string;
58
+ tunnelRunning: boolean;
59
+ }
60
+ interface SettingsSnapshot {
61
+ writable: boolean;
62
+ revision: number;
63
+ selectedServerId?: string;
64
+ directReprobeSeconds: number;
65
+ apiKey: {
66
+ configured: boolean;
67
+ source?: string;
68
+ writable: boolean;
69
+ };
70
+ iwan: {
71
+ configured: boolean;
72
+ source?: string;
73
+ writable: boolean;
74
+ servers: PublicServer[];
75
+ };
76
+ helper?: HelperStatus;
77
+ models: {
78
+ id: string;
79
+ name: string;
80
+ }[];
81
+ modelsUpdatedAt?: string;
82
+ }
83
+ interface OidcBegin {
84
+ authUrl: string;
85
+ expiresInSeconds: number;
86
+ }
87
+ type Action = 'load' | 'saveApiKey' | 'unsetApiKey' | 'beginOidc' | 'completeOidc' | 'logoutIwan' | 'refreshRoute' | 'selectServer' | 'syncModels';
88
+ interface ViewState {
89
+ status: 'idle' | 'loading' | 'ready' | 'error';
90
+ snapshot?: SettingsSnapshot | undefined;
91
+ oidc?: OidcBegin | undefined;
92
+ action?: Action | undefined;
93
+ error?: string | undefined;
94
+ }
95
+ export declare class UstcSettingsController {
96
+ private current;
97
+ private readonly listeners;
98
+ private generation;
99
+ subscribe: (listener: () => void) => (() => void);
100
+ snapshot: () => ViewState;
101
+ private set;
102
+ load(): Promise<void>;
103
+ refreshIfLoaded(): void;
104
+ run<T>(action: Action, request: Record<string, unknown>, apply: (value: T, state: ViewState) => ViewState): Promise<void>;
105
+ mutateSnapshot(action: Action, request?: Record<string, unknown>): Promise<void>;
106
+ beginOidc(): Promise<void>;
107
+ completeOidc(callbackUrl: string): Promise<void>;
108
+ }
109
+ export declare const inject: string[];
110
+ export declare function apply(ctx: ClientContext): void;
111
+ export {};
112
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import z from '@deepseek-ai/schemastery';
2
+ export interface Config {
3
+ selectedServerId?: string;
4
+ directReprobeSeconds?: number;
5
+ }
6
+ export declare const Config: z<Config>;
7
+ export interface ResolvedConfig {
8
+ selectedServerId?: string;
9
+ directReprobeSeconds: number;
10
+ }
11
+ export declare function resolveConfig(config: Config): ResolvedConfig;
12
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,MAAM,WAAW,MAAM;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAG3B,CAAA;AAEF,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAU5D"}
@@ -0,0 +1,11 @@
1
+ export declare const PROVIDER = "ustc";
2
+ export declare const PROVIDER_NAME = "USTC LLM";
3
+ export declare const SETTINGS_NS = "llm-ustc";
4
+ export declare const API_KEY_REF = "USTC_LLM_API_KEY";
5
+ export declare const IWAN_CONFIG_REF = "USTC_LLM_IWAN_CONFIG";
6
+ export declare const DEFAULT_MODEL = "deepseek-v4-flash-ascend";
7
+ export declare const DEFAULT_CONTEXT_WINDOW = 262144;
8
+ export declare const DEFAULT_MAX_TOKENS = 32768;
9
+ export declare const HELPER_PROTOCOL = "v1";
10
+ export declare const SETTINGS_ROUTE = "/_dsh/llm-ustc/settings";
11
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,SAAS,CAAA;AAC9B,eAAO,MAAM,aAAa,aAAa,CAAA;AACvC,eAAO,MAAM,WAAW,aAAa,CAAA;AACrC,eAAO,MAAM,WAAW,qBAAqB,CAAA;AAC7C,eAAO,MAAM,eAAe,yBAAyB,CAAA;AACrD,eAAO,MAAM,aAAa,6BAA6B,CAAA;AACvD,eAAO,MAAM,sBAAsB,SAAU,CAAA;AAC7C,eAAO,MAAM,kBAAkB,QAAS,CAAA;AACxC,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,cAAc,4BAA4B,CAAA"}
@@ -0,0 +1,51 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { ResolvedConfig } from './config.ts';
3
+ import type { CachedModel, HelperStatus, IwanConfig, PublicServer } from './types.ts';
4
+ export interface HelperEndpoint {
5
+ baseURL: string;
6
+ generation: number;
7
+ headers: Readonly<Record<string, string>>;
8
+ }
9
+ export interface OidcBegin {
10
+ authUrl: string;
11
+ expiresInSeconds: number;
12
+ }
13
+ export interface OidcComplete {
14
+ servers: PublicServer[];
15
+ iwanConfig: IwanConfig;
16
+ }
17
+ export declare class HelperManager {
18
+ private readonly ctx;
19
+ private child;
20
+ private sessionToken;
21
+ private baseURL;
22
+ private starting;
23
+ private lifecycle;
24
+ private closed;
25
+ private recoveredModels;
26
+ private config;
27
+ private generation;
28
+ constructor(ctx: Context, config: ResolvedConfig);
29
+ reconfigure(config: ResolvedConfig): void;
30
+ stageSelectedServer(serverId: string): () => void;
31
+ onRecoveredModels(handler: (models: CachedModel[]) => Promise<void>): void;
32
+ ensureStarted(): Promise<string>;
33
+ endpoint(): Promise<HelperEndpoint>;
34
+ stop(): Promise<void>;
35
+ private stopNow;
36
+ dispose(): Promise<void>;
37
+ request<T>(path: string, init?: RequestInit, timeoutMs?: number): Promise<T>;
38
+ fetch(path: string, init?: RequestInit): Promise<Response>;
39
+ status(): Promise<HelperStatus>;
40
+ refreshRoute(apiKey?: string): Promise<HelperStatus>;
41
+ statusIfRunning(): Promise<HelperStatus | undefined>;
42
+ servers(): Promise<PublicServer[]>;
43
+ beginOidc(): Promise<OidcBegin>;
44
+ completeOidc(callbackUrl: string): Promise<OidcComplete>;
45
+ selectServer(serverId: string, apiKey?: string): Promise<void>;
46
+ private start;
47
+ }
48
+ export declare function parseHelperEvent(line: string): CachedModel[] | undefined;
49
+ export declare function sanitizedEnvironment(source: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
50
+ export declare function secretFingerprint(secret: string): string;
51
+ //# sourceMappingURL=helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/helper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAQrF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,qBAAa,aAAa;IAWZ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAVhC,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,eAAe,CAAwD;IAC/E,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAI;gBAEO,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc;IAIjE,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAMzC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,IAAI;IAMjD,iBAAiB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIpE,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAShC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAWnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKb,OAAO;IAef,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBhF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAapE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAIzB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOpD,eAAe,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAe1D,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIlC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IAIzB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IASxD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQtD,KAAK;CAkEpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,SAAS,CAYxE;AAYD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAQjF;AAyBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,7 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { Config, type Config as PluginConfig } from './config.ts';
3
+ export declare const name = "dsh-llm-ustc";
4
+ export declare const inject: string[];
5
+ export { Config };
6
+ export declare function apply(ctx: Context, config?: PluginConfig): Promise<() => Promise<void>>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,EAAE,MAAM,EAAiB,KAAK,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAOhF,eAAO,MAAM,IAAI,iBAAiB,CAAA;AAClC,eAAO,MAAM,MAAM,UAAqC,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,CAAA;AAEjB,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CA8BjG"}
@@ -0,0 +1,14 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { HelperManager } from './helper.ts';
3
+ import { StateStore } from './state.ts';
4
+ import type { CachedModel } from './types.ts';
5
+ export declare class ModelCatalog {
6
+ private readonly ctx;
7
+ private readonly helper;
8
+ private readonly store;
9
+ constructor(ctx: Context, helper: HelperManager, store: StateStore);
10
+ models(): CachedModel[];
11
+ refresh(signal?: AbortSignal): Promise<CachedModel[]>;
12
+ accept(input: readonly CachedModel[]): Promise<CachedModel[]>;
13
+ }
14
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/model-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAmB,UAAU,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAFL,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU;IAKpC,MAAM,IAAI,WAAW,EAAE;IAIjB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoBrD,MAAM,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAMpE"}
@@ -0,0 +1,7 @@
1
+ export interface NativeTarget {
2
+ packageName: string;
3
+ binaryName: string;
4
+ }
5
+ export declare function nativeTarget(platform?: NodeJS.Platform, arch?: NodeJS.Architecture): NativeTarget;
6
+ export declare function resolveHelperBinary(): Promise<string>;
7
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/native.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAWD,wBAAgB,YAAY,CAAC,QAAQ,kBAAmB,EAAE,IAAI,sBAAe,GAAG,YAAY,CAI3F;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAsB3D"}
@@ -0,0 +1,15 @@
1
+ import type { CachedModel, PluginState } from './types.ts';
2
+ export declare function resolveDshHome(): string;
3
+ export declare class StateStore {
4
+ readonly filename: string;
5
+ private current;
6
+ private writes;
7
+ constructor(dshHome?: string);
8
+ load(): Promise<void>;
9
+ snapshot(): PluginState;
10
+ models(): CachedModel[];
11
+ setModels(models: readonly CachedModel[]): Promise<void>;
12
+ private persist;
13
+ }
14
+ export declare function normalizeModels(models: readonly CachedModel[]): CachedModel[];
15
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM1D,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,MAAM,CAAmC;gBAErC,OAAO,SAAmB;IAIhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,QAAQ,IAAI,WAAW;IAIvB,MAAM,IAAI,WAAW,EAAE;IAIjB,SAAS,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAUhD,OAAO;CAUtB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,EAAE,CAc7E"}
@@ -0,0 +1,34 @@
1
+ export interface IwanServer {
2
+ id: string;
3
+ name: string;
4
+ host: string;
5
+ port: number;
6
+ username: string;
7
+ passWord: string;
8
+ }
9
+ export interface IwanConfig {
10
+ domain: string;
11
+ servers: IwanServer[];
12
+ }
13
+ export interface PublicServer {
14
+ id: string;
15
+ name: string;
16
+ endpoint: string;
17
+ }
18
+ export interface CachedModel {
19
+ id: string;
20
+ name: string;
21
+ }
22
+ export interface PluginState {
23
+ models: CachedModel[];
24
+ modelsUpdatedAt?: string;
25
+ }
26
+ export interface HelperStatus {
27
+ protocol: 'v1';
28
+ target: 'api.llm.ustc.edu.cn:443';
29
+ route: 'direct' | 'iwan';
30
+ iwanConfigured: boolean;
31
+ selectedServerId?: string;
32
+ tunnelRunning: boolean;
33
+ }
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,IAAI,CAAA;IACd,MAAM,EAAE,yBAAyB,CAAA;IACjC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,OAAO,CAAA;CACvB"}
@@ -0,0 +1,64 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { HelperManager } from './helper.ts';
3
+ import type { ModelCatalog } from './model-catalog.ts';
4
+ import type { StateStore } from './state.ts';
5
+ import type { HelperStatus, PublicServer } from './types.ts';
6
+ export interface SettingsSnapshot {
7
+ writable: boolean;
8
+ revision: number;
9
+ selectedServerId?: string;
10
+ directReprobeSeconds: number;
11
+ apiKey: {
12
+ configured: boolean;
13
+ source?: string;
14
+ writable: boolean;
15
+ };
16
+ iwan: {
17
+ configured: boolean;
18
+ source?: string;
19
+ writable: boolean;
20
+ servers: PublicServer[];
21
+ };
22
+ helper?: HelperStatus;
23
+ models: {
24
+ id: string;
25
+ name: string;
26
+ }[];
27
+ modelsUpdatedAt?: string;
28
+ }
29
+ type WebRequest = {
30
+ action: 'saveApiKey';
31
+ value: string;
32
+ } | {
33
+ action: 'unsetApiKey';
34
+ } | {
35
+ action: 'beginOidc';
36
+ } | {
37
+ action: 'completeOidc';
38
+ callbackUrl: string;
39
+ } | {
40
+ action: 'logoutIwan';
41
+ expectedRevision: number;
42
+ } | {
43
+ action: 'refreshRoute';
44
+ } | {
45
+ action: 'selectServer';
46
+ serverId: string;
47
+ expectedRevision: number;
48
+ } | {
49
+ action: 'syncModels';
50
+ };
51
+ export declare class UstcWebBackend {
52
+ private readonly ctx;
53
+ private readonly helper;
54
+ private readonly catalog;
55
+ private readonly store;
56
+ constructor(ctx: Context, helper: HelperManager, catalog: ModelCatalog, store: StateStore);
57
+ snapshot(): Promise<SettingsSnapshot>;
58
+ handle(request: WebRequest): Promise<unknown>;
59
+ }
60
+ export declare function installWeb(ctx: Context, backend: UstcWebBackend): void;
61
+ export declare function publicIwanServers(raw: string | undefined): PublicServer[];
62
+ export declare function publicMessage(error: unknown): string;
63
+ export {};
64
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAc,YAAY,EAAE,MAAM,YAAY,CAAA;AAExE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,MAAM,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IACnE,IAAI,EAAE;QACJ,UAAU,EAAE,OAAO,CAAA;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,OAAO,CAAA;QACjB,OAAO,EAAE,YAAY,EAAE,CAAA;KACxB,CAAA;IACD,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,KAAK,UAAU,GACX;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GACzB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,GAC1B;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAA;AAE5B,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAHL,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,UAAU;IAG9B,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA2BrC,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;CA+CpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAoBtE;AAMD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,EAAE,CAYzE;AAgED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMpD"}
package/lib/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/lib/web.js ADDED
@@ -0,0 +1,221 @@
1
+ import { credentialRef } from '@deepseek-ai/dsh-credentials';
2
+ import { SettingsConflictError, settingsNamespace } from '@deepseek-ai/dsh-settings';
3
+ import { API_KEY_REF, IWAN_CONFIG_REF, SETTINGS_NS, SETTINGS_ROUTE } from "./constants.js";
4
+ export class UstcWebBackend {
5
+ ctx;
6
+ helper;
7
+ catalog;
8
+ store;
9
+ constructor(ctx, helper, catalog, store) {
10
+ this.ctx = ctx;
11
+ this.helper = helper;
12
+ this.catalog = catalog;
13
+ this.store = store;
14
+ }
15
+ async snapshot() {
16
+ const descriptor = this.ctx.settings.describe({ redactSecrets: true }).find(row => row.ns === SETTINGS_NS);
17
+ if (descriptor === undefined)
18
+ throw new Error('llm-ustc settings namespace is not registered');
19
+ const value = descriptor.value;
20
+ const [apiKey, iwan, iwanSecret, helper] = await Promise.all([
21
+ this.ctx.credentials.describe(credentialRef(API_KEY_REF)),
22
+ this.ctx.credentials.describe(credentialRef(IWAN_CONFIG_REF)),
23
+ this.ctx.credentials.resolve(credentialRef(IWAN_CONFIG_REF)),
24
+ this.helper.statusIfRunning(),
25
+ ]);
26
+ const state = this.store.snapshot();
27
+ return {
28
+ writable: this.ctx.settings.writable,
29
+ revision: descriptor.revision,
30
+ ...(value.selectedServerId === undefined ? {} : { selectedServerId: value.selectedServerId }),
31
+ directReprobeSeconds: value.directReprobeSeconds ?? 300,
32
+ apiKey: publicCredential(apiKey),
33
+ iwan: {
34
+ ...publicCredential(iwan),
35
+ servers: publicIwanServers(iwanSecret?.value),
36
+ },
37
+ ...(helper === undefined ? {} : { helper }),
38
+ models: state.models,
39
+ ...(state.modelsUpdatedAt === undefined ? {} : { modelsUpdatedAt: state.modelsUpdatedAt }),
40
+ };
41
+ }
42
+ async handle(request) {
43
+ switch (request.action) {
44
+ case 'saveApiKey': {
45
+ const key = request.value.trim();
46
+ if (key.length === 0)
47
+ throw new TypeError('API Key may not be empty');
48
+ await this.ctx.credentials.set(credentialRef(API_KEY_REF), key);
49
+ await this.helper.stop();
50
+ return this.snapshot();
51
+ }
52
+ case 'unsetApiKey':
53
+ await this.ctx.credentials.unset(credentialRef(API_KEY_REF));
54
+ await this.helper.stop();
55
+ return this.snapshot();
56
+ case 'beginOidc':
57
+ return this.helper.beginOidc();
58
+ case 'completeOidc': {
59
+ const result = await this.helper.completeOidc(request.callbackUrl);
60
+ return { servers: result.servers, snapshot: await this.snapshot() };
61
+ }
62
+ case 'logoutIwan':
63
+ await this.ctx.settings.mutate(settingsNamespace(SETTINGS_NS), [{ op: 'unset', path: ['selectedServerId'] }], request.expectedRevision);
64
+ await this.ctx.credentials.unset(credentialRef(IWAN_CONFIG_REF));
65
+ await this.helper.stop();
66
+ await this.helper.status();
67
+ return this.snapshot();
68
+ case 'refreshRoute': {
69
+ const key = await this.ctx.credentials.resolve(credentialRef(API_KEY_REF));
70
+ await this.helper.refreshRoute(key?.value.trim());
71
+ return this.snapshot();
72
+ }
73
+ case 'selectServer': {
74
+ const key = await this.ctx.credentials.resolve(credentialRef(API_KEY_REF));
75
+ const rollback = this.helper.stageSelectedServer(request.serverId);
76
+ try {
77
+ await this.ctx.settings.update(settingsNamespace(SETTINGS_NS), { selectedServerId: request.serverId }, request.expectedRevision);
78
+ }
79
+ catch (error) {
80
+ rollback();
81
+ throw error;
82
+ }
83
+ await this.helper.selectServer(request.serverId, key?.value.trim());
84
+ return this.snapshot();
85
+ }
86
+ case 'syncModels':
87
+ await this.catalog.refresh();
88
+ return this.snapshot();
89
+ }
90
+ }
91
+ }
92
+ export function installWeb(ctx, backend) {
93
+ ctx.inject(['webServer'], webCtx => {
94
+ const dispose = webCtx.webServer.register({
95
+ kind: 'exact',
96
+ path: SETTINGS_ROUTE,
97
+ handler: async (req, res) => {
98
+ try {
99
+ if (req.method === 'GET')
100
+ return responseJson(res, 200, { ok: true, value: await backend.snapshot() });
101
+ if (req.method !== 'POST')
102
+ return responseError(res, 405, 'METHOD_NOT_ALLOWED', 'use GET or POST');
103
+ if (!sameOriginPost(req))
104
+ return responseError(res, 403, 'CROSS_ORIGIN', 'cross-origin request refused');
105
+ const request = parseWebRequest(await readJson(req));
106
+ responseJson(res, 200, { ok: true, value: await backend.handle(request) });
107
+ }
108
+ catch (error) {
109
+ const status = error instanceof SettingsConflictError ? 409 : error instanceof TypeError ? 400 : 500;
110
+ responseError(res, status, error instanceof SettingsConflictError ? 'SETTINGS_CONFLICT' : 'REQUEST_FAILED', publicMessage(error));
111
+ }
112
+ },
113
+ });
114
+ webCtx.effect(() => dispose, 'dsh-llm-ustc: web settings route');
115
+ });
116
+ }
117
+ function publicCredential(info) {
118
+ return { configured: info.configured, ...(info.source === undefined ? {} : { source: info.source }), writable: info.writable };
119
+ }
120
+ export function publicIwanServers(raw) {
121
+ if (raw === undefined)
122
+ return [];
123
+ try {
124
+ const value = JSON.parse(raw);
125
+ if (!Array.isArray(value.servers))
126
+ return [];
127
+ return value.servers.flatMap(server => {
128
+ if (typeof server.id !== 'string' || typeof server.name !== 'string' || typeof server.host !== 'string' || !Number.isSafeInteger(server.port))
129
+ return [];
130
+ return [{ id: server.id, name: server.name, endpoint: `${server.host}:${server.port}` }];
131
+ });
132
+ }
133
+ catch {
134
+ return [];
135
+ }
136
+ }
137
+ function responseJson(res, status, body) {
138
+ const bytes = Buffer.from(JSON.stringify(body));
139
+ res.setHeader('content-type', 'application/json; charset=utf-8');
140
+ res.setHeader('content-length', String(bytes.length));
141
+ res.setHeader('cache-control', 'no-store');
142
+ res.setHeader('x-content-type-options', 'nosniff');
143
+ res.setHeader('content-security-policy', "default-src 'none'; frame-ancestors 'none'");
144
+ res.writeHead(status);
145
+ res.end(bytes);
146
+ }
147
+ function responseError(res, status, code, message) {
148
+ responseJson(res, status, { ok: false, error: { code, message } });
149
+ }
150
+ function sameOriginPost(req) {
151
+ if (req.headers['sec-fetch-site'] === 'cross-site')
152
+ return false;
153
+ const origin = req.headers.origin;
154
+ if (origin === undefined)
155
+ return ['same-origin', 'same-site', 'none'].includes(req.headers['sec-fetch-site'] ?? '');
156
+ if (req.headers.host === undefined)
157
+ return false;
158
+ try {
159
+ const parsed = new URL(origin);
160
+ return ['http:', 'https:'].includes(parsed.protocol) && parsed.host === req.headers.host;
161
+ }
162
+ catch {
163
+ return false;
164
+ }
165
+ }
166
+ async function readJson(req) {
167
+ if (req.headers['content-type']?.split(';', 1)[0]?.trim().toLowerCase() !== 'application/json')
168
+ throw new TypeError('Content-Type must be application/json');
169
+ const parts = [];
170
+ let size = 0;
171
+ for await (const part of req) {
172
+ const bytes = Buffer.isBuffer(part) ? part : Buffer.from(part);
173
+ size += bytes.length;
174
+ if (size > 64 * 1024)
175
+ throw new TypeError('request body exceeds 65536 bytes');
176
+ parts.push(bytes);
177
+ }
178
+ if (parts.length === 0)
179
+ throw new TypeError('request body is empty');
180
+ return JSON.parse(Buffer.concat(parts).toString('utf8'));
181
+ }
182
+ function parseWebRequest(value) {
183
+ if (!isRecord(value) || typeof value.action !== 'string')
184
+ throw new TypeError('request action is required');
185
+ switch (value.action) {
186
+ case 'saveApiKey':
187
+ if (typeof value.value !== 'string')
188
+ throw new TypeError('API Key must be a string');
189
+ return { action: value.action, value: value.value };
190
+ case 'completeOidc':
191
+ if (typeof value.callbackUrl !== 'string')
192
+ throw new TypeError('callbackUrl must be a string');
193
+ return { action: value.action, callbackUrl: value.callbackUrl };
194
+ case 'selectServer':
195
+ if (typeof value.serverId !== 'string' || !Number.isSafeInteger(value.expectedRevision))
196
+ throw new TypeError('serverId and expectedRevision are required');
197
+ return { action: value.action, serverId: value.serverId, expectedRevision: value.expectedRevision };
198
+ case 'logoutIwan':
199
+ if (!Number.isSafeInteger(value.expectedRevision))
200
+ throw new TypeError('expectedRevision is required');
201
+ return { action: value.action, expectedRevision: value.expectedRevision };
202
+ case 'unsetApiKey':
203
+ case 'beginOidc':
204
+ case 'refreshRoute':
205
+ case 'syncModels':
206
+ return { action: value.action };
207
+ default:
208
+ throw new TypeError(`unsupported action: ${value.action}`);
209
+ }
210
+ }
211
+ export function publicMessage(error) {
212
+ const message = error instanceof Error ? error.message : String(error);
213
+ return message
214
+ .replace(/Bearer\s+\S+/giu, 'Bearer [redacted]')
215
+ .replace(/com\.panabit\.mobile:\/\/\S+/giu, 'com.panabit.mobile://[redacted]')
216
+ .replace(/\b(?:sk-)?[A-Za-z0-9_-]{32,}\b/gu, '[redacted]');
217
+ }
218
+ function isRecord(value) {
219
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
220
+ }
221
+ //# sourceMappingURL=web.js.map
package/lib/web.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}