@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.
Files changed (86) hide show
  1. package/dist/Shell/GHXECDJV.js +5056 -0
  2. package/dist/Shell/MUFU35SY.js +4242 -0
  3. package/dist/dev.js +11 -0
  4. package/dist/{esm/index.d.ts → index.d.ts} +7 -5
  5. package/dist/index.js +11 -0
  6. package/dist/production/Shell/GHXECDJV.js +5056 -0
  7. package/dist/production/Shell/MUFU35SY.js +4242 -0
  8. package/dist/production/dev.js +8 -0
  9. package/dist/production/index.d.ts +12 -0
  10. package/dist/production/index.js +8 -0
  11. package/dist/production/server.js +8 -0
  12. package/dist/server.js +11 -0
  13. package/package.json +44 -10
  14. package/src/{core.tsx → core.ts} +4 -5
  15. package/dist/esm/components/ConversationDetails.d.ts +0 -2
  16. package/dist/esm/components/ConversationDetails.js +0 -192
  17. package/dist/esm/components/ConversationDetails.js.map +0 -1
  18. package/dist/esm/components/ConversationsList.d.ts +0 -2
  19. package/dist/esm/components/ConversationsList.js +0 -30
  20. package/dist/esm/components/ConversationsList.js.map +0 -1
  21. package/dist/esm/components/Shell.d.ts +0 -1
  22. package/dist/esm/components/Shell.js +0 -94
  23. package/dist/esm/components/Shell.js.map +0 -1
  24. package/dist/esm/components/conversation/ActivityEventsTab.d.ts +0 -8
  25. package/dist/esm/components/conversation/ActivityEventsTab.js +0 -72
  26. package/dist/esm/components/conversation/ActivityEventsTab.js.map +0 -1
  27. package/dist/esm/components/conversation/ChunkBadges.d.ts +0 -7
  28. package/dist/esm/components/conversation/ChunkBadges.js +0 -54
  29. package/dist/esm/components/conversation/ChunkBadges.js.map +0 -1
  30. package/dist/esm/components/conversation/ChunkItem.d.ts +0 -9
  31. package/dist/esm/components/conversation/ChunkItem.js +0 -247
  32. package/dist/esm/components/conversation/ChunkItem.js.map +0 -1
  33. package/dist/esm/components/conversation/ChunksCollapsible.d.ts +0 -7
  34. package/dist/esm/components/conversation/ChunksCollapsible.js +0 -77
  35. package/dist/esm/components/conversation/ChunksCollapsible.js.map +0 -1
  36. package/dist/esm/components/conversation/ChunksTab.d.ts +0 -8
  37. package/dist/esm/components/conversation/ChunksTab.js +0 -87
  38. package/dist/esm/components/conversation/ChunksTab.js.map +0 -1
  39. package/dist/esm/components/conversation/ConversationHeader.d.ts +0 -7
  40. package/dist/esm/components/conversation/ConversationHeader.js +0 -230
  41. package/dist/esm/components/conversation/ConversationHeader.js.map +0 -1
  42. package/dist/esm/components/conversation/ConversationTabs.d.ts +0 -10
  43. package/dist/esm/components/conversation/ConversationTabs.js +0 -176
  44. package/dist/esm/components/conversation/ConversationTabs.js.map +0 -1
  45. package/dist/esm/components/conversation/MessageCard.d.ts +0 -7
  46. package/dist/esm/components/conversation/MessageCard.js +0 -207
  47. package/dist/esm/components/conversation/MessageCard.js.map +0 -1
  48. package/dist/esm/components/conversation/MessageGroup.d.ts +0 -15
  49. package/dist/esm/components/conversation/MessageGroup.js +0 -119
  50. package/dist/esm/components/conversation/MessageGroup.js.map +0 -1
  51. package/dist/esm/components/conversation/MessagesTab.d.ts +0 -7
  52. package/dist/esm/components/conversation/MessagesTab.js +0 -37
  53. package/dist/esm/components/conversation/MessagesTab.js.map +0 -1
  54. package/dist/esm/components/conversation/SummariesTab.d.ts +0 -7
  55. package/dist/esm/components/conversation/SummariesTab.js +0 -110
  56. package/dist/esm/components/conversation/SummariesTab.js.map +0 -1
  57. package/dist/esm/components/conversation/ToolCallDisplay.d.ts +0 -7
  58. package/dist/esm/components/conversation/ToolCallDisplay.js +0 -123
  59. package/dist/esm/components/conversation/ToolCallDisplay.js.map +0 -1
  60. package/dist/esm/components/conversation/index.d.ts +0 -7
  61. package/dist/esm/components/list/ConversationRow.d.ts +0 -7
  62. package/dist/esm/components/list/ConversationRow.js +0 -122
  63. package/dist/esm/components/list/ConversationRow.js.map +0 -1
  64. package/dist/esm/components/list/index.d.ts +0 -1
  65. package/dist/esm/components/utils/format.d.ts +0 -6
  66. package/dist/esm/components/utils/format.js +0 -68
  67. package/dist/esm/components/utils/format.js.map +0 -1
  68. package/dist/esm/components/utils/index.d.ts +0 -1
  69. package/dist/esm/core.d.ts +0 -22
  70. package/dist/esm/core.js +0 -9
  71. package/dist/esm/core.js.map +0 -1
  72. package/dist/esm/index.js +0 -6
  73. package/dist/esm/index.js.map +0 -1
  74. package/dist/esm/production.d.ts +0 -2
  75. package/dist/esm/production.js +0 -5
  76. package/dist/esm/production.js.map +0 -1
  77. package/dist/esm/store/ai-context.d.ts +0 -135
  78. package/dist/esm/store/ai-context.js +0 -1238
  79. package/dist/esm/store/ai-context.js.map +0 -1
  80. package/dist/esm/store/ai-store.d.ts +0 -1
  81. package/dist/esm/styles/tokens.d.ts +0 -298
  82. package/dist/esm/styles/tokens.js +0 -107
  83. package/dist/esm/styles/tokens.js.map +0 -1
  84. package/dist/esm/styles/use-styles.d.ts +0 -233
  85. package/dist/esm/styles/use-styles.js +0 -1602
  86. package/dist/esm/styles/use-styles.js.map +0 -1
@@ -1,230 +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 { formatDuration } from "../utils/format.js";
6
- var _tmpl$ = /* @__PURE__ */ template(`<div>🔄 <!> iterations`), _tmpl$2 = /* @__PURE__ */ template(`<div><span>🔧</span><div>`), _tmpl$3 = /* @__PURE__ */ template(`<div><span>⚙️ Options:</span><div>`), _tmpl$4 = /* @__PURE__ */ template(`<div><span>🎯 Tokens:</span><span>Prompt: </span><span>•</span><span>Completion: </span><span>•</span><span>Total: `), _tmpl$5 = /* @__PURE__ */ template(`<details><summary>🧪 Model options</summary><div>`), _tmpl$6 = /* @__PURE__ */ template(`<details><summary>🧩 System prompts (<!>)</summary><div>`), _tmpl$7 = /* @__PURE__ */ template(`<div><div><div><div></div><div></div></div><div>`), _tmpl$8 = /* @__PURE__ */ template(`<span>`), _tmpl$9 = /* @__PURE__ */ template(`<span>: `), _tmpl$0 = /* @__PURE__ */ template(`<div><div>#</div><div>`);
7
- const ConversationHeader = (props) => {
8
- const styles = useStyles();
9
- const conv = () => props.conversation;
10
- const toolNames = () => conv().toolNames ?? [];
11
- const options = () => conv().options;
12
- const modelOptions = () => conv().modelOptions;
13
- const iterationCount = () => conv().iterationCount;
14
- const systemPrompts = () => conv().systemPrompts ?? [];
15
- return (() => {
16
- var _el$ = _tmpl$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$0 = _el$3.nextSibling;
17
- insert(_el$4, () => conv().label);
18
- insert(_el$5, () => conv().status);
19
- insert(_el$3, createComponent(Show, {
20
- get when() {
21
- return memo(() => iterationCount() !== void 0)() && iterationCount() > 1;
22
- },
23
- get children() {
24
- var _el$6 = _tmpl$(), _el$7 = _el$6.firstChild, _el$9 = _el$7.nextSibling;
25
- _el$9.nextSibling;
26
- insert(_el$6, iterationCount, _el$9);
27
- effect(() => className(_el$6, styles().conversationDetails.iterationBadge));
28
- return _el$6;
29
- }
30
- }), null);
31
- insert(_el$0, (() => {
32
- var _c$ = memo(() => !!conv().model);
33
- return () => _c$() && `Model: ${conv().model}`;
34
- })(), null);
35
- insert(_el$0, (() => {
36
- var _c$2 = memo(() => !!conv().provider);
37
- return () => _c$2() && ` • Provider: ${conv().provider}`;
38
- })(), null);
39
- insert(_el$0, (() => {
40
- var _c$3 = memo(() => !!conv().completedAt);
41
- return () => _c$3() && ` • Duration: ${formatDuration(conv().completedAt - conv().startedAt)}`;
42
- })(), null);
43
- insert(_el$2, createComponent(Show, {
44
- get when() {
45
- return toolNames().length > 0;
46
- },
47
- get children() {
48
- var _el$1 = _tmpl$2(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
49
- insert(_el$11, createComponent(For, {
50
- get each() {
51
- return toolNames();
52
- },
53
- children: (toolName) => (() => {
54
- var _el$34 = _tmpl$8();
55
- insert(_el$34, toolName);
56
- effect(() => className(_el$34, styles().conversationDetails.toolBadge));
57
- return _el$34;
58
- })()
59
- }));
60
- effect((_p$) => {
61
- var _v$ = styles().conversationDetails.toolsRow, _v$2 = styles().conversationDetails.toolsLabel, _v$3 = styles().conversationDetails.toolsList;
62
- _v$ !== _p$.e && className(_el$1, _p$.e = _v$);
63
- _v$2 !== _p$.t && className(_el$10, _p$.t = _v$2);
64
- _v$3 !== _p$.a && className(_el$11, _p$.a = _v$3);
65
- return _p$;
66
- }, {
67
- e: void 0,
68
- t: void 0,
69
- a: void 0
70
- });
71
- return _el$1;
72
- }
73
- }), null);
74
- insert(_el$2, createComponent(Show, {
75
- get when() {
76
- return memo(() => !!options())() && Object.keys(options()).length > 0;
77
- },
78
- get children() {
79
- var _el$12 = _tmpl$3(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
80
- insert(_el$14, createComponent(For, {
81
- get each() {
82
- return Object.entries(options());
83
- },
84
- children: ([key, value]) => (() => {
85
- var _el$35 = _tmpl$9(), _el$36 = _el$35.firstChild;
86
- insert(_el$35, key, _el$36);
87
- insert(_el$35, () => typeof value === "object" ? JSON.stringify(value) : String(value), null);
88
- effect(() => className(_el$35, styles().conversationDetails.optionBadge));
89
- return _el$35;
90
- })()
91
- }));
92
- effect((_p$) => {
93
- var _v$4 = styles().conversationDetails.optionsRow, _v$5 = styles().conversationDetails.optionsLabel, _v$6 = styles().conversationDetails.optionsCompact;
94
- _v$4 !== _p$.e && className(_el$12, _p$.e = _v$4);
95
- _v$5 !== _p$.t && className(_el$13, _p$.t = _v$5);
96
- _v$6 !== _p$.a && className(_el$14, _p$.a = _v$6);
97
- return _p$;
98
- }, {
99
- e: void 0,
100
- t: void 0,
101
- a: void 0
102
- });
103
- return _el$12;
104
- }
105
- }), null);
106
- insert(_el$2, createComponent(Show, {
107
- get when() {
108
- return conv().usage;
109
- },
110
- get children() {
111
- var _el$15 = _tmpl$4(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
112
- _el$17.firstChild;
113
- var _el$19 = _el$17.nextSibling, _el$20 = _el$19.nextSibling;
114
- _el$20.firstChild;
115
- var _el$22 = _el$20.nextSibling, _el$23 = _el$22.nextSibling;
116
- _el$23.firstChild;
117
- insert(_el$17, () => conv().usage?.promptTokens.toLocaleString() || 0, null);
118
- insert(_el$20, () => conv().usage?.completionTokens.toLocaleString() || 0, null);
119
- insert(_el$23, () => conv().usage?.totalTokens.toLocaleString() || 0, null);
120
- effect((_p$) => {
121
- var _v$7 = styles().conversationDetails.usageInfo, _v$8 = styles().conversationDetails.usageLabel, _v$9 = styles().conversationDetails.usageBold;
122
- _v$7 !== _p$.e && className(_el$15, _p$.e = _v$7);
123
- _v$8 !== _p$.t && className(_el$16, _p$.t = _v$8);
124
- _v$9 !== _p$.a && className(_el$23, _p$.a = _v$9);
125
- return _p$;
126
- }, {
127
- e: void 0,
128
- t: void 0,
129
- a: void 0
130
- });
131
- return _el$15;
132
- }
133
- }), null);
134
- insert(_el$2, createComponent(Show, {
135
- get when() {
136
- return memo(() => !!modelOptions())() && Object.keys(modelOptions()).length > 0;
137
- },
138
- get children() {
139
- var _el$25 = _tmpl$5(), _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling;
140
- insert(_el$27, createComponent(JsonTree, {
141
- get value() {
142
- return modelOptions();
143
- },
144
- defaultExpansionDepth: 2
145
- }));
146
- effect((_p$) => {
147
- var _v$0 = styles().conversationDetails.collapsibleSection, _v$1 = styles().conversationDetails.collapsibleSummary, _v$10 = styles().conversationDetails.collapsibleContent;
148
- _v$0 !== _p$.e && className(_el$25, _p$.e = _v$0);
149
- _v$1 !== _p$.t && className(_el$26, _p$.t = _v$1);
150
- _v$10 !== _p$.a && className(_el$27, _p$.a = _v$10);
151
- return _p$;
152
- }, {
153
- e: void 0,
154
- t: void 0,
155
- a: void 0
156
- });
157
- return _el$25;
158
- }
159
- }), null);
160
- insert(_el$2, createComponent(Show, {
161
- get when() {
162
- return systemPrompts().length > 0;
163
- },
164
- get children() {
165
- var _el$28 = _tmpl$6(), _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild, _el$32 = _el$30.nextSibling;
166
- _el$32.nextSibling;
167
- var _el$33 = _el$29.nextSibling;
168
- insert(_el$29, () => systemPrompts().length, _el$32);
169
- insert(_el$33, createComponent(For, {
170
- get each() {
171
- return systemPrompts();
172
- },
173
- children: (prompt, index) => (() => {
174
- var _el$38 = _tmpl$0(), _el$39 = _el$38.firstChild;
175
- _el$39.firstChild;
176
- var _el$41 = _el$39.nextSibling;
177
- insert(_el$39, () => index() + 1, null);
178
- insert(_el$41, prompt);
179
- effect((_p$) => {
180
- var _v$20 = styles().conversationDetails.systemPromptItem, _v$21 = styles().conversationDetails.systemPromptIndex, _v$22 = styles().conversationDetails.systemPromptText;
181
- _v$20 !== _p$.e && className(_el$38, _p$.e = _v$20);
182
- _v$21 !== _p$.t && className(_el$39, _p$.t = _v$21);
183
- _v$22 !== _p$.a && className(_el$41, _p$.a = _v$22);
184
- return _p$;
185
- }, {
186
- e: void 0,
187
- t: void 0,
188
- a: void 0
189
- });
190
- return _el$38;
191
- })()
192
- }));
193
- effect((_p$) => {
194
- var _v$11 = styles().conversationDetails.collapsibleSection, _v$12 = styles().conversationDetails.collapsibleSummary, _v$13 = styles().conversationDetails.collapsibleContent;
195
- _v$11 !== _p$.e && className(_el$28, _p$.e = _v$11);
196
- _v$12 !== _p$.t && className(_el$29, _p$.t = _v$12);
197
- _v$13 !== _p$.a && className(_el$33, _p$.a = _v$13);
198
- return _p$;
199
- }, {
200
- e: void 0,
201
- t: void 0,
202
- a: void 0
203
- });
204
- return _el$28;
205
- }
206
- }), null);
207
- effect((_p$) => {
208
- var _v$14 = styles().panelHeader, _v$15 = styles().conversationDetails.headerContent, _v$16 = styles().conversationDetails.headerRow, _v$17 = styles().conversationDetails.headerLabel, _v$18 = `${styles().conversationDetails.statusBadge} ${conv().status === "active" ? styles().conversationDetails.statusActive : conv().status === "completed" ? styles().conversationDetails.statusCompleted : styles().conversationDetails.statusError}`, _v$19 = styles().conversationDetails.metaInfo;
209
- _v$14 !== _p$.e && className(_el$, _p$.e = _v$14);
210
- _v$15 !== _p$.t && className(_el$2, _p$.t = _v$15);
211
- _v$16 !== _p$.a && className(_el$3, _p$.a = _v$16);
212
- _v$17 !== _p$.o && className(_el$4, _p$.o = _v$17);
213
- _v$18 !== _p$.i && className(_el$5, _p$.i = _v$18);
214
- _v$19 !== _p$.n && className(_el$0, _p$.n = _v$19);
215
- return _p$;
216
- }, {
217
- e: void 0,
218
- t: void 0,
219
- a: void 0,
220
- o: void 0,
221
- i: void 0,
222
- n: void 0
223
- });
224
- return _el$;
225
- })();
226
- };
227
- export {
228
- ConversationHeader
229
- };
230
- //# sourceMappingURL=ConversationHeader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConversationHeader.js","sources":["../../../../src/components/conversation/ConversationHeader.tsx"],"sourcesContent":["import { For, 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 { Conversation } from '../../store/ai-context'\n\ninterface ConversationHeaderProps {\n conversation: Conversation\n}\n\nexport const ConversationHeader: Component<ConversationHeaderProps> = (\n props,\n) => {\n const styles = useStyles()\n const conv = () => props.conversation\n\n const toolNames = () => conv().toolNames ?? []\n const options = () => conv().options\n const modelOptions = () => conv().modelOptions\n const iterationCount = () => conv().iterationCount\n const systemPrompts = () => conv().systemPrompts ?? []\n\n return (\n <div class={styles().panelHeader}>\n <div class={styles().conversationDetails.headerContent}>\n <div class={styles().conversationDetails.headerRow}>\n <div class={styles().conversationDetails.headerLabel}>\n {conv().label}\n </div>\n <div\n class={`${styles().conversationDetails.statusBadge} ${\n conv().status === 'active'\n ? styles().conversationDetails.statusActive\n : conv().status === 'completed'\n ? styles().conversationDetails.statusCompleted\n : styles().conversationDetails.statusError\n }`}\n >\n {conv().status}\n </div>\n <Show when={iterationCount() !== undefined && iterationCount()! > 1}>\n <div class={styles().conversationDetails.iterationBadge}>\n 🔄 {iterationCount()} iterations\n </div>\n </Show>\n </div>\n <div class={styles().conversationDetails.metaInfo}>\n {conv().model && `Model: ${conv().model}`}\n {conv().provider && ` • Provider: ${conv().provider}`}\n {conv().completedAt &&\n ` • Duration: ${formatDuration(conv().completedAt! - conv().startedAt)}`}\n </div>\n {/* Tools list - always visible */}\n <Show when={toolNames().length > 0}>\n <div class={styles().conversationDetails.toolsRow}>\n <span class={styles().conversationDetails.toolsLabel}>🔧</span>\n <div class={styles().conversationDetails.toolsList}>\n <For each={toolNames()}>\n {(toolName) => (\n <span class={styles().conversationDetails.toolBadge}>\n {toolName}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n {/* Options - always visible in compact form */}\n <Show when={options() && Object.keys(options()!).length > 0}>\n <div class={styles().conversationDetails.optionsRow}>\n <span class={styles().conversationDetails.optionsLabel}>\n ⚙️ Options:\n </span>\n <div class={styles().conversationDetails.optionsCompact}>\n <For each={Object.entries(options()!)}>\n {([key, value]) => (\n <span class={styles().conversationDetails.optionBadge}>\n {key}:{' '}\n {typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n <Show when={conv().usage}>\n <div class={styles().conversationDetails.usageInfo}>\n <span class={styles().conversationDetails.usageLabel}>\n 🎯 Tokens:\n </span>\n <span>\n Prompt: {conv().usage?.promptTokens.toLocaleString() || 0}\n </span>\n <span>•</span>\n <span>\n Completion: {conv().usage?.completionTokens.toLocaleString() || 0}\n </span>\n <span>•</span>\n <span class={styles().conversationDetails.usageBold}>\n Total: {conv().usage?.totalTokens.toLocaleString() || 0}\n </span>\n </div>\n </Show>\n {/* Model options - collapsible */}\n <Show when={modelOptions() && Object.keys(modelOptions()!).length > 0}>\n <details class={styles().conversationDetails.collapsibleSection}>\n <summary class={styles().conversationDetails.collapsibleSummary}>\n 🧪 Model options\n </summary>\n <div class={styles().conversationDetails.collapsibleContent}>\n <JsonTree\n value={modelOptions() as Record<string, unknown>}\n defaultExpansionDepth={2}\n />\n </div>\n </details>\n </Show>\n {/* System prompts - collapsible */}\n <Show when={systemPrompts().length > 0}>\n <details class={styles().conversationDetails.collapsibleSection}>\n <summary class={styles().conversationDetails.collapsibleSummary}>\n 🧩 System prompts ({systemPrompts().length})\n </summary>\n <div class={styles().conversationDetails.collapsibleContent}>\n <For each={systemPrompts()}>\n {(prompt, index) => (\n <div class={styles().conversationDetails.systemPromptItem}>\n <div class={styles().conversationDetails.systemPromptIndex}>\n #{index() + 1}\n </div>\n <div class={styles().conversationDetails.systemPromptText}>\n {prompt}\n </div>\n </div>\n )}\n </For>\n </div>\n </details>\n </Show>\n </div>\n </div>\n )\n}\n"],"names":["ConversationHeader","props","styles","useStyles","conv","conversation","toolNames","options","modelOptions","iterationCount","systemPrompts","_el$","_tmpl$7","_el$2","firstChild","_el$3","_el$4","_el$5","nextSibling","_el$0","_$insert","label","status","_$createComponent","Show","when","_$memo","undefined","children","_el$6","_tmpl$","_el$7","_el$9","_$effect","_$className","conversationDetails","iterationBadge","_c$","model","_c$2","provider","_c$3","completedAt","formatDuration","startedAt","length","_el$1","_tmpl$2","_el$10","_el$11","For","each","toolName","_el$34","_tmpl$8","toolBadge","_p$","_v$","toolsRow","_v$2","toolsLabel","_v$3","toolsList","e","t","a","Object","keys","_el$12","_tmpl$3","_el$13","_el$14","entries","key","value","_el$35","_tmpl$9","_el$36","JSON","stringify","String","optionBadge","_v$4","optionsRow","_v$5","optionsLabel","_v$6","optionsCompact","usage","_el$15","_tmpl$4","_el$16","_el$17","_el$19","_el$20","_el$22","_el$23","promptTokens","toLocaleString","completionTokens","totalTokens","_v$7","usageInfo","_v$8","usageLabel","_v$9","usageBold","_el$25","_tmpl$5","_el$26","_el$27","JsonTree","defaultExpansionDepth","_v$0","collapsibleSection","_v$1","collapsibleSummary","_v$10","collapsibleContent","_el$28","_tmpl$6","_el$29","_el$30","_el$32","_el$33","prompt","index","_el$38","_tmpl$0","_el$39","_el$41","_v$20","systemPromptItem","_v$21","systemPromptIndex","_v$22","systemPromptText","_v$11","_v$12","_v$13","_v$14","panelHeader","_v$15","headerContent","_v$16","headerRow","_v$17","headerLabel","_v$18","statusBadge","statusActive","statusCompleted","statusError","_v$19","metaInfo","o","i","n"],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { Component } from 'solid-js';
2
- import { Conversation } from '../../store/ai-context.js';
3
- export type TabType = 'messages' | 'chunks' | 'summaries' | 'image' | 'speech' | 'transcription' | 'video';
4
- interface ConversationTabsProps {
5
- conversation: Conversation;
6
- activeTab: TabType;
7
- onTabChange: (tab: TabType) => void;
8
- }
9
- export declare const ConversationTabs: Component<ConversationTabsProps>;
10
- export {};
@@ -1,176 +0,0 @@
1
- import { template, insert, createComponent, effect, className, memo, delegateEvents } from "solid-js/web";
2
- import { createSignal, createEffect, Show } from "solid-js";
3
- import { useStyles } from "../../styles/use-styles.js";
4
- var _tmpl$ = /* @__PURE__ */ template(`<button>💬 Messages (<!>)`), _tmpl$2 = /* @__PURE__ */ template(`<button>📦 Chunks (<!>)`), _tmpl$3 = /* @__PURE__ */ template(`<button>📝 Summaries (<!>)`), _tmpl$4 = /* @__PURE__ */ template(`<button>🖼️ Image (<!>)`), _tmpl$5 = /* @__PURE__ */ template(`<button>🔊 Speech (<!>)`), _tmpl$6 = /* @__PURE__ */ template(`<button>📝 Transcription (<!>)`), _tmpl$7 = /* @__PURE__ */ template(`<button>🎬 Video (<!>)`), _tmpl$8 = /* @__PURE__ */ template(`<div>`);
5
- const ConversationTabs = (props) => {
6
- const styles = useStyles();
7
- const conv = () => props.conversation;
8
- const totalRawChunks = () => conv().chunks.reduce((sum, c) => sum + (c.chunkCount || 1), 0);
9
- const summariesCount = () => conv().summaries?.length ?? 0;
10
- const imageCount = () => conv().imageEvents?.length ?? 0;
11
- const speechCount = () => conv().speechEvents?.length ?? 0;
12
- const transcriptionCount = () => conv().transcriptionEvents?.length ?? 0;
13
- const videoCount = () => conv().videoEvents?.length ?? 0;
14
- const [imagePulse, setImagePulse] = createSignal(false);
15
- const [speechPulse, setSpeechPulse] = createSignal(false);
16
- const [transcriptionPulse, setTranscriptionPulse] = createSignal(false);
17
- const [videoPulse, setVideoPulse] = createSignal(false);
18
- const triggerPulse = (setter) => {
19
- setter(true);
20
- setTimeout(() => setter(false), 2e3);
21
- };
22
- let previousImageCount = 0;
23
- let previousSpeechCount = 0;
24
- let previousTranscriptionCount = 0;
25
- let previousVideoCount = 0;
26
- createEffect(() => {
27
- const count = imageCount();
28
- if (count > 0 && previousImageCount === 0) {
29
- triggerPulse(setImagePulse);
30
- }
31
- previousImageCount = count;
32
- });
33
- createEffect(() => {
34
- const count = speechCount();
35
- if (count > 0 && previousSpeechCount === 0) {
36
- triggerPulse(setSpeechPulse);
37
- }
38
- previousSpeechCount = count;
39
- });
40
- createEffect(() => {
41
- const count = transcriptionCount();
42
- if (count > 0 && previousTranscriptionCount === 0) {
43
- triggerPulse(setTranscriptionPulse);
44
- }
45
- previousTranscriptionCount = count;
46
- });
47
- createEffect(() => {
48
- const count = videoCount();
49
- if (count > 0 && previousVideoCount === 0) {
50
- triggerPulse(setVideoPulse);
51
- }
52
- previousVideoCount = count;
53
- });
54
- const hasMessages = () => conv().type === "client" && conv().messages.length > 0;
55
- const hasChunks = () => conv().chunks.length > 0 || conv().type === "server";
56
- const hasSummaries = () => conv().hasSummarize || summariesCount() > 0;
57
- const hasImage = () => conv().hasImage || imageCount() > 0;
58
- const hasSpeech = () => conv().hasSpeech || speechCount() > 0;
59
- const hasTranscription = () => conv().hasTranscription || transcriptionCount() > 0;
60
- const hasVideo = () => conv().hasVideo || videoCount() > 0;
61
- const visibleTabCount = () => {
62
- let count = 0;
63
- if (hasMessages()) count++;
64
- if (hasChunks() && conv().type === "server") count++;
65
- if (hasSummaries()) count++;
66
- if (hasImage()) count++;
67
- if (hasSpeech()) count++;
68
- if (hasTranscription()) count++;
69
- if (hasVideo()) count++;
70
- return count;
71
- };
72
- if (visibleTabCount() <= 1) {
73
- return null;
74
- }
75
- return (() => {
76
- var _el$ = _tmpl$8();
77
- insert(_el$, createComponent(Show, {
78
- get when() {
79
- return hasMessages();
80
- },
81
- get children() {
82
- var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling;
83
- _el$5.nextSibling;
84
- _el$2.$$click = () => props.onTabChange("messages");
85
- insert(_el$2, () => conv().messages.length, _el$5);
86
- effect(() => className(_el$2, `${styles().actionButton} ${props.activeTab === "messages" ? styles().conversationDetails.tabButtonActive : ""}`));
87
- return _el$2;
88
- }
89
- }), null);
90
- insert(_el$, createComponent(Show, {
91
- get when() {
92
- return memo(() => !!hasChunks())() && conv().type === "server";
93
- },
94
- get children() {
95
- var _el$6 = _tmpl$2(), _el$7 = _el$6.firstChild, _el$9 = _el$7.nextSibling;
96
- _el$9.nextSibling;
97
- _el$6.$$click = () => props.onTabChange("chunks");
98
- insert(_el$6, totalRawChunks, _el$9);
99
- effect(() => className(_el$6, `${styles().actionButton} ${props.activeTab === "chunks" ? styles().conversationDetails.tabButtonActive : ""}`));
100
- return _el$6;
101
- }
102
- }), null);
103
- insert(_el$, createComponent(Show, {
104
- get when() {
105
- return hasSummaries();
106
- },
107
- get children() {
108
- var _el$0 = _tmpl$3(), _el$1 = _el$0.firstChild, _el$11 = _el$1.nextSibling;
109
- _el$11.nextSibling;
110
- _el$0.$$click = () => props.onTabChange("summaries");
111
- insert(_el$0, summariesCount, _el$11);
112
- effect(() => className(_el$0, `${styles().actionButton} ${props.activeTab === "summaries" ? styles().conversationDetails.tabButtonActive : ""}`));
113
- return _el$0;
114
- }
115
- }), null);
116
- insert(_el$, createComponent(Show, {
117
- get when() {
118
- return hasImage();
119
- },
120
- get children() {
121
- var _el$12 = _tmpl$4(), _el$13 = _el$12.firstChild, _el$15 = _el$13.nextSibling;
122
- _el$15.nextSibling;
123
- _el$12.$$click = () => props.onTabChange("image");
124
- insert(_el$12, imageCount, _el$15);
125
- effect(() => className(_el$12, `${styles().actionButton} ${props.activeTab === "image" ? styles().conversationDetails.tabButtonActive : ""} ${imagePulse() ? styles().conversationDetails.tabButtonPulse : ""}`));
126
- return _el$12;
127
- }
128
- }), null);
129
- insert(_el$, createComponent(Show, {
130
- get when() {
131
- return hasSpeech();
132
- },
133
- get children() {
134
- var _el$16 = _tmpl$5(), _el$17 = _el$16.firstChild, _el$19 = _el$17.nextSibling;
135
- _el$19.nextSibling;
136
- _el$16.$$click = () => props.onTabChange("speech");
137
- insert(_el$16, speechCount, _el$19);
138
- effect(() => className(_el$16, `${styles().actionButton} ${props.activeTab === "speech" ? styles().conversationDetails.tabButtonActive : ""} ${speechPulse() ? styles().conversationDetails.tabButtonPulse : ""}`));
139
- return _el$16;
140
- }
141
- }), null);
142
- insert(_el$, createComponent(Show, {
143
- get when() {
144
- return hasTranscription();
145
- },
146
- get children() {
147
- var _el$20 = _tmpl$6(), _el$21 = _el$20.firstChild, _el$23 = _el$21.nextSibling;
148
- _el$23.nextSibling;
149
- _el$20.$$click = () => props.onTabChange("transcription");
150
- insert(_el$20, transcriptionCount, _el$23);
151
- effect(() => className(_el$20, `${styles().actionButton} ${props.activeTab === "transcription" ? styles().conversationDetails.tabButtonActive : ""} ${transcriptionPulse() ? styles().conversationDetails.tabButtonPulse : ""}`));
152
- return _el$20;
153
- }
154
- }), null);
155
- insert(_el$, createComponent(Show, {
156
- get when() {
157
- return hasVideo();
158
- },
159
- get children() {
160
- var _el$24 = _tmpl$7(), _el$25 = _el$24.firstChild, _el$27 = _el$25.nextSibling;
161
- _el$27.nextSibling;
162
- _el$24.$$click = () => props.onTabChange("video");
163
- insert(_el$24, videoCount, _el$27);
164
- effect(() => className(_el$24, `${styles().actionButton} ${props.activeTab === "video" ? styles().conversationDetails.tabButtonActive : ""} ${videoPulse() ? styles().conversationDetails.tabButtonPulse : ""}`));
165
- return _el$24;
166
- }
167
- }), null);
168
- effect(() => className(_el$, styles().conversationDetails.tabsContainer));
169
- return _el$;
170
- })();
171
- };
172
- delegateEvents(["click"]);
173
- export {
174
- ConversationTabs
175
- };
176
- //# sourceMappingURL=ConversationTabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConversationTabs.js","sources":["../../../../src/components/conversation/ConversationTabs.tsx"],"sourcesContent":["import { Show, createEffect, createSignal } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport type { Component } from 'solid-js'\nimport type { Conversation } from '../../store/ai-context'\n\nexport type TabType =\n | 'messages'\n | 'chunks'\n | 'summaries'\n | 'image'\n | 'speech'\n | 'transcription'\n | 'video'\n\ninterface ConversationTabsProps {\n conversation: Conversation\n activeTab: TabType\n onTabChange: (tab: TabType) => void\n}\n\nexport const ConversationTabs: Component<ConversationTabsProps> = (props) => {\n const styles = useStyles()\n const conv = () => props.conversation\n\n // Total raw chunks = sum of all chunkCounts\n const totalRawChunks = () =>\n conv().chunks.reduce((sum, c) => sum + (c.chunkCount || 1), 0)\n\n const summariesCount = () => conv().summaries?.length ?? 0\n const imageCount = () => conv().imageEvents?.length ?? 0\n const speechCount = () => conv().speechEvents?.length ?? 0\n const transcriptionCount = () => conv().transcriptionEvents?.length ?? 0\n const videoCount = () => conv().videoEvents?.length ?? 0\n\n const [imagePulse, setImagePulse] = createSignal(false)\n const [speechPulse, setSpeechPulse] = createSignal(false)\n const [transcriptionPulse, setTranscriptionPulse] = createSignal(false)\n const [videoPulse, setVideoPulse] = createSignal(false)\n\n const triggerPulse = (setter: (value: boolean) => void) => {\n setter(true)\n setTimeout(() => setter(false), 2000)\n }\n\n let previousImageCount = 0\n let previousSpeechCount = 0\n let previousTranscriptionCount = 0\n let previousVideoCount = 0\n\n createEffect(() => {\n const count = imageCount()\n if (count > 0 && previousImageCount === 0) {\n triggerPulse(setImagePulse)\n }\n previousImageCount = count\n })\n\n createEffect(() => {\n const count = speechCount()\n if (count > 0 && previousSpeechCount === 0) {\n triggerPulse(setSpeechPulse)\n }\n previousSpeechCount = count\n })\n\n createEffect(() => {\n const count = transcriptionCount()\n if (count > 0 && previousTranscriptionCount === 0) {\n triggerPulse(setTranscriptionPulse)\n }\n previousTranscriptionCount = count\n })\n\n createEffect(() => {\n const count = videoCount()\n if (count > 0 && previousVideoCount === 0) {\n triggerPulse(setVideoPulse)\n }\n previousVideoCount = count\n })\n\n // Determine if we should show any chat-related tabs\n // For server conversations, don't show messages tab - only chunks\n const hasMessages = () =>\n conv().type === 'client' && conv().messages.length > 0\n const hasChunks = () => conv().chunks.length > 0 || conv().type === 'server'\n const hasSummaries = () => conv().hasSummarize || summariesCount() > 0\n const hasImage = () => conv().hasImage || imageCount() > 0\n const hasSpeech = () => conv().hasSpeech || speechCount() > 0\n const hasTranscription = () =>\n conv().hasTranscription || transcriptionCount() > 0\n const hasVideo = () => conv().hasVideo || videoCount() > 0\n\n // Count how many tabs would be visible\n const visibleTabCount = () => {\n let count = 0\n if (hasMessages()) count++\n if (hasChunks() && conv().type === 'server') count++\n if (hasSummaries()) count++\n if (hasImage()) count++\n if (hasSpeech()) count++\n if (hasTranscription()) count++\n if (hasVideo()) count++\n return count\n }\n\n // Don't render tabs if only one tab would be visible\n if (visibleTabCount() <= 1) {\n return null\n }\n\n return (\n <div class={styles().conversationDetails.tabsContainer}>\n {/* Show messages tab for client conversations or when there are messages */}\n <Show when={hasMessages()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'messages'\n ? styles().conversationDetails.tabButtonActive\n : ''\n }`}\n onClick={() => props.onTabChange('messages')}\n >\n 💬 Messages ({conv().messages.length})\n </button>\n </Show>\n {/* Show chunks tab for server conversations or when there are chunks */}\n <Show when={hasChunks() && conv().type === 'server'}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'chunks'\n ? styles().conversationDetails.tabButtonActive\n : ''\n }`}\n onClick={() => props.onTabChange('chunks')}\n >\n 📦 Chunks ({totalRawChunks()})\n </button>\n </Show>\n {/* Show summaries tab if there are summarize operations */}\n <Show when={hasSummaries()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'summaries'\n ? styles().conversationDetails.tabButtonActive\n : ''\n }`}\n onClick={() => props.onTabChange('summaries')}\n >\n 📝 Summaries ({summariesCount()})\n </button>\n </Show>\n <Show when={hasImage()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'image'\n ? styles().conversationDetails.tabButtonActive\n : ''\n } ${imagePulse() ? styles().conversationDetails.tabButtonPulse : ''}`}\n onClick={() => props.onTabChange('image')}\n >\n 🖼️ Image ({imageCount()})\n </button>\n </Show>\n <Show when={hasSpeech()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'speech'\n ? styles().conversationDetails.tabButtonActive\n : ''\n } ${speechPulse() ? styles().conversationDetails.tabButtonPulse : ''}`}\n onClick={() => props.onTabChange('speech')}\n >\n 🔊 Speech ({speechCount()})\n </button>\n </Show>\n <Show when={hasTranscription()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'transcription'\n ? styles().conversationDetails.tabButtonActive\n : ''\n } ${\n transcriptionPulse()\n ? styles().conversationDetails.tabButtonPulse\n : ''\n }`}\n onClick={() => props.onTabChange('transcription')}\n >\n 📝 Transcription ({transcriptionCount()})\n </button>\n </Show>\n <Show when={hasVideo()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'video'\n ? styles().conversationDetails.tabButtonActive\n : ''\n } ${videoPulse() ? styles().conversationDetails.tabButtonPulse : ''}`}\n onClick={() => props.onTabChange('video')}\n >\n 🎬 Video ({videoCount()})\n </button>\n </Show>\n </div>\n )\n}\n"],"names":["ConversationTabs","props","styles","useStyles","conv","conversation","totalRawChunks","chunks","reduce","sum","c","chunkCount","summariesCount","summaries","length","imageCount","imageEvents","speechCount","speechEvents","transcriptionCount","transcriptionEvents","videoCount","videoEvents","imagePulse","setImagePulse","createSignal","speechPulse","setSpeechPulse","transcriptionPulse","setTranscriptionPulse","videoPulse","setVideoPulse","triggerPulse","setter","setTimeout","previousImageCount","previousSpeechCount","previousTranscriptionCount","previousVideoCount","createEffect","count","hasMessages","type","messages","hasChunks","hasSummaries","hasSummarize","hasImage","hasSpeech","hasTranscription","hasVideo","visibleTabCount","_el$","_tmpl$8","_$insert","_$createComponent","Show","when","children","_el$2","_tmpl$","_el$3","firstChild","_el$5","nextSibling","$$click","onTabChange","_$effect","_$className","actionButton","activeTab","conversationDetails","tabButtonActive","_$memo","_el$6","_tmpl$2","_el$7","_el$9","_el$0","_tmpl$3","_el$1","_el$11","_el$12","_tmpl$4","_el$13","_el$15","tabButtonPulse","_el$16","_tmpl$5","_el$17","_el$19","_el$20","_tmpl$6","_el$21","_el$23","_el$24","_tmpl$7","_el$25","_el$27","tabsContainer","_$delegateEvents"],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { Message } from '../../store/ai-store.js';
2
- import { Component } from 'solid-js';
3
- interface MessageCardProps {
4
- message: Message;
5
- }
6
- export declare const MessageCard: Component<MessageCardProps>;
7
- export {};