@tanstack/ai-devtools-core 0.0.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/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/esm/components/ConversationDetails.d.ts +2 -0
- package/dist/esm/components/ConversationDetails.js +134 -0
- package/dist/esm/components/ConversationDetails.js.map +1 -0
- package/dist/esm/components/ConversationsList.d.ts +2 -0
- package/dist/esm/components/ConversationsList.js +30 -0
- package/dist/esm/components/ConversationsList.js.map +1 -0
- package/dist/esm/components/Shell.d.ts +1 -0
- package/dist/esm/components/Shell.js +94 -0
- package/dist/esm/components/Shell.js.map +1 -0
- package/dist/esm/components/conversation/ChunkBadges.d.ts +7 -0
- package/dist/esm/components/conversation/ChunkBadges.js +54 -0
- package/dist/esm/components/conversation/ChunkBadges.js.map +1 -0
- package/dist/esm/components/conversation/ChunkItem.d.ts +9 -0
- package/dist/esm/components/conversation/ChunkItem.js +247 -0
- package/dist/esm/components/conversation/ChunkItem.js.map +1 -0
- package/dist/esm/components/conversation/ChunksCollapsible.d.ts +7 -0
- package/dist/esm/components/conversation/ChunksCollapsible.js +77 -0
- package/dist/esm/components/conversation/ChunksCollapsible.js.map +1 -0
- package/dist/esm/components/conversation/ChunksTab.d.ts +8 -0
- package/dist/esm/components/conversation/ChunksTab.js +87 -0
- package/dist/esm/components/conversation/ChunksTab.js.map +1 -0
- package/dist/esm/components/conversation/ConversationHeader.d.ts +7 -0
- package/dist/esm/components/conversation/ConversationHeader.js +187 -0
- package/dist/esm/components/conversation/ConversationHeader.js.map +1 -0
- package/dist/esm/components/conversation/ConversationTabs.d.ts +10 -0
- package/dist/esm/components/conversation/ConversationTabs.js +88 -0
- package/dist/esm/components/conversation/ConversationTabs.js.map +1 -0
- package/dist/esm/components/conversation/EmbeddingsTab.d.ts +7 -0
- package/dist/esm/components/conversation/EmbeddingsTab.js +90 -0
- package/dist/esm/components/conversation/EmbeddingsTab.js.map +1 -0
- package/dist/esm/components/conversation/MessageCard.d.ts +7 -0
- package/dist/esm/components/conversation/MessageCard.js +152 -0
- package/dist/esm/components/conversation/MessageCard.js.map +1 -0
- package/dist/esm/components/conversation/MessageGroup.d.ts +15 -0
- package/dist/esm/components/conversation/MessageGroup.js +119 -0
- package/dist/esm/components/conversation/MessageGroup.js.map +1 -0
- package/dist/esm/components/conversation/MessagesTab.d.ts +7 -0
- package/dist/esm/components/conversation/MessagesTab.js +37 -0
- package/dist/esm/components/conversation/MessagesTab.js.map +1 -0
- package/dist/esm/components/conversation/SummariesTab.d.ts +7 -0
- package/dist/esm/components/conversation/SummariesTab.js +110 -0
- package/dist/esm/components/conversation/SummariesTab.js.map +1 -0
- package/dist/esm/components/conversation/ToolCallDisplay.d.ts +7 -0
- package/dist/esm/components/conversation/ToolCallDisplay.js +123 -0
- package/dist/esm/components/conversation/ToolCallDisplay.js.map +1 -0
- package/dist/esm/components/conversation/index.d.ts +7 -0
- package/dist/esm/components/list/ConversationRow.d.ts +7 -0
- package/dist/esm/components/list/ConversationRow.js +122 -0
- package/dist/esm/components/list/ConversationRow.js.map +1 -0
- package/dist/esm/components/list/index.d.ts +1 -0
- package/dist/esm/components/utils/format.d.ts +6 -0
- package/dist/esm/components/utils/format.js +68 -0
- package/dist/esm/components/utils/format.js.map +1 -0
- package/dist/esm/components/utils/index.d.ts +1 -0
- package/dist/esm/core.d.ts +18 -0
- package/dist/esm/core.js +9 -0
- package/dist/esm/core.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/production.d.ts +2 -0
- package/dist/esm/production.js +5 -0
- package/dist/esm/production.js.map +1 -0
- package/dist/esm/store/ai-context.d.ts +126 -0
- package/dist/esm/store/ai-context.js +1081 -0
- package/dist/esm/store/ai-context.js.map +1 -0
- package/dist/esm/store/ai-store.d.ts +1 -0
- package/dist/esm/styles/tokens.d.ts +298 -0
- package/dist/esm/styles/tokens.js +107 -0
- package/dist/esm/styles/tokens.js.map +1 -0
- package/dist/esm/styles/use-styles.d.ts +226 -0
- package/dist/esm/styles/use-styles.js +1538 -0
- package/dist/esm/styles/use-styles.js.map +1 -0
- package/package.json +61 -0
- package/src/components/ConversationDetails.tsx +89 -0
- package/src/components/ConversationsList.tsx +21 -0
- package/src/components/Shell.tsx +93 -0
- package/src/components/conversation/ChunkBadges.tsx +51 -0
- package/src/components/conversation/ChunkItem.tsx +273 -0
- package/src/components/conversation/ChunksCollapsible.tsx +58 -0
- package/src/components/conversation/ChunksTab.tsx +85 -0
- package/src/components/conversation/ConversationHeader.tsx +130 -0
- package/src/components/conversation/ConversationTabs.tsx +104 -0
- package/src/components/conversation/EmbeddingsTab.tsx +80 -0
- package/src/components/conversation/MessageCard.tsx +137 -0
- package/src/components/conversation/MessageGroup.tsx +101 -0
- package/src/components/conversation/MessagesTab.tsx +30 -0
- package/src/components/conversation/SummariesTab.tsx +91 -0
- package/src/components/conversation/ToolCallDisplay.tsx +99 -0
- package/src/components/conversation/index.ts +8 -0
- package/src/components/list/ConversationRow.tsx +85 -0
- package/src/components/list/index.ts +1 -0
- package/src/components/utils/format.ts +61 -0
- package/src/components/utils/index.ts +1 -0
- package/src/core.tsx +10 -0
- package/src/index.ts +8 -0
- package/src/production.ts +3 -0
- package/src/store/ai-context.tsx +1784 -0
- package/src/store/ai-store.ts +2 -0
- package/src/styles/tokens.ts +305 -0
- package/src/styles/use-styles.ts +1537 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageCard.js","sources":["../../../../src/components/conversation/MessageCard.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport { 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 // Check if this is a non-user message (needs source banner and content wrapper)\n const isSourcedMessage = () => msg().role !== 'user'\n\n return (\n <div class={getCardClass()}>\n {/* Source indicator banner at top of card */}\n <Show when={isSourcedMessage()}>\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 isSourcedMessage()\n ? styles().conversationDetails.messageCardContent\n : ''\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 </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 <div class={styles().conversationDetails.messageContent}>\n {msg().content}\n </div>\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","isSourcedMessage","_el$","_tmpl$5","_el$5","firstChild","_el$6","_el$7","_el$8","nextSibling","_el$9","_el$0","_el$19","_$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","thinkingContent","_el$16","_tmpl$3","_el$17","_el$18","_v$6","thinkingDetails","_v$7","thinkingSummary","_v$8","content","toolCalls","length","_el$20","_tmpl$4","For","each","tool","ToolCallDisplay","toolCallsContainer","chunks","ChunksCollapsible","_v$9","_v$0","messageCardContent","_v$1","messageHeader","_v$10","avatarUser","avatarClient","avatarServer","_v$11","roleLabel","_v$12","roleLabelUser","roleLabelClient","roleLabelServer","_v$13","_v$14","messageContent","o","i","n","s","h"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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 {};
|
|
@@ -0,0 +1,119 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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;"}
|
|
@@ -0,0 +1,110 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { template, insert, createComponent, effect, className, memo } from "solid-js/web";
|
|
2
|
+
import { Show } from "solid-js";
|
|
3
|
+
import { JsonTree } from "@tanstack/devtools-ui";
|
|
4
|
+
import { useStyles } from "../../styles/use-styles.js";
|
|
5
|
+
import { formatDuration } from "../utils/format.js";
|
|
6
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div>⏱️ `), _tmpl$2 = /* @__PURE__ */ template(`<div>APPROVAL REQUIRED`), _tmpl$3 = /* @__PURE__ */ template(`<div><div>Arguments</div><div>`), _tmpl$4 = /* @__PURE__ */ template(`<div><div>Result</div><div>`), _tmpl$5 = /* @__PURE__ */ template(`<details><summary><div> </div><div></div></summary><div>`);
|
|
7
|
+
const ToolCallDisplay = (props) => {
|
|
8
|
+
const styles = useStyles();
|
|
9
|
+
const tool = () => props.tool;
|
|
10
|
+
const parsedArguments = () => {
|
|
11
|
+
const args = tool().arguments;
|
|
12
|
+
if (typeof args === "string") {
|
|
13
|
+
try {
|
|
14
|
+
return JSON.parse(args);
|
|
15
|
+
} catch {
|
|
16
|
+
return args;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return args;
|
|
20
|
+
};
|
|
21
|
+
return (() => {
|
|
22
|
+
var _el$ = _tmpl$5(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$9 = _el$2.nextSibling;
|
|
23
|
+
insert(_el$3, () => tool().approvalRequired ? "⚠️" : "🔧", _el$4);
|
|
24
|
+
insert(_el$3, () => tool().name, null);
|
|
25
|
+
insert(_el$5, () => tool().state);
|
|
26
|
+
insert(_el$2, createComponent(Show, {
|
|
27
|
+
get when() {
|
|
28
|
+
return memo(() => tool().duration !== void 0)() && tool().duration > 0;
|
|
29
|
+
},
|
|
30
|
+
get children() {
|
|
31
|
+
var _el$6 = _tmpl$();
|
|
32
|
+
_el$6.firstChild;
|
|
33
|
+
insert(_el$6, () => formatDuration(tool().duration), null);
|
|
34
|
+
effect(() => className(_el$6, styles().conversationDetails.durationBadge));
|
|
35
|
+
return _el$6;
|
|
36
|
+
}
|
|
37
|
+
}), null);
|
|
38
|
+
insert(_el$2, createComponent(Show, {
|
|
39
|
+
get when() {
|
|
40
|
+
return tool().approvalRequired;
|
|
41
|
+
},
|
|
42
|
+
get children() {
|
|
43
|
+
var _el$8 = _tmpl$2();
|
|
44
|
+
effect(() => className(_el$8, styles().conversationDetails.approvalRequiredBadge));
|
|
45
|
+
return _el$8;
|
|
46
|
+
}
|
|
47
|
+
}), null);
|
|
48
|
+
insert(_el$9, createComponent(Show, {
|
|
49
|
+
get when() {
|
|
50
|
+
return tool().arguments;
|
|
51
|
+
},
|
|
52
|
+
get children() {
|
|
53
|
+
var _el$0 = _tmpl$3(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling;
|
|
54
|
+
insert(_el$10, createComponent(JsonTree, {
|
|
55
|
+
get value() {
|
|
56
|
+
return parsedArguments();
|
|
57
|
+
},
|
|
58
|
+
defaultExpansionDepth: 2,
|
|
59
|
+
copyable: true
|
|
60
|
+
}));
|
|
61
|
+
effect((_p$) => {
|
|
62
|
+
var _v$ = styles().conversationDetails.toolSection, _v$2 = styles().conversationDetails.toolSectionLabel, _v$3 = styles().conversationDetails.toolJsonContainer;
|
|
63
|
+
_v$ !== _p$.e && className(_el$0, _p$.e = _v$);
|
|
64
|
+
_v$2 !== _p$.t && className(_el$1, _p$.t = _v$2);
|
|
65
|
+
_v$3 !== _p$.a && className(_el$10, _p$.a = _v$3);
|
|
66
|
+
return _p$;
|
|
67
|
+
}, {
|
|
68
|
+
e: void 0,
|
|
69
|
+
t: void 0,
|
|
70
|
+
a: void 0
|
|
71
|
+
});
|
|
72
|
+
return _el$0;
|
|
73
|
+
}
|
|
74
|
+
}), null);
|
|
75
|
+
insert(_el$9, createComponent(Show, {
|
|
76
|
+
get when() {
|
|
77
|
+
return tool().result !== void 0;
|
|
78
|
+
},
|
|
79
|
+
get children() {
|
|
80
|
+
var _el$11 = _tmpl$4(), _el$12 = _el$11.firstChild, _el$13 = _el$12.nextSibling;
|
|
81
|
+
insert(_el$13, createComponent(JsonTree, {
|
|
82
|
+
get value() {
|
|
83
|
+
return tool().result;
|
|
84
|
+
},
|
|
85
|
+
defaultExpansionDepth: 2,
|
|
86
|
+
copyable: true
|
|
87
|
+
}));
|
|
88
|
+
effect((_p$) => {
|
|
89
|
+
var _v$4 = styles().conversationDetails.toolSection, _v$5 = styles().conversationDetails.toolSectionLabel, _v$6 = styles().conversationDetails.toolJsonContainer;
|
|
90
|
+
_v$4 !== _p$.e && className(_el$11, _p$.e = _v$4);
|
|
91
|
+
_v$5 !== _p$.t && className(_el$12, _p$.t = _v$5);
|
|
92
|
+
_v$6 !== _p$.a && className(_el$13, _p$.a = _v$6);
|
|
93
|
+
return _p$;
|
|
94
|
+
}, {
|
|
95
|
+
e: void 0,
|
|
96
|
+
t: void 0,
|
|
97
|
+
a: void 0
|
|
98
|
+
});
|
|
99
|
+
return _el$11;
|
|
100
|
+
}
|
|
101
|
+
}), null);
|
|
102
|
+
effect((_p$) => {
|
|
103
|
+
var _v$7 = `${styles().conversationDetails.toolCall} ${tool().approvalRequired ? styles().conversationDetails.toolCallApproval : styles().conversationDetails.toolCallNormal}`, _v$8 = styles().conversationDetails.toolCallHeader, _v$9 = `${styles().conversationDetails.toolCallName} ${tool().approvalRequired ? styles().conversationDetails.toolCallNameApproval : styles().conversationDetails.toolCallNameNormal}`, _v$0 = `${styles().conversationDetails.toolStateBadge} ${tool().approvalRequired ? styles().conversationDetails.toolStateBadgeApproval : styles().conversationDetails.toolStateBadgeNormal}`, _v$1 = styles().conversationDetails.toolCallContent;
|
|
104
|
+
_v$7 !== _p$.e && className(_el$, _p$.e = _v$7);
|
|
105
|
+
_v$8 !== _p$.t && className(_el$2, _p$.t = _v$8);
|
|
106
|
+
_v$9 !== _p$.a && className(_el$3, _p$.a = _v$9);
|
|
107
|
+
_v$0 !== _p$.o && className(_el$5, _p$.o = _v$0);
|
|
108
|
+
_v$1 !== _p$.i && className(_el$9, _p$.i = _v$1);
|
|
109
|
+
return _p$;
|
|
110
|
+
}, {
|
|
111
|
+
e: void 0,
|
|
112
|
+
t: void 0,
|
|
113
|
+
a: void 0,
|
|
114
|
+
o: void 0,
|
|
115
|
+
i: void 0
|
|
116
|
+
});
|
|
117
|
+
return _el$;
|
|
118
|
+
})();
|
|
119
|
+
};
|
|
120
|
+
export {
|
|
121
|
+
ToolCallDisplay
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=ToolCallDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolCallDisplay.js","sources":["../../../../src/components/conversation/ToolCallDisplay.tsx"],"sourcesContent":["import { Show } from 'solid-js'\nimport { JsonTree } from '@tanstack/devtools-ui'\nimport { useStyles } from '../../styles/use-styles'\nimport { formatDuration } from '../utils'\nimport type { Component } from 'solid-js'\nimport type { ToolCall } from '../../store/ai-context'\n\ninterface ToolCallDisplayProps {\n tool: ToolCall\n}\n\nexport const ToolCallDisplay: Component<ToolCallDisplayProps> = (props) => {\n const styles = useStyles()\n const tool = () => props.tool\n\n // Parse arguments if they're a string\n const parsedArguments = () => {\n const args = tool().arguments\n if (typeof args === 'string') {\n try {\n return JSON.parse(args)\n } catch {\n return args\n }\n }\n return args\n }\n\n return (\n <details\n class={`${styles().conversationDetails.toolCall} ${\n tool().approvalRequired\n ? styles().conversationDetails.toolCallApproval\n : styles().conversationDetails.toolCallNormal\n }`}\n >\n <summary class={styles().conversationDetails.toolCallHeader}>\n <div\n class={`${styles().conversationDetails.toolCallName} ${\n tool().approvalRequired\n ? styles().conversationDetails.toolCallNameApproval\n : styles().conversationDetails.toolCallNameNormal\n }`}\n >\n {tool().approvalRequired ? '⚠️' : '🔧'} {tool().name}\n </div>\n <div\n class={`${styles().conversationDetails.toolStateBadge} ${\n tool().approvalRequired\n ? styles().conversationDetails.toolStateBadgeApproval\n : styles().conversationDetails.toolStateBadgeNormal\n }`}\n >\n {tool().state}\n </div>\n <Show when={tool().duration !== undefined && tool().duration! > 0}>\n <div class={styles().conversationDetails.durationBadge}>\n ⏱️ {formatDuration(tool().duration)}\n </div>\n </Show>\n <Show when={tool().approvalRequired}>\n <div class={styles().conversationDetails.approvalRequiredBadge}>\n APPROVAL REQUIRED\n </div>\n </Show>\n </summary>\n <div class={styles().conversationDetails.toolCallContent}>\n <Show when={tool().arguments}>\n <div class={styles().conversationDetails.toolSection}>\n <div class={styles().conversationDetails.toolSectionLabel}>\n Arguments\n </div>\n <div class={styles().conversationDetails.toolJsonContainer}>\n <JsonTree\n value={parsedArguments() as Record<string, unknown>}\n defaultExpansionDepth={2}\n copyable\n />\n </div>\n </div>\n </Show>\n <Show when={tool().result !== undefined}>\n <div class={styles().conversationDetails.toolSection}>\n <div class={styles().conversationDetails.toolSectionLabel}>\n Result\n </div>\n <div class={styles().conversationDetails.toolJsonContainer}>\n <JsonTree\n value={tool().result as Record<string, unknown>}\n defaultExpansionDepth={2}\n copyable\n />\n </div>\n </div>\n </Show>\n </div>\n </details>\n )\n}\n"],"names":["ToolCallDisplay","props","styles","useStyles","tool","parsedArguments","args","arguments","JSON","parse","_el$","_tmpl$5","_el$2","firstChild","_el$3","_el$4","_el$5","nextSibling","_el$9","_$insert","approvalRequired","name","state","_$createComponent","Show","when","_$memo","duration","undefined","children","_el$6","_tmpl$","formatDuration","_$effect","_$className","conversationDetails","durationBadge","_el$8","_tmpl$2","approvalRequiredBadge","_el$0","_tmpl$3","_el$1","_el$10","JsonTree","value","defaultExpansionDepth","copyable","_p$","_v$","toolSection","_v$2","toolSectionLabel","_v$3","toolJsonContainer","e","t","a","result","_el$11","_tmpl$4","_el$12","_el$13","_v$4","_v$5","_v$6","_v$7","toolCall","toolCallApproval","toolCallNormal","_v$8","toolCallHeader","_v$9","toolCallName","toolCallNameApproval","toolCallNameNormal","_v$0","toolStateBadge","toolStateBadgeApproval","toolStateBadgeNormal","_v$1","toolCallContent","o","i"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ConversationHeader } from './ConversationHeader.js';
|
|
2
|
+
export { ConversationTabs } from './ConversationTabs.js';
|
|
3
|
+
export type { TabType } from './ConversationTabs.js';
|
|
4
|
+
export { MessagesTab } from './MessagesTab.js';
|
|
5
|
+
export { ChunksTab } from './ChunksTab.js';
|
|
6
|
+
export { EmbeddingsTab } from './EmbeddingsTab.js';
|
|
7
|
+
export { SummariesTab } from './SummariesTab.js';
|