@nextclaw/ui 0.20.0-beta.0 → 0.20.1
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 +41 -0
- package/dist/assets/{api-C2iYhdTe.js → api-BBFMpRGl.js} +1 -1
- package/dist/assets/{appearance-settings-page-BwQDQr0n.js → appearance-settings-page-C1Erayzl.js} +1 -1
- package/dist/assets/{book-open-C0IlT9zs.js → book-open-BhTIpBKg.js} +1 -1
- package/dist/assets/{channels-list-page-B0z4bh8e.js → channels-list-page-OTCkjMOW.js} +1 -1
- package/dist/assets/{config-split-page-VDTf3zZb.js → config-split-page-By7p-4X-.js} +1 -1
- package/dist/assets/{confirm-dialog-BI_Vt2s_.js → confirm-dialog-xpl1Yl7r.js} +1 -1
- package/dist/assets/{createLucideIcon-Bydi9Gc5.js → createLucideIcon-B_8khHn8.js} +1 -1
- package/dist/assets/{desktop-update-config-DVoD6NxG.js → desktop-update-config-CGFfa7-Z.js} +1 -1
- package/dist/assets/{dist-CmHtkFbs.js → dist-CXN62DSs.js} +1 -1
- package/dist/assets/{dist-A5btQciA.js → dist-DdE-kCbi.js} +1 -1
- package/dist/assets/{doc-browser-Cm_tMZ_C.js → doc-browser-5xrHcQ2z.js} +1 -1
- package/dist/assets/doc-browser-c2yO477-.js +1 -0
- package/dist/assets/{doc-browser-context-Bxw0ora-.js → doc-browser-context-B8NCuMv5.js} +1 -1
- package/dist/assets/{extensions-CG4voDCh.js → extensions-CMctxyTf.js} +1 -1
- package/dist/assets/{form-actions-lv47uGIB.js → form-actions-BFgTdxqI.js} +1 -1
- package/dist/assets/index-DUCA8m2w.js +109 -0
- package/dist/assets/loader-circle-CbdTrSp3.js +1 -0
- package/dist/assets/{mcp-marketplace-page-BSk0qUOX.js → mcp-marketplace-page-DGve0muV.js} +1 -1
- package/dist/assets/mcp-marketplace-page-_37VzG2q.js +1 -0
- package/dist/assets/{model-config-page-c8RnUGoH.js → model-config-page-DyC5H0bu.js} +1 -1
- package/dist/assets/{navigation-link-D0agTj5t.js → navigation-link-BwWrm4k1.js} +1 -1
- package/dist/assets/plus-DbeE4r-Q.js +1 -0
- package/dist/assets/{privacy-settings-page-CPkyTvEE.js → privacy-settings-page--MOnhAZ6.js} +1 -1
- package/dist/assets/{providers-config-page-CGUEb5Dx.js → providers-config-page-ChL3FUvK.js} +1 -1
- package/dist/assets/react-DVMmnPWz.js +8 -0
- package/dist/assets/{refresh-cw-DjgY2Eju.js → refresh-cw-B7NmPJ_Z.js} +1 -1
- package/dist/assets/remote-DFoxj4ls.js +1 -0
- package/dist/assets/{rotate-cw-Dot4PVh0.js → rotate-cw-B0ajMaHu.js} +1 -1
- package/dist/assets/{runtime-config-page-C6nzqTHg.js → runtime-config-page-BQdT3nmd.js} +1 -1
- package/dist/assets/{save-B-jdTe_c.js → save-DWnYYpgQ.js} +1 -1
- package/dist/assets/{search-CEp2AIiV.js → search-D6pX7FC-.js} +1 -1
- package/dist/assets/{search-config-page-Dp5guS5O.js → search-config-page-Cx3o_675.js} +1 -1
- package/dist/assets/{secrets-config-page-C7nRMjiv.js → secrets-config-page-tyFl7Rvt.js} +1 -1
- package/dist/assets/security-config-CUTUm6JT.js +1 -0
- package/dist/assets/{select-BNA3cma8.js → select-qEtFTWB5.js} +1 -1
- package/dist/assets/skeleton-7MYPzn8w.js +1 -0
- package/dist/assets/{tag-chip-DmCNi4-9.js → tag-chip-vcjAYdV_.js} +1 -1
- package/dist/assets/x-DThaS5ZL.js +1 -0
- package/dist/index.html +20 -20
- package/package.json +8 -8
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +33 -4
- package/src/features/chat/features/message/utils/__tests__/chat-message-file-operation.utils.test.ts +186 -0
- package/src/features/chat/features/message/utils/__tests__/chat-message-texts.utils.test.ts +9 -0
- package/src/features/chat/features/message/utils/__tests__/chat-message-timeline.utils.test.ts +71 -0
- package/src/features/chat/features/message/utils/__tests__/chat-message-trigger-details.utils.test.ts +112 -0
- package/src/features/chat/features/message/utils/chat-message-part.utils.ts +1 -1
- package/src/features/chat/features/message/utils/chat-message-texts.utils.ts +36 -0
- package/src/features/chat/features/message/utils/chat-message-trigger-details.utils.ts +118 -0
- package/src/features/chat/features/ncp/hooks/__tests__/use-ncp-agent-runtime.test.tsx +90 -1
- package/src/features/chat/features/session/utils/ncp-session-context-metadata.utils.ts +5 -1
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel-content.test.tsx +5 -5
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +3 -40
- package/src/features/chat/managers/__tests__/chat-completion-notification.manager.test.ts +70 -0
- package/src/features/chat/managers/chat-completion-notification.manager.ts +23 -6
- package/src/shared/lib/i18n/locales/en-US/chat.json +21 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +21 -0
- package/dist/assets/doc-browser-Dto54tCf.js +0 -1
- package/dist/assets/index-BTSwNDVi.js +0 -109
- package/dist/assets/loader-circle-CkaqeEne.js +0 -1
- package/dist/assets/mcp-marketplace-page-BgZGc-S_.js +0 -1
- package/dist/assets/plus-BiMjkv3R.js +0 -1
- package/dist/assets/react-BMYFkaGi.js +0 -8
- package/dist/assets/remote-1LxkpRED.js +0 -1
- package/dist/assets/security-config-DvHUDxSg.js +0 -1
- package/dist/assets/skeleton-CbroEO8Q.js +0 -1
- package/dist/assets/x-BTo5-A8h.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { act, renderHook, waitFor } from "@testing-library/react";
|
|
1
|
+
import { act, render, renderHook, waitFor } from "@testing-library/react";
|
|
2
2
|
import {
|
|
3
3
|
type NcpAgentClientEndpoint,
|
|
4
4
|
type NcpAgentSendEnvelope,
|
|
@@ -158,6 +158,29 @@ class ExistingSessionLiveClient implements NcpAgentClientEndpoint {
|
|
|
158
158
|
};
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
function RuntimeMessagesProbe({
|
|
162
|
+
client,
|
|
163
|
+
manager,
|
|
164
|
+
}: {
|
|
165
|
+
client: NcpAgentClientEndpoint;
|
|
166
|
+
manager: DefaultNcpAgentConversationStateManager;
|
|
167
|
+
}) {
|
|
168
|
+
const { visibleMessages } = useNcpAgentRuntime({
|
|
169
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
170
|
+
client,
|
|
171
|
+
manager,
|
|
172
|
+
});
|
|
173
|
+
return (
|
|
174
|
+
<div data-testid="runtime-messages">
|
|
175
|
+
{visibleMessages.map((message) => (
|
|
176
|
+
<div key={message.id} data-message-id={message.id}>
|
|
177
|
+
{message.id}
|
|
178
|
+
</div>
|
|
179
|
+
))}
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
161
184
|
function readAssistantText(messages: readonly NcpMessage[]): string {
|
|
162
185
|
const assistant = messages.find((message) => message.role === "assistant");
|
|
163
186
|
return assistant?.parts
|
|
@@ -421,6 +444,72 @@ describe("useNcpAgentRuntime", () => {
|
|
|
421
444
|
]);
|
|
422
445
|
});
|
|
423
446
|
|
|
447
|
+
it("keeps the live assistant boundary and DOM identity when a steered user has an earlier timestamp", async () => {
|
|
448
|
+
const client = new DeferredSendClient();
|
|
449
|
+
const manager = new DefaultNcpAgentConversationStateManager();
|
|
450
|
+
manager.hydrate({
|
|
451
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
452
|
+
messages: [{
|
|
453
|
+
id: "user-mt7jp7vd",
|
|
454
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
455
|
+
role: "user",
|
|
456
|
+
status: "final",
|
|
457
|
+
parts: [{ type: "text", text: "first" }],
|
|
458
|
+
timestamp: "2026-08-24T18:04:10.460Z",
|
|
459
|
+
}],
|
|
460
|
+
});
|
|
461
|
+
await manager.dispatchBatch([
|
|
462
|
+
{
|
|
463
|
+
type: NcpEventType.RunStarted,
|
|
464
|
+
payload: {
|
|
465
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
466
|
+
runId: "agent-run-7c65d8b1-6bda-4f08-a2ad-d5f5318366fb",
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
type: NcpEventType.MessageReasoningDelta,
|
|
471
|
+
payload: {
|
|
472
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
473
|
+
messageId: "assistant-message-2629eaf9-c4ce-4562-b22d-c70f1e8c85e2",
|
|
474
|
+
delta: "Planning",
|
|
475
|
+
},
|
|
476
|
+
},
|
|
477
|
+
]);
|
|
478
|
+
|
|
479
|
+
const view = render(<RuntimeMessagesProbe client={client} manager={manager} />);
|
|
480
|
+
const assistantSelector = '[data-message-id="assistant-message-2629eaf9-c4ce-4562-b22d-c70f1e8c85e2"]';
|
|
481
|
+
const assistantNode = view.container.querySelector(assistantSelector);
|
|
482
|
+
expect(assistantNode).not.toBeNull();
|
|
483
|
+
|
|
484
|
+
await act(async () => {
|
|
485
|
+
await manager.dispatch({
|
|
486
|
+
type: NcpEventType.MessageSent,
|
|
487
|
+
payload: {
|
|
488
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
489
|
+
message: {
|
|
490
|
+
id: "user-mt7jpad5",
|
|
491
|
+
sessionId: "ncp-mt7hs0u9-15yce6jv",
|
|
492
|
+
role: "user",
|
|
493
|
+
status: "final",
|
|
494
|
+
parts: [{ type: "text", text: "steer" }],
|
|
495
|
+
timestamp: "2026-08-24T18:04:13.625Z",
|
|
496
|
+
},
|
|
497
|
+
},
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
await waitFor(() => {
|
|
502
|
+
const ids = [...view.container.querySelectorAll("[data-message-id]")]
|
|
503
|
+
.map((node) => node.getAttribute("data-message-id"));
|
|
504
|
+
expect(ids).toEqual([
|
|
505
|
+
"user-mt7jp7vd",
|
|
506
|
+
"assistant-message-2629eaf9-c4ce-4562-b22d-c70f1e8c85e2",
|
|
507
|
+
"user-mt7jpad5",
|
|
508
|
+
]);
|
|
509
|
+
});
|
|
510
|
+
expect(view.container.querySelector(assistantSelector)).toBe(assistantNode);
|
|
511
|
+
});
|
|
512
|
+
|
|
424
513
|
});
|
|
425
514
|
|
|
426
515
|
describe("useNcpAgentRuntime commands and live stream", () => {
|
|
@@ -91,7 +91,11 @@ export type ContextCompactionTimelineView = {
|
|
|
91
91
|
|
|
92
92
|
export function readContextCompactionTimeline(message: Pick<NcpMessageView, 'metadata'>): ContextCompactionTimelineView | null {
|
|
93
93
|
const { metadata } = message;
|
|
94
|
-
if (
|
|
94
|
+
if (
|
|
95
|
+
!metadata ||
|
|
96
|
+
readOptionalString(metadata.inherited_from_session_id) ||
|
|
97
|
+
metadata[NEXTCLAW_TIMELINE_KIND_METADATA_KEY] !== CONTEXT_COMPACTION_TIMELINE_KIND
|
|
98
|
+
) {
|
|
95
99
|
return null;
|
|
96
100
|
}
|
|
97
101
|
const rawCheckpoint =
|
|
@@ -222,7 +222,7 @@ function createChildTab(): ResolvedChildSessionTab {
|
|
|
222
222
|
};
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
it('shows
|
|
225
|
+
it('shows child session content without a redundant metadata header', () => {
|
|
226
226
|
render(
|
|
227
227
|
<ChatSessionWorkspacePanelContent
|
|
228
228
|
activeSelection={{
|
|
@@ -239,10 +239,10 @@ it('shows compact child session metadata in a full-height column layout', () =>
|
|
|
239
239
|
);
|
|
240
240
|
|
|
241
241
|
expect(screen.queryByText('Child title')).toBeNull();
|
|
242
|
-
expect(screen.
|
|
243
|
-
expect(screen.
|
|
244
|
-
expect(screen.
|
|
245
|
-
expect(screen.
|
|
242
|
+
expect(screen.queryByText('原生')).toBeNull();
|
|
243
|
+
expect(screen.queryByText('minimax/MiniMax-M3')).toBeNull();
|
|
244
|
+
expect(screen.queryByText('nextbot')).toBeNull();
|
|
245
|
+
expect(screen.queryByTitle('/Users/peiwang/Projects/nextbot')).toBeNull();
|
|
246
246
|
const conversationArea = screen.getByTestId('session-conversation-area');
|
|
247
247
|
const selectedContentHost = conversationArea.parentElement?.parentElement;
|
|
248
248
|
expect(Array.from(selectedContentHost?.classList ?? [])).toEqual(
|
package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx
CHANGED
|
@@ -202,40 +202,6 @@ function WorkspaceProjectFiles({
|
|
|
202
202
|
);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
function ChildSessionMetaChip({ value }: { value: string }) {
|
|
206
|
-
return (
|
|
207
|
-
<span className="inline-flex max-w-full shrink-0 items-center rounded border border-gray-200 bg-gray-50 px-1.5 py-0.5 text-[10px] font-medium text-gray-600">
|
|
208
|
-
<span className="truncate">{value}</span>
|
|
209
|
-
</span>
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function ChildSessionMetaStrip({ tab }: { tab: ResolvedChildSessionTab }) {
|
|
214
|
-
const metaItems = [tab.sessionTypeLabel, tab.preferredModel, tab.projectName].filter((value): value is string =>
|
|
215
|
-
Boolean(value?.trim()),
|
|
216
|
-
);
|
|
217
|
-
|
|
218
|
-
if (metaItems.length === 0 && !tab.projectRoot) {
|
|
219
|
-
return null;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
return (
|
|
223
|
-
<div className="flex min-h-9 min-w-0 items-center gap-1.5 border-b border-gray-200/70 px-3 py-1.5 text-[11px] text-gray-500">
|
|
224
|
-
{metaItems.map((item) => (
|
|
225
|
-
<ChildSessionMetaChip key={item} value={item} />
|
|
226
|
-
))}
|
|
227
|
-
{tab.projectRoot ? (
|
|
228
|
-
<span
|
|
229
|
-
title={tab.projectRoot}
|
|
230
|
-
className="min-w-0 flex-1 truncate rounded border border-gray-200 bg-gray-50 px-1.5 py-0.5 font-mono text-[10px] text-gray-500"
|
|
231
|
-
>
|
|
232
|
-
{tab.projectRoot}
|
|
233
|
-
</span>
|
|
234
|
-
) : null}
|
|
235
|
-
</div>
|
|
236
|
-
);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
205
|
function WorkspaceSideChatDraftHeader() {
|
|
240
206
|
return (
|
|
241
207
|
<div className="border-b border-gray-200/70 px-4 py-3">
|
|
@@ -307,12 +273,9 @@ function WorkspaceSelectedContent({
|
|
|
307
273
|
|
|
308
274
|
if (activeSelection.kind === 'child-session') {
|
|
309
275
|
return (
|
|
310
|
-
|
|
311
|
-
<
|
|
312
|
-
|
|
313
|
-
<SessionConversationArea sessionKey={activeSelection.tab.sessionKey} />
|
|
314
|
-
</div>
|
|
315
|
-
</>
|
|
276
|
+
<div className="flex min-h-0 flex-1 flex-col">
|
|
277
|
+
<SessionConversationArea sessionKey={activeSelection.tab.sessionKey} />
|
|
278
|
+
</div>
|
|
316
279
|
);
|
|
317
280
|
}
|
|
318
281
|
|
|
@@ -117,6 +117,76 @@ describe("ChatCompletionNotificationManager", () => {
|
|
|
117
117
|
expect(show).toHaveBeenCalledOnce();
|
|
118
118
|
});
|
|
119
119
|
|
|
120
|
+
it("notifies only for human-triggered background runs", () => {
|
|
121
|
+
manager.start();
|
|
122
|
+
emit(createCompletedEvent(createMessage({
|
|
123
|
+
id: "assistant-agent",
|
|
124
|
+
metadata: {
|
|
125
|
+
run_trigger: {
|
|
126
|
+
version: 1,
|
|
127
|
+
actor: "agent",
|
|
128
|
+
source: "sessions_spawn",
|
|
129
|
+
triggeredAt: "2026-08-05T09:59:00.000Z",
|
|
130
|
+
targetRunId: "run-agent",
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
})));
|
|
134
|
+
emit(createCompletedEvent(createMessage({
|
|
135
|
+
id: "assistant-automation",
|
|
136
|
+
metadata: {
|
|
137
|
+
run_trigger: {
|
|
138
|
+
version: 1,
|
|
139
|
+
actor: "automation",
|
|
140
|
+
source: "observation",
|
|
141
|
+
triggeredAt: "2026-08-05T09:59:00.000Z",
|
|
142
|
+
targetRunId: "run-automation",
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
})));
|
|
146
|
+
emit(createCompletedEvent(createMessage({
|
|
147
|
+
id: "assistant-human",
|
|
148
|
+
metadata: {
|
|
149
|
+
run_trigger: {
|
|
150
|
+
version: 1,
|
|
151
|
+
actor: "human",
|
|
152
|
+
source: "ui-http",
|
|
153
|
+
triggeredAt: "2026-08-05T09:59:00.000Z",
|
|
154
|
+
targetRunId: "run-human",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
})));
|
|
158
|
+
|
|
159
|
+
expect(show).toHaveBeenCalledOnce();
|
|
160
|
+
expect(show).toHaveBeenCalledWith(expect.objectContaining({
|
|
161
|
+
id: "chat-reply:assistant-human",
|
|
162
|
+
}));
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("silences legacy child replies without changing legacy top-level behavior", () => {
|
|
166
|
+
useChatQueryStore.setState({
|
|
167
|
+
snapshot: {
|
|
168
|
+
sessionsQuery: {
|
|
169
|
+
data: {
|
|
170
|
+
sessions: [{
|
|
171
|
+
sessionId: "session-background",
|
|
172
|
+
messageCount: 2,
|
|
173
|
+
updatedAt: "2026-08-05T10:00:00.000Z",
|
|
174
|
+
metadata: { parent_session_id: "parent-session" },
|
|
175
|
+
}],
|
|
176
|
+
total: 1,
|
|
177
|
+
},
|
|
178
|
+
} as never,
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
manager.start();
|
|
182
|
+
emit(createCompletedEvent());
|
|
183
|
+
expect(show).not.toHaveBeenCalled();
|
|
184
|
+
|
|
185
|
+
useChatQueryStore.setState({ snapshot: {} });
|
|
186
|
+
emit(createCompletedEvent(createMessage({ id: "legacy-top-level" })));
|
|
187
|
+
expect(show).toHaveBeenCalledOnce();
|
|
188
|
+
});
|
|
189
|
+
|
|
120
190
|
it("ignores non-final, non-assistant, hidden, and unrelated events", () => {
|
|
121
191
|
manager.start();
|
|
122
192
|
emit(createCompletedEvent(createMessage({ status: "streaming" })));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isHiddenNcpMessage,
|
|
3
3
|
NcpEventType,
|
|
4
|
+
readNcpRunTriggerMetadata,
|
|
4
5
|
type NcpEndpointEvent,
|
|
5
6
|
type NcpMessage,
|
|
6
7
|
} from "@nextclaw/ncp";
|
|
@@ -16,6 +17,14 @@ import { t } from "@/shared/lib/i18n";
|
|
|
16
17
|
const NOTIFICATION_PREVIEW_MAX_CHARACTERS = 120;
|
|
17
18
|
const NOTIFIED_MESSAGE_HISTORY_LIMIT = 200;
|
|
18
19
|
|
|
20
|
+
function isChildSessionMetadata(
|
|
21
|
+
metadata: Record<string, unknown> | null | undefined,
|
|
22
|
+
): boolean {
|
|
23
|
+
return [metadata?.parent_session_id, metadata?.parentSessionId].some(
|
|
24
|
+
(value) => typeof value === "string" && value.trim().length > 0,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
function buildNotificationPreview(value: string): string {
|
|
20
29
|
const normalized = value
|
|
21
30
|
.replace(/\r\n?/gu, "\n")
|
|
@@ -119,7 +128,18 @@ export class ChatCompletionNotificationManager {
|
|
|
119
128
|
return;
|
|
120
129
|
}
|
|
121
130
|
|
|
122
|
-
const
|
|
131
|
+
const summary = this.resolveSessionSummary(sessionId);
|
|
132
|
+
const trigger = readNcpRunTriggerMetadata(message.metadata);
|
|
133
|
+
if (
|
|
134
|
+
(trigger && trigger.actor !== "human") ||
|
|
135
|
+
(!trigger && summary && isChildSessionMetadata(summary.metadata))
|
|
136
|
+
) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const title = summary
|
|
141
|
+
? sessionDisplayName(adaptNcpSessionSummary(summary))
|
|
142
|
+
: t("chatBackgroundReplyFallbackTitle");
|
|
123
143
|
const preview = readAssistantReplyPreview(message);
|
|
124
144
|
this.notificationManager.show({
|
|
125
145
|
id: `chat-reply:${message.id}`,
|
|
@@ -130,13 +150,10 @@ export class ChatCompletionNotificationManager {
|
|
|
130
150
|
});
|
|
131
151
|
};
|
|
132
152
|
|
|
133
|
-
private readonly
|
|
153
|
+
private readonly resolveSessionSummary = (sessionId: string) => {
|
|
134
154
|
const summaries =
|
|
135
155
|
useChatQueryStore.getState().snapshot.sessionsQuery?.data?.sessions ?? [];
|
|
136
|
-
|
|
137
|
-
return summary
|
|
138
|
-
? sessionDisplayName(adaptNcpSessionSummary(summary))
|
|
139
|
-
: t("chatBackgroundReplyFallbackTitle");
|
|
156
|
+
return summaries.find((item) => item.sessionId === sessionId);
|
|
140
157
|
};
|
|
141
158
|
|
|
142
159
|
private readonly rememberHandledMessage = (messageId: string): void => {
|
|
@@ -280,6 +280,27 @@
|
|
|
280
280
|
"chatAiExecutionUsageReported": "Reported",
|
|
281
281
|
"chatAiExecutionUsagePartial": "Partial",
|
|
282
282
|
"chatAiExecutionUsageUnavailable": "Unavailable",
|
|
283
|
+
"chatRunTriggerView": "View trigger details",
|
|
284
|
+
"chatRunTriggerTitle": "Run trigger",
|
|
285
|
+
"chatRunTriggerDescription": "See what started this run and the source context retained with the message.",
|
|
286
|
+
"chatRunTriggerClose": "Close trigger details",
|
|
287
|
+
"chatRunTriggerActor": "Started by",
|
|
288
|
+
"chatRunTriggerSource": "Trigger source",
|
|
289
|
+
"chatRunTriggerTime": "Triggered at",
|
|
290
|
+
"chatRunTriggerTargetRun": "Target run ID",
|
|
291
|
+
"chatRunTriggerSourceSession": "Source session ID",
|
|
292
|
+
"chatRunTriggerSourceMessage": "Source message ID",
|
|
293
|
+
"chatRunTriggerSourceRun": "Source run ID",
|
|
294
|
+
"chatRunTriggerSourceToolCall": "Source tool call ID",
|
|
295
|
+
"chatRunTriggerSourceRequest": "Source request ID",
|
|
296
|
+
"chatRunTriggerSourceModel": "Source model",
|
|
297
|
+
"chatRunTriggerTargetModel": "Run model",
|
|
298
|
+
"chatRunTriggerSourceContext": "Source context",
|
|
299
|
+
"chatRunTriggerRaw": "Raw metadata",
|
|
300
|
+
"chatRunTriggerActorHuman": "Human",
|
|
301
|
+
"chatRunTriggerActorAgent": "Agent",
|
|
302
|
+
"chatRunTriggerActorAutomation": "Automation",
|
|
303
|
+
"chatRunTriggerActorSystem": "System",
|
|
283
304
|
"chatToolActivityReadOne": "Read 1 file",
|
|
284
305
|
"chatToolActivityReadOther": "Read {count} files",
|
|
285
306
|
"chatToolActivityEditOne": "Edit 1 file",
|
|
@@ -280,6 +280,27 @@
|
|
|
280
280
|
"chatAiExecutionUsageReported": "已报告",
|
|
281
281
|
"chatAiExecutionUsagePartial": "部分报告",
|
|
282
282
|
"chatAiExecutionUsageUnavailable": "不可用",
|
|
283
|
+
"chatRunTriggerView": "查看触发详情",
|
|
284
|
+
"chatRunTriggerTitle": "运行触发信息",
|
|
285
|
+
"chatRunTriggerDescription": "查看本次运行由谁发起,以及消息中保留的来源信息。",
|
|
286
|
+
"chatRunTriggerClose": "关闭触发详情",
|
|
287
|
+
"chatRunTriggerActor": "发起方",
|
|
288
|
+
"chatRunTriggerSource": "触发来源",
|
|
289
|
+
"chatRunTriggerTime": "触发时间",
|
|
290
|
+
"chatRunTriggerTargetRun": "目标运行 ID",
|
|
291
|
+
"chatRunTriggerSourceSession": "来源会话 ID",
|
|
292
|
+
"chatRunTriggerSourceMessage": "来源消息 ID",
|
|
293
|
+
"chatRunTriggerSourceRun": "来源运行 ID",
|
|
294
|
+
"chatRunTriggerSourceToolCall": "来源工具调用 ID",
|
|
295
|
+
"chatRunTriggerSourceRequest": "来源请求 ID",
|
|
296
|
+
"chatRunTriggerSourceModel": "来源模型",
|
|
297
|
+
"chatRunTriggerTargetModel": "本次运行模型",
|
|
298
|
+
"chatRunTriggerSourceContext": "来源上下文",
|
|
299
|
+
"chatRunTriggerRaw": "原始元数据",
|
|
300
|
+
"chatRunTriggerActorHuman": "用户",
|
|
301
|
+
"chatRunTriggerActorAgent": "代理",
|
|
302
|
+
"chatRunTriggerActorAutomation": "自动任务",
|
|
303
|
+
"chatRunTriggerActorSystem": "系统",
|
|
283
304
|
"chatToolActivityReadOne": "读取 1 个文件",
|
|
284
305
|
"chatToolActivityReadOther": "读取 {count} 个文件",
|
|
285
306
|
"chatToolActivityEditOne": "编辑 1 个文件",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./doc-browser-Cm_tMZ_C.js";export{e as DocBrowser};
|