@morlay/ui-conversation-manager 0.1.9 → 0.1.11-alpha.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.
- package/dist/client.cjs +1278 -566
- package/dist/client.d.cts +0 -10
- package/dist/client.d.mts +0 -10
- package/dist/client.mjs +26 -33
- package/dist/index.cjs +1 -2
- package/dist/index.d.mts +1 -3
- package/dist/index.mjs +1 -2
- package/package.json +16 -16
- package/src/client/index.ts +1 -1
package/dist/client.d.cts
CHANGED
|
@@ -3,7 +3,6 @@ import { MainPanelId } from "@deepseek-ai/dsh-client-ui-layout/client";
|
|
|
3
3
|
import { SessionId } from "@deepseek-ai/dsh-session";
|
|
4
4
|
import { InjectFace, PropsLocale, PropsRuntime } from "@deepseek-ai/dsh-client-ui-slots";
|
|
5
5
|
import "react";
|
|
6
|
-
//#region src/client/locales.d.ts
|
|
7
6
|
declare const zh: {
|
|
8
7
|
panel: string;
|
|
9
8
|
title: string;
|
|
@@ -84,8 +83,6 @@ declare const zh: {
|
|
|
84
83
|
"time.years": string;
|
|
85
84
|
};
|
|
86
85
|
type ConversationManagerKey = keyof typeof zh;
|
|
87
|
-
//#endregion
|
|
88
|
-
//#region src/client/controller.d.ts
|
|
89
86
|
interface SessionRowRecord {
|
|
90
87
|
sessionId: string;
|
|
91
88
|
title: string | null;
|
|
@@ -181,14 +178,8 @@ export declare class ConversationManagerController {
|
|
|
181
178
|
private collectGarbage;
|
|
182
179
|
private loadUsage;
|
|
183
180
|
}
|
|
184
|
-
//#endregion
|
|
185
|
-
//#region src/client/ConversationManagerIcon.d.ts
|
|
186
181
|
type ConversationManagerIconProps = PropsRuntime<"sidebar.panellist">;
|
|
187
|
-
//#endregion
|
|
188
|
-
//#region src/client/ConversationManagerPage.d.ts
|
|
189
182
|
type ConversationManagerPageProps = PropsRuntime<"main"> & PropsLocale<"conversationManager"> & InjectFace<ConversationManagerFace>;
|
|
190
|
-
//#endregion
|
|
191
|
-
//#region src/client/index.d.ts
|
|
192
183
|
declare module "@deepseek-ai/dsh-client-ui-slots" {
|
|
193
184
|
interface LocaleNamespaceMap {
|
|
194
185
|
conversationManager: ConversationManagerKey;
|
|
@@ -199,5 +190,4 @@ export declare const PANEL_ID: MainPanelId;
|
|
|
199
190
|
export declare const PANEL_ORDER = 1;
|
|
200
191
|
export declare const inject: string[];
|
|
201
192
|
export declare function apply(ctx: Context): void;
|
|
202
|
-
//#endregion
|
|
203
193
|
export type { ConversationManagerFace, ConversationManagerIconProps, ConversationManagerKey, ConversationManagerPageProps, ConversationManagerPorts };
|
package/dist/client.d.mts
CHANGED
|
@@ -3,7 +3,6 @@ import { MainPanelId } from "@deepseek-ai/dsh-client-ui-layout/client";
|
|
|
3
3
|
import { SessionId } from "@deepseek-ai/dsh-session";
|
|
4
4
|
import { InjectFace, PropsLocale, PropsRuntime } from "@deepseek-ai/dsh-client-ui-slots";
|
|
5
5
|
import "react";
|
|
6
|
-
//#region src/client/locales.d.ts
|
|
7
6
|
declare const zh: {
|
|
8
7
|
panel: string;
|
|
9
8
|
title: string;
|
|
@@ -84,8 +83,6 @@ declare const zh: {
|
|
|
84
83
|
"time.years": string;
|
|
85
84
|
};
|
|
86
85
|
type ConversationManagerKey = keyof typeof zh;
|
|
87
|
-
//#endregion
|
|
88
|
-
//#region src/client/controller.d.ts
|
|
89
86
|
interface SessionRowRecord {
|
|
90
87
|
sessionId: string;
|
|
91
88
|
title: string | null;
|
|
@@ -181,14 +178,8 @@ export declare class ConversationManagerController {
|
|
|
181
178
|
private collectGarbage;
|
|
182
179
|
private loadUsage;
|
|
183
180
|
}
|
|
184
|
-
//#endregion
|
|
185
|
-
//#region src/client/ConversationManagerIcon.d.ts
|
|
186
181
|
type ConversationManagerIconProps = PropsRuntime<"sidebar.panellist">;
|
|
187
|
-
//#endregion
|
|
188
|
-
//#region src/client/ConversationManagerPage.d.ts
|
|
189
182
|
type ConversationManagerPageProps = PropsRuntime<"main"> & PropsLocale<"conversationManager"> & InjectFace<ConversationManagerFace>;
|
|
190
|
-
//#endregion
|
|
191
|
-
//#region src/client/index.d.ts
|
|
192
183
|
declare module "@deepseek-ai/dsh-client-ui-slots" {
|
|
193
184
|
interface LocaleNamespaceMap {
|
|
194
185
|
conversationManager: ConversationManagerKey;
|
|
@@ -199,5 +190,4 @@ export declare const PANEL_ID: MainPanelId;
|
|
|
199
190
|
export declare const PANEL_ORDER = 1;
|
|
200
191
|
export declare const inject: string[];
|
|
201
192
|
export declare function apply(ctx: Context): void;
|
|
202
|
-
//#endregion
|
|
203
193
|
export type { ConversationManagerFace, ConversationManagerIconProps, ConversationManagerKey, ConversationManagerPageProps, ConversationManagerPorts };
|
package/dist/client.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
|
2
2
|
import { Button, IconCloseOutlineRegular, IconSearchOutlineRegular, Input, Modal, Row, Spinner, Stack, Tag, Text, relativeTime } from "@morlay/dsh-client-ui-primitives";
|
|
3
3
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { IconArchiveOutlineRegular } from "@deepseek-ai/dsh-client-ui-primitives";
|
|
5
|
-
|
|
5
|
+
// src/client/controller.ts
|
|
6
6
|
const SESSION_DELETE_PATH = "/api/morlay/v1/session/delete";
|
|
7
7
|
const SESSION_IMPORT_PATH = "/api/morlay/v1/session/import";
|
|
8
8
|
const SESSION_EXPORT_PATH = "/api/morlay/v1/session/export";
|
|
@@ -127,9 +127,8 @@ function downloadBlob(blob, filename) {
|
|
|
127
127
|
URL.revokeObjectURL(url);
|
|
128
128
|
}, 0);
|
|
129
129
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const css = ".AmU5Dq_page{width:100%;min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font-size:14px;line-height:1.6;display:flex;overflow:hidden}.AmU5Dq_listPane{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.AmU5Dq_pageScroll{scrollbar-gutter:stable;flex:1;min-height:0;overflow:auto}.AmU5Dq_pageContent{max-width:960px;margin:0 auto;padding:0 clamp(24px,4vw,48px) 48px}.AmU5Dq_pageHeading{justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;padding-top:28px;display:flex}[data-platform=darwin] .AmU5Dq_pageHeading{padding-top:calc(28px + var(--dsh-frame-top-clearance,0px))}.AmU5Dq_pageHeading h1{flex:1;min-width:0;margin:0;font-size:20px;font-weight:500;line-height:28px}.AmU5Dq_headingActions{flex:none;align-items:center;gap:8px;display:flex}.AmU5Dq_filters{flex-wrap:wrap;align-items:center;gap:8px 20px;margin-bottom:14px;display:flex}.AmU5Dq_filterTabs{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.AmU5Dq_filterTab{height:28px;color:var(--dsw-alias-label-tertiary);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:14px;flex:none;align-items:center;padding:0 10px;font-size:14px;line-height:22px;display:inline-flex}.AmU5Dq_filterTab:hover{background:var(--dsw-alias-interactive-bg-hover)}.AmU5Dq_filterTabActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.AmU5Dq_searchField{border:.5px solid var(--dsw-alias-border-l3);height:36px;color:var(--dsw-alias-label-tertiary);border-radius:12px;align-items:center;margin:0 0 16px;padding:0 10px;transition:border-color .15s;display:flex}.AmU5Dq_searchField:hover{border-color:var(--dsw-alias-border-l2)}.AmU5Dq_searchField:focus-within{border-color:var(--dsw-alias-state-business-primary)}.AmU5Dq_searchField>:first-child{background:0 0;border:0;border-radius:0;flex:1;min-width:0;height:100%;padding:0}.AmU5Dq_searchField>:first-child:focus-within{border-color:#0000}.AmU5Dq_searchField>:first-child svg{width:14px;height:14px}.AmU5Dq_searchField input::placeholder{color:var(--dsw-alias-label-caption)}.AmU5Dq_searchField input:focus-visible{outline:none}.AmU5Dq_searchField input::-webkit-search-cancel-button{display:none}.AmU5Dq_searchClear{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);flex:none;margin-right:-6px;padding:0}.AmU5Dq_searchClear svg{width:14px;height:14px}.AmU5Dq_list{flex-direction:column;gap:4px;min-width:0;display:flex}.AmU5Dq_status{text-align:center;flex:1;place-items:center;min-width:0;min-height:0;padding:24px;display:grid}.AmU5Dq_statusBody{flex-direction:column;align-items:center;gap:12px;display:flex}.AmU5Dq_statusText{color:var(--dsw-alias-label-tertiary);margin:0;font-size:14px;line-height:22px}.AmU5Dq_statusFailure{color:var(--dsw-alias-state-error-primary)}.AmU5Dq_listStatus{text-align:center;place-items:center;padding:32px 0;display:grid}";
|
|
130
|
+
// \0dsh-css-modules:/Users/morlay/src/github.com/morlay/dsh-plugin-main/packages/session/ui-conversation-manager/src/client/ConversationManagerPage.module.css.mjs
|
|
131
|
+
const css = ".hENcOW_page{width:100%;min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font-size:14px;line-height:1.6;display:flex;overflow:hidden}.hENcOW_listPane{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.hENcOW_pageScroll{scrollbar-gutter:stable;flex:1;min-height:0;overflow:auto}.hENcOW_pageContent{max-width:960px;margin:0 auto;padding:0 clamp(24px,4vw,48px) 48px}.hENcOW_pageHeading{justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;padding-top:28px;display:flex}[data-platform=darwin] .hENcOW_pageHeading{padding-top:calc(28px + var(--dsh-frame-top-clearance,0px))}.hENcOW_pageHeading h1{flex:1;min-width:0;margin:0;font-size:20px;font-weight:500;line-height:28px}.hENcOW_headingActions{flex:none;align-items:center;gap:8px;display:flex}.hENcOW_filters{flex-wrap:wrap;align-items:center;gap:8px 20px;margin-bottom:14px;display:flex}.hENcOW_filterTabs{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.hENcOW_filterTab{height:28px;color:var(--dsw-alias-label-tertiary);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:14px;flex:none;align-items:center;padding:0 10px;font-size:14px;line-height:22px;display:inline-flex}.hENcOW_filterTab:hover{background:var(--dsw-alias-interactive-bg-hover)}.hENcOW_filterTabActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.hENcOW_searchField{border:.5px solid var(--dsw-alias-border-l3);height:36px;color:var(--dsw-alias-label-tertiary);border-radius:12px;align-items:center;margin:0 0 16px;padding:0 10px;transition:border-color .15s;display:flex}.hENcOW_searchField:hover{border-color:var(--dsw-alias-border-l2)}.hENcOW_searchField:focus-within{border-color:var(--dsw-alias-state-business-primary)}.hENcOW_searchField>:first-child{background:0 0;border:0;border-radius:0;flex:1;min-width:0;height:100%;padding:0}.hENcOW_searchField>:first-child:focus-within{border-color:#0000}.hENcOW_searchField>:first-child svg{width:14px;height:14px}.hENcOW_searchField input::placeholder{color:var(--dsw-alias-label-caption)}.hENcOW_searchField input:focus-visible{outline:none}.hENcOW_searchField input::-webkit-search-cancel-button{display:none}.hENcOW_searchClear{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);flex:none;margin-right:-6px;padding:0}.hENcOW_searchClear svg{width:14px;height:14px}.hENcOW_list{flex-direction:column;gap:4px;min-width:0;display:flex}.hENcOW_status{text-align:center;flex:1;place-items:center;min-width:0;min-height:0;padding:24px;display:grid}.hENcOW_statusBody{flex-direction:column;align-items:center;gap:12px;display:flex}.hENcOW_statusText{color:var(--dsw-alias-label-tertiary);margin:0;font-size:14px;line-height:22px}.hENcOW_statusFailure{color:var(--dsw-alias-state-error-primary)}.hENcOW_listStatus{text-align:center;place-items:center;padding:32px 0;display:grid}";
|
|
133
132
|
const tagId = "@morlay/ui-conversation-manager/ConversationManagerPage.module.css";
|
|
134
133
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@morlay/ui-conversation-manager/ConversationManagerPage.module.css\"]") === null) {
|
|
135
134
|
const tag = document.createElement("style");
|
|
@@ -139,27 +138,26 @@ if (typeof document !== "undefined" && document.querySelector("style[data-plugin
|
|
|
139
138
|
document.head.appendChild(tag);
|
|
140
139
|
}
|
|
141
140
|
var ConversationManagerPage_module_css_default = {
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"statusBody": "
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"
|
|
157
|
-
"
|
|
158
|
-
"
|
|
159
|
-
"
|
|
141
|
+
"filterTab": "hENcOW_filterTab",
|
|
142
|
+
"list": "hENcOW_list",
|
|
143
|
+
"statusBody": "hENcOW_statusBody",
|
|
144
|
+
"statusText": "hENcOW_statusText",
|
|
145
|
+
"statusFailure": "hENcOW_statusFailure",
|
|
146
|
+
"pageScroll": "hENcOW_pageScroll",
|
|
147
|
+
"status": "hENcOW_status",
|
|
148
|
+
"searchClear": "hENcOW_searchClear",
|
|
149
|
+
"headingActions": "hENcOW_headingActions",
|
|
150
|
+
"searchField": "hENcOW_searchField",
|
|
151
|
+
"filters": "hENcOW_filters",
|
|
152
|
+
"page": "hENcOW_page",
|
|
153
|
+
"listPane": "hENcOW_listPane",
|
|
154
|
+
"pageContent": "hENcOW_pageContent",
|
|
155
|
+
"filterTabs": "hENcOW_filterTabs",
|
|
156
|
+
"pageHeading": "hENcOW_pageHeading",
|
|
157
|
+
"filterTabActive": "hENcOW_filterTabActive",
|
|
158
|
+
"listStatus": "hENcOW_listStatus"
|
|
160
159
|
};
|
|
161
|
-
|
|
162
|
-
//#region src/client/format.ts
|
|
160
|
+
// src/client/format.ts
|
|
163
161
|
function trim(value) {
|
|
164
162
|
return value >= 100 ? String(Math.round(value)) : value.toFixed(1).replace(/\.0$/u, "");
|
|
165
163
|
}
|
|
@@ -178,8 +176,7 @@ function formatPercent(value) {
|
|
|
178
176
|
if (!Number.isFinite(value) || value <= 0) return "0%";
|
|
179
177
|
return `${value >= 100 ? Math.round(value) : Math.round(value * 10) / 10}%`;
|
|
180
178
|
}
|
|
181
|
-
|
|
182
|
-
//#region src/client/ConversationManagerPage.tsx
|
|
179
|
+
// src/client/ConversationManagerPage.tsx
|
|
183
180
|
const PAGE_SIZE = 20;
|
|
184
181
|
const USAGE_SESSION_ROWS = 20;
|
|
185
182
|
function timeLabel(updatedAt, now, t) {
|
|
@@ -1002,13 +999,11 @@ function UsageView({ report, loading, error, tab, onTab, range, onRange, onlySub
|
|
|
1002
999
|
]
|
|
1003
1000
|
});
|
|
1004
1001
|
}
|
|
1005
|
-
|
|
1006
|
-
//#region src/client/ConversationManagerIcon.tsx
|
|
1002
|
+
// src/client/ConversationManagerIcon.tsx
|
|
1007
1003
|
function ConversationManagerIcon({ size }) {
|
|
1008
1004
|
return /* @__PURE__ */ jsx(IconArchiveOutlineRegular, { size });
|
|
1009
1005
|
}
|
|
1010
|
-
|
|
1011
|
-
//#region src/client/locales.ts
|
|
1006
|
+
// src/client/locales.ts
|
|
1012
1007
|
const zh = {
|
|
1013
1008
|
panel: "对话管理",
|
|
1014
1009
|
title: "对话管理",
|
|
@@ -1167,8 +1162,7 @@ const en = {
|
|
|
1167
1162
|
"time.months": "{n}mo",
|
|
1168
1163
|
"time.years": "{n}y"
|
|
1169
1164
|
};
|
|
1170
|
-
|
|
1171
|
-
//#region src/client/index.ts
|
|
1165
|
+
// src/client/index.ts
|
|
1172
1166
|
const NS = "conversationManager";
|
|
1173
1167
|
const PANEL_ID = "conversations";
|
|
1174
1168
|
const PANEL_ORDER = 1;
|
|
@@ -1207,5 +1201,4 @@ function apply(ctx) {
|
|
|
1207
1201
|
locale: NS
|
|
1208
1202
|
}, ConversationManagerIcon));
|
|
1209
1203
|
}
|
|
1210
|
-
//#endregion
|
|
1211
1204
|
export { ConversationManagerController, ConversationManagerRequestError, NS, PANEL_ID, PANEL_ORDER, apply, inject };
|
package/dist/index.cjs
CHANGED
package/dist/index.d.mts
CHANGED
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morlay/ui-conversation-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11-alpha.0",
|
|
4
4
|
"description": "「对话管理」全局面板页(浏览器半):会话与统计两层 Tabs——会话视图给出全量会话(含已归档)的搜索、分页、归档 / 取消归档 / 导出 / 删除、导入为新会话与孤儿数据 GC,统计视图给出全部对话的 token 用量。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"archived-sessions",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"./locale/*.json": "./locale/*.json"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@morlay/dsh-client-ui-primitives": "0.0.
|
|
39
|
+
"@morlay/dsh-client-ui-primitives": "0.0.14-alpha.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@testing-library/react": "^16.1.0",
|
|
@@ -45,19 +45,22 @@
|
|
|
45
45
|
"react-dom": "^18.2.0"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
49
|
-
"@deepseek-ai/dsh-api-session-controller": "^0.2.
|
|
50
|
-
"@deepseek-ai/dsh-client-locale": "^0.2.
|
|
51
|
-
"@deepseek-ai/dsh-client-ui-layout": "^0.2.
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.2.
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.
|
|
54
|
-
"@deepseek-ai/dsh-client-ui-session": "^0.2.
|
|
55
|
-
"@deepseek-ai/dsh-client-ui-sidebar": "^0.2.
|
|
56
|
-
"@deepseek-ai/dsh-client-ui-slots": "^0.2.
|
|
57
|
-
"@deepseek-ai/dsh-client-ui-workspace": "^0.2.
|
|
58
|
-
"@deepseek-ai/dsh-session": "^0.2.
|
|
48
|
+
"@deepseek-ai/cordis": "^4.0.6-alpha.1",
|
|
49
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.2.2-alpha.2",
|
|
50
|
+
"@deepseek-ai/dsh-client-locale": "^0.2.2-alpha.2",
|
|
51
|
+
"@deepseek-ai/dsh-client-ui-layout": "^0.2.2-alpha.2",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.2.2-alpha.2",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.2-alpha.2",
|
|
54
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.2.2-alpha.2",
|
|
55
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "^0.2.2-alpha.2",
|
|
56
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.2.2-alpha.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.2.2-alpha.2",
|
|
58
|
+
"@deepseek-ai/dsh-session": "^0.2.2-alpha.2",
|
|
59
59
|
"react": "^18.2.0"
|
|
60
60
|
},
|
|
61
|
+
"engines": {
|
|
62
|
+
"dsh": ">= 0.2.2-alpha.2 < 0.2.3"
|
|
63
|
+
},
|
|
61
64
|
"dsh": {
|
|
62
65
|
"client": {
|
|
63
66
|
"platform": "web",
|
|
@@ -72,9 +75,6 @@
|
|
|
72
75
|
]
|
|
73
76
|
}
|
|
74
77
|
},
|
|
75
|
-
"engines": {
|
|
76
|
-
"dsh": ">= 0.2.1-rc.1 < 0.2.2"
|
|
77
|
-
},
|
|
78
78
|
"scripts": {
|
|
79
79
|
"build": "pnpm exec tsdown"
|
|
80
80
|
}
|
package/src/client/index.ts
CHANGED
|
@@ -39,7 +39,7 @@ export const PANEL_ORDER = 1;
|
|
|
39
39
|
export const inject = ["slots", "locale", "uiWorkspace", "sessions"];
|
|
40
40
|
|
|
41
41
|
export function apply(ctx: ClientContext): void {
|
|
42
|
-
//
|
|
42
|
+
// 基础面(内联库)由 `@morlay/dsh-client-modules` 的 client 行统一装配;这里只注册本行的字段文案。
|
|
43
43
|
ctx.effect(() => ctx.locale.register(NS, { zh, en }), "ui-conversation-manager: dictionaries");
|
|
44
44
|
const t = ctx.locale.bind(NS);
|
|
45
45
|
// ctx.sessions 的类型被别的 client 半的声明占住(SessionStore),按既有做法从服务面取。
|