@tonyclaw/agent-inspector 2.0.31 → 2.0.32
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/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-tIUf2EJm.js → CompareDrawer-Dgi0hhg5.js} +1 -1
- package/.output/public/assets/{ProxyViewerContainer-BxRaXhKR.js → ProxyViewerContainer-4dG0nLRp.js} +28 -28
- package/.output/public/assets/{ReplayDialog-D6v1xcuC.js → ReplayDialog-BL6BwDuI.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-D6PniTlx.js → RequestAnatomy-DZMmiIiD.js} +1 -1
- package/.output/public/assets/{ResponseView-Sx8PjuvU.js → ResponseView-DJLOiTYq.js} +1 -1
- package/.output/public/assets/{StreamingChunkSequence-D-Rbfnxh.js → StreamingChunkSequence--SxZ5cxc.js} +1 -1
- package/.output/public/assets/_sessionId-C4z6gu9i.js +1 -0
- package/.output/public/assets/index-Drpb2qR5.js +1 -0
- package/.output/public/assets/{index-Byk60-jA.css → index-fUUi8iQF.css} +1 -1
- package/.output/public/assets/{main-B1kdhY98.js → main-CbRIHhJ5.js} +2 -2
- package/.output/server/_libs/lucide-react.mjs +9 -9
- package/.output/server/{_sessionId-BceHFKf4.mjs → _sessionId-DNfumR8F.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-uSxK5Ei5.mjs → CompareDrawer-CzgjhnUa.mjs} +3 -3
- package/.output/server/_ssr/{ProxyViewerContainer-_npQ_f2i.mjs → ProxyViewerContainer-BqOcZ7en.mjs} +258 -87
- package/.output/server/_ssr/{ReplayDialog-BHAzSLCT.mjs → ReplayDialog-DmEknIL8.mjs} +3 -3
- package/.output/server/_ssr/{RequestAnatomy-DjlZLXBd.mjs → RequestAnatomy-DNoiMudY.mjs} +3 -3
- package/.output/server/_ssr/{ResponseView-BuDEJ3fl.mjs → ResponseView-C_cRrleT.mjs} +3 -3
- package/.output/server/_ssr/{StreamingChunkSequence-DFcu0bD8.mjs → StreamingChunkSequence-DHZ9Q_dL.mjs} +3 -3
- package/.output/server/_ssr/{index-Bw6Fw33c.mjs → index-coYS9XyS.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{router-D90tMCb3.mjs → router-DUb5lKw1.mjs} +138 -39
- package/.output/server/{_tanstack-start-manifest_v-BVM4AUlx.mjs → _tanstack-start-manifest_v-xcG1o8Vt.mjs} +1 -1
- package/.output/server/index.mjs +67 -67
- package/package.json +1 -1
- package/src/components/groups/GroupsDialog.tsx +291 -78
- package/src/lib/groupContract.ts +13 -0
- package/src/mcp/server.ts +16 -0
- package/src/mcp/toolHandlers.ts +22 -0
- package/src/proxy/groupStore.ts +52 -2
- package/src/routes/api/groups.$groupId.ts +38 -1
- package/.output/public/assets/_sessionId-BhNTuZ31.js +0 -1
- package/.output/public/assets/index-Kxptlkpg.js +0 -1
package/.output/server/_ssr/{ProxyViewerContainer-_npQ_f2i.mjs → ProxyViewerContainer-BqOcZ7en.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
|
|
2
|
-
import { C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT,
|
|
2
|
+
import { C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, v as packageJson, h as GroupEvidenceExportResultSchema, i as DeleteInspectorGroupResponseSchema, d as RuntimeConfigSchema, P as ProviderConfigSchema, r as requestFormatForPath, l as createPendingProviderTestResults, n as ProviderTestResultsSchema, o as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, q as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, m as maskApiKey, j as providerHasContextMetadata, k as findProviderModelMetadata, g as getSessionPath, p as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, t as resolveProviderContextWindow, K as KnowledgeCandidateSchema, f as stripClaudeCodeBillingHeader, u as isPlainRecord, G as GroupEvidenceReadResponseSchema$1, I as InspectorGroupsListResponseSchema } from "./router-DUb5lKw1.mjs";
|
|
3
3
|
import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
|
|
4
4
|
import { J as JSZip } from "../_libs/jszip.mjs";
|
|
5
5
|
import { c as clsx } from "../_libs/clsx.mjs";
|
|
@@ -9,7 +9,7 @@ import { R as Root, T as Trigger$2, C as Content, a as Close, b as Title, P as P
|
|
|
9
9
|
import { d as diffJson, a as diffLines } from "../_libs/diff.mjs";
|
|
10
10
|
import { u as useWindowVirtualizer, a as useVirtualizer } from "../_libs/tanstack__react-virtual.mjs";
|
|
11
11
|
import { R as Root2, T as Trigger, I as Icon, V as Value, P as Portal, C as Content2, a as Viewport, b as Item, c as ItemIndicator, d as ItemText, S as ScrollUpButton, e as ScrollDownButton } from "../_libs/radix-ui__react-select.mjs";
|
|
12
|
-
import { C as Check, X, P as Plus, D as Download, L as Layers, a as LoaderCircle, R as RefreshCw, S as Settings, A as ArrowLeft, b as Copy, c as ChevronDown, U as Upload, d as Scan, e as CircleAlert,
|
|
12
|
+
import { C as Check, X, P as Plus, D as Download, L as Layers, a as LoaderCircle, R as RefreshCw, S as Settings, A as ArrowLeft, b as Copy, c as ChevronDown, T as Trash2, U as Upload, d as Scan, e as CircleAlert, f as Terminal, g as ChevronUp, E as EyeOff, h as Eye, i as ExternalLink, j as RotateCw, k as Clock, l as ChevronRight, m as Pencil, n as ArrowUpRight, o as ArrowDownRight, p as User, M as MessageSquare, Z as Zap, W as Wrench, q as TriangleAlert, B as Brain, r as Minus, s as CircleCheckBig, t as CircleX, u as ShieldCheck, v as Save, F as FileSearch, w as CircleCheck, x as CloudUpload, O as OctagonAlert, y as Radio, G as Gauge, z as Globe, H as FileTerminal, I as ChevronsUp, J as ChevronsDown, K as FileDiff, N as History, Q as RotateCcw, V as Search, Y as GitCompareArrows, _ as CircleQuestionMark, $ as Server, a0 as Lock, a1 as Wifi, a2 as WifiOff, a3 as ArrowUp, a4 as ArrowDown, a5 as Ellipsis, a6 as CodeXml, a7 as Blocks, a8 as MousePointerClick, a9 as FileText, aa as Rows3, ab as Columns2 } from "../_libs/lucide-react.mjs";
|
|
13
13
|
import { M as Markdown } from "../_libs/react-markdown.mjs";
|
|
14
14
|
import { u as union, d as object, a as array, l as literal, b as string, n as number, c as boolean, _ as _enum } from "../_libs/zod.mjs";
|
|
15
15
|
import { P as Provider, R as Root3, T as Trigger$1, a as Portal$1, C as Content2$1, A as Arrow2 } from "../_libs/radix-ui__react-tooltip.mjs";
|
|
@@ -1572,19 +1572,19 @@ function useCopyFeedback(text) {
|
|
|
1572
1572
|
return { copied, copy };
|
|
1573
1573
|
}
|
|
1574
1574
|
const LazyCompareDrawer = reactExports.lazy(
|
|
1575
|
-
() => import("./CompareDrawer-
|
|
1575
|
+
() => import("./CompareDrawer-CzgjhnUa.mjs").then((m) => ({ default: m.CompareDrawer }))
|
|
1576
1576
|
);
|
|
1577
1577
|
const LazyReplayDialog = reactExports.lazy(
|
|
1578
|
-
() => import("./ReplayDialog-
|
|
1578
|
+
() => import("./ReplayDialog-DmEknIL8.mjs").then((m) => ({ default: m.ReplayDialog }))
|
|
1579
1579
|
);
|
|
1580
1580
|
const LazyRequestAnatomy = reactExports.lazy(
|
|
1581
|
-
() => import("./RequestAnatomy-
|
|
1581
|
+
() => import("./RequestAnatomy-DNoiMudY.mjs").then((m) => ({ default: m.RequestAnatomy }))
|
|
1582
1582
|
);
|
|
1583
1583
|
const LazyResponseView = reactExports.lazy(
|
|
1584
|
-
() => import("./ResponseView-
|
|
1584
|
+
() => import("./ResponseView-C_cRrleT.mjs").then((m) => ({ default: m.ResponseView }))
|
|
1585
1585
|
);
|
|
1586
1586
|
const LazyStreamingChunkSequence = reactExports.lazy(
|
|
1587
|
-
() => import("./StreamingChunkSequence-
|
|
1587
|
+
() => import("./StreamingChunkSequence-DHZ9Q_dL.mjs").then((m) => ({
|
|
1588
1588
|
default: m.StreamingChunkSequence
|
|
1589
1589
|
}))
|
|
1590
1590
|
);
|
|
@@ -5449,6 +5449,10 @@ function useGroups() {
|
|
|
5449
5449
|
mutate: response.mutate
|
|
5450
5450
|
};
|
|
5451
5451
|
}
|
|
5452
|
+
function groupDeletePath(groupId, deleteEvidence) {
|
|
5453
|
+
const path = `/api/groups/${encodeURIComponent(groupId)}`;
|
|
5454
|
+
return deleteEvidence ? `${path}?deleteEvidence=1` : path;
|
|
5455
|
+
}
|
|
5452
5456
|
function summarizeGroup(group) {
|
|
5453
5457
|
let completedMembers = 0;
|
|
5454
5458
|
let failedMembers = 0;
|
|
@@ -5594,6 +5598,10 @@ function GroupsDialog() {
|
|
|
5594
5598
|
const [exportingGroupId, setExportingGroupId] = reactExports.useState(null);
|
|
5595
5599
|
const [exportError, setExportError] = reactExports.useState(null);
|
|
5596
5600
|
const [exportResult, setExportResult] = reactExports.useState(null);
|
|
5601
|
+
const [deleteTarget, setDeleteTarget] = reactExports.useState(null);
|
|
5602
|
+
const [deleteEvidence, setDeleteEvidence] = reactExports.useState(false);
|
|
5603
|
+
const [deletingGroupId, setDeletingGroupId] = reactExports.useState(null);
|
|
5604
|
+
const [deleteError, setDeleteError] = reactExports.useState(null);
|
|
5597
5605
|
const { groups, isLoading, error, mutate } = useGroups();
|
|
5598
5606
|
const selectedGroup = reactExports.useMemo(
|
|
5599
5607
|
() => selectedGroupFrom(groups, selectedGroupId),
|
|
@@ -5643,72 +5651,134 @@ function GroupsDialog() {
|
|
|
5643
5651
|
},
|
|
5644
5652
|
[mutate, mutateEvidence]
|
|
5645
5653
|
);
|
|
5646
|
-
|
|
5647
|
-
|
|
5648
|
-
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
|
|
5657
|
-
|
|
5658
|
-
|
|
5659
|
-
|
|
5660
|
-
|
|
5654
|
+
const handleRequestDelete = reactExports.useCallback((group) => {
|
|
5655
|
+
setDeleteTarget(group);
|
|
5656
|
+
setDeleteEvidence(false);
|
|
5657
|
+
setDeleteError(null);
|
|
5658
|
+
}, []);
|
|
5659
|
+
const handleDeleteDialogOpenChange = reactExports.useCallback(
|
|
5660
|
+
(nextOpen) => {
|
|
5661
|
+
if (nextOpen || deletingGroupId !== null) return;
|
|
5662
|
+
setDeleteTarget(null);
|
|
5663
|
+
setDeleteEvidence(false);
|
|
5664
|
+
setDeleteError(null);
|
|
5665
|
+
},
|
|
5666
|
+
[deletingGroupId]
|
|
5667
|
+
);
|
|
5668
|
+
const handleDelete = reactExports.useCallback(async () => {
|
|
5669
|
+
const group = deleteTarget;
|
|
5670
|
+
if (group === null) return;
|
|
5671
|
+
setDeletingGroupId(group.id);
|
|
5672
|
+
setDeleteError(null);
|
|
5673
|
+
try {
|
|
5674
|
+
const response = await fetch(groupDeletePath(group.id, deleteEvidence), {
|
|
5675
|
+
method: "DELETE"
|
|
5676
|
+
});
|
|
5677
|
+
if (!response.ok) {
|
|
5678
|
+
setDeleteError(
|
|
5679
|
+
await readApiError(response, `Delete failed with status ${String(response.status)}`)
|
|
5680
|
+
);
|
|
5681
|
+
return;
|
|
5661
5682
|
}
|
|
5662
|
-
|
|
5663
|
-
|
|
5664
|
-
|
|
5665
|
-
|
|
5666
|
-
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
5676
|
-
|
|
5677
|
-
|
|
5678
|
-
|
|
5679
|
-
|
|
5680
|
-
|
|
5681
|
-
|
|
5682
|
-
|
|
5683
|
-
|
|
5684
|
-
|
|
5685
|
-
|
|
5686
|
-
|
|
5687
|
-
|
|
5688
|
-
|
|
5689
|
-
|
|
5690
|
-
groups,
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
5697
|
-
|
|
5698
|
-
|
|
5699
|
-
{
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5683
|
+
await parseJsonResponse$1(response, DeleteInspectorGroupResponseSchema);
|
|
5684
|
+
setExportResult(
|
|
5685
|
+
(current) => current !== null && current.group.id === group.id ? null : current
|
|
5686
|
+
);
|
|
5687
|
+
setSelectedGroupId((current) => current === group.id ? null : current);
|
|
5688
|
+
setDeleteTarget(null);
|
|
5689
|
+
setDeleteEvidence(false);
|
|
5690
|
+
await mutate();
|
|
5691
|
+
await mutateEvidence();
|
|
5692
|
+
} catch (err) {
|
|
5693
|
+
setDeleteError(err instanceof Error ? err.message : String(err));
|
|
5694
|
+
} finally {
|
|
5695
|
+
setDeletingGroupId(null);
|
|
5696
|
+
}
|
|
5697
|
+
}, [deleteEvidence, deleteTarget, mutate, mutateEvidence]);
|
|
5698
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
5699
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Dialog, { open, onOpenChange: setOpen, children: [
|
|
5700
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5701
|
+
Button,
|
|
5702
|
+
{
|
|
5703
|
+
type: "button",
|
|
5704
|
+
variant: "ghost",
|
|
5705
|
+
size: "icon",
|
|
5706
|
+
className: "relative size-8",
|
|
5707
|
+
"aria-label": "Evaluation groups",
|
|
5708
|
+
title: "Evaluation groups",
|
|
5709
|
+
children: [
|
|
5710
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Layers, { className: "size-4" }),
|
|
5711
|
+
isLoading ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "absolute -right-0.5 -top-0.5 size-3 animate-spin text-muted-foreground" }) : groups.length > 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute -right-1 -top-1 min-w-4 rounded-full bg-primary px-1 text-[10px] leading-4 text-primary-foreground", children: groups.length }) : null,
|
|
5712
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Evaluation groups" })
|
|
5713
|
+
]
|
|
5714
|
+
}
|
|
5715
|
+
) }),
|
|
5716
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "flex max-h-[85vh] max-w-5xl flex-col overflow-hidden", children: [
|
|
5717
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogTitle, { className: "flex items-center gap-2 pr-8", children: [
|
|
5718
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Layers, { className: "size-5 text-muted-foreground" }),
|
|
5719
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Groups" }),
|
|
5720
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", children: formatNumber(groups.length) })
|
|
5721
|
+
] }) }),
|
|
5722
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-0 items-center justify-between gap-3 border-b border-border pb-3", children: [
|
|
5723
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Evaluation batches, model runs, and exported evidence packs." }),
|
|
5724
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5725
|
+
Button,
|
|
5726
|
+
{
|
|
5727
|
+
type: "button",
|
|
5728
|
+
variant: "outline",
|
|
5729
|
+
size: "sm",
|
|
5730
|
+
className: "shrink-0",
|
|
5731
|
+
onClick: handleRefresh,
|
|
5732
|
+
children: [
|
|
5733
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3.5" }),
|
|
5734
|
+
"Refresh"
|
|
5735
|
+
]
|
|
5736
|
+
}
|
|
5737
|
+
)
|
|
5738
|
+
] }),
|
|
5739
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid min-h-0 flex-1 gap-4 md:grid-cols-[260px_minmax(0,1fr)]", children: [
|
|
5740
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
5741
|
+
GroupList,
|
|
5742
|
+
{
|
|
5743
|
+
groups,
|
|
5744
|
+
selectedGroupId: selectedGroup?.id ?? null,
|
|
5745
|
+
isLoading,
|
|
5746
|
+
error,
|
|
5747
|
+
onSelect: setSelectedGroupId
|
|
5748
|
+
}
|
|
5749
|
+
),
|
|
5750
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
5751
|
+
GroupDetails,
|
|
5752
|
+
{
|
|
5753
|
+
group: selectedGroup,
|
|
5754
|
+
exportResult: selectedExportResult,
|
|
5755
|
+
evidenceResponse,
|
|
5756
|
+
evidenceLoading,
|
|
5757
|
+
evidenceError,
|
|
5758
|
+
exportError,
|
|
5759
|
+
deleteError,
|
|
5760
|
+
exportingGroupId,
|
|
5761
|
+
deletingGroupId,
|
|
5762
|
+
onExport: handleExport,
|
|
5763
|
+
onRequestDelete: handleRequestDelete
|
|
5764
|
+
}
|
|
5765
|
+
)
|
|
5766
|
+
] })
|
|
5710
5767
|
] })
|
|
5711
|
-
] })
|
|
5768
|
+
] }),
|
|
5769
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
5770
|
+
DeleteGroupDialog,
|
|
5771
|
+
{
|
|
5772
|
+
group: deleteTarget,
|
|
5773
|
+
open: deleteTarget !== null,
|
|
5774
|
+
deleteEvidence,
|
|
5775
|
+
isDeleting: deleteTarget !== null && deletingGroupId === deleteTarget.id,
|
|
5776
|
+
error: deleteError,
|
|
5777
|
+
onDeleteEvidenceChange: setDeleteEvidence,
|
|
5778
|
+
onOpenChange: handleDeleteDialogOpenChange,
|
|
5779
|
+
onConfirm: () => void handleDelete()
|
|
5780
|
+
}
|
|
5781
|
+
)
|
|
5712
5782
|
] });
|
|
5713
5783
|
}
|
|
5714
5784
|
function GroupList({
|
|
@@ -5764,8 +5834,11 @@ function GroupDetails({
|
|
|
5764
5834
|
evidenceLoading,
|
|
5765
5835
|
evidenceError,
|
|
5766
5836
|
exportError,
|
|
5837
|
+
deleteError,
|
|
5767
5838
|
exportingGroupId,
|
|
5768
|
-
|
|
5839
|
+
deletingGroupId,
|
|
5840
|
+
onExport,
|
|
5841
|
+
onRequestDelete
|
|
5769
5842
|
}) {
|
|
5770
5843
|
if (group === null) {
|
|
5771
5844
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-h-48 items-center justify-center rounded-md border border-dashed border-border text-xs text-muted-foreground", children: "Select a group to inspect." });
|
|
@@ -5776,6 +5849,7 @@ function GroupDetails({
|
|
|
5776
5849
|
const evidence = evidenceFor(group, exportResult);
|
|
5777
5850
|
const rows = buildGroupMemberRows(group, exportResult);
|
|
5778
5851
|
const isExporting = exportingGroupId === group.id;
|
|
5852
|
+
const isDeleting = deletingGroupId === group.id;
|
|
5779
5853
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 overflow-y-auto pr-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
5780
5854
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
|
|
5781
5855
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 space-y-1", children: [
|
|
@@ -5792,21 +5866,37 @@ function GroupDetails({
|
|
|
5792
5866
|
] })
|
|
5793
5867
|
] })
|
|
5794
5868
|
] }),
|
|
5795
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
|
|
5803
|
-
|
|
5804
|
-
|
|
5805
|
-
|
|
5806
|
-
|
|
5807
|
-
|
|
5808
|
-
|
|
5809
|
-
|
|
5869
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
5870
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
5871
|
+
Button,
|
|
5872
|
+
{
|
|
5873
|
+
type: "button",
|
|
5874
|
+
variant: "outline",
|
|
5875
|
+
size: "icon",
|
|
5876
|
+
className: "size-8 text-red-600 hover:text-red-700",
|
|
5877
|
+
"aria-label": "Delete group",
|
|
5878
|
+
title: "Delete group",
|
|
5879
|
+
disabled: isDeleting,
|
|
5880
|
+
onClick: () => onRequestDelete(group),
|
|
5881
|
+
children: isDeleting ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-3.5" })
|
|
5882
|
+
}
|
|
5883
|
+
),
|
|
5884
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5885
|
+
Button,
|
|
5886
|
+
{
|
|
5887
|
+
type: "button",
|
|
5888
|
+
variant: "default",
|
|
5889
|
+
size: "sm",
|
|
5890
|
+
className: "shrink-0",
|
|
5891
|
+
disabled: isExporting || isDeleting,
|
|
5892
|
+
onClick: () => void onExport(group),
|
|
5893
|
+
children: [
|
|
5894
|
+
isExporting ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Download, { className: "size-3.5" }),
|
|
5895
|
+
"Export evidence"
|
|
5896
|
+
]
|
|
5897
|
+
}
|
|
5898
|
+
)
|
|
5899
|
+
] })
|
|
5810
5900
|
] }),
|
|
5811
5901
|
group.task !== null && group.task.trim().length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "rounded-md border border-border bg-muted/20 px-3 py-2 text-xs text-muted-foreground", children: group.task }),
|
|
5812
5902
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 sm:grid-cols-4", children: [
|
|
@@ -5832,9 +5922,90 @@ function GroupDetails({
|
|
|
5832
5922
|
),
|
|
5833
5923
|
/* @__PURE__ */ jsxRuntimeExports.jsx(EvidencePaths, { evidence }),
|
|
5834
5924
|
exportError !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: exportError }),
|
|
5925
|
+
deleteError !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: deleteError }),
|
|
5835
5926
|
/* @__PURE__ */ jsxRuntimeExports.jsx(MemberTable, { rows })
|
|
5836
5927
|
] }) });
|
|
5837
5928
|
}
|
|
5929
|
+
function DeleteGroupDialog({
|
|
5930
|
+
group,
|
|
5931
|
+
open,
|
|
5932
|
+
deleteEvidence,
|
|
5933
|
+
isDeleting,
|
|
5934
|
+
error,
|
|
5935
|
+
onDeleteEvidenceChange,
|
|
5936
|
+
onOpenChange,
|
|
5937
|
+
onConfirm
|
|
5938
|
+
}) {
|
|
5939
|
+
const title = group?.title ?? "this group";
|
|
5940
|
+
const hasEvidence = group?.evidence !== null && group?.evidence !== void 0;
|
|
5941
|
+
const evidencePath = group?.evidence?.markdownPath ?? "No evidence pack exported.";
|
|
5942
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-w-md", children: [
|
|
5943
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogTitle, { className: "flex items-center gap-2 pr-8", children: [
|
|
5944
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-5 text-red-600" }),
|
|
5945
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Delete group" })
|
|
5946
|
+
] }) }),
|
|
5947
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
|
|
5948
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
5949
|
+
"Delete ",
|
|
5950
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: title }),
|
|
5951
|
+
"? Session logs and run records stay intact."
|
|
5952
|
+
] }),
|
|
5953
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5954
|
+
"label",
|
|
5955
|
+
{
|
|
5956
|
+
className: cn(
|
|
5957
|
+
"flex items-start gap-3 rounded-md border border-border bg-muted/20 px-3 py-2 text-sm",
|
|
5958
|
+
hasEvidence ? "cursor-pointer" : "opacity-60"
|
|
5959
|
+
),
|
|
5960
|
+
children: [
|
|
5961
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
5962
|
+
"input",
|
|
5963
|
+
{
|
|
5964
|
+
type: "checkbox",
|
|
5965
|
+
className: "mt-0.5 size-4",
|
|
5966
|
+
checked: deleteEvidence,
|
|
5967
|
+
disabled: !hasEvidence || isDeleting,
|
|
5968
|
+
onChange: (event) => onDeleteEvidenceChange(event.currentTarget.checked)
|
|
5969
|
+
}
|
|
5970
|
+
),
|
|
5971
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "min-w-0", children: [
|
|
5972
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block font-medium", children: "Also delete exported evidence files" }),
|
|
5973
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "mt-1 block truncate font-mono text-[11px] text-muted-foreground", children: evidencePath })
|
|
5974
|
+
] })
|
|
5975
|
+
]
|
|
5976
|
+
}
|
|
5977
|
+
),
|
|
5978
|
+
error !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: error })
|
|
5979
|
+
] }),
|
|
5980
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-end gap-2 pt-1", children: [
|
|
5981
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
5982
|
+
Button,
|
|
5983
|
+
{
|
|
5984
|
+
type: "button",
|
|
5985
|
+
variant: "outline",
|
|
5986
|
+
size: "sm",
|
|
5987
|
+
disabled: isDeleting,
|
|
5988
|
+
onClick: () => onOpenChange(false),
|
|
5989
|
+
children: "Cancel"
|
|
5990
|
+
}
|
|
5991
|
+
),
|
|
5992
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
5993
|
+
Button,
|
|
5994
|
+
{
|
|
5995
|
+
type: "button",
|
|
5996
|
+
variant: "destructive",
|
|
5997
|
+
size: "sm",
|
|
5998
|
+
disabled: isDeleting || group === null,
|
|
5999
|
+
onClick: onConfirm,
|
|
6000
|
+
children: [
|
|
6001
|
+
isDeleting ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-3.5" }),
|
|
6002
|
+
"Delete"
|
|
6003
|
+
]
|
|
6004
|
+
}
|
|
6005
|
+
)
|
|
6006
|
+
] })
|
|
6007
|
+
] }) });
|
|
6008
|
+
}
|
|
5838
6009
|
function SummaryStat({ label, value }) {
|
|
5839
6010
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-border bg-muted/20 px-3 py-2", children: [
|
|
5840
6011
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[11px] font-medium uppercase text-muted-foreground", children: label }),
|
|
@@ -1,7 +1,7 @@
|
|
|
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 Button, l as TooltipProvider, m as Tooltip, n as TooltipTrigger, o as TooltipContent, p as dispatchLogFocusRequest } from "./ProxyViewerContainer-
|
|
3
|
-
import { ResponseView } from "./ResponseView-
|
|
4
|
-
import { C as CapturedLogSchema } from "./router-
|
|
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-BqOcZ7en.mjs";
|
|
3
|
+
import { ResponseView } from "./ResponseView-C_cRrleT.mjs";
|
|
4
|
+
import { C as CapturedLogSchema } from "./router-DUb5lKw1.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
7
7
|
import { Q as RotateCcw, ad as Braces, ae as Minimize2 } from "../_libs/lucide-react.mjs";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
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-
|
|
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-BqOcZ7en.mjs";
|
|
3
|
+
import "./router-DUb5lKw1.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
|
-
import { af as Info, c as ChevronDown,
|
|
6
|
+
import { af as Info, c as ChevronDown, l 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";
|
|
@@ -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, 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-
|
|
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-BqOcZ7en.mjs";
|
|
3
|
+
import "./router-DUb5lKw1.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
|
-
import { Z as Zap, q as TriangleAlert, ag as CircleStop, B as Brain, c as ChevronDown,
|
|
6
|
+
import { Z as Zap, q as TriangleAlert, ag as CircleStop, B as Brain, c as ChevronDown, l as ChevronRight, f 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";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { l as TooltipProvider, m as Tooltip, n as TooltipTrigger, B as Badge, o as TooltipContent, z as JsonViewer } from "./ProxyViewerContainer-
|
|
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-BqOcZ7en.mjs";
|
|
3
|
+
import "./router-DUb5lKw1.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
|
-
import { c as ChevronDown,
|
|
6
|
+
import { c as ChevronDown, l as ChevronRight, a 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";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-
|
|
1
|
+
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BqOcZ7en.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
3
|
+
import "./router-DUb5lKw1.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import "../_libs/swr.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-xcG1o8Vt.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-DUb5lKw1.mjs").then((n) => n.w);
|
|
771
771
|
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
772
772
|
return { startEntry, routerEntry };
|
|
773
773
|
}
|