@tonyclaw/agent-inspector 2.1.19 → 2.1.21
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-CHXN5HYU.js → CompareDrawer-Pii_cIqn.js} +1 -1
- package/.output/public/assets/{ProxyViewerContainer-TZJV7HhE.js → ProxyViewerContainer-BxselkhN.js} +28 -28
- package/.output/public/assets/{ReplayDialog-DQ7nS5Rr.js → ReplayDialog-BqnYC8ze.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-DXWweH_2.js → RequestAnatomy-I8iBshz1.js} +1 -1
- package/.output/public/assets/{ResponseView-3PimPfiD.js → ResponseView-wZzskUas.js} +2 -2
- package/.output/public/assets/{StreamingChunkSequence-4v52v-7a.js → StreamingChunkSequence-BrSx21IQ.js} +1 -1
- package/.output/public/assets/_sessionId-ByxbBMbE.js +1 -0
- package/.output/public/assets/index-BjzVMXJq.css +1 -0
- package/.output/public/assets/index-DRCRDo_E.js +1 -0
- package/.output/public/assets/{index-BuhFRImh.js → index-Dw-jXKKY.js} +1 -1
- package/.output/public/assets/{json-viewer-d2gWBDLO.js → json-viewer-D5mzV0oV.js} +1 -1
- package/.output/public/assets/{main-Do-E-46G.js → main-B7OIQMeA.js} +2 -2
- package/.output/server/{_sessionId-B82aMW2A.mjs → _sessionId-DeU_JdSX.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-Bud_yIrM.mjs → CompareDrawer-DgDbG4oF.mjs} +2 -2
- package/.output/server/_ssr/{ProxyViewerContainer-DqgVb0So.mjs → ProxyViewerContainer-BOszhOJD.mjs} +190 -100
- package/.output/server/_ssr/{ReplayDialog-DKbV5fnW.mjs → ReplayDialog-Cj4gWQv5.mjs} +3 -3
- package/.output/server/_ssr/{RequestAnatomy-MStxp1Wp.mjs → RequestAnatomy-CVzNAA03.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-HLTCpJcF.mjs → ResponseView-DLNpai6P.mjs} +2 -2
- package/.output/server/_ssr/{StreamingChunkSequence-DEiyiUs_.mjs → StreamingChunkSequence-BiH8EEQB.mjs} +2 -2
- package/.output/server/_ssr/{index-DamOPFDI.mjs → index-DaWXoUgf.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-MmTWKxqh.mjs → json-viewer-CqqNYbmS.mjs} +2 -2
- package/.output/server/_ssr/{router-50BIB6ED.mjs → router-Di7D0Bcm.mjs} +80 -21
- package/.output/server/{_tanstack-start-manifest_v-TSwb1vFc.mjs → _tanstack-start-manifest_v-BR0YvW29.mjs} +1 -1
- package/.output/server/index.mjs +71 -71
- package/package.json +1 -1
- package/src/components/groups/GroupsDialog.tsx +71 -10
- package/src/components/proxy-viewer/ConversationGroupList.tsx +36 -3
- package/src/components/proxy-viewer/ConversationHeader.tsx +17 -1
- package/src/lib/groupContract.ts +6 -0
- package/src/proxy/groupStore.ts +24 -0
- package/src/routes/api/groups.ts +41 -1
- package/src/services/groups.ts +8 -0
- package/.output/public/assets/_sessionId-DfkBPvCC.js +0 -1
- package/.output/public/assets/index-ChgjUix0.css +0 -1
- package/.output/public/assets/index-Uf87L52J.js +0 -1
package/.output/server/_ssr/{ProxyViewerContainer-DqgVb0So.mjs → ProxyViewerContainer-BOszhOJD.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
|
|
2
|
-
import { I as InspectorGroupsListResponseSchema, 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, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, i as apiFormatForPath, n as
|
|
2
|
+
import { I as InspectorGroupsListResponseSchema, 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, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, i as apiFormatForPath, n as DeleteInspectorGroupsResponseSchema, o as GroupEvidenceExportResultSchema, q as DeleteInspectorGroupResponseSchema, z as createPendingProviderTestResults, B as ProviderTestResultsSchema, E as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, F as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, l as AlertSummarySchema, m as AlertListResponseSchema, G as GroupEvidenceReadResponseSchema, u as maskApiKey, v as PATH_V1_MESSAGES, w as PATH_V1_CHAT_COMPLETIONS, x as PATH_V1_RESPONSES, r as providerHasContextMetadata, t as findProviderModelMetadata, f as parseOpenAIResponse, g as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, h as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, H as resolveProviderContextWindow, j as getSessionPath, y as previewUpstreamUrl, K as KnowledgeCandidateSchema, J as isPlainRecord, k as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema } from "./router-Di7D0Bcm.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";
|
|
@@ -1556,7 +1556,7 @@ function ConversationHeader({
|
|
|
1556
1556
|
"data-nav-id": `conv-${conversationId}`,
|
|
1557
1557
|
"data-nav-action": expanded ? "collapse" : "expand",
|
|
1558
1558
|
className: cn(
|
|
1559
|
-
"bg-card/80 shadow-sm flex cursor-pointer items-start gap-3 rounded-[8px] px-3 py-2.5 transition-colors",
|
|
1559
|
+
"bg-card/80 shadow-sm relative flex cursor-pointer items-start gap-3 overflow-hidden rounded-[8px] px-3 py-2.5 transition-colors",
|
|
1560
1560
|
"hover:bg-card",
|
|
1561
1561
|
"select-none",
|
|
1562
1562
|
"sticky top-0 z-10 mb-2",
|
|
@@ -1635,7 +1635,11 @@ function ConversationHeader({
|
|
|
1635
1635
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate font-mono tabular-nums", children: clientDisplayLabel })
|
|
1636
1636
|
]
|
|
1637
1637
|
}
|
|
1638
|
-
)
|
|
1638
|
+
),
|
|
1639
|
+
isLoading && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex h-6 shrink-0 items-center gap-1.5 rounded-md bg-cyan-300/[0.08] px-1.5 font-mono text-[10px] uppercase tracking-[0.14em] text-cyan-100/85", children: [
|
|
1640
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3 animate-spin" }),
|
|
1641
|
+
"Working"
|
|
1642
|
+
] })
|
|
1639
1643
|
] }),
|
|
1640
1644
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "mt-1.5 flex min-w-0 flex-wrap items-center gap-1.5", children: [
|
|
1641
1645
|
/* @__PURE__ */ jsxRuntimeExports.jsx(HeaderMetric, { icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3 shrink-0" }), title: timeLabel, children: timeLabel }),
|
|
@@ -1684,6 +1688,14 @@ function ConversationHeader({
|
|
|
1684
1688
|
}
|
|
1685
1689
|
)
|
|
1686
1690
|
] }),
|
|
1691
|
+
isLoading && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1692
|
+
"span",
|
|
1693
|
+
{
|
|
1694
|
+
className: "pointer-events-none absolute inset-x-3 bottom-0 h-px overflow-hidden rounded-full bg-white/[0.06]",
|
|
1695
|
+
"aria-hidden": "true",
|
|
1696
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute inset-y-0 left-0 w-1/3 animate-pulse rounded-full bg-cyan-200/55 shadow-[0_0_14px_rgba(103,232,249,0.35)]" })
|
|
1697
|
+
}
|
|
1698
|
+
),
|
|
1687
1699
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1688
1700
|
ConfirmDialog,
|
|
1689
1701
|
{
|
|
@@ -1959,27 +1971,27 @@ function useCopyFeedback(text) {
|
|
|
1959
1971
|
return { copied, copy };
|
|
1960
1972
|
}
|
|
1961
1973
|
const LazyCompareDrawer = reactExports.lazy(
|
|
1962
|
-
() => import("./CompareDrawer-
|
|
1974
|
+
() => import("./CompareDrawer-DgDbG4oF.mjs").then((m) => ({ default: m.CompareDrawer }))
|
|
1963
1975
|
);
|
|
1964
1976
|
const LazyReplayDialog = reactExports.lazy(
|
|
1965
|
-
() => import("./ReplayDialog-
|
|
1977
|
+
() => import("./ReplayDialog-Cj4gWQv5.mjs").then((m) => ({ default: m.ReplayDialog }))
|
|
1966
1978
|
);
|
|
1967
1979
|
const LazyRequestAnatomy = reactExports.lazy(
|
|
1968
|
-
() => import("./RequestAnatomy-
|
|
1980
|
+
() => import("./RequestAnatomy-CVzNAA03.mjs").then((m) => ({ default: m.RequestAnatomy }))
|
|
1969
1981
|
);
|
|
1970
1982
|
const LazyResponseView = reactExports.lazy(
|
|
1971
|
-
() => import("./ResponseView-
|
|
1983
|
+
() => import("./ResponseView-DLNpai6P.mjs").then((m) => ({ default: m.ResponseView }))
|
|
1972
1984
|
);
|
|
1973
1985
|
const LazyStreamingChunkSequence = reactExports.lazy(
|
|
1974
|
-
() => import("./StreamingChunkSequence-
|
|
1986
|
+
() => import("./StreamingChunkSequence-BiH8EEQB.mjs").then((m) => ({
|
|
1975
1987
|
default: m.StreamingChunkSequence
|
|
1976
1988
|
}))
|
|
1977
1989
|
);
|
|
1978
1990
|
const LazyJsonViewer = reactExports.lazy(
|
|
1979
|
-
() => import("./json-viewer-
|
|
1991
|
+
() => import("./json-viewer-CqqNYbmS.mjs").then((m) => ({ default: m.JsonViewer }))
|
|
1980
1992
|
);
|
|
1981
1993
|
const LazyJsonViewerFromString = reactExports.lazy(
|
|
1982
|
-
() => import("./json-viewer-
|
|
1994
|
+
() => import("./json-viewer-CqqNYbmS.mjs").then((m) => ({ default: m.JsonViewerFromString }))
|
|
1983
1995
|
);
|
|
1984
1996
|
const HIGHLIGHT_DURATION_MS = 1200;
|
|
1985
1997
|
const MAX_HIGHLIGHT_ATTEMPTS = 12;
|
|
@@ -6855,10 +6867,86 @@ function useGroups() {
|
|
|
6855
6867
|
mutate: response.mutate
|
|
6856
6868
|
};
|
|
6857
6869
|
}
|
|
6870
|
+
const TRANSIENT_TOAST_AUTO_DISMISS_MS = 3e3;
|
|
6871
|
+
function createNextTransientToast(previous, input) {
|
|
6872
|
+
return {
|
|
6873
|
+
id: (previous?.id ?? 0) + 1,
|
|
6874
|
+
message: input.message,
|
|
6875
|
+
tone: input.tone ?? "error"
|
|
6876
|
+
};
|
|
6877
|
+
}
|
|
6878
|
+
function useTransientToast() {
|
|
6879
|
+
const [notice, setNotice] = reactExports.useState(null);
|
|
6880
|
+
const showToast = reactExports.useCallback((input) => {
|
|
6881
|
+
setNotice((previous) => createNextTransientToast(previous, input));
|
|
6882
|
+
}, []);
|
|
6883
|
+
const dismissToast = reactExports.useCallback(() => {
|
|
6884
|
+
setNotice(null);
|
|
6885
|
+
}, []);
|
|
6886
|
+
reactExports.useEffect(() => {
|
|
6887
|
+
if (notice === null) return void 0;
|
|
6888
|
+
const timeout = window.setTimeout(() => {
|
|
6889
|
+
setNotice(null);
|
|
6890
|
+
}, TRANSIENT_TOAST_AUTO_DISMISS_MS);
|
|
6891
|
+
return () => {
|
|
6892
|
+
window.clearTimeout(timeout);
|
|
6893
|
+
};
|
|
6894
|
+
}, [notice]);
|
|
6895
|
+
return { notice, showToast, dismissToast };
|
|
6896
|
+
}
|
|
6897
|
+
function TransientToast({
|
|
6898
|
+
notice,
|
|
6899
|
+
onDismiss
|
|
6900
|
+
}) {
|
|
6901
|
+
if (notice === null) return null;
|
|
6902
|
+
const isError = notice.tone === "error";
|
|
6903
|
+
const Icon2 = isError ? TriangleAlert : CircleCheck;
|
|
6904
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
6905
|
+
"div",
|
|
6906
|
+
{
|
|
6907
|
+
"aria-atomic": "true",
|
|
6908
|
+
"aria-live": "polite",
|
|
6909
|
+
className: "pointer-events-none fixed top-4 right-4 z-[100] w-[min(calc(100vw-2rem),26rem)]",
|
|
6910
|
+
role: "status",
|
|
6911
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
6912
|
+
"div",
|
|
6913
|
+
{
|
|
6914
|
+
className: cn(
|
|
6915
|
+
"pointer-events-auto flex items-start gap-2 rounded-md border px-3 py-2 text-sm shadow-[0_18px_50px_rgba(0,0,0,0.45)] backdrop-blur",
|
|
6916
|
+
isError ? "border-red-400/30 bg-[#16090b]/95 text-red-100" : "border-cyan-300/25 bg-[#071318]/95 text-cyan-100"
|
|
6917
|
+
),
|
|
6918
|
+
children: [
|
|
6919
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
6920
|
+
Icon2,
|
|
6921
|
+
{
|
|
6922
|
+
className: cn("mt-0.5 size-4 shrink-0", isError ? "text-red-300" : "text-cyan-200")
|
|
6923
|
+
}
|
|
6924
|
+
),
|
|
6925
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 flex-1 break-words leading-5", children: notice.message }),
|
|
6926
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
6927
|
+
"button",
|
|
6928
|
+
{
|
|
6929
|
+
type: "button",
|
|
6930
|
+
className: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-current/70 transition-colors hover:bg-white/10 hover:text-current",
|
|
6931
|
+
"aria-label": "Dismiss notification",
|
|
6932
|
+
onClick: onDismiss,
|
|
6933
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "size-3.5" })
|
|
6934
|
+
}
|
|
6935
|
+
)
|
|
6936
|
+
]
|
|
6937
|
+
},
|
|
6938
|
+
notice.id
|
|
6939
|
+
)
|
|
6940
|
+
}
|
|
6941
|
+
);
|
|
6942
|
+
}
|
|
6858
6943
|
function groupDeletePath(groupId, deleteEvidence) {
|
|
6859
6944
|
const path = `/api/groups/${encodeURIComponent(groupId)}`;
|
|
6860
6945
|
return deleteEvidence ? `${path}?deleteEvidence=1` : path;
|
|
6861
6946
|
}
|
|
6947
|
+
function groupsClearPath(deleteEvidence) {
|
|
6948
|
+
return "/api/groups";
|
|
6949
|
+
}
|
|
6862
6950
|
function summarizeGroup(group) {
|
|
6863
6951
|
let completedMembers = 0;
|
|
6864
6952
|
let failedMembers = 0;
|
|
@@ -7041,6 +7129,8 @@ function GroupsDialog() {
|
|
|
7041
7129
|
const [deleteEvidence, setDeleteEvidence] = reactExports.useState(false);
|
|
7042
7130
|
const [deletingGroupId, setDeletingGroupId] = reactExports.useState(null);
|
|
7043
7131
|
const [deleteError, setDeleteError] = reactExports.useState(null);
|
|
7132
|
+
const [clearingGroups, setClearingGroups] = reactExports.useState(false);
|
|
7133
|
+
const { notice, showToast, dismissToast } = useTransientToast();
|
|
7044
7134
|
const { groups, isLoading, error, mutate } = useGroups();
|
|
7045
7135
|
const selectedGroup = reactExports.useMemo(
|
|
7046
7136
|
() => selectedGroupFrom(groups, selectedGroupId),
|
|
@@ -7062,6 +7152,43 @@ function GroupsDialog() {
|
|
|
7062
7152
|
const handleRefresh = reactExports.useCallback(() => {
|
|
7063
7153
|
void mutate();
|
|
7064
7154
|
}, [mutate]);
|
|
7155
|
+
const handleClearGroups = reactExports.useCallback(async () => {
|
|
7156
|
+
if (groups.length === 0 || clearingGroups) return;
|
|
7157
|
+
setClearingGroups(true);
|
|
7158
|
+
setDeleteTarget(null);
|
|
7159
|
+
setDeleteEvidence(false);
|
|
7160
|
+
setDeleteError(null);
|
|
7161
|
+
setExportError(null);
|
|
7162
|
+
try {
|
|
7163
|
+
const response = await fetch(groupsClearPath(false), { method: "DELETE" });
|
|
7164
|
+
if (!response.ok) {
|
|
7165
|
+
showToast({
|
|
7166
|
+
message: await readApiError(
|
|
7167
|
+
response,
|
|
7168
|
+
`Clear failed with status ${String(response.status)}`
|
|
7169
|
+
),
|
|
7170
|
+
tone: "error"
|
|
7171
|
+
});
|
|
7172
|
+
return;
|
|
7173
|
+
}
|
|
7174
|
+
const parsed = await parseJsonResponse$1(response, DeleteInspectorGroupsResponseSchema);
|
|
7175
|
+
setExportResult(null);
|
|
7176
|
+
setSelectedGroupId(null);
|
|
7177
|
+
await mutate();
|
|
7178
|
+
await mutateEvidence();
|
|
7179
|
+
showToast({
|
|
7180
|
+
message: `Cleared ${formatNumber(parsed.deleted)} group${parsed.deleted === 1 ? "" : "s"}.`,
|
|
7181
|
+
tone: "success"
|
|
7182
|
+
});
|
|
7183
|
+
} catch (err) {
|
|
7184
|
+
showToast({
|
|
7185
|
+
message: err instanceof Error ? err.message : "Unknown error clearing groups",
|
|
7186
|
+
tone: "error"
|
|
7187
|
+
});
|
|
7188
|
+
} finally {
|
|
7189
|
+
setClearingGroups(false);
|
|
7190
|
+
}
|
|
7191
|
+
}, [clearingGroups, groups.length, mutate, mutateEvidence, showToast]);
|
|
7065
7192
|
const handleExport = reactExports.useCallback(
|
|
7066
7193
|
async (group) => {
|
|
7067
7194
|
setExportingGroupId(group.id);
|
|
@@ -7138,6 +7265,7 @@ function GroupsDialog() {
|
|
|
7138
7265
|
}
|
|
7139
7266
|
}, [deleteEvidence, deleteTarget, mutate, mutateEvidence]);
|
|
7140
7267
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Dialog, { open, onOpenChange: setOpen, children: [
|
|
7268
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(TransientToast, { notice, onDismiss: dismissToast }),
|
|
7141
7269
|
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
7142
7270
|
Button,
|
|
7143
7271
|
{
|
|
@@ -7162,20 +7290,27 @@ function GroupsDialog() {
|
|
|
7162
7290
|
] }) }),
|
|
7163
7291
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-0 items-center justify-between gap-3 border-b border-border pb-3", children: [
|
|
7164
7292
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Evaluation batches, model runs, and exported evidence packs." }),
|
|
7165
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
7166
|
-
|
|
7167
|
-
|
|
7168
|
-
|
|
7169
|
-
|
|
7170
|
-
|
|
7171
|
-
|
|
7172
|
-
|
|
7173
|
-
|
|
7174
|
-
|
|
7175
|
-
|
|
7176
|
-
|
|
7177
|
-
|
|
7178
|
-
|
|
7293
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
7294
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
7295
|
+
Button,
|
|
7296
|
+
{
|
|
7297
|
+
type: "button",
|
|
7298
|
+
variant: "outline",
|
|
7299
|
+
size: "sm",
|
|
7300
|
+
disabled: groups.length === 0 || clearingGroups,
|
|
7301
|
+
onClick: () => void handleClearGroups(),
|
|
7302
|
+
title: "Clear all groups. Session logs and run records stay intact.",
|
|
7303
|
+
children: [
|
|
7304
|
+
clearingGroups ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-3.5" }),
|
|
7305
|
+
"Clear"
|
|
7306
|
+
]
|
|
7307
|
+
}
|
|
7308
|
+
),
|
|
7309
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: handleRefresh, children: [
|
|
7310
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3.5" }),
|
|
7311
|
+
"Refresh"
|
|
7312
|
+
] })
|
|
7313
|
+
] })
|
|
7179
7314
|
] }),
|
|
7180
7315
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid min-h-0 flex-1 gap-4 md:grid-cols-[260px_minmax(0,1fr)]", children: [
|
|
7181
7316
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -10853,6 +10988,9 @@ function compareField(previous, current) {
|
|
|
10853
10988
|
if (current < previous) return { direction: "down", delta: previous - current };
|
|
10854
10989
|
return null;
|
|
10855
10990
|
}
|
|
10991
|
+
function hasPendingLogs(logs) {
|
|
10992
|
+
return logs.some((log) => log.responseStatus === null);
|
|
10993
|
+
}
|
|
10856
10994
|
function firstUserAgent(logs) {
|
|
10857
10995
|
for (const log of logs) {
|
|
10858
10996
|
const userAgent = log.userAgent;
|
|
@@ -11022,6 +11160,22 @@ function SummaryChip({
|
|
|
11022
11160
|
}
|
|
11023
11161
|
);
|
|
11024
11162
|
}
|
|
11163
|
+
function WorkingBadge({ label = "Working" }) {
|
|
11164
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex h-6 shrink-0 items-center gap-1.5 rounded-md bg-cyan-300/[0.08] px-1.5 font-mono text-[10px] uppercase tracking-[0.14em] text-cyan-100/85", children: [
|
|
11165
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3 animate-spin" }),
|
|
11166
|
+
label
|
|
11167
|
+
] });
|
|
11168
|
+
}
|
|
11169
|
+
function LoadingSweep() {
|
|
11170
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
11171
|
+
"span",
|
|
11172
|
+
{
|
|
11173
|
+
className: "pointer-events-none absolute inset-x-3 bottom-0 h-px overflow-hidden rounded-full bg-white/[0.06]",
|
|
11174
|
+
"aria-hidden": "true",
|
|
11175
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute inset-y-0 left-0 w-1/3 animate-pulse rounded-full bg-cyan-200/55 shadow-[0_0_14px_rgba(103,232,249,0.35)]" })
|
|
11176
|
+
}
|
|
11177
|
+
);
|
|
11178
|
+
}
|
|
11025
11179
|
function ConversationGroupList({
|
|
11026
11180
|
groups,
|
|
11027
11181
|
...groupProps
|
|
@@ -11077,10 +11231,14 @@ function IdeGroupSection({
|
|
|
11077
11231
|
const totals = tokenTotals(group.logs);
|
|
11078
11232
|
const sessionCount = countSessions(group.processes);
|
|
11079
11233
|
const logCount = group.logs.length;
|
|
11234
|
+
const isWorking = hasPendingLogs(group.logs);
|
|
11080
11235
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
11081
11236
|
"section",
|
|
11082
11237
|
{
|
|
11083
|
-
className: cn(
|
|
11238
|
+
className: cn(
|
|
11239
|
+
"bg-card/75 shadow-sm relative isolate overflow-hidden rounded-[8px]",
|
|
11240
|
+
isWorking && "bg-card/85"
|
|
11241
|
+
),
|
|
11084
11242
|
"data-ide-group": group.id,
|
|
11085
11243
|
children: [
|
|
11086
11244
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -11102,7 +11260,8 @@ function IdeGroupSection({
|
|
|
11102
11260
|
children: group.label
|
|
11103
11261
|
}
|
|
11104
11262
|
),
|
|
11105
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "rounded bg-cyan-300/[0.06] px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-[0.16em] text-cyan-100/75", children: "IDE" })
|
|
11263
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "rounded bg-cyan-300/[0.06] px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-[0.16em] text-cyan-100/75", children: "IDE" }),
|
|
11264
|
+
isWorking && /* @__PURE__ */ jsxRuntimeExports.jsx(WorkingBadge, {})
|
|
11106
11265
|
] }),
|
|
11107
11266
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground", children: [
|
|
11108
11267
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
|
|
@@ -11130,6 +11289,7 @@ function IdeGroupSection({
|
|
|
11130
11289
|
]
|
|
11131
11290
|
}
|
|
11132
11291
|
),
|
|
11292
|
+
isWorking && /* @__PURE__ */ jsxRuntimeExports.jsx(LoadingSweep, {}),
|
|
11133
11293
|
!collapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3 px-3 pb-3 pt-2 sm:px-4", children: group.processes.map((processGroup) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
11134
11294
|
ProcessGroupSection,
|
|
11135
11295
|
{
|
|
@@ -11154,10 +11314,11 @@ function ProcessGroupSection({
|
|
|
11154
11314
|
const projectLabel = shortProjectPath(group.clientProjectFolder);
|
|
11155
11315
|
const sessionCount = group.sessions.length;
|
|
11156
11316
|
const logCount = group.logs.length;
|
|
11317
|
+
const isWorking = hasPendingLogs(group.logs);
|
|
11157
11318
|
const processLabel = group.clientPid !== null && group.clientPid !== void 0 ? `PID ${group.clientPid}` : "process";
|
|
11158
11319
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "relative pl-5", children: [
|
|
11159
11320
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute bottom-1 left-2 top-1 w-px bg-white/[0.055]", "aria-hidden": "true" }),
|
|
11160
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-black/[0.10] overflow-hidden rounded-[8px]", children: [
|
|
11321
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-black/[0.10] relative overflow-hidden rounded-[8px]", children: [
|
|
11161
11322
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
11162
11323
|
"button",
|
|
11163
11324
|
{
|
|
@@ -11170,6 +11331,7 @@ function ProcessGroupSection({
|
|
|
11170
11331
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
11171
11332
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
11172
11333
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-xs font-semibold tabular-nums text-slate-100", children: processLabel }),
|
|
11334
|
+
isWorking && /* @__PURE__ */ jsxRuntimeExports.jsx(WorkingBadge, { label: "Active" }),
|
|
11173
11335
|
projectLabel !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
11174
11336
|
"span",
|
|
11175
11337
|
{
|
|
@@ -11203,6 +11365,7 @@ function ProcessGroupSection({
|
|
|
11203
11365
|
]
|
|
11204
11366
|
}
|
|
11205
11367
|
),
|
|
11368
|
+
isWorking && /* @__PURE__ */ jsxRuntimeExports.jsx(LoadingSweep, {}),
|
|
11206
11369
|
!collapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-2 p-2 pt-1 sm:p-3 sm:pt-2", children: group.sessions.map((session) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
11207
11370
|
ConversationGroup,
|
|
11208
11371
|
{
|
|
@@ -13869,79 +14032,6 @@ function ProxyViewer({
|
|
|
13869
14032
|
) })
|
|
13870
14033
|
] });
|
|
13871
14034
|
}
|
|
13872
|
-
const TRANSIENT_TOAST_AUTO_DISMISS_MS = 3e3;
|
|
13873
|
-
function createNextTransientToast(previous, input) {
|
|
13874
|
-
return {
|
|
13875
|
-
id: (previous?.id ?? 0) + 1,
|
|
13876
|
-
message: input.message,
|
|
13877
|
-
tone: input.tone ?? "error"
|
|
13878
|
-
};
|
|
13879
|
-
}
|
|
13880
|
-
function useTransientToast() {
|
|
13881
|
-
const [notice, setNotice] = reactExports.useState(null);
|
|
13882
|
-
const showToast = reactExports.useCallback((input) => {
|
|
13883
|
-
setNotice((previous) => createNextTransientToast(previous, input));
|
|
13884
|
-
}, []);
|
|
13885
|
-
const dismissToast = reactExports.useCallback(() => {
|
|
13886
|
-
setNotice(null);
|
|
13887
|
-
}, []);
|
|
13888
|
-
reactExports.useEffect(() => {
|
|
13889
|
-
if (notice === null) return void 0;
|
|
13890
|
-
const timeout = window.setTimeout(() => {
|
|
13891
|
-
setNotice(null);
|
|
13892
|
-
}, TRANSIENT_TOAST_AUTO_DISMISS_MS);
|
|
13893
|
-
return () => {
|
|
13894
|
-
window.clearTimeout(timeout);
|
|
13895
|
-
};
|
|
13896
|
-
}, [notice]);
|
|
13897
|
-
return { notice, showToast, dismissToast };
|
|
13898
|
-
}
|
|
13899
|
-
function TransientToast({
|
|
13900
|
-
notice,
|
|
13901
|
-
onDismiss
|
|
13902
|
-
}) {
|
|
13903
|
-
if (notice === null) return null;
|
|
13904
|
-
const isError = notice.tone === "error";
|
|
13905
|
-
const Icon2 = isError ? TriangleAlert : CircleCheck;
|
|
13906
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
13907
|
-
"div",
|
|
13908
|
-
{
|
|
13909
|
-
"aria-atomic": "true",
|
|
13910
|
-
"aria-live": "polite",
|
|
13911
|
-
className: "pointer-events-none fixed top-4 right-4 z-[100] w-[min(calc(100vw-2rem),26rem)]",
|
|
13912
|
-
role: "status",
|
|
13913
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
13914
|
-
"div",
|
|
13915
|
-
{
|
|
13916
|
-
className: cn(
|
|
13917
|
-
"pointer-events-auto flex items-start gap-2 rounded-md border px-3 py-2 text-sm shadow-[0_18px_50px_rgba(0,0,0,0.45)] backdrop-blur",
|
|
13918
|
-
isError ? "border-red-400/30 bg-[#16090b]/95 text-red-100" : "border-cyan-300/25 bg-[#071318]/95 text-cyan-100"
|
|
13919
|
-
),
|
|
13920
|
-
children: [
|
|
13921
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
13922
|
-
Icon2,
|
|
13923
|
-
{
|
|
13924
|
-
className: cn("mt-0.5 size-4 shrink-0", isError ? "text-red-300" : "text-cyan-200")
|
|
13925
|
-
}
|
|
13926
|
-
),
|
|
13927
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 flex-1 break-words leading-5", children: notice.message }),
|
|
13928
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
13929
|
-
"button",
|
|
13930
|
-
{
|
|
13931
|
-
type: "button",
|
|
13932
|
-
className: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-current/70 transition-colors hover:bg-white/10 hover:text-current",
|
|
13933
|
-
"aria-label": "Dismiss notification",
|
|
13934
|
-
onClick: onDismiss,
|
|
13935
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "size-3.5" })
|
|
13936
|
-
}
|
|
13937
|
-
)
|
|
13938
|
-
]
|
|
13939
|
-
},
|
|
13940
|
-
notice.id
|
|
13941
|
-
)
|
|
13942
|
-
}
|
|
13943
|
-
);
|
|
13944
|
-
}
|
|
13945
14035
|
const SSEUpdateSchema = union([
|
|
13946
14036
|
object({
|
|
13947
14037
|
type: literal("init"),
|
|
@@ -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, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-
|
|
3
|
-
import { ResponseView } from "./ResponseView-
|
|
4
|
-
import { C as CapturedLogSchema } from "./router-
|
|
2
|
+
import { u as useProviders, D as Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-BOszhOJD.mjs";
|
|
3
|
+
import { ResponseView } from "./ResponseView-DLNpai6P.mjs";
|
|
4
|
+
import { C as CapturedLogSchema } from "./router-Di7D0Bcm.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
7
7
|
import { ae as RotateCcw, ar as Braces, as as Minimize2 } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-BOszhOJD.mjs";
|
|
3
|
+
import "./router-Di7D0Bcm.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { I as Info, a as ChevronDown, h as ChevronRight } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as LazyJsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-
|
|
3
|
-
import { s as safeGetOwnProperty } from "./router-
|
|
2
|
+
import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as LazyJsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-BOszhOJD.mjs";
|
|
3
|
+
import { s as safeGetOwnProperty } from "./router-Di7D0Bcm.mjs";
|
|
4
4
|
import "../_libs/jszip.mjs";
|
|
5
5
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
6
6
|
import { Z as Zap, T as TriangleAlert, at as CircleStop, N as Brain, a as ChevronDown, h as ChevronRight, q as Terminal } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-BOszhOJD.mjs";
|
|
3
|
+
import "./router-Di7D0Bcm.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { a as ChevronDown, h as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-
|
|
1
|
+
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BOszhOJD.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
3
|
+
import "./router-Di7D0Bcm.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-BR0YvW29.mjs");
|
|
202
202
|
const startManifest = tsrStartManifest();
|
|
203
203
|
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
204
204
|
rootRoute.assets = rootRoute.assets || [];
|
|
@@ -776,7 +776,7 @@ let entriesPromise;
|
|
|
776
776
|
let baseManifestPromise;
|
|
777
777
|
let cachedFinalManifestPromise;
|
|
778
778
|
async function loadEntries() {
|
|
779
|
-
const routerEntry = await import("./router-
|
|
779
|
+
const routerEntry = await import("./router-Di7D0Bcm.mjs").then((n) => n.N);
|
|
780
780
|
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
781
781
|
return { startEntry, routerEntry };
|
|
782
782
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { G as parseJsonText, c as cn, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { G as parseJsonText, c as cn, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-BOszhOJD.mjs";
|
|
3
|
+
import "./router-Di7D0Bcm.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, ab as ChevronsDown } from "../_libs/lucide-react.mjs";
|