@tonyclaw/agent-inspector 2.0.29 → 2.0.30
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-DcqxlgSQ.js → CompareDrawer-BDzfRSt1.js} +1 -1
- package/.output/public/assets/{ProxyViewerContainer-D650kQlv.js → ProxyViewerContainer-NtOD8Ex_.js} +4 -4
- package/.output/public/assets/{ReplayDialog-CBcnPgx1.js → ReplayDialog-p-5TKg75.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-DSgSqCYt.js → RequestAnatomy-G0dV8-D_.js} +1 -1
- package/.output/public/assets/{ResponseView-CjqzBSoF.js → ResponseView-D2wE6lD-.js} +1 -1
- package/.output/public/assets/{StreamingChunkSequence-DdBBKolI.js → StreamingChunkSequence-D8JRK-j_.js} +1 -1
- package/.output/public/assets/_sessionId-zimzVrJE.js +1 -0
- package/.output/public/assets/index-Cv5vPgpr.js +1 -0
- package/.output/public/assets/{main-B6OLZCp9.js → main-XHHZsOBK.js} +2 -2
- package/.output/server/{_sessionId-CCfKJJ19.mjs → _sessionId-CK9QEhkB.mjs} +3 -3
- package/.output/server/_ssr/{CompareDrawer-uaPI5R6e.mjs → CompareDrawer-BJVPFMIx.mjs} +2 -2
- package/.output/server/_ssr/{ProxyViewerContainer-BV2nIxXy.mjs → ProxyViewerContainer-DhbmJ2zj.mjs} +7 -7
- package/.output/server/_ssr/{ReplayDialog-eE2Hy2Nl.mjs → ReplayDialog-DXRj95Gj.mjs} +3 -3
- package/.output/server/_ssr/{RequestAnatomy-B7vwWo57.mjs → RequestAnatomy-CrYJTXdJ.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-Bm6Qp8mo.mjs → ResponseView-4ESqSITr.mjs} +2 -2
- package/.output/server/_ssr/{StreamingChunkSequence-CbAJKJQx.mjs → StreamingChunkSequence-Czdko5n_.mjs} +2 -2
- package/.output/server/_ssr/{index-u14_Aj60.mjs → index-bei0I7qL.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{router-qgeGUp1k.mjs → router-sQh4Gk8J.mjs} +1189 -131
- package/.output/server/_tanstack-start-manifest_v-C0fdSWnA.mjs +4 -0
- package/.output/server/index.mjs +62 -62
- package/README.md +24 -1
- package/package.json +1 -1
- package/src/lib/groupContract.ts +139 -0
- package/src/mcp/server.ts +278 -0
- package/src/mcp/toolHandlers.ts +123 -0
- package/src/proxy/groupEvidenceExporter.ts +341 -0
- package/src/proxy/groupStore.ts +259 -0
- package/src/routes/api/groups.$groupId.evidence.ts +62 -0
- package/src/routes/api/groups.$groupId.sessions.ts +50 -0
- package/src/routes/api/groups.$groupId.ts +50 -0
- package/src/routes/api/groups.ts +39 -0
- package/.output/public/assets/_sessionId-wctOoGh_.js +0 -1
- package/.output/public/assets/index-BhQGSdhG.js +0 -1
- package/.output/server/_tanstack-start-manifest_v-BrfUXnre.mjs +0 -4
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { AddInspectorGroupSessionInputSchema } from "../../lib/groupContract";
|
|
3
|
+
import { addGroupSession, getGroup } from "../../proxy/groupStore";
|
|
4
|
+
|
|
5
|
+
type JsonBodyResult = { ok: true; value: unknown } | { ok: false };
|
|
6
|
+
|
|
7
|
+
async function readJsonBody(request: Request): Promise<JsonBodyResult> {
|
|
8
|
+
try {
|
|
9
|
+
const raw = await request.text();
|
|
10
|
+
if (raw.trim().length === 0) return { ok: true, value: {} };
|
|
11
|
+
return { ok: true, value: JSON.parse(raw) };
|
|
12
|
+
} catch {
|
|
13
|
+
return { ok: false };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const Route = createFileRoute("/api/groups/$groupId/sessions")({
|
|
18
|
+
server: {
|
|
19
|
+
handlers: {
|
|
20
|
+
GET: ({ params }: { params: { groupId: string } }) => {
|
|
21
|
+
const group = getGroup(params.groupId);
|
|
22
|
+
if (group === null) {
|
|
23
|
+
return Response.json({ error: "Group not found" }, { status: 404 });
|
|
24
|
+
}
|
|
25
|
+
return Response.json({ groupId: group.id, members: group.members });
|
|
26
|
+
},
|
|
27
|
+
POST: async ({ params, request }: { params: { groupId: string }; request: Request }) => {
|
|
28
|
+
const body = await readJsonBody(request);
|
|
29
|
+
if (!body.ok) {
|
|
30
|
+
return Response.json({ error: "Invalid JSON body" }, { status: 400 });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const parsed = AddInspectorGroupSessionInputSchema.safeParse(body.value);
|
|
34
|
+
if (!parsed.success) {
|
|
35
|
+
return Response.json(
|
|
36
|
+
{ error: "Invalid request body", details: parsed.error.format() },
|
|
37
|
+
{ status: 400 },
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const updated = addGroupSession(params.groupId, parsed.data);
|
|
42
|
+
if (updated === null) {
|
|
43
|
+
return Response.json({ error: "Group not found" }, { status: 404 });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return Response.json(updated);
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { UpdateInspectorGroupInputSchema } from "../../lib/groupContract";
|
|
3
|
+
import { getGroup, updateGroup } from "../../proxy/groupStore";
|
|
4
|
+
|
|
5
|
+
type JsonBodyResult = { ok: true; value: unknown } | { ok: false };
|
|
6
|
+
|
|
7
|
+
async function readJsonBody(request: Request): Promise<JsonBodyResult> {
|
|
8
|
+
try {
|
|
9
|
+
const raw = await request.text();
|
|
10
|
+
if (raw.trim().length === 0) return { ok: true, value: {} };
|
|
11
|
+
return { ok: true, value: JSON.parse(raw) };
|
|
12
|
+
} catch {
|
|
13
|
+
return { ok: false };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const Route = createFileRoute("/api/groups/$groupId")({
|
|
18
|
+
server: {
|
|
19
|
+
handlers: {
|
|
20
|
+
GET: ({ params }: { params: { groupId: string } }) => {
|
|
21
|
+
const group = getGroup(params.groupId);
|
|
22
|
+
if (group === null) {
|
|
23
|
+
return Response.json({ error: "Group not found" }, { status: 404 });
|
|
24
|
+
}
|
|
25
|
+
return Response.json(group);
|
|
26
|
+
},
|
|
27
|
+
PATCH: async ({ params, request }: { params: { groupId: string }; request: Request }) => {
|
|
28
|
+
const body = await readJsonBody(request);
|
|
29
|
+
if (!body.ok) {
|
|
30
|
+
return Response.json({ error: "Invalid JSON body" }, { status: 400 });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const parsed = UpdateInspectorGroupInputSchema.safeParse(body.value);
|
|
34
|
+
if (!parsed.success) {
|
|
35
|
+
return Response.json(
|
|
36
|
+
{ error: "Invalid request body", details: parsed.error.format() },
|
|
37
|
+
{ status: 400 },
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const updated = updateGroup(params.groupId, parsed.data);
|
|
42
|
+
if (updated === null) {
|
|
43
|
+
return Response.json({ error: "Group not found" }, { status: 404 });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return Response.json(updated);
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { CreateInspectorGroupInputSchema } from "../../lib/groupContract";
|
|
3
|
+
import { createGroup, listGroups } from "../../proxy/groupStore";
|
|
4
|
+
|
|
5
|
+
type JsonBodyResult = { ok: true; value: unknown } | { ok: false };
|
|
6
|
+
|
|
7
|
+
async function readJsonBody(request: Request): Promise<JsonBodyResult> {
|
|
8
|
+
try {
|
|
9
|
+
const raw = await request.text();
|
|
10
|
+
if (raw.trim().length === 0) return { ok: true, value: undefined };
|
|
11
|
+
return { ok: true, value: JSON.parse(raw) };
|
|
12
|
+
} catch {
|
|
13
|
+
return { ok: false };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const Route = createFileRoute("/api/groups")({
|
|
18
|
+
server: {
|
|
19
|
+
handlers: {
|
|
20
|
+
GET: () => Response.json({ groups: listGroups() }),
|
|
21
|
+
POST: async ({ request }: { request: Request }) => {
|
|
22
|
+
const body = await readJsonBody(request);
|
|
23
|
+
if (!body.ok) {
|
|
24
|
+
return Response.json({ error: "Invalid JSON body" }, { status: 400 });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const parsed = CreateInspectorGroupInputSchema.safeParse(body.value);
|
|
28
|
+
if (!parsed.success) {
|
|
29
|
+
return Response.json(
|
|
30
|
+
{ error: "Invalid request body", details: parsed.error.format() },
|
|
31
|
+
{ status: 400 },
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return Response.json(createGroup(parsed.data), { status: 201 });
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as s,j as e}from"./main-B6OLZCp9.js";import{P as i}from"./ProxyViewerContainer-D650kQlv.js";function t(){const{sessionId:o}=s.useParams();return e.jsx(i,{initialSessionId:o},o)}export{t as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as o}from"./ProxyViewerContainer-D650kQlv.js";import"./main-B6OLZCp9.js";const r=o;export{r as component};
|
|
@@ -1,4 +0,0 @@
|
|
|
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/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-B6OLZCp9.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BhQGSdhG.js", "/assets/ProxyViewerContainer-D650kQlv.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/runs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.ts", "children": ["/api/runs/$runId"] }, "/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-wctOoGh_.js", "/assets/ProxyViewerContainer-D650kQlv.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"] }, "/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/model-metadata", "/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/runs/$runId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.ts", "children": ["/api/runs/$runId/evidence"] }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/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/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.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/runs/$runId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.evidence.ts" }, "/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-B6OLZCp9.js" });
|
|
2
|
-
export {
|
|
3
|
-
tsrStartManifest
|
|
4
|
-
};
|