umans-gate 0.1.2 → 0.1.4
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/CHANGELOG.md +154 -0
- package/README.md +165 -45
- package/npm-shim.cjs +71 -0
- package/package.json +16 -80
- package/dashboard/dist/assets/alert-dialog-DlhAyxD3.js +0 -2
- package/dashboard/dist/assets/alert-dialog-DlhAyxD3.js.map +0 -1
- package/dashboard/dist/assets/clear-confirm-dialog-BOcl93wD.js +0 -2
- package/dashboard/dist/assets/clear-confirm-dialog-BOcl93wD.js.map +0 -1
- package/dashboard/dist/assets/config-tab-pnBjiSyC.js +0 -4
- package/dashboard/dist/assets/config-tab-pnBjiSyC.js.map +0 -1
- package/dashboard/dist/assets/economics-tab-BJXa5ydD.js +0 -2
- package/dashboard/dist/assets/economics-tab-BJXa5ydD.js.map +0 -1
- package/dashboard/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dashboard/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dashboard/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dashboard/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dashboard/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dashboard/dist/assets/headers-viewer-C9FKdG-_.js +0 -2
- package/dashboard/dist/assets/headers-viewer-C9FKdG-_.js.map +0 -1
- package/dashboard/dist/assets/index-72wCsW4_.js +0 -3
- package/dashboard/dist/assets/index-72wCsW4_.js.map +0 -1
- package/dashboard/dist/assets/index-DFhG4t-C.css +0 -1
- package/dashboard/dist/assets/json-viewer-CXkZMoVn.js +0 -2
- package/dashboard/dist/assets/json-viewer-CXkZMoVn.js.map +0 -1
- package/dashboard/dist/assets/mode-toggle-BxkGFiYG.js +0 -2
- package/dashboard/dist/assets/mode-toggle-BxkGFiYG.js.map +0 -1
- package/dashboard/dist/assets/models-tab-Deqk3WT3.js +0 -2
- package/dashboard/dist/assets/models-tab-Deqk3WT3.js.map +0 -1
- package/dashboard/dist/assets/performance-meter-Bd152C4C.js +0 -2
- package/dashboard/dist/assets/performance-meter-Bd152C4C.js.map +0 -1
- package/dashboard/dist/assets/select-mZPf2BR3.js +0 -2
- package/dashboard/dist/assets/select-mZPf2BR3.js.map +0 -1
- package/dashboard/dist/assets/sheet-BgQXtbdw.js +0 -2
- package/dashboard/dist/assets/sheet-BgQXtbdw.js.map +0 -1
- package/dashboard/dist/assets/sonner-DGu1DGeO.js +0 -2
- package/dashboard/dist/assets/sonner-DGu1DGeO.js.map +0 -1
- package/dashboard/dist/assets/sse-viewer-BHnn3FcY.js +0 -3
- package/dashboard/dist/assets/sse-viewer-BHnn3FcY.js.map +0 -1
- package/dashboard/dist/assets/use-capture-done-listener-u5RxfYQP.js +0 -2
- package/dashboard/dist/assets/use-capture-done-listener-u5RxfYQP.js.map +0 -1
- package/dashboard/dist/assets/use-models-B4MLkfpt.js +0 -2
- package/dashboard/dist/assets/use-models-B4MLkfpt.js.map +0 -1
- package/dashboard/dist/assets/use-polling-resource-D_vWHFwW.js +0 -2
- package/dashboard/dist/assets/use-polling-resource-D_vWHFwW.js.map +0 -1
- package/dashboard/dist/assets/vendor-CVKsgXJU.js +0 -312
- package/dashboard/dist/assets/vendor-CVKsgXJU.js.map +0 -1
- package/dashboard/dist/assets/vendor-DtX4s2-2.css +0 -1
- package/dashboard/dist/assets/vendor-react-Dtud3GyP.js +0 -41
- package/dashboard/dist/assets/vendor-react-Dtud3GyP.js.map +0 -1
- package/dashboard/dist/assets/vision-calls-BquNiDzm.js +0 -3
- package/dashboard/dist/assets/vision-calls-BquNiDzm.js.map +0 -1
- package/dashboard/dist/index.html +0 -34
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -6788
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts +0 -1094
- package/dist/index.js +0 -6443
- package/dist/index.js.map +0 -1
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/clear-confirm-dialog-BOcl93wD.js","assets/vendor-react-Dtud3GyP.js","assets/alert-dialog-DlhAyxD3.js","assets/index-72wCsW4_.js","assets/vendor-CVKsgXJU.js","assets/vendor-DtX4s2-2.css","assets/index-DFhG4t-C.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{A as T,d as m,T as r,a as o,B as p,b as c,g as y,S as v,C,i as _,f as g,k as N,l as b,m as w,n as S,c as h,_ as A}from"./index-72wCsW4_.js";import{r as x,j as e}from"./vendor-react-Dtud3GyP.js";import{u as k}from"./use-polling-resource-D_vWHFwW.js";import{V as E,H as R,R as I,i as P}from"./vendor-CVKsgXJU.js";import"./use-capture-done-listener-u5RxfYQP.js";const V=5e3;function L(){const s=n=>n===void 0?[]:n,{data:d,loading:t,error:l,refresh:a}=k({endpoint:"/vision-calls",pollInterval:V,errorMessage:"Failed to fetch vision calls",parse:s});return{records:d,loading:t,error:l,refresh:a,clear:async()=>{try{await fetch(`${T}/vision-calls`,{method:"DELETE"}),a()}catch{}}}}const z=x.lazy(()=>A(()=>import("./clear-confirm-dialog-BOcl93wD.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(s=>({default:s.ClearConfirmDialog}))),f={enqueued:{variant:"secondary",className:g},streaming:{variant:"secondary",className:N},done:{variant:"outline"}},q={enqueued:"queued",streaming:"running",done:"done"},j={ok:{variant:"secondary",className:N},cache_hit:{variant:"secondary",className:g},empty:{variant:"destructive"},http_error:{variant:"destructive"},fetch_error:{variant:"destructive"},parse_error:{variant:"destructive"},timeout:{variant:"destructive"},skipped:{variant:"outline"}},B={ok:"Completed successfully",cache_hit:"Served from cache — no upstream call",empty:"No image content found",http_error:"Upstream returned an HTTP error",fetch_error:"Network failure — could not reach upstream",parse_error:"Response could not be parsed",timeout:"Request timed out",skipped:"Vision processing was skipped"};function $(){const{records:s,loading:d,error:t,refresh:l,clear:a}=L(),[i,n]=x.useState(!1);return e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("header",{className:"flex items-center justify-between border-b border-border bg-card px-4 py-3",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:["Vision Calls ",e.jsx(m,{variant:"secondary",children:s.length})]}),e.jsxs(r,{children:[e.jsx(o,{asChild:!0,children:e.jsxs(p,{variant:"ghost",size:"sm",onClick:()=>n(!0),disabled:s.length===0,children:[e.jsx(E,{className:"size-3.5 mr-1"}),"Clear"]})}),e.jsx(c,{side:"bottom",children:"Clear all vision call records"})]})]}),d&&s.length===0?e.jsx("div",{className:"flex flex-1 items-center justify-center",children:e.jsx(y,{className:"h-auto"})}):t?e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 p-8 text-center text-muted-foreground",children:[e.jsx(R,{className:"h-12 w-12 text-destructive"}),e.jsx("p",{className:"text-sm font-medium text-destructive",children:"Something went wrong"}),e.jsx("p",{className:"text-xs",children:t}),e.jsxs(r,{children:[e.jsx(o,{asChild:!0,children:e.jsxs(p,{variant:"outline",size:"sm",onClick:l,children:[e.jsx(I,{className:"mr-1.5 h-3.5 w-3.5"}),"Retry"]})}),e.jsx(c,{side:"top",children:"Retry loading vision calls"})]})]}):s.length===0?e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 p-8 text-center text-muted-foreground",children:[e.jsx(P,{className:"h-12 w-12 text-muted-foreground/40"}),e.jsx("p",{className:"text-sm font-medium",children:"No vision calls recorded"}),e.jsx("p",{className:"text-xs",children:"Vision calls appear here when the proxy intercepts image-bearing requests."})]}):e.jsx(v,{className:"min-h-0 flex-1",children:e.jsx("div",{className:"mx-auto flex w-full max-w-7xl flex-col gap-2 px-4 py-3",children:s.map(u=>e.jsx(D,{record:u},u.id))})}),i&&e.jsx(x.Suspense,{fallback:null,children:e.jsx(z,{open:i,count:s.length,title:"Clear all vision calls?",itemLabel:"vision call record",confirmTooltip:"Permanently delete all vision call records",onConfirm:()=>{n(!1),a()},onClose:()=>n(!1)})})]})}function D({record:s}){var t,l,a,i;const d=s.status==="ok"||s.status==="cache_hit";return e.jsx(C,{children:e.jsxs(_,{className:"p-3 flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(r,{children:[e.jsx(o,{render:e.jsx("span",{className:"inline-flex"}),children:e.jsx(m,{variant:((t=j[s.status])==null?void 0:t.variant)??"outline",className:(l=j[s.status])==null?void 0:l.className,children:s.status})}),e.jsxs(c,{side:"top",className:"max-w-[220px]",children:[s.status," — ",B[s.status]??"unknown status"]})]}),e.jsxs(r,{children:[e.jsx(o,{render:e.jsx("span",{className:"inline-flex"}),children:e.jsx(m,{variant:((a=f[s.state])==null?void 0:a.variant)??"outline",className:(i=f[s.state])==null?void 0:i.className,children:q[s.state]??s.state})}),e.jsxs(c,{side:"top",className:"max-w-[220px]",children:["Lifecycle state — ",s.state]})]}),e.jsxs("span",{className:"text-sm font-mono text-muted-foreground",children:["#",s.id]}),s.captureId!==null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:["capture #",s.captureId]})]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:b(s.timestamp)})]}),e.jsxs("div",{className:"flex items-center gap-3 text-sm flex-wrap",children:[e.jsx("span",{className:"font-mono",children:s.model}),e.jsx("span",{className:"text-muted-foreground",children:w(s.imageSize)}),e.jsx("span",{className:"text-muted-foreground",children:S(s.latencyMs)}),s.incoming_protocol&&e.jsxs(r,{children:[e.jsx(o,{render:e.jsx("span",{className:"inline-flex"}),children:e.jsx(m,{variant:"outline",size:"sm",children:s.incoming_protocol})}),e.jsx(c,{side:"top",children:"Incoming HTTP protocol"})]}),s.upstream_protocol&&e.jsxs(r,{children:[e.jsx(o,{render:e.jsx("span",{className:"inline-flex"}),children:e.jsx(m,{variant:"outline",size:"sm",children:s.upstream_protocol})}),e.jsx(c,{side:"top",children:"Upstream HTTP protocol"})]}),s.httpStatus!==null&&e.jsxs("span",{className:h("font-mono",s.httpStatus<400?"text-foreground":"text-destructive"),children:["HTTP ",s.httpStatus]})]}),s.error&&e.jsx("div",{role:"alert",className:"text-sm text-destructive bg-destructive/10 rounded px-2 py-1 font-mono break-all",children:s.error}),s.description&&e.jsx(v,{className:h("max-h-40 rounded",d?"bg-muted":"bg-muted/50"),children:e.jsx("div",{className:"text-sm px-2 py-1 break-words whitespace-pre-wrap",children:s.description})})]})})}export{$ as VisionCalls};
|
|
3
|
-
//# sourceMappingURL=vision-calls-BquNiDzm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["POLL_INTERVAL","useVisionCalls","parse","value","records","loading","error","refresh","usePollingResource","API_BASE","ClearConfirmDialog","lazy","m","STATE_VARIANT","badgeInfo","badgeSuccess","STATE_LABEL","STATUS_VARIANT","STATUS_TIP","VisionCalls","clear","confirmOpen","setConfirmOpen","useState","jsxs","jsx","Badge","Tooltip","TooltipTrigger","Button","Trash2","TooltipContent","Loader","AlertCircle","RotateCcw","Eye","ScrollArea","rec","VisionCallCard","Suspense","record","isOk","Card","CardContent","_a","_b","_c","_d","fmtDate","fmtSize","fmtTime","cn"],"ignoreList":[],"sources":["../../src/hooks/use-vision-calls.ts","../../src/components/vision-calls.tsx"],"sourcesContent":["import { usePollingResource } from \"@/hooks/use-polling-resource\";\nimport { API_BASE } from \"@/lib/constants\";\nimport type { VisionCallRecord } from \"@/types/vision\";\nconst POLL_INTERVAL = 5000;\n\nexport interface UseVisionCallsResult {\n records: VisionCallRecord[];\n loading: boolean;\n error: string | null;\n refresh: () => void;\n clear: () => void;\n}\n\nexport function useVisionCalls(): UseVisionCallsResult {\n const parse = (value: unknown): VisionCallRecord[] =>\n value === undefined ? [] : (value as VisionCallRecord[]);\n\n const {\n data: records,\n loading,\n error,\n refresh,\n } = usePollingResource<VisionCallRecord[]>({\n endpoint: \"/vision-calls\",\n pollInterval: POLL_INTERVAL,\n errorMessage: \"Failed to fetch vision calls\",\n parse,\n });\n\n const clear = async () => {\n try {\n await fetch(`${API_BASE}/vision-calls`, { method: \"DELETE\" });\n refresh();\n } catch (err) {\n // Ignore: the next poll will reconcile the server state anyway.\n }\n };\n\n return { records, loading, error, refresh, clear };\n}\n","import { AlertCircle, Eye, RotateCcw, Trash2 } from \"lucide-react\";\nimport { Suspense, lazy, useState } from \"react\";\n\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { Loader } from \"@/components/ui/loader\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useVisionCalls } from \"@/hooks/use-vision-calls\";\nimport { badgeInfo, badgeSuccess } from \"@/lib/badge-colors\";\nimport { fmtDate, fmtSize, fmtTime } from \"@/lib/format\";\nimport { cn } from \"@/lib/utils\";\nimport type { VisionCallRecord } from \"@/types/vision\";\n\nconst ClearConfirmDialog = lazy(() =>\n import(\"@/components/clear-confirm-dialog\").then((m) => ({\n default: m.ClearConfirmDialog,\n })),\n);\n\ntype BadgeConfig = {\n variant: \"default\" | \"secondary\" | \"destructive\" | \"outline\";\n className?: string;\n};\n\nconst STATE_VARIANT: Record<string, BadgeConfig> = {\n enqueued: { variant: \"secondary\", className: badgeInfo },\n streaming: { variant: \"secondary\", className: badgeSuccess },\n done: { variant: \"outline\" },\n};\n\nconst STATE_LABEL: Record<string, string> = {\n enqueued: \"queued\",\n streaming: \"running\",\n done: \"done\",\n};\n\nconst STATUS_VARIANT: Record<string, BadgeConfig> = {\n ok: { variant: \"secondary\", className: badgeSuccess },\n cache_hit: { variant: \"secondary\", className: badgeInfo },\n empty: { variant: \"destructive\" },\n http_error: { variant: \"destructive\" },\n fetch_error: { variant: \"destructive\" },\n parse_error: { variant: \"destructive\" },\n timeout: { variant: \"destructive\" },\n skipped: { variant: \"outline\" },\n};\n\nconst STATUS_TIP: Record<string, string> = {\n ok: \"Completed successfully\",\n cache_hit: \"Served from cache — no upstream call\",\n empty: \"No image content found\",\n http_error: \"Upstream returned an HTTP error\",\n fetch_error: \"Network failure — could not reach upstream\",\n parse_error: \"Response could not be parsed\",\n timeout: \"Request timed out\",\n skipped: \"Vision processing was skipped\",\n};\n\nexport function VisionCalls() {\n const { records, loading, error, refresh, clear } = useVisionCalls();\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n return (\n <div className=\"flex flex-col h-full\">\n <header className=\"flex items-center justify-between border-b border-border bg-card px-4 py-3\">\n <h2 className=\"text-sm font-semibold flex items-center gap-2\">\n Vision Calls <Badge variant=\"secondary\">{records.length}</Badge>\n </h2>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setConfirmOpen(true)}\n disabled={records.length === 0}\n >\n <Trash2 className=\"size-3.5 mr-1\" />\n Clear\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">Clear all vision call records</TooltipContent>\n </Tooltip>\n </header>\n\n {loading && records.length === 0 ? (\n <div className=\"flex flex-1 items-center justify-center\">\n <Loader className=\"h-auto\" />\n </div>\n ) : error ? (\n <div className=\"flex flex-1 flex-col items-center justify-center gap-3 p-8 text-center text-muted-foreground\">\n <AlertCircle className=\"h-12 w-12 text-destructive\" />\n <p className=\"text-sm font-medium text-destructive\">Something went wrong</p>\n <p className=\"text-xs\">{error}</p>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" onClick={refresh}>\n <RotateCcw className=\"mr-1.5 h-3.5 w-3.5\" />\n Retry\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">Retry loading vision calls</TooltipContent>\n </Tooltip>\n </div>\n ) : records.length === 0 ? (\n <div className=\"flex flex-1 flex-col items-center justify-center gap-3 p-8 text-center text-muted-foreground\">\n <Eye className=\"h-12 w-12 text-muted-foreground/40\" />\n <p className=\"text-sm font-medium\">No vision calls recorded</p>\n <p className=\"text-xs\">\n Vision calls appear here when the proxy intercepts image-bearing requests.\n </p>\n </div>\n ) : (\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"mx-auto flex w-full max-w-7xl flex-col gap-2 px-4 py-3\">\n {records.map((rec) => (\n <VisionCallCard key={rec.id} record={rec} />\n ))}\n </div>\n </ScrollArea>\n )}\n\n {confirmOpen && (\n <Suspense fallback={null}>\n <ClearConfirmDialog\n open={confirmOpen}\n count={records.length}\n title=\"Clear all vision calls?\"\n itemLabel=\"vision call record\"\n confirmTooltip=\"Permanently delete all vision call records\"\n onConfirm={() => {\n setConfirmOpen(false);\n void clear();\n }}\n onClose={() => setConfirmOpen(false)}\n />\n </Suspense>\n )}\n </div>\n );\n}\n\nfunction VisionCallCard({ record }: { record: VisionCallRecord }) {\n const isOk = record.status === \"ok\" || record.status === \"cache_hit\";\n\n return (\n <Card>\n <CardContent className=\"p-3 flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Tooltip>\n <TooltipTrigger render={<span className=\"inline-flex\" />}>\n <Badge\n variant={STATUS_VARIANT[record.status]?.variant ?? \"outline\"}\n className={STATUS_VARIANT[record.status]?.className}\n >\n {record.status}\n </Badge>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-[220px]\">\n {record.status} — {STATUS_TIP[record.status] ?? \"unknown status\"}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger render={<span className=\"inline-flex\" />}>\n <Badge\n variant={STATE_VARIANT[record.state]?.variant ?? \"outline\"}\n className={STATE_VARIANT[record.state]?.className}\n >\n {STATE_LABEL[record.state] ?? record.state}\n </Badge>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-[220px]\">\n Lifecycle state — {record.state}\n </TooltipContent>\n </Tooltip>\n <span className=\"text-sm font-mono text-muted-foreground\">#{record.id}</span>\n {record.captureId !== null && (\n <span className=\"text-xs text-muted-foreground\">capture #{record.captureId}</span>\n )}\n </div>\n <span className=\"text-xs text-muted-foreground\">{fmtDate(record.timestamp)}</span>\n </div>\n\n <div className=\"flex items-center gap-3 text-sm flex-wrap\">\n <span className=\"font-mono\">{record.model}</span>\n <span className=\"text-muted-foreground\">{fmtSize(record.imageSize)}</span>\n <span className=\"text-muted-foreground\">{fmtTime(record.latencyMs)}</span>\n {record.incoming_protocol && (\n <Tooltip>\n <TooltipTrigger render={<span className=\"inline-flex\" />}>\n <Badge variant=\"outline\" size=\"sm\">\n {record.incoming_protocol}\n </Badge>\n </TooltipTrigger>\n <TooltipContent side=\"top\">Incoming HTTP protocol</TooltipContent>\n </Tooltip>\n )}\n {record.upstream_protocol && (\n <Tooltip>\n <TooltipTrigger render={<span className=\"inline-flex\" />}>\n <Badge variant=\"outline\" size=\"sm\">\n {record.upstream_protocol}\n </Badge>\n </TooltipTrigger>\n <TooltipContent side=\"top\">Upstream HTTP protocol</TooltipContent>\n </Tooltip>\n )}\n {record.httpStatus !== null && (\n <span\n className={cn(\n \"font-mono\",\n record.httpStatus < 400 ? \"text-foreground\" : \"text-destructive\",\n )}\n >\n HTTP {record.httpStatus}\n </span>\n )}\n </div>\n\n {record.error && (\n <div\n role=\"alert\"\n className=\"text-sm text-destructive bg-destructive/10 rounded px-2 py-1 font-mono break-all\"\n >\n {record.error}\n </div>\n )}\n\n {record.description && (\n <ScrollArea className={cn(\"max-h-40 rounded\", isOk ? \"bg-muted\" : \"bg-muted/50\")}>\n <div className=\"text-sm px-2 py-1 break-words whitespace-pre-wrap\">\n {record.description}\n </div>\n </ScrollArea>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"file":"assets/vision-calls-BquNiDzm.js"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<meta
|
|
8
|
-
name="description"
|
|
9
|
-
content="Live LLM API capture inspector for Anthropic and OpenAI-compatible traffic."
|
|
10
|
-
/>
|
|
11
|
-
<title>umans-gate</title>
|
|
12
|
-
<script>
|
|
13
|
-
(function () {
|
|
14
|
-
try {
|
|
15
|
-
var stored = localStorage.getItem("umans-gate-theme");
|
|
16
|
-
var theme = stored || "system";
|
|
17
|
-
var isDark =
|
|
18
|
-
theme === "dark" ||
|
|
19
|
-
(theme === "system" &&
|
|
20
|
-
window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
21
|
-
document.documentElement.classList.toggle("dark", isDark);
|
|
22
|
-
} catch (e) {}
|
|
23
|
-
})();
|
|
24
|
-
</script>
|
|
25
|
-
<script type="module" crossorigin src="/dashboard/assets/index-72wCsW4_.js"></script>
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/dashboard/assets/vendor-react-Dtud3GyP.js">
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/dashboard/assets/vendor-CVKsgXJU.js">
|
|
28
|
-
<link rel="stylesheet" crossorigin href="/dashboard/assets/vendor-DtX4s2-2.css">
|
|
29
|
-
<link rel="stylesheet" crossorigin href="/dashboard/assets/index-DFhG4t-C.css">
|
|
30
|
-
</head>
|
|
31
|
-
<body>
|
|
32
|
-
<div id="root"></div>
|
|
33
|
-
</body>
|
|
34
|
-
</html>
|
package/dist/cli.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|