@nextclaw/ui 0.15.18 → 0.15.20
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/CHANGELOG.md +39 -0
- package/dist/assets/api-tWUa6l9J.js +13 -0
- package/dist/assets/app-presenter-provider-s-FrOinZ.js +106 -0
- package/dist/assets/{appearance-settings-page-BkQaPtQ-.js → appearance-settings-page-dMRBD7ni.js} +1 -1
- package/dist/assets/{book-open-WsEnuW9P.js → book-open-BQ29ZmDE.js} +1 -1
- package/dist/assets/{card-xVrS1b1T.js → card-CtKueklV.js} +1 -1
- package/dist/assets/{channels-list-page-CAWuTHSM.js → channels-list-page-C8y3rqYt.js} +2 -2
- package/dist/assets/chat-page-MXBltS3G.js +1 -0
- package/dist/assets/{config-split-page-xj0UtMow.js → config-split-page-uC6d_r9c.js} +1 -1
- package/dist/assets/{confirm-dialog-e2YCUzt1.js → confirm-dialog-C1pbqHZX.js} +1 -1
- package/dist/assets/desktop-update-config-DssP8LCk.js +1 -0
- package/dist/assets/{dist-Ca-jiFrK.js → dist-rYHnBo8t.js} +1 -1
- package/dist/assets/doc-browser-AXF1zRsM.js +1 -0
- package/dist/assets/doc-browser-D8ng4EUc.js +1 -0
- package/dist/assets/doc-browser-context-CPHNzQ8m.js +1 -0
- package/dist/assets/{eye-B30J471A.js → eye-CiJz3ODY.js} +1 -1
- package/dist/assets/{form-actions-CnSzu3WD.js → form-actions-BnZVzLZf.js} +1 -1
- package/dist/assets/index-CocHWEsI.js +2 -0
- package/dist/assets/index-DN6KM7WD.css +1 -0
- package/dist/assets/loader-circle-AOpK5kkW.js +1 -0
- package/dist/assets/{logo-badge-CISsltAo.js → logo-badge-BXI-Kdhd.js} +1 -1
- package/dist/assets/mcp-marketplace-page-5ogeBHnl.js +1 -0
- package/dist/assets/mcp-marketplace-page-CxNe-Q9Q.js +9 -0
- package/dist/assets/model-config-page-CR_mgEVp.js +1 -0
- package/dist/assets/{navigation-link-qPPUiLt0.js → navigation-link-C1cvB7y4.js} +1 -1
- package/dist/assets/plus-DI37QuHc.js +1 -0
- package/dist/assets/{popover-DHx55dbc.js → popover-ZoDwVwwd.js} +1 -1
- package/dist/assets/{provider-scoped-model-input-1TJxAhx6.js → provider-scoped-model-input-DIL6Ex_d.js} +1 -1
- package/dist/assets/{providers-config-page-BwHtHIPe.js → providers-config-page-D2NXVctW.js} +1 -1
- package/dist/assets/react-39CDNZlM.js +8 -0
- package/dist/assets/{refresh-cw-C7bynrWX.js → refresh-cw-DKewcdAl.js} +1 -1
- package/dist/assets/remote-DYOOO1YG.js +1 -0
- package/dist/assets/rotate-cw-PmqA8LQT.js +1 -0
- package/dist/assets/{runtime-config-page-BLrTVO3n.js → runtime-config-page-0lb5NyKc.js} +1 -1
- package/dist/assets/{save-CsRsFtHS.js → save-BrckuAXY.js} +1 -1
- package/dist/assets/{search-D0HtJIL-.js → search-BhXQB2TO.js} +1 -1
- package/dist/assets/{search-config-page-n1GElgij.js → search-config-page-DFOQ6SDJ.js} +1 -1
- package/dist/assets/{secrets-config-page-DbUc3Ggi.js → secrets-config-page-BqqeClqE.js} +2 -2
- package/dist/assets/security-config-13AtPIlm.js +1 -0
- package/dist/assets/{select-C1zfp9zM.js → select-CVzGGT38.js} +1 -1
- package/dist/assets/{settings-2-Ba3cLSN2.js → settings-2-BP6L2enG.js} +1 -1
- package/dist/assets/skeleton-OwCNQJ7M.js +1 -0
- package/dist/assets/{tabs-DmKgMKzb.js → tabs-B-QWjKCL.js} +1 -1
- package/dist/assets/{tag-chip-2vwlVUwM.js → tag-chip-C88mxjwx.js} +1 -1
- package/dist/assets/{trash-2-CUpWjNHu.js → trash-2-ck3t33I3.js} +1 -1
- package/dist/assets/use-config-BAr5bH2c.js +1 -0
- package/dist/assets/{use-confirm-dialog-CeUEE4p5.js → use-confirm-dialog-C4e0nG_4.js} +1 -1
- package/dist/assets/{use-viewport-layout-DaKJ-kap.js → use-viewport-layout-k1isXfNm.js} +1 -1
- package/dist/assets/x-C1ijNWcE.js +1 -0
- package/dist/index.html +28 -28
- package/package.json +9 -9
- package/src/features/chat/features/conversation/hooks/__tests__/use-session-run-queue.test.tsx +28 -0
- package/src/features/chat/features/conversation/hooks/use-session-run-queue.ts +4 -5
- package/src/features/chat/features/input/hooks/__tests__/use-chat-input-surface-state.test.tsx +13 -0
- package/src/features/chat/features/input/hooks/use-chat-input-surface-state.ts +31 -8
- package/src/features/chat/features/input/input-surface-plugins/__tests__/context-reference-plugin.test.ts +79 -9
- package/src/features/chat/features/input/input-surface-plugins/__tests__/slash-command-plugin.test.ts +16 -4
- package/src/features/chat/features/input/input-surface-plugins/chat-input-product-plugin-adapters.types.ts +10 -2
- package/src/features/chat/features/input/input-surface-plugins/context-reference-items.utils.ts +240 -0
- package/src/features/chat/features/input/input-surface-plugins/context-reference-plugin.utils.ts +62 -173
- package/src/features/chat/features/input/utils/__tests__/chat-inline-token.utils.test.ts +29 -0
- package/src/features/chat/features/input/utils/chat-composer-token-protocol.utils.ts +5 -0
- package/src/features/chat/features/input/utils/chat-inline-token.utils.ts +26 -5
- package/src/features/chat/features/message/components/__tests__/chat-inline-panel-app-card.test.tsx +35 -0
- package/src/features/chat/features/message/components/__tests__/chat-message-list.container.test.tsx +12 -1
- package/src/features/chat/features/message/components/chat-inline-file-preview.tsx +3 -1
- package/src/features/chat/features/message/components/chat-inline-panel-app-card.tsx +13 -5
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +10 -5
- package/src/features/chat/features/message/utils/__tests__/chat-message-show-content-tool-card.utils.test.ts +9 -0
- package/src/features/chat/features/message/utils/chat-inline-panel-app-card.utils.ts +4 -1
- package/src/features/chat/features/message/utils/chat-message-show-content-tool-card.utils.ts +29 -0
- package/src/features/chat/features/message/utils/chat-message-texts.utils.ts +1 -0
- package/src/features/chat/features/ncp/hooks/__tests__/use-ncp-agent-runtime-queue.test.tsx +32 -14
- package/src/features/chat/features/workspace/components/__tests__/workspace-file-content-preview.test.tsx +41 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-preview.tsx +4 -0
- package/src/features/chat/features/workspace/components/workspace-file-content-preview.tsx +15 -2
- package/src/features/chat/features/workspace/utils/chat-workspace-file-tab-persistence.utils.ts +11 -0
- package/src/features/chat/features/workspace/utils/chat-workspace-file-tab.utils.ts +1 -0
- package/src/features/chat/managers/__tests__/chat-thread.manager.test.ts +11 -8
- package/src/features/chat/managers/__tests__/chat-ui.manager.test.ts +6 -0
- package/src/features/chat/managers/chat-thread.manager.ts +2 -0
- package/src/features/chat/managers/chat-ui.manager.ts +10 -4
- package/src/features/chat/pages/__tests__/ncp-chat-page.test.ts +26 -0
- package/src/features/chat/stores/__tests__/chat-thread.store.test.ts +4 -0
- package/src/features/chat/stores/chat-thread.store.ts +6 -1
- package/src/shared/components/doc-browser/__tests__/doc-browser-context.test.tsx +32 -0
- package/src/shared/components/doc-browser/doc-browser-panel-parts.tsx +2 -0
- package/src/shared/components/doc-browser/managers/doc-browser.manager.ts +20 -38
- package/src/shared/components/doc-browser/types/doc-browser.types.ts +5 -0
- package/src/shared/components/doc-browser/utils/doc-browser-state.utils.ts +63 -0
- package/src/shared/hooks/use-projects.ts +2 -1
- package/src/shared/lib/i18n/locales/en-US/chat.json +14 -4
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +14 -4
- package/dist/assets/api-D5UCLVE_.js +0 -13
- package/dist/assets/app-presenter-provider-De7Zwitu.js +0 -106
- package/dist/assets/chat-page-AvOuaxuv.js +0 -1
- package/dist/assets/desktop-update-config-D5NIaimo.js +0 -1
- package/dist/assets/doc-browser-B2tNEKrJ.js +0 -1
- package/dist/assets/doc-browser-CZX6I6CU.js +0 -1
- package/dist/assets/doc-browser-context-CGz0LULR.js +0 -1
- package/dist/assets/index-B5AoUrMf.js +0 -2
- package/dist/assets/index-QveCjxCj.css +0 -1
- package/dist/assets/loader-circle-DjwSRQHW.js +0 -1
- package/dist/assets/mcp-marketplace-page-BZa7p7Qf.js +0 -1
- package/dist/assets/mcp-marketplace-page-CPcPzMUQ.js +0 -9
- package/dist/assets/model-config-page-D6ex3_NM.js +0 -1
- package/dist/assets/plus-C45awBb1.js +0 -1
- package/dist/assets/react-DerwD2EA.js +0 -8
- package/dist/assets/remote-B6TXClIg.js +0 -1
- package/dist/assets/rotate-cw-Bhx0XkQP.js +0 -1
- package/dist/assets/security-config-n2WHhHXV.js +0 -1
- package/dist/assets/skeleton-DL5npsVL.js +0 -1
- package/dist/assets/use-config-BvxDWV-M.js +0 -1
- package/dist/assets/x-DGdYT7rH.js +0 -1
|
@@ -8,10 +8,12 @@ import type {
|
|
|
8
8
|
DocBrowserTab,
|
|
9
9
|
} from '@/shared/components/doc-browser/types/doc-browser.types';
|
|
10
10
|
import {
|
|
11
|
+
appendManualNavigation,
|
|
11
12
|
createDocBrowserActiveHistoryEntry,
|
|
12
13
|
createDefaultDocBrowserState,
|
|
13
14
|
createDocBrowserTab,
|
|
14
15
|
normalizeDocBrowserDockedWidth,
|
|
16
|
+
updateTabForOpen,
|
|
15
17
|
} from '@/shared/components/doc-browser/utils/doc-browser-state.utils';
|
|
16
18
|
import {
|
|
17
19
|
DOC_BROWSER_HOME_TAB_KIND,
|
|
@@ -45,14 +47,6 @@ function updateActiveTab(state: DocBrowserState, updater: (tab: DocBrowserTab) =
|
|
|
45
47
|
return updateTab(state, state.activeTabId, updater);
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
function appendManualNavigation(tab: DocBrowserTab, url: string): Pick<DocBrowserTab, 'history' | 'historyIndex'> {
|
|
49
|
-
const history = [...tab.history.slice(0, tab.historyIndex + 1), url];
|
|
50
|
-
return {
|
|
51
|
-
history,
|
|
52
|
-
historyIndex: history.length - 1,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
50
|
function areActiveHistoryEntriesEquivalent(
|
|
57
51
|
routeResolver: DocBrowserRouteResolver,
|
|
58
52
|
current: DocBrowserActiveHistoryEntry,
|
|
@@ -140,34 +134,6 @@ function restoreActiveHistoryEntry(
|
|
|
140
134
|
);
|
|
141
135
|
}
|
|
142
136
|
|
|
143
|
-
function updateTabForOpen(
|
|
144
|
-
routeResolver: DocBrowserRouteResolver,
|
|
145
|
-
tab: DocBrowserTab,
|
|
146
|
-
target: DocBrowserRouteTarget,
|
|
147
|
-
options?: DocBrowserOpenOptions,
|
|
148
|
-
dedupeKey?: string,
|
|
149
|
-
): DocBrowserTab {
|
|
150
|
-
const baseTab = {
|
|
151
|
-
...tab,
|
|
152
|
-
title: options?.title || target.title || tab.title,
|
|
153
|
-
kind: target.kind,
|
|
154
|
-
resourceUri: target.resourceUri ?? target.url,
|
|
155
|
-
dockIcon: options?.dockIcon ?? target.dockIcon,
|
|
156
|
-
dedupeKey,
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
if (routeResolver.areUrlsEquivalent(tab.currentUrl, target.url, tab.kind, target.kind)) {
|
|
160
|
-
return baseTab;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return {
|
|
164
|
-
...baseTab,
|
|
165
|
-
currentUrl: target.url,
|
|
166
|
-
...appendManualNavigation(tab, target.url),
|
|
167
|
-
navVersion: tab.navVersion + 1,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
137
|
function isClosedDefaultHomeState(state: DocBrowserState, activeTab?: DocBrowserTab): boolean {
|
|
172
138
|
return !state.isOpen
|
|
173
139
|
&& state.tabs.length === 1
|
|
@@ -213,7 +179,15 @@ function openResolvedDocBrowserState(
|
|
|
213
179
|
}
|
|
214
180
|
|
|
215
181
|
if (shouldForceNewTab || dedupeKey || !activeTab || activeTab.kind !== target.kind) {
|
|
216
|
-
const newTab = createDocBrowserTab(
|
|
182
|
+
const newTab = createDocBrowserTab(
|
|
183
|
+
target.url,
|
|
184
|
+
target.kind,
|
|
185
|
+
title ?? target.title,
|
|
186
|
+
dedupeKey,
|
|
187
|
+
target.resourceUri ?? target.url,
|
|
188
|
+
options?.dockIcon ?? target.dockIcon,
|
|
189
|
+
target.contentParams,
|
|
190
|
+
);
|
|
217
191
|
if (isClosedDefaultHomeState(prev, activeTab)) {
|
|
218
192
|
const nextState = {
|
|
219
193
|
...prev,
|
|
@@ -257,7 +231,15 @@ function openDocBrowserState(
|
|
|
257
231
|
kind: options?.kind,
|
|
258
232
|
url,
|
|
259
233
|
});
|
|
260
|
-
return openResolvedDocBrowserState(
|
|
234
|
+
return openResolvedDocBrowserState(
|
|
235
|
+
routeResolver,
|
|
236
|
+
prev,
|
|
237
|
+
{
|
|
238
|
+
...target,
|
|
239
|
+
contentParams: options?.contentParams,
|
|
240
|
+
},
|
|
241
|
+
options,
|
|
242
|
+
);
|
|
261
243
|
}
|
|
262
244
|
|
|
263
245
|
export class DocBrowserManager {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { UiContentParams } from '@nextclaw/shared';
|
|
2
|
+
|
|
1
3
|
export type DocBrowserMode = 'floating' | 'docked';
|
|
2
4
|
export type DocBrowserTabKind = 'docs' | 'content' | (string & {});
|
|
3
5
|
|
|
@@ -7,6 +9,7 @@ export type DocBrowserTab = {
|
|
|
7
9
|
title: string;
|
|
8
10
|
currentUrl: string;
|
|
9
11
|
resourceUri?: string;
|
|
12
|
+
contentParams?: UiContentParams;
|
|
10
13
|
dockIcon?: DocBrowserDockIcon;
|
|
11
14
|
dedupeKey?: string;
|
|
12
15
|
history: string[];
|
|
@@ -21,6 +24,7 @@ export type DocBrowserRouteTarget = {
|
|
|
21
24
|
historyPolicy: 'managed' | 'none';
|
|
22
25
|
kind: DocBrowserTabKind;
|
|
23
26
|
resourceUri?: string;
|
|
27
|
+
contentParams?: UiContentParams;
|
|
24
28
|
title: string;
|
|
25
29
|
url: string;
|
|
26
30
|
};
|
|
@@ -71,6 +75,7 @@ export type DocBrowserOpenOptions = {
|
|
|
71
75
|
newTab?: boolean;
|
|
72
76
|
title?: string;
|
|
73
77
|
kind?: DocBrowserTabKind;
|
|
78
|
+
contentParams?: UiContentParams;
|
|
74
79
|
};
|
|
75
80
|
|
|
76
81
|
export type DocBrowserState = {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
DocBrowserActiveHistoryEntry,
|
|
3
3
|
DocBrowserDockIcon,
|
|
4
|
+
DocBrowserOpenOptions,
|
|
5
|
+
DocBrowserRouteResolver,
|
|
6
|
+
DocBrowserRouteTarget,
|
|
4
7
|
DocBrowserState,
|
|
5
8
|
DocBrowserTab,
|
|
6
9
|
DocBrowserTabKind,
|
|
@@ -11,6 +14,10 @@ import {
|
|
|
11
14
|
inferTabTitle,
|
|
12
15
|
} from './doc-browser-url.utils';
|
|
13
16
|
import { t } from '@/shared/lib/i18n';
|
|
17
|
+
import {
|
|
18
|
+
createUiContentParamsWindowName,
|
|
19
|
+
type UiContentParams,
|
|
20
|
+
} from '@nextclaw/shared';
|
|
14
21
|
|
|
15
22
|
export const DOC_BROWSER_DOCKED_DEFAULT_WIDTH = 420;
|
|
16
23
|
export const DOC_BROWSER_DOCKED_MIN_WIDTH = 320;
|
|
@@ -36,6 +43,7 @@ export function createDocBrowserTab(
|
|
|
36
43
|
dedupeKey?: string,
|
|
37
44
|
resourceUri?: string,
|
|
38
45
|
dockIcon?: DocBrowserDockIcon,
|
|
46
|
+
contentParams?: UiContentParams,
|
|
39
47
|
): DocBrowserTab {
|
|
40
48
|
const tabTitle = title?.trim() || inferTabTitle(url, kind, kind === 'docs' ? t('docBrowserHelp') : 'Detail');
|
|
41
49
|
const normalizedResourceUri = resourceUri?.trim();
|
|
@@ -46,6 +54,7 @@ export function createDocBrowserTab(
|
|
|
46
54
|
title: tabTitle,
|
|
47
55
|
currentUrl: url,
|
|
48
56
|
resourceUri: normalizedResourceUri ? normalizedResourceUri : undefined,
|
|
57
|
+
contentParams,
|
|
49
58
|
dockIcon,
|
|
50
59
|
dedupeKey,
|
|
51
60
|
history: [url],
|
|
@@ -54,6 +63,60 @@ export function createDocBrowserTab(
|
|
|
54
63
|
};
|
|
55
64
|
}
|
|
56
65
|
|
|
66
|
+
export function appendManualNavigation(
|
|
67
|
+
tab: DocBrowserTab,
|
|
68
|
+
url: string,
|
|
69
|
+
): Pick<DocBrowserTab, 'history' | 'historyIndex'> {
|
|
70
|
+
const history = [...tab.history.slice(0, tab.historyIndex + 1), url];
|
|
71
|
+
return {
|
|
72
|
+
history,
|
|
73
|
+
historyIndex: history.length - 1,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function updateTabForOpen(
|
|
78
|
+
routeResolver: DocBrowserRouteResolver,
|
|
79
|
+
tab: DocBrowserTab,
|
|
80
|
+
target: DocBrowserRouteTarget,
|
|
81
|
+
options?: DocBrowserOpenOptions,
|
|
82
|
+
dedupeKey?: string,
|
|
83
|
+
): DocBrowserTab {
|
|
84
|
+
const baseTab = {
|
|
85
|
+
...tab,
|
|
86
|
+
title: options?.title || target.title || tab.title,
|
|
87
|
+
kind: target.kind,
|
|
88
|
+
resourceUri: target.resourceUri ?? target.url,
|
|
89
|
+
dockIcon: options?.dockIcon ?? target.dockIcon,
|
|
90
|
+
dedupeKey,
|
|
91
|
+
contentParams: target.contentParams,
|
|
92
|
+
};
|
|
93
|
+
const hasSameUrl = routeResolver.areUrlsEquivalent(
|
|
94
|
+
tab.currentUrl,
|
|
95
|
+
target.url,
|
|
96
|
+
tab.kind,
|
|
97
|
+
target.kind,
|
|
98
|
+
);
|
|
99
|
+
if (
|
|
100
|
+
hasSameUrl &&
|
|
101
|
+
createUiContentParamsWindowName(tab.contentParams) ===
|
|
102
|
+
createUiContentParamsWindowName(target.contentParams)
|
|
103
|
+
) {
|
|
104
|
+
return baseTab;
|
|
105
|
+
}
|
|
106
|
+
if (hasSameUrl) {
|
|
107
|
+
return {
|
|
108
|
+
...baseTab,
|
|
109
|
+
navVersion: tab.navVersion + 1,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
...baseTab,
|
|
114
|
+
currentUrl: target.url,
|
|
115
|
+
...appendManualNavigation(tab, target.url),
|
|
116
|
+
navVersion: tab.navVersion + 1,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
57
120
|
export function createDocBrowserActiveHistoryEntry(tab: DocBrowserTab): DocBrowserActiveHistoryEntry {
|
|
58
121
|
return {
|
|
59
122
|
kind: tab.kind,
|
|
@@ -5,10 +5,11 @@ import { t } from "@/shared/lib/i18n";
|
|
|
5
5
|
|
|
6
6
|
const PROJECTS_QUERY_KEY = ["projects"] as const;
|
|
7
7
|
|
|
8
|
-
export function useProjects() {
|
|
8
|
+
export function useProjects(options: { enabled?: boolean } = {}) {
|
|
9
9
|
return useQuery({
|
|
10
10
|
queryKey: PROJECTS_QUERY_KEY,
|
|
11
11
|
queryFn: fetchProjects,
|
|
12
|
+
enabled: options.enabled ?? true,
|
|
12
13
|
staleTime: 30_000,
|
|
13
14
|
});
|
|
14
15
|
}
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"chatProcessSummaryCancelled": "cancelled",
|
|
201
201
|
"chatRuntimeInitializing": "Chat is still initializing. You can keep typing and send once startup finishes.",
|
|
202
202
|
"chatRuntimeInitializationFailed": "Chat startup failed. Please retry in a moment or inspect the service logs.",
|
|
203
|
-
"chatInputPlaceholder": "Type a message, / for commands, apps or skills, @ for files, folders or panel apps, Enter to send, Shift + Enter for newline",
|
|
203
|
+
"chatInputPlaceholder": "Type a message, / for commands, apps or skills, @ for files, folders, projects or panel apps, Enter to send, Shift + Enter for newline",
|
|
204
204
|
"chatInputPlaceholderCompact": "Message NextClaw...",
|
|
205
205
|
"chatInputHint": "Multi-turn context is preserved in the current session.",
|
|
206
206
|
"chatSlashSection": "Slash menu",
|
|
@@ -239,15 +239,15 @@
|
|
|
239
239
|
"chatPanelAppReferenceNoDescription": "No panel app description",
|
|
240
240
|
"chatContextReferenceLoading": "Searching references...",
|
|
241
241
|
"chatContextReferenceSection": "References",
|
|
242
|
-
"chatContextReferenceNoResult": "No matching files, folders, or panel apps",
|
|
243
|
-
"chatContextReferenceHint": "Type @ to reference a file, folder, or panel app",
|
|
242
|
+
"chatContextReferenceNoResult": "No matching files, folders, projects, or panel apps",
|
|
243
|
+
"chatContextReferenceHint": "Type @ to reference a file, folder, project, or panel app",
|
|
244
244
|
"chatContextReferenceItemHint": "Press Enter to add this reference.",
|
|
245
245
|
"chatContextReferenceFilesLabel": "Files & Folders",
|
|
246
246
|
"chatContextReferenceFilesType": "Project Context",
|
|
247
247
|
"chatContextReferenceFilesDescription": "Search and reference files or folders in the current project.",
|
|
248
248
|
"chatContextReferenceFilesHint": "Press Enter to browse files and folders.",
|
|
249
249
|
"chatContextReferenceBack": "Back to all references",
|
|
250
|
-
"chatContextReferenceBackDescription": "Return to the unified file, folder, and panel app reference menu.",
|
|
250
|
+
"chatContextReferenceBackDescription": "Return to the unified file, folder, project, and panel app reference menu.",
|
|
251
251
|
"chatContextReferenceBackHint": "Press Enter to go back.",
|
|
252
252
|
"chatContextReferenceParent": "Up one folder",
|
|
253
253
|
"chatContextReferenceParentDescription": "Browse the parent folder without closing the reference menu.",
|
|
@@ -255,6 +255,15 @@
|
|
|
255
255
|
"chatContextReferenceCurrentDirectory": "Reference current folder",
|
|
256
256
|
"chatContextReferenceFileDescription": "Use this file as explicit context for the current message.",
|
|
257
257
|
"chatContextReferenceDirectoryDescription": "Use this folder as a context scope for the current message.",
|
|
258
|
+
"chatContextReferenceProjectsLabel": "Projects",
|
|
259
|
+
"chatContextReferenceProjectsType": "Project Context",
|
|
260
|
+
"chatContextReferenceProjectsDescription": "Choose a registered project as context for the current message.",
|
|
261
|
+
"chatContextReferenceProjectsHint": "Press Enter to browse projects.",
|
|
262
|
+
"chatContextReferenceProjectType": "Project",
|
|
263
|
+
"chatContextReferenceProjectDescription": "Use this project's name, path, and directory outline as explicit context for the current message.",
|
|
264
|
+
"chatContextReferenceProjectPath": "Project path",
|
|
265
|
+
"chatContextReferenceProjectSection": "Projects",
|
|
266
|
+
"chatContextReferenceProjectsLoadFailed": "Failed to load projects",
|
|
258
267
|
"chatContextReferenceProjectRoot": "Project directory",
|
|
259
268
|
"chatContextReferenceWorkspaceSection": "Files & Folders",
|
|
260
269
|
"chatContextReferenceSearchFailed": "File search failed",
|
|
@@ -388,6 +397,7 @@
|
|
|
388
397
|
"chatMessageCopy": "Copy",
|
|
389
398
|
"chatMessageCopied": "Copied",
|
|
390
399
|
"chatMermaidDiagram": "Diagram",
|
|
400
|
+
"chatMermaidExpand": "Expand diagram",
|
|
391
401
|
"chatMermaidLoading": "Rendering diagram…",
|
|
392
402
|
"chatMermaidRenderError": "Diagram could not be rendered; showing source instead",
|
|
393
403
|
"chatSidebarNewTask": "New Task",
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"chatProcessSummaryCancelled": "已取消",
|
|
201
201
|
"chatRuntimeInitializing": "聊天能力正在初始化。你可以先输入内容,完成后即可发送。",
|
|
202
202
|
"chatRuntimeInitializationFailed": "聊天能力启动失败,请稍后重试或检查服务日志。",
|
|
203
|
-
"chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@
|
|
203
|
+
"chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@ 引用文件、目录、项目或面板应用,Enter 发送,Shift + Enter 换行",
|
|
204
204
|
"chatInputPlaceholderCompact": "发消息...",
|
|
205
205
|
"chatInputHint": "支持多轮上下文,默认走当前会话。",
|
|
206
206
|
"chatSlashSection": "斜杠菜单",
|
|
@@ -239,15 +239,15 @@
|
|
|
239
239
|
"chatPanelAppReferenceNoDescription": "暂无面板应用描述",
|
|
240
240
|
"chatContextReferenceLoading": "搜索引用中…",
|
|
241
241
|
"chatContextReferenceSection": "引用",
|
|
242
|
-
"chatContextReferenceNoResult": "
|
|
243
|
-
"chatContextReferenceHint": "输入 @
|
|
242
|
+
"chatContextReferenceNoResult": "没有匹配的文件、目录、项目或面板应用",
|
|
243
|
+
"chatContextReferenceHint": "输入 @ 引用文件、目录、项目或面板应用",
|
|
244
244
|
"chatContextReferenceItemHint": "回车添加这个引用。",
|
|
245
245
|
"chatContextReferenceFilesLabel": "文件与文件夹",
|
|
246
246
|
"chatContextReferenceFilesType": "项目上下文",
|
|
247
247
|
"chatContextReferenceFilesDescription": "搜索并引用当前项目中的文件或目录。",
|
|
248
248
|
"chatContextReferenceFilesHint": "回车进入文件与文件夹。",
|
|
249
249
|
"chatContextReferenceBack": "返回全部引用",
|
|
250
|
-
"chatContextReferenceBackDescription": "
|
|
250
|
+
"chatContextReferenceBackDescription": "返回文件、目录、项目和面板应用的统一引用入口。",
|
|
251
251
|
"chatContextReferenceBackHint": "回车返回。",
|
|
252
252
|
"chatContextReferenceParent": "返回上一级",
|
|
253
253
|
"chatContextReferenceParentDescription": "在不关闭引用菜单的情况下浏览上一级文件夹。",
|
|
@@ -255,6 +255,15 @@
|
|
|
255
255
|
"chatContextReferenceCurrentDirectory": "引用当前文件夹",
|
|
256
256
|
"chatContextReferenceFileDescription": "把这个文件作为本次消息的显式上下文。",
|
|
257
257
|
"chatContextReferenceDirectoryDescription": "把这个目录作为本次消息的上下文范围。",
|
|
258
|
+
"chatContextReferenceProjectsLabel": "项目",
|
|
259
|
+
"chatContextReferenceProjectsType": "项目上下文",
|
|
260
|
+
"chatContextReferenceProjectsDescription": "从已登记项目中选择一个,作为本次消息的上下文。",
|
|
261
|
+
"chatContextReferenceProjectsHint": "回车进入项目列表。",
|
|
262
|
+
"chatContextReferenceProjectType": "项目",
|
|
263
|
+
"chatContextReferenceProjectDescription": "把这个项目的名称、路径和目录概览作为本次消息的显式上下文。",
|
|
264
|
+
"chatContextReferenceProjectPath": "项目路径",
|
|
265
|
+
"chatContextReferenceProjectSection": "项目",
|
|
266
|
+
"chatContextReferenceProjectsLoadFailed": "项目加载失败",
|
|
258
267
|
"chatContextReferenceProjectRoot": "项目目录",
|
|
259
268
|
"chatContextReferenceWorkspaceSection": "文件与文件夹",
|
|
260
269
|
"chatContextReferenceSearchFailed": "文件搜索失败",
|
|
@@ -388,6 +397,7 @@
|
|
|
388
397
|
"chatMessageCopy": "复制",
|
|
389
398
|
"chatMessageCopied": "已复制",
|
|
390
399
|
"chatMermaidDiagram": "图表",
|
|
400
|
+
"chatMermaidExpand": "放大图表",
|
|
391
401
|
"chatMermaidLoading": "正在渲染图表…",
|
|
392
402
|
"chatMermaidRenderError": "图表无法渲染,已显示源代码",
|
|
393
403
|
"chatSidebarNewTask": "新任务",
|