@tonyclaw/agent-inspector 2.0.22 → 2.0.23

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 (27) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-NEdpe1wl.js → CompareDrawer-DnYQtd8R.js} +1 -1
  3. package/.output/public/assets/{ProxyViewerContainer-Dwhi4Q1c.js → ProxyViewerContainer-BTYGkg36.js} +4 -4
  4. package/.output/public/assets/{ReplayDialog-DijzJwaQ.js → ReplayDialog-B-3V95xT.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-CYbosGYy.js → RequestAnatomy-CT8hLGLa.js} +1 -1
  6. package/.output/public/assets/{ResponseView-B3dPM63X.js → ResponseView-DK3CYom0.js} +1 -1
  7. package/.output/public/assets/{StreamingChunkSequence-DYDx3xRY.js → StreamingChunkSequence-D3jJutjp.js} +1 -1
  8. package/.output/public/assets/_sessionId-DpdfAzbo.js +1 -0
  9. package/.output/public/assets/index-BpJNbm9G.js +1 -0
  10. package/.output/public/assets/{main-N-sjHJUM.js → main-hF_572U6.js} +2 -2
  11. package/.output/server/{_sessionId-BR46y_bO.mjs → _sessionId-BqhNE2M8.mjs} +2 -2
  12. package/.output/server/_ssr/{CompareDrawer-DDxpmdPs.mjs → CompareDrawer-C4LQW4S1.mjs} +2 -2
  13. package/.output/server/_ssr/{ProxyViewerContainer-B1zAefzz.mjs → ProxyViewerContainer-BKInvawk.mjs} +7 -7
  14. package/.output/server/_ssr/{ReplayDialog-DleMFvMx.mjs → ReplayDialog-C3ZiRihL.mjs} +3 -3
  15. package/.output/server/_ssr/{RequestAnatomy-B-P9tC3D.mjs → RequestAnatomy-DlVAPIQZ.mjs} +2 -2
  16. package/.output/server/_ssr/{ResponseView-DWfGn0i3.mjs → ResponseView-nMS0rkxu.mjs} +2 -2
  17. package/.output/server/_ssr/{StreamingChunkSequence-C8kFF6xJ.mjs → StreamingChunkSequence-PDWqrNiO.mjs} +2 -2
  18. package/.output/server/_ssr/{index-DzENi2RO.mjs → index-Cd1zD-lo.mjs} +2 -2
  19. package/.output/server/_ssr/index.mjs +2 -2
  20. package/.output/server/_ssr/{router-Dy1VEjxy.mjs → router-R9gm7_sh.mjs} +150 -76
  21. package/.output/server/{_tanstack-start-manifest_v-CyzuAD8A.mjs → _tanstack-start-manifest_v-BnLVH_EX.mjs} +1 -1
  22. package/.output/server/index.mjs +57 -57
  23. package/package.json +1 -1
  24. package/src/proxy/store.ts +198 -135
  25. package/src/routes/api/logs.stream.ts +1 -1
  26. package/.output/public/assets/_sessionId-b1KDnByv.js +0 -1
  27. package/.output/public/assets/index-CUyRKgII.js +0 -1
@@ -1,8 +1,8 @@
1
1
  import { c as createRouter, a as createRootRoute, b as createFileRoute, l as lazyRouteComponent, O as Outlet, H as HeadContent, S as Scripts } from "../_libs/tanstack__react-router.mjs";
2
2
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
3
3
  import { S as SWRConfig } from "../_libs/swr.mjs";
4
- import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, copyFileSync, unlinkSync, readdirSync, statSync, createReadStream, cpSync, rmSync } from "node:fs";
5
- import fs, { mkdir, appendFile, readFile, writeFile, readdir, open, stat, unlink } from "node:fs/promises";
4
+ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, copyFileSync, unlinkSync, readdirSync, statSync, createReadStream, cpSync, rmSync, createWriteStream } from "node:fs";
5
+ import fs, { mkdir, appendFile, readFile, writeFile, readdir, open, stat, unlink, rename } from "node:fs/promises";
6
6
  import { createInterface } from "node:readline";
7
7
  import { Buffer } from "node:buffer";
8
8
  import path, { join, isAbsolute, dirname } from "node:path";
@@ -93,7 +93,7 @@ function RootDocument({ children }) {
93
93
  ] })
94
94
  ] });
95
95
  }
96
- const $$splitComponentImporter$1 = () => import("./index-DzENi2RO.mjs");
96
+ const $$splitComponentImporter$1 = () => import("./index-Cd1zD-lo.mjs");
97
97
  const Route$r = createFileRoute("/")({
98
98
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
99
99
  });
@@ -136,7 +136,7 @@ function decodeSessionIdFromPath(encoded) {
136
136
  function getSessionPath(sessionId) {
137
137
  return `/session/${encodeSessionIdForPath(sessionId)}`;
138
138
  }
139
- const $$splitComponentImporter = () => import("../_sessionId-BR46y_bO.mjs");
139
+ const $$splitComponentImporter = () => import("../_sessionId-BqhNE2M8.mjs");
140
140
  const Route$q = createFileRoute("/session/$sessionId")({
141
141
  component: lazyRouteComponent($$splitComponentImporter, "component"),
142
142
  parseParams: (params) => ({
@@ -1458,30 +1458,7 @@ async function getLogById(id) {
1458
1458
  }
1459
1459
  return null;
1460
1460
  }
1461
- const content = readFileSync(filePath, "utf-8");
1462
- const lines = content.split("\n");
1463
- let lastMatch = null;
1464
- for (const line of lines) {
1465
- if (line.trim() === "") continue;
1466
- try {
1467
- const parsed = JSON.parse(line);
1468
- if (typeof parsed === "object" && parsed !== null) {
1469
- const desc = Object.getOwnPropertyDescriptor(parsed, "id");
1470
- if (desc !== void 0 && typeof desc.value === "number" && desc.value === id) {
1471
- const result = CapturedLogSchema.safeParse(parsed);
1472
- if (result.success) {
1473
- lastMatch = normalizeLogSession(result.data);
1474
- if (result.data.responseStatus !== null) {
1475
- addToCache(lastMatch);
1476
- observeSessionLog(lastMatch);
1477
- return lastMatch;
1478
- }
1479
- }
1480
- }
1481
- }
1482
- } catch {
1483
- }
1484
- }
1461
+ const lastMatch = await scanLogFileForId(filePath, id);
1485
1462
  if (lastMatch !== null) {
1486
1463
  addToCache(lastMatch);
1487
1464
  observeSessionLog(lastMatch);
@@ -1492,6 +1469,33 @@ async function getLogById(id) {
1492
1469
  }
1493
1470
  return null;
1494
1471
  }
1472
+ async function scanLogFileForId(filePath, id) {
1473
+ let lastMatch = null;
1474
+ const fileStream = createInterface({
1475
+ input: createReadStream(filePath),
1476
+ crlfDelay: Infinity
1477
+ });
1478
+ for await (const line of fileStream) {
1479
+ if (line.trim() === "") continue;
1480
+ try {
1481
+ const parsed = JSON.parse(line);
1482
+ if (typeof parsed === "object" && parsed !== null) {
1483
+ const desc = Object.getOwnPropertyDescriptor(parsed, "id");
1484
+ if (desc !== void 0 && typeof desc.value === "number" && desc.value === id) {
1485
+ const result = CapturedLogSchema.safeParse(parsed);
1486
+ if (result.success) {
1487
+ lastMatch = normalizeLogSession(result.data);
1488
+ if (result.data.responseStatus !== null) {
1489
+ return lastMatch;
1490
+ }
1491
+ }
1492
+ }
1493
+ }
1494
+ } catch {
1495
+ }
1496
+ }
1497
+ return lastMatch;
1498
+ }
1495
1499
  function getFilteredLogs(sessionId, model) {
1496
1500
  return [...memoryCache.values()].filter((l) => {
1497
1501
  return matchesLogFilters(l, sessionId, model);
@@ -1502,31 +1506,20 @@ function matchesLogFilters(log, sessionId, model) {
1502
1506
  if (model !== void 0 && log.model !== model) return false;
1503
1507
  return true;
1504
1508
  }
1505
- function requestedWindowFitsMemory(filteredMemoryCount, offset, limit) {
1506
- return offset + limit <= filteredMemoryCount;
1507
- }
1508
- function paginateLogs(logs, offset, limit) {
1509
- return logs.slice(offset, offset + limit);
1510
- }
1511
- async function readPersistedLogsById() {
1512
- const byId = /* @__PURE__ */ new Map();
1509
+ async function visitPersistedLogs(visitor) {
1513
1510
  const logDir = resolveLogDir();
1514
- if (!existsSync(logDir)) return byId;
1511
+ if (!existsSync(logDir)) return;
1515
1512
  try {
1516
1513
  const entries = await readdir(logDir);
1517
1514
  const files = entries.filter((file) => file.endsWith(".jsonl")).sort();
1518
1515
  for (const file of files) {
1519
- await readPersistedLogFile(join(logDir, file), byId);
1516
+ await visitPersistedLogFile(join(logDir, file), visitor);
1520
1517
  }
1521
1518
  } catch (err) {
1522
1519
  logger.error("[store] Failed to list persisted logs:", String(err));
1523
1520
  }
1524
- for (const log of memoryCache.values()) {
1525
- byId.set(log.id, log);
1526
- }
1527
- return byId;
1528
1521
  }
1529
- async function readPersistedLogFile(filePath, byId) {
1522
+ async function visitPersistedLogFile(filePath, visitor) {
1530
1523
  if (!existsSync(filePath)) return;
1531
1524
  try {
1532
1525
  const fileStream = createInterface({
@@ -1540,8 +1533,7 @@ async function readPersistedLogFile(filePath, byId) {
1540
1533
  const result = CapturedLogSchema.safeParse(parsed);
1541
1534
  if (result.success) {
1542
1535
  const log = normalizeLogSession(result.data);
1543
- byId.set(log.id, log);
1544
- observeSessionLog(log);
1536
+ visitor(log);
1545
1537
  }
1546
1538
  } catch {
1547
1539
  }
@@ -1551,20 +1543,37 @@ async function readPersistedLogFile(filePath, byId) {
1551
1543
  }
1552
1544
  }
1553
1545
  async function listLogsPage(options) {
1554
- const memoryLogs = getFilteredLogs(options.sessionId, options.model);
1555
- if (requestedWindowFitsMemory(memoryLogs.length, options.offset, options.limit)) {
1556
- return {
1557
- logs: paginateLogs(memoryLogs, options.offset, options.limit),
1558
- total: memoryLogs.length,
1559
- offset: options.offset,
1560
- limit: options.limit
1561
- };
1546
+ const seenIds = /* @__PURE__ */ new Set();
1547
+ const pageById = /* @__PURE__ */ new Map();
1548
+ const pageStart = options.offset;
1549
+ const pageEnd = options.offset + options.limit;
1550
+ let total = 0;
1551
+ const visitLog = (log) => {
1552
+ if (!matchesLogFilters(log, options.sessionId, options.model)) return;
1553
+ if (!seenIds.has(log.id)) {
1554
+ seenIds.add(log.id);
1555
+ const position = total;
1556
+ total += 1;
1557
+ if (position >= pageStart && position < pageEnd) {
1558
+ pageById.set(log.id, log);
1559
+ }
1560
+ return;
1561
+ }
1562
+ if (pageById.has(log.id)) {
1563
+ pageById.set(log.id, log);
1564
+ }
1565
+ };
1566
+ await visitPersistedLogs((log) => {
1567
+ observeSessionLog(log);
1568
+ visitLog(log);
1569
+ });
1570
+ for (const log of memoryCache.values()) {
1571
+ visitLog(log);
1562
1572
  }
1563
- const persistedById = await readPersistedLogsById();
1564
- const persistedLogs = [...persistedById.values()].filter((log) => matchesLogFilters(log, options.sessionId, options.model)).sort((left, right) => left.id - right.id);
1573
+ const logs = [...pageById.values()].sort((left, right) => left.id - right.id);
1565
1574
  return {
1566
- logs: paginateLogs(persistedLogs, options.offset, options.limit),
1567
- total: persistedLogs.length,
1575
+ logs,
1576
+ total,
1568
1577
  offset: options.offset,
1569
1578
  limit: options.limit
1570
1579
  };
@@ -1687,35 +1696,100 @@ function readLogIdFromLine(line) {
1687
1696
  return null;
1688
1697
  }
1689
1698
  }
1699
+ function tempRewritePath(filePath) {
1700
+ return `${filePath}.rewrite-${String(process.pid)}-${String(Date.now())}.tmp`;
1701
+ }
1702
+ async function removeTempFile(filePath) {
1703
+ try {
1704
+ await unlink(filePath);
1705
+ } catch {
1706
+ }
1707
+ }
1708
+ function waitForWriterDrain(writer) {
1709
+ return new Promise((resolve) => {
1710
+ const cleanup = () => {
1711
+ writer.off("drain", onDrain);
1712
+ writer.off("error", onError);
1713
+ };
1714
+ const onDrain = () => {
1715
+ cleanup();
1716
+ resolve(true);
1717
+ };
1718
+ const onError = () => {
1719
+ cleanup();
1720
+ resolve(false);
1721
+ };
1722
+ writer.once("drain", onDrain);
1723
+ writer.once("error", onError);
1724
+ });
1725
+ }
1726
+ async function writeKeptLogLine(writer, line) {
1727
+ if (writer.write(`${line}
1728
+ `, "utf-8")) return true;
1729
+ return await waitForWriterDrain(writer);
1730
+ }
1731
+ function finishWriter(writer) {
1732
+ return new Promise((resolve) => {
1733
+ const cleanup = () => {
1734
+ writer.off("finish", onFinish);
1735
+ writer.off("error", onError);
1736
+ };
1737
+ const onFinish = () => {
1738
+ cleanup();
1739
+ resolve(true);
1740
+ };
1741
+ const onError = () => {
1742
+ cleanup();
1743
+ resolve(false);
1744
+ };
1745
+ writer.once("finish", onFinish);
1746
+ writer.once("error", onError);
1747
+ writer.end();
1748
+ });
1749
+ }
1690
1750
  async function rewriteLogFileWithoutIds(filePath, ids) {
1691
- let content;
1751
+ const tempPath = tempRewritePath(filePath);
1752
+ const writer = createWriteStream(tempPath, { encoding: "utf-8" });
1753
+ const removedIds = /* @__PURE__ */ new Set();
1754
+ let keptLineCount = 0;
1755
+ let writeOk = true;
1692
1756
  try {
1693
- content = await readFile(filePath, "utf-8");
1757
+ const fileStream = createInterface({
1758
+ input: createReadStream(filePath),
1759
+ crlfDelay: Infinity
1760
+ });
1761
+ for await (const line of fileStream) {
1762
+ if (line === "") continue;
1763
+ const id = readLogIdFromLine(line);
1764
+ if (id !== null && ids.has(id)) {
1765
+ removedIds.add(id);
1766
+ } else {
1767
+ keptLineCount += 1;
1768
+ writeOk = await writeKeptLogLine(writer, line);
1769
+ if (!writeOk) break;
1770
+ }
1771
+ }
1694
1772
  } catch (err) {
1695
- logger.warn("[store] Failed to read log file for deletion:", filePath, String(err));
1773
+ logger.warn("[store] Failed to stream log file for deletion:", filePath, String(err));
1774
+ writeOk = false;
1775
+ }
1776
+ if (!await finishWriter(writer) || !writeOk) {
1777
+ await removeTempFile(tempPath);
1696
1778
  return { rewritten: false, removedIds: /* @__PURE__ */ new Set() };
1697
1779
  }
1698
- const lines = content.split("\n");
1699
- const keptLines = [];
1700
- const removedIds = /* @__PURE__ */ new Set();
1701
- for (const line of lines) {
1702
- if (line === "") continue;
1703
- const id = readLogIdFromLine(line);
1704
- if (id !== null && ids.has(id)) {
1705
- removedIds.add(id);
1706
- } else {
1707
- keptLines.push(line);
1708
- }
1780
+ if (removedIds.size === 0) {
1781
+ await removeTempFile(tempPath);
1782
+ return { rewritten: false, removedIds };
1709
1783
  }
1710
- if (removedIds.size === 0) return { rewritten: false, removedIds };
1711
1784
  try {
1712
- if (keptLines.length === 0) {
1785
+ if (keptLineCount === 0) {
1786
+ await removeTempFile(tempPath);
1713
1787
  await unlink(filePath);
1714
1788
  } else {
1715
- await writeFile(filePath, `${keptLines.join("\n")}
1716
- `, "utf-8");
1789
+ await rename(tempPath, filePath);
1717
1790
  }
1718
1791
  } catch (err) {
1792
+ await removeTempFile(tempPath);
1719
1793
  logger.warn("[store] Failed to rewrite log file after deletion:", filePath, String(err));
1720
1794
  return { rewritten: false, removedIds: /* @__PURE__ */ new Set() };
1721
1795
  }
@@ -5820,7 +5894,7 @@ const Route$e = createFileRoute("/api/providers/$providerId")({
5820
5894
  }
5821
5895
  }
5822
5896
  });
5823
- const INITIAL_STREAM_LOG_LIMIT = 500;
5897
+ const INITIAL_STREAM_LOG_LIMIT = 100;
5824
5898
  const Route$d = createFileRoute("/api/logs/stream")({
5825
5899
  server: {
5826
5900
  handlers: {
@@ -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-N-sjHJUM.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-CUyRKgII.js", "/assets/ProxyViewerContainer-Dwhi4Q1c.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-b1KDnByv.js", "/assets/ProxyViewerContainer-Dwhi4Q1c.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/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/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-N-sjHJUM.js" });
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-hF_572U6.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BpJNbm9G.js", "/assets/ProxyViewerContainer-BTYGkg36.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-DpdfAzbo.js", "/assets/ProxyViewerContainer-BTYGkg36.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/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/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-hF_572U6.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -38,100 +38,100 @@ const assets = {
38
38
  "/assets/alibaba-TTwafVwX.svg": {
39
39
  "type": "image/svg+xml",
40
40
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
41
- "mtime": "2026-06-29T10:13:59.057Z",
41
+ "mtime": "2026-06-29T10:57:03.958Z",
42
42
  "size": 5915,
43
43
  "path": "../public/assets/alibaba-TTwafVwX.svg"
44
44
  },
45
- "/assets/index-CUyRKgII.js": {
45
+ "/assets/CompareDrawer-DnYQtd8R.js": {
46
46
  "type": "text/javascript; charset=utf-8",
47
- "etag": '"74-Blhwtv0C+J1LFr8yFFBCZDV3zwg"',
48
- "mtime": "2026-06-29T10:13:59.057Z",
49
- "size": 116,
50
- "path": "../public/assets/index-CUyRKgII.js"
47
+ "etag": '"49fe-b7mmBTYljsLKWenrZlAtgJH1LOY"',
48
+ "mtime": "2026-06-29T10:57:03.958Z",
49
+ "size": 18942,
50
+ "path": "../public/assets/CompareDrawer-DnYQtd8R.js"
51
51
  },
52
- "/assets/CompareDrawer-NEdpe1wl.js": {
52
+ "/assets/index-BpJNbm9G.js": {
53
53
  "type": "text/javascript; charset=utf-8",
54
- "etag": '"49fe-y9gn69XtxO5KnrFt7knbaWGcfgk"',
55
- "mtime": "2026-06-29T10:13:59.057Z",
56
- "size": 18942,
57
- "path": "../public/assets/CompareDrawer-NEdpe1wl.js"
54
+ "etag": '"74-5ny3SIFXNJjz8mYDJPqwGLMogII"',
55
+ "mtime": "2026-06-29T10:57:03.958Z",
56
+ "size": 116,
57
+ "path": "../public/assets/index-BpJNbm9G.js"
58
+ },
59
+ "/assets/index-780zTVwp.css": {
60
+ "type": "text/css; charset=utf-8",
61
+ "etag": '"1a380-Lz+Shs13XyKSlh9PTaGE50w/BpU"',
62
+ "mtime": "2026-06-29T10:57:03.958Z",
63
+ "size": 107392,
64
+ "path": "../public/assets/index-780zTVwp.css"
58
65
  },
59
66
  "/assets/minimax-BPMzvuL-.jpeg": {
60
67
  "type": "image/jpeg",
61
68
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
62
- "mtime": "2026-06-29T10:13:59.057Z",
69
+ "mtime": "2026-06-29T10:57:03.958Z",
63
70
  "size": 6918,
64
71
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
65
72
  },
66
- "/assets/ReplayDialog-DijzJwaQ.js": {
73
+ "/assets/ReplayDialog-B-3V95xT.js": {
67
74
  "type": "text/javascript; charset=utf-8",
68
- "etag": '"318c-lNBvN0WiZ9zXnNRPUHB9Uc3Q+U4"',
69
- "mtime": "2026-06-29T10:13:59.057Z",
75
+ "etag": '"318c-1NLootFaQs7KDJvmrRBmp0zrGoY"',
76
+ "mtime": "2026-06-29T10:57:03.958Z",
70
77
  "size": 12684,
71
- "path": "../public/assets/ReplayDialog-DijzJwaQ.js"
78
+ "path": "../public/assets/ReplayDialog-B-3V95xT.js"
72
79
  },
73
- "/assets/main-N-sjHJUM.js": {
80
+ "/assets/main-hF_572U6.js": {
74
81
  "type": "text/javascript; charset=utf-8",
75
- "etag": '"51726-Oiv87HUBZCp4NUFhL1cAZMdsJk4"',
76
- "mtime": "2026-06-29T10:13:59.057Z",
82
+ "etag": '"51726-eooZ68MhIVAdbT2A97BnHJuW5lM"',
83
+ "mtime": "2026-06-29T10:57:03.958Z",
77
84
  "size": 333606,
78
- "path": "../public/assets/main-N-sjHJUM.js"
85
+ "path": "../public/assets/main-hF_572U6.js"
79
86
  },
80
- "/assets/RequestAnatomy-CYbosGYy.js": {
87
+ "/assets/ResponseView-DK3CYom0.js": {
81
88
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"4485-A1lqcM9CzkgAhkltbvT6xUyCtnk"',
83
- "mtime": "2026-06-29T10:13:59.057Z",
84
- "size": 17541,
85
- "path": "../public/assets/RequestAnatomy-CYbosGYy.js"
89
+ "etag": '"30d0-Cy0g09LS9VDwp/DlETvauFmcBFs"',
90
+ "mtime": "2026-06-29T10:57:03.958Z",
91
+ "size": 12496,
92
+ "path": "../public/assets/ResponseView-DK3CYom0.js"
86
93
  },
87
- "/assets/ResponseView-B3dPM63X.js": {
94
+ "/assets/RequestAnatomy-CT8hLGLa.js": {
88
95
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"30d0-yf9eD5N2NhQxIYMoH1SUnd4oOgc"',
90
- "mtime": "2026-06-29T10:13:59.057Z",
91
- "size": 12496,
92
- "path": "../public/assets/ResponseView-B3dPM63X.js"
96
+ "etag": '"4485-oTcemFMGh2ben0T+njg79IE1+H8"',
97
+ "mtime": "2026-06-29T10:57:03.958Z",
98
+ "size": 17541,
99
+ "path": "../public/assets/RequestAnatomy-CT8hLGLa.js"
93
100
  },
94
- "/assets/StreamingChunkSequence-DYDx3xRY.js": {
101
+ "/assets/StreamingChunkSequence-D3jJutjp.js": {
95
102
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"d57-f9EtnNikrXbuhOm0uN5++yxdqVU"',
97
- "mtime": "2026-06-29T10:13:59.057Z",
103
+ "etag": '"d57-SqKRwuSq9h9H7zwcDkj5Lqd+u/Y"',
104
+ "mtime": "2026-06-29T10:57:03.958Z",
98
105
  "size": 3415,
99
- "path": "../public/assets/StreamingChunkSequence-DYDx3xRY.js"
100
- },
101
- "/assets/index-780zTVwp.css": {
102
- "type": "text/css; charset=utf-8",
103
- "etag": '"1a380-Lz+Shs13XyKSlh9PTaGE50w/BpU"',
104
- "mtime": "2026-06-29T10:13:59.057Z",
105
- "size": 107392,
106
- "path": "../public/assets/index-780zTVwp.css"
106
+ "path": "../public/assets/StreamingChunkSequence-D3jJutjp.js"
107
107
  },
108
- "/assets/_sessionId-b1KDnByv.js": {
108
+ "/assets/_sessionId-DpdfAzbo.js": {
109
109
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"d2-2mMUMRPxx6mDkse9IY1TOO0xQxM"',
111
- "mtime": "2026-06-29T10:13:59.057Z",
110
+ "etag": '"d2-tBmz0AuKXPVen+wNzq7oGvD4J44"',
111
+ "mtime": "2026-06-29T10:57:03.958Z",
112
112
  "size": 210,
113
- "path": "../public/assets/_sessionId-b1KDnByv.js"
114
- },
115
- "/assets/zhipuai-BPNAnxo-.svg": {
116
- "type": "image/svg+xml",
117
- "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
118
- "mtime": "2026-06-29T10:13:59.057Z",
119
- "size": 11256,
120
- "path": "../public/assets/zhipuai-BPNAnxo-.svg"
113
+ "path": "../public/assets/_sessionId-DpdfAzbo.js"
121
114
  },
122
115
  "/assets/qwen-CONDcHqt.png": {
123
116
  "type": "image/png",
124
117
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
125
- "mtime": "2026-06-29T10:13:59.057Z",
118
+ "mtime": "2026-06-29T10:57:03.958Z",
126
119
  "size": 357059,
127
120
  "path": "../public/assets/qwen-CONDcHqt.png"
128
121
  },
129
- "/assets/ProxyViewerContainer-Dwhi4Q1c.js": {
122
+ "/assets/zhipuai-BPNAnxo-.svg": {
123
+ "type": "image/svg+xml",
124
+ "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
125
+ "mtime": "2026-06-29T10:57:03.958Z",
126
+ "size": 11256,
127
+ "path": "../public/assets/zhipuai-BPNAnxo-.svg"
128
+ },
129
+ "/assets/ProxyViewerContainer-BTYGkg36.js": {
130
130
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"adfba-7oCIiP/M+eYpRHnO3/abH2UghkE"',
132
- "mtime": "2026-06-29T10:13:59.058Z",
131
+ "etag": '"adfba-Leh4MRDOCIBADBcckDDDPe8s/NM"',
132
+ "mtime": "2026-06-29T10:57:03.958Z",
133
133
  "size": 712634,
134
- "path": "../public/assets/ProxyViewerContainer-Dwhi4Q1c.js"
134
+ "path": "../public/assets/ProxyViewerContainer-BTYGkg36.js"
135
135
  }
136
136
  };
137
137
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "2.0.22",
3
+ "version": "2.0.23",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",