@tonyclaw/llm-inspector 1.16.4 → 1.16.5

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 (56) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/CompareDrawer-C1w4KUGZ.js +1 -0
  3. package/.output/public/assets/ReplayDialog-DR2Sgq_g.js +1 -0
  4. package/.output/public/assets/RequestAnatomy-DAre35kj.js +1 -0
  5. package/.output/public/assets/ResponseView-ackes7_g.js +1 -0
  6. package/.output/public/assets/StreamingChunkSequence-GrXwIGKA.js +1 -0
  7. package/.output/public/assets/index-BGzHFOEX.css +1 -0
  8. package/.output/public/assets/index-DX88k9br.js +101 -0
  9. package/.output/public/assets/json-viewer-C_QUhGeu.js +14 -0
  10. package/.output/public/assets/{main-DbWwVQFh.js → main-CDMdNDY_.js} +1 -1
  11. package/.output/server/_libs/lucide-react.mjs +104 -84
  12. package/.output/server/_ssr/CompareDrawer-ftkJxyk6.mjs +1040 -0
  13. package/.output/server/_ssr/ReplayDialog-DcmE3lj5.mjs +321 -0
  14. package/.output/server/_ssr/RequestAnatomy-rK_LNMdG.mjs +351 -0
  15. package/.output/server/_ssr/ResponseView-CbQ4n-aJ.mjs +601 -0
  16. package/.output/server/_ssr/StreamingChunkSequence-84FZkIzv.mjs +301 -0
  17. package/.output/server/_ssr/{index-C-z-fZtq.mjs → index-CDjLoMsk.mjs} +1026 -2455
  18. package/.output/server/_ssr/index.mjs +2 -2
  19. package/.output/server/_ssr/json-viewer-B-qpM5xC.mjs +510 -0
  20. package/.output/server/_ssr/{router-CNM9Kbi0.mjs → router-BrdjOUEW.mjs} +24 -14
  21. package/.output/server/{_tanstack-start-manifest_v-BWfLeIsC.mjs → _tanstack-start-manifest_v-DmOZEcJ3.mjs} +1 -1
  22. package/.output/server/index.mjs +68 -26
  23. package/package.json +1 -1
  24. package/src/components/OnboardingBanner.tsx +2 -2
  25. package/src/components/ProxyViewer.tsx +38 -26
  26. package/src/components/ProxyViewerContainer.tsx +3 -24
  27. package/src/components/proxy-viewer/ConversationGroup.tsx +1 -1
  28. package/src/components/proxy-viewer/ConversationHeader.tsx +4 -1
  29. package/src/components/proxy-viewer/LogEntry.tsx +213 -181
  30. package/src/components/proxy-viewer/LogEntryHeader.tsx +134 -36
  31. package/src/components/proxy-viewer/ThreadConnector.tsx +17 -2
  32. package/src/components/proxy-viewer/TurnGroup.tsx +94 -71
  33. package/src/components/proxy-viewer/anatomy/RequestAnatomy.tsx +98 -0
  34. package/src/components/proxy-viewer/anatomy/SegmentBar.tsx +196 -0
  35. package/src/components/proxy-viewer/anatomy/tokenEstimate.ts +53 -0
  36. package/src/components/proxy-viewer/anatomy/types.ts +39 -0
  37. package/src/components/proxy-viewer/anatomy/useAnatomyJump.ts +114 -0
  38. package/src/components/proxy-viewer/formats/anthropic/ContentBlocks.tsx +3 -23
  39. package/src/components/proxy-viewer/formats/anthropic/thinkingExtract.ts +21 -0
  40. package/src/components/proxy-viewer/formats/openai/ResponseView.tsx +5 -3
  41. package/src/components/proxy-viewer/lazy.ts +37 -0
  42. package/src/components/proxy-viewer/log-formats/anthropic.ts +146 -0
  43. package/src/components/proxy-viewer/log-formats/openai.ts +127 -0
  44. package/src/components/proxy-viewer/log-formats/types.ts +7 -0
  45. package/src/components/proxy-viewer/log-formats/unknown.ts +4 -0
  46. package/src/components/proxy-viewer/logEntryVisibility.ts +39 -0
  47. package/src/components/proxy-viewer/useKeyboardNavigation.ts +190 -0
  48. package/src/components/proxy-viewer/viewerState.ts +8 -0
  49. package/src/components/ui/crab-variants.tsx +11 -0
  50. package/src/components/ui/json-expansion-button.tsx +56 -0
  51. package/src/components/ui/json-viewer-bulk.ts +97 -0
  52. package/src/components/ui/json-viewer.tsx +58 -183
  53. package/src/lib/utils.ts +2 -3
  54. package/src/routes/api/logs.stream.ts +26 -16
  55. package/.output/public/assets/index-DRRCmu5p.css +0 -1
  56. package/.output/public/assets/index-X7CHS7fS.js +0 -107
@@ -0,0 +1,301 @@
1
+ import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
+ import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent } from "./index-CDjLoMsk.mjs";
3
+ import { JsonViewer } from "./json-viewer-B-qpM5xC.mjs";
4
+ import "./router-BrdjOUEW.mjs";
5
+ import "../_libs/modelcontextprotocol__server.mjs";
6
+ import "../_libs/jszip.mjs";
7
+ import { a as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
8
+ import "../_libs/swr.mjs";
9
+ import "../_libs/use-sync-external-store.mjs";
10
+ import "../_libs/dequal.mjs";
11
+ import "../_libs/clsx.mjs";
12
+ import "../_libs/tailwind-merge.mjs";
13
+ import "../_libs/class-variance-authority.mjs";
14
+ import "../_libs/radix-ui__react-dialog.mjs";
15
+ import "../_libs/radix-ui__primitive.mjs";
16
+ import "../_libs/radix-ui__react-compose-refs.mjs";
17
+ import "../_libs/radix-ui__react-context.mjs";
18
+ import "../_libs/radix-ui__react-id.mjs";
19
+ import "../_libs/@radix-ui/react-use-layout-effect+[...].mjs";
20
+ import "../_libs/@radix-ui/react-use-controllable-state+[...].mjs";
21
+ import "../_libs/@radix-ui/react-dismissable-layer+[...].mjs";
22
+ import "../_libs/radix-ui__react-primitive.mjs";
23
+ import "../_libs/react-dom.mjs";
24
+ import "util";
25
+ import "async_hooks";
26
+ import "stream";
27
+ import "crypto";
28
+ import "../_libs/radix-ui__react-slot.mjs";
29
+ import "../_libs/@radix-ui/react-use-callback-ref+[...].mjs";
30
+ import "../_libs/@radix-ui/react-use-escape-keydown+[...].mjs";
31
+ import "../_libs/radix-ui__react-focus-scope.mjs";
32
+ import "../_libs/radix-ui__react-portal.mjs";
33
+ import "../_libs/radix-ui__react-presence.mjs";
34
+ import "../_libs/radix-ui__react-focus-guards.mjs";
35
+ import "../_libs/react-remove-scroll.mjs";
36
+ import "tslib";
37
+ import "../_libs/react-remove-scroll-bar.mjs";
38
+ import "../_libs/react-style-singleton.mjs";
39
+ import "../_libs/get-nonce.mjs";
40
+ import "../_libs/use-sidecar.mjs";
41
+ import "../_libs/use-callback-ref.mjs";
42
+ import "../_libs/aria-hidden.mjs";
43
+ import "../_libs/diff.mjs";
44
+ import "../_libs/tanstack__react-virtual.mjs";
45
+ import "../_libs/tanstack__virtual-core.mjs";
46
+ import "../_libs/radix-ui__react-select.mjs";
47
+ import "../_libs/radix-ui__number.mjs";
48
+ import "../_libs/radix-ui__react-collection.mjs";
49
+ import "../_libs/radix-ui__react-direction.mjs";
50
+ import "../_libs/radix-ui__react-popper.mjs";
51
+ import "../_libs/floating-ui__react-dom.mjs";
52
+ import "../_libs/floating-ui__dom.mjs";
53
+ import "../_libs/floating-ui__core.mjs";
54
+ import "../_libs/floating-ui__utils.mjs";
55
+ import "../_libs/radix-ui__react-arrow.mjs";
56
+ import "../_libs/radix-ui__react-use-size.mjs";
57
+ import "../_libs/radix-ui__react-use-previous.mjs";
58
+ import "../_libs/@radix-ui/react-visually-hidden+[...].mjs";
59
+ import "../_libs/zod.mjs";
60
+ import "../_libs/radix-ui__react-tabs.mjs";
61
+ import "../_libs/radix-ui__react-roving-focus.mjs";
62
+ import "../_libs/radix-ui__react-tooltip.mjs";
63
+ import "../_libs/tanstack__react-router.mjs";
64
+ import "../_libs/tiny-warning.mjs";
65
+ import "../_libs/tanstack__router-core.mjs";
66
+ import "../_libs/cookie-es.mjs";
67
+ import "../_libs/tanstack__history.mjs";
68
+ import "../_libs/tiny-invariant.mjs";
69
+ import "../_libs/seroval.mjs";
70
+ import "../_libs/seroval-plugins.mjs";
71
+ import "node:stream/web";
72
+ import "node:stream";
73
+ import "../_libs/isbot.mjs";
74
+ import "node:fs";
75
+ import "node:fs/promises";
76
+ import "node:buffer";
77
+ import "node:path";
78
+ import "../_libs/conf.mjs";
79
+ import "node:util";
80
+ import "node:process";
81
+ import "node:crypto";
82
+ import "node:assert";
83
+ import "../_libs/dot-prop.mjs";
84
+ import "../_libs/env-paths.mjs";
85
+ import "node:os";
86
+ import "../_libs/atomically.mjs";
87
+ import "../_libs/stubborn-fs.mjs";
88
+ import "../_libs/stubborn-utils.mjs";
89
+ import "../_libs/when-exit.mjs";
90
+ import "../_libs/ajv.mjs";
91
+ import "../_libs/fast-deep-equal.mjs";
92
+ import "../_libs/json-schema-traverse.mjs";
93
+ import "../_libs/fast-uri.mjs";
94
+ import "../_libs/ajv-formats.mjs";
95
+ import "../_libs/debounce-fn.mjs";
96
+ import "../_libs/mimic-function.mjs";
97
+ import "../_libs/semver.mjs";
98
+ import "../_libs/uint8array-extras.mjs";
99
+ import "node:child_process";
100
+ import "../_libs/readable-stream.mjs";
101
+ import "events";
102
+ import "node:string_decoder";
103
+ import "../_libs/process-nextick-args.mjs";
104
+ import "../_libs/isarray.mjs";
105
+ import "../_libs/safe-buffer.mjs";
106
+ import "buffer";
107
+ import "../_libs/core-util-is.mjs";
108
+ import "../_libs/inherits.mjs";
109
+ import "../_libs/util-deprecate.mjs";
110
+ import "../_libs/lie.mjs";
111
+ import "../_libs/immediate.mjs";
112
+ import "../_libs/setimmediate.mjs";
113
+ import "../_libs/pako.mjs";
114
+ import "../_libs/react-markdown.mjs";
115
+ import "../_libs/devlop.mjs";
116
+ import "../_libs/unified.mjs";
117
+ import "../_libs/bail.mjs";
118
+ import "../_libs/extend.mjs";
119
+ import "../_libs/is-plain-obj.mjs";
120
+ import "../_libs/trough.mjs";
121
+ import "../_libs/vfile.mjs";
122
+ import "../_libs/vfile-message.mjs";
123
+ import "../_libs/unist-util-stringify-position.mjs";
124
+ import "node:url";
125
+ import "../_libs/remark-parse.mjs";
126
+ import "../_libs/mdast-util-from-markdown.mjs";
127
+ import "../_libs/micromark-util-decode-numeric-character-reference+[...].mjs";
128
+ import "../_libs/micromark-util-decode-string.mjs";
129
+ import "../_libs/decode-named-character-reference+[...].mjs";
130
+ import "../_libs/character-entities.mjs";
131
+ import "../_libs/micromark-util-normalize-identifier+[...].mjs";
132
+ import "../_libs/micromark.mjs";
133
+ import "../_libs/micromark-util-combine-extensions+[...].mjs";
134
+ import "../_libs/micromark-util-chunked.mjs";
135
+ import "../_libs/micromark-factory-space.mjs";
136
+ import "../_libs/micromark-util-character.mjs";
137
+ import "../_libs/micromark-core-commonmark.mjs";
138
+ import "../_libs/micromark-util-classify-character+[...].mjs";
139
+ import "../_libs/micromark-util-resolve-all.mjs";
140
+ import "../_libs/micromark-util-subtokenize.mjs";
141
+ import "../_libs/micromark-factory-destination.mjs";
142
+ import "../_libs/micromark-factory-label.mjs";
143
+ import "../_libs/micromark-factory-title.mjs";
144
+ import "../_libs/micromark-factory-whitespace.mjs";
145
+ import "../_libs/micromark-util-html-tag-name.mjs";
146
+ import "../_libs/mdast-util-to-string.mjs";
147
+ import "../_libs/remark-rehype.mjs";
148
+ import "../_libs/mdast-util-to-hast.mjs";
149
+ import "../_libs/ungap__structured-clone.mjs";
150
+ import "../_libs/micromark-util-sanitize-uri.mjs";
151
+ import "../_libs/unist-util-position.mjs";
152
+ import "../_libs/trim-lines.mjs";
153
+ import "../_libs/unist-util-visit.mjs";
154
+ import "../_libs/unist-util-visit-parents.mjs";
155
+ import "../_libs/unist-util-is.mjs";
156
+ import "../_libs/hast-util-to-jsx-runtime.mjs";
157
+ import "../_libs/comma-separated-tokens.mjs";
158
+ import "../_libs/property-information.mjs";
159
+ import "../_libs/space-separated-tokens.mjs";
160
+ import "../_libs/style-to-js.mjs";
161
+ import "../_libs/style-to-object.mjs";
162
+ import "../_libs/inline-style-parser.mjs";
163
+ import "../_libs/hast-util-whitespace.mjs";
164
+ import "../_libs/estree-util-is-identifier-name.mjs";
165
+ import "../_libs/html-url-attributes.mjs";
166
+ const StreamingChunkSequence = reactExports.memo(function StreamingChunkSequence2({
167
+ logId,
168
+ truncated
169
+ }) {
170
+ const [containerExpanded, setContainerExpanded] = reactExports.useState(false);
171
+ const [chunkState, setChunkState] = reactExports.useState({ status: "idle" });
172
+ const [expandedIndices, setExpandedIndices] = reactExports.useState(/* @__PURE__ */ new Set());
173
+ reactExports.useEffect(() => {
174
+ if (!containerExpanded || chunkState.status !== "idle") return;
175
+ let cancelled = false;
176
+ setChunkState({ status: "loading" });
177
+ fetch(`/api/logs/${logId}/chunks`).then((res) => {
178
+ if (!res.ok) {
179
+ return Promise.reject(new Error("Chunks not found"));
180
+ }
181
+ return res.json();
182
+ }).then((data) => {
183
+ if (!cancelled) {
184
+ setChunkState({ status: "success", chunks: data.chunks });
185
+ }
186
+ }).catch(() => {
187
+ if (!cancelled) {
188
+ setChunkState({ status: "error", message: "Chunk data unavailable" });
189
+ }
190
+ });
191
+ return () => {
192
+ cancelled = true;
193
+ };
194
+ }, [containerExpanded, logId]);
195
+ const groups = reactExports.useMemo(() => {
196
+ if (chunkState.status !== "success") return [];
197
+ const map = /* @__PURE__ */ new Map();
198
+ for (const chunk of chunkState.chunks) {
199
+ const existing = map.get(chunk.index);
200
+ if (existing) {
201
+ existing.push(chunk);
202
+ } else {
203
+ map.set(chunk.index, [chunk]);
204
+ }
205
+ }
206
+ return Array.from(map.entries()).map(([index, chunks]) => ({ index, chunks })).sort((a, b) => a.index - b.index);
207
+ }, [chunkState]);
208
+ const toggleIndex = (index) => {
209
+ setExpandedIndices((prev) => {
210
+ const next = new Set(prev);
211
+ if (next.has(index)) {
212
+ next.delete(index);
213
+ } else {
214
+ next.add(index);
215
+ }
216
+ return next;
217
+ });
218
+ };
219
+ function renderBody() {
220
+ if (chunkState.status === "idle" || chunkState.status === "loading") {
221
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 py-2 text-xs text-muted-foreground", children: [
222
+ /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3 animate-spin" }),
223
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Loading chunks..." })
224
+ ] });
225
+ }
226
+ if (chunkState.status === "error") {
227
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "py-2 text-xs text-muted-foreground italic", children: chunkState.message });
228
+ }
229
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-2 space-y-1", children: [
230
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-[10px] text-muted-foreground font-mono mb-2", children: [
231
+ groups.length,
232
+ " index group",
233
+ groups.length !== 1 ? "s" : "",
234
+ " available"
235
+ ] }),
236
+ groups.map((group) => {
237
+ const isExpanded = expandedIndices.has(group.index);
238
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded border border-border bg-background", children: [
239
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
240
+ "button",
241
+ {
242
+ type: "button",
243
+ className: "flex items-center gap-2 w-full px-2 py-1.5 text-left hover:bg-muted/50 transition-colors cursor-pointer",
244
+ onClick: () => toggleIndex(group.index),
245
+ children: [
246
+ isExpanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" }),
247
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] text-muted-foreground font-mono", children: [
248
+ "[",
249
+ group.index,
250
+ "] ",
251
+ group.chunks[0]?.type ?? ""
252
+ ] }),
253
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] text-muted-foreground font-mono", children: [
254
+ group.chunks.length,
255
+ " chunk",
256
+ group.chunks.length !== 1 ? "s" : ""
257
+ ] })
258
+ ]
259
+ }
260
+ ),
261
+ isExpanded && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2 pb-2 space-y-1", children: group.chunks.map((chunk) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded border border-border bg-muted/20 p-2", children: [
262
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1", children: [
263
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] text-muted-foreground font-mono", children: [
264
+ "+",
265
+ chunk.timestamp,
266
+ "ms"
267
+ ] }),
268
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] text-muted-foreground font-mono", children: chunk.type })
269
+ ] }),
270
+ /* @__PURE__ */ jsxRuntimeExports.jsx(JsonViewer, { data: chunk, defaultExpandDepth: 0, showCopy: true })
271
+ ] }, chunk.index)) })
272
+ ] }, group.index);
273
+ })
274
+ ] });
275
+ }
276
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
277
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
278
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
279
+ "button",
280
+ {
281
+ type: "button",
282
+ className: "flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
283
+ onClick: () => setContainerExpanded((v) => !v),
284
+ children: [
285
+ containerExpanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3" }),
286
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Raw SSE Events" }),
287
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Badge, { variant: "outline", className: "text-[9px] px-1 py-0 h-4 font-mono ml-1", children: [
288
+ logId,
289
+ truncated === true ? "+" : ""
290
+ ] })
291
+ ]
292
+ }
293
+ ) }),
294
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Server-Sent Events streaming chunks from the provider" })
295
+ ] }) }),
296
+ containerExpanded === true ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-border bg-muted/20 overflow-auto max-h-64", children: renderBody() }) : null
297
+ ] });
298
+ });
299
+ export {
300
+ StreamingChunkSequence
301
+ };