@tonyclaw/agent-inspector 2.0.0 → 2.0.2
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 +353 -54
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-CU5ZrWcL.js → CompareDrawer-Bp7_x-5N.js} +1 -1
- package/.output/public/assets/{ProxyViewerContainer-pEBqVp1d.js → ProxyViewerContainer-USuxPy-K.js} +13 -13
- package/.output/public/assets/{ReplayDialog-F58yNg5j.js → ReplayDialog-DFHCd0yx.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-C9lT0qE_.js → RequestAnatomy-ehyrskxt.js} +1 -1
- package/.output/public/assets/{ResponseView-DHJq6bnz.js → ResponseView-BNGyc8e_.js} +1 -1
- package/.output/public/assets/{StreamingChunkSequence-BTgfpFUT.js → StreamingChunkSequence-Bjs4Lqwn.js} +1 -1
- package/.output/public/assets/_sessionId-D_SeK_qp.js +1 -0
- package/.output/public/assets/index-BGGOWR7A.js +1 -0
- package/.output/public/assets/index-CIL46Z2y.css +1 -0
- package/.output/public/assets/{json-viewer-CZVYLR8j.js → json-viewer-6uV_YXws.js} +1 -1
- package/.output/public/assets/{main-DHs7FBK3.js → main-FSGUGtEL.js} +2 -2
- package/.output/server/{_sessionId-wMLPvC5g.mjs → _sessionId-_bf9vUww.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-BU4V0uVf.mjs → CompareDrawer-DIth2DQM.mjs} +3 -3
- package/.output/server/_ssr/{ProxyViewerContainer-BnRwFEnn.mjs → ProxyViewerContainer-249bTH-T.mjs} +24 -30
- package/.output/server/_ssr/{ReplayDialog-C7dn9pd_.mjs → ReplayDialog-C1aGx0y1.mjs} +4 -4
- package/.output/server/_ssr/{RequestAnatomy-C1rWpe9-.mjs → RequestAnatomy-D2bCiEJn.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-hGpPaYsf.mjs → ResponseView-DP6k4Xs_.mjs} +3 -3
- package/.output/server/_ssr/{StreamingChunkSequence-BRWI1r_G.mjs → StreamingChunkSequence-HyXZV-b5.mjs} +3 -3
- package/.output/server/_ssr/{index-BKURLVPz.mjs → index-Bt47f9pn.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-BBd2DtQP.mjs → json-viewer-Co-YRwUP.mjs} +2 -2
- package/.output/server/_ssr/{router-BcZ0D6AB.mjs → router-to_OJirX.mjs} +383 -43
- package/.output/server/{_tanstack-start-manifest_v-1y8ZVxRI.mjs → _tanstack-start-manifest_v-Bd-2YRWo.mjs} +1 -1
- package/.output/server/index.mjs +64 -64
- package/README.md +57 -4
- package/package.json +9 -2
- package/scripts/setup-codex-skill.mjs +38 -0
- package/scripts/setup-windows-runtime.mjs +74 -0
- package/src/assets/agent-inspector.ico +0 -0
- package/src/cli/onboard.ts +175 -68
- package/src/cli/templates/codex-skill-onboard.ts +210 -0
- package/src/cli.ts +18 -2
- package/src/components/providers/ProviderCard.tsx +2 -27
- package/src/components/providers/ProvidersPanel.tsx +16 -0
- package/src/knowledge/openclawClient.ts +34 -5
- package/src/knowledge/openclawGatewayClient.ts +237 -0
- package/src/knowledge/openclawMarkdown.ts +146 -0
- package/src/lib/providerTestPrompt.ts +78 -0
- package/src/routes/api/providers.$providerId.test.log.ts +9 -22
- package/.output/public/assets/_sessionId-DsNRbnNm.js +0 -1
- package/.output/public/assets/index-CpWG2hFn.css +0 -1
- package/.output/public/assets/index-DmBV8Gve.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { k as TooltipProvider, f as formatTokens, c as cn, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { k as TooltipProvider, f as formatTokens, c as cn, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-249bTH-T.mjs";
|
|
3
|
+
import "./router-to_OJirX.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { Q as Info } from "../_libs/lucide-react.mjs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { g as getLogFormatAdapter, f as formatTokens, c as cn, p as getStatusCategory, B as Badge, s as safeJsonValue } from "./ProxyViewerContainer-
|
|
3
|
-
import { JsonViewer } from "./json-viewer-
|
|
4
|
-
import "./router-
|
|
2
|
+
import { g as getLogFormatAdapter, f as formatTokens, c as cn, p as getStatusCategory, B as Badge, s as safeJsonValue } from "./ProxyViewerContainer-249bTH-T.mjs";
|
|
3
|
+
import { JsonViewer } from "./json-viewer-Co-YRwUP.mjs";
|
|
4
|
+
import "./router-to_OJirX.mjs";
|
|
5
5
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
6
6
|
import "../_libs/jszip.mjs";
|
|
7
7
|
import { Z as Zap, i as TriangleAlert, V as CircleStop, Y as Brain, b as ChevronDown, f as ChevronRight, _ as Terminal } from "../_libs/lucide-react.mjs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent } from "./ProxyViewerContainer-
|
|
3
|
-
import { JsonViewer } from "./json-viewer-
|
|
4
|
-
import "./router-
|
|
2
|
+
import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent } from "./ProxyViewerContainer-249bTH-T.mjs";
|
|
3
|
+
import { JsonViewer } from "./json-viewer-Co-YRwUP.mjs";
|
|
4
|
+
import "./router-to_OJirX.mjs";
|
|
5
5
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
6
6
|
import "../_libs/jszip.mjs";
|
|
7
7
|
import { b as ChevronDown, f 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-249bTH-T.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
3
|
+
import "./router-to_OJirX.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-Bd-2YRWo.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-to_OJirX.mjs").then((n) => n.f);
|
|
771
771
|
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
772
772
|
return { startEntry, routerEntry };
|
|
773
773
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { q as parseJsonText, c as cn, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { q as parseJsonText, c as cn, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-249bTH-T.mjs";
|
|
3
|
+
import "./router-to_OJirX.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { C as Check, a as Copy, b as ChevronDown, f as ChevronRight, q as ChevronsDown } from "../_libs/lucide-react.mjs";
|
|
@@ -2,7 +2,7 @@ import { c as createRouter, a as createRootRoute, b as createFileRoute, l as laz
|
|
|
2
2
|
import { j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
3
3
|
import { S as SWRConfig } from "../_libs/swr.mjs";
|
|
4
4
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, copyFileSync, unlinkSync } from "node:fs";
|
|
5
|
-
import { mkdir, appendFile, readFile, open, readdir, stat, unlink, writeFile } from "node:fs/promises";
|
|
5
|
+
import fs, { mkdir, appendFile, readFile, open, readdir, stat, unlink, writeFile } from "node:fs/promises";
|
|
6
6
|
import { Buffer } from "node:buffer";
|
|
7
7
|
import path, { join, isAbsolute, dirname } from "node:path";
|
|
8
8
|
import { execFile, exec, spawn } from "node:child_process";
|
|
@@ -13,7 +13,7 @@ import { promisify } from "node:util";
|
|
|
13
13
|
import { Worker } from "node:worker_threads";
|
|
14
14
|
import { M as McpServer, W as WebStandardStreamableHTTPServerTransport } from "../_libs/modelcontextprotocol__server.mjs";
|
|
15
15
|
import { homedir } from "node:os";
|
|
16
|
-
import { d as object, b as string, a as array, _ as _enum, u as union, n as number, c as boolean, l as literal, r as record, g as discriminatedUnion, h as _null, k as lazy
|
|
16
|
+
import { d as object, b as string, a as array, _ as _enum, u as union, n as number, c as boolean, e as unknown, l as literal, r as record, g as discriminatedUnion, h as _null, k as lazy } from "../_libs/zod.mjs";
|
|
17
17
|
import "../_libs/tiny-warning.mjs";
|
|
18
18
|
import "../_libs/tanstack__router-core.mjs";
|
|
19
19
|
import "../_libs/cookie-es.mjs";
|
|
@@ -49,7 +49,7 @@ import "../_libs/mimic-function.mjs";
|
|
|
49
49
|
import "../_libs/semver.mjs";
|
|
50
50
|
import "../_libs/uint8array-extras.mjs";
|
|
51
51
|
const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2064%2064'%20role='img'%20aria-label='Agent%20Inspector'%3e%3crect%20width='64'%20height='64'%20rx='14'%20fill='%23111827'%20/%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='4.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20fill='%23f59e0b'%20d='M15%2036c0-11%207-18%2017-18s17%207%2017%2018c0%208-7%2013-17%2013s-17-5-17-13z'%20/%3e%3cpath%20d='M16%2031c-6-5-12-3-12%204%200%205%206%206%2011%202'%20/%3e%3cpath%20d='M48%2031c6-5%2012-3%2012%204%200%205-6%206-11%202'%20/%3e%3cpath%20d='M27%2019l-3-7'%20/%3e%3cpath%20d='M37%2019l3-7'%20/%3e%3cpath%20d='M19%2045l-6%209'%20/%3e%3cpath%20d='M27%2048l-3%209'%20/%3e%3cpath%20d='M37%2048l3%209'%20/%3e%3cpath%20d='M45%2045l6%209'%20/%3e%3c/g%3e%3cpath%20d='M14%2047l9-8%208%209c-5%203.5-12%203-17-1z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M18%2046l5-5%205%206c-3%201.6-7%201.4-10-1z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M23%2041v10'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.6'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='31'%20cy='48'%20r='1.8'%20fill='%23c2412d'%20/%3e%3cpath%20d='M24%2044l13-11%2014%2013c-8%205.8-18%205.3-27-2z'%20fill='%232f6b3f'%20opacity='.97'%20/%3e%3cpath%20d='M30%2043l7-7%209%209c-5%202.7-11%202.5-16-2z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M37%2036v14'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='2'%20stroke-linecap='round'%20/%3e%3cpath%20d='M30%2043c5-2%2011-1.5%2016%202'%20fill='none'%20stroke='%239fca78'%20stroke-width='1.8'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='51'%20cy='46'%20r='2'%20fill='%23c2412d'%20/%3e%3cpath%20d='M40%2050l8-8%207%208c-4.2%203.2-10%203-15%200z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M43%2049l5-5%204.5%205.5c-3%201.5-6%201.2-9.5-.5z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M48%2044v9'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.5'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='55'%20cy='50'%20r='1.7'%20fill='%23c2412d'%20/%3e%3ccircle%20cx='24'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='40'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='25'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3ccircle%20cx='39'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3c/svg%3e";
|
|
52
|
-
const appCss = "/assets/index-
|
|
52
|
+
const appCss = "/assets/index-CIL46Z2y.css";
|
|
53
53
|
const Route$q = createRootRoute({
|
|
54
54
|
head: () => ({
|
|
55
55
|
meta: [
|
|
@@ -76,7 +76,7 @@ function RootDocument({ children }) {
|
|
|
76
76
|
] })
|
|
77
77
|
] });
|
|
78
78
|
}
|
|
79
|
-
const $$splitComponentImporter$1 = () => import("./index-
|
|
79
|
+
const $$splitComponentImporter$1 = () => import("./index-Bt47f9pn.mjs");
|
|
80
80
|
const Route$p = createFileRoute("/")({
|
|
81
81
|
component: lazyRouteComponent($$splitComponentImporter$1, "component")
|
|
82
82
|
});
|
|
@@ -119,7 +119,7 @@ function decodeSessionIdFromPath(encoded) {
|
|
|
119
119
|
function getSessionPath(sessionId) {
|
|
120
120
|
return `/session/${encodeSessionIdForPath(sessionId)}`;
|
|
121
121
|
}
|
|
122
|
-
const $$splitComponentImporter = () => import("../_sessionId-
|
|
122
|
+
const $$splitComponentImporter = () => import("../_sessionId-_bf9vUww.mjs");
|
|
123
123
|
const Route$o = createFileRoute("/session/$sessionId")({
|
|
124
124
|
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
125
125
|
parseParams: (params) => ({
|
|
@@ -4770,6 +4770,192 @@ const KnowledgeSearchResponseSchema = object({
|
|
|
4770
4770
|
results: array(KnowledgeSearchResultSchema),
|
|
4771
4771
|
warning: string().nullable()
|
|
4772
4772
|
});
|
|
4773
|
+
const OpenClawGatewayErrorSchema = object({
|
|
4774
|
+
type: string().optional(),
|
|
4775
|
+
message: string().optional()
|
|
4776
|
+
}).passthrough();
|
|
4777
|
+
const OpenClawGatewayInvokeResponseSchema = object({
|
|
4778
|
+
ok: boolean().optional(),
|
|
4779
|
+
result: unknown().optional(),
|
|
4780
|
+
error: OpenClawGatewayErrorSchema.optional()
|
|
4781
|
+
}).passthrough();
|
|
4782
|
+
const OpenClawGatewayContentItemSchema = object({
|
|
4783
|
+
type: string().optional(),
|
|
4784
|
+
text: string().optional()
|
|
4785
|
+
}).passthrough();
|
|
4786
|
+
const OpenClawMemoryHitSchema = object({
|
|
4787
|
+
id: string().optional(),
|
|
4788
|
+
path: string().optional(),
|
|
4789
|
+
title: string().optional(),
|
|
4790
|
+
kind: string().optional(),
|
|
4791
|
+
corpus: string().optional(),
|
|
4792
|
+
score: number().nullable().optional(),
|
|
4793
|
+
snippet: string().optional(),
|
|
4794
|
+
content: string().optional(),
|
|
4795
|
+
source: string().nullable().optional(),
|
|
4796
|
+
startLine: number().optional(),
|
|
4797
|
+
endLine: number().optional()
|
|
4798
|
+
}).passthrough();
|
|
4799
|
+
const OpenClawToolResultDetailsSchema = object({
|
|
4800
|
+
results: array(OpenClawMemoryHitSchema).optional()
|
|
4801
|
+
}).passthrough();
|
|
4802
|
+
const OpenClawToolResultSchema = object({
|
|
4803
|
+
results: array(OpenClawMemoryHitSchema).optional(),
|
|
4804
|
+
details: OpenClawToolResultDetailsSchema.optional(),
|
|
4805
|
+
content: array(OpenClawGatewayContentItemSchema).optional()
|
|
4806
|
+
}).passthrough();
|
|
4807
|
+
function getOpenClawGatewayUrl() {
|
|
4808
|
+
const value = process.env["OPENCLAW_GATEWAY_URL"];
|
|
4809
|
+
if (value === void 0 || value.trim() === "") {
|
|
4810
|
+
return null;
|
|
4811
|
+
}
|
|
4812
|
+
return value.trim();
|
|
4813
|
+
}
|
|
4814
|
+
function isOpenClawGatewayConfigured() {
|
|
4815
|
+
return getOpenClawGatewayUrl() !== null;
|
|
4816
|
+
}
|
|
4817
|
+
function buildToolInvokeUrl(gatewayUrl) {
|
|
4818
|
+
return `${gatewayUrl.replace(/\/$/, "")}/tools/invoke`;
|
|
4819
|
+
}
|
|
4820
|
+
function getOpenClawSessionKey() {
|
|
4821
|
+
const value = process.env["OPENCLAW_SESSION_KEY"];
|
|
4822
|
+
return value === void 0 || value.trim() === "" ? "main" : value.trim();
|
|
4823
|
+
}
|
|
4824
|
+
function getGatewayToken() {
|
|
4825
|
+
const token = process.env["OPENCLAW_GATEWAY_TOKEN"] ?? process.env["OPENCLAW_GATEWAY_PASSWORD"] ?? process.env["OPENCLAW_API_KEY"];
|
|
4826
|
+
if (token === void 0 || token.trim() === "") {
|
|
4827
|
+
return null;
|
|
4828
|
+
}
|
|
4829
|
+
return token.trim();
|
|
4830
|
+
}
|
|
4831
|
+
function gatewayHeaders() {
|
|
4832
|
+
const headers = new Headers({ "content-type": "application/json" });
|
|
4833
|
+
const token = getGatewayToken();
|
|
4834
|
+
if (token !== null) {
|
|
4835
|
+
headers.set("authorization", `Bearer ${token}`);
|
|
4836
|
+
}
|
|
4837
|
+
return headers;
|
|
4838
|
+
}
|
|
4839
|
+
function buildSearchQuery(query, project) {
|
|
4840
|
+
if (project === void 0 || project === "") {
|
|
4841
|
+
return query;
|
|
4842
|
+
}
|
|
4843
|
+
return `${query}
|
|
4844
|
+
Project: ${project}`;
|
|
4845
|
+
}
|
|
4846
|
+
function formatHitTitle(hit, index) {
|
|
4847
|
+
if (hit.title !== void 0 && hit.title !== "") {
|
|
4848
|
+
return hit.title;
|
|
4849
|
+
}
|
|
4850
|
+
if (hit.path !== void 0 && hit.path !== "") {
|
|
4851
|
+
return hit.path;
|
|
4852
|
+
}
|
|
4853
|
+
if (hit.id !== void 0 && hit.id !== "") {
|
|
4854
|
+
return hit.id;
|
|
4855
|
+
}
|
|
4856
|
+
return `OpenClaw memory result ${String(index + 1)}`;
|
|
4857
|
+
}
|
|
4858
|
+
function formatHitId(hit, index) {
|
|
4859
|
+
const base = hit.id ?? hit.path ?? `result-${String(index + 1)}`;
|
|
4860
|
+
const start = hit.startLine === void 0 ? "" : `:${String(hit.startLine)}`;
|
|
4861
|
+
const end = hit.endLine === void 0 ? "" : `-${String(hit.endLine)}`;
|
|
4862
|
+
return `openclaw:${base}${start}${end}`;
|
|
4863
|
+
}
|
|
4864
|
+
function formatHitContent(hit) {
|
|
4865
|
+
if (hit.snippet !== void 0 && hit.snippet !== "") {
|
|
4866
|
+
return hit.snippet;
|
|
4867
|
+
}
|
|
4868
|
+
if (hit.content !== void 0 && hit.content !== "") {
|
|
4869
|
+
return hit.content;
|
|
4870
|
+
}
|
|
4871
|
+
return "";
|
|
4872
|
+
}
|
|
4873
|
+
function formatHitType(hit) {
|
|
4874
|
+
if (hit.kind !== void 0 && hit.kind !== "") {
|
|
4875
|
+
return hit.kind;
|
|
4876
|
+
}
|
|
4877
|
+
if (hit.corpus !== void 0 && hit.corpus !== "") {
|
|
4878
|
+
return hit.corpus;
|
|
4879
|
+
}
|
|
4880
|
+
return "openclaw-memory";
|
|
4881
|
+
}
|
|
4882
|
+
function mapGatewayHit(hit, index, project) {
|
|
4883
|
+
return {
|
|
4884
|
+
id: formatHitId(hit, index),
|
|
4885
|
+
type: formatHitType(hit),
|
|
4886
|
+
title: formatHitTitle(hit, index),
|
|
4887
|
+
content: formatHitContent(hit),
|
|
4888
|
+
score: hit.score ?? null,
|
|
4889
|
+
source: hit.source ?? "openclaw",
|
|
4890
|
+
project: project ?? null,
|
|
4891
|
+
evidence: hit
|
|
4892
|
+
};
|
|
4893
|
+
}
|
|
4894
|
+
function extractGatewayHits(result) {
|
|
4895
|
+
const parsed = OpenClawToolResultSchema.safeParse(result);
|
|
4896
|
+
if (!parsed.success) {
|
|
4897
|
+
return null;
|
|
4898
|
+
}
|
|
4899
|
+
return parsed.data.details?.results ?? parsed.data.results ?? [];
|
|
4900
|
+
}
|
|
4901
|
+
function formatGatewayError(raw) {
|
|
4902
|
+
const parsed = OpenClawGatewayInvokeResponseSchema.safeParse(raw);
|
|
4903
|
+
if (!parsed.success) {
|
|
4904
|
+
return "OpenClaw Gateway returned an unparseable response.";
|
|
4905
|
+
}
|
|
4906
|
+
const message = parsed.data.error?.message;
|
|
4907
|
+
if (message !== void 0 && message !== "") {
|
|
4908
|
+
return message;
|
|
4909
|
+
}
|
|
4910
|
+
return "OpenClaw Gateway tool invocation failed.";
|
|
4911
|
+
}
|
|
4912
|
+
async function searchOpenClawGateway(query, project) {
|
|
4913
|
+
const gatewayUrl = getOpenClawGatewayUrl();
|
|
4914
|
+
if (gatewayUrl === null) {
|
|
4915
|
+
return {
|
|
4916
|
+
results: [],
|
|
4917
|
+
warning: "OpenClaw Gateway is not configured. Set OPENCLAW_GATEWAY_URL."
|
|
4918
|
+
};
|
|
4919
|
+
}
|
|
4920
|
+
const response = await fetch(buildToolInvokeUrl(gatewayUrl), {
|
|
4921
|
+
method: "POST",
|
|
4922
|
+
headers: gatewayHeaders(),
|
|
4923
|
+
body: JSON.stringify({
|
|
4924
|
+
tool: "memory_search",
|
|
4925
|
+
args: {
|
|
4926
|
+
query: buildSearchQuery(query, project),
|
|
4927
|
+
maxResults: 10,
|
|
4928
|
+
corpus: "all"
|
|
4929
|
+
},
|
|
4930
|
+
sessionKey: getOpenClawSessionKey()
|
|
4931
|
+
})
|
|
4932
|
+
});
|
|
4933
|
+
const raw = await response.json().catch(() => null);
|
|
4934
|
+
if (!response.ok) {
|
|
4935
|
+
return {
|
|
4936
|
+
results: [],
|
|
4937
|
+
warning: `OpenClaw Gateway search failed with ${response.status}: ${formatGatewayError(raw)}`
|
|
4938
|
+
};
|
|
4939
|
+
}
|
|
4940
|
+
const parsed = OpenClawGatewayInvokeResponseSchema.safeParse(raw);
|
|
4941
|
+
if (!parsed.success) {
|
|
4942
|
+
return { results: [], warning: "OpenClaw Gateway returned an unparseable response." };
|
|
4943
|
+
}
|
|
4944
|
+
if (parsed.data.ok === false) {
|
|
4945
|
+
return { results: [], warning: formatGatewayError(raw) };
|
|
4946
|
+
}
|
|
4947
|
+
const hits = extractGatewayHits(parsed.data.result);
|
|
4948
|
+
if (hits === null) {
|
|
4949
|
+
return {
|
|
4950
|
+
results: [],
|
|
4951
|
+
warning: "OpenClaw memory_search returned an unparseable tool result."
|
|
4952
|
+
};
|
|
4953
|
+
}
|
|
4954
|
+
return {
|
|
4955
|
+
results: hits.map((hit, index) => mapGatewayHit(hit, index, project)),
|
|
4956
|
+
warning: null
|
|
4957
|
+
};
|
|
4958
|
+
}
|
|
4773
4959
|
const REDACTION_PATTERNS = [
|
|
4774
4960
|
{ name: "authorization-header", pattern: /\bAuthorization\s*:\s*[^\s,;]+/gi },
|
|
4775
4961
|
{ name: "bearer-token", pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}/gi },
|
|
@@ -4832,11 +5018,121 @@ function redactCandidate(candidate) {
|
|
|
4832
5018
|
redaction: combineRedaction(patterns)
|
|
4833
5019
|
};
|
|
4834
5020
|
}
|
|
5021
|
+
function getOpenClawWorkspaceDir() {
|
|
5022
|
+
const value = process.env["OPENCLAW_WORKSPACE_DIR"];
|
|
5023
|
+
if (value === void 0 || value.trim() === "") {
|
|
5024
|
+
return null;
|
|
5025
|
+
}
|
|
5026
|
+
return value.trim();
|
|
5027
|
+
}
|
|
5028
|
+
function isOpenClawFileBridgeConfigured() {
|
|
5029
|
+
return getOpenClawWorkspaceDir() !== null;
|
|
5030
|
+
}
|
|
5031
|
+
function normalizeDatePrefix(value) {
|
|
5032
|
+
const date = value.slice(0, 10);
|
|
5033
|
+
return /^\d{4}-\d{2}-\d{2}$/.test(date) ? date : "undated";
|
|
5034
|
+
}
|
|
5035
|
+
function normalizePathSegment(value, fallback) {
|
|
5036
|
+
const segment = value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 96);
|
|
5037
|
+
return segment === "" ? fallback : segment;
|
|
5038
|
+
}
|
|
5039
|
+
function formatNullable(value) {
|
|
5040
|
+
return value === null || value === "" ? "unknown" : value;
|
|
5041
|
+
}
|
|
5042
|
+
function formatList(values) {
|
|
5043
|
+
return values.length === 0 ? "none" : values.join(", ");
|
|
5044
|
+
}
|
|
5045
|
+
function buildEvidenceLink(candidate) {
|
|
5046
|
+
return `agent-inspector:session:${candidate.sessionId}:candidate:${candidate.id}`;
|
|
5047
|
+
}
|
|
5048
|
+
function buildOpenClawMemoryRelativePath(candidate) {
|
|
5049
|
+
const date = normalizeDatePrefix(candidate.updatedAt);
|
|
5050
|
+
const slug = normalizePathSegment(candidate.id, "candidate");
|
|
5051
|
+
return path.join("memory", "agent-inspector", date, `${slug}.md`).replace(/\\/g, "/");
|
|
5052
|
+
}
|
|
5053
|
+
function buildOpenClawMemoryMarkdown(candidate) {
|
|
5054
|
+
const sanitized = redactCandidate(candidate);
|
|
5055
|
+
return [
|
|
5056
|
+
"# Agent Inspector Memory Candidate",
|
|
5057
|
+
"",
|
|
5058
|
+
"Layer: L3 memory candidate for OpenClaw L4 durable recall",
|
|
5059
|
+
"Source: agent-inspector",
|
|
5060
|
+
"",
|
|
5061
|
+
"## Metadata",
|
|
5062
|
+
"",
|
|
5063
|
+
`- Type: ${sanitized.type}`,
|
|
5064
|
+
`- Status: ${sanitized.status}`,
|
|
5065
|
+
`- Project: ${formatNullable(sanitized.evidence.project)}`,
|
|
5066
|
+
`- Session: ${sanitized.sessionId}`,
|
|
5067
|
+
`- Log IDs: ${sanitized.logIds.join(", ")}`,
|
|
5068
|
+
`- Models: ${formatList(sanitized.evidence.models)}`,
|
|
5069
|
+
`- Tags: ${formatList(sanitized.tags)}`,
|
|
5070
|
+
`- Created: ${sanitized.createdAt}`,
|
|
5071
|
+
`- Updated: ${sanitized.updatedAt}`,
|
|
5072
|
+
`- Evidence: ${buildEvidenceLink(sanitized)}`,
|
|
5073
|
+
`- Redacted: ${String(sanitized.redaction.redacted)}`,
|
|
5074
|
+
`- Redaction patterns: ${formatList(sanitized.redaction.patterns)}`,
|
|
5075
|
+
"",
|
|
5076
|
+
"## Durable Knowledge Candidate",
|
|
5077
|
+
"",
|
|
5078
|
+
sanitized.content,
|
|
5079
|
+
"",
|
|
5080
|
+
"## Recall Guidance",
|
|
5081
|
+
"",
|
|
5082
|
+
[
|
|
5083
|
+
"- Treat this as reviewed Agent Inspector knowledge extracted from LLM interaction traces.",
|
|
5084
|
+
"- Use the evidence id to return to Agent Inspector when raw proof is needed.",
|
|
5085
|
+
"- Do not treat this file as raw logs; sensitive values were redacted before export."
|
|
5086
|
+
].join("\n"),
|
|
5087
|
+
""
|
|
5088
|
+
].join("\n");
|
|
5089
|
+
}
|
|
5090
|
+
function resolveTargetPath(workspaceDir, relativePath) {
|
|
5091
|
+
const root = path.resolve(workspaceDir);
|
|
5092
|
+
const target = path.resolve(root, relativePath);
|
|
5093
|
+
const relative = path.relative(root, target);
|
|
5094
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
5095
|
+
return null;
|
|
5096
|
+
}
|
|
5097
|
+
return target;
|
|
5098
|
+
}
|
|
5099
|
+
async function writeCandidateToOpenClawMemory(candidate) {
|
|
5100
|
+
const workspaceDir = getOpenClawWorkspaceDir();
|
|
5101
|
+
if (workspaceDir === null) {
|
|
5102
|
+
return {
|
|
5103
|
+
success: false,
|
|
5104
|
+
error: "OpenClaw workspace is not configured. Set OPENCLAW_WORKSPACE_DIR."
|
|
5105
|
+
};
|
|
5106
|
+
}
|
|
5107
|
+
const relativePath = buildOpenClawMemoryRelativePath(candidate);
|
|
5108
|
+
const target = resolveTargetPath(workspaceDir, relativePath);
|
|
5109
|
+
if (target === null) {
|
|
5110
|
+
return {
|
|
5111
|
+
success: false,
|
|
5112
|
+
error: "OpenClaw memory target resolved outside OPENCLAW_WORKSPACE_DIR."
|
|
5113
|
+
};
|
|
5114
|
+
}
|
|
5115
|
+
try {
|
|
5116
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
5117
|
+
await fs.writeFile(target, buildOpenClawMemoryMarkdown(candidate), "utf8");
|
|
5118
|
+
} catch (error) {
|
|
5119
|
+
return {
|
|
5120
|
+
success: false,
|
|
5121
|
+
error: `OpenClaw memory file write failed: ${String(error)}`
|
|
5122
|
+
};
|
|
5123
|
+
}
|
|
5124
|
+
return {
|
|
5125
|
+
success: true,
|
|
5126
|
+
memoryId: `openclaw-file:${relativePath}`,
|
|
5127
|
+
relativePath,
|
|
5128
|
+
absolutePath: target
|
|
5129
|
+
};
|
|
5130
|
+
}
|
|
4835
5131
|
const OpenClawWriteResponseSchema = object({
|
|
4836
5132
|
id: string().optional(),
|
|
4837
5133
|
memoryId: string().optional()
|
|
4838
5134
|
});
|
|
4839
|
-
function
|
|
5135
|
+
function getLegacyEndpoint() {
|
|
4840
5136
|
const endpoint = process.env["OPENCLAW_MEMORY_URL"] ?? process.env["OPENCLAW_API_URL"];
|
|
4841
5137
|
if (endpoint === void 0 || endpoint.trim() === "") return null;
|
|
4842
5138
|
return endpoint.trim();
|
|
@@ -4874,11 +5170,18 @@ function buildOpenClawPayload(candidate) {
|
|
|
4874
5170
|
};
|
|
4875
5171
|
}
|
|
4876
5172
|
async function promoteToOpenClaw(candidate) {
|
|
4877
|
-
|
|
5173
|
+
if (isOpenClawFileBridgeConfigured()) {
|
|
5174
|
+
const result = await writeCandidateToOpenClawMemory(candidate);
|
|
5175
|
+
if (result.success) {
|
|
5176
|
+
return { success: true, memoryId: result.memoryId };
|
|
5177
|
+
}
|
|
5178
|
+
return { success: false, error: result.error };
|
|
5179
|
+
}
|
|
5180
|
+
const endpoint = getLegacyEndpoint();
|
|
4878
5181
|
if (endpoint === null) {
|
|
4879
5182
|
return {
|
|
4880
5183
|
success: false,
|
|
4881
|
-
error: "OpenClaw memory backend is not configured. Set OPENCLAW_MEMORY_URL."
|
|
5184
|
+
error: "OpenClaw memory backend is not configured. Set OPENCLAW_WORKSPACE_DIR for file-backed memory or OPENCLAW_MEMORY_URL for a legacy HTTP backend."
|
|
4882
5185
|
};
|
|
4883
5186
|
}
|
|
4884
5187
|
const response = await fetch(buildMemoryUrl(endpoint), {
|
|
@@ -4897,11 +5200,15 @@ async function promoteToOpenClaw(candidate) {
|
|
|
4897
5200
|
return { success: true, memoryId: parsed.data.memoryId ?? parsed.data.id ?? null };
|
|
4898
5201
|
}
|
|
4899
5202
|
async function searchOpenClaw(query, project) {
|
|
4900
|
-
|
|
5203
|
+
if (isOpenClawGatewayConfigured()) {
|
|
5204
|
+
return await searchOpenClawGateway(query, project);
|
|
5205
|
+
}
|
|
5206
|
+
const endpoint = getLegacyEndpoint();
|
|
4901
5207
|
if (endpoint === null) {
|
|
5208
|
+
const workspaceHint = isOpenClawFileBridgeConfigured() ? " OPENCLAW_WORKSPACE_DIR is configured for writes, but search requires OPENCLAW_GATEWAY_URL." : "";
|
|
4902
5209
|
return {
|
|
4903
5210
|
results: [],
|
|
4904
|
-
warning:
|
|
5211
|
+
warning: `OpenClaw search backend is not configured. Set OPENCLAW_GATEWAY_URL or OPENCLAW_MEMORY_URL.${workspaceHint}`
|
|
4905
5212
|
};
|
|
4906
5213
|
}
|
|
4907
5214
|
const response = await fetch(buildSearchUrl(endpoint, query, project), {
|
|
@@ -5028,6 +5335,62 @@ const Route$6 = createFileRoute("/api/config/paths")({
|
|
|
5028
5335
|
}
|
|
5029
5336
|
}
|
|
5030
5337
|
});
|
|
5338
|
+
const MEMORY_PROBE_FACTS = [
|
|
5339
|
+
"Project fact: Agent Inspector captures LLM traffic and turns it into Raw Trace, Session Episode, and Memory Candidate layers.",
|
|
5340
|
+
"Procedure: before release, run bun test, npm run typecheck, npm run lint, npm run build, and openspec validate --all --strict.",
|
|
5341
|
+
"Preference: the user prefers Chinese summaries, explicit verification, and commit/push/release closure when requested.",
|
|
5342
|
+
"Pitfall: preserve .llm-inspector config compatibility; do not write raw logs or secrets into durable memory.",
|
|
5343
|
+
"OpenClaw boundary: Agent Inspector owns L1-L3; OpenClaw owns durable indexing, retrieval, and recall."
|
|
5344
|
+
];
|
|
5345
|
+
function modeInstruction(mode) {
|
|
5346
|
+
switch (mode) {
|
|
5347
|
+
case "non-streaming":
|
|
5348
|
+
return "Reply in four concise bullets.";
|
|
5349
|
+
case "streaming":
|
|
5350
|
+
return "Reply in three concise bullets.";
|
|
5351
|
+
}
|
|
5352
|
+
}
|
|
5353
|
+
function maxTokensForMode(mode) {
|
|
5354
|
+
switch (mode) {
|
|
5355
|
+
case "non-streaming":
|
|
5356
|
+
return 1024;
|
|
5357
|
+
case "streaming":
|
|
5358
|
+
return 384;
|
|
5359
|
+
}
|
|
5360
|
+
}
|
|
5361
|
+
function buildProviderTestUserPrompt(mode) {
|
|
5362
|
+
return [
|
|
5363
|
+
"You are validating an LLM provider connection for Agent Inspector.",
|
|
5364
|
+
"This request includes a synthetic memory probe so Agent Inspector can verify its three Inspector-owned memory layers.",
|
|
5365
|
+
"",
|
|
5366
|
+
"Synthetic memory probe:",
|
|
5367
|
+
...MEMORY_PROBE_FACTS.map((fact) => `- ${fact}`),
|
|
5368
|
+
"",
|
|
5369
|
+
"Return:",
|
|
5370
|
+
"1. connection status",
|
|
5371
|
+
"2. one project fact",
|
|
5372
|
+
"3. one reusable procedure",
|
|
5373
|
+
"4. one caution",
|
|
5374
|
+
"",
|
|
5375
|
+
modeInstruction(mode)
|
|
5376
|
+
].join("\n");
|
|
5377
|
+
}
|
|
5378
|
+
function buildProviderTestMessages(mode) {
|
|
5379
|
+
return [{ role: "user", content: buildProviderTestUserPrompt(mode) }];
|
|
5380
|
+
}
|
|
5381
|
+
function buildProviderTestRequestBody(model, mode) {
|
|
5382
|
+
const base = {
|
|
5383
|
+
model,
|
|
5384
|
+
messages: buildProviderTestMessages(mode),
|
|
5385
|
+
max_tokens: maxTokensForMode(mode)
|
|
5386
|
+
};
|
|
5387
|
+
switch (mode) {
|
|
5388
|
+
case "non-streaming":
|
|
5389
|
+
return base;
|
|
5390
|
+
case "streaming":
|
|
5391
|
+
return { ...base, stream: true };
|
|
5392
|
+
}
|
|
5393
|
+
}
|
|
5031
5394
|
const ERROR_HINTS = {
|
|
5032
5395
|
timeout: "The request took too long. Check your network connection or try again.",
|
|
5033
5396
|
network_unreachable: "Cannot reach the server. Verify the base URL and check your firewall settings.",
|
|
@@ -5193,11 +5556,7 @@ function buildTestRequestHeaders(provider) {
|
|
|
5193
5556
|
}
|
|
5194
5557
|
async function testEndpoint(baseUrl, provider, path2, model, isOpenAI) {
|
|
5195
5558
|
const startTime = Date.now();
|
|
5196
|
-
const body = JSON.stringify(
|
|
5197
|
-
model,
|
|
5198
|
-
messages: [{ role: "user", content: "say hello and briefly introduce yourself" }],
|
|
5199
|
-
max_tokens: 1024
|
|
5200
|
-
});
|
|
5559
|
+
const body = JSON.stringify(buildProviderTestRequestBody(model, "non-streaming"));
|
|
5201
5560
|
const requestHeaders = buildTestRequestHeaders(provider);
|
|
5202
5561
|
const controller = new AbortController();
|
|
5203
5562
|
const timeoutId = setTimeout(() => controller.abort(), TEST_TIMEOUT_MS);
|
|
@@ -5282,12 +5641,7 @@ async function testEndpoint(baseUrl, provider, path2, model, isOpenAI) {
|
|
|
5282
5641
|
}
|
|
5283
5642
|
async function testStreamingEndpoint(baseUrl, provider, path2, model, isOpenAI) {
|
|
5284
5643
|
const startTime = Date.now();
|
|
5285
|
-
const body = JSON.stringify(
|
|
5286
|
-
model,
|
|
5287
|
-
messages: [{ role: "user", content: "say hello" }],
|
|
5288
|
-
max_tokens: 256,
|
|
5289
|
-
stream: true
|
|
5290
|
-
});
|
|
5644
|
+
const body = JSON.stringify(buildProviderTestRequestBody(model, "streaming"));
|
|
5291
5645
|
const requestHeaders = buildTestRequestHeaders(provider);
|
|
5292
5646
|
const controller = new AbortController();
|
|
5293
5647
|
const timeoutId = setTimeout(() => controller.abort(), TEST_TIMEOUT_MS);
|
|
@@ -5775,11 +6129,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
5775
6129
|
if (hasSuccessField(nsResult) && hasSuccessField(sResult)) {
|
|
5776
6130
|
const nonStreamingResult = nsResult;
|
|
5777
6131
|
const streamingResult = sResult;
|
|
5778
|
-
const requestBody = JSON.stringify(
|
|
5779
|
-
model: usageModel,
|
|
5780
|
-
messages: [{ role: "user", content: "say hello and briefly introduce yourself" }],
|
|
5781
|
-
max_tokens: 1024
|
|
5782
|
-
});
|
|
6132
|
+
const requestBody = JSON.stringify(buildProviderTestRequestBody(usageModel, "non-streaming"));
|
|
5783
6133
|
const upstreamUrl = `${anthropicUrl}/v1/messages`;
|
|
5784
6134
|
await addTestLogEntry({
|
|
5785
6135
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -5813,12 +6163,9 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
5813
6163
|
true
|
|
5814
6164
|
)
|
|
5815
6165
|
);
|
|
5816
|
-
const streamingRequestBody = JSON.stringify(
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
max_tokens: 256,
|
|
5820
|
-
stream: true
|
|
5821
|
-
});
|
|
6166
|
+
const streamingRequestBody = JSON.stringify(
|
|
6167
|
+
buildProviderTestRequestBody(usageModel, "streaming")
|
|
6168
|
+
);
|
|
5822
6169
|
await addTestLogEntry({
|
|
5823
6170
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
5824
6171
|
method: "POST",
|
|
@@ -5860,11 +6207,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
5860
6207
|
if (hasSuccessField(nsResult) && hasSuccessField(sResult)) {
|
|
5861
6208
|
const nonStreamingResult = nsResult;
|
|
5862
6209
|
const streamingResult = sResult;
|
|
5863
|
-
const requestBody = JSON.stringify(
|
|
5864
|
-
model: usageModel,
|
|
5865
|
-
messages: [{ role: "user", content: "say hello and briefly introduce yourself" }],
|
|
5866
|
-
max_tokens: 1024
|
|
5867
|
-
});
|
|
6210
|
+
const requestBody = JSON.stringify(buildProviderTestRequestBody(usageModel, "non-streaming"));
|
|
5868
6211
|
const upstreamUrl = `${openaiUrl}/v1/chat/completions`;
|
|
5869
6212
|
await addTestLogEntry({
|
|
5870
6213
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -5898,12 +6241,9 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
5898
6241
|
true
|
|
5899
6242
|
)
|
|
5900
6243
|
);
|
|
5901
|
-
const streamingRequestBody = JSON.stringify(
|
|
5902
|
-
|
|
5903
|
-
|
|
5904
|
-
max_tokens: 256,
|
|
5905
|
-
stream: true
|
|
5906
|
-
});
|
|
6244
|
+
const streamingRequestBody = JSON.stringify(
|
|
6245
|
+
buildProviderTestRequestBody(usageModel, "streaming")
|
|
6246
|
+
);
|
|
5907
6247
|
await addTestLogEntry({
|
|
5908
6248
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
5909
6249
|
method: "POST",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-
|
|
1
|
+
const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-FSGUGtEL.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BGGOWR7A.js", "/assets/ProxyViewerContainer-USuxPy-K.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/api/health": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/health.ts" }, "/api/logs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.ts", "children": ["/api/logs/$id", "/api/logs/stream"] }, "/api/mcp": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/mcp.ts" }, "/api/models": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/models.ts" }, "/api/providers": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.ts", "children": ["/api/providers/$providerId", "/api/providers/export", "/api/providers/import", "/api/providers/scan"] }, "/api/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/sessions.ts" }, "/proxy/$": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/proxy/$.ts" }, "/session/$sessionId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", "assets": [], "preloads": ["/assets/_sessionId-D_SeK_qp.js", "/assets/ProxyViewerContainer-USuxPy-K.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-FSGUGtEL.js" });
|
|
2
2
|
export {
|
|
3
3
|
tsrStartManifest
|
|
4
4
|
};
|