@tonyclaw/agent-inspector 2.0.17 → 2.0.19
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/.output/cli.js +149 -40
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-DDg7Cs4N.js → CompareDrawer-D-90PIPw.js} +1 -1
- package/.output/public/assets/ProxyViewerContainer-CxRDWacg.js +114 -0
- package/.output/public/assets/ReplayDialog-DzlLYoTO.js +1 -0
- package/.output/public/assets/{RequestAnatomy-DR8OICOJ.js → RequestAnatomy-0hbyf6oa.js} +1 -1
- package/.output/public/assets/ResponseView-CKe0tNqr.js +1 -0
- package/.output/public/assets/StreamingChunkSequence-enhfdeNh.js +1 -0
- package/.output/public/assets/_sessionId-CJ-SusES.js +1 -0
- package/.output/public/assets/index-BbFsmQRC.js +1 -0
- package/.output/public/assets/index-BfBgrkgU.css +1 -0
- package/.output/public/assets/{main-bwZlEXw2.js → main-o9-hg8g1.js} +2 -2
- package/.output/server/_libs/lucide-react.mjs +141 -118
- package/.output/server/_libs/tanstack__react-virtual.mjs +13 -2
- package/.output/server/_libs/tanstack__virtual-core.mjs +24 -1
- package/.output/server/{_sessionId-BEuJJhqT.mjs → _sessionId-F8lm6PIb.mjs} +3 -2
- package/.output/server/_ssr/{CompareDrawer-yTO93GMz.mjs → CompareDrawer-Cf1yfwfd.mjs} +4 -3
- package/.output/server/_ssr/{ProxyViewerContainer-C8qCkHGB.mjs → ProxyViewerContainer-Bmu9867L.mjs} +349 -74
- package/.output/server/_ssr/{ReplayDialog-DRF9PG7Z.mjs → ReplayDialog-DxZfLBOe.mjs} +199 -17
- package/.output/server/_ssr/{RequestAnatomy-DBcuV_jV.mjs → RequestAnatomy-CbdERGZd.mjs} +4 -3
- package/.output/server/_ssr/{ResponseView-JJm78HZT.mjs → ResponseView-CvLd6qxI.mjs} +4 -3
- package/.output/server/_ssr/{StreamingChunkSequence-DyGKjBYx.mjs → StreamingChunkSequence-B_lkRB6o.mjs} +4 -3
- package/.output/server/_ssr/{index-T7JG28t6.mjs → index-ejrSItfz.mjs} +3 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{router-BJob8RN3.mjs → router-SbCnbDc2.mjs} +896 -240
- package/.output/server/{_tanstack-start-manifest_v-CuiFi3XC.mjs → _tanstack-start-manifest_v-yx8ftqWz.mjs} +1 -1
- package/.output/server/index.mjs +60 -60
- package/README.md +26 -109
- package/package.json +2 -1
- package/src/cli/doctor.ts +160 -8
- package/src/cli/templates/skill-onboard.ts +2 -20
- package/src/components/OnboardingBanner.tsx +13 -13
- package/src/components/ProxyViewer.tsx +55 -38
- package/src/components/ProxyViewerContainer.tsx +5 -0
- package/src/components/providers/SettingsDialog.tsx +113 -2
- package/src/components/proxy-viewer/ConversationGroup.tsx +20 -3
- package/src/components/proxy-viewer/ConversationGroupList.tsx +144 -0
- package/src/components/proxy-viewer/ConversationHeader.tsx +0 -2
- package/src/components/proxy-viewer/ReplayDialog.tsx +200 -13
- package/src/components/proxy-viewer/index.ts +1 -1
- package/src/knowledge/openclawClient.ts +0 -8
- package/src/knowledge/types.ts +0 -2
- package/src/lib/export-logs.ts +72 -5
- package/src/lib/providerTestContract.ts +0 -1
- package/src/lib/useProviders.ts +1 -1
- package/src/mcp/server.ts +14 -6
- package/src/mcp/toolHandlers.ts +21 -4
- package/src/proxy/chunkStorage.ts +2 -4
- package/src/proxy/dataDir.ts +37 -15
- package/src/proxy/formats/anthropic/index.ts +0 -1
- package/src/proxy/formats/anthropic/schemas.ts +0 -2
- package/src/proxy/handler.ts +41 -29
- package/src/proxy/logFinalizer.ts +93 -11
- package/src/proxy/logger.ts +35 -10
- package/src/proxy/providers.ts +12 -5
- package/src/proxy/rawStreamCapture.ts +85 -0
- package/src/proxy/schemas.ts +1 -51
- package/src/proxy/sessionRuntime.ts +0 -9
- package/src/proxy/socketTracker.ts +15 -8
- package/src/proxy/store.ts +414 -13
- package/src/routes/api/logs.$id.replay.ts +66 -1
- package/src/routes/api/logs.stream.ts +11 -3
- package/src/routes/api/logs.ts +51 -17
- package/src/routes/api/providers.$providerId.ts +10 -3
- package/src/routes/api/providers.ts +6 -3
- package/.output/public/assets/ProxyViewerContainer-DbbK1y7N.js +0 -114
- package/.output/public/assets/ReplayDialog-C1zWNkoz.js +0 -1
- package/.output/public/assets/ResponseView-Dh9iSj6h.js +0 -1
- package/.output/public/assets/StreamingChunkSequence-B_xElyH3.js +0 -1
- package/.output/public/assets/_sessionId-gv1a_NNu.js +0 -1
- package/.output/public/assets/index-D_nZj9Vt.css +0 -1
- package/.output/public/assets/index-u-LwDaeH.js +0 -1
- package/src/components/ui/json-expansion-button.tsx +0 -56
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { u as useProviders, D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as
|
|
3
|
-
import { ResponseView } from "./ResponseView-
|
|
4
|
-
import "./router-
|
|
5
|
-
import "../_libs/modelcontextprotocol__server.mjs";
|
|
2
|
+
import { u as useProviders, D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as Button, l as TooltipProvider, m as Tooltip, n as TooltipTrigger, o as TooltipContent, p as dispatchLogFocusRequest } from "./ProxyViewerContainer-Bmu9867L.mjs";
|
|
3
|
+
import { ResponseView } from "./ResponseView-CvLd6qxI.mjs";
|
|
4
|
+
import { C as CapturedLogSchema } from "./router-SbCnbDc2.mjs";
|
|
6
5
|
import "../_libs/jszip.mjs";
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
6
|
+
import "../_libs/modelcontextprotocol__server.mjs";
|
|
7
|
+
import { $ as RotateCcw, ac as Braces, ad as Minimize2 } from "../_libs/lucide-react.mjs";
|
|
8
|
+
import { d as object, n as number, a as array, c as boolean, b as string } from "../_libs/zod.mjs";
|
|
9
9
|
import "../_libs/swr.mjs";
|
|
10
10
|
import "../_libs/use-sync-external-store.mjs";
|
|
11
11
|
import "../_libs/dequal.mjs";
|
|
@@ -130,6 +130,7 @@ import "node:stream";
|
|
|
130
130
|
import "../_libs/isbot.mjs";
|
|
131
131
|
import "node:fs";
|
|
132
132
|
import "node:fs/promises";
|
|
133
|
+
import "node:readline";
|
|
133
134
|
import "node:buffer";
|
|
134
135
|
import "node:child_process";
|
|
135
136
|
import "../_libs/conf.mjs";
|
|
@@ -266,8 +267,40 @@ const ReplayResultSchema = object({
|
|
|
266
267
|
inputTokens: number().nullable().optional(),
|
|
267
268
|
outputTokens: number().nullable().optional(),
|
|
268
269
|
elapsedMs: number().nullable().optional(),
|
|
269
|
-
streaming: boolean().optional()
|
|
270
|
+
streaming: boolean().optional(),
|
|
271
|
+
replayLogId: number().optional()
|
|
272
|
+
});
|
|
273
|
+
const ReplayHistorySchema = object({
|
|
274
|
+
logs: array(CapturedLogSchema),
|
|
275
|
+
total: number()
|
|
270
276
|
});
|
|
277
|
+
function formatJsonForEdit(value) {
|
|
278
|
+
try {
|
|
279
|
+
const parsed = JSON.parse(value);
|
|
280
|
+
return JSON.stringify(parsed, null, 2);
|
|
281
|
+
} catch {
|
|
282
|
+
return value;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function compactJsonForEdit(value) {
|
|
286
|
+
try {
|
|
287
|
+
const parsed = JSON.parse(value);
|
|
288
|
+
return JSON.stringify(parsed);
|
|
289
|
+
} catch {
|
|
290
|
+
return value;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function readJsonEditState(value) {
|
|
294
|
+
try {
|
|
295
|
+
JSON.parse(value);
|
|
296
|
+
return { valid: true, message: "Valid JSON" };
|
|
297
|
+
} catch (err) {
|
|
298
|
+
return {
|
|
299
|
+
valid: false,
|
|
300
|
+
message: err instanceof Error ? err.message : "Invalid JSON"
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
}
|
|
271
304
|
function formatElapsed(ms) {
|
|
272
305
|
if (ms < 1e3) return `${String(ms)}ms`;
|
|
273
306
|
return `${(ms / 1e3).toFixed(1)}s`;
|
|
@@ -335,13 +368,35 @@ function ReplayComparisonTable({
|
|
|
335
368
|
}
|
|
336
369
|
function ReplayDialog({ log, open, onOpenChange }) {
|
|
337
370
|
const { providers } = useProviders();
|
|
371
|
+
const originalBody = log.rawRequestBody ?? "{}";
|
|
338
372
|
const [modifiedBody, setModifiedBody] = reactExports.useState(() => {
|
|
339
|
-
return
|
|
373
|
+
return formatJsonForEdit(originalBody);
|
|
340
374
|
});
|
|
341
375
|
const [replayResult, setReplayResult] = reactExports.useState(null);
|
|
376
|
+
const [replayHistory, setReplayHistory] = reactExports.useState([]);
|
|
342
377
|
const [loading, setLoading] = reactExports.useState(false);
|
|
343
378
|
const [error, setError] = reactExports.useState(null);
|
|
379
|
+
const jsonEditState = reactExports.useMemo(() => readJsonEditState(modifiedBody), [modifiedBody]);
|
|
380
|
+
const refreshReplayHistory = reactExports.useCallback(async () => {
|
|
381
|
+
if (!open) return;
|
|
382
|
+
try {
|
|
383
|
+
const response = await fetch(`/api/logs?replayOf=${String(log.id)}`);
|
|
384
|
+
if (!response.ok) return;
|
|
385
|
+
const data = await response.json();
|
|
386
|
+
const parsed = ReplayHistorySchema.safeParse(data);
|
|
387
|
+
if (!parsed.success) return;
|
|
388
|
+
setReplayHistory(parsed.data.logs);
|
|
389
|
+
} catch {
|
|
390
|
+
}
|
|
391
|
+
}, [log.id, open]);
|
|
392
|
+
reactExports.useEffect(() => {
|
|
393
|
+
void refreshReplayHistory();
|
|
394
|
+
}, [refreshReplayHistory]);
|
|
344
395
|
async function handleReplay() {
|
|
396
|
+
if (!jsonEditState.valid) {
|
|
397
|
+
setError("Request body must be valid JSON before replay.");
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
345
400
|
setLoading(true);
|
|
346
401
|
setError(null);
|
|
347
402
|
setReplayResult(null);
|
|
@@ -360,6 +415,7 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
360
415
|
}
|
|
361
416
|
const data = parsed.data;
|
|
362
417
|
setReplayResult(data);
|
|
418
|
+
await refreshReplayHistory();
|
|
363
419
|
if (!data.success) {
|
|
364
420
|
setError(data.error ?? "Replay failed");
|
|
365
421
|
}
|
|
@@ -374,6 +430,25 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
374
430
|
setError(null);
|
|
375
431
|
onOpenChange(false);
|
|
376
432
|
}
|
|
433
|
+
function handleBodyChange(value) {
|
|
434
|
+
setModifiedBody(value);
|
|
435
|
+
setReplayResult(null);
|
|
436
|
+
setError(null);
|
|
437
|
+
}
|
|
438
|
+
function handleFormatBody() {
|
|
439
|
+
handleBodyChange(formatJsonForEdit(modifiedBody));
|
|
440
|
+
}
|
|
441
|
+
function handleCompactBody() {
|
|
442
|
+
handleBodyChange(compactJsonForEdit(modifiedBody));
|
|
443
|
+
}
|
|
444
|
+
function handleResetBody() {
|
|
445
|
+
handleBodyChange(formatJsonForEdit(originalBody));
|
|
446
|
+
}
|
|
447
|
+
function handleOpenReplayLog(logId) {
|
|
448
|
+
window.location.hash = `log-${String(logId)}`;
|
|
449
|
+
dispatchLogFocusRequest({ logId, tab: "request" });
|
|
450
|
+
onOpenChange(false);
|
|
451
|
+
}
|
|
377
452
|
const replayModelOptions = reactExports.useMemo(() => {
|
|
378
453
|
const options = [];
|
|
379
454
|
for (const provider of providers) {
|
|
@@ -395,9 +470,7 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
395
470
|
setError(result.error);
|
|
396
471
|
return;
|
|
397
472
|
}
|
|
398
|
-
|
|
399
|
-
setReplayResult(null);
|
|
400
|
-
setError(null);
|
|
473
|
+
handleBodyChange(formatJsonForEdit(result.body));
|
|
401
474
|
}
|
|
402
475
|
const originalMetrics = buildReplayMetrics({
|
|
403
476
|
status: log.responseStatus,
|
|
@@ -416,6 +489,7 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
416
489
|
streaming: replayResult.streaming
|
|
417
490
|
});
|
|
418
491
|
const replayComparisons = replayMetrics === null ? [] : buildReplayComparisons(originalMetrics, replayMetrics);
|
|
492
|
+
const latestReplayHistory = replayHistory.slice(-5).reverse();
|
|
419
493
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-w-4xl max-h-[85vh] overflow-auto", children: [
|
|
420
494
|
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
|
|
421
495
|
/* @__PURE__ */ jsxRuntimeExports.jsx(RotateCcw, { className: "size-4" }),
|
|
@@ -451,19 +525,110 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
451
525
|
}
|
|
452
526
|
)
|
|
453
527
|
] }),
|
|
454
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
455
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
528
|
+
latestReplayHistory.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2 rounded-md border border-border bg-muted/20 px-3 py-2", children: [
|
|
529
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
530
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-medium", children: "Replay history" }),
|
|
531
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
532
|
+
Button,
|
|
533
|
+
{
|
|
534
|
+
type: "button",
|
|
535
|
+
variant: "ghost",
|
|
536
|
+
size: "sm",
|
|
537
|
+
onClick: () => {
|
|
538
|
+
void refreshReplayHistory();
|
|
539
|
+
},
|
|
540
|
+
children: "Refresh"
|
|
541
|
+
}
|
|
542
|
+
)
|
|
543
|
+
] }),
|
|
544
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid gap-1", children: latestReplayHistory.map((historyLog) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
545
|
+
"button",
|
|
546
|
+
{
|
|
547
|
+
type: "button",
|
|
548
|
+
onClick: () => handleOpenReplayLog(historyLog.id),
|
|
549
|
+
className: "grid grid-cols-[auto_1fr_auto_auto] items-center gap-2 rounded-sm px-2 py-1 text-left text-xs hover:bg-muted",
|
|
550
|
+
children: [
|
|
551
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono text-emerald-600", children: [
|
|
552
|
+
"#",
|
|
553
|
+
historyLog.id
|
|
554
|
+
] }),
|
|
555
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate font-mono text-muted-foreground", children: historyLog.model ?? "unknown" }),
|
|
556
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-muted-foreground", children: historyLog.responseStatus ?? "-" }),
|
|
557
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-muted-foreground", children: historyLog.elapsedMs === null ? "-" : formatElapsed(historyLog.elapsedMs) })
|
|
558
|
+
]
|
|
559
|
+
},
|
|
560
|
+
historyLog.id
|
|
561
|
+
)) })
|
|
562
|
+
] }),
|
|
563
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
564
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
|
|
565
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: `replay-body-${String(log.id)}`, className: "text-sm font-medium", children: "Request Body" }),
|
|
566
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
567
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
568
|
+
"span",
|
|
569
|
+
{
|
|
570
|
+
className: jsonEditState.valid ? "text-xs text-emerald-500" : "text-xs text-destructive",
|
|
571
|
+
children: jsonEditState.message
|
|
572
|
+
}
|
|
573
|
+
),
|
|
574
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
575
|
+
Button,
|
|
576
|
+
{
|
|
577
|
+
type: "button",
|
|
578
|
+
variant: "outline",
|
|
579
|
+
size: "sm",
|
|
580
|
+
onClick: handleFormatBody,
|
|
581
|
+
disabled: !jsonEditState.valid,
|
|
582
|
+
title: "Format JSON",
|
|
583
|
+
children: [
|
|
584
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Braces, { className: "size-3.5" }),
|
|
585
|
+
"Format"
|
|
586
|
+
]
|
|
587
|
+
}
|
|
588
|
+
),
|
|
589
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
590
|
+
Button,
|
|
591
|
+
{
|
|
592
|
+
type: "button",
|
|
593
|
+
variant: "outline",
|
|
594
|
+
size: "sm",
|
|
595
|
+
onClick: handleCompactBody,
|
|
596
|
+
disabled: !jsonEditState.valid,
|
|
597
|
+
title: "Compact JSON",
|
|
598
|
+
children: [
|
|
599
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Minimize2, { className: "size-3.5" }),
|
|
600
|
+
"Compact"
|
|
601
|
+
]
|
|
602
|
+
}
|
|
603
|
+
),
|
|
604
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
605
|
+
Button,
|
|
606
|
+
{
|
|
607
|
+
type: "button",
|
|
608
|
+
variant: "ghost",
|
|
609
|
+
size: "sm",
|
|
610
|
+
onClick: handleResetBody,
|
|
611
|
+
title: "Reset to original request",
|
|
612
|
+
children: [
|
|
613
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(RotateCcw, { className: "size-3.5" }),
|
|
614
|
+
"Reset"
|
|
615
|
+
]
|
|
616
|
+
}
|
|
617
|
+
)
|
|
618
|
+
] })
|
|
619
|
+
] }),
|
|
456
620
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
457
621
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
458
622
|
"textarea",
|
|
459
623
|
{
|
|
460
|
-
|
|
624
|
+
id: `replay-body-${String(log.id)}`,
|
|
625
|
+
className: "w-full min-h-80 p-3 font-mono text-xs leading-5 bg-muted rounded-md border border-input resize-y tabular-nums focus:outline-none focus:ring-2 focus:ring-ring",
|
|
461
626
|
value: modifiedBody,
|
|
462
|
-
onChange: (e) =>
|
|
627
|
+
onChange: (e) => handleBodyChange(e.target.value),
|
|
463
628
|
spellCheck: false
|
|
464
629
|
}
|
|
465
630
|
) }),
|
|
466
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Edit
|
|
631
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Edit formatted JSON before re-sending to the provider" })
|
|
467
632
|
] }) })
|
|
468
633
|
] }),
|
|
469
634
|
error !== null && error !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-destructive bg-destructive/10 px-3 py-2 rounded-md", children: error }),
|
|
@@ -473,11 +638,28 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
473
638
|
onClick: () => {
|
|
474
639
|
void handleReplay();
|
|
475
640
|
},
|
|
476
|
-
disabled: loading,
|
|
641
|
+
disabled: loading || !jsonEditState.valid,
|
|
477
642
|
children: loading ? "Replaying..." : "Replay"
|
|
478
643
|
}
|
|
479
644
|
) }),
|
|
480
645
|
replayResult !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(ReplayComparisonTable, { comparisons: replayComparisons.slice(0, 4) }),
|
|
646
|
+
replayResult?.success === true && replayResult.replayLogId !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 rounded-md border border-emerald-500/25 bg-emerald-500/10 px-3 py-2 text-xs text-emerald-600", children: [
|
|
647
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
|
|
648
|
+
"Replay saved as test log #",
|
|
649
|
+
replayResult.replayLogId,
|
|
650
|
+
"."
|
|
651
|
+
] }),
|
|
652
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
653
|
+
Button,
|
|
654
|
+
{
|
|
655
|
+
type: "button",
|
|
656
|
+
variant: "outline",
|
|
657
|
+
size: "sm",
|
|
658
|
+
onClick: () => handleOpenReplayLog(replayResult.replayLogId ?? log.id),
|
|
659
|
+
children: "Open saved log"
|
|
660
|
+
}
|
|
661
|
+
)
|
|
662
|
+
] }),
|
|
481
663
|
replayResult && replayResult.success && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: "parsed", children: [
|
|
482
664
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
|
|
483
665
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "parsed", children: "Response" }),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { u as useProviders,
|
|
3
|
-
import "./router-
|
|
2
|
+
import { u as useProviders, q as analyzeContextIntelligence, f as formatTokens, l as TooltipProvider, c as cn, m as Tooltip, n as TooltipTrigger, o as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, s as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-Bmu9867L.mjs";
|
|
3
|
+
import "./router-SbCnbDc2.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
|
-
import {
|
|
6
|
+
import { ae as Info, b as ChevronDown, m as ChevronRight } from "../_libs/lucide-react.mjs";
|
|
7
7
|
import "../_libs/swr.mjs";
|
|
8
8
|
import "../_libs/use-sync-external-store.mjs";
|
|
9
9
|
import "../_libs/dequal.mjs";
|
|
@@ -128,6 +128,7 @@ import "node:stream";
|
|
|
128
128
|
import "../_libs/isbot.mjs";
|
|
129
129
|
import "node:fs";
|
|
130
130
|
import "node:fs/promises";
|
|
131
|
+
import "node:readline";
|
|
131
132
|
import "node:buffer";
|
|
132
133
|
import "node:child_process";
|
|
133
134
|
import "../_libs/conf.mjs";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { g as getLogFormatAdapter, f as formatTokens, c as cn,
|
|
3
|
-
import "./router-
|
|
2
|
+
import { g as getLogFormatAdapter, f as formatTokens, c as cn, t as getStatusCategory, B as Badge, v as Collapsible, w as CollapsibleTrigger, x as CollapsibleContent, y as ScrollArea, z as JsonViewer, E as safeJsonValue } from "./ProxyViewerContainer-Bmu9867L.mjs";
|
|
3
|
+
import "./router-SbCnbDc2.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
|
-
import { Z as Zap,
|
|
6
|
+
import { Z as Zap, o as TriangleAlert, af as CircleStop, B as Brain, b as ChevronDown, m as ChevronRight, T as Terminal } from "../_libs/lucide-react.mjs";
|
|
7
7
|
import { M as Markdown } from "../_libs/react-markdown.mjs";
|
|
8
8
|
import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
|
|
9
9
|
import "../_libs/swr.mjs";
|
|
@@ -76,6 +76,7 @@ import "node:stream";
|
|
|
76
76
|
import "../_libs/isbot.mjs";
|
|
77
77
|
import "node:fs";
|
|
78
78
|
import "node:fs/promises";
|
|
79
|
+
import "node:readline";
|
|
79
80
|
import "node:buffer";
|
|
80
81
|
import "node:path";
|
|
81
82
|
import "node:child_process";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import "./router-
|
|
2
|
+
import { l as TooltipProvider, m as Tooltip, n as TooltipTrigger, B as Badge, o as TooltipContent, z as JsonViewer } from "./ProxyViewerContainer-Bmu9867L.mjs";
|
|
3
|
+
import "./router-SbCnbDc2.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
|
-
import { b as ChevronDown,
|
|
6
|
+
import { b as ChevronDown, m as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
|
|
7
7
|
import "../_libs/swr.mjs";
|
|
8
8
|
import "../_libs/use-sync-external-store.mjs";
|
|
9
9
|
import "../_libs/dequal.mjs";
|
|
@@ -128,6 +128,7 @@ import "node:stream";
|
|
|
128
128
|
import "../_libs/isbot.mjs";
|
|
129
129
|
import "node:fs";
|
|
130
130
|
import "node:fs/promises";
|
|
131
|
+
import "node:readline";
|
|
131
132
|
import "node:buffer";
|
|
132
133
|
import "node:child_process";
|
|
133
134
|
import "../_libs/conf.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-
|
|
1
|
+
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-Bmu9867L.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
3
|
+
import "./router-SbCnbDc2.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import "../_libs/swr.mjs";
|
|
@@ -128,6 +128,7 @@ import "node:stream";
|
|
|
128
128
|
import "../_libs/isbot.mjs";
|
|
129
129
|
import "node:fs";
|
|
130
130
|
import "node:fs/promises";
|
|
131
|
+
import "node:readline";
|
|
131
132
|
import "node:buffer";
|
|
132
133
|
import "node:child_process";
|
|
133
134
|
import "../_libs/conf.mjs";
|
|
@@ -198,7 +198,7 @@ function getResponse() {
|
|
|
198
198
|
return event.res;
|
|
199
199
|
}
|
|
200
200
|
async function getStartManifest(matchedRoutes) {
|
|
201
|
-
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-
|
|
201
|
+
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-yx8ftqWz.mjs");
|
|
202
202
|
const startManifest = tsrStartManifest();
|
|
203
203
|
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
204
204
|
rootRoute.assets = rootRoute.assets || [];
|
|
@@ -767,7 +767,7 @@ let entriesPromise;
|
|
|
767
767
|
let baseManifestPromise;
|
|
768
768
|
let cachedFinalManifestPromise;
|
|
769
769
|
async function loadEntries() {
|
|
770
|
-
const routerEntry = await import("./router-
|
|
770
|
+
const routerEntry = await import("./router-SbCnbDc2.mjs").then((n) => n.o);
|
|
771
771
|
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
772
772
|
return { startEntry, routerEntry };
|
|
773
773
|
}
|