@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.
Files changed (36) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-DcqxlgSQ.js → CompareDrawer-BDzfRSt1.js} +1 -1
  3. package/.output/public/assets/{ProxyViewerContainer-D650kQlv.js → ProxyViewerContainer-NtOD8Ex_.js} +4 -4
  4. package/.output/public/assets/{ReplayDialog-CBcnPgx1.js → ReplayDialog-p-5TKg75.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-DSgSqCYt.js → RequestAnatomy-G0dV8-D_.js} +1 -1
  6. package/.output/public/assets/{ResponseView-CjqzBSoF.js → ResponseView-D2wE6lD-.js} +1 -1
  7. package/.output/public/assets/{StreamingChunkSequence-DdBBKolI.js → StreamingChunkSequence-D8JRK-j_.js} +1 -1
  8. package/.output/public/assets/_sessionId-zimzVrJE.js +1 -0
  9. package/.output/public/assets/index-Cv5vPgpr.js +1 -0
  10. package/.output/public/assets/{main-B6OLZCp9.js → main-XHHZsOBK.js} +2 -2
  11. package/.output/server/{_sessionId-CCfKJJ19.mjs → _sessionId-CK9QEhkB.mjs} +3 -3
  12. package/.output/server/_ssr/{CompareDrawer-uaPI5R6e.mjs → CompareDrawer-BJVPFMIx.mjs} +2 -2
  13. package/.output/server/_ssr/{ProxyViewerContainer-BV2nIxXy.mjs → ProxyViewerContainer-DhbmJ2zj.mjs} +7 -7
  14. package/.output/server/_ssr/{ReplayDialog-eE2Hy2Nl.mjs → ReplayDialog-DXRj95Gj.mjs} +3 -3
  15. package/.output/server/_ssr/{RequestAnatomy-B7vwWo57.mjs → RequestAnatomy-CrYJTXdJ.mjs} +2 -2
  16. package/.output/server/_ssr/{ResponseView-Bm6Qp8mo.mjs → ResponseView-4ESqSITr.mjs} +2 -2
  17. package/.output/server/_ssr/{StreamingChunkSequence-CbAJKJQx.mjs → StreamingChunkSequence-Czdko5n_.mjs} +2 -2
  18. package/.output/server/_ssr/{index-u14_Aj60.mjs → index-bei0I7qL.mjs} +2 -2
  19. package/.output/server/_ssr/index.mjs +2 -2
  20. package/.output/server/_ssr/{router-qgeGUp1k.mjs → router-sQh4Gk8J.mjs} +1189 -131
  21. package/.output/server/_tanstack-start-manifest_v-C0fdSWnA.mjs +4 -0
  22. package/.output/server/index.mjs +62 -62
  23. package/README.md +24 -1
  24. package/package.json +1 -1
  25. package/src/lib/groupContract.ts +139 -0
  26. package/src/mcp/server.ts +278 -0
  27. package/src/mcp/toolHandlers.ts +123 -0
  28. package/src/proxy/groupEvidenceExporter.ts +341 -0
  29. package/src/proxy/groupStore.ts +259 -0
  30. package/src/routes/api/groups.$groupId.evidence.ts +62 -0
  31. package/src/routes/api/groups.$groupId.sessions.ts +50 -0
  32. package/src/routes/api/groups.$groupId.ts +50 -0
  33. package/src/routes/api/groups.ts +39 -0
  34. package/.output/public/assets/_sessionId-wctOoGh_.js +0 -1
  35. package/.output/public/assets/index-BhQGSdhG.js +0 -1
  36. 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
- };