@mohou/panel 1.0.21 → 1.0.23
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/lib/types/index.d.ts +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/labels.d.ts +7 -0
- package/lib/types/labels.d.ts.map +1 -1
- package/lib/types/settings/client.d.ts +2 -0
- package/lib/types/settings/client.d.ts.map +1 -1
- package/lib/types/settings/form.d.ts +24 -0
- package/lib/types/settings/form.d.ts.map +1 -1
- package/lib/types/settings/state.d.ts +12 -0
- package/lib/types/settings/state.d.ts.map +1 -1
- package/lib/types/settings/view.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -1
- package/src/labels.ts +14 -0
- package/src/settings/client.ts +2 -0
- package/src/settings/form.ts +45 -0
- package/src/settings/state.ts +26 -4
- package/src/settings/view.tsx +67 -2
package/lib/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Panel chrome labels. Not the app's own strings. @module @mohou/panel */
|
|
2
2
|
export declare const packageId: "@mohou/panel";
|
|
3
3
|
export { isPanelLocale, panelLocales, panelText, type PanelLabelKey, type PanelLabelMode, type PanelLocale, } from './labels.ts';
|
|
4
|
-
export { admitPanelPort, panelLanguageFields, panelPortBound, type PanelPortResult } from './settings/form.ts';
|
|
4
|
+
export { admitPanelPort, admitUpdateRegistry, panelLanguageFields, panelPortBound, registryChoice, updateRegistryPresets, type PanelPortResult, type PanelRegistryChoice, type PanelRegistryResult } from './settings/form.ts';
|
|
5
5
|
export { filterGallery, galleryCardStyles, galleryKind, isGalleryCardStyle, type GalleryApp, type GalleryCardStyle, type GalleryKind, } from './gallery/list.ts';
|
|
6
6
|
export { closeTab, deletePrompt, initialTabs, openAppTab, switchTab, type AppTab, type DeletePrompt, type PanelTab, type PanelTabs, type TabChange, } from './gallery/tabs.ts';
|
|
7
7
|
export { PanelClientError, type PanelClient } from './gallery/client.ts';
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,eAAO,MAAM,SAAS,EAAG,cAAuB,CAAA;AAEhD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/types/labels.d.ts
CHANGED
|
@@ -28,6 +28,13 @@ declare const en: {
|
|
|
28
28
|
readonly 'delete-failed': "Delete failed";
|
|
29
29
|
readonly 'unsaved-confirm': "Discard unsaved changes?";
|
|
30
30
|
readonly 'port-invalid': "Port must be from 1024 to 65535";
|
|
31
|
+
readonly 'update-registry': "Update registry";
|
|
32
|
+
readonly 'update-registry-default': "Packaged default";
|
|
33
|
+
readonly 'update-registry-npmmirror': "Alibaba npmmirror";
|
|
34
|
+
readonly 'update-registry-tencent': "Tencent Cloud";
|
|
35
|
+
readonly 'update-registry-custom': "Custom…";
|
|
36
|
+
readonly 'update-registry-hint': "Only this product's own update check and install use it. Your npm config, and an app's own dependency installs, are untouched.";
|
|
37
|
+
readonly 'update-registry-invalid': "Use an https url without a username or password.";
|
|
31
38
|
readonly 'save-failed': "Save failed";
|
|
32
39
|
readonly 'update-failed': "Update check failed";
|
|
33
40
|
readonly 'storage-failed': "Storage failed to load";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/labels.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,eAAO,MAAM,YAAY,0BAA2B,CAAA;AAEpD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAA;AAEzD,QAAA,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/labels.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,eAAO,MAAM,YAAY,0BAA2B,CAAA;AAEpD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAA;AAEzD,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoQE,CAAA;AAwQV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,EAAE,CAAA;AAO3C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAMnF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE"}
|
|
@@ -13,6 +13,8 @@ export interface PanelPolicy {
|
|
|
13
13
|
readonly id: string;
|
|
14
14
|
};
|
|
15
15
|
readonly defaultWorkbenchId?: string;
|
|
16
|
+
/** Registry for this product's own update check and install. Empty follows the packaged default. */
|
|
17
|
+
readonly updateRegistry?: string;
|
|
16
18
|
}
|
|
17
19
|
export interface PanelPolicyWrite {
|
|
18
20
|
readonly policy: PanelPolicy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/settings/client.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC1E,QAAQ,CAAC,eAAe,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/settings/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
import { type PanelLocale } from '../labels.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The mirrors the form offers. The packaged default is not one of them: an empty value means it,
|
|
4
|
+
* so a build with a different default needs no change here.
|
|
5
|
+
*/
|
|
6
|
+
export declare const updateRegistryPresets: {
|
|
7
|
+
readonly npmmirror: "https://registry.npmmirror.com";
|
|
8
|
+
readonly tencent: "https://mirrors.cloud.tencent.com/npm/";
|
|
9
|
+
};
|
|
10
|
+
export type PanelRegistryChoice = 'default' | keyof typeof updateRegistryPresets | 'custom';
|
|
11
|
+
export type PanelRegistryResult = {
|
|
12
|
+
readonly ok: true;
|
|
13
|
+
readonly registry: string;
|
|
14
|
+
} | {
|
|
15
|
+
readonly ok: false;
|
|
16
|
+
readonly key: 'registry-invalid';
|
|
17
|
+
};
|
|
18
|
+
/** Which preset a stored value is, or `custom` for anything else an owner typed. */
|
|
19
|
+
export declare function registryChoice(registry: string): PanelRegistryChoice;
|
|
20
|
+
/**
|
|
21
|
+
* Admit the update registry before any write. Empty means the packaged default.
|
|
22
|
+
* A mirror is installed from, so it must be https with no credentials in the url.
|
|
23
|
+
* @param value - the form value
|
|
24
|
+
*/
|
|
25
|
+
export declare function admitUpdateRegistry(value: string): PanelRegistryResult;
|
|
2
26
|
/** Settings port range. Locked in the product decisions, not a host tunable. */
|
|
3
27
|
export declare const panelPortBound: {
|
|
4
28
|
readonly min: 1024;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/settings/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE9D,gFAAgF;AAChF,eAAO,MAAM,cAAc;;;CAAqC,CAAA;AAEhE,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAA;AAExD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAI9D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,WAAW,CAAA;CAAE,CAGtG"}
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/settings/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;CAGxB,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,OAAO,qBAAqB,GAAG,QAAQ,CAAA;AAE3F,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE,CAAA;AAE5D,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAOpE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAatE;AAED,gFAAgF;AAChF,eAAO,MAAM,cAAc;;;CAAqC,CAAA;AAEhE,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAA;AAExD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAI9D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,WAAW,CAAA;CAAE,CAGtG"}
|
|
@@ -5,12 +5,14 @@ export interface SettingsState {
|
|
|
5
5
|
readonly palette: string;
|
|
6
6
|
readonly locale: string;
|
|
7
7
|
readonly port: string;
|
|
8
|
+
readonly registry: string;
|
|
8
9
|
readonly providerId: string;
|
|
9
10
|
readonly modelProvider: string;
|
|
10
11
|
readonly model: string;
|
|
11
12
|
readonly workbenchId: string;
|
|
12
13
|
readonly dirty: boolean;
|
|
13
14
|
readonly portError: boolean;
|
|
15
|
+
readonly registryError: boolean;
|
|
14
16
|
readonly saveError: boolean;
|
|
15
17
|
readonly saveMessage?: string;
|
|
16
18
|
readonly pending?: 'close' | 'restore';
|
|
@@ -37,6 +39,9 @@ export type SettingsAction = {
|
|
|
37
39
|
} | {
|
|
38
40
|
readonly type: 'edit-port';
|
|
39
41
|
readonly port: string;
|
|
42
|
+
} | {
|
|
43
|
+
readonly type: 'edit-registry';
|
|
44
|
+
readonly registry: string;
|
|
40
45
|
} | {
|
|
41
46
|
readonly type: 'edit-provider';
|
|
42
47
|
readonly providerId: string;
|
|
@@ -57,6 +62,12 @@ export type SettingsAction = {
|
|
|
57
62
|
readonly policy: PanelPolicy;
|
|
58
63
|
} | {
|
|
59
64
|
readonly type: 'port-invalid';
|
|
65
|
+
} | {
|
|
66
|
+
readonly type: 'registry-invalid';
|
|
67
|
+
}
|
|
68
|
+
/** The form could not be built at all (an unsupported locale). */
|
|
69
|
+
| {
|
|
70
|
+
readonly type: 'save-blocked';
|
|
60
71
|
} | {
|
|
61
72
|
readonly type: 'save-failed';
|
|
62
73
|
readonly message?: string;
|
|
@@ -88,6 +99,7 @@ export declare function settingsDraft(state: SettingsState): {
|
|
|
88
99
|
policy: PanelPolicy;
|
|
89
100
|
} | {
|
|
90
101
|
ok: false;
|
|
102
|
+
key: 'port-invalid' | 'registry-invalid' | 'save-blocked';
|
|
91
103
|
};
|
|
92
104
|
/** Load policy into the form. */
|
|
93
105
|
export declare function loadSettings(client: PanelSettingsClient, dispatch: (action: SettingsAction) => void): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/settings/state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/settings/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/settings/view.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/settings/view.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE/E,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAA4B,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,KAAK,EAAoC,WAAW,EAAgB,mBAAmB,EAAoB,gBAAgB,EAAqB,MAAM,aAAa,CAAA;AAiB1K;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACjD,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAA;IACjC,wFAAwF;IACxF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC5D,GAAG,SAAS,CAwTZ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mohou/panel",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.23",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"lucide-react": "^0.544.0",
|
|
30
30
|
"react": "^19.3.0",
|
|
31
31
|
"react-dom": "^19.3.0",
|
|
32
|
-
"@mohou/app-view": "^1.0.
|
|
32
|
+
"@mohou/app-view": "^1.0.23"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/react": "^19.3.0",
|
package/src/index.ts
CHANGED
|
@@ -10,7 +10,7 @@ export {
|
|
|
10
10
|
type PanelLabelMode,
|
|
11
11
|
type PanelLocale,
|
|
12
12
|
} from './labels.ts'
|
|
13
|
-
export { admitPanelPort, panelLanguageFields, panelPortBound, type PanelPortResult } from './settings/form.ts'
|
|
13
|
+
export { admitPanelPort, admitUpdateRegistry, panelLanguageFields, panelPortBound, registryChoice, updateRegistryPresets, type PanelPortResult, type PanelRegistryChoice, type PanelRegistryResult } from './settings/form.ts'
|
|
14
14
|
export {
|
|
15
15
|
filterGallery,
|
|
16
16
|
galleryCardStyles,
|
package/src/labels.ts
CHANGED
|
@@ -31,6 +31,13 @@ const en = {
|
|
|
31
31
|
'delete-failed': 'Delete failed',
|
|
32
32
|
'unsaved-confirm': 'Discard unsaved changes?',
|
|
33
33
|
'port-invalid': 'Port must be from 1024 to 65535',
|
|
34
|
+
'update-registry': 'Update registry',
|
|
35
|
+
'update-registry-default': 'Packaged default',
|
|
36
|
+
'update-registry-npmmirror': 'Alibaba npmmirror',
|
|
37
|
+
'update-registry-tencent': 'Tencent Cloud',
|
|
38
|
+
'update-registry-custom': 'Custom…',
|
|
39
|
+
'update-registry-hint': 'Only this product\'s own update check and install use it. Your npm config, and an app\'s own dependency installs, are untouched.',
|
|
40
|
+
'update-registry-invalid': 'Use an https url without a username or password.',
|
|
34
41
|
'save-failed': 'Save failed',
|
|
35
42
|
'update-failed': 'Update check failed',
|
|
36
43
|
'storage-failed': 'Storage failed to load',
|
|
@@ -286,6 +293,13 @@ const zhCN = {
|
|
|
286
293
|
'delete-failed': '删除失败',
|
|
287
294
|
'unsaved-confirm': '放弃未保存的修改?',
|
|
288
295
|
'port-invalid': '端口必须在 1024 到 65535 之间',
|
|
296
|
+
'update-registry': '更新源 registry',
|
|
297
|
+
'update-registry-default': '安装包默认',
|
|
298
|
+
'update-registry-npmmirror': '阿里 npmmirror',
|
|
299
|
+
'update-registry-tencent': '腾讯云',
|
|
300
|
+
'update-registry-custom': '自定义…',
|
|
301
|
+
'update-registry-hint': '只有 Mohou 自己的“检查更新/安装更新”用它;不动你的 npm 配置,也不影响小程序自身的依赖安装。',
|
|
302
|
+
'update-registry-invalid': '请填 https 地址,且不要带用户名密码。',
|
|
289
303
|
'save-failed': '保存失败',
|
|
290
304
|
'update-failed': '更新检查失败',
|
|
291
305
|
'storage-failed': '存储加载失败',
|
package/src/settings/client.ts
CHANGED
|
@@ -8,6 +8,8 @@ export interface PanelPolicy {
|
|
|
8
8
|
readonly llm: { readonly provider: string; readonly model: string } | null
|
|
9
9
|
readonly runtimeProvider: { readonly id: string }
|
|
10
10
|
readonly defaultWorkbenchId?: string
|
|
11
|
+
/** Registry for this product's own update check and install. Empty follows the packaged default. */
|
|
12
|
+
readonly updateRegistry?: string
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export interface PanelPolicyWrite {
|
package/src/settings/form.ts
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
import { isPanelLocale, type PanelLocale } from '../labels.ts'
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* The mirrors the form offers. The packaged default is not one of them: an empty value means it,
|
|
5
|
+
* so a build with a different default needs no change here.
|
|
6
|
+
*/
|
|
7
|
+
export const updateRegistryPresets = {
|
|
8
|
+
npmmirror: 'https://registry.npmmirror.com',
|
|
9
|
+
tencent: 'https://mirrors.cloud.tencent.com/npm/',
|
|
10
|
+
} as const
|
|
11
|
+
|
|
12
|
+
export type PanelRegistryChoice = 'default' | keyof typeof updateRegistryPresets | 'custom'
|
|
13
|
+
|
|
14
|
+
export type PanelRegistryResult =
|
|
15
|
+
| { readonly ok: true; readonly registry: string }
|
|
16
|
+
| { readonly ok: false; readonly key: 'registry-invalid' }
|
|
17
|
+
|
|
18
|
+
/** Which preset a stored value is, or `custom` for anything else an owner typed. */
|
|
19
|
+
export function registryChoice(registry: string): PanelRegistryChoice {
|
|
20
|
+
const value = registry.trim()
|
|
21
|
+
if (value.length === 0) return 'default'
|
|
22
|
+
for (const [name, url] of Object.entries(updateRegistryPresets)) {
|
|
23
|
+
if (value === url) return name as PanelRegistryChoice
|
|
24
|
+
}
|
|
25
|
+
return 'custom'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Admit the update registry before any write. Empty means the packaged default.
|
|
30
|
+
* A mirror is installed from, so it must be https with no credentials in the url.
|
|
31
|
+
* @param value - the form value
|
|
32
|
+
*/
|
|
33
|
+
export function admitUpdateRegistry(value: string): PanelRegistryResult {
|
|
34
|
+
const registry = value.trim()
|
|
35
|
+
if (registry.length === 0) return { ok: true, registry: '' }
|
|
36
|
+
let url: URL
|
|
37
|
+
try {
|
|
38
|
+
url = new URL(registry)
|
|
39
|
+
} catch {
|
|
40
|
+
return { ok: false, key: 'registry-invalid' }
|
|
41
|
+
}
|
|
42
|
+
if (url.protocol !== 'https:' || url.hostname.length === 0 || url.username.length > 0 || url.password.length > 0) {
|
|
43
|
+
return { ok: false, key: 'registry-invalid' }
|
|
44
|
+
}
|
|
45
|
+
return { ok: true, registry }
|
|
46
|
+
}
|
|
47
|
+
|
|
3
48
|
/** Settings port range. Locked in the product decisions, not a host tunable. */
|
|
4
49
|
export const panelPortBound = { min: 1024, max: 65535 } as const
|
|
5
50
|
|
package/src/settings/state.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { admitPanelPort, panelLanguageFields } from './form.ts'
|
|
1
|
+
import { admitPanelPort, admitUpdateRegistry, panelLanguageFields } from './form.ts'
|
|
2
2
|
import type { PanelPolicy, PanelPolicyWrite, PanelSettingsClient } from './client.ts'
|
|
3
3
|
|
|
4
4
|
export interface SettingsState {
|
|
@@ -7,12 +7,14 @@ export interface SettingsState {
|
|
|
7
7
|
readonly palette: string
|
|
8
8
|
readonly locale: string
|
|
9
9
|
readonly port: string
|
|
10
|
+
readonly registry: string
|
|
10
11
|
readonly providerId: string
|
|
11
12
|
readonly modelProvider: string
|
|
12
13
|
readonly model: string
|
|
13
14
|
readonly workbenchId: string
|
|
14
15
|
readonly dirty: boolean
|
|
15
16
|
readonly portError: boolean
|
|
17
|
+
readonly registryError: boolean
|
|
16
18
|
readonly saveError: boolean
|
|
17
19
|
readonly saveMessage?: string
|
|
18
20
|
readonly pending?: 'close' | 'restore'
|
|
@@ -31,6 +33,7 @@ export type SettingsAction =
|
|
|
31
33
|
| { readonly type: 'edit-palette'; readonly palette: string }
|
|
32
34
|
| { readonly type: 'edit-locale'; readonly locale: string }
|
|
33
35
|
| { readonly type: 'edit-port'; readonly port: string }
|
|
36
|
+
| { readonly type: 'edit-registry'; readonly registry: string }
|
|
34
37
|
| { readonly type: 'edit-provider'; readonly providerId: string }
|
|
35
38
|
| { readonly type: 'edit-model'; readonly provider: string; readonly model: string }
|
|
36
39
|
| { readonly type: 'edit-workbench'; readonly workbenchId: string }
|
|
@@ -38,6 +41,9 @@ export type SettingsAction =
|
|
|
38
41
|
/** Host policy written elsewhere (theme menu). Keeps appearance fields in sync. */
|
|
39
42
|
| { readonly type: 'host-policy'; readonly policy: PanelPolicy }
|
|
40
43
|
| { readonly type: 'port-invalid' }
|
|
44
|
+
| { readonly type: 'registry-invalid' }
|
|
45
|
+
/** The form could not be built at all (an unsupported locale). */
|
|
46
|
+
| { readonly type: 'save-blocked' }
|
|
41
47
|
| { readonly type: 'save-failed'; readonly message?: string }
|
|
42
48
|
| { readonly type: 'escape' }
|
|
43
49
|
| { readonly type: 'restore' }
|
|
@@ -52,12 +58,14 @@ export function settingsState(): SettingsState {
|
|
|
52
58
|
palette: '',
|
|
53
59
|
locale: 'en',
|
|
54
60
|
port: '',
|
|
61
|
+
registry: '',
|
|
55
62
|
providerId: '',
|
|
56
63
|
modelProvider: '',
|
|
57
64
|
model: '',
|
|
58
65
|
workbenchId: 'default',
|
|
59
66
|
dirty: false,
|
|
60
67
|
portError: false,
|
|
68
|
+
registryError: false,
|
|
61
69
|
saveError: false,
|
|
62
70
|
closed: false,
|
|
63
71
|
restartRequired: false,
|
|
@@ -85,6 +93,8 @@ export function reduceSettings(state: SettingsState, action: SettingsAction): Se
|
|
|
85
93
|
return { ...state, locale: action.locale, dirty: true, saveError: false }
|
|
86
94
|
case 'edit-port':
|
|
87
95
|
return { ...state, port: action.port, dirty: true, portError: false, saveError: false }
|
|
96
|
+
case 'edit-registry':
|
|
97
|
+
return { ...state, registry: action.registry, dirty: true, registryError: false, saveError: false }
|
|
88
98
|
case 'edit-provider':
|
|
89
99
|
return { ...state, providerId: action.providerId, dirty: true, saveError: false }
|
|
90
100
|
case 'edit-model':
|
|
@@ -126,6 +136,10 @@ export function reduceSettings(state: SettingsState, action: SettingsAction): Se
|
|
|
126
136
|
}
|
|
127
137
|
case 'port-invalid':
|
|
128
138
|
return { ...state, portError: true, dirty: true }
|
|
139
|
+
case 'registry-invalid':
|
|
140
|
+
return { ...state, registryError: true, dirty: true }
|
|
141
|
+
case 'save-blocked':
|
|
142
|
+
return { ...omitSaveMessage(state), saveError: true, dirty: true }
|
|
129
143
|
case 'save-failed':
|
|
130
144
|
return {
|
|
131
145
|
...omitSaveMessage(state),
|
|
@@ -159,14 +173,19 @@ export function reduceSettings(state: SettingsState, action: SettingsAction): Se
|
|
|
159
173
|
}
|
|
160
174
|
|
|
161
175
|
/** Policy to write, or a port error that must not be sent. */
|
|
162
|
-
export function settingsDraft(state: SettingsState): {
|
|
176
|
+
export function settingsDraft(state: SettingsState): {
|
|
177
|
+
ok: true
|
|
178
|
+
policy: PanelPolicy
|
|
179
|
+
} | { ok: false; key: 'port-invalid' | 'registry-invalid' | 'save-blocked' } {
|
|
163
180
|
const port = admitPanelPort(Number(state.port))
|
|
164
|
-
if (!port.ok) return { ok: false }
|
|
181
|
+
if (!port.ok) return { ok: false, key: 'port-invalid' }
|
|
182
|
+
const registry = admitUpdateRegistry(state.registry)
|
|
183
|
+
if (!registry.ok) return { ok: false, key: 'registry-invalid' }
|
|
165
184
|
let language: ReturnType<typeof panelLanguageFields>
|
|
166
185
|
try {
|
|
167
186
|
language = panelLanguageFields(state.locale)
|
|
168
187
|
} catch {
|
|
169
|
-
return { ok: false }
|
|
188
|
+
return { ok: false, key: 'save-blocked' }
|
|
170
189
|
}
|
|
171
190
|
return {
|
|
172
191
|
ok: true,
|
|
@@ -178,6 +197,7 @@ export function settingsDraft(state: SettingsState): { ok: true; policy: PanelPo
|
|
|
178
197
|
hostPort: port.port,
|
|
179
198
|
llm: state.modelProvider === '' && state.model === '' ? null : { provider: state.modelProvider, model: state.model },
|
|
180
199
|
runtimeProvider: { id: state.providerId },
|
|
200
|
+
updateRegistry: registry.registry,
|
|
181
201
|
...state.workbenchId === 'default' ? {} : { defaultWorkbenchId: state.workbenchId },
|
|
182
202
|
},
|
|
183
203
|
}
|
|
@@ -198,12 +218,14 @@ function fromPolicy(policy: PanelPolicy): SettingsState {
|
|
|
198
218
|
palette: policy.palette,
|
|
199
219
|
locale: policy.locale,
|
|
200
220
|
port: String(policy.hostPort),
|
|
221
|
+
registry: policy.updateRegistry ?? '',
|
|
201
222
|
providerId: policy.runtimeProvider.id,
|
|
202
223
|
modelProvider: policy.llm?.provider ?? '',
|
|
203
224
|
model: policy.llm?.model ?? '',
|
|
204
225
|
workbenchId: policy.defaultWorkbenchId ?? 'default',
|
|
205
226
|
dirty: false,
|
|
206
227
|
portError: false,
|
|
228
|
+
registryError: false,
|
|
207
229
|
saveError: false,
|
|
208
230
|
closed: false,
|
|
209
231
|
restartRequired: false,
|
package/src/settings/view.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Check, ExternalLink, Loader2, Pencil, RefreshCw } from 'lucide-react'
|
|
2
|
-
import { useEffect, useReducer, useState, type ReactNode } from 'react'
|
|
2
|
+
import { useEffect, useReducer, useRef, useState, type ReactNode } from 'react'
|
|
3
3
|
|
|
4
4
|
import { galleryCardStyles, type GalleryCardStyle } from '../gallery/list.ts'
|
|
5
5
|
import { isPanelLocale, panelText, type PanelLabelMode, type PanelLocale } from '../labels.ts'
|
|
@@ -12,6 +12,7 @@ import { UpdateSourceChip } from './update-source.tsx'
|
|
|
12
12
|
import { CredentialSettings } from './credentials-view.tsx'
|
|
13
13
|
import { McpSettings } from './mcp-view.tsx'
|
|
14
14
|
import { SkillInstall } from './skill-install.tsx'
|
|
15
|
+
import { registryChoice, updateRegistryPresets } from './form.ts'
|
|
15
16
|
import { loadSettings, reduceSettings, settingsDraft, settingsState } from './state.ts'
|
|
16
17
|
|
|
17
18
|
/** The rail. Credentials appear only when Host exposes the read call, so a store-less host shows no entry. */
|
|
@@ -105,6 +106,8 @@ export function PanelSettings(props: {
|
|
|
105
106
|
return
|
|
106
107
|
}
|
|
107
108
|
props.onPolicy?.(written)
|
|
109
|
+
// The about chip reads the source once; a saved registry changes it.
|
|
110
|
+
setAbout(undefined)
|
|
108
111
|
setSaveFeedback('saved')
|
|
109
112
|
window.setTimeout(() => setSaveFeedback('idle'), 2000)
|
|
110
113
|
}
|
|
@@ -249,6 +252,7 @@ export function PanelSettings(props: {
|
|
|
249
252
|
</div>
|
|
250
253
|
)}
|
|
251
254
|
{state.portError ? <p className="text-xs text-muted-foreground">{label('port-invalid')}</p> : null}
|
|
255
|
+
<RegistryField state={state} dispatch={dispatch} label={label} />
|
|
252
256
|
</div>
|
|
253
257
|
</section>
|
|
254
258
|
) : null}
|
|
@@ -548,6 +552,67 @@ function cardKey(style: GalleryCardStyle): 'card-hero' | 'card-stamp' | 'card-et
|
|
|
548
552
|
return 'card-hero'
|
|
549
553
|
}
|
|
550
554
|
|
|
555
|
+
/**
|
|
556
|
+
* The update registry: a preset, or the owner's own url. Only this product's own update
|
|
557
|
+
* check and install use it; `~/.npmrc` and app dependency installs are untouched.
|
|
558
|
+
* @param props - the form state, its dispatch, and the label lookup
|
|
559
|
+
*/
|
|
560
|
+
function RegistryField(props: {
|
|
561
|
+
readonly state: ReturnType<typeof settingsState>
|
|
562
|
+
readonly dispatch: (action: Parameters<typeof reduceSettings>[1]) => void
|
|
563
|
+
readonly label: (key: string) => string
|
|
564
|
+
}): ReactNode {
|
|
565
|
+
const choice = registryChoice(props.state.registry)
|
|
566
|
+
// A stored url that matches a preset is that preset. Choosing "custom" is a form mode,
|
|
567
|
+
// so it lives here rather than in the value.
|
|
568
|
+
const [custom, setCustom] = useState(choice === 'custom')
|
|
569
|
+
const seen = useRef(props.state.registry)
|
|
570
|
+
useEffect(() => {
|
|
571
|
+
// Only a value that changed elsewhere (a restore, another writer) leaves custom mode.
|
|
572
|
+
if (seen.current === props.state.registry) return
|
|
573
|
+
seen.current = props.state.registry
|
|
574
|
+
if (choice !== 'custom') setCustom(false)
|
|
575
|
+
}, [choice, props.state.registry])
|
|
576
|
+
const shown = custom ? 'custom' : choice
|
|
577
|
+
return (
|
|
578
|
+
<div className="mt-2 flex flex-col gap-2">
|
|
579
|
+
<label className="text-sm text-muted-foreground" htmlFor="settings-update-registry">{props.label('update-registry')}</label>
|
|
580
|
+
<p className="m-0 max-w-xl text-xs leading-5 text-muted-foreground">{props.label('update-registry-hint')}</p>
|
|
581
|
+
<select
|
|
582
|
+
id="settings-update-registry"
|
|
583
|
+
data-field="update-registry"
|
|
584
|
+
className="h-9 max-w-md rounded-lg border bg-card px-3 text-sm outline-none"
|
|
585
|
+
value={shown}
|
|
586
|
+
onChange={(event) => {
|
|
587
|
+
const picked = event.target.value
|
|
588
|
+
setCustom(picked === 'custom')
|
|
589
|
+
props.dispatch({
|
|
590
|
+
type: 'edit-registry',
|
|
591
|
+
registry: picked === 'default'
|
|
592
|
+
? ''
|
|
593
|
+
: picked === 'custom' ? props.state.registry : updateRegistryPresets[picked as keyof typeof updateRegistryPresets],
|
|
594
|
+
})
|
|
595
|
+
}}
|
|
596
|
+
>
|
|
597
|
+
<option value="default">{props.label('update-registry-default')}</option>
|
|
598
|
+
<option value="npmmirror">{`${props.label('update-registry-npmmirror')} · ${updateRegistryPresets.npmmirror}`}</option>
|
|
599
|
+
<option value="tencent">{`${props.label('update-registry-tencent')} · ${updateRegistryPresets.tencent}`}</option>
|
|
600
|
+
<option value="custom">{props.label('update-registry-custom')}</option>
|
|
601
|
+
</select>
|
|
602
|
+
{shown !== 'custom' ? null : (
|
|
603
|
+
<input
|
|
604
|
+
data-field="update-registry-custom"
|
|
605
|
+
className="h-9 max-w-md rounded-lg border bg-card px-3 font-mono text-sm outline-none"
|
|
606
|
+
placeholder="https://registry.example.com/"
|
|
607
|
+
value={props.state.registry}
|
|
608
|
+
onChange={event => props.dispatch({ type: 'edit-registry', registry: event.target.value })}
|
|
609
|
+
/>
|
|
610
|
+
)}
|
|
611
|
+
{props.state.registryError ? <p className="m-0 text-xs text-destructive">{props.label('update-registry-invalid')}</p> : null}
|
|
612
|
+
</div>
|
|
613
|
+
)
|
|
614
|
+
}
|
|
615
|
+
|
|
551
616
|
async function saveSettings(
|
|
552
617
|
client: PanelSettingsClient,
|
|
553
618
|
state: ReturnType<typeof settingsState>,
|
|
@@ -555,7 +620,7 @@ async function saveSettings(
|
|
|
555
620
|
): Promise<PanelPolicy | undefined> {
|
|
556
621
|
const draft = settingsDraft(state)
|
|
557
622
|
if (!draft.ok) {
|
|
558
|
-
dispatch({ type:
|
|
623
|
+
dispatch({ type: draft.key })
|
|
559
624
|
return undefined
|
|
560
625
|
}
|
|
561
626
|
try {
|