@tanstack/ai-devtools-core 0.3.6 → 0.3.7
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/Shell/GHXECDJV.js +5056 -0
- package/dist/Shell/MUFU35SY.js +4242 -0
- package/dist/dev.js +11 -0
- package/dist/{esm/index.d.ts → index.d.ts} +7 -5
- package/dist/index.js +11 -0
- package/dist/production/Shell/GHXECDJV.js +5056 -0
- package/dist/production/Shell/MUFU35SY.js +4242 -0
- package/dist/production/dev.js +8 -0
- package/dist/production/index.d.ts +12 -0
- package/dist/production/index.js +8 -0
- package/dist/production/server.js +8 -0
- package/dist/server.js +11 -0
- package/package.json +44 -10
- package/src/{core.tsx → core.ts} +4 -5
- package/dist/esm/components/ConversationDetails.d.ts +0 -2
- package/dist/esm/components/ConversationDetails.js +0 -192
- package/dist/esm/components/ConversationDetails.js.map +0 -1
- package/dist/esm/components/ConversationsList.d.ts +0 -2
- package/dist/esm/components/ConversationsList.js +0 -30
- package/dist/esm/components/ConversationsList.js.map +0 -1
- package/dist/esm/components/Shell.d.ts +0 -1
- package/dist/esm/components/Shell.js +0 -94
- package/dist/esm/components/Shell.js.map +0 -1
- package/dist/esm/components/conversation/ActivityEventsTab.d.ts +0 -8
- package/dist/esm/components/conversation/ActivityEventsTab.js +0 -72
- package/dist/esm/components/conversation/ActivityEventsTab.js.map +0 -1
- package/dist/esm/components/conversation/ChunkBadges.d.ts +0 -7
- package/dist/esm/components/conversation/ChunkBadges.js +0 -54
- package/dist/esm/components/conversation/ChunkBadges.js.map +0 -1
- package/dist/esm/components/conversation/ChunkItem.d.ts +0 -9
- package/dist/esm/components/conversation/ChunkItem.js +0 -247
- package/dist/esm/components/conversation/ChunkItem.js.map +0 -1
- package/dist/esm/components/conversation/ChunksCollapsible.d.ts +0 -7
- package/dist/esm/components/conversation/ChunksCollapsible.js +0 -77
- package/dist/esm/components/conversation/ChunksCollapsible.js.map +0 -1
- package/dist/esm/components/conversation/ChunksTab.d.ts +0 -8
- package/dist/esm/components/conversation/ChunksTab.js +0 -87
- package/dist/esm/components/conversation/ChunksTab.js.map +0 -1
- package/dist/esm/components/conversation/ConversationHeader.d.ts +0 -7
- package/dist/esm/components/conversation/ConversationHeader.js +0 -230
- package/dist/esm/components/conversation/ConversationHeader.js.map +0 -1
- package/dist/esm/components/conversation/ConversationTabs.d.ts +0 -10
- package/dist/esm/components/conversation/ConversationTabs.js +0 -176
- package/dist/esm/components/conversation/ConversationTabs.js.map +0 -1
- package/dist/esm/components/conversation/MessageCard.d.ts +0 -7
- package/dist/esm/components/conversation/MessageCard.js +0 -207
- package/dist/esm/components/conversation/MessageCard.js.map +0 -1
- package/dist/esm/components/conversation/MessageGroup.d.ts +0 -15
- package/dist/esm/components/conversation/MessageGroup.js +0 -119
- package/dist/esm/components/conversation/MessageGroup.js.map +0 -1
- package/dist/esm/components/conversation/MessagesTab.d.ts +0 -7
- package/dist/esm/components/conversation/MessagesTab.js +0 -37
- package/dist/esm/components/conversation/MessagesTab.js.map +0 -1
- package/dist/esm/components/conversation/SummariesTab.d.ts +0 -7
- package/dist/esm/components/conversation/SummariesTab.js +0 -110
- package/dist/esm/components/conversation/SummariesTab.js.map +0 -1
- package/dist/esm/components/conversation/ToolCallDisplay.d.ts +0 -7
- package/dist/esm/components/conversation/ToolCallDisplay.js +0 -123
- package/dist/esm/components/conversation/ToolCallDisplay.js.map +0 -1
- package/dist/esm/components/conversation/index.d.ts +0 -7
- package/dist/esm/components/list/ConversationRow.d.ts +0 -7
- package/dist/esm/components/list/ConversationRow.js +0 -122
- package/dist/esm/components/list/ConversationRow.js.map +0 -1
- package/dist/esm/components/list/index.d.ts +0 -1
- package/dist/esm/components/utils/format.d.ts +0 -6
- package/dist/esm/components/utils/format.js +0 -68
- package/dist/esm/components/utils/format.js.map +0 -1
- package/dist/esm/components/utils/index.d.ts +0 -1
- package/dist/esm/core.d.ts +0 -22
- package/dist/esm/core.js +0 -9
- package/dist/esm/core.js.map +0 -1
- package/dist/esm/index.js +0 -6
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/production.d.ts +0 -2
- package/dist/esm/production.js +0 -5
- package/dist/esm/production.js.map +0 -1
- package/dist/esm/store/ai-context.d.ts +0 -135
- package/dist/esm/store/ai-context.js +0 -1238
- package/dist/esm/store/ai-context.js.map +0 -1
- package/dist/esm/store/ai-store.d.ts +0 -1
- package/dist/esm/styles/tokens.d.ts +0 -298
- package/dist/esm/styles/tokens.js +0 -107
- package/dist/esm/styles/tokens.js.map +0 -1
- package/dist/esm/styles/use-styles.d.ts +0 -233
- package/dist/esm/styles/use-styles.js +0 -1602
- package/dist/esm/styles/use-styles.js.map +0 -1
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { template, insert, createComponent, effect, className, memo } from "solid-js/web";
|
|
2
|
-
import { Show, For } from "solid-js";
|
|
3
|
-
import { JsonTree } from "@tanstack/devtools-ui";
|
|
4
|
-
import { useStyles } from "../../styles/use-styles.js";
|
|
5
|
-
import { formatTimestamp, formatDuration } from "../utils/format.js";
|
|
6
|
-
import { ToolCallDisplay } from "./ToolCallDisplay.js";
|
|
7
|
-
import { ChunksCollapsible } from "./ChunksCollapsible.js";
|
|
8
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div><span></span><span>`), _tmpl$2 = /* @__PURE__ */ template(`<div><span>🎯</span><span> in</span><span>•</span><span> out`), _tmpl$3 = /* @__PURE__ */ template(`<div><span>⏱️</span><span>`), _tmpl$4 = /* @__PURE__ */ template(`<details><summary>💭 Thinking...</summary><div>`), _tmpl$5 = /* @__PURE__ */ template(`<div>`), _tmpl$6 = /* @__PURE__ */ template(`<div><div><div><div></div><div><div></div></div><div>`);
|
|
9
|
-
const MessageCard = (props) => {
|
|
10
|
-
const styles = useStyles();
|
|
11
|
-
const msg = () => props.message;
|
|
12
|
-
const isClientMessage = () => msg().source === "client";
|
|
13
|
-
const getCardClass = () => {
|
|
14
|
-
const base = styles().conversationDetails.messageCard;
|
|
15
|
-
if (msg().role === "user") {
|
|
16
|
-
return `${base} ${styles().conversationDetails.messageCardUser}`;
|
|
17
|
-
}
|
|
18
|
-
if (isClientMessage()) {
|
|
19
|
-
return `${base} ${styles().conversationDetails.messageCardClient}`;
|
|
20
|
-
}
|
|
21
|
-
return `${base} ${styles().conversationDetails.messageCardServer}`;
|
|
22
|
-
};
|
|
23
|
-
const parseJsonContent = () => {
|
|
24
|
-
const content = msg().content;
|
|
25
|
-
if (typeof content !== "string") return null;
|
|
26
|
-
const trimmed = content.trim();
|
|
27
|
-
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) return null;
|
|
28
|
-
try {
|
|
29
|
-
return JSON.parse(trimmed);
|
|
30
|
-
} catch {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
const toolDuration = () => {
|
|
35
|
-
const durations = msg().toolCalls?.map((tool) => tool.duration || 0).filter((duration) => duration > 0);
|
|
36
|
-
if (!durations || durations.length === 0) return 0;
|
|
37
|
-
return durations.reduce((total, duration) => total + duration, 0);
|
|
38
|
-
};
|
|
39
|
-
return (() => {
|
|
40
|
-
var _el$ = _tmpl$6(), _el$5 = _el$.firstChild, _el$6 = _el$5.firstChild, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling, _el$9 = _el$8.firstChild, _el$0 = _el$8.nextSibling;
|
|
41
|
-
insert(_el$, createComponent(Show, {
|
|
42
|
-
get when() {
|
|
43
|
-
return msg().role === "assistant";
|
|
44
|
-
},
|
|
45
|
-
get children() {
|
|
46
|
-
var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
|
|
47
|
-
insert(_el$3, () => isClientMessage() ? "📱" : "☁️");
|
|
48
|
-
insert(_el$4, () => isClientMessage() ? "Client Message" : "Server Message");
|
|
49
|
-
effect((_p$) => {
|
|
50
|
-
var _v$ = `${styles().conversationDetails.sourceBanner} ${isClientMessage() ? styles().conversationDetails.sourceBannerClient : styles().conversationDetails.sourceBannerServer}`, _v$2 = styles().conversationDetails.sourceBannerIcon, _v$3 = styles().conversationDetails.sourceBannerText;
|
|
51
|
-
_v$ !== _p$.e && className(_el$2, _p$.e = _v$);
|
|
52
|
-
_v$2 !== _p$.t && className(_el$3, _p$.t = _v$2);
|
|
53
|
-
_v$3 !== _p$.a && className(_el$4, _p$.a = _v$3);
|
|
54
|
-
return _p$;
|
|
55
|
-
}, {
|
|
56
|
-
e: void 0,
|
|
57
|
-
t: void 0,
|
|
58
|
-
a: void 0
|
|
59
|
-
});
|
|
60
|
-
return _el$2;
|
|
61
|
-
}
|
|
62
|
-
}), _el$5);
|
|
63
|
-
insert(_el$7, (() => {
|
|
64
|
-
var _c$ = memo(() => msg().role === "user");
|
|
65
|
-
return () => _c$() ? "U" : msg().role === "tool" ? "🔧" : "🤖";
|
|
66
|
-
})());
|
|
67
|
-
insert(_el$9, () => msg().role);
|
|
68
|
-
insert(_el$0, () => formatTimestamp(msg().timestamp));
|
|
69
|
-
insert(_el$6, createComponent(Show, {
|
|
70
|
-
get when() {
|
|
71
|
-
return msg().usage;
|
|
72
|
-
},
|
|
73
|
-
get children() {
|
|
74
|
-
var _el$1 = _tmpl$2(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$11.nextSibling, _el$14 = _el$13.nextSibling, _el$15 = _el$14.firstChild;
|
|
75
|
-
insert(_el$11, () => msg().usage?.promptTokens.toLocaleString(), _el$12);
|
|
76
|
-
insert(_el$14, () => msg().usage?.completionTokens.toLocaleString(), _el$15);
|
|
77
|
-
effect((_p$) => {
|
|
78
|
-
var _v$4 = styles().conversationDetails.messageUsage, _v$5 = styles().conversationDetails.messageUsageIcon;
|
|
79
|
-
_v$4 !== _p$.e && className(_el$1, _p$.e = _v$4);
|
|
80
|
-
_v$5 !== _p$.t && className(_el$10, _p$.t = _v$5);
|
|
81
|
-
return _p$;
|
|
82
|
-
}, {
|
|
83
|
-
e: void 0,
|
|
84
|
-
t: void 0
|
|
85
|
-
});
|
|
86
|
-
return _el$1;
|
|
87
|
-
}
|
|
88
|
-
}), null);
|
|
89
|
-
insert(_el$6, createComponent(Show, {
|
|
90
|
-
get when() {
|
|
91
|
-
return toolDuration() > 0;
|
|
92
|
-
},
|
|
93
|
-
get children() {
|
|
94
|
-
var _el$16 = _tmpl$3(), _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling;
|
|
95
|
-
insert(_el$18, () => formatDuration(toolDuration()));
|
|
96
|
-
effect((_p$) => {
|
|
97
|
-
var _v$6 = styles().conversationDetails.messageUsage, _v$7 = styles().conversationDetails.messageUsageIcon;
|
|
98
|
-
_v$6 !== _p$.e && className(_el$16, _p$.e = _v$6);
|
|
99
|
-
_v$7 !== _p$.t && className(_el$17, _p$.t = _v$7);
|
|
100
|
-
return _p$;
|
|
101
|
-
}, {
|
|
102
|
-
e: void 0,
|
|
103
|
-
t: void 0
|
|
104
|
-
});
|
|
105
|
-
return _el$16;
|
|
106
|
-
}
|
|
107
|
-
}), null);
|
|
108
|
-
insert(_el$5, createComponent(Show, {
|
|
109
|
-
get when() {
|
|
110
|
-
return msg().thinkingContent;
|
|
111
|
-
},
|
|
112
|
-
get children() {
|
|
113
|
-
var _el$19 = _tmpl$4(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
|
|
114
|
-
insert(_el$21, () => msg().thinkingContent);
|
|
115
|
-
effect((_p$) => {
|
|
116
|
-
var _v$8 = styles().conversationDetails.thinkingDetails, _v$9 = styles().conversationDetails.thinkingSummary, _v$0 = styles().conversationDetails.thinkingContent;
|
|
117
|
-
_v$8 !== _p$.e && className(_el$19, _p$.e = _v$8);
|
|
118
|
-
_v$9 !== _p$.t && className(_el$20, _p$.t = _v$9);
|
|
119
|
-
_v$0 !== _p$.a && className(_el$21, _p$.a = _v$0);
|
|
120
|
-
return _p$;
|
|
121
|
-
}, {
|
|
122
|
-
e: void 0,
|
|
123
|
-
t: void 0,
|
|
124
|
-
a: void 0
|
|
125
|
-
});
|
|
126
|
-
return _el$19;
|
|
127
|
-
}
|
|
128
|
-
}), null);
|
|
129
|
-
insert(_el$5, createComponent(Show, {
|
|
130
|
-
get when() {
|
|
131
|
-
return memo(() => msg().role === "tool")() && parseJsonContent() !== null;
|
|
132
|
-
},
|
|
133
|
-
get fallback() {
|
|
134
|
-
return (() => {
|
|
135
|
-
var _el$24 = _tmpl$5();
|
|
136
|
-
insert(_el$24, () => msg().content);
|
|
137
|
-
effect(() => className(_el$24, styles().conversationDetails.messageContent));
|
|
138
|
-
return _el$24;
|
|
139
|
-
})();
|
|
140
|
-
},
|
|
141
|
-
get children() {
|
|
142
|
-
var _el$22 = _tmpl$5();
|
|
143
|
-
insert(_el$22, createComponent(JsonTree, {
|
|
144
|
-
get value() {
|
|
145
|
-
return parseJsonContent();
|
|
146
|
-
}
|
|
147
|
-
}));
|
|
148
|
-
effect(() => className(_el$22, styles().conversationDetails.toolJsonContainer));
|
|
149
|
-
return _el$22;
|
|
150
|
-
}
|
|
151
|
-
}), null);
|
|
152
|
-
insert(_el$5, createComponent(Show, {
|
|
153
|
-
get when() {
|
|
154
|
-
return memo(() => !!msg().toolCalls)() && msg().toolCalls.length > 0;
|
|
155
|
-
},
|
|
156
|
-
get children() {
|
|
157
|
-
var _el$23 = _tmpl$5();
|
|
158
|
-
insert(_el$23, createComponent(For, {
|
|
159
|
-
get each() {
|
|
160
|
-
return msg().toolCalls;
|
|
161
|
-
},
|
|
162
|
-
children: (tool) => createComponent(ToolCallDisplay, {
|
|
163
|
-
tool
|
|
164
|
-
})
|
|
165
|
-
}));
|
|
166
|
-
effect(() => className(_el$23, styles().conversationDetails.toolCallsContainer));
|
|
167
|
-
return _el$23;
|
|
168
|
-
}
|
|
169
|
-
}), null);
|
|
170
|
-
insert(_el$5, createComponent(Show, {
|
|
171
|
-
get when() {
|
|
172
|
-
return memo(() => !!msg().chunks)() && msg().chunks.length > 0;
|
|
173
|
-
},
|
|
174
|
-
get children() {
|
|
175
|
-
return createComponent(ChunksCollapsible, {
|
|
176
|
-
get chunks() {
|
|
177
|
-
return msg().chunks;
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
}), null);
|
|
182
|
-
effect((_p$) => {
|
|
183
|
-
var _v$1 = getCardClass(), _v$10 = msg().role === "user" ? "" : styles().conversationDetails.messageCardContent, _v$11 = styles().conversationDetails.messageHeader, _v$12 = msg().role === "user" ? styles().conversationDetails.avatarUser : isClientMessage() ? styles().conversationDetails.avatarClient : styles().conversationDetails.avatarServer, _v$13 = styles().conversationDetails.roleLabel, _v$14 = msg().role === "user" ? styles().conversationDetails.roleLabelUser : isClientMessage() ? styles().conversationDetails.roleLabelClient : styles().conversationDetails.roleLabelServer, _v$15 = styles().conversationDetails.timestamp;
|
|
184
|
-
_v$1 !== _p$.e && className(_el$, _p$.e = _v$1);
|
|
185
|
-
_v$10 !== _p$.t && className(_el$5, _p$.t = _v$10);
|
|
186
|
-
_v$11 !== _p$.a && className(_el$6, _p$.a = _v$11);
|
|
187
|
-
_v$12 !== _p$.o && className(_el$7, _p$.o = _v$12);
|
|
188
|
-
_v$13 !== _p$.i && className(_el$8, _p$.i = _v$13);
|
|
189
|
-
_v$14 !== _p$.n && className(_el$9, _p$.n = _v$14);
|
|
190
|
-
_v$15 !== _p$.s && className(_el$0, _p$.s = _v$15);
|
|
191
|
-
return _p$;
|
|
192
|
-
}, {
|
|
193
|
-
e: void 0,
|
|
194
|
-
t: void 0,
|
|
195
|
-
a: void 0,
|
|
196
|
-
o: void 0,
|
|
197
|
-
i: void 0,
|
|
198
|
-
n: void 0,
|
|
199
|
-
s: void 0
|
|
200
|
-
});
|
|
201
|
-
return _el$;
|
|
202
|
-
})();
|
|
203
|
-
};
|
|
204
|
-
export {
|
|
205
|
-
MessageCard
|
|
206
|
-
};
|
|
207
|
-
//# sourceMappingURL=MessageCard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageCard.js","sources":["../../../../src/components/conversation/MessageCard.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { JsonTree } from '@tanstack/devtools-ui'\nimport { useStyles } from '../../styles/use-styles'\nimport { formatDuration, formatTimestamp } from '../utils'\nimport { ToolCallDisplay } from './ToolCallDisplay'\nimport { ChunksCollapsible } from './ChunksCollapsible'\nimport type { Message } from '../../store/ai-store'\nimport type { Component } from 'solid-js'\n\ninterface MessageCardProps {\n message: Message\n}\n\nexport const MessageCard: Component<MessageCardProps> = (props) => {\n const styles = useStyles()\n // Access message through props directly for proper SolidJS reactivity\n const msg = () => props.message\n\n // Check if message is from client (explicitly marked) or server (default)\n const isClientMessage = () => msg().source === 'client'\n\n // Determine card class based on role and source\n const getCardClass = () => {\n const base = styles().conversationDetails.messageCard\n if (msg().role === 'user') {\n return `${base} ${styles().conversationDetails.messageCardUser}`\n }\n // For assistant messages: client if explicitly marked, otherwise server\n if (isClientMessage()) {\n return `${base} ${styles().conversationDetails.messageCardClient}`\n }\n return `${base} ${styles().conversationDetails.messageCardServer}`\n }\n\n const parseJsonContent = () => {\n const content = msg().content\n if (typeof content !== 'string') return null\n const trimmed = content.trim()\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) return null\n try {\n return JSON.parse(trimmed) as Record<string, unknown> | Array<unknown>\n } catch {\n return null\n }\n }\n\n const toolDuration = () => {\n const durations = msg()\n .toolCalls?.map((tool) => tool.duration || 0)\n .filter((duration) => duration > 0)\n if (!durations || durations.length === 0) return 0\n return durations.reduce((total, duration) => total + duration, 0)\n }\n\n return (\n <div class={getCardClass()}>\n {/* Source indicator banner at top of card */}\n <Show when={msg().role === 'assistant'}>\n <div\n class={`${styles().conversationDetails.sourceBanner} ${\n isClientMessage()\n ? styles().conversationDetails.sourceBannerClient\n : styles().conversationDetails.sourceBannerServer\n }`}\n >\n <span class={styles().conversationDetails.sourceBannerIcon}>\n {isClientMessage() ? '📱' : '☁️'}\n </span>\n <span class={styles().conversationDetails.sourceBannerText}>\n {isClientMessage() ? 'Client Message' : 'Server Message'}\n </span>\n </div>\n </Show>\n {/* Content wrapper with padding */}\n <div\n class={\n msg().role === 'user'\n ? ''\n : styles().conversationDetails.messageCardContent\n }\n >\n <div class={styles().conversationDetails.messageHeader}>\n <div\n class={\n msg().role === 'user'\n ? styles().conversationDetails.avatarUser\n : isClientMessage()\n ? styles().conversationDetails.avatarClient\n : styles().conversationDetails.avatarServer\n }\n >\n {msg().role === 'user' ? 'U' : msg().role === 'tool' ? '🔧' : '🤖'}\n </div>\n <div class={styles().conversationDetails.roleLabel}>\n <div\n class={\n msg().role === 'user'\n ? styles().conversationDetails.roleLabelUser\n : isClientMessage()\n ? styles().conversationDetails.roleLabelClient\n : styles().conversationDetails.roleLabelServer\n }\n >\n {msg().role}\n </div>\n </div>\n <div class={styles().conversationDetails.timestamp}>\n {formatTimestamp(msg().timestamp)}\n </div>\n {/* Per-message token usage */}\n <Show when={msg().usage}>\n <div class={styles().conversationDetails.messageUsage}>\n <span class={styles().conversationDetails.messageUsageIcon}>\n 🎯\n </span>\n <span>{msg().usage?.promptTokens.toLocaleString()} in</span>\n <span>•</span>\n <span>{msg().usage?.completionTokens.toLocaleString()} out</span>\n </div>\n </Show>\n <Show when={toolDuration() > 0}>\n <div class={styles().conversationDetails.messageUsage}>\n <span class={styles().conversationDetails.messageUsageIcon}>\n ⏱️\n </span>\n <span>{formatDuration(toolDuration())}</span>\n </div>\n </Show>\n </div>\n\n {/* Thinking content (for extended thinking models) */}\n <Show when={msg().thinkingContent}>\n <details class={styles().conversationDetails.thinkingDetails}>\n <summary class={styles().conversationDetails.thinkingSummary}>\n 💭 Thinking...\n </summary>\n <div class={styles().conversationDetails.thinkingContent}>\n {msg().thinkingContent}\n </div>\n </details>\n </Show>\n\n <Show\n when={msg().role === 'tool' && parseJsonContent() !== null}\n fallback={\n <div class={styles().conversationDetails.messageContent}>\n {msg().content}\n </div>\n }\n >\n <div class={styles().conversationDetails.toolJsonContainer}>\n <JsonTree value={parseJsonContent()!} />\n </div>\n </Show>\n\n {/* Tool Calls Display */}\n <Show when={msg().toolCalls && msg().toolCalls!.length > 0}>\n <div class={styles().conversationDetails.toolCallsContainer}>\n <For each={msg().toolCalls}>\n {(tool) => <ToolCallDisplay tool={tool} />}\n </For>\n </div>\n </Show>\n\n {/* Chunks Display (for client conversations with server chunks) */}\n <Show when={msg().chunks && msg().chunks!.length > 0}>\n <ChunksCollapsible chunks={msg().chunks!} />\n </Show>\n </div>\n </div>\n )\n}\n"],"names":["MessageCard","props","styles","useStyles","msg","message","isClientMessage","source","getCardClass","base","conversationDetails","messageCard","role","messageCardUser","messageCardClient","messageCardServer","parseJsonContent","content","trimmed","trim","startsWith","JSON","parse","toolDuration","durations","toolCalls","map","tool","duration","filter","length","reduce","total","_el$","_tmpl$6","_el$5","firstChild","_el$6","_el$7","_el$8","nextSibling","_el$9","_el$0","_$insert","_$createComponent","Show","when","children","_el$2","_tmpl$","_el$3","_el$4","_$effect","_p$","_v$","sourceBanner","sourceBannerClient","sourceBannerServer","_v$2","sourceBannerIcon","_v$3","sourceBannerText","e","_$className","t","a","undefined","_c$","_$memo","formatTimestamp","timestamp","usage","_el$1","_tmpl$2","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","promptTokens","toLocaleString","completionTokens","_v$4","messageUsage","_v$5","messageUsageIcon","_el$16","_tmpl$3","_el$17","_el$18","formatDuration","_v$6","_v$7","thinkingContent","_el$19","_tmpl$4","_el$20","_el$21","_v$8","thinkingDetails","_v$9","thinkingSummary","_v$0","fallback","_el$24","_tmpl$5","messageContent","_el$22","JsonTree","value","toolJsonContainer","_el$23","For","each","ToolCallDisplay","toolCallsContainer","chunks","ChunksCollapsible","_v$1","_v$10","messageCardContent","_v$11","messageHeader","_v$12","avatarUser","avatarClient","avatarServer","_v$13","roleLabel","_v$14","roleLabelUser","roleLabelClient","roleLabelServer","_v$15","o","i","n","s"],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Component } from 'solid-js';
|
|
2
|
-
import { Chunk } from '../../store/ai-store.js';
|
|
3
|
-
interface TokenUsage {
|
|
4
|
-
promptTokens: number;
|
|
5
|
-
completionTokens: number;
|
|
6
|
-
totalTokens: number;
|
|
7
|
-
}
|
|
8
|
-
interface MessageGroupProps {
|
|
9
|
-
messageId: string;
|
|
10
|
-
chunks: Array<Chunk>;
|
|
11
|
-
groupIndex: number;
|
|
12
|
-
usage?: TokenUsage;
|
|
13
|
-
}
|
|
14
|
-
export declare const MessageGroup: Component<MessageGroupProps>;
|
|
15
|
-
export {};
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { template, insert, createComponent, effect, className, setAttribute } from "solid-js/web";
|
|
2
|
-
import { Show, For } from "solid-js";
|
|
3
|
-
import { useStyles } from "../../styles/use-styles.js";
|
|
4
|
-
import { ChunkItem } from "./ChunkItem.js";
|
|
5
|
-
import { ChunkBadges } from "./ChunkBadges.js";
|
|
6
|
-
var _tmpl$ = /* @__PURE__ */ template(`<span style=opacity:0.7;margin-left:4px>(<!> entries)`), _tmpl$2 = /* @__PURE__ */ template(`<div><span>🎯</span><span> in</span><span>•</span><span> out`), _tmpl$3 = /* @__PURE__ */ template(`<div>`), _tmpl$4 = /* @__PURE__ */ template(`<details><summary><div><div><span>Message #</span><div>📦 <!> chunks</div></div><div>ID: </div></div></summary><div><div>`);
|
|
7
|
-
const MessageGroup = (props) => {
|
|
8
|
-
const styles = useStyles();
|
|
9
|
-
const accumulatedContent = () => props.chunks.filter((c) => c.type === "content" && (c.content || c.delta)).map((c) => c.content).join("");
|
|
10
|
-
const totalRawChunks = () => props.chunks.reduce((sum, c) => sum + (c.chunkCount || 1), 0);
|
|
11
|
-
const consolidatedEntries = () => props.chunks.length;
|
|
12
|
-
return (() => {
|
|
13
|
-
var _el$ = _tmpl$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
|
|
14
|
-
_el$5.firstChild;
|
|
15
|
-
var _el$7 = _el$5.nextSibling, _el$8 = _el$7.firstChild, _el$12 = _el$8.nextSibling;
|
|
16
|
-
_el$12.nextSibling;
|
|
17
|
-
var _el$20 = _el$4.nextSibling;
|
|
18
|
-
_el$20.firstChild;
|
|
19
|
-
var _el$23 = _el$2.nextSibling, _el$24 = _el$23.firstChild;
|
|
20
|
-
insert(_el$5, () => props.groupIndex + 1, null);
|
|
21
|
-
insert(_el$7, totalRawChunks, _el$12);
|
|
22
|
-
insert(_el$7, createComponent(Show, {
|
|
23
|
-
get when() {
|
|
24
|
-
return consolidatedEntries() !== totalRawChunks();
|
|
25
|
-
},
|
|
26
|
-
get children() {
|
|
27
|
-
var _el$0 = _tmpl$(), _el$1 = _el$0.firstChild, _el$11 = _el$1.nextSibling;
|
|
28
|
-
_el$11.nextSibling;
|
|
29
|
-
insert(_el$0, consolidatedEntries, _el$11);
|
|
30
|
-
return _el$0;
|
|
31
|
-
}
|
|
32
|
-
}), null);
|
|
33
|
-
insert(_el$4, createComponent(ChunkBadges, {
|
|
34
|
-
get chunks() {
|
|
35
|
-
return props.chunks;
|
|
36
|
-
}
|
|
37
|
-
}), null);
|
|
38
|
-
insert(_el$4, createComponent(Show, {
|
|
39
|
-
get when() {
|
|
40
|
-
return props.usage;
|
|
41
|
-
},
|
|
42
|
-
get children() {
|
|
43
|
-
var _el$13 = _tmpl$2(), _el$14 = _el$13.firstChild, _el$15 = _el$14.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$15.nextSibling, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild;
|
|
44
|
-
insert(_el$15, () => props.usage?.promptTokens.toLocaleString(), _el$16);
|
|
45
|
-
insert(_el$18, () => props.usage?.completionTokens.toLocaleString(), _el$19);
|
|
46
|
-
effect((_p$) => {
|
|
47
|
-
var _v$ = styles().conversationDetails.messageUsage, _v$2 = styles().conversationDetails.messageUsageIcon;
|
|
48
|
-
_v$ !== _p$.e && className(_el$13, _p$.e = _v$);
|
|
49
|
-
_v$2 !== _p$.t && className(_el$14, _p$.t = _v$2);
|
|
50
|
-
return _p$;
|
|
51
|
-
}, {
|
|
52
|
-
e: void 0,
|
|
53
|
-
t: void 0
|
|
54
|
-
});
|
|
55
|
-
return _el$13;
|
|
56
|
-
}
|
|
57
|
-
}), null);
|
|
58
|
-
insert(_el$20, () => props.messageId, null);
|
|
59
|
-
insert(_el$3, createComponent(Show, {
|
|
60
|
-
get when() {
|
|
61
|
-
return accumulatedContent();
|
|
62
|
-
},
|
|
63
|
-
get children() {
|
|
64
|
-
var _el$22 = _tmpl$3();
|
|
65
|
-
insert(_el$22, accumulatedContent);
|
|
66
|
-
effect((_p$) => {
|
|
67
|
-
var _v$3 = styles().conversationDetails.contentPreview, _v$4 = accumulatedContent();
|
|
68
|
-
_v$3 !== _p$.e && className(_el$22, _p$.e = _v$3);
|
|
69
|
-
_v$4 !== _p$.t && setAttribute(_el$22, "title", _p$.t = _v$4);
|
|
70
|
-
return _p$;
|
|
71
|
-
}, {
|
|
72
|
-
e: void 0,
|
|
73
|
-
t: void 0
|
|
74
|
-
});
|
|
75
|
-
return _el$22;
|
|
76
|
-
}
|
|
77
|
-
}), null);
|
|
78
|
-
insert(_el$24, createComponent(For, {
|
|
79
|
-
get each() {
|
|
80
|
-
return props.chunks;
|
|
81
|
-
},
|
|
82
|
-
children: (chunk, chunkIndex) => createComponent(ChunkItem, {
|
|
83
|
-
chunk,
|
|
84
|
-
get index() {
|
|
85
|
-
return chunkIndex();
|
|
86
|
-
},
|
|
87
|
-
variant: "large"
|
|
88
|
-
})
|
|
89
|
-
}));
|
|
90
|
-
effect((_p$) => {
|
|
91
|
-
var _v$5 = styles().conversationDetails.messageGroupDetails, _v$6 = styles().conversationDetails.messageGroupSummary, _v$7 = styles().conversationDetails.messageGroupContent, _v$8 = styles().conversationDetails.messageGroupHeader, _v$9 = `${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeCount}`, _v$0 = styles().conversationDetails.messageId, _v$1 = props.messageId, _v$10 = styles().conversationDetails.chunksContainer, _v$11 = styles().conversationDetails.chunksList;
|
|
92
|
-
_v$5 !== _p$.e && className(_el$, _p$.e = _v$5);
|
|
93
|
-
_v$6 !== _p$.t && className(_el$2, _p$.t = _v$6);
|
|
94
|
-
_v$7 !== _p$.a && className(_el$3, _p$.a = _v$7);
|
|
95
|
-
_v$8 !== _p$.o && className(_el$4, _p$.o = _v$8);
|
|
96
|
-
_v$9 !== _p$.i && className(_el$7, _p$.i = _v$9);
|
|
97
|
-
_v$0 !== _p$.n && className(_el$20, _p$.n = _v$0);
|
|
98
|
-
_v$1 !== _p$.s && setAttribute(_el$20, "title", _p$.s = _v$1);
|
|
99
|
-
_v$10 !== _p$.h && className(_el$23, _p$.h = _v$10);
|
|
100
|
-
_v$11 !== _p$.r && className(_el$24, _p$.r = _v$11);
|
|
101
|
-
return _p$;
|
|
102
|
-
}, {
|
|
103
|
-
e: void 0,
|
|
104
|
-
t: void 0,
|
|
105
|
-
a: void 0,
|
|
106
|
-
o: void 0,
|
|
107
|
-
i: void 0,
|
|
108
|
-
n: void 0,
|
|
109
|
-
s: void 0,
|
|
110
|
-
h: void 0,
|
|
111
|
-
r: void 0
|
|
112
|
-
});
|
|
113
|
-
return _el$;
|
|
114
|
-
})();
|
|
115
|
-
};
|
|
116
|
-
export {
|
|
117
|
-
MessageGroup
|
|
118
|
-
};
|
|
119
|
-
//# sourceMappingURL=MessageGroup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageGroup.js","sources":["../../../../src/components/conversation/MessageGroup.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport { ChunkItem } from './ChunkItem'\nimport { ChunkBadges } from './ChunkBadges'\nimport type { Component } from 'solid-js'\nimport type { Chunk } from '../../store/ai-store'\n\ninterface TokenUsage {\n promptTokens: number\n completionTokens: number\n totalTokens: number\n}\n\ninterface MessageGroupProps {\n messageId: string\n chunks: Array<Chunk>\n groupIndex: number\n usage?: TokenUsage\n}\n\nexport const MessageGroup: Component<MessageGroupProps> = (props) => {\n const styles = useStyles()\n\n const accumulatedContent = () =>\n props.chunks\n .filter((c) => c.type === 'content' && (c.content || c.delta))\n .map((c) => c.content)\n .join('')\n\n // Total raw chunks = sum of all chunkCounts\n const totalRawChunks = () =>\n props.chunks.reduce((sum, c) => sum + (c.chunkCount || 1), 0)\n // Consolidated entries = number of entries in the chunks array\n const consolidatedEntries = () => props.chunks.length\n\n return (\n <details class={styles().conversationDetails.messageGroupDetails}>\n <summary class={styles().conversationDetails.messageGroupSummary}>\n <div class={styles().conversationDetails.messageGroupContent}>\n {/* Header */}\n <div class={styles().conversationDetails.messageGroupHeader}>\n <span>Message #{props.groupIndex + 1}</span>\n <div\n class={`${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeCount}`}\n >\n 📦 {totalRawChunks()} chunks\n <Show when={consolidatedEntries() !== totalRawChunks()}>\n <span style={{ opacity: 0.7, 'margin-left': '4px' }}>\n ({consolidatedEntries()} entries)\n </span>\n </Show>\n </div>\n <ChunkBadges chunks={props.chunks} />\n {/* Usage info */}\n <Show when={props.usage}>\n <div class={styles().conversationDetails.messageUsage}>\n <span class={styles().conversationDetails.messageUsageIcon}>\n 🎯\n </span>\n <span>{props.usage?.promptTokens.toLocaleString()} in</span>\n <span>•</span>\n <span>\n {props.usage?.completionTokens.toLocaleString()} out\n </span>\n </div>\n </Show>\n </div>\n\n {/* Message ID */}\n <div\n class={styles().conversationDetails.messageId}\n title={props.messageId}\n >\n ID: {props.messageId}\n </div>\n\n {/* Accumulated Content Preview */}\n <Show when={accumulatedContent()}>\n <div\n class={styles().conversationDetails.contentPreview}\n title={accumulatedContent()}\n >\n {accumulatedContent()}\n </div>\n </Show>\n </div>\n </summary>\n\n {/* Chunks in this group */}\n <div class={styles().conversationDetails.chunksContainer}>\n <div class={styles().conversationDetails.chunksList}>\n <For each={props.chunks}>\n {(chunk, chunkIndex) => (\n <ChunkItem chunk={chunk} index={chunkIndex()} variant=\"large\" />\n )}\n </For>\n </div>\n </div>\n </details>\n )\n}\n"],"names":["MessageGroup","props","styles","useStyles","accumulatedContent","chunks","filter","c","type","content","delta","map","join","totalRawChunks","reduce","sum","chunkCount","consolidatedEntries","length","_el$","_tmpl$4","_el$2","firstChild","_el$3","_el$4","_el$5","_el$7","nextSibling","_el$8","_el$12","_el$20","_el$23","_el$24","_$insert","groupIndex","_$createComponent","Show","when","children","_el$0","_tmpl$","_el$1","_el$11","ChunkBadges","usage","_el$13","_tmpl$2","_el$14","_el$15","_el$16","_el$17","_el$18","_el$19","promptTokens","toLocaleString","completionTokens","_$effect","_p$","_v$","conversationDetails","messageUsage","_v$2","messageUsageIcon","e","_$className","t","undefined","messageId","_el$22","_tmpl$3","_v$3","contentPreview","_v$4","_$setAttribute","For","each","chunk","chunkIndex","ChunkItem","index","variant","_v$5","messageGroupDetails","_v$6","messageGroupSummary","_v$7","messageGroupContent","_v$8","messageGroupHeader","_v$9","chunkBadge","chunkBadgeCount","_v$0","_v$1","_v$10","chunksContainer","_v$11","chunksList","a","o","i","n","s","h","r"],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createComponent, template, insert, effect, className } from "solid-js/web";
|
|
2
|
-
import { Show, For } from "solid-js";
|
|
3
|
-
import { useStyles } from "../../styles/use-styles.js";
|
|
4
|
-
import { MessageCard } from "./MessageCard.js";
|
|
5
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<div>No messages yet. Start a conversation to see messages here.`);
|
|
6
|
-
const MessagesTab = (props) => {
|
|
7
|
-
const styles = useStyles();
|
|
8
|
-
return createComponent(Show, {
|
|
9
|
-
get when() {
|
|
10
|
-
return props.messages.length > 0;
|
|
11
|
-
},
|
|
12
|
-
get fallback() {
|
|
13
|
-
return (() => {
|
|
14
|
-
var _el$2 = _tmpl$2();
|
|
15
|
-
effect(() => className(_el$2, styles().conversationDetails.emptyMessages));
|
|
16
|
-
return _el$2;
|
|
17
|
-
})();
|
|
18
|
-
},
|
|
19
|
-
get children() {
|
|
20
|
-
var _el$ = _tmpl$();
|
|
21
|
-
insert(_el$, createComponent(For, {
|
|
22
|
-
get each() {
|
|
23
|
-
return props.messages;
|
|
24
|
-
},
|
|
25
|
-
children: (msg) => createComponent(MessageCard, {
|
|
26
|
-
message: msg
|
|
27
|
-
})
|
|
28
|
-
}));
|
|
29
|
-
effect(() => className(_el$, styles().conversationDetails.messagesList));
|
|
30
|
-
return _el$;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
export {
|
|
35
|
-
MessagesTab
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=MessagesTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessagesTab.js","sources":["../../../../src/components/conversation/MessagesTab.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport { MessageCard } from './MessageCard'\nimport type { Component } from 'solid-js'\nimport type { Message } from '../../store/ai-store'\n\ninterface MessagesTabProps {\n messages: Array<Message>\n}\n\nexport const MessagesTab: Component<MessagesTabProps> = (props) => {\n const styles = useStyles()\n\n return (\n <Show\n when={props.messages.length > 0}\n fallback={\n <div class={styles().conversationDetails.emptyMessages}>\n No messages yet. Start a conversation to see messages here.\n </div>\n }\n >\n <div class={styles().conversationDetails.messagesList}>\n <For each={props.messages}>\n {(msg) => <MessageCard message={msg} />}\n </For>\n </div>\n </Show>\n )\n}\n"],"names":["MessagesTab","props","styles","useStyles","_$createComponent","Show","when","messages","length","fallback","_el$2","_tmpl$2","_$effect","_$className","conversationDetails","emptyMessages","children","_el$","_tmpl$","_$insert","For","each","msg","MessageCard","message","messagesList"],"mappings":";;;;;AAUO,MAAMA,cAA4CC,CAAAA,UAAU;AACjE,QAAMC,SAASC,UAAAA;AAEf,SAAAC,gBACGC,MAAI;AAAA,IAAA,IACHC,OAAI;AAAA,aAAEL,MAAMM,SAASC,SAAS;AAAA,IAAC;AAAA,IAAA,IAC/BC,WAAQ;AAAA,cAAA,MAAA;AAAA,YAAAC,QAAAC,QAAAA;AAAAC,eAAA,MAAAC,UAAAH,OACMR,SAASY,oBAAoBC,aAAa,CAAA;AAAA,eAAAL;AAAAA,MAAA,GAAA;AAAA,IAAA;AAAA,IAAA,IAAAM,WAAA;AAAA,UAAAC,OAAAC,OAAAA;AAAAC,aAAAF,MAAAb,gBAMrDgB,KAAG;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEpB,MAAMM;AAAAA,QAAQ;AAAA,QAAAS,UACrBM,CAAAA,QAAGlB,gBAAMmB,aAAW;AAAA,UAACC,SAASF;AAAAA,QAAAA,CAAG;AAAA,MAAA,CAAI,CAAA;AAAAV,aAAA,MAAAC,UAAAI,MAF/Bf,SAASY,oBAAoBW,YAAY,CAAA;AAAA,aAAAR;AAAAA,IAAA;AAAA,EAAA,CAAA;AAO3D;"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { createComponent, template, insert, effect, className, memo } from "solid-js/web";
|
|
2
|
-
import { Show, For } from "solid-js";
|
|
3
|
-
import { useStyles } from "../../styles/use-styles.js";
|
|
4
|
-
import { formatDuration } from "../utils/format.js";
|
|
5
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<div>No summarize operations yet`), _tmpl$3 = /* @__PURE__ */ template(`<div>⏱️ `), _tmpl$4 = /* @__PURE__ */ template(`<div><span>Output:</span><span> chars`), _tmpl$5 = /* @__PURE__ */ template(`<div><div><div>📝</div><div>Summarize</div><div></div></div><div><div><span>Model:</span><span></span></div><div><span>Input:</span><span> chars</span></div><div><span>Started:</span><span>`);
|
|
6
|
-
const SummariesTab = (props) => {
|
|
7
|
-
const styles = useStyles();
|
|
8
|
-
return createComponent(Show, {
|
|
9
|
-
get when() {
|
|
10
|
-
return props.summaries.length > 0;
|
|
11
|
-
},
|
|
12
|
-
get fallback() {
|
|
13
|
-
return (() => {
|
|
14
|
-
var _el$2 = _tmpl$2();
|
|
15
|
-
effect(() => className(_el$2, styles().conversationDetails.emptyMessages));
|
|
16
|
-
return _el$2;
|
|
17
|
-
})();
|
|
18
|
-
},
|
|
19
|
-
get children() {
|
|
20
|
-
var _el$ = _tmpl$();
|
|
21
|
-
insert(_el$, createComponent(For, {
|
|
22
|
-
get each() {
|
|
23
|
-
return props.summaries;
|
|
24
|
-
},
|
|
25
|
-
children: (summary) => (() => {
|
|
26
|
-
var _el$3 = _tmpl$5(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$0 = _el$4.nextSibling, _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$1.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$14.firstChild, _el$20 = _el$12.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$21.nextSibling;
|
|
27
|
-
insert(_el$7, () => summary.status);
|
|
28
|
-
insert(_el$4, createComponent(Show, {
|
|
29
|
-
get when() {
|
|
30
|
-
return memo(() => summary.duration !== void 0)() && summary.duration > 0;
|
|
31
|
-
},
|
|
32
|
-
get children() {
|
|
33
|
-
var _el$8 = _tmpl$3();
|
|
34
|
-
_el$8.firstChild;
|
|
35
|
-
insert(_el$8, () => formatDuration(summary.duration), null);
|
|
36
|
-
effect(() => className(_el$8, styles().conversationDetails.durationBadge));
|
|
37
|
-
return _el$8;
|
|
38
|
-
}
|
|
39
|
-
}), null);
|
|
40
|
-
insert(_el$11, () => summary.model);
|
|
41
|
-
insert(_el$14, () => summary.inputLength.toLocaleString(), _el$15);
|
|
42
|
-
insert(_el$0, createComponent(Show, {
|
|
43
|
-
get when() {
|
|
44
|
-
return summary.outputLength !== void 0;
|
|
45
|
-
},
|
|
46
|
-
get children() {
|
|
47
|
-
var _el$16 = _tmpl$4(), _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild;
|
|
48
|
-
insert(_el$18, () => summary.outputLength?.toLocaleString(), _el$19);
|
|
49
|
-
effect((_p$) => {
|
|
50
|
-
var _v$ = styles().conversationDetails.operationDetail, _v$2 = styles().conversationDetails.operationLabel, _v$3 = styles().conversationDetails.operationValue;
|
|
51
|
-
_v$ !== _p$.e && className(_el$16, _p$.e = _v$);
|
|
52
|
-
_v$2 !== _p$.t && className(_el$17, _p$.t = _v$2);
|
|
53
|
-
_v$3 !== _p$.a && className(_el$18, _p$.a = _v$3);
|
|
54
|
-
return _p$;
|
|
55
|
-
}, {
|
|
56
|
-
e: void 0,
|
|
57
|
-
t: void 0,
|
|
58
|
-
a: void 0
|
|
59
|
-
});
|
|
60
|
-
return _el$16;
|
|
61
|
-
}
|
|
62
|
-
}), _el$20);
|
|
63
|
-
insert(_el$22, () => new Date(summary.timestamp).toLocaleTimeString());
|
|
64
|
-
effect((_p$) => {
|
|
65
|
-
var _v$4 = styles().conversationDetails.operationCard, _v$5 = styles().conversationDetails.operationHeader, _v$6 = styles().conversationDetails.operationIcon, _v$7 = styles().conversationDetails.operationTitle, _v$8 = `${styles().conversationDetails.operationStatus} ${summary.status === "completed" ? styles().conversationDetails.operationStatusCompleted : styles().conversationDetails.operationStatusPending}`, _v$9 = styles().conversationDetails.operationDetails, _v$0 = styles().conversationDetails.operationDetail, _v$1 = styles().conversationDetails.operationLabel, _v$10 = styles().conversationDetails.operationValue, _v$11 = styles().conversationDetails.operationDetail, _v$12 = styles().conversationDetails.operationLabel, _v$13 = styles().conversationDetails.operationValue, _v$14 = styles().conversationDetails.operationDetail, _v$15 = styles().conversationDetails.operationLabel, _v$16 = styles().conversationDetails.operationValue;
|
|
66
|
-
_v$4 !== _p$.e && className(_el$3, _p$.e = _v$4);
|
|
67
|
-
_v$5 !== _p$.t && className(_el$4, _p$.t = _v$5);
|
|
68
|
-
_v$6 !== _p$.a && className(_el$5, _p$.a = _v$6);
|
|
69
|
-
_v$7 !== _p$.o && className(_el$6, _p$.o = _v$7);
|
|
70
|
-
_v$8 !== _p$.i && className(_el$7, _p$.i = _v$8);
|
|
71
|
-
_v$9 !== _p$.n && className(_el$0, _p$.n = _v$9);
|
|
72
|
-
_v$0 !== _p$.s && className(_el$1, _p$.s = _v$0);
|
|
73
|
-
_v$1 !== _p$.h && className(_el$10, _p$.h = _v$1);
|
|
74
|
-
_v$10 !== _p$.r && className(_el$11, _p$.r = _v$10);
|
|
75
|
-
_v$11 !== _p$.d && className(_el$12, _p$.d = _v$11);
|
|
76
|
-
_v$12 !== _p$.l && className(_el$13, _p$.l = _v$12);
|
|
77
|
-
_v$13 !== _p$.u && className(_el$14, _p$.u = _v$13);
|
|
78
|
-
_v$14 !== _p$.c && className(_el$20, _p$.c = _v$14);
|
|
79
|
-
_v$15 !== _p$.w && className(_el$21, _p$.w = _v$15);
|
|
80
|
-
_v$16 !== _p$.m && className(_el$22, _p$.m = _v$16);
|
|
81
|
-
return _p$;
|
|
82
|
-
}, {
|
|
83
|
-
e: void 0,
|
|
84
|
-
t: void 0,
|
|
85
|
-
a: void 0,
|
|
86
|
-
o: void 0,
|
|
87
|
-
i: void 0,
|
|
88
|
-
n: void 0,
|
|
89
|
-
s: void 0,
|
|
90
|
-
h: void 0,
|
|
91
|
-
r: void 0,
|
|
92
|
-
d: void 0,
|
|
93
|
-
l: void 0,
|
|
94
|
-
u: void 0,
|
|
95
|
-
c: void 0,
|
|
96
|
-
w: void 0,
|
|
97
|
-
m: void 0
|
|
98
|
-
});
|
|
99
|
-
return _el$3;
|
|
100
|
-
})()
|
|
101
|
-
}));
|
|
102
|
-
effect(() => className(_el$, styles().conversationDetails.messagesList));
|
|
103
|
-
return _el$;
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
};
|
|
107
|
-
export {
|
|
108
|
-
SummariesTab
|
|
109
|
-
};
|
|
110
|
-
//# sourceMappingURL=SummariesTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SummariesTab.js","sources":["../../../../src/components/conversation/SummariesTab.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport { formatDuration } from '../utils'\nimport type { Component } from 'solid-js'\nimport type { SummarizeOperation } from '../../store/ai-context'\n\ninterface SummariesTabProps {\n summaries: Array<SummarizeOperation>\n}\n\nexport const SummariesTab: Component<SummariesTabProps> = (props) => {\n const styles = useStyles()\n\n return (\n <Show\n when={props.summaries.length > 0}\n fallback={\n <div class={styles().conversationDetails.emptyMessages}>\n No summarize operations yet\n </div>\n }\n >\n <div class={styles().conversationDetails.messagesList}>\n <For each={props.summaries}>\n {(summary) => (\n <div class={styles().conversationDetails.operationCard}>\n <div class={styles().conversationDetails.operationHeader}>\n <div class={styles().conversationDetails.operationIcon}>📝</div>\n <div class={styles().conversationDetails.operationTitle}>\n Summarize\n </div>\n <div\n class={`${styles().conversationDetails.operationStatus} ${\n summary.status === 'completed'\n ? styles().conversationDetails.operationStatusCompleted\n : styles().conversationDetails.operationStatusPending\n }`}\n >\n {summary.status}\n </div>\n <Show\n when={summary.duration !== undefined && summary.duration > 0}\n >\n <div class={styles().conversationDetails.durationBadge}>\n ⏱️ {formatDuration(summary.duration)}\n </div>\n </Show>\n </div>\n <div class={styles().conversationDetails.operationDetails}>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Model:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {summary.model}\n </span>\n </div>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Input:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {summary.inputLength.toLocaleString()} chars\n </span>\n </div>\n <Show when={summary.outputLength !== undefined}>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Output:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {summary.outputLength?.toLocaleString()} chars\n </span>\n </div>\n </Show>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Started:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {new Date(summary.timestamp).toLocaleTimeString()}\n </span>\n </div>\n </div>\n </div>\n )}\n </For>\n </div>\n </Show>\n )\n}\n"],"names":["SummariesTab","props","styles","useStyles","_$createComponent","Show","when","summaries","length","fallback","_el$2","_tmpl$2","_$effect","_$className","conversationDetails","emptyMessages","children","_el$","_tmpl$","_$insert","For","each","summary","_el$3","_tmpl$5","_el$4","firstChild","_el$5","_el$6","nextSibling","_el$7","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$20","_el$21","_el$22","status","_$memo","duration","undefined","_el$8","_tmpl$3","formatDuration","durationBadge","model","inputLength","toLocaleString","outputLength","_el$16","_tmpl$4","_el$17","_el$18","_el$19","_p$","_v$","operationDetail","_v$2","operationLabel","_v$3","operationValue","e","t","a","Date","timestamp","toLocaleTimeString","_v$4","operationCard","_v$5","operationHeader","_v$6","operationIcon","_v$7","operationTitle","_v$8","operationStatus","operationStatusCompleted","operationStatusPending","_v$9","operationDetails","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","o","i","n","s","h","r","d","l","u","c","w","m","messagesList"],"mappings":"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"}
|