@nextclaw/ui 0.11.21 → 0.11.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/CHANGELOG.md +24 -0
- package/dist/assets/{ChannelsList-ByHWHkQS.js → ChannelsList-DVDu1xvz.js} +6 -6
- package/dist/assets/ChatPage-Z9tRzm_n.js +43 -0
- package/dist/assets/DocBrowser-B9OaZjmg.js +1 -0
- package/dist/assets/{DocBrowser-3y_NHZ71.js → DocBrowser-BmtBLFU0.js} +1 -1
- package/dist/assets/{DocBrowserContext-CVJuwCcw.js → DocBrowserContext-YIKkPb76.js} +1 -1
- package/dist/assets/{LogoBadge-D8fyilO-.js → LogoBadge-F7ZWdxLT.js} +1 -1
- package/dist/assets/{MarketplacePage-CmhsZXr1.js → MarketplacePage-Buo9HrOz.js} +2 -2
- package/dist/assets/MarketplacePage-D6rVQEQR.js +1 -0
- package/dist/assets/{McpMarketplacePage-C7PkCYbp.js → McpMarketplacePage-JnkYwK7p.js} +2 -2
- package/dist/assets/ModelConfig-BYRhgp0c.js +1 -0
- package/dist/assets/ProvidersList-DmLyyHvX.js +1 -0
- package/dist/assets/RemoteAccessPage-CDSSvH7Z.js +1 -0
- package/dist/assets/RuntimeConfig-v7a7Fe3x.js +1 -0
- package/dist/assets/{SearchConfig-Dm7r2yfp.js → SearchConfig-D5f1EkLE.js} +1 -1
- package/dist/assets/{SecretsConfig-BBP_mbQh.js → SecretsConfig-D61IKcYt.js} +2 -2
- package/dist/assets/{SessionsConfig-6wNJloZN.js → SessionsConfig-BRIxVTEv.js} +2 -2
- package/dist/assets/{book-open-B26jGBjY.js → book-open-CXoF5nQC.js} +1 -1
- package/dist/assets/chat-session-display-D0WpnuRZ.js +1 -0
- package/dist/assets/{chunk-JZWAC4HX-B-4B29RN.js → chunk-JZWAC4HX-CvRWvTy5.js} +1 -1
- package/dist/assets/{config-BaC29Qf-.js → config-DJswxxE8.js} +1 -1
- package/dist/assets/{createLucideIcon-DiFAvXmK.js → createLucideIcon-CjGHOWb6.js} +1 -1
- package/dist/assets/{dist-pCfWPG1A.js → dist-Cl2QB-2y.js} +1 -1
- package/dist/assets/{dist-kW_O3kyZ.js → dist-nqTTbVdA.js} +1 -1
- package/dist/assets/{external-link-D5-p-Gmm.js → external-link-tIO7zING.js} +1 -1
- package/dist/assets/{hash-BlwrSV0q.js → hash-JWUyl1pT.js} +1 -1
- package/dist/assets/i18n-CDHMXlRZ.js +1 -0
- package/dist/assets/{index-DvKS3L9j.js → index-BuwbBgmT.js} +3 -3
- package/dist/assets/index-bZ8cqQIS.css +1 -0
- package/dist/assets/{label-RyXfZqkP.js → label-BIpeNu4r.js} +1 -1
- package/dist/assets/loader-circle-Cs8XVFTw.js +1 -0
- package/dist/assets/{logos-Bpl8QTgI.js → logos-DThdM9lk.js} +1 -1
- package/dist/assets/{page-layout--S0YBU0W.js → page-layout-D3Xo605Z.js} +1 -1
- package/dist/assets/plus-PHf8q-Ct.js +1 -0
- package/dist/assets/{popover-BEjfbEwy.js → popover-BJRUGA_H.js} +1 -1
- package/dist/assets/provider-models-bz5y28rq.js +1 -0
- package/dist/assets/{react-BuSP2-8B.js → react-7ZHqQtEV.js} +1 -1
- package/dist/assets/refresh-ccw-CC6-_QuL.js +1 -0
- package/dist/assets/{save-DPPPpD_c.js → save-DJM5RRWW.js} +1 -1
- package/dist/assets/search-C91yH_6y.js +1 -0
- package/dist/assets/{security-config-6t78Ph-I.js → security-config-DbUyWcQz.js} +1 -1
- package/dist/assets/{select-CT50pzod.js → select-DSkTc61S.js} +1 -1
- package/dist/assets/skeleton-Dzg-HOiN.js +1 -0
- package/dist/assets/{status-dot-BbBqRHfh.js → status-dot-LNBlDu3q.js} +1 -1
- package/dist/assets/{switch-D3l6AcCk.js → switch-Bo-Y46HZ.js} +1 -1
- package/dist/assets/tabs-custom-DXv507_2.js +1 -0
- package/dist/assets/{trash-2-B2_AGVE3.js → trash-2-DFZmW6Gg.js} +1 -1
- package/dist/assets/useConfirmDialog-COwYXDKm.js +1 -0
- package/dist/assets/{useMutation-BzCrO8j-.js → useMutation-DrZrOgVL.js} +1 -1
- package/dist/assets/x-D7Q1yqSF.js +1 -0
- package/dist/index.html +18 -18
- package/package.json +6 -6
- package/src/api/ncp-session.test.ts +37 -0
- package/src/api/ncp-session.ts +29 -1
- package/src/api/server-path.ts +23 -0
- package/src/api/types.ts +45 -0
- package/src/components/chat/ChatConversationPanel.test.tsx +53 -9
- package/src/components/chat/ChatConversationPanel.tsx +122 -79
- package/src/components/chat/ChatSidebar.test.tsx +2 -2
- package/src/components/chat/ChatSidebar.tsx +2 -2
- package/src/components/chat/adapters/chat-input-bar.adapter.test.ts +1 -0
- package/src/components/chat/adapters/chat-input-bar.adapter.ts +7 -2
- package/src/components/chat/adapters/chat-message-part.adapter.ts +26 -14
- package/src/components/chat/adapters/chat-message.adapter.test.ts +159 -13
- package/src/components/chat/adapters/chat-message.session-request-tool-card.ts +191 -0
- package/src/components/chat/adapters/{chat-message.file-operation-card.ts → file-operation/card.ts} +74 -181
- package/src/components/chat/adapters/{chat-message.file-operation-diff.ts → file-operation/diff.ts} +178 -188
- package/src/components/chat/adapters/file-operation/line-builder.ts +249 -0
- package/src/components/chat/adapters/file-operation/record-readers.ts +233 -0
- package/src/components/chat/chat-child-session-panel.tsx +100 -0
- package/src/components/chat/chat-composer-state.ts +3 -3
- package/src/components/chat/chat-page-runtime.test.ts +1 -0
- package/src/components/chat/chat-session-display.test.ts +22 -0
- package/src/components/chat/chat-session-display.ts +6 -1
- package/src/components/chat/containers/chat-input-bar.container.tsx +21 -24
- package/src/components/chat/containers/chat-message-list.container.tsx +4 -0
- package/src/components/chat/hooks/use-chat-session-label.ts +19 -0
- package/src/components/chat/hooks/use-chat-session-project.test.tsx +117 -0
- package/src/components/chat/hooks/use-chat-session-project.ts +40 -0
- package/src/components/chat/{chat-session-label.service.ts → hooks/use-chat-session-update.ts} +11 -7
- package/src/components/chat/managers/chat-session-list.manager.ts +5 -1
- package/src/components/chat/ncp/NcpChatPage.tsx +219 -116
- package/src/components/chat/ncp/ncp-chat-page-data.test.ts +33 -0
- package/src/components/chat/ncp/ncp-chat-page-data.ts +21 -15
- package/src/components/chat/ncp/ncp-chat-thread.manager.ts +49 -0
- package/src/components/chat/ncp/ncp-session-adapter.test.ts +24 -0
- package/src/components/chat/ncp/ncp-session-adapter.ts +47 -0
- package/src/components/chat/ncp/use-ncp-session-list-view.ts +10 -1
- package/src/components/chat/presenter/chat-presenter-context.tsx +4 -1
- package/src/components/chat/session-header/chat-session-header-actions.test.tsx +63 -0
- package/src/components/chat/session-header/chat-session-header-actions.tsx +95 -0
- package/src/components/chat/session-header/chat-session-header-menu-item.tsx +35 -0
- package/src/components/chat/session-header/chat-session-project-badge.test.tsx +66 -0
- package/src/components/chat/session-header/chat-session-project-badge.tsx +102 -0
- package/src/components/chat/session-header/chat-session-project-dialog.tsx +34 -0
- package/src/components/chat/stores/chat-input.store.ts +6 -3
- package/src/components/chat/stores/chat-thread.store.ts +17 -3
- package/src/components/chat/useHydratedNcpAgent.test.tsx +30 -23
- package/src/components/path-picker/server-path-picker-dialog.test.tsx +92 -0
- package/src/components/path-picker/server-path-picker-dialog.tsx +282 -0
- package/src/hooks/server-path/use-server-path-browse.ts +19 -0
- package/src/hooks/useConfig.ts +26 -1
- package/src/lib/i18n/i18n-language-owner.ts +94 -0
- package/src/lib/i18n/i18n.path-picker.ts +12 -0
- package/src/lib/i18n.chat.ts +23 -0
- package/src/lib/i18n.ts +21 -84
- package/src/lib/session-project/session-project.utils.ts +30 -0
- package/dist/assets/ChatPage-FdT3pDnw.js +0 -42
- package/dist/assets/DocBrowser-CMdPdbZj.js +0 -1
- package/dist/assets/MarketplacePage-9oKmxN2n.js +0 -1
- package/dist/assets/ModelConfig-DmCY6jWM.js +0 -1
- package/dist/assets/ProvidersList-ClT-34aX.js +0 -1
- package/dist/assets/RemoteAccessPage-B6hUZl1O.js +0 -1
- package/dist/assets/RuntimeConfig-C5aqliGk.js +0 -1
- package/dist/assets/chat-session-display-Bjmn4aIZ.js +0 -1
- package/dist/assets/i18n-CSytxMFI.js +0 -1
- package/dist/assets/index-CUy6doWo.css +0 -1
- package/dist/assets/loader-circle-B2J777gj.js +0 -1
- package/dist/assets/plus-CM9XJ0Tf.js +0 -1
- package/dist/assets/provider-models-C8JQUd1E.js +0 -1
- package/dist/assets/search-Ctaw34Kp.js +0 -1
- package/dist/assets/skeleton-Bycyb0zU.js +0 -1
- package/dist/assets/tabs-custom-TZQ5WPWP.js +0 -1
- package/dist/assets/useConfirmDialog-BDpdjfIO.js +0 -1
- package/dist/assets/x-CHOBE-63.js +0 -1
- package/src/components/chat/adapters/chat-message.subagent-tool-card.ts +0 -154
- /package/dist/assets/{config-hints-fGnUjDe9.js → config-hints-WtpHP_DW.js} +0 -0
- /package/dist/assets/{config-layout-B-7erZRN.js → config-layout-LQ10ozRC.js} +0 -0
- /package/dist/assets/{marketplace-localization-CXeGRf6E.js → marketplace-localization-CxSTG9wr.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,l as t,m as n,p as r}from"./i18n-CSytxMFI.js";import{o as i}from"./dist-pCfWPG1A.js";import{$ as a,et as o,it as s,nt as c,rt as l,tt as u}from"./index-DvKS3L9j.js";var d=e(n(),1),f=r(),p=({open:e,onOpenChange:n,title:r,description:d,confirmLabel:p=t(`confirm`),cancelLabel:m=t(`cancel`),variant:h=`default`,onConfirm:g,onCancel:_})=>(0,f.jsx)(a,{open:e,onOpenChange:n,children:(0,f.jsxs)(o,{className:`[&>:last-child]:hidden`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,f.jsxs)(l,{children:[(0,f.jsx)(s,{children:r}),d?(0,f.jsx)(u,{children:d}):null]}),(0,f.jsxs)(c,{className:`gap-2 sm:gap-0`,children:[(0,f.jsx)(i,{type:`button`,variant:`outline`,onClick:()=>{_(),n(!1)},children:m}),(0,f.jsx)(i,{type:`button`,variant:h===`destructive`?`destructive`:`default`,onClick:()=>{g(),n(!1)},children:p})]})]})}),m={open:!1,title:``,description:``,confirmLabel:t(`confirm`),cancelLabel:t(`cancel`),variant:`default`,resolve:null};function h(){let[e,n]=(0,d.useState)(m),r=(0,d.useCallback)(e=>new Promise(r=>{n({open:!0,title:e.title,description:e.description??``,confirmLabel:e.confirmLabel??t(`confirm`),cancelLabel:e.cancelLabel??t(`cancel`),variant:e.variant??`default`,resolve:e=>{r(e),n(e=>({...e,open:!1,resolve:null}))}})}),[]),i=(0,d.useCallback)(e=>{n(t=>(!e&&t.resolve&&t.resolve(!1),{...t,open:e,resolve:e?t.resolve:null}))},[]);return{confirm:r,ConfirmDialog:(0,d.useCallback)(()=>(0,f.jsx)(p,{open:e.open,onOpenChange:i,title:e.title,description:e.description||void 0,confirmLabel:e.confirmLabel,cancelLabel:e.cancelLabel,variant:e.variant,onConfirm:()=>e.resolve?.(!0),onCancel:()=>e.resolve?.(!1)}),[e,i])}}export{h as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./createLucideIcon-DiFAvXmK.js";var t=e(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t};
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
stringifyUnknown,
|
|
3
|
-
summarizeToolArgs,
|
|
4
|
-
type ToolCard,
|
|
5
|
-
} from "@/lib/chat-message";
|
|
6
|
-
import type { ChatToolPartViewModel } from "@nextclaw/agent-chat-ui";
|
|
7
|
-
|
|
8
|
-
type ToolCardViewSource = ToolCard & {
|
|
9
|
-
statusTone: ChatToolPartViewModel["statusTone"];
|
|
10
|
-
statusLabel: string;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
type SpawnToolInvocation = {
|
|
14
|
-
toolName: string;
|
|
15
|
-
toolCallId?: string;
|
|
16
|
-
args?: unknown;
|
|
17
|
-
result?: unknown;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
type SubagentToolCardTexts = {
|
|
21
|
-
toolStatusRunningLabel: string;
|
|
22
|
-
toolStatusCompletedLabel: string;
|
|
23
|
-
toolStatusFailedLabel: string;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
type SubagentRunResult = {
|
|
27
|
-
runId?: string;
|
|
28
|
-
label?: string;
|
|
29
|
-
task?: string;
|
|
30
|
-
status?: string;
|
|
31
|
-
result?: unknown;
|
|
32
|
-
message?: string;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
36
|
-
return typeof value === "object" && value !== null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function readOptionalString(value: unknown): string | null {
|
|
40
|
-
if (typeof value !== "string") {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
const trimmed = value.trim();
|
|
44
|
-
return trimmed.length > 0 ? trimmed : null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function readSubagentRunResult(value: unknown): SubagentRunResult | null {
|
|
48
|
-
if (!isRecord(value)) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
if (value.kind === "nextclaw.subagent_run") {
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
|
-
if (typeof value.runId === "string" && typeof value.status === "string") {
|
|
55
|
-
return value;
|
|
56
|
-
}
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function buildSubagentDetail(subagentRun: SubagentRunResult, fallbackArgs: unknown): string | undefined {
|
|
61
|
-
const detailParts = [
|
|
62
|
-
readOptionalString(subagentRun.label)
|
|
63
|
-
? `label: ${subagentRun.label?.trim()}`
|
|
64
|
-
: null,
|
|
65
|
-
readOptionalString(subagentRun.runId)
|
|
66
|
-
? `run: ${subagentRun.runId?.trim()}`
|
|
67
|
-
: null,
|
|
68
|
-
readOptionalString(subagentRun.task)
|
|
69
|
-
? `task: ${subagentRun.task?.trim()}`
|
|
70
|
-
: null,
|
|
71
|
-
].filter((value): value is string => Boolean(value));
|
|
72
|
-
|
|
73
|
-
return detailParts.join(" · ") || summarizeToolArgs(fallbackArgs);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function buildSubagentOutput(subagentRun: SubagentRunResult): string | undefined {
|
|
77
|
-
const runId = readOptionalString(subagentRun.runId);
|
|
78
|
-
const label = readOptionalString(subagentRun.label);
|
|
79
|
-
const task = readOptionalString(subagentRun.task);
|
|
80
|
-
const status = readOptionalString(subagentRun.status)?.toLowerCase();
|
|
81
|
-
const resultText =
|
|
82
|
-
typeof subagentRun.result !== "undefined"
|
|
83
|
-
? stringifyUnknown(subagentRun.result).trim()
|
|
84
|
-
: "";
|
|
85
|
-
const messageText = readOptionalString(subagentRun.message);
|
|
86
|
-
|
|
87
|
-
const sections = [
|
|
88
|
-
runId ? `Run ID: ${runId}` : null,
|
|
89
|
-
label ? `Label: ${label}` : null,
|
|
90
|
-
task ? `Task:\n${task}` : null,
|
|
91
|
-
resultText
|
|
92
|
-
? `${status === "failed" ? "Error" : "Result"}:\n${resultText}`
|
|
93
|
-
: messageText
|
|
94
|
-
? `Status:\n${messageText}`
|
|
95
|
-
: null,
|
|
96
|
-
].filter((value): value is string => Boolean(value));
|
|
97
|
-
|
|
98
|
-
return sections.length > 0 ? sections.join("\n\n") : undefined;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export function buildSubagentToolCard(params: {
|
|
102
|
-
invocation: SpawnToolInvocation;
|
|
103
|
-
texts: SubagentToolCardTexts;
|
|
104
|
-
}): ToolCardViewSource | null {
|
|
105
|
-
if (params.invocation.toolName !== "spawn") {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const subagentRun = readSubagentRunResult(params.invocation.result);
|
|
110
|
-
if (!subagentRun) {
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const normalizedStatus = readOptionalString(subagentRun.status)?.toLowerCase();
|
|
115
|
-
const detail = buildSubagentDetail(subagentRun, params.invocation.args);
|
|
116
|
-
const output = buildSubagentOutput(subagentRun);
|
|
117
|
-
|
|
118
|
-
if (normalizedStatus === "failed") {
|
|
119
|
-
return {
|
|
120
|
-
kind: "result",
|
|
121
|
-
name: params.invocation.toolName,
|
|
122
|
-
detail,
|
|
123
|
-
text: output,
|
|
124
|
-
callId: params.invocation.toolCallId || undefined,
|
|
125
|
-
hasResult: Boolean(output),
|
|
126
|
-
statusTone: "error",
|
|
127
|
-
statusLabel: params.texts.toolStatusFailedLabel,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (normalizedStatus === "completed") {
|
|
132
|
-
return {
|
|
133
|
-
kind: "result",
|
|
134
|
-
name: params.invocation.toolName,
|
|
135
|
-
detail,
|
|
136
|
-
text: output,
|
|
137
|
-
callId: params.invocation.toolCallId || undefined,
|
|
138
|
-
hasResult: Boolean(output),
|
|
139
|
-
statusTone: "success",
|
|
140
|
-
statusLabel: params.texts.toolStatusCompletedLabel,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
kind: "result",
|
|
146
|
-
name: params.invocation.toolName,
|
|
147
|
-
detail,
|
|
148
|
-
text: output,
|
|
149
|
-
callId: params.invocation.toolCallId || undefined,
|
|
150
|
-
hasResult: Boolean(output),
|
|
151
|
-
statusTone: "running",
|
|
152
|
-
statusLabel: params.texts.toolStatusRunningLabel,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
File without changes
|
|
File without changes
|
/package/dist/assets/{marketplace-localization-CXeGRf6E.js → marketplace-localization-CxSTG9wr.js}
RENAMED
|
File without changes
|