@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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/esm/components/ConversationDetails.d.ts +2 -0
  4. package/dist/esm/components/ConversationDetails.js +134 -0
  5. package/dist/esm/components/ConversationDetails.js.map +1 -0
  6. package/dist/esm/components/ConversationsList.d.ts +2 -0
  7. package/dist/esm/components/ConversationsList.js +30 -0
  8. package/dist/esm/components/ConversationsList.js.map +1 -0
  9. package/dist/esm/components/Shell.d.ts +1 -0
  10. package/dist/esm/components/Shell.js +94 -0
  11. package/dist/esm/components/Shell.js.map +1 -0
  12. package/dist/esm/components/conversation/ChunkBadges.d.ts +7 -0
  13. package/dist/esm/components/conversation/ChunkBadges.js +54 -0
  14. package/dist/esm/components/conversation/ChunkBadges.js.map +1 -0
  15. package/dist/esm/components/conversation/ChunkItem.d.ts +9 -0
  16. package/dist/esm/components/conversation/ChunkItem.js +247 -0
  17. package/dist/esm/components/conversation/ChunkItem.js.map +1 -0
  18. package/dist/esm/components/conversation/ChunksCollapsible.d.ts +7 -0
  19. package/dist/esm/components/conversation/ChunksCollapsible.js +77 -0
  20. package/dist/esm/components/conversation/ChunksCollapsible.js.map +1 -0
  21. package/dist/esm/components/conversation/ChunksTab.d.ts +8 -0
  22. package/dist/esm/components/conversation/ChunksTab.js +87 -0
  23. package/dist/esm/components/conversation/ChunksTab.js.map +1 -0
  24. package/dist/esm/components/conversation/ConversationHeader.d.ts +7 -0
  25. package/dist/esm/components/conversation/ConversationHeader.js +187 -0
  26. package/dist/esm/components/conversation/ConversationHeader.js.map +1 -0
  27. package/dist/esm/components/conversation/ConversationTabs.d.ts +10 -0
  28. package/dist/esm/components/conversation/ConversationTabs.js +88 -0
  29. package/dist/esm/components/conversation/ConversationTabs.js.map +1 -0
  30. package/dist/esm/components/conversation/EmbeddingsTab.d.ts +7 -0
  31. package/dist/esm/components/conversation/EmbeddingsTab.js +90 -0
  32. package/dist/esm/components/conversation/EmbeddingsTab.js.map +1 -0
  33. package/dist/esm/components/conversation/MessageCard.d.ts +7 -0
  34. package/dist/esm/components/conversation/MessageCard.js +152 -0
  35. package/dist/esm/components/conversation/MessageCard.js.map +1 -0
  36. package/dist/esm/components/conversation/MessageGroup.d.ts +15 -0
  37. package/dist/esm/components/conversation/MessageGroup.js +119 -0
  38. package/dist/esm/components/conversation/MessageGroup.js.map +1 -0
  39. package/dist/esm/components/conversation/MessagesTab.d.ts +7 -0
  40. package/dist/esm/components/conversation/MessagesTab.js +37 -0
  41. package/dist/esm/components/conversation/MessagesTab.js.map +1 -0
  42. package/dist/esm/components/conversation/SummariesTab.d.ts +7 -0
  43. package/dist/esm/components/conversation/SummariesTab.js +110 -0
  44. package/dist/esm/components/conversation/SummariesTab.js.map +1 -0
  45. package/dist/esm/components/conversation/ToolCallDisplay.d.ts +7 -0
  46. package/dist/esm/components/conversation/ToolCallDisplay.js +123 -0
  47. package/dist/esm/components/conversation/ToolCallDisplay.js.map +1 -0
  48. package/dist/esm/components/conversation/index.d.ts +7 -0
  49. package/dist/esm/components/list/ConversationRow.d.ts +7 -0
  50. package/dist/esm/components/list/ConversationRow.js +122 -0
  51. package/dist/esm/components/list/ConversationRow.js.map +1 -0
  52. package/dist/esm/components/list/index.d.ts +1 -0
  53. package/dist/esm/components/utils/format.d.ts +6 -0
  54. package/dist/esm/components/utils/format.js +68 -0
  55. package/dist/esm/components/utils/format.js.map +1 -0
  56. package/dist/esm/components/utils/index.d.ts +1 -0
  57. package/dist/esm/core.d.ts +18 -0
  58. package/dist/esm/core.js +9 -0
  59. package/dist/esm/core.js.map +1 -0
  60. package/dist/esm/index.d.ts +9 -0
  61. package/dist/esm/index.js +6 -0
  62. package/dist/esm/index.js.map +1 -0
  63. package/dist/esm/production.d.ts +2 -0
  64. package/dist/esm/production.js +5 -0
  65. package/dist/esm/production.js.map +1 -0
  66. package/dist/esm/store/ai-context.d.ts +126 -0
  67. package/dist/esm/store/ai-context.js +1081 -0
  68. package/dist/esm/store/ai-context.js.map +1 -0
  69. package/dist/esm/store/ai-store.d.ts +1 -0
  70. package/dist/esm/styles/tokens.d.ts +298 -0
  71. package/dist/esm/styles/tokens.js +107 -0
  72. package/dist/esm/styles/tokens.js.map +1 -0
  73. package/dist/esm/styles/use-styles.d.ts +226 -0
  74. package/dist/esm/styles/use-styles.js +1538 -0
  75. package/dist/esm/styles/use-styles.js.map +1 -0
  76. package/package.json +61 -0
  77. package/src/components/ConversationDetails.tsx +89 -0
  78. package/src/components/ConversationsList.tsx +21 -0
  79. package/src/components/Shell.tsx +93 -0
  80. package/src/components/conversation/ChunkBadges.tsx +51 -0
  81. package/src/components/conversation/ChunkItem.tsx +273 -0
  82. package/src/components/conversation/ChunksCollapsible.tsx +58 -0
  83. package/src/components/conversation/ChunksTab.tsx +85 -0
  84. package/src/components/conversation/ConversationHeader.tsx +130 -0
  85. package/src/components/conversation/ConversationTabs.tsx +104 -0
  86. package/src/components/conversation/EmbeddingsTab.tsx +80 -0
  87. package/src/components/conversation/MessageCard.tsx +137 -0
  88. package/src/components/conversation/MessageGroup.tsx +101 -0
  89. package/src/components/conversation/MessagesTab.tsx +30 -0
  90. package/src/components/conversation/SummariesTab.tsx +91 -0
  91. package/src/components/conversation/ToolCallDisplay.tsx +99 -0
  92. package/src/components/conversation/index.ts +8 -0
  93. package/src/components/list/ConversationRow.tsx +85 -0
  94. package/src/components/list/index.ts +1 -0
  95. package/src/components/utils/format.ts +61 -0
  96. package/src/components/utils/index.ts +1 -0
  97. package/src/core.tsx +10 -0
  98. package/src/index.ts +8 -0
  99. package/src/production.ts +3 -0
  100. package/src/store/ai-context.tsx +1784 -0
  101. package/src/store/ai-store.ts +2 -0
  102. package/src/styles/tokens.ts +305 -0
  103. package/src/styles/use-styles.ts +1537 -0
@@ -0,0 +1,187 @@
1
+ import { template, insert, createComponent, 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>🔄 <!> iterations`), _tmpl$2 = /* @__PURE__ */ template(`<div><span>🎯 Tokens:</span><span>Prompt: </span><span>•</span><span>Completion: </span><span>•</span><span>Total: `), _tmpl$3 = /* @__PURE__ */ template(`<div><span>🔧</span><div>`), _tmpl$4 = /* @__PURE__ */ template(`<div><span>⚙️ Options:</span><div>`), _tmpl$5 = /* @__PURE__ */ template(`<div><span>🏷️ Provider:</span><div>`), _tmpl$6 = /* @__PURE__ */ template(`<div><div><div><div></div><div></div></div><div>`), _tmpl$7 = /* @__PURE__ */ template(`<span>`), _tmpl$8 = /* @__PURE__ */ template(`<span>: `);
6
+ const ConversationHeader = (props) => {
7
+ const styles = useStyles();
8
+ const conv = () => props.conversation;
9
+ const toolNames = () => conv().toolNames ?? [];
10
+ const options = () => conv().options;
11
+ const providerOptions = () => conv().providerOptions;
12
+ const iterationCount = () => conv().iterationCount;
13
+ return (() => {
14
+ var _el$ = _tmpl$6(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$0 = _el$3.nextSibling;
15
+ insert(_el$4, () => conv().label);
16
+ insert(_el$5, () => conv().status);
17
+ insert(_el$3, createComponent(Show, {
18
+ get when() {
19
+ return memo(() => iterationCount() !== void 0)() && iterationCount() > 1;
20
+ },
21
+ get children() {
22
+ var _el$6 = _tmpl$(), _el$7 = _el$6.firstChild, _el$9 = _el$7.nextSibling;
23
+ _el$9.nextSibling;
24
+ insert(_el$6, iterationCount, _el$9);
25
+ effect(() => className(_el$6, styles().conversationDetails.iterationBadge));
26
+ return _el$6;
27
+ }
28
+ }), null);
29
+ insert(_el$0, (() => {
30
+ var _c$ = memo(() => !!conv().model);
31
+ return () => _c$() && `Model: ${conv().model}`;
32
+ })(), null);
33
+ insert(_el$0, (() => {
34
+ var _c$2 = memo(() => !!conv().provider);
35
+ return () => _c$2() && ` • Provider: ${conv().provider}`;
36
+ })(), null);
37
+ insert(_el$0, (() => {
38
+ var _c$3 = memo(() => !!conv().completedAt);
39
+ return () => _c$3() && ` • Duration: ${formatDuration(conv().completedAt - conv().startedAt)}`;
40
+ })(), null);
41
+ insert(_el$2, createComponent(Show, {
42
+ get when() {
43
+ return conv().usage;
44
+ },
45
+ get children() {
46
+ var _el$1 = _tmpl$2(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
47
+ _el$11.firstChild;
48
+ var _el$13 = _el$11.nextSibling, _el$14 = _el$13.nextSibling;
49
+ _el$14.firstChild;
50
+ var _el$16 = _el$14.nextSibling, _el$17 = _el$16.nextSibling;
51
+ _el$17.firstChild;
52
+ insert(_el$11, () => conv().usage?.promptTokens.toLocaleString() || 0, null);
53
+ insert(_el$14, () => conv().usage?.completionTokens.toLocaleString() || 0, null);
54
+ insert(_el$17, () => conv().usage?.totalTokens.toLocaleString() || 0, null);
55
+ effect((_p$) => {
56
+ var _v$ = styles().conversationDetails.usageInfo, _v$2 = styles().conversationDetails.usageLabel, _v$3 = styles().conversationDetails.usageBold;
57
+ _v$ !== _p$.e && className(_el$1, _p$.e = _v$);
58
+ _v$2 !== _p$.t && className(_el$10, _p$.t = _v$2);
59
+ _v$3 !== _p$.a && className(_el$17, _p$.a = _v$3);
60
+ return _p$;
61
+ }, {
62
+ e: void 0,
63
+ t: void 0,
64
+ a: void 0
65
+ });
66
+ return _el$1;
67
+ }
68
+ }), null);
69
+ insert(_el$2, createComponent(Show, {
70
+ get when() {
71
+ return toolNames().length > 0;
72
+ },
73
+ get children() {
74
+ var _el$19 = _tmpl$3(), _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
75
+ insert(_el$21, createComponent(For, {
76
+ get each() {
77
+ return toolNames();
78
+ },
79
+ children: (toolName) => (() => {
80
+ var _el$28 = _tmpl$7();
81
+ insert(_el$28, toolName);
82
+ effect(() => className(_el$28, styles().conversationDetails.toolBadge));
83
+ return _el$28;
84
+ })()
85
+ }));
86
+ effect((_p$) => {
87
+ var _v$4 = styles().conversationDetails.toolsRow, _v$5 = styles().conversationDetails.toolsLabel, _v$6 = styles().conversationDetails.toolsList;
88
+ _v$4 !== _p$.e && className(_el$19, _p$.e = _v$4);
89
+ _v$5 !== _p$.t && className(_el$20, _p$.t = _v$5);
90
+ _v$6 !== _p$.a && className(_el$21, _p$.a = _v$6);
91
+ return _p$;
92
+ }, {
93
+ e: void 0,
94
+ t: void 0,
95
+ a: void 0
96
+ });
97
+ return _el$19;
98
+ }
99
+ }), null);
100
+ insert(_el$2, createComponent(Show, {
101
+ get when() {
102
+ return memo(() => !!options())() && Object.keys(options()).length > 0;
103
+ },
104
+ get children() {
105
+ var _el$22 = _tmpl$4(), _el$23 = _el$22.firstChild, _el$24 = _el$23.nextSibling;
106
+ insert(_el$24, createComponent(For, {
107
+ get each() {
108
+ return Object.entries(options());
109
+ },
110
+ children: ([key, value]) => (() => {
111
+ var _el$29 = _tmpl$8(), _el$30 = _el$29.firstChild;
112
+ insert(_el$29, key, _el$30);
113
+ insert(_el$29, () => typeof value === "object" ? JSON.stringify(value) : String(value), null);
114
+ effect(() => className(_el$29, styles().conversationDetails.optionBadge));
115
+ return _el$29;
116
+ })()
117
+ }));
118
+ effect((_p$) => {
119
+ var _v$7 = styles().conversationDetails.optionsRow, _v$8 = styles().conversationDetails.optionsLabel, _v$9 = styles().conversationDetails.optionsCompact;
120
+ _v$7 !== _p$.e && className(_el$22, _p$.e = _v$7);
121
+ _v$8 !== _p$.t && className(_el$23, _p$.t = _v$8);
122
+ _v$9 !== _p$.a && className(_el$24, _p$.a = _v$9);
123
+ return _p$;
124
+ }, {
125
+ e: void 0,
126
+ t: void 0,
127
+ a: void 0
128
+ });
129
+ return _el$22;
130
+ }
131
+ }), null);
132
+ insert(_el$2, createComponent(Show, {
133
+ get when() {
134
+ return memo(() => !!providerOptions())() && Object.keys(providerOptions()).length > 0;
135
+ },
136
+ get children() {
137
+ var _el$25 = _tmpl$5(), _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling;
138
+ insert(_el$27, createComponent(For, {
139
+ get each() {
140
+ return Object.entries(providerOptions());
141
+ },
142
+ children: ([key, value]) => (() => {
143
+ var _el$32 = _tmpl$8(), _el$33 = _el$32.firstChild;
144
+ insert(_el$32, key, _el$33);
145
+ insert(_el$32, () => typeof value === "object" ? JSON.stringify(value) : String(value), null);
146
+ effect(() => className(_el$32, styles().conversationDetails.optionBadge));
147
+ return _el$32;
148
+ })()
149
+ }));
150
+ effect((_p$) => {
151
+ var _v$0 = styles().conversationDetails.optionsRow, _v$1 = styles().conversationDetails.optionsLabel, _v$10 = styles().conversationDetails.optionsCompact;
152
+ _v$0 !== _p$.e && className(_el$25, _p$.e = _v$0);
153
+ _v$1 !== _p$.t && className(_el$26, _p$.t = _v$1);
154
+ _v$10 !== _p$.a && className(_el$27, _p$.a = _v$10);
155
+ return _p$;
156
+ }, {
157
+ e: void 0,
158
+ t: void 0,
159
+ a: void 0
160
+ });
161
+ return _el$25;
162
+ }
163
+ }), null);
164
+ effect((_p$) => {
165
+ var _v$11 = styles().panelHeader, _v$12 = styles().conversationDetails.headerContent, _v$13 = styles().conversationDetails.headerRow, _v$14 = styles().conversationDetails.headerLabel, _v$15 = `${styles().conversationDetails.statusBadge} ${conv().status === "active" ? styles().conversationDetails.statusActive : conv().status === "completed" ? styles().conversationDetails.statusCompleted : styles().conversationDetails.statusError}`, _v$16 = styles().conversationDetails.metaInfo;
166
+ _v$11 !== _p$.e && className(_el$, _p$.e = _v$11);
167
+ _v$12 !== _p$.t && className(_el$2, _p$.t = _v$12);
168
+ _v$13 !== _p$.a && className(_el$3, _p$.a = _v$13);
169
+ _v$14 !== _p$.o && className(_el$4, _p$.o = _v$14);
170
+ _v$15 !== _p$.i && className(_el$5, _p$.i = _v$15);
171
+ _v$16 !== _p$.n && className(_el$0, _p$.n = _v$16);
172
+ return _p$;
173
+ }, {
174
+ e: void 0,
175
+ t: void 0,
176
+ a: void 0,
177
+ o: void 0,
178
+ i: void 0,
179
+ n: void 0
180
+ });
181
+ return _el$;
182
+ })();
183
+ };
184
+ export {
185
+ ConversationHeader
186
+ };
187
+ //# sourceMappingURL=ConversationHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationHeader.js","sources":["../../../../src/components/conversation/ConversationHeader.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 { 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 providerOptions = () => conv().providerOptions\n const iterationCount = () => conv().iterationCount\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 <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 {/* 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 {/* Provider Options - always visible in compact form */}\n <Show\n when={providerOptions() && Object.keys(providerOptions()!).length > 0}\n >\n <div class={styles().conversationDetails.optionsRow}>\n <span class={styles().conversationDetails.optionsLabel}>\n 🏷️ Provider:\n </span>\n <div class={styles().conversationDetails.optionsCompact}>\n <For each={Object.entries(providerOptions()!)}>\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 </div>\n </div>\n )\n}\n"],"names":["ConversationHeader","props","styles","useStyles","conv","conversation","toolNames","options","providerOptions","iterationCount","_el$","_tmpl$6","_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","usage","_el$1","_tmpl$2","_el$10","_el$11","_el$13","_el$14","_el$16","_el$17","promptTokens","toLocaleString","completionTokens","totalTokens","_p$","_v$","usageInfo","_v$2","usageLabel","_v$3","usageBold","e","t","a","length","_el$19","_tmpl$3","_el$20","_el$21","For","each","toolName","_el$28","_tmpl$7","toolBadge","_v$4","toolsRow","_v$5","toolsLabel","_v$6","toolsList","Object","keys","_el$22","_tmpl$4","_el$23","_el$24","entries","key","value","_el$29","_tmpl$8","_el$30","JSON","stringify","String","optionBadge","_v$7","optionsRow","_v$8","optionsLabel","_v$9","optionsCompact","_el$25","_tmpl$5","_el$26","_el$27","_el$32","_el$33","_v$0","_v$1","_v$10","_v$11","panelHeader","_v$12","headerContent","_v$13","headerRow","_v$14","headerLabel","_v$15","statusBadge","statusActive","statusCompleted","statusError","_v$16","metaInfo","o","i","n"],"mappings":";;;;;AAUO,MAAMA,qBACXC,CAAAA,UACG;AACH,QAAMC,SAASC,UAAAA;AACf,QAAMC,OAAOA,MAAMH,MAAMI;AAEzB,QAAMC,YAAYA,MAAMF,KAAAA,EAAOE,aAAa,CAAA;AAC5C,QAAMC,UAAUA,MAAMH,KAAAA,EAAOG;AAC7B,QAAMC,kBAAkBA,MAAMJ,KAAAA,EAAOI;AACrC,QAAMC,iBAAiBA,MAAML,KAAAA,EAAOK;AAEpC,UAAA,MAAA;AAAA,QAAAC,OAAAC,WAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAD,YAAAG,QAAAD,MAAAE,aAAAC,QAAAJ,MAAAG;AAAAE,WAAAJ,OAAA,MAKWX,KAAAA,EAAOgB,KAAK;AAAAD,WAAAH,OAAA,MAWZZ,KAAAA,EAAOiB,MAAM;AAAAF,WAAAL,OAAAQ,gBAEfC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,KAAA,MAAAhB,eAAAA,MAAqBiB,MAAS,EAAA,KAAIjB,mBAAoB;AAAA,MAAC;AAAA,MAAA,IAAAkB,WAAA;AAAA,YAAAC,QAAAC,UAAAC,QAAAF,MAAAf,YAAAkB,QAAAD,MAAAb;AAAAc,cAAAd;AAAAE,eAAAS,OAE3DnB,gBAAcsB,KAAA;AAAAC,eAAA,MAAAC,UAAAL,OADR1B,SAASgC,oBAAoBC,cAAc,CAAA;AAAA,eAAAP;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA;AAAAT,WAAAD,QAAA,MAAA;AAAA,UAAAkB,MAAAX,KAAA,MAAA,CAAA,CAMxDrB,KAAAA,EAAOiC,KAAK;AAAA,aAAA,MAAZD,IAAAA,KAAgB,UAAUhC,KAAAA,EAAOiC,KAAK;AAAA,IAAE,GAAA,GAAA,IAAA;AAAAlB,WAAAD,QAAA,MAAA;AAAA,UAAAoB,OAAAb,KAAA,MAAA,CAAA,CACxCrB,KAAAA,EAAOmC,QAAQ;AAAA,aAAA,MAAfD,KAAAA,KAAmB,gBAAgBlC,KAAAA,EAAOmC,QAAQ;AAAA,IAAE,GAAA,GAAA,IAAA;AAAApB,WAAAD,QAAA,MAAA;AAAA,UAAAsB,OAAAf,KAAA,MAAA,CAAA,CACpDrB,KAAAA,EAAOqC,WAAW;AAAA,aAAA,MAAlBD,KAAAA,KACC,gBAAgBE,eAAetC,KAAAA,EAAOqC,cAAerC,OAAOuC,SAAS,CAAC;AAAA,IAAE,GAAA,GAAA,IAAA;AAAAxB,WAAAP,OAAAU,gBAE3EC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEpB,OAAOwC;AAAAA,MAAK;AAAA,MAAA,IAAAjB,WAAA;AAAA,YAAAkB,QAAAC,QAAAA,GAAAC,SAAAF,MAAAhC,YAAAmC,SAAAD,OAAA9B;AAAA+B,eAAAnC;AAAAA,YAAAoC,SAAAD,OAAA/B,aAAAiC,SAAAD,OAAAhC;AAAAiC,eAAArC;AAAAA,YAAAsC,SAAAD,OAAAjC,aAAAmC,SAAAD,OAAAlC;AAAAmC,eAAAvC;AAAAM,eAAA6B,QAAA,MAMT5C,OAAOwC,OAAOS,aAAaC,eAAAA,KAAoB,GAAC,IAAA;AAAAnC,eAAA+B,QAAA,MAI5C9C,OAAOwC,OAAOW,iBAAiBD,eAAAA,KAAoB,GAAC,IAAA;AAAAnC,eAAAiC,QAAA,MAIzDhD,OAAOwC,OAAOY,YAAYF,eAAAA,KAAoB,GAAC,IAAA;AAAAtB,eAAAyB,CAAAA,QAAA;AAAA,cAAAC,MAb/CxD,OAAAA,EAASgC,oBAAoByB,WAASC,OACnC1D,SAASgC,oBAAoB2B,YAAUC,OAWvC5D,OAAAA,EAASgC,oBAAoB6B;AAASL,kBAAAD,IAAAO,KAAA/B,UAAAY,OAAAY,IAAAO,IAAAN,GAAA;AAAAE,mBAAAH,IAAAQ,KAAAhC,UAAAc,QAAAU,IAAAQ,IAAAL,IAAA;AAAAE,mBAAAL,IAAAS,KAAAjC,UAAAmB,QAAAK,IAAAS,IAAAJ,IAAA;AAAA,iBAAAL;AAAAA,QAAA,GAAA;AAAA,UAAAO,GAAAtC;AAAAA,UAAAuC,GAAAvC;AAAAA,UAAAwC,GAAAxC;AAAAA,QAAAA,CAAA;AAAA,eAAAmB;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA;AAAA1B,WAAAP,OAAAU,gBAMtDC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAElB,UAAAA,EAAY6D,SAAS;AAAA,MAAC;AAAA,MAAA,IAAAxC,WAAA;AAAA,YAAAyC,SAAAC,QAAAA,GAAAC,SAAAF,OAAAvD,YAAA0D,SAAAD,OAAArD;AAAAE,eAAAoD,QAAAjD,gBAI3BkD,KAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAEnE,UAAAA;AAAAA,UAAW;AAAA,UAAAqB,UAClB+C,eAAQ,MAAA;AAAA,gBAAAC,SAAAC,QAAAA;AAAAzD,mBAAAwD,QAELD,QAAQ;AAAA1C,mBAAA,MAAAC,UAAA0C,QADEzE,SAASgC,oBAAoB2C,SAAS,CAAA;AAAA,mBAAAF;AAAAA,UAAA,GAAA;AAAA,QAAA,CAGpD,CAAA;AAAA3C,eAAAyB,CAAAA,QAAA;AAAA,cAAAqB,OARK5E,OAAAA,EAASgC,oBAAoB6C,UAAQC,OAClC9E,SAASgC,oBAAoB+C,YAAUC,OACxChF,OAAAA,EAASgC,oBAAoBiD;AAASL,mBAAArB,IAAAO,KAAA/B,UAAAmC,QAAAX,IAAAO,IAAAc,IAAA;AAAAE,mBAAAvB,IAAAQ,KAAAhC,UAAAqC,QAAAb,IAAAQ,IAAAe,IAAA;AAAAE,mBAAAzB,IAAAS,KAAAjC,UAAAsC,QAAAd,IAAAS,IAAAgB,IAAA;AAAA,iBAAAzB;AAAAA,QAAA,GAAA;AAAA,UAAAO,GAAAtC;AAAAA,UAAAuC,GAAAvC;AAAAA,UAAAwC,GAAAxC;AAAAA,QAAAA,CAAA;AAAA,eAAA0C;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA;AAAAjD,WAAAP,OAAAU,gBAYrDC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,KAAA,MAAA,CAAA,CAAAlB,SAAS,EAAA,KAAI6E,OAAOC,KAAK9E,SAAU,EAAE4D,SAAS;AAAA,MAAC;AAAA,MAAA,IAAAxC,WAAA;AAAA,YAAA2D,SAAAC,QAAAA,GAAAC,SAAAF,OAAAzE,YAAA4E,SAAAD,OAAAvE;AAAAE,eAAAsE,QAAAnE,gBAMpDkD,KAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAEW,OAAOM,QAAQnF,SAAU;AAAA,UAAC;AAAA,UAAAoB,UAClCA,CAAC,CAACgE,KAAKC,KAAK,OAAC,MAAA;AAAA,gBAAAC,SAAAC,QAAAA,GAAAC,SAAAF,OAAAhF;AAAAM,mBAAA0E,QAETF,KAAGI,MAAA;AAAA5E,mBAAA0E,QAAA,MACH,OAAOD,UAAU,WACdI,KAAKC,UAAUL,KAAK,IACpBM,OAAON,KAAK,GAAC,IAAA;AAAA5D,mBAAA,MAAAC,UAAA4D,QAJN3F,SAASgC,oBAAoBiE,WAAW,CAAA;AAAA,mBAAAN;AAAAA,UAAA,GAAA;AAAA,QAAA,CAMtD,CAAA;AAAA7D,eAAAyB,CAAAA,QAAA;AAAA,cAAA2C,OAbKlG,OAAAA,EAASgC,oBAAoBmE,YAAUC,OACpCpG,SAASgC,oBAAoBqE,cAAYC,OAG1CtG,OAAAA,EAASgC,oBAAoBuE;AAAcL,mBAAA3C,IAAAO,KAAA/B,UAAAqD,QAAA7B,IAAAO,IAAAoC,IAAA;AAAAE,mBAAA7C,IAAAQ,KAAAhC,UAAAuD,QAAA/B,IAAAQ,IAAAqC,IAAA;AAAAE,mBAAA/C,IAAAS,KAAAjC,UAAAwD,QAAAhC,IAAAS,IAAAsC,IAAA;AAAA,iBAAA/C;AAAAA,QAAA,GAAA;AAAA,UAAAO,GAAAtC;AAAAA,UAAAuC,GAAAvC;AAAAA,UAAAwC,GAAAxC;AAAAA,QAAAA,CAAA;AAAA,eAAA4D;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA;AAAAnE,WAAAP,OAAAU,gBAe1DC,MAAI;AAAA,MAAA,IACHC,OAAI;AAAA,eAAEC,KAAA,MAAA,CAAA,CAAAjB,iBAAiB,EAAA,KAAI4E,OAAOC,KAAK7E,iBAAkB,EAAE2D,SAAS;AAAA,MAAC;AAAA,MAAA,IAAAxC,WAAA;AAAA,YAAA+E,SAAAC,QAAAA,GAAAC,SAAAF,OAAA7F,YAAAgG,SAAAD,OAAA3F;AAAAE,eAAA0F,QAAAvF,gBAOhEkD,KAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAEW,OAAOM,QAAQlF,iBAAkB;AAAA,UAAC;AAAA,UAAAmB,UAC1CA,CAAC,CAACgE,KAAKC,KAAK,OAAC,MAAA;AAAA,gBAAAkB,SAAAhB,QAAAA,GAAAiB,SAAAD,OAAAjG;AAAAM,mBAAA2F,QAETnB,KAAGoB,MAAA;AAAA5F,mBAAA2F,QAAA,MACH,OAAOlB,UAAU,WACdI,KAAKC,UAAUL,KAAK,IACpBM,OAAON,KAAK,GAAC,IAAA;AAAA5D,mBAAA,MAAAC,UAAA6E,QAJN5G,SAASgC,oBAAoBiE,WAAW,CAAA;AAAA,mBAAAW;AAAAA,UAAA,GAAA;AAAA,QAAA,CAMtD,CAAA;AAAA9E,eAAAyB,CAAAA,QAAA;AAAA,cAAAuD,OAbK9G,OAAAA,EAASgC,oBAAoBmE,YAAUY,OACpC/G,SAASgC,oBAAoBqE,cAAYW,QAG1ChH,OAAAA,EAASgC,oBAAoBuE;AAAcO,mBAAAvD,IAAAO,KAAA/B,UAAAyE,QAAAjD,IAAAO,IAAAgD,IAAA;AAAAC,mBAAAxD,IAAAQ,KAAAhC,UAAA2E,QAAAnD,IAAAQ,IAAAgD,IAAA;AAAAC,oBAAAzD,IAAAS,KAAAjC,UAAA4E,QAAApD,IAAAS,IAAAgD,KAAA;AAAA,iBAAAzD;AAAAA,QAAA,GAAA;AAAA,UAAAO,GAAAtC;AAAAA,UAAAuC,GAAAvC;AAAAA,UAAAwC,GAAAxC;AAAAA,QAAAA,CAAA;AAAA,eAAAgF;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA;AAAA1E,WAAAyB,CAAAA,QAAA;AAAA,UAAA0D,QA1FnDjH,SAASkH,aAAWC,QAClBnH,OAAAA,EAASgC,oBAAoBoF,eAAaC,QACxCrH,OAAAA,EAASgC,oBAAoBsF,WAASC,QACpCvH,OAAAA,EAASgC,oBAAoBwF,aAAWC,QAI3C,GAAGzH,SAASgC,oBAAoB0F,WAAW,IAChDxH,OAAOiB,WAAW,WACdnB,OAAAA,EAASgC,oBAAoB2F,eAC7BzH,KAAAA,EAAOiB,WAAW,cAChBnB,SAASgC,oBAAoB4F,kBAC7B5H,OAAAA,EAASgC,oBAAoB6F,WAAW,IAC9CC,QAUM9H,SAASgC,oBAAoB+F;AAAQd,gBAAA1D,IAAAO,KAAA/B,UAAAvB,MAAA+C,IAAAO,IAAAmD,KAAA;AAAAE,gBAAA5D,IAAAQ,KAAAhC,UAAArB,OAAA6C,IAAAQ,IAAAoD,KAAA;AAAAE,gBAAA9D,IAAAS,KAAAjC,UAAAnB,OAAA2C,IAAAS,IAAAqD,KAAA;AAAAE,gBAAAhE,IAAAyE,KAAAjG,UAAAlB,OAAA0C,IAAAyE,IAAAT,KAAA;AAAAE,gBAAAlE,IAAA0E,KAAAlG,UAAAjB,OAAAyC,IAAA0E,IAAAR,KAAA;AAAAK,gBAAAvE,IAAA2E,KAAAnG,UAAAf,OAAAuC,IAAA2E,IAAAJ,KAAA;AAAA,aAAAvE;AAAAA,IAAA,GAAA;AAAA,MAAAO,GAAAtC;AAAAA,MAAAuC,GAAAvC;AAAAA,MAAAwC,GAAAxC;AAAAA,MAAAwG,GAAAxG;AAAAA,MAAAyG,GAAAzG;AAAAA,MAAA0G,GAAA1G;AAAAA,IAAAA,CAAA;AAAA,WAAAhB;AAAAA,EAAA,GAAA;AAoFzD;"}
@@ -0,0 +1,10 @@
1
+ import { Component } from 'solid-js';
2
+ import { Conversation } from '../../store/ai-context.js';
3
+ export type TabType = 'messages' | 'chunks' | 'embeddings' | 'summaries';
4
+ interface ConversationTabsProps {
5
+ conversation: Conversation;
6
+ activeTab: TabType;
7
+ onTabChange: (tab: TabType) => void;
8
+ }
9
+ export declare const ConversationTabs: Component<ConversationTabsProps>;
10
+ export {};
@@ -0,0 +1,88 @@
1
+ import { template, insert, createComponent, effect, className, memo, delegateEvents } from "solid-js/web";
2
+ import { 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>🔢 Embeddings (<!>)`), _tmpl$4 = /* @__PURE__ */ template(`<button>📝 Summaries (<!>)`), _tmpl$5 = /* @__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 embeddingsCount = () => conv().embeddings?.length ?? 0;
10
+ const summariesCount = () => conv().summaries?.length ?? 0;
11
+ const hasMessages = () => conv().type === "client" && conv().messages.length > 0;
12
+ const hasChunks = () => conv().chunks.length > 0 || conv().type === "server";
13
+ const hasEmbeddings = () => conv().hasEmbedding || embeddingsCount() > 0;
14
+ const hasSummaries = () => conv().hasSummarize || summariesCount() > 0;
15
+ const visibleTabCount = () => {
16
+ let count = 0;
17
+ if (hasMessages()) count++;
18
+ if (hasChunks() && conv().type === "server") count++;
19
+ if (hasEmbeddings()) count++;
20
+ if (hasSummaries()) count++;
21
+ return count;
22
+ };
23
+ if (visibleTabCount() <= 1) {
24
+ return null;
25
+ }
26
+ return (() => {
27
+ var _el$ = _tmpl$5();
28
+ insert(_el$, createComponent(Show, {
29
+ get when() {
30
+ return hasMessages();
31
+ },
32
+ get children() {
33
+ var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling;
34
+ _el$5.nextSibling;
35
+ _el$2.$$click = () => props.onTabChange("messages");
36
+ insert(_el$2, () => conv().messages.length, _el$5);
37
+ effect(() => className(_el$2, `${styles().actionButton} ${props.activeTab === "messages" ? styles().conversationDetails.tabButtonActive : ""}`));
38
+ return _el$2;
39
+ }
40
+ }), null);
41
+ insert(_el$, createComponent(Show, {
42
+ get when() {
43
+ return memo(() => !!hasChunks())() && conv().type === "server";
44
+ },
45
+ get children() {
46
+ var _el$6 = _tmpl$2(), _el$7 = _el$6.firstChild, _el$9 = _el$7.nextSibling;
47
+ _el$9.nextSibling;
48
+ _el$6.$$click = () => props.onTabChange("chunks");
49
+ insert(_el$6, totalRawChunks, _el$9);
50
+ effect(() => className(_el$6, `${styles().actionButton} ${props.activeTab === "chunks" ? styles().conversationDetails.tabButtonActive : ""}`));
51
+ return _el$6;
52
+ }
53
+ }), null);
54
+ insert(_el$, createComponent(Show, {
55
+ get when() {
56
+ return hasEmbeddings();
57
+ },
58
+ get children() {
59
+ var _el$0 = _tmpl$3(), _el$1 = _el$0.firstChild, _el$11 = _el$1.nextSibling;
60
+ _el$11.nextSibling;
61
+ _el$0.$$click = () => props.onTabChange("embeddings");
62
+ insert(_el$0, embeddingsCount, _el$11);
63
+ effect(() => className(_el$0, `${styles().actionButton} ${props.activeTab === "embeddings" ? styles().conversationDetails.tabButtonActive : ""}`));
64
+ return _el$0;
65
+ }
66
+ }), null);
67
+ insert(_el$, createComponent(Show, {
68
+ get when() {
69
+ return hasSummaries();
70
+ },
71
+ get children() {
72
+ var _el$12 = _tmpl$4(), _el$13 = _el$12.firstChild, _el$15 = _el$13.nextSibling;
73
+ _el$15.nextSibling;
74
+ _el$12.$$click = () => props.onTabChange("summaries");
75
+ insert(_el$12, summariesCount, _el$15);
76
+ effect(() => className(_el$12, `${styles().actionButton} ${props.activeTab === "summaries" ? styles().conversationDetails.tabButtonActive : ""}`));
77
+ return _el$12;
78
+ }
79
+ }), null);
80
+ effect(() => className(_el$, styles().conversationDetails.tabsContainer));
81
+ return _el$;
82
+ })();
83
+ };
84
+ delegateEvents(["click"]);
85
+ export {
86
+ ConversationTabs
87
+ };
88
+ //# sourceMappingURL=ConversationTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationTabs.js","sources":["../../../../src/components/conversation/ConversationTabs.tsx"],"sourcesContent":["import { Show } 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 = 'messages' | 'chunks' | 'embeddings' | 'summaries'\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 embeddingsCount = () => conv().embeddings?.length ?? 0\n const summariesCount = () => conv().summaries?.length ?? 0\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 hasEmbeddings = () => conv().hasEmbedding || embeddingsCount() > 0\n const hasSummaries = () => conv().hasSummarize || summariesCount() > 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 (hasEmbeddings()) count++\n if (hasSummaries()) 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 embeddings tab if there are embedding operations */}\n <Show when={hasEmbeddings()}>\n <button\n class={`${styles().actionButton} ${\n props.activeTab === 'embeddings'\n ? styles().conversationDetails.tabButtonActive\n : ''\n }`}\n onClick={() => props.onTabChange('embeddings')}\n >\n 🔢 Embeddings ({embeddingsCount()})\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 </div>\n )\n}\n"],"names":["ConversationTabs","props","styles","useStyles","conv","conversation","totalRawChunks","chunks","reduce","sum","c","chunkCount","embeddingsCount","embeddings","length","summariesCount","summaries","hasMessages","type","messages","hasChunks","hasEmbeddings","hasEmbedding","hasSummaries","hasSummarize","visibleTabCount","count","_el$","_tmpl$5","_$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","tabsContainer","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Component } from 'solid-js';
2
+ import { EmbeddingOperation } from '../../store/ai-context.js';
3
+ interface EmbeddingsTabProps {
4
+ embeddings: Array<EmbeddingOperation>;
5
+ }
6
+ export declare const EmbeddingsTab: Component<EmbeddingsTabProps>;
7
+ export {};
@@ -0,0 +1,90 @@
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 { formatDuration } from "../utils/format.js";
5
+ var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<div>No embedding operations yet`), _tmpl$3 = /* @__PURE__ */ template(`<div>⏱️ `), _tmpl$4 = /* @__PURE__ */ template(`<div><div><div>🔢</div><div>Embedding</div><div></div></div><div><div><span>Model:</span><span></span></div><div><span>Inputs:</span><span> item</span></div><div><span>Started:</span><span>`);
6
+ const EmbeddingsTab = (props) => {
7
+ const styles = useStyles();
8
+ return createComponent(Show, {
9
+ get when() {
10
+ return props.embeddings.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.embeddings;
24
+ },
25
+ children: (embedding) => (() => {
26
+ var _el$3 = _tmpl$4(), _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$16 = _el$12.nextSibling, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling;
27
+ insert(_el$7, () => embedding.status);
28
+ insert(_el$4, createComponent(Show, {
29
+ get when() {
30
+ return embedding.duration > 0;
31
+ },
32
+ get children() {
33
+ var _el$8 = _tmpl$3();
34
+ _el$8.firstChild;
35
+ insert(_el$8, () => formatDuration(embedding.duration), null);
36
+ effect(() => className(_el$8, styles().conversationDetails.durationBadge));
37
+ return _el$8;
38
+ }
39
+ }), null);
40
+ insert(_el$11, () => embedding.model);
41
+ insert(_el$14, () => embedding.inputCount, _el$15);
42
+ insert(_el$14, () => embedding.inputCount !== 1 ? "s" : "", null);
43
+ insert(_el$18, () => new Date(embedding.timestamp).toLocaleTimeString());
44
+ effect((_p$) => {
45
+ var _v$ = styles().conversationDetails.operationCard, _v$2 = styles().conversationDetails.operationHeader, _v$3 = styles().conversationDetails.operationIcon, _v$4 = styles().conversationDetails.operationTitle, _v$5 = `${styles().conversationDetails.operationStatus} ${embedding.status === "completed" ? styles().conversationDetails.operationStatusCompleted : styles().conversationDetails.operationStatusPending}`, _v$6 = styles().conversationDetails.operationDetails, _v$7 = styles().conversationDetails.operationDetail, _v$8 = styles().conversationDetails.operationLabel, _v$9 = styles().conversationDetails.operationValue, _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;
46
+ _v$ !== _p$.e && className(_el$3, _p$.e = _v$);
47
+ _v$2 !== _p$.t && className(_el$4, _p$.t = _v$2);
48
+ _v$3 !== _p$.a && className(_el$5, _p$.a = _v$3);
49
+ _v$4 !== _p$.o && className(_el$6, _p$.o = _v$4);
50
+ _v$5 !== _p$.i && className(_el$7, _p$.i = _v$5);
51
+ _v$6 !== _p$.n && className(_el$0, _p$.n = _v$6);
52
+ _v$7 !== _p$.s && className(_el$1, _p$.s = _v$7);
53
+ _v$8 !== _p$.h && className(_el$10, _p$.h = _v$8);
54
+ _v$9 !== _p$.r && className(_el$11, _p$.r = _v$9);
55
+ _v$0 !== _p$.d && className(_el$12, _p$.d = _v$0);
56
+ _v$1 !== _p$.l && className(_el$13, _p$.l = _v$1);
57
+ _v$10 !== _p$.u && className(_el$14, _p$.u = _v$10);
58
+ _v$11 !== _p$.c && className(_el$16, _p$.c = _v$11);
59
+ _v$12 !== _p$.w && className(_el$17, _p$.w = _v$12);
60
+ _v$13 !== _p$.m && className(_el$18, _p$.m = _v$13);
61
+ return _p$;
62
+ }, {
63
+ e: void 0,
64
+ t: void 0,
65
+ a: void 0,
66
+ o: void 0,
67
+ i: void 0,
68
+ n: void 0,
69
+ s: void 0,
70
+ h: void 0,
71
+ r: void 0,
72
+ d: void 0,
73
+ l: void 0,
74
+ u: void 0,
75
+ c: void 0,
76
+ w: void 0,
77
+ m: void 0
78
+ });
79
+ return _el$3;
80
+ })()
81
+ }));
82
+ effect(() => className(_el$, styles().conversationDetails.messagesList));
83
+ return _el$;
84
+ }
85
+ });
86
+ };
87
+ export {
88
+ EmbeddingsTab
89
+ };
90
+ //# sourceMappingURL=EmbeddingsTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmbeddingsTab.js","sources":["../../../../src/components/conversation/EmbeddingsTab.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 { EmbeddingOperation } from '../../store/ai-context'\n\ninterface EmbeddingsTabProps {\n embeddings: Array<EmbeddingOperation>\n}\n\nexport const EmbeddingsTab: Component<EmbeddingsTabProps> = (props) => {\n const styles = useStyles()\n\n return (\n <Show\n when={props.embeddings.length > 0}\n fallback={\n <div class={styles().conversationDetails.emptyMessages}>\n No embedding operations yet\n </div>\n }\n >\n <div class={styles().conversationDetails.messagesList}>\n <For each={props.embeddings}>\n {(embedding) => (\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 Embedding\n </div>\n <div\n class={`${styles().conversationDetails.operationStatus} ${\n embedding.status === 'completed'\n ? styles().conversationDetails.operationStatusCompleted\n : styles().conversationDetails.operationStatusPending\n }`}\n >\n {embedding.status}\n </div>\n <Show when={embedding.duration > 0}>\n <div class={styles().conversationDetails.durationBadge}>\n ⏱️ {formatDuration(embedding.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 {embedding.model}\n </span>\n </div>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Inputs:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {embedding.inputCount} item\n {embedding.inputCount !== 1 ? 's' : ''}\n </span>\n </div>\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(embedding.timestamp).toLocaleTimeString()}\n </span>\n </div>\n </div>\n </div>\n )}\n </For>\n </div>\n </Show>\n )\n}\n"],"names":["EmbeddingsTab","props","styles","useStyles","_$createComponent","Show","when","embeddings","length","fallback","_el$2","_tmpl$2","_$effect","_$className","conversationDetails","emptyMessages","children","_el$","_tmpl$","_$insert","For","each","embedding","_el$3","_tmpl$4","_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$16","_el$17","_el$18","status","duration","_el$8","_tmpl$3","formatDuration","durationBadge","model","inputCount","Date","timestamp","toLocaleTimeString","_p$","_v$","operationCard","_v$2","operationHeader","_v$3","operationIcon","_v$4","operationTitle","_v$5","operationStatus","operationStatusCompleted","operationStatusPending","_v$6","operationDetails","_v$7","operationDetail","_v$8","operationLabel","_v$9","operationValue","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","e","t","a","o","i","n","s","h","r","d","l","u","c","w","m","undefined","messagesList"],"mappings":"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"}
@@ -0,0 +1,7 @@
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 {};
@@ -0,0 +1,152 @@
1
+ import { template, insert, createComponent, effect, className, memo } from "solid-js/web";
2
+ import { Show, For } from "solid-js";
3
+ import { useStyles } from "../../styles/use-styles.js";
4
+ import { formatTimestamp } from "../utils/format.js";
5
+ import { ToolCallDisplay } from "./ToolCallDisplay.js";
6
+ import { ChunksCollapsible } from "./ChunksCollapsible.js";
7
+ 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(`<details><summary>💭 Thinking...</summary><div>`), _tmpl$4 = /* @__PURE__ */ template(`<div>`), _tmpl$5 = /* @__PURE__ */ template(`<div><div><div><div></div><div><div></div></div><div></div></div><div>`);
8
+ const MessageCard = (props) => {
9
+ const styles = useStyles();
10
+ const msg = () => props.message;
11
+ const isClientMessage = () => msg().source === "client";
12
+ const getCardClass = () => {
13
+ const base = styles().conversationDetails.messageCard;
14
+ if (msg().role === "user") {
15
+ return `${base} ${styles().conversationDetails.messageCardUser}`;
16
+ }
17
+ if (isClientMessage()) {
18
+ return `${base} ${styles().conversationDetails.messageCardClient}`;
19
+ }
20
+ return `${base} ${styles().conversationDetails.messageCardServer}`;
21
+ };
22
+ const isSourcedMessage = () => msg().role !== "user";
23
+ return (() => {
24
+ var _el$ = _tmpl$5(), _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, _el$19 = _el$6.nextSibling;
25
+ insert(_el$, createComponent(Show, {
26
+ get when() {
27
+ return isSourcedMessage();
28
+ },
29
+ get children() {
30
+ var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
31
+ insert(_el$3, () => isClientMessage() ? "📱" : "☁️");
32
+ insert(_el$4, () => isClientMessage() ? "Client Message" : "Server Message");
33
+ effect((_p$) => {
34
+ var _v$ = `${styles().conversationDetails.sourceBanner} ${isClientMessage() ? styles().conversationDetails.sourceBannerClient : styles().conversationDetails.sourceBannerServer}`, _v$2 = styles().conversationDetails.sourceBannerIcon, _v$3 = styles().conversationDetails.sourceBannerText;
35
+ _v$ !== _p$.e && className(_el$2, _p$.e = _v$);
36
+ _v$2 !== _p$.t && className(_el$3, _p$.t = _v$2);
37
+ _v$3 !== _p$.a && className(_el$4, _p$.a = _v$3);
38
+ return _p$;
39
+ }, {
40
+ e: void 0,
41
+ t: void 0,
42
+ a: void 0
43
+ });
44
+ return _el$2;
45
+ }
46
+ }), _el$5);
47
+ insert(_el$7, (() => {
48
+ var _c$ = memo(() => msg().role === "user");
49
+ return () => _c$() ? "U" : msg().role === "tool" ? "🔧" : "🤖";
50
+ })());
51
+ insert(_el$9, () => msg().role);
52
+ insert(_el$0, () => formatTimestamp(msg().timestamp));
53
+ insert(_el$6, createComponent(Show, {
54
+ get when() {
55
+ return msg().usage;
56
+ },
57
+ get children() {
58
+ 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;
59
+ insert(_el$11, () => msg().usage?.promptTokens.toLocaleString(), _el$12);
60
+ insert(_el$14, () => msg().usage?.completionTokens.toLocaleString(), _el$15);
61
+ effect((_p$) => {
62
+ var _v$4 = styles().conversationDetails.messageUsage, _v$5 = styles().conversationDetails.messageUsageIcon;
63
+ _v$4 !== _p$.e && className(_el$1, _p$.e = _v$4);
64
+ _v$5 !== _p$.t && className(_el$10, _p$.t = _v$5);
65
+ return _p$;
66
+ }, {
67
+ e: void 0,
68
+ t: void 0
69
+ });
70
+ return _el$1;
71
+ }
72
+ }), null);
73
+ insert(_el$5, createComponent(Show, {
74
+ get when() {
75
+ return msg().thinkingContent;
76
+ },
77
+ get children() {
78
+ var _el$16 = _tmpl$3(), _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling;
79
+ insert(_el$18, () => msg().thinkingContent);
80
+ effect((_p$) => {
81
+ var _v$6 = styles().conversationDetails.thinkingDetails, _v$7 = styles().conversationDetails.thinkingSummary, _v$8 = styles().conversationDetails.thinkingContent;
82
+ _v$6 !== _p$.e && className(_el$16, _p$.e = _v$6);
83
+ _v$7 !== _p$.t && className(_el$17, _p$.t = _v$7);
84
+ _v$8 !== _p$.a && className(_el$18, _p$.a = _v$8);
85
+ return _p$;
86
+ }, {
87
+ e: void 0,
88
+ t: void 0,
89
+ a: void 0
90
+ });
91
+ return _el$16;
92
+ }
93
+ }), _el$19);
94
+ insert(_el$19, () => msg().content);
95
+ insert(_el$5, createComponent(Show, {
96
+ get when() {
97
+ return memo(() => !!msg().toolCalls)() && msg().toolCalls.length > 0;
98
+ },
99
+ get children() {
100
+ var _el$20 = _tmpl$4();
101
+ insert(_el$20, createComponent(For, {
102
+ get each() {
103
+ return msg().toolCalls;
104
+ },
105
+ children: (tool) => createComponent(ToolCallDisplay, {
106
+ tool
107
+ })
108
+ }));
109
+ effect(() => className(_el$20, styles().conversationDetails.toolCallsContainer));
110
+ return _el$20;
111
+ }
112
+ }), null);
113
+ insert(_el$5, createComponent(Show, {
114
+ get when() {
115
+ return memo(() => !!msg().chunks)() && msg().chunks.length > 0;
116
+ },
117
+ get children() {
118
+ return createComponent(ChunksCollapsible, {
119
+ get chunks() {
120
+ return msg().chunks;
121
+ }
122
+ });
123
+ }
124
+ }), null);
125
+ effect((_p$) => {
126
+ var _v$9 = getCardClass(), _v$0 = isSourcedMessage() ? styles().conversationDetails.messageCardContent : "", _v$1 = styles().conversationDetails.messageHeader, _v$10 = msg().role === "user" ? styles().conversationDetails.avatarUser : isClientMessage() ? styles().conversationDetails.avatarClient : styles().conversationDetails.avatarServer, _v$11 = styles().conversationDetails.roleLabel, _v$12 = msg().role === "user" ? styles().conversationDetails.roleLabelUser : isClientMessage() ? styles().conversationDetails.roleLabelClient : styles().conversationDetails.roleLabelServer, _v$13 = styles().conversationDetails.timestamp, _v$14 = styles().conversationDetails.messageContent;
127
+ _v$9 !== _p$.e && className(_el$, _p$.e = _v$9);
128
+ _v$0 !== _p$.t && className(_el$5, _p$.t = _v$0);
129
+ _v$1 !== _p$.a && className(_el$6, _p$.a = _v$1);
130
+ _v$10 !== _p$.o && className(_el$7, _p$.o = _v$10);
131
+ _v$11 !== _p$.i && className(_el$8, _p$.i = _v$11);
132
+ _v$12 !== _p$.n && className(_el$9, _p$.n = _v$12);
133
+ _v$13 !== _p$.s && className(_el$0, _p$.s = _v$13);
134
+ _v$14 !== _p$.h && className(_el$19, _p$.h = _v$14);
135
+ return _p$;
136
+ }, {
137
+ e: void 0,
138
+ t: void 0,
139
+ a: void 0,
140
+ o: void 0,
141
+ i: void 0,
142
+ n: void 0,
143
+ s: void 0,
144
+ h: void 0
145
+ });
146
+ return _el$;
147
+ })();
148
+ };
149
+ export {
150
+ MessageCard
151
+ };
152
+ //# sourceMappingURL=MessageCard.js.map