@townco/ui 0.1.123 → 0.1.125
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.
|
@@ -330,7 +330,7 @@ export function ChatView({ client, initialSessionId, error: initError, debuggerU
|
|
|
330
330
|
logger.info("Prompt clicked", { prompt });
|
|
331
331
|
}, onPromptHover: handlePromptHover, onPromptLeave: handlePromptLeave, onOpenFiles: openFiles, onOpenSettings: openSettings, toolsAndMcpsCount: agentTools.length +
|
|
332
332
|
agentMcps.length +
|
|
333
|
-
agentSubagents.length }) })) })) : null) : (_jsx("div", { className: "flex flex-col px-4 py-4", children: messages.map((message, index) => {
|
|
333
|
+
agentSubagents.length }) })) })) : null) : (_jsx("div", { className: "flex flex-col px-4 py-4 gap-4", children: messages.map((message, index) => {
|
|
334
334
|
// Check if any message is streaming
|
|
335
335
|
const anyMessageStreaming = messages.some((m) => m.isStreaming);
|
|
336
336
|
// Calculate which user message number this is (1-indexed for display, 0-indexed for API)
|
|
@@ -343,41 +343,47 @@ export function ChatView({ client, initialSessionId, error: initError, debuggerU
|
|
|
343
343
|
// Check if this message should be dimmed (comes after editing message)
|
|
344
344
|
const shouldDim = editingMessageIndex !== null &&
|
|
345
345
|
index > editingMessageIndex;
|
|
346
|
-
return (_jsx(Message, { message: message, className: cn("group", shouldDim && "opacity-50"
|
|
346
|
+
return (_jsx(Message, { message: message, className: cn("group", shouldDim && "opacity-50"), isLastMessage: index === messages.length - 1, children: _jsx("div", { className: cn("flex flex-col w-full min-w-0"), children: message.role === "user" ? (_jsx(EditableUserMessage, { message: message, messageIndex: userMessageIndex, isStreaming: anyMessageStreaming, onEditAndResend: editAndResend, onEditingChange: (isEditing) => {
|
|
347
347
|
setEditingMessageIndex(isEditing ? index : null);
|
|
348
348
|
} })) : (_jsxs(_Fragment, { children: [
|
|
349
|
-
_jsx(MessageContent, { message: message, thinkingDisplayStyle: "collapsible" }),
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
349
|
+
_jsx(MessageContent, { message: message, thinkingDisplayStyle: "collapsible" }), (() => {
|
|
350
|
+
const isLastAssistantMessage = index ===
|
|
351
|
+
messages.findLastIndex((m) => m.role === "assistant");
|
|
352
|
+
// Hide actions for the last assistant message while streaming.
|
|
353
|
+
if (isLastAssistantMessage &&
|
|
354
|
+
message.isStreaming) {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
return (_jsx(MessageActions, { message: message, isStreaming: message.isStreaming, onSendMessage: sendMessage, isLastAssistantMessage: isLastAssistantMessage, onRedo: () => {
|
|
358
|
+
// Find the user message that preceded this assistant message
|
|
359
|
+
let precedingUserMessage = null;
|
|
360
|
+
let precedingUserMessageIndex = -1;
|
|
361
|
+
const _userCount = 0;
|
|
362
|
+
for (let i = index - 1; i >= 0; i--) {
|
|
363
|
+
if (messages[i]?.role === "user") {
|
|
364
|
+
precedingUserMessage = messages[i];
|
|
365
|
+
// Count how many user messages came before this one
|
|
366
|
+
precedingUserMessageIndex =
|
|
367
|
+
messages
|
|
368
|
+
.slice(0, i + 1)
|
|
369
|
+
.filter((m) => m.role === "user").length - 1;
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
365
372
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
] })) }) }, message.id));
|
|
373
|
+
if (precedingUserMessage?.content &&
|
|
374
|
+
precedingUserMessageIndex >= 0) {
|
|
375
|
+
// Convert images back to attachments format
|
|
376
|
+
const attachments = precedingUserMessage.images?.map((img, idx) => ({
|
|
377
|
+
name: `image-${idx}`,
|
|
378
|
+
path: "",
|
|
379
|
+
size: 0,
|
|
380
|
+
mimeType: img.mimeType,
|
|
381
|
+
data: img.data,
|
|
382
|
+
}));
|
|
383
|
+
editAndResend(precedingUserMessageIndex, precedingUserMessage.content, attachments);
|
|
384
|
+
}
|
|
385
|
+
} }));
|
|
386
|
+
})()] })) }) }, message.id));
|
|
381
387
|
}) })) }), _jsx(ChatLayout.Footer, { children: _jsx(ChatInputWithAttachments, { client: client, startSession: startSession, placeholder: placeholder, commandMenuItems: commandMenuItems, onCancel: cancel, promptParameters: agentPromptParameters }) })
|
|
382
388
|
] })
|
|
383
389
|
] }), _jsx(ChatLayout.Aside, { breakpoint: "md", children: _jsx(AsideTabs, { todos: todos, sources: allSources, tools: agentTools, mcps: agentMcps, subagents: agentSubagents, sessionId: sessionId, agentApiUrl: client?.getBaseUrl(), client: client }) })
|
|
@@ -65,7 +65,7 @@ function PureMessageActions({ message, isStreaming, onRedo, onSendMessage, isLas
|
|
|
65
65
|
toast.info("Export not available");
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
|
-
return (_jsx("div", { className: "mt-
|
|
68
|
+
return (_jsx("div", { className: "mt-2", children: _jsxs(Actions, { className: cn(visibilityClass, isLastAssistantMessage
|
|
69
69
|
? "pointer-events-auto"
|
|
70
70
|
: "pointer-events-none group-hover:pointer-events-auto"), children: [
|
|
71
71
|
_jsx(Action, { disabled: !canCopy, onClick: handleCopy, tooltip: isCopied ? "Copied!" : "Copy", children: isCopied ? (_jsx(Check, { className: "size-4" })) : (_jsx(Copy, { className: "size-4" })) }), _jsx(Action, { disabled: disableWhileStreaming, onClick: handleRedo, tooltip: "Redo", children: _jsx(RotateCcw, { className: "size-4" }) }), _jsxs(DropdownMenu, { children: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@townco/ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.125",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@radix-ui/react-slot": "^1.2.4",
|
|
50
50
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
51
51
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
52
|
-
"@townco/core": "0.0.
|
|
52
|
+
"@townco/core": "0.0.103",
|
|
53
53
|
"@types/mdast": "^4.0.4",
|
|
54
54
|
"@uiw/react-json-view": "^2.0.0-alpha.39",
|
|
55
55
|
"class-variance-authority": "^0.7.1",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"zustand": "^5.0.8"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@townco/tsconfig": "0.1.
|
|
70
|
+
"@townco/tsconfig": "0.1.122",
|
|
71
71
|
"@types/node": "^24.10.0",
|
|
72
72
|
"@types/react": "^19.2.2",
|
|
73
73
|
"@types/unist": "^3.0.3",
|