@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,122 @@
|
|
|
1
|
+
import { template, insert, createComponent, effect, className, setAttribute, setStyleProperty, delegateEvents } from "solid-js/web";
|
|
2
|
+
import { Show } from "solid-js";
|
|
3
|
+
import { useStyles } from "../../styles/use-styles.js";
|
|
4
|
+
import { useAIStore } from "../../store/ai-context.js";
|
|
5
|
+
import { getTypeColor, getStatusColor } from "../utils/format.js";
|
|
6
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div>🔧 `), _tmpl$2 = /* @__PURE__ */ template(`<div>⟳`), _tmpl$3 = /* @__PURE__ */ template(`<div>🎯 `), _tmpl$4 = /* @__PURE__ */ template(`<div><div><div><div><div></div><div></div></div><div><div></div></div></div><div><div>💬 </div><div>📦 `);
|
|
7
|
+
const ConversationRow = (props) => {
|
|
8
|
+
const {
|
|
9
|
+
state,
|
|
10
|
+
selectConversation
|
|
11
|
+
} = useAIStore();
|
|
12
|
+
const styles = useStyles();
|
|
13
|
+
const conv = () => props.conversation;
|
|
14
|
+
const hasToolCalls = () => {
|
|
15
|
+
return conv().messages.some((msg) => msg.toolCalls && msg.toolCalls.length > 0);
|
|
16
|
+
};
|
|
17
|
+
const countToolCalls = () => {
|
|
18
|
+
return conv().messages.reduce((total, msg) => {
|
|
19
|
+
return total + (msg.toolCalls?.length || 0);
|
|
20
|
+
}, 0);
|
|
21
|
+
};
|
|
22
|
+
const totalRawChunks = () => {
|
|
23
|
+
return conv().chunks.reduce((sum, c) => sum + (c.chunkCount || 1), 0);
|
|
24
|
+
};
|
|
25
|
+
return (() => {
|
|
26
|
+
var _el$ = _tmpl$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$9 = _el$4.nextSibling, _el$1 = _el$9.firstChild, _el$10 = _el$3.nextSibling, _el$11 = _el$10.firstChild;
|
|
27
|
+
_el$11.firstChild;
|
|
28
|
+
var _el$13 = _el$11.nextSibling;
|
|
29
|
+
_el$13.firstChild;
|
|
30
|
+
_el$.$$click = () => selectConversation(conv().id);
|
|
31
|
+
insert(_el$6, () => conv().label);
|
|
32
|
+
insert(_el$4, createComponent(Show, {
|
|
33
|
+
get when() {
|
|
34
|
+
return hasToolCalls();
|
|
35
|
+
},
|
|
36
|
+
get children() {
|
|
37
|
+
var _el$7 = _tmpl$();
|
|
38
|
+
_el$7.firstChild;
|
|
39
|
+
insert(_el$7, countToolCalls, null);
|
|
40
|
+
effect((_p$) => {
|
|
41
|
+
var _v$ = styles().conversationsList.toolCallsBadge, _v$2 = `${countToolCalls()} tool call${countToolCalls() !== 1 ? "s" : ""}`;
|
|
42
|
+
_v$ !== _p$.e && className(_el$7, _p$.e = _v$);
|
|
43
|
+
_v$2 !== _p$.t && setAttribute(_el$7, "title", _p$.t = _v$2);
|
|
44
|
+
return _p$;
|
|
45
|
+
}, {
|
|
46
|
+
e: void 0,
|
|
47
|
+
t: void 0
|
|
48
|
+
});
|
|
49
|
+
return _el$7;
|
|
50
|
+
}
|
|
51
|
+
}), null);
|
|
52
|
+
insert(_el$9, createComponent(Show, {
|
|
53
|
+
get when() {
|
|
54
|
+
return conv().status === "active";
|
|
55
|
+
},
|
|
56
|
+
get children() {
|
|
57
|
+
var _el$0 = _tmpl$2();
|
|
58
|
+
effect(() => className(_el$0, styles().conversationsList.loadingIndicator));
|
|
59
|
+
return _el$0;
|
|
60
|
+
}
|
|
61
|
+
}), _el$1);
|
|
62
|
+
insert(_el$11, () => conv().messages.length, null);
|
|
63
|
+
insert(_el$13, totalRawChunks, null);
|
|
64
|
+
insert(_el$10, createComponent(Show, {
|
|
65
|
+
get when() {
|
|
66
|
+
return conv().usage;
|
|
67
|
+
},
|
|
68
|
+
get children() {
|
|
69
|
+
var _el$15 = _tmpl$3();
|
|
70
|
+
_el$15.firstChild;
|
|
71
|
+
insert(_el$15, () => conv().usage?.totalTokens.toLocaleString() || 0, null);
|
|
72
|
+
effect((_p$) => {
|
|
73
|
+
var _v$3 = styles().conversationsList.tokensBadge, _v$4 = `Prompt: ${conv().usage?.promptTokens || 0} | Completion: ${conv().usage?.completionTokens || 0}`;
|
|
74
|
+
_v$3 !== _p$.e && className(_el$15, _p$.e = _v$3);
|
|
75
|
+
_v$4 !== _p$.t && setAttribute(_el$15, "title", _p$.t = _v$4);
|
|
76
|
+
return _p$;
|
|
77
|
+
}, {
|
|
78
|
+
e: void 0,
|
|
79
|
+
t: void 0
|
|
80
|
+
});
|
|
81
|
+
return _el$15;
|
|
82
|
+
}
|
|
83
|
+
}), null);
|
|
84
|
+
effect((_p$) => {
|
|
85
|
+
var _v$5 = `${styles().utilRow} ${state.activeConversationId === conv().id ? styles().utilRowSelected : ""}`, _v$6 = styles().conversationsList.rowMain, _v$7 = styles().conversationsList.rowTop, _v$8 = styles().conversationsList.rowInfo, _v$9 = styles().conversationsList.typeDot, _v$0 = getTypeColor(conv().type), _v$1 = styles().conversationsList.label, _v$10 = styles().conversationsList.rowRight, _v$11 = styles().conversationsList.statusDot, _v$12 = getStatusColor(conv().status), _v$13 = styles().conversationsList.stats, _v$14 = styles().conversationsList.statItem, _v$15 = styles().conversationsList.statItem;
|
|
86
|
+
_v$5 !== _p$.e && className(_el$, _p$.e = _v$5);
|
|
87
|
+
_v$6 !== _p$.t && className(_el$2, _p$.t = _v$6);
|
|
88
|
+
_v$7 !== _p$.a && className(_el$3, _p$.a = _v$7);
|
|
89
|
+
_v$8 !== _p$.o && className(_el$4, _p$.o = _v$8);
|
|
90
|
+
_v$9 !== _p$.i && className(_el$5, _p$.i = _v$9);
|
|
91
|
+
_v$0 !== _p$.n && setStyleProperty(_el$5, "background", _p$.n = _v$0);
|
|
92
|
+
_v$1 !== _p$.s && className(_el$6, _p$.s = _v$1);
|
|
93
|
+
_v$10 !== _p$.h && className(_el$9, _p$.h = _v$10);
|
|
94
|
+
_v$11 !== _p$.r && className(_el$1, _p$.r = _v$11);
|
|
95
|
+
_v$12 !== _p$.d && setStyleProperty(_el$1, "background", _p$.d = _v$12);
|
|
96
|
+
_v$13 !== _p$.l && className(_el$10, _p$.l = _v$13);
|
|
97
|
+
_v$14 !== _p$.u && className(_el$11, _p$.u = _v$14);
|
|
98
|
+
_v$15 !== _p$.c && className(_el$13, _p$.c = _v$15);
|
|
99
|
+
return _p$;
|
|
100
|
+
}, {
|
|
101
|
+
e: void 0,
|
|
102
|
+
t: void 0,
|
|
103
|
+
a: void 0,
|
|
104
|
+
o: void 0,
|
|
105
|
+
i: void 0,
|
|
106
|
+
n: void 0,
|
|
107
|
+
s: void 0,
|
|
108
|
+
h: void 0,
|
|
109
|
+
r: void 0,
|
|
110
|
+
d: void 0,
|
|
111
|
+
l: void 0,
|
|
112
|
+
u: void 0,
|
|
113
|
+
c: void 0
|
|
114
|
+
});
|
|
115
|
+
return _el$;
|
|
116
|
+
})();
|
|
117
|
+
};
|
|
118
|
+
delegateEvents(["click"]);
|
|
119
|
+
export {
|
|
120
|
+
ConversationRow
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=ConversationRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationRow.js","sources":["../../../../src/components/list/ConversationRow.tsx"],"sourcesContent":["import { Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport { useAIStore } from '../../store/ai-context'\nimport { getStatusColor, getTypeColor } from '../utils'\nimport type { Conversation } from '../../store/ai-context'\nimport type { Component } from 'solid-js'\n\ninterface ConversationRowProps {\n conversation: Conversation\n}\n\nexport const ConversationRow: Component<ConversationRowProps> = (props) => {\n const { state, selectConversation } = useAIStore()\n const styles = useStyles()\n const conv = () => props.conversation\n\n const hasToolCalls = () => {\n return conv().messages.some(\n (msg) => msg.toolCalls && msg.toolCalls.length > 0,\n )\n }\n\n const countToolCalls = () => {\n return conv().messages.reduce((total, msg) => {\n return total + (msg.toolCalls?.length || 0)\n }, 0)\n }\n\n // Total raw chunks = sum of all chunkCounts from all chunks\n const totalRawChunks = () => {\n return conv().chunks.reduce((sum, c) => sum + (c.chunkCount || 1), 0)\n }\n\n return (\n <div\n class={`${styles().utilRow} ${state.activeConversationId === conv().id ? styles().utilRowSelected : ''}`}\n onClick={() => selectConversation(conv().id)}\n >\n <div class={styles().conversationsList.rowMain}>\n <div class={styles().conversationsList.rowTop}>\n <div class={styles().conversationsList.rowInfo}>\n <div\n class={styles().conversationsList.typeDot}\n style={{ background: getTypeColor(conv().type) }}\n />\n <div class={styles().conversationsList.label}>{conv().label}</div>\n <Show when={hasToolCalls()}>\n <div\n class={styles().conversationsList.toolCallsBadge}\n title={`${countToolCalls()} tool call${countToolCalls() !== 1 ? 's' : ''}`}\n >\n 🔧 {countToolCalls()}\n </div>\n </Show>\n </div>\n <div class={styles().conversationsList.rowRight}>\n <Show when={conv().status === 'active'}>\n <div class={styles().conversationsList.loadingIndicator}>⟳</div>\n </Show>\n <div\n class={styles().conversationsList.statusDot}\n style={{ background: getStatusColor(conv().status) }}\n />\n </div>\n </div>\n <div class={styles().conversationsList.stats}>\n <div class={styles().conversationsList.statItem}>\n 💬 {conv().messages.length}\n </div>\n <div class={styles().conversationsList.statItem}>\n 📦 {totalRawChunks()}\n </div>\n <Show when={conv().usage}>\n <div\n class={styles().conversationsList.tokensBadge}\n title={`Prompt: ${conv().usage?.promptTokens || 0} | Completion: ${conv().usage?.completionTokens || 0}`}\n >\n 🎯 {conv().usage?.totalTokens.toLocaleString() || 0}\n </div>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n"],"names":["ConversationRow","props","state","selectConversation","useAIStore","styles","useStyles","conv","conversation","hasToolCalls","messages","some","msg","toolCalls","length","countToolCalls","reduce","total","totalRawChunks","chunks","sum","c","chunkCount","_el$","_tmpl$4","_el$2","firstChild","_el$3","_el$4","_el$5","_el$6","nextSibling","_el$9","_el$1","_el$10","_el$11","_el$13","$$click","id","_$insert","label","_$createComponent","Show","when","children","_el$7","_tmpl$","_$effect","_p$","_v$","conversationsList","toolCallsBadge","_v$2","e","_$className","t","_$setAttribute","undefined","status","_el$0","_tmpl$2","loadingIndicator","usage","_el$15","_tmpl$3","totalTokens","toLocaleString","_v$3","tokensBadge","_v$4","promptTokens","completionTokens","_v$5","utilRow","activeConversationId","utilRowSelected","_v$6","rowMain","_v$7","rowTop","_v$8","rowInfo","_v$9","typeDot","_v$0","getTypeColor","type","_v$1","_v$10","rowRight","_v$11","statusDot","_v$12","getStatusColor","_v$13","stats","_v$14","statItem","_v$15","a","o","i","n","_$setStyleProperty","s","h","r","d","l","u","_$delegateEvents"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ConversationRow } from './ConversationRow.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Chunk } from '../../store/ai-store.js';
|
|
2
|
+
export declare const formatTimestamp: (timestamp: number) => string;
|
|
3
|
+
export declare const formatDuration: (ms?: number) => string;
|
|
4
|
+
export declare const getChunkTypeColor: (type: Chunk["type"]) => string;
|
|
5
|
+
export declare const getStatusColor: (status: "active" | "completed" | "error") => string;
|
|
6
|
+
export declare const getTypeColor: (type: "client" | "server") => string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const formatTimestamp = (timestamp) => {
|
|
2
|
+
const date = new Date(timestamp);
|
|
3
|
+
return date.toLocaleTimeString() + "." + date.getMilliseconds().toString().padStart(3, "0");
|
|
4
|
+
};
|
|
5
|
+
const formatDuration = (ms) => {
|
|
6
|
+
if (!ms) return "-";
|
|
7
|
+
if (ms < 1e3) return `${ms}ms`;
|
|
8
|
+
return `${(ms / 1e3).toFixed(2)}s`;
|
|
9
|
+
};
|
|
10
|
+
const getChunkTypeColor = (type) => {
|
|
11
|
+
switch (type) {
|
|
12
|
+
case "content":
|
|
13
|
+
return "#10b981";
|
|
14
|
+
// green
|
|
15
|
+
case "tool_call":
|
|
16
|
+
return "#8b5cf6";
|
|
17
|
+
// purple
|
|
18
|
+
case "tool_result":
|
|
19
|
+
return "#3b82f6";
|
|
20
|
+
// blue
|
|
21
|
+
case "done":
|
|
22
|
+
return "#6b7280";
|
|
23
|
+
// gray
|
|
24
|
+
case "error":
|
|
25
|
+
return "#ef4444";
|
|
26
|
+
// red
|
|
27
|
+
case "approval":
|
|
28
|
+
return "#f59e0b";
|
|
29
|
+
// orange/amber
|
|
30
|
+
default:
|
|
31
|
+
return "#6b7280";
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const getStatusColor = (status) => {
|
|
35
|
+
switch (status) {
|
|
36
|
+
case "active":
|
|
37
|
+
return "oklch(0.7 0.17 142)";
|
|
38
|
+
// green
|
|
39
|
+
case "completed":
|
|
40
|
+
return "oklch(0.65 0.1 260)";
|
|
41
|
+
// blue
|
|
42
|
+
case "error":
|
|
43
|
+
return "oklch(0.65 0.2 25)";
|
|
44
|
+
// red
|
|
45
|
+
default:
|
|
46
|
+
return "oklch(0.6 0.05 200)";
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const getTypeColor = (type) => {
|
|
50
|
+
switch (type) {
|
|
51
|
+
case "client":
|
|
52
|
+
return "oklch(0.68 0.16 330)";
|
|
53
|
+
// pink
|
|
54
|
+
case "server":
|
|
55
|
+
return "oklch(0.68 0.15 280)";
|
|
56
|
+
// purple
|
|
57
|
+
default:
|
|
58
|
+
return "oklch(0.6 0.05 200)";
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export {
|
|
62
|
+
formatDuration,
|
|
63
|
+
formatTimestamp,
|
|
64
|
+
getChunkTypeColor,
|
|
65
|
+
getStatusColor,
|
|
66
|
+
getTypeColor
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../../../src/components/utils/format.ts"],"sourcesContent":["import type { Chunk } from '../../store/ai-store'\n\nexport const formatTimestamp = (timestamp: number): string => {\n const date = new Date(timestamp)\n return (\n date.toLocaleTimeString() +\n '.' +\n date.getMilliseconds().toString().padStart(3, '0')\n )\n}\n\nexport const formatDuration = (ms?: number): string => {\n if (!ms) return '-'\n if (ms < 1000) return `${ms}ms`\n return `${(ms / 1000).toFixed(2)}s`\n}\n\nexport const getChunkTypeColor = (type: Chunk['type']): string => {\n switch (type) {\n case 'content':\n return '#10b981' // green\n case 'tool_call':\n return '#8b5cf6' // purple\n case 'tool_result':\n return '#3b82f6' // blue\n case 'done':\n return '#6b7280' // gray\n case 'error':\n return '#ef4444' // red\n case 'approval':\n return '#f59e0b' // orange/amber\n default:\n return '#6b7280' // gray\n }\n}\n\nexport const getStatusColor = (\n status: 'active' | 'completed' | 'error',\n): string => {\n switch (status) {\n case 'active':\n return 'oklch(0.7 0.17 142)' // green\n case 'completed':\n return 'oklch(0.65 0.1 260)' // blue\n case 'error':\n return 'oklch(0.65 0.2 25)' // red\n default:\n return 'oklch(0.6 0.05 200)'\n }\n}\n\nexport const getTypeColor = (type: 'client' | 'server'): string => {\n switch (type) {\n case 'client':\n return 'oklch(0.68 0.16 330)' // pink\n case 'server':\n return 'oklch(0.68 0.15 280)' // purple\n default:\n return 'oklch(0.6 0.05 200)'\n }\n}\n"],"names":[],"mappings":"AAEO,MAAM,kBAAkB,CAAC,cAA8B;AAC5D,QAAM,OAAO,IAAI,KAAK,SAAS;AAC/B,SACE,KAAK,uBACL,MACA,KAAK,gBAAA,EAAkB,SAAA,EAAW,SAAS,GAAG,GAAG;AAErD;AAEO,MAAM,iBAAiB,CAAC,OAAwB;AACrD,MAAI,CAAC,GAAI,QAAO;AAChB,MAAI,KAAK,IAAM,QAAO,GAAG,EAAE;AAC3B,SAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAClC;AAEO,MAAM,oBAAoB,CAAC,SAAgC;AAChE,UAAQ,MAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAEO,MAAM,iBAAiB,CAC5B,WACW;AACX,UAAQ,QAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAEO,MAAM,eAAe,CAAC,SAAsC;AACjE,UAAQ,MAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './format.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface AiDevtoolsInit {
|
|
2
|
+
}
|
|
3
|
+
declare const AiDevtoolsCore: new () => {
|
|
4
|
+
"__#private@#isMounted": boolean;
|
|
5
|
+
"__#private@#dispose"?: () => void;
|
|
6
|
+
"__#private@#Component": any;
|
|
7
|
+
"__#private@#ThemeProvider": any;
|
|
8
|
+
mount<T extends HTMLElement>(el: T, theme: "light" | "dark"): Promise<void>;
|
|
9
|
+
unmount(): void;
|
|
10
|
+
}, AiDevtoolsCoreNoOp: new () => {
|
|
11
|
+
mount<T extends HTMLElement>(_el: T, _theme: "light" | "dark"): Promise<void>;
|
|
12
|
+
unmount(): void;
|
|
13
|
+
"__#private@#isMounted": boolean;
|
|
14
|
+
"__#private@#dispose"?: () => void;
|
|
15
|
+
"__#private@#Component": any;
|
|
16
|
+
"__#private@#ThemeProvider": any;
|
|
17
|
+
};
|
|
18
|
+
export { AiDevtoolsCore, AiDevtoolsCoreNoOp };
|
package/dist/esm/core.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { lazy } from "solid-js";
|
|
2
|
+
import { constructCoreClass } from "@tanstack/devtools-utils/solid";
|
|
3
|
+
const Component = lazy(() => import("./components/Shell.js"));
|
|
4
|
+
const [AiDevtoolsCore, AiDevtoolsCoreNoOp] = constructCoreClass(Component);
|
|
5
|
+
export {
|
|
6
|
+
AiDevtoolsCore,
|
|
7
|
+
AiDevtoolsCoreNoOp
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sources":["../../src/core.tsx"],"sourcesContent":["import { lazy } from 'solid-js'\nimport { constructCoreClass } from '@tanstack/devtools-utils/solid'\n\nconst Component = lazy(() => import('./components/Shell'))\n\nexport interface AiDevtoolsInit {}\n\nconst [AiDevtoolsCore, AiDevtoolsCoreNoOp] = constructCoreClass(Component)\n\nexport { AiDevtoolsCore, AiDevtoolsCoreNoOp }\n"],"names":["Component","lazy","AiDevtoolsCore","AiDevtoolsCoreNoOp","constructCoreClass"],"mappings":";;AAGA,MAAMA,YAAYC,KAAK,MAAM,OAAO,uBAAoB,CAAC;AAIzD,MAAM,CAACC,gBAAgBC,kBAAkB,IAAIC,mBAAmBJ,SAAS;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const AiDevtoolsCore: new () => {
|
|
2
|
+
"__#private@#isMounted": boolean;
|
|
3
|
+
"__#private@#dispose"?: () => void;
|
|
4
|
+
"__#private@#Component": any;
|
|
5
|
+
"__#private@#ThemeProvider": any;
|
|
6
|
+
mount<T extends HTMLElement>(el: T, theme: "light" | "dark"): Promise<void>;
|
|
7
|
+
unmount(): void;
|
|
8
|
+
};
|
|
9
|
+
export type { AiDevtoolsInit } from './core.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import * as Devtools from './core'\n\nexport const AiDevtoolsCore =\n process.env.NODE_ENV !== 'development'\n ? Devtools.AiDevtoolsCoreNoOp\n : Devtools.AiDevtoolsCore\n\nexport type { AiDevtoolsInit } from './core'\n"],"names":["Devtools.AiDevtoolsCoreNoOp","Devtools.AiDevtoolsCore"],"mappings":";AAEO,MAAM,iBACX,QAAQ,IAAI,aAAa,gBACrBA,qBACAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ParentComponent } from 'solid-js';
|
|
2
|
+
interface MessagePart {
|
|
3
|
+
type: 'text' | 'tool-call' | 'tool-result';
|
|
4
|
+
content?: string;
|
|
5
|
+
toolCallId?: string;
|
|
6
|
+
toolName?: string;
|
|
7
|
+
arguments?: string;
|
|
8
|
+
state?: string;
|
|
9
|
+
output?: unknown;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolCall {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
arguments: string;
|
|
16
|
+
state: string;
|
|
17
|
+
result?: unknown;
|
|
18
|
+
approvalRequired?: boolean;
|
|
19
|
+
approvalId?: string;
|
|
20
|
+
/** Duration of tool execution in milliseconds */
|
|
21
|
+
duration?: number;
|
|
22
|
+
}
|
|
23
|
+
interface TokenUsage {
|
|
24
|
+
promptTokens: number;
|
|
25
|
+
completionTokens: number;
|
|
26
|
+
totalTokens: number;
|
|
27
|
+
}
|
|
28
|
+
export interface Message {
|
|
29
|
+
id: string;
|
|
30
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
31
|
+
content: string;
|
|
32
|
+
timestamp: number;
|
|
33
|
+
parts?: Array<MessagePart>;
|
|
34
|
+
toolCalls?: Array<ToolCall>;
|
|
35
|
+
/** Consolidated chunks - consecutive same-type chunks are merged into one entry */
|
|
36
|
+
chunks?: Array<Chunk>;
|
|
37
|
+
/** Total number of raw chunks received (before consolidation) */
|
|
38
|
+
totalChunkCount?: number;
|
|
39
|
+
model?: string;
|
|
40
|
+
usage?: TokenUsage;
|
|
41
|
+
thinkingContent?: string;
|
|
42
|
+
/** Source of the message: 'client' for aggregated client-side data, 'server' for individual server chunks */
|
|
43
|
+
source?: 'client' | 'server';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Consolidated chunk - represents one or more raw chunks of the same type.
|
|
47
|
+
* Consecutive content/thinking chunks are merged into a single entry with accumulated content.
|
|
48
|
+
*/
|
|
49
|
+
export interface Chunk {
|
|
50
|
+
id: string;
|
|
51
|
+
type: 'content' | 'tool_call' | 'tool_result' | 'done' | 'error' | 'approval' | 'thinking';
|
|
52
|
+
timestamp: number;
|
|
53
|
+
messageId?: string;
|
|
54
|
+
/** Accumulated content from all merged chunks */
|
|
55
|
+
content?: string;
|
|
56
|
+
/** The last delta received (kept for debugging) */
|
|
57
|
+
delta?: string;
|
|
58
|
+
toolName?: string;
|
|
59
|
+
toolCallId?: string;
|
|
60
|
+
finishReason?: string;
|
|
61
|
+
error?: string;
|
|
62
|
+
approvalId?: string;
|
|
63
|
+
input?: unknown;
|
|
64
|
+
/** Tool arguments for tool_call chunks */
|
|
65
|
+
arguments?: string;
|
|
66
|
+
/** Tool result data for tool_result chunks */
|
|
67
|
+
result?: unknown;
|
|
68
|
+
/** Duration in ms for tool execution */
|
|
69
|
+
duration?: number;
|
|
70
|
+
/** Number of raw chunks that were merged into this consolidated chunk */
|
|
71
|
+
chunkCount: number;
|
|
72
|
+
}
|
|
73
|
+
export interface EmbeddingOperation {
|
|
74
|
+
id: string;
|
|
75
|
+
model: string;
|
|
76
|
+
inputCount: number;
|
|
77
|
+
duration: number;
|
|
78
|
+
timestamp: number;
|
|
79
|
+
status: 'started' | 'completed';
|
|
80
|
+
}
|
|
81
|
+
export interface SummarizeOperation {
|
|
82
|
+
id: string;
|
|
83
|
+
model: string;
|
|
84
|
+
inputLength: number;
|
|
85
|
+
outputLength?: number;
|
|
86
|
+
duration?: number;
|
|
87
|
+
timestamp: number;
|
|
88
|
+
status: 'started' | 'completed';
|
|
89
|
+
}
|
|
90
|
+
export interface Conversation {
|
|
91
|
+
id: string;
|
|
92
|
+
type: 'client' | 'server';
|
|
93
|
+
label: string;
|
|
94
|
+
messages: Array<Message>;
|
|
95
|
+
chunks: Array<Chunk>;
|
|
96
|
+
model?: string;
|
|
97
|
+
provider?: string;
|
|
98
|
+
status: 'active' | 'completed' | 'error';
|
|
99
|
+
startedAt: number;
|
|
100
|
+
completedAt?: number;
|
|
101
|
+
usage?: TokenUsage;
|
|
102
|
+
iterationCount?: number;
|
|
103
|
+
toolNames?: Array<string>;
|
|
104
|
+
options?: Record<string, unknown>;
|
|
105
|
+
providerOptions?: Record<string, unknown>;
|
|
106
|
+
/** Flags for which operation types this conversation has */
|
|
107
|
+
hasChat?: boolean;
|
|
108
|
+
hasEmbedding?: boolean;
|
|
109
|
+
hasSummarize?: boolean;
|
|
110
|
+
/** Embedding operations in this conversation */
|
|
111
|
+
embeddings?: Array<EmbeddingOperation>;
|
|
112
|
+
/** Summarize operations in this conversation */
|
|
113
|
+
summaries?: Array<SummarizeOperation>;
|
|
114
|
+
}
|
|
115
|
+
interface AIStoreState {
|
|
116
|
+
conversations: Record<string, Conversation>;
|
|
117
|
+
activeConversationId: string | null;
|
|
118
|
+
}
|
|
119
|
+
interface AIContextValue {
|
|
120
|
+
state: AIStoreState;
|
|
121
|
+
clearAllConversations: () => void;
|
|
122
|
+
selectConversation: (id: string) => void;
|
|
123
|
+
}
|
|
124
|
+
export declare function useAIStore(): AIContextValue;
|
|
125
|
+
export declare const AIProvider: ParentComponent;
|
|
126
|
+
export {};
|