@tonyclaw/agent-inspector 3.0.6 → 3.0.8

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 (70) hide show
  1. package/.output/cli.js +245 -171
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-DsvO6QyJ.js → CompareDrawer-Bth_Ywyt.js} +1 -1
  4. package/.output/public/assets/ProxyViewerContainer-C73EU9Jq.js +106 -0
  5. package/.output/public/assets/ReplayDialog-C2YYAuTe.js +1 -0
  6. package/.output/public/assets/{RequestAnatomy-m1q-uVTl.js → RequestAnatomy-8k9dAX2j.js} +1 -1
  7. package/.output/public/assets/ResponseView-DEL6JcXm.js +3 -0
  8. package/.output/public/assets/StreamingChunkSequence-DngmoR9j.js +1 -0
  9. package/.output/public/assets/{_sessionId-CWP4pxOU.js → _sessionId-4vk9RMZ5.js} +1 -1
  10. package/.output/public/assets/index-DBEB1rHe.css +1 -0
  11. package/.output/public/assets/{index-zfZUz67K.js → index-DINLvnm9.js} +1 -1
  12. package/.output/public/assets/index-LPIGiUMP.js +1 -0
  13. package/.output/public/assets/{json-viewer-_4r1LBBE.js → json-viewer-CH5dvS2Y.js} +1 -1
  14. package/.output/public/assets/{main-C_nEHNUM.js → main-GWkZn4xy.js} +2 -2
  15. package/.output/server/{_sessionId-CTqCAmUF.mjs → _sessionId-EgsjdkN7.mjs} +3 -3
  16. package/.output/server/_ssr/{CompareDrawer-D6b6TZ-O.mjs → CompareDrawer-CaM8FYuD.mjs} +3 -3
  17. package/.output/server/_ssr/{ProxyViewerContainer-Dp7Va9_T.mjs → ProxyViewerContainer-EJIogcGd.mjs} +580 -344
  18. package/.output/server/_ssr/{ReplayDialog-D_KWQ1GY.mjs → ReplayDialog-BPpJ2-q8.mjs} +58 -23
  19. package/.output/server/_ssr/{RequestAnatomy-CPubXjMX.mjs → RequestAnatomy-DeQAWnZx.mjs} +2 -2
  20. package/.output/server/_ssr/{ResponseView-CsTiNoOE.mjs → ResponseView-Dshm8iQ7.mjs} +2 -2
  21. package/.output/server/_ssr/{StreamingChunkSequence-Bgbzt23U.mjs → StreamingChunkSequence-32yIU2hn.mjs} +30 -20
  22. package/.output/server/_ssr/{index-P1gSpuM5.mjs → index-XRcx9blU.mjs} +2 -2
  23. package/.output/server/_ssr/index.mjs +2 -2
  24. package/.output/server/_ssr/{json-viewer-10ciVGnc.mjs → json-viewer-C0aX5rqC.mjs} +2 -2
  25. package/.output/server/_ssr/{router-BJJ0VhsB.mjs → router-BI-Mvxz9.mjs} +441 -172
  26. package/.output/server/_tanstack-start-manifest_v-jKScklL_.mjs +4 -0
  27. package/.output/server/index.mjs +73 -73
  28. package/package.json +1 -1
  29. package/src/assets/IDE/opencode.svg +1 -1
  30. package/src/assets/IDE/xiaomimimo.svg +1 -1
  31. package/src/cli/detect-tools.ts +2 -27
  32. package/src/cli/templates/codex-skill-onboard.ts +1 -1
  33. package/src/cli/templates/skill-onboard.ts +2 -3
  34. package/src/cli.ts +9 -86
  35. package/src/components/ProxyViewer.tsx +68 -21
  36. package/src/components/ProxyViewerContainer.tsx +30 -19
  37. package/src/components/alerts/AlertsDialog.tsx +3 -3
  38. package/src/components/clients/ClientLogo.tsx +22 -2
  39. package/src/components/ecosystem/AgentLabDialog.tsx +215 -12
  40. package/src/components/groups/GroupsDialog.tsx +31 -43
  41. package/src/components/providers/ImportWizardDialog.tsx +52 -102
  42. package/src/components/providers/ProviderCard.tsx +4 -4
  43. package/src/components/providers/ProvidersPanel.tsx +82 -68
  44. package/src/components/providers/SettingsDialog.tsx +11 -12
  45. package/src/components/proxy-viewer/AgentTraceSummary.tsx +15 -23
  46. package/src/components/proxy-viewer/CompareDrawer.tsx +1 -1
  47. package/src/components/proxy-viewer/ConversationHeader.tsx +2 -2
  48. package/src/components/proxy-viewer/ReplayDialog.tsx +65 -22
  49. package/src/components/proxy-viewer/StreamingChunkSequence.tsx +33 -20
  50. package/src/lib/apiClient.ts +43 -10
  51. package/src/lib/ecosystemContract.ts +32 -0
  52. package/src/lib/export-logs.ts +37 -3
  53. package/src/proxy/ecosystemRegistry.ts +244 -0
  54. package/src/proxy/ecosystemTasks.ts +153 -0
  55. package/src/proxy/platformCommands.ts +212 -0
  56. package/src/proxy/socketTracker.ts +84 -143
  57. package/src/routes/api/ecosystem.packages.$packageId.help.ts +16 -0
  58. package/src/routes/api/ecosystem.packages.$packageId.install.ts +16 -0
  59. package/src/routes/api/ecosystem.packages.$packageId.runner-presets.ts +19 -0
  60. package/src/routes/api/ecosystem.packages.$packageId.upgrade.ts +16 -0
  61. package/src/routes/api/ecosystem.packages.ts +1 -248
  62. package/src/routes/api/ecosystem.tasks.$taskId.ts +16 -0
  63. package/src/routes/api/ecosystem.tasks.ts +12 -0
  64. package/.output/public/assets/ProxyViewerContainer-CfP-komD.js +0 -106
  65. package/.output/public/assets/ReplayDialog-CQlLX1Uo.js +0 -1
  66. package/.output/public/assets/ResponseView-DuLLeYSh.js +0 -3
  67. package/.output/public/assets/StreamingChunkSequence-CN4aRFBx.js +0 -1
  68. package/.output/public/assets/index-0pt1umWP.css +0 -1
  69. package/.output/public/assets/index-DSUEOPbC.js +0 -1
  70. package/.output/server/_tanstack-start-manifest_v-CltlYL3I.mjs +0 -4
@@ -2,15 +2,15 @@ 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, createReadStream, readdirSync, statSync, rmSync, cpSync, createWriteStream } from "node:fs";
5
- import fs, { readFile, mkdir, appendFile, writeFile, readdir, open, stat, unlink, rm, rename } from "node:fs/promises";
5
+ import fs, { mkdir, appendFile, readFile, writeFile, readdir, open, stat, unlink, rm, rename } from "node:fs/promises";
6
6
  import { createInterface } from "node:readline";
7
7
  import { Buffer } from "node:buffer";
8
- import path, { join, basename, dirname, isAbsolute, resolve, relative } from "node:path";
9
- import { randomUUID as randomUUID$1, createHash } from "node:crypto";
10
- import { execFile, exec, spawn } from "node:child_process";
8
+ import path, { basename, join, dirname, isAbsolute, resolve, relative } from "node:path";
9
+ import { randomUUID, createHash } from "node:crypto";
10
+ import { spawn, execFile } from "node:child_process";
11
11
  import { fileURLToPath } from "node:url";
12
12
  import { C as Conf } from "../_libs/conf.mjs";
13
- import { randomUUID } from "crypto";
13
+ import { randomUUID as randomUUID$1 } from "crypto";
14
14
  import { promisify } from "node:util";
15
15
  import { Worker } from "node:worker_threads";
16
16
  import { M as McpServer, W as WebStandardStreamableHTTPServerTransport, R as ResourceTemplate } from "../_libs/modelcontextprotocol__server.mjs";
@@ -65,8 +65,8 @@ import "../_libs/immediate.mjs";
65
65
  import "../_libs/setimmediate.mjs";
66
66
  import "../_libs/pako.mjs";
67
67
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20role='img'%20aria-label='Agent%20Inspector'%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M5%2013%20C5%209%208%207%2012%207%20C16%207%2019%209%2019%2013%20C19%2016%2016%2018%2012%2018%20C8%2018%205%2016%205%2013%20Z'%20/%3e%3cpath%20d='M5%2011%20C3.5%209.5%201.5%2010%202%2012.5%20C2.5%2014%204%2013.5%205%2012.5'%20/%3e%3cpath%20d='M19%2011%20C20.5%209.5%2022.5%2010%2022%2012.5%20C21.5%2014%2020%2013.5%2019%2012.5'%20/%3e%3cline%20x1='10'%20y1='7'%20x2='9.5'%20y2='5'%20/%3e%3cline%20x1='14'%20y1='7'%20x2='14.5'%20y2='5'%20/%3e%3cline%20x1='6.5'%20y1='16'%20x2='4.5'%20y2='19.5'%20/%3e%3cline%20x1='9'%20y1='17.5'%20x2='8'%20y2='20.5'%20/%3e%3cline%20x1='15'%20y1='17.5'%20x2='16'%20y2='20.5'%20/%3e%3cline%20x1='17.5'%20y1='16'%20x2='19.5'%20y2='19.5'%20/%3e%3c/g%3e%3ccircle%20cx='9.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='14.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3c/svg%3e";
68
- const appCss = "/assets/index-0pt1umWP.css";
69
- const Route$E = createRootRoute({
68
+ const appCss = "/assets/index-DBEB1rHe.css";
69
+ const Route$K = createRootRoute({
70
70
  head: () => ({
71
71
  meta: [
72
72
  { charSet: "utf-8" },
@@ -108,8 +108,8 @@ function RootDocument({ children }) {
108
108
  ] })
109
109
  ] });
110
110
  }
111
- const $$splitComponentImporter$1 = () => import("./index-P1gSpuM5.mjs");
112
- const Route$D = createFileRoute("/")({
111
+ const $$splitComponentImporter$1 = () => import("./index-XRcx9blU.mjs");
112
+ const Route$J = createFileRoute("/")({
113
113
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
114
114
  });
115
115
  const B64URL_RE = /^[A-Za-z0-9_-]+$/;
@@ -151,8 +151,8 @@ function decodeSessionIdFromPath(encoded) {
151
151
  function getSessionPath(sessionId) {
152
152
  return `/session/${encodeSessionIdForPath(sessionId)}`;
153
153
  }
154
- const $$splitComponentImporter = () => import("../_sessionId-CTqCAmUF.mjs");
155
- const Route$C = createFileRoute("/session/$sessionId")({
154
+ const $$splitComponentImporter = () => import("../_sessionId-EgsjdkN7.mjs");
155
+ const Route$I = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
158
158
  sessionId: decodeSessionIdFromPath(params.sessionId)
@@ -5147,7 +5147,7 @@ function migrateLegacyProvider(provider, index, now) {
5147
5147
  const openaiBaseUrl = provider.openaiBaseUrl ?? (format === "openai" && baseUrl !== void 0 ? baseUrl : "");
5148
5148
  const openaiResponsesBaseUrl = provider.openaiResponsesBaseUrl ?? "";
5149
5149
  const candidate = {
5150
- id: provider.id ?? randomUUID(),
5150
+ id: provider.id ?? randomUUID$1(),
5151
5151
  name: name2,
5152
5152
  apiKey,
5153
5153
  model: provider.model,
@@ -5384,7 +5384,7 @@ function addProvider(name2, apiKey, format, baseUrl, models, authHeader, apiDocs
5384
5384
  }
5385
5385
  const newProvider = withBuiltinProviderModelMetadata(
5386
5386
  {
5387
- id: randomUUID(),
5387
+ id: randomUUID$1(),
5388
5388
  name: name2,
5389
5389
  apiKey: normalizedKey,
5390
5390
  format: format ?? (anthropicBaseUrl !== void 0 ? "anthropic" : openaiBaseUrl !== void 0 || openaiResponsesBaseUrl !== void 0 ? "openai" : void 0),
@@ -5499,7 +5499,7 @@ function importProviders(json) {
5499
5499
  const newProvider = withBuiltinProviderModelMetadata(
5500
5500
  {
5501
5501
  ...provider,
5502
- id: randomUUID(),
5502
+ id: randomUUID$1(),
5503
5503
  createdAt: now,
5504
5504
  updatedAt: now
5505
5505
  },
@@ -5603,7 +5603,6 @@ function findProviderByModel(model) {
5603
5603
  }
5604
5604
  return null;
5605
5605
  }
5606
- const execAsync = promisify(exec);
5607
5606
  const execFileAsync = promisify(execFile);
5608
5607
  const cache = /* @__PURE__ */ new Map();
5609
5608
  const CACHE_TTL_MS = 5 * 60 * 1e3;
@@ -5706,38 +5705,34 @@ async function lookupProcessInfo(pid) {
5706
5705
  const platform = process.platform;
5707
5706
  try {
5708
5707
  if (platform === "win32") {
5708
+ const psScript = [
5709
+ `$proc = Get-CimInstance Win32_Process -Filter "ProcessId=${pid}" -ErrorAction SilentlyContinue`,
5710
+ `if ($proc) { Write-Output $proc.CommandLine }`
5711
+ ].join("; ");
5709
5712
  const { stdout } = await execFileAsync(
5710
- "wmic.exe",
5711
- ["process", "where", `processid=${pid}`, "get", "commandline", "/value"],
5713
+ "powershell.exe",
5714
+ ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", psScript],
5712
5715
  {
5713
5716
  windowsHide: true,
5714
5717
  timeout: 3e3,
5715
5718
  maxBuffer: 64 * 1024
5716
5719
  }
5717
5720
  );
5718
- const lines = stdout.trim().split("\n").filter(Boolean);
5719
- for (const line of lines) {
5720
- if (line.includes("=")) {
5721
- const commandLine = (line.split("=")[1] ?? "").trim();
5722
- if (commandLine) {
5723
- return parseCommandLine(commandLine, "\\");
5724
- }
5725
- }
5726
- }
5721
+ const commandLine = stdout.trim();
5722
+ if (commandLine.length > 0) return parseCommandLine(commandLine, "\\");
5727
5723
  } else {
5728
5724
  try {
5729
- const { stdout } = await execAsync(`cat /proc/${pid}/cmdline 2>/dev/null | tr '\\0' ' '`, {
5730
- shell: "/bin/sh"
5731
- });
5732
- const commandLine = stdout.trim();
5725
+ const raw = await readFile(`/proc/${String(pid)}/cmdline`, "utf8");
5726
+ const commandLine = raw.replace(/\0/g, " ").trim();
5733
5727
  if (commandLine) {
5734
5728
  return parseCommandLine(commandLine, "/");
5735
5729
  }
5736
5730
  } catch {
5737
5731
  }
5738
5732
  if (platform === "darwin") {
5739
- const { stdout } = await execAsync(`ps -p ${pid} -o comm= 2>/dev/null`, {
5740
- shell: "/bin/sh"
5733
+ const { stdout } = await execFileAsync("ps", ["-p", String(pid), "-o", "comm="], {
5734
+ timeout: 3e3,
5735
+ maxBuffer: 64 * 1024
5741
5736
  });
5742
5737
  const exePath = stdout.trim();
5743
5738
  if (exePath) {
@@ -5755,12 +5750,12 @@ async function lookupRecentClient() {
5755
5750
  const platform = process.platform;
5756
5751
  try {
5757
5752
  if (platform === "win32") {
5758
- const { stdout: stdout2 } = await execFileAsync("netstat.exe", ["-ano", "-p", "TCP"], {
5753
+ const { stdout } = await execFileAsync("netstat.exe", ["-ano", "-p", "TCP"], {
5759
5754
  windowsHide: true,
5760
5755
  timeout: 2e3,
5761
5756
  maxBuffer: 2 * 1024 * 1024
5762
5757
  });
5763
- const client = pickNewestClientFromWindowsNetstat(stdout2.split("\n"), port);
5758
+ const client = pickNewestClientFromWindowsNetstat(stdout.split("\n"), port);
5764
5759
  if (client === null) {
5765
5760
  return { port: null, pid: null, cwd: null, projectFolder: null };
5766
5761
  }
@@ -5772,11 +5767,7 @@ async function lookupRecentClient() {
5772
5767
  projectFolder: projectFolder2
5773
5768
  };
5774
5769
  }
5775
- const { stdout } = await execAsync(
5776
- `netstat -tanp 2>/dev/null | grep ':${port}' | grep ESTAB || ss -tanp 2>/dev/null | grep ':${port}' | grep ESTAB`,
5777
- { shell: "/bin/sh" }
5778
- );
5779
- const lines = stdout.trim().split("\n").filter((line) => line.includes("ESTAB"));
5770
+ const lines = await readUnixEstablishedConnectionLines(port);
5780
5771
  const clientPid = pickNewestClientPidFromNetstat(lines, port);
5781
5772
  if (clientPid === null) {
5782
5773
  return { port: null, pid: null, cwd: null, projectFolder: null };
@@ -5795,12 +5786,12 @@ function pickNewestClientPidFromNetstat(lines, proxyPort) {
5795
5786
  for (const line of lines) {
5796
5787
  order++;
5797
5788
  const cols = line.trim().split(/\s+/);
5798
- if (cols.length < 7) continue;
5789
+ if (cols.length < 5) continue;
5799
5790
  const localAddr = cols[3] ?? "";
5800
5791
  const remoteAddr = cols[4] ?? "";
5801
5792
  const pidField = cols[6] ?? "";
5802
5793
  if (!remoteAddr.endsWith(proxyToken)) continue;
5803
- const pidMatch = pidField.match(/^(\d+)/);
5794
+ const pidMatch = pidField.match(/^(\d+)/) ?? line.match(/pid=(\d+)/);
5804
5795
  if (pidMatch === null) continue;
5805
5796
  const pid = parseInt(pidMatch[1] ?? "", 10);
5806
5797
  if (!Number.isInteger(pid) || pid <= 0) continue;
@@ -5812,6 +5803,25 @@ function pickNewestClientPidFromNetstat(lines, proxyPort) {
5812
5803
  candidates2.sort((a, b) => b.localPort - a.localPort || b.order - a.order);
5813
5804
  return candidates2[0]?.pid ?? null;
5814
5805
  }
5806
+ async function readUnixEstablishedConnectionLines(port) {
5807
+ const commands = [
5808
+ { command: "netstat", args: ["-tanp"] },
5809
+ { command: "ss", args: ["-tanp"] }
5810
+ ];
5811
+ for (const spec of commands) {
5812
+ try {
5813
+ const { stdout } = await execFileAsync(spec.command, spec.args, {
5814
+ timeout: 2e3,
5815
+ maxBuffer: 2 * 1024 * 1024
5816
+ });
5817
+ const portToken = `:${port}`;
5818
+ const lines = stdout.trim().split("\n").filter((line) => line.includes(portToken) && line.includes("ESTAB"));
5819
+ if (lines.length > 0) return lines;
5820
+ } catch {
5821
+ }
5822
+ }
5823
+ return [];
5824
+ }
5815
5825
  function parseAddressPort(address) {
5816
5826
  const match = address.match(/:(\d+)$/);
5817
5827
  if (match === null) return null;
@@ -5950,10 +5960,11 @@ async function lookupPidByLocalPort(clientPort) {
5950
5960
  const platform = process.platform;
5951
5961
  try {
5952
5962
  if (platform === "win32") {
5953
- const { stdout } = await execAsync(
5954
- `netstat -ano | findstr :${clientPort} | findstr ESTABLISHED`,
5955
- { shell: "cmd.exe", timeout: 2e3, windowsHide: true }
5956
- );
5963
+ const { stdout } = await execFileAsync("netstat.exe", ["-ano", "-p", "TCP"], {
5964
+ windowsHide: true,
5965
+ timeout: 2e3,
5966
+ maxBuffer: 2 * 1024 * 1024
5967
+ });
5957
5968
  const clientToken = `:${clientPort}`;
5958
5969
  for (const rawLine of stdout.split("\n")) {
5959
5970
  const line = rawLine.trim();
@@ -5961,6 +5972,8 @@ async function lookupPidByLocalPort(clientPort) {
5961
5972
  const cols = line.split(/\s+/);
5962
5973
  if (cols.length < 5) continue;
5963
5974
  const localAddr = cols[1] ?? "";
5975
+ const state = cols[3] ?? "";
5976
+ if (state !== "ESTABLISHED") continue;
5964
5977
  if (!localAddr.endsWith(clientToken)) continue;
5965
5978
  const pidStr = cols[cols.length - 1] ?? "";
5966
5979
  const parsed = parseInt(pidStr, 10);
@@ -5969,9 +5982,13 @@ async function lookupPidByLocalPort(clientPort) {
5969
5982
  return null;
5970
5983
  }
5971
5984
  try {
5972
- const { stdout } = await execAsync(
5973
- `ss -tanp state established 'sport = :${clientPort}' 2>/dev/null | tail -n +2 | head -n 1`,
5974
- { shell: "/bin/sh" }
5985
+ const { stdout } = await execFileAsync(
5986
+ "ss",
5987
+ ["-tanp", "state", "established", "sport", `= :${clientPort}`],
5988
+ {
5989
+ timeout: 2e3,
5990
+ maxBuffer: 2 * 1024 * 1024
5991
+ }
5975
5992
  );
5976
5993
  const match = stdout.match(/pid=(\d+)/);
5977
5994
  if (match !== null) {
@@ -5981,10 +5998,12 @@ async function lookupPidByLocalPort(clientPort) {
5981
5998
  } catch {
5982
5999
  }
5983
6000
  try {
5984
- const { stdout } = await execAsync(
5985
- `lsof -ti tcp:${clientPort} -sTCP:ESTABLISHED 2>/dev/null`,
6001
+ const { stdout } = await execFileAsync(
6002
+ "lsof",
6003
+ ["-ti", `tcp:${clientPort}`, "-sTCP:ESTABLISHED"],
5986
6004
  {
5987
- shell: "/bin/sh"
6005
+ timeout: 2e3,
6006
+ maxBuffer: 64 * 1024
5988
6007
  }
5989
6008
  );
5990
6009
  const trimmed = stdout.trim().split("\n")[0] ?? "";
@@ -7135,7 +7154,7 @@ function getRawStreamDir() {
7135
7154
  return join(getDataDir(), "raw-streams");
7136
7155
  }
7137
7156
  function createRawStreamPath() {
7138
- return join(getRawStreamDir(), `${Date.now()}-${randomUUID$1()}.stream.tmp`);
7157
+ return join(getRawStreamDir(), `${Date.now()}-${randomUUID()}.stream.tmp`);
7139
7158
  }
7140
7159
  class RawStreamCapture {
7141
7160
  memoryLimitBytes;
@@ -7562,7 +7581,7 @@ async function handleProxy(req) {
7562
7581
  }
7563
7582
  return handleStreamingResponse(upstreamRes, req, startTime, upstreamUrl, log, captureFullDetails);
7564
7583
  }
7565
- const Route$B = createFileRoute("/proxy/$")({
7584
+ const Route$H = createFileRoute("/proxy/$")({
7566
7585
  server: {
7567
7586
  handlers: {
7568
7587
  GET: ({ request }) => handleProxy(request),
@@ -7583,7 +7602,7 @@ function parsePositiveInt$4(value) {
7583
7602
  function parseBooleanFlag(value) {
7584
7603
  return value === "1" || value === "true";
7585
7604
  }
7586
- const Route$A = createFileRoute("/api/sessions")({
7605
+ const Route$G = createFileRoute("/api/sessions")({
7587
7606
  server: {
7588
7607
  handlers: {
7589
7608
  GET: async ({ request }) => {
@@ -8369,17 +8388,17 @@ const GroupsFileSchema = object({
8369
8388
  function groupsFilePath() {
8370
8389
  return join(getDataDir(), "groups.json");
8371
8390
  }
8372
- function nowIso$1() {
8391
+ function nowIso$2() {
8373
8392
  return (/* @__PURE__ */ new Date()).toISOString();
8374
8393
  }
8375
8394
  function stableId$1(input) {
8376
8395
  return input.trim().replace(/[^A-Za-z0-9_.-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80);
8377
8396
  }
8378
8397
  function createGroupId() {
8379
- return `grp_${Date.now().toString(36)}_${randomUUID$1().slice(0, 8)}`;
8398
+ return `grp_${Date.now().toString(36)}_${randomUUID().slice(0, 8)}`;
8380
8399
  }
8381
8400
  function createMemberId() {
8382
- return `mem_${Date.now().toString(36)}_${randomUUID$1().slice(0, 8)}`;
8401
+ return `mem_${Date.now().toString(36)}_${randomUUID().slice(0, 8)}`;
8383
8402
  }
8384
8403
  function normalizeGroupId$1(input) {
8385
8404
  if (input === void 0) return createGroupId();
@@ -8449,7 +8468,7 @@ function createGroup(input) {
8449
8468
  const groupId = normalizeGroupId$1(parsed?.groupId);
8450
8469
  const existing = getGroup(groupId);
8451
8470
  if (existing !== null) return existing;
8452
- const timestamp = nowIso$1();
8471
+ const timestamp = nowIso$2();
8453
8472
  const group = {
8454
8473
  id: groupId,
8455
8474
  title: parsed?.title ?? `Inspector Group ${groupId}`,
@@ -8471,7 +8490,7 @@ function updateGroup(groupId, input) {
8471
8490
  const parsed = UpdateInspectorGroupInputSchema.parse(input);
8472
8491
  const groups = readGroups();
8473
8492
  let updatedGroup = null;
8474
- const updatedAt = nowIso$1();
8493
+ const updatedAt = nowIso$2();
8475
8494
  const updatedGroups = groups.map((group) => {
8476
8495
  if (group.id !== groupId) return group;
8477
8496
  updatedGroup = {
@@ -8571,7 +8590,7 @@ function upsertMember(group, input, updatedAt) {
8571
8590
  function addGroupSession(groupId, input) {
8572
8591
  const groups = readGroups();
8573
8592
  let updatedGroup = null;
8574
- const updatedAt = nowIso$1();
8593
+ const updatedAt = nowIso$2();
8575
8594
  const updatedGroups = groups.map((group) => {
8576
8595
  if (group.id !== groupId) return group;
8577
8596
  updatedGroup = upsertMember(group, input, updatedAt);
@@ -8603,14 +8622,14 @@ const RunsFileSchema = object({
8603
8622
  function runsFilePath() {
8604
8623
  return join(getDataDir(), "runs.json");
8605
8624
  }
8606
- function nowIso() {
8625
+ function nowIso$1() {
8607
8626
  return (/* @__PURE__ */ new Date()).toISOString();
8608
8627
  }
8609
8628
  function stableId(input) {
8610
8629
  return input.trim().replace(/[^A-Za-z0-9_.-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80);
8611
8630
  }
8612
8631
  function createRunId() {
8613
- return `run_${Date.now().toString(36)}_${randomUUID$1().slice(0, 8)}`;
8632
+ return `run_${Date.now().toString(36)}_${randomUUID().slice(0, 8)}`;
8614
8633
  }
8615
8634
  function normalizeRunId(input) {
8616
8635
  if (input === void 0) return createRunId();
@@ -8687,7 +8706,7 @@ function createRun(input) {
8687
8706
  const runId = normalizeRunId(parsed?.runId);
8688
8707
  const existing = getRun(runId);
8689
8708
  if (existing !== null) return existing;
8690
- const timestamp = nowIso();
8709
+ const timestamp = nowIso$1();
8691
8710
  const sessionId = normalizeSessionId(parsed?.sessionId, runId);
8692
8711
  const groupId = normalizeGroupId(parsed?.groupId);
8693
8712
  const run = {
@@ -8729,7 +8748,7 @@ function updateRun(runId, input) {
8729
8748
  const parsed = UpdateInspectorRunInputSchema.parse(input);
8730
8749
  const runs = readRuns();
8731
8750
  const run = runs.find((candidate) => candidate.id === runId) ?? null;
8732
- const updatedAt = nowIso();
8751
+ const updatedAt = nowIso$1();
8733
8752
  if (run === null) return null;
8734
8753
  const updatedRun = {
8735
8754
  ...run,
@@ -9048,7 +9067,7 @@ function parsePositiveInt$3(value, fallback) {
9048
9067
  if (!Number.isInteger(parsed) || parsed < 1) return fallback;
9049
9068
  return parsed;
9050
9069
  }
9051
- const Route$z = createFileRoute("/api/runs")({
9070
+ const Route$F = createFileRoute("/api/runs")({
9052
9071
  server: {
9053
9072
  handlers: {
9054
9073
  GET: ({ request }) => {
@@ -9094,7 +9113,7 @@ const ProviderInputSchema = object({
9094
9113
  modelMetadata: array(ProviderModelMetadataSchema).optional(),
9095
9114
  source: _enum(["company", "personal"]).optional()
9096
9115
  });
9097
- const Route$y = createFileRoute("/api/providers")({
9116
+ const Route$E = createFileRoute("/api/providers")({
9098
9117
  server: {
9099
9118
  handlers: {
9100
9119
  GET: ({ request }) => {
@@ -9129,7 +9148,7 @@ const Route$y = createFileRoute("/api/providers")({
9129
9148
  }
9130
9149
  }
9131
9150
  });
9132
- const Route$x = createFileRoute("/api/models")({
9151
+ const Route$D = createFileRoute("/api/models")({
9133
9152
  server: {
9134
9153
  handlers: {
9135
9154
  GET: () => Response.json(getModels())
@@ -9137,7 +9156,7 @@ const Route$x = createFileRoute("/api/models")({
9137
9156
  }
9138
9157
  });
9139
9158
  const name = "@tonyclaw/agent-inspector";
9140
- const version = "3.0.6";
9159
+ const version = "3.0.8";
9141
9160
  const packageJson = {
9142
9161
  name,
9143
9162
  version
@@ -12244,7 +12263,7 @@ const PROMPT_NAMES = [
12244
12263
  "inspector_generate_group_report",
12245
12264
  "inspector_extract_repro_steps"
12246
12265
  ];
12247
- const Route$w = createFileRoute("/api/mcp")({
12266
+ const Route$C = createFileRoute("/api/mcp")({
12248
12267
  server: {
12249
12268
  handlers: {
12250
12269
  // The SDK may issue either POST, GET, or DELETE. TanStack Start only
@@ -12363,7 +12382,7 @@ function parseOptionalPositiveInt(value) {
12363
12382
  if (!Number.isInteger(parsed) || parsed < 1) return { ok: false };
12364
12383
  return { ok: true, value: parsed };
12365
12384
  }
12366
- const Route$v = createFileRoute("/api/logs")({
12385
+ const Route$B = createFileRoute("/api/logs")({
12367
12386
  server: {
12368
12387
  handlers: {
12369
12388
  GET: async ({ request }) => {
@@ -12472,7 +12491,7 @@ const Route$v = createFileRoute("/api/logs")({
12472
12491
  }
12473
12492
  });
12474
12493
  logger.debug("Health endpoint loaded");
12475
- const Route$u = createFileRoute("/api/health")({
12494
+ const Route$A = createFileRoute("/api/health")({
12476
12495
  server: {
12477
12496
  handlers: {
12478
12497
  GET: () => {
@@ -12509,7 +12528,7 @@ function readDeleteEvidenceFlag$1(request) {
12509
12528
  return { ok: false };
12510
12529
  }
12511
12530
  }
12512
- const Route$t = createFileRoute("/api/groups")({
12531
+ const Route$z = createFileRoute("/api/groups")({
12513
12532
  server: {
12514
12533
  handlers: {
12515
12534
  GET: () => Response.json(listInspectorGroups()),
@@ -12553,7 +12572,7 @@ const RuntimeConfigPatchSchema = object({
12553
12572
  }).strict().refine((v) => Object.keys(v).length > 0, {
12554
12573
  message: "At least one field must be provided"
12555
12574
  });
12556
- const Route$s = createFileRoute("/api/config")({
12575
+ const Route$y = createFileRoute("/api/config")({
12557
12576
  server: {
12558
12577
  handlers: {
12559
12578
  GET: () => {
@@ -13162,7 +13181,7 @@ function parseFilters(url) {
13162
13181
  source: sourceResult.success ? sourceResult.data : void 0
13163
13182
  };
13164
13183
  }
13165
- const Route$r = createFileRoute("/api/alerts")({
13184
+ const Route$x = createFileRoute("/api/alerts")({
13166
13185
  server: {
13167
13186
  handlers: {
13168
13187
  GET: async ({ request }) => {
@@ -13187,7 +13206,7 @@ async function readJsonBody$4(request) {
13187
13206
  return { ok: false };
13188
13207
  }
13189
13208
  }
13190
- const Route$q = createFileRoute("/api/runs/$runId")({
13209
+ const Route$w = createFileRoute("/api/runs/$runId")({
13191
13210
  server: {
13192
13211
  handlers: {
13193
13212
  GET: ({ params }) => {
@@ -13662,7 +13681,7 @@ function scanExternalProviders() {
13662
13681
  }
13663
13682
  return { providers: filteredProviders, warnings };
13664
13683
  }
13665
- const Route$p = createFileRoute("/api/providers/scan")({
13684
+ const Route$v = createFileRoute("/api/providers/scan")({
13666
13685
  server: {
13667
13686
  handlers: {
13668
13687
  GET: () => {
@@ -13683,7 +13702,7 @@ const Route$p = createFileRoute("/api/providers/scan")({
13683
13702
  }
13684
13703
  });
13685
13704
  union([string(), object({ providers: unknown() })]);
13686
- const Route$o = createFileRoute("/api/providers/import")({
13705
+ const Route$u = createFileRoute("/api/providers/import")({
13687
13706
  server: {
13688
13707
  handlers: {
13689
13708
  POST: async ({ request }) => {
@@ -13716,7 +13735,7 @@ const Route$o = createFileRoute("/api/providers/import")({
13716
13735
  }
13717
13736
  }
13718
13737
  });
13719
- const Route$n = createFileRoute("/api/providers/export")({
13738
+ const Route$t = createFileRoute("/api/providers/export")({
13720
13739
  server: {
13721
13740
  handlers: {
13722
13741
  GET: ({ request }) => {
@@ -13750,7 +13769,7 @@ const ProviderUpdateSchema = object({
13750
13769
  modelMetadata: array(ProviderModelMetadataSchema).optional(),
13751
13770
  source: _enum(["company", "personal"]).optional()
13752
13771
  });
13753
- const Route$m = createFileRoute("/api/providers/$providerId")({
13772
+ const Route$s = createFileRoute("/api/providers/$providerId")({
13754
13773
  server: {
13755
13774
  handlers: {
13756
13775
  GET: ({ params, request }) => {
@@ -13785,7 +13804,7 @@ const Route$m = createFileRoute("/api/providers/$providerId")({
13785
13804
  }
13786
13805
  });
13787
13806
  const INITIAL_STREAM_LOG_LIMIT = 100;
13788
- const Route$l = createFileRoute("/api/logs/stream")({
13807
+ const Route$r = createFileRoute("/api/logs/stream")({
13789
13808
  server: {
13790
13809
  handlers: {
13791
13810
  GET: ({ request }) => {
@@ -14225,7 +14244,7 @@ function sessionNameFromImportFileName(fileName) {
14225
14244
  function isUploadedFile(value) {
14226
14245
  return value instanceof File;
14227
14246
  }
14228
- const Route$k = createFileRoute("/api/logs/import")({
14247
+ const Route$q = createFileRoute("/api/logs/import")({
14229
14248
  server: {
14230
14249
  handlers: {
14231
14250
  POST: async ({ request }) => {
@@ -14262,7 +14281,7 @@ const Route$k = createFileRoute("/api/logs/import")({
14262
14281
  }
14263
14282
  }
14264
14283
  });
14265
- const Route$j = createFileRoute("/api/logs/$id")({
14284
+ const Route$p = createFileRoute("/api/logs/$id")({
14266
14285
  server: {
14267
14286
  handlers: {
14268
14287
  GET: async ({ params }) => {
@@ -14799,7 +14818,7 @@ const SearchBodySchema = object({
14799
14818
  query: string().min(1),
14800
14819
  project: string().optional()
14801
14820
  });
14802
- const Route$i = createFileRoute("/api/knowledge/search")({
14821
+ const Route$o = createFileRoute("/api/knowledge/search")({
14803
14822
  server: {
14804
14823
  handlers: {
14805
14824
  GET: async ({ request }) => {
@@ -14821,7 +14840,7 @@ const Route$i = createFileRoute("/api/knowledge/search")({
14821
14840
  }
14822
14841
  }
14823
14842
  });
14824
- const Route$h = createFileRoute("/api/knowledge/project-context")({
14843
+ const Route$n = createFileRoute("/api/knowledge/project-context")({
14825
14844
  server: {
14826
14845
  handlers: {
14827
14846
  GET: async ({ request }) => {
@@ -14903,7 +14922,7 @@ function updateCandidateDraft(id, updates) {
14903
14922
  candidates.set(id, updated);
14904
14923
  return updated;
14905
14924
  }
14906
- const Route$g = createFileRoute("/api/knowledge/candidates")({
14925
+ const Route$m = createFileRoute("/api/knowledge/candidates")({
14907
14926
  server: {
14908
14927
  handlers: {
14909
14928
  GET: () => Response.json({ candidates: listCandidates() })
@@ -14938,7 +14957,7 @@ function readDeleteEvidenceFlag(request) {
14938
14957
  return { ok: false };
14939
14958
  }
14940
14959
  }
14941
- const Route$f = createFileRoute("/api/groups/$groupId")({
14960
+ const Route$l = createFileRoute("/api/groups/$groupId")({
14942
14961
  server: {
14943
14962
  handlers: {
14944
14963
  GET: ({ params }) => {
@@ -14985,6 +15004,16 @@ const Route$f = createFileRoute("/api/groups/$groupId")({
14985
15004
  }
14986
15005
  }
14987
15006
  });
15007
+ function platformCommand(command, args, platform = process.platform) {
15008
+ if (platform !== "win32") return { command, args: [...args] };
15009
+ return { command: "cmd.exe", args: ["/d", "/s", "/c", command, ...args] };
15010
+ }
15011
+ function npmCommand(platform = process.platform) {
15012
+ return platform === "win32" ? "npm.cmd" : "npm";
15013
+ }
15014
+ function npmSpawnCommand(args, platform = process.platform) {
15015
+ return platformCommand(npmCommand(platform), args, platform);
15016
+ }
14988
15017
  const ECOSYSTEM_PACKAGES = [
14989
15018
  {
14990
15019
  id: "inspector",
@@ -15065,15 +15094,13 @@ const RUNNER_PRESETS = [
15065
15094
  }
15066
15095
  ];
15067
15096
  const NPM_TIMEOUT_MS = 4e3;
15068
- function npmCommand() {
15069
- return process.platform === "win32" ? "npm.cmd" : "npm";
15070
- }
15071
15097
  function runNpm(args) {
15072
15098
  return new Promise((resolve2) => {
15099
+ const command = npmSpawnCommand(args);
15073
15100
  try {
15074
15101
  execFile(
15075
- npmCommand(),
15076
- [...args],
15102
+ command.command,
15103
+ command.args,
15077
15104
  { timeout: NPM_TIMEOUT_MS, windowsHide: true },
15078
15105
  (error, stdout) => {
15079
15106
  resolve2({
@@ -15175,7 +15202,138 @@ async function listEcosystemPackages() {
15175
15202
  ECOSYSTEM_PACKAGES.map((definition) => describePackage(definition, globalRoot))
15176
15203
  );
15177
15204
  }
15178
- const Route$e = createFileRoute("/api/ecosystem/packages")({
15205
+ function findEcosystemPackage(packageId) {
15206
+ return ECOSYSTEM_PACKAGES.find((definition) => definition.id === packageId) ?? null;
15207
+ }
15208
+ const MAX_TASKS = 50;
15209
+ const OUTPUT_LIMIT = 4e4;
15210
+ const INSTALL_TIMEOUT_MS = 12e4;
15211
+ const HELP_TIMEOUT_MS = 3e4;
15212
+ const tasks = /* @__PURE__ */ new Map();
15213
+ function nowIso() {
15214
+ return (/* @__PURE__ */ new Date()).toISOString();
15215
+ }
15216
+ function trimOutput(output) {
15217
+ if (output.length <= OUTPUT_LIMIT) return output;
15218
+ return output.slice(output.length - OUTPUT_LIMIT);
15219
+ }
15220
+ function appendTaskOutput(task, chunk) {
15221
+ task.output = trimOutput(`${task.output}${chunk}`);
15222
+ }
15223
+ function rememberTask(task) {
15224
+ tasks.set(task.id, task);
15225
+ while (tasks.size > MAX_TASKS) {
15226
+ const oldest = tasks.keys().next().value;
15227
+ if (typeof oldest !== "string") return;
15228
+ tasks.delete(oldest);
15229
+ }
15230
+ }
15231
+ function packageActionArgs(action, npmName) {
15232
+ switch (action) {
15233
+ case "install":
15234
+ case "upgrade":
15235
+ return ["install", "-g", npmName];
15236
+ case "help":
15237
+ return ["exec", "--yes", npmName, "--", "--help"];
15238
+ case "runner-presets":
15239
+ return ["exec", "--yes", "@tonyclaw/eval-harness", "--", "runner-presets"];
15240
+ }
15241
+ }
15242
+ function packageActionTimeout(action) {
15243
+ switch (action) {
15244
+ case "install":
15245
+ case "upgrade":
15246
+ return INSTALL_TIMEOUT_MS;
15247
+ case "help":
15248
+ case "runner-presets":
15249
+ return HELP_TIMEOUT_MS;
15250
+ }
15251
+ }
15252
+ function taskCommand(args) {
15253
+ return `${npmCommand()} ${args.join(" ")}`;
15254
+ }
15255
+ function completeTask(task, status, exitCode, error) {
15256
+ task.status = status;
15257
+ task.exitCode = exitCode;
15258
+ task.error = error;
15259
+ task.finishedAt = nowIso();
15260
+ }
15261
+ function getEcosystemTask(taskId) {
15262
+ return tasks.get(taskId) ?? null;
15263
+ }
15264
+ function listEcosystemTasks() {
15265
+ return [...tasks.values()].sort((left, right) => right.createdAt.localeCompare(left.createdAt));
15266
+ }
15267
+ function startEcosystemTask(packageId, action) {
15268
+ const definition = action === "runner-presets" ? findEcosystemPackage("eval-harness") : findEcosystemPackage(packageId);
15269
+ if (definition === null) return null;
15270
+ if (action === "runner-presets" && packageId !== "eval-harness") return null;
15271
+ const args = packageActionArgs(action, definition.npmName);
15272
+ const task = {
15273
+ id: randomUUID(),
15274
+ packageId: definition.id,
15275
+ npmName: definition.npmName,
15276
+ action,
15277
+ status: "queued",
15278
+ command: taskCommand(args),
15279
+ output: "",
15280
+ createdAt: nowIso(),
15281
+ startedAt: null,
15282
+ finishedAt: null,
15283
+ exitCode: null,
15284
+ error: null
15285
+ };
15286
+ rememberTask(task);
15287
+ const spawnCommand = npmSpawnCommand(args);
15288
+ const child = spawn(spawnCommand.command, spawnCommand.args, {
15289
+ windowsHide: true,
15290
+ shell: false,
15291
+ stdio: ["ignore", "pipe", "pipe"]
15292
+ });
15293
+ const timeout = setTimeout(() => {
15294
+ child.kill();
15295
+ appendTaskOutput(task, `
15296
+ Timed out after ${String(packageActionTimeout(action) / 1e3)}s.
15297
+ `);
15298
+ }, packageActionTimeout(action));
15299
+ task.status = "running";
15300
+ task.startedAt = nowIso();
15301
+ appendTaskOutput(task, `$ ${task.command}
15302
+ `);
15303
+ child.stdout.on("data", (chunk) => {
15304
+ appendTaskOutput(task, chunk.toString("utf8"));
15305
+ });
15306
+ child.stderr.on("data", (chunk) => {
15307
+ appendTaskOutput(task, chunk.toString("utf8"));
15308
+ });
15309
+ child.on("error", (error) => {
15310
+ clearTimeout(timeout);
15311
+ appendTaskOutput(task, `
15312
+ ${error.message}
15313
+ `);
15314
+ completeTask(task, "failed", null, error.message);
15315
+ });
15316
+ child.on("close", (code) => {
15317
+ clearTimeout(timeout);
15318
+ if (task.status === "failed") return;
15319
+ if (code === 0) {
15320
+ completeTask(task, "succeeded", code, null);
15321
+ return;
15322
+ }
15323
+ completeTask(task, "failed", code, `Command exited with code ${String(code ?? "unknown")}`);
15324
+ });
15325
+ return task;
15326
+ }
15327
+ const Route$k = createFileRoute("/api/ecosystem/tasks")({
15328
+ server: {
15329
+ handlers: {
15330
+ GET: () => {
15331
+ return Response.json({ tasks: listEcosystemTasks() });
15332
+ }
15333
+ }
15334
+ }
15335
+ });
15336
+ const Route$j = createFileRoute("/api/ecosystem/packages")({
15179
15337
  server: {
15180
15338
  handlers: {
15181
15339
  GET: async () => {
@@ -15188,7 +15346,7 @@ const Route$e = createFileRoute("/api/ecosystem/packages")({
15188
15346
  }
15189
15347
  }
15190
15348
  });
15191
- const Route$d = createFileRoute("/api/config/paths")({
15349
+ const Route$i = createFileRoute("/api/config/paths")({
15192
15350
  server: {
15193
15351
  handlers: {
15194
15352
  GET: () => {
@@ -15205,7 +15363,7 @@ function parsePositiveInt(value) {
15205
15363
  if (!Number.isInteger(parsed) || parsed < 1) return void 0;
15206
15364
  return parsed;
15207
15365
  }
15208
- const Route$c = createFileRoute("/api/alerts/summary")({
15366
+ const Route$h = createFileRoute("/api/alerts/summary")({
15209
15367
  server: {
15210
15368
  handlers: {
15211
15369
  GET: async ({ request }) => {
@@ -15228,7 +15386,7 @@ async function readJsonBody$2(request) {
15228
15386
  return { ok: false };
15229
15387
  }
15230
15388
  }
15231
- const Route$b = createFileRoute("/api/runs/$runId/evidence")({
15389
+ const Route$g = createFileRoute("/api/runs/$runId/evidence")({
15232
15390
  server: {
15233
15391
  handlers: {
15234
15392
  GET: ({ params }) => {
@@ -15958,7 +16116,7 @@ async function testStreamingEndpoint(baseUrl, provider, path2, model, protocol)
15958
16116
  clearTimeout(timeoutId);
15959
16117
  }
15960
16118
  }
15961
- const Route$a = createFileRoute("/api/providers/$providerId/test")({
16119
+ const Route$f = createFileRoute("/api/providers/$providerId/test")({
15962
16120
  server: {
15963
16121
  handlers: {
15964
16122
  POST: async ({ params }) => {
@@ -16003,9 +16161,9 @@ const Route$a = createFileRoute("/api/providers/$providerId/test")({
16003
16161
  openaiChat: { nonStreaming: notConfigured, streaming: notConfigured },
16004
16162
  openaiResponses: { nonStreaming: notConfigured, streaming: notConfigured }
16005
16163
  };
16006
- const tasks = [];
16164
+ const tasks2 = [];
16007
16165
  if (anthropicUrl !== void 0) {
16008
- tasks.push(
16166
+ tasks2.push(
16009
16167
  testEndpoint(anthropicUrl, p, "/v1/messages", usageModel, "anthropic").then((r) => {
16010
16168
  modelResults.anthropic.nonStreaming = r;
16011
16169
  }),
@@ -16017,7 +16175,7 @@ const Route$a = createFileRoute("/api/providers/$providerId/test")({
16017
16175
  );
16018
16176
  }
16019
16177
  if (openaiUrl !== void 0) {
16020
- tasks.push(
16178
+ tasks2.push(
16021
16179
  testEndpoint(openaiUrl, p, "/v1/chat/completions", usageModel, "openaiChat").then(
16022
16180
  (r) => {
16023
16181
  modelResults.openai.nonStreaming = r;
@@ -16037,7 +16195,7 @@ const Route$a = createFileRoute("/api/providers/$providerId/test")({
16037
16195
  );
16038
16196
  }
16039
16197
  if (openaiResponsesUrl !== void 0) {
16040
- tasks.push(
16198
+ tasks2.push(
16041
16199
  testEndpoint(
16042
16200
  openaiResponsesUrl,
16043
16201
  p,
@@ -16058,7 +16216,7 @@ const Route$a = createFileRoute("/api/providers/$providerId/test")({
16058
16216
  })
16059
16217
  );
16060
16218
  }
16061
- await Promise.all(tasks);
16219
+ await Promise.all(tasks2);
16062
16220
  results.models[displayName] = modelResults;
16063
16221
  }
16064
16222
  await Promise.all(modelsToTest.map((displayName) => testOneModel(displayName)));
@@ -16099,7 +16257,7 @@ async function readRegistryJson(response) {
16099
16257
  return null;
16100
16258
  }
16101
16259
  }
16102
- const Route$9 = createFileRoute("/api/providers/$providerId/model-metadata")({
16260
+ const Route$e = createFileRoute("/api/providers/$providerId/model-metadata")({
16103
16261
  server: {
16104
16262
  handlers: {
16105
16263
  POST: async ({ params, request }) => {
@@ -16189,7 +16347,7 @@ const Route$9 = createFileRoute("/api/providers/$providerId/model-metadata")({
16189
16347
  const ReplayRequestSchema = object({
16190
16348
  modifiedBody: string()
16191
16349
  });
16192
- const Route$8 = createFileRoute("/api/logs/$id/replay")({
16350
+ const Route$d = createFileRoute("/api/logs/$id/replay")({
16193
16351
  server: {
16194
16352
  handlers: {
16195
16353
  POST: async ({ params, request }) => {
@@ -16390,7 +16548,7 @@ const Route$8 = createFileRoute("/api/logs/$id/replay")({
16390
16548
  }
16391
16549
  }
16392
16550
  });
16393
- const Route$7 = createFileRoute("/api/logs/$id/chunks")({
16551
+ const Route$c = createFileRoute("/api/logs/$id/chunks")({
16394
16552
  server: {
16395
16553
  handlers: {
16396
16554
  GET: async ({ params }) => {
@@ -16497,7 +16655,7 @@ function parseIntegerParam(value, fallback) {
16497
16655
  if (!Number.isInteger(parsed)) return fallback;
16498
16656
  return parsed;
16499
16657
  }
16500
- const Route$6 = createFileRoute("/api/logs/$id/body")({
16658
+ const Route$b = createFileRoute("/api/logs/$id/body")({
16501
16659
  server: {
16502
16660
  handlers: {
16503
16661
  GET: async ({ params, request }) => {
@@ -16535,7 +16693,7 @@ const CandidateUpdateSchema = object({
16535
16693
  object({
16536
16694
  candidate: KnowledgeCandidateSchema
16537
16695
  });
16538
- const Route$5 = createFileRoute("/api/knowledge/candidates/$candidateId")({
16696
+ const Route$a = createFileRoute("/api/knowledge/candidates/$candidateId")({
16539
16697
  server: {
16540
16698
  handlers: {
16541
16699
  PATCH: async ({ params, request }) => {
@@ -16572,7 +16730,7 @@ async function readJsonBody$1(request) {
16572
16730
  return { ok: false };
16573
16731
  }
16574
16732
  }
16575
- const Route$4 = createFileRoute("/api/groups/$groupId/sessions")({
16733
+ const Route$9 = createFileRoute("/api/groups/$groupId/sessions")({
16576
16734
  server: {
16577
16735
  handlers: {
16578
16736
  GET: ({ params }) => {
@@ -16612,7 +16770,7 @@ async function readJsonBody(request) {
16612
16770
  return { ok: false };
16613
16771
  }
16614
16772
  }
16615
- const Route$3 = createFileRoute("/api/groups/$groupId/evidence")({
16773
+ const Route$8 = createFileRoute("/api/groups/$groupId/evidence")({
16616
16774
  server: {
16617
16775
  handlers: {
16618
16776
  GET: ({ params }) => {
@@ -16647,6 +16805,19 @@ const Route$3 = createFileRoute("/api/groups/$groupId/evidence")({
16647
16805
  }
16648
16806
  }
16649
16807
  });
16808
+ const Route$7 = createFileRoute("/api/ecosystem/tasks/$taskId")({
16809
+ server: {
16810
+ handlers: {
16811
+ GET: ({ params }) => {
16812
+ const task = getEcosystemTask(params.taskId);
16813
+ if (task === null) {
16814
+ return Response.json({ error: "Unknown ecosystem task" }, { status: 404 });
16815
+ }
16816
+ return Response.json({ task });
16817
+ }
16818
+ }
16819
+ }
16820
+ });
16650
16821
  const ProviderTestErrorTypeSchema = _enum([
16651
16822
  "timeout",
16652
16823
  "network_unreachable",
@@ -17002,7 +17173,7 @@ async function logModelResults(displayName, providerName, providerSessionId, ant
17002
17173
  }
17003
17174
  }
17004
17175
  }
17005
- const Route$2 = createFileRoute("/api/providers/$providerId/test/log")({
17176
+ const Route$6 = createFileRoute("/api/providers/$providerId/test/log")({
17006
17177
  server: {
17007
17178
  handlers: {
17008
17179
  POST: async ({ params, request }) => {
@@ -17142,7 +17313,7 @@ function getLogsForCandidateScope(scopeId) {
17142
17313
  if (direct.length > 0) return direct;
17143
17314
  return getFilteredLogs().filter((log) => getCandidateScopeId(log) === scopeId);
17144
17315
  }
17145
- const Route$1 = createFileRoute("/api/knowledge/sessions/$sessionId/candidates")({
17316
+ const Route$5 = createFileRoute("/api/knowledge/sessions/$sessionId/candidates")({
17146
17317
  server: {
17147
17318
  handlers: {
17148
17319
  POST: ({ params }) => {
@@ -17153,7 +17324,7 @@ const Route$1 = createFileRoute("/api/knowledge/sessions/$sessionId/candidates")
17153
17324
  }
17154
17325
  }
17155
17326
  });
17156
- const Route = createFileRoute("/api/knowledge/candidates/$candidateId/promote")({
17327
+ const Route$4 = createFileRoute("/api/knowledge/candidates/$candidateId/promote")({
17157
17328
  server: {
17158
17329
  handlers: {
17159
17330
  POST: async ({ params }) => {
@@ -17175,206 +17346,291 @@ const Route = createFileRoute("/api/knowledge/candidates/$candidateId/promote")(
17175
17346
  }
17176
17347
  }
17177
17348
  });
17178
- const IndexRoute = Route$D.update({
17349
+ const Route$3 = createFileRoute("/api/ecosystem/packages/$packageId/upgrade")({
17350
+ server: {
17351
+ handlers: {
17352
+ POST: ({ params }) => {
17353
+ const task = startEcosystemTask(params.packageId, "upgrade");
17354
+ if (task === null) {
17355
+ return Response.json({ error: "Unknown ecosystem package" }, { status: 404 });
17356
+ }
17357
+ return Response.json({ task });
17358
+ }
17359
+ }
17360
+ }
17361
+ });
17362
+ const Route$2 = createFileRoute("/api/ecosystem/packages/$packageId/runner-presets")({
17363
+ server: {
17364
+ handlers: {
17365
+ POST: ({ params }) => {
17366
+ const task = startEcosystemTask(params.packageId, "runner-presets");
17367
+ if (task === null) {
17368
+ return Response.json(
17369
+ { error: "Runner presets are only available for Eval Harness" },
17370
+ { status: 404 }
17371
+ );
17372
+ }
17373
+ return Response.json({ task });
17374
+ }
17375
+ }
17376
+ }
17377
+ });
17378
+ const Route$1 = createFileRoute("/api/ecosystem/packages/$packageId/install")({
17379
+ server: {
17380
+ handlers: {
17381
+ POST: ({ params }) => {
17382
+ const task = startEcosystemTask(params.packageId, "install");
17383
+ if (task === null) {
17384
+ return Response.json({ error: "Unknown ecosystem package" }, { status: 404 });
17385
+ }
17386
+ return Response.json({ task });
17387
+ }
17388
+ }
17389
+ }
17390
+ });
17391
+ const Route = createFileRoute("/api/ecosystem/packages/$packageId/help")({
17392
+ server: {
17393
+ handlers: {
17394
+ POST: ({ params }) => {
17395
+ const task = startEcosystemTask(params.packageId, "help");
17396
+ if (task === null) {
17397
+ return Response.json({ error: "Unknown ecosystem package" }, { status: 404 });
17398
+ }
17399
+ return Response.json({ task });
17400
+ }
17401
+ }
17402
+ }
17403
+ });
17404
+ const IndexRoute = Route$J.update({
17179
17405
  id: "/",
17180
17406
  path: "/",
17181
- getParentRoute: () => Route$E
17407
+ getParentRoute: () => Route$K
17182
17408
  });
17183
- const SessionSessionIdRoute = Route$C.update({
17409
+ const SessionSessionIdRoute = Route$I.update({
17184
17410
  id: "/session/$sessionId",
17185
17411
  path: "/session/$sessionId",
17186
- getParentRoute: () => Route$E
17412
+ getParentRoute: () => Route$K
17187
17413
  });
17188
- const ProxySplatRoute = Route$B.update({
17414
+ const ProxySplatRoute = Route$H.update({
17189
17415
  id: "/proxy/$",
17190
17416
  path: "/proxy/$",
17191
- getParentRoute: () => Route$E
17417
+ getParentRoute: () => Route$K
17192
17418
  });
17193
- const ApiSessionsRoute = Route$A.update({
17419
+ const ApiSessionsRoute = Route$G.update({
17194
17420
  id: "/api/sessions",
17195
17421
  path: "/api/sessions",
17196
- getParentRoute: () => Route$E
17422
+ getParentRoute: () => Route$K
17197
17423
  });
17198
- const ApiRunsRoute = Route$z.update({
17424
+ const ApiRunsRoute = Route$F.update({
17199
17425
  id: "/api/runs",
17200
17426
  path: "/api/runs",
17201
- getParentRoute: () => Route$E
17427
+ getParentRoute: () => Route$K
17202
17428
  });
17203
- const ApiProvidersRoute = Route$y.update({
17429
+ const ApiProvidersRoute = Route$E.update({
17204
17430
  id: "/api/providers",
17205
17431
  path: "/api/providers",
17206
- getParentRoute: () => Route$E
17432
+ getParentRoute: () => Route$K
17207
17433
  });
17208
- const ApiModelsRoute = Route$x.update({
17434
+ const ApiModelsRoute = Route$D.update({
17209
17435
  id: "/api/models",
17210
17436
  path: "/api/models",
17211
- getParentRoute: () => Route$E
17437
+ getParentRoute: () => Route$K
17212
17438
  });
17213
- const ApiMcpRoute = Route$w.update({
17439
+ const ApiMcpRoute = Route$C.update({
17214
17440
  id: "/api/mcp",
17215
17441
  path: "/api/mcp",
17216
- getParentRoute: () => Route$E
17442
+ getParentRoute: () => Route$K
17217
17443
  });
17218
- const ApiLogsRoute = Route$v.update({
17444
+ const ApiLogsRoute = Route$B.update({
17219
17445
  id: "/api/logs",
17220
17446
  path: "/api/logs",
17221
- getParentRoute: () => Route$E
17447
+ getParentRoute: () => Route$K
17222
17448
  });
17223
- const ApiHealthRoute = Route$u.update({
17449
+ const ApiHealthRoute = Route$A.update({
17224
17450
  id: "/api/health",
17225
17451
  path: "/api/health",
17226
- getParentRoute: () => Route$E
17452
+ getParentRoute: () => Route$K
17227
17453
  });
17228
- const ApiGroupsRoute = Route$t.update({
17454
+ const ApiGroupsRoute = Route$z.update({
17229
17455
  id: "/api/groups",
17230
17456
  path: "/api/groups",
17231
- getParentRoute: () => Route$E
17457
+ getParentRoute: () => Route$K
17232
17458
  });
17233
- const ApiConfigRoute = Route$s.update({
17459
+ const ApiConfigRoute = Route$y.update({
17234
17460
  id: "/api/config",
17235
17461
  path: "/api/config",
17236
- getParentRoute: () => Route$E
17462
+ getParentRoute: () => Route$K
17237
17463
  });
17238
- const ApiAlertsRoute = Route$r.update({
17464
+ const ApiAlertsRoute = Route$x.update({
17239
17465
  id: "/api/alerts",
17240
17466
  path: "/api/alerts",
17241
- getParentRoute: () => Route$E
17467
+ getParentRoute: () => Route$K
17242
17468
  });
17243
- const ApiRunsRunIdRoute = Route$q.update({
17469
+ const ApiRunsRunIdRoute = Route$w.update({
17244
17470
  id: "/$runId",
17245
17471
  path: "/$runId",
17246
17472
  getParentRoute: () => ApiRunsRoute
17247
17473
  });
17248
- const ApiProvidersScanRoute = Route$p.update({
17474
+ const ApiProvidersScanRoute = Route$v.update({
17249
17475
  id: "/scan",
17250
17476
  path: "/scan",
17251
17477
  getParentRoute: () => ApiProvidersRoute
17252
17478
  });
17253
- const ApiProvidersImportRoute = Route$o.update({
17479
+ const ApiProvidersImportRoute = Route$u.update({
17254
17480
  id: "/import",
17255
17481
  path: "/import",
17256
17482
  getParentRoute: () => ApiProvidersRoute
17257
17483
  });
17258
- const ApiProvidersExportRoute = Route$n.update({
17484
+ const ApiProvidersExportRoute = Route$t.update({
17259
17485
  id: "/export",
17260
17486
  path: "/export",
17261
17487
  getParentRoute: () => ApiProvidersRoute
17262
17488
  });
17263
- const ApiProvidersProviderIdRoute = Route$m.update({
17489
+ const ApiProvidersProviderIdRoute = Route$s.update({
17264
17490
  id: "/$providerId",
17265
17491
  path: "/$providerId",
17266
17492
  getParentRoute: () => ApiProvidersRoute
17267
17493
  });
17268
- const ApiLogsStreamRoute = Route$l.update({
17494
+ const ApiLogsStreamRoute = Route$r.update({
17269
17495
  id: "/stream",
17270
17496
  path: "/stream",
17271
17497
  getParentRoute: () => ApiLogsRoute
17272
17498
  });
17273
- const ApiLogsImportRoute = Route$k.update({
17499
+ const ApiLogsImportRoute = Route$q.update({
17274
17500
  id: "/import",
17275
17501
  path: "/import",
17276
17502
  getParentRoute: () => ApiLogsRoute
17277
17503
  });
17278
- const ApiLogsIdRoute = Route$j.update({
17504
+ const ApiLogsIdRoute = Route$p.update({
17279
17505
  id: "/$id",
17280
17506
  path: "/$id",
17281
17507
  getParentRoute: () => ApiLogsRoute
17282
17508
  });
17283
- const ApiKnowledgeSearchRoute = Route$i.update({
17509
+ const ApiKnowledgeSearchRoute = Route$o.update({
17284
17510
  id: "/api/knowledge/search",
17285
17511
  path: "/api/knowledge/search",
17286
- getParentRoute: () => Route$E
17512
+ getParentRoute: () => Route$K
17287
17513
  });
17288
- const ApiKnowledgeProjectContextRoute = Route$h.update({
17514
+ const ApiKnowledgeProjectContextRoute = Route$n.update({
17289
17515
  id: "/api/knowledge/project-context",
17290
17516
  path: "/api/knowledge/project-context",
17291
- getParentRoute: () => Route$E
17517
+ getParentRoute: () => Route$K
17292
17518
  });
17293
- const ApiKnowledgeCandidatesRoute = Route$g.update({
17519
+ const ApiKnowledgeCandidatesRoute = Route$m.update({
17294
17520
  id: "/api/knowledge/candidates",
17295
17521
  path: "/api/knowledge/candidates",
17296
- getParentRoute: () => Route$E
17522
+ getParentRoute: () => Route$K
17297
17523
  });
17298
- const ApiGroupsGroupIdRoute = Route$f.update({
17524
+ const ApiGroupsGroupIdRoute = Route$l.update({
17299
17525
  id: "/$groupId",
17300
17526
  path: "/$groupId",
17301
17527
  getParentRoute: () => ApiGroupsRoute
17302
17528
  });
17303
- const ApiEcosystemPackagesRoute = Route$e.update({
17529
+ const ApiEcosystemTasksRoute = Route$k.update({
17530
+ id: "/api/ecosystem/tasks",
17531
+ path: "/api/ecosystem/tasks",
17532
+ getParentRoute: () => Route$K
17533
+ });
17534
+ const ApiEcosystemPackagesRoute = Route$j.update({
17304
17535
  id: "/api/ecosystem/packages",
17305
17536
  path: "/api/ecosystem/packages",
17306
- getParentRoute: () => Route$E
17537
+ getParentRoute: () => Route$K
17307
17538
  });
17308
- const ApiConfigPathsRoute = Route$d.update({
17539
+ const ApiConfigPathsRoute = Route$i.update({
17309
17540
  id: "/paths",
17310
17541
  path: "/paths",
17311
17542
  getParentRoute: () => ApiConfigRoute
17312
17543
  });
17313
- const ApiAlertsSummaryRoute = Route$c.update({
17544
+ const ApiAlertsSummaryRoute = Route$h.update({
17314
17545
  id: "/summary",
17315
17546
  path: "/summary",
17316
17547
  getParentRoute: () => ApiAlertsRoute
17317
17548
  });
17318
- const ApiRunsRunIdEvidenceRoute = Route$b.update({
17549
+ const ApiRunsRunIdEvidenceRoute = Route$g.update({
17319
17550
  id: "/evidence",
17320
17551
  path: "/evidence",
17321
17552
  getParentRoute: () => ApiRunsRunIdRoute
17322
17553
  });
17323
- const ApiProvidersProviderIdTestRoute = Route$a.update({
17554
+ const ApiProvidersProviderIdTestRoute = Route$f.update({
17324
17555
  id: "/test",
17325
17556
  path: "/test",
17326
17557
  getParentRoute: () => ApiProvidersProviderIdRoute
17327
17558
  });
17328
- const ApiProvidersProviderIdModelMetadataRoute = Route$9.update({
17559
+ const ApiProvidersProviderIdModelMetadataRoute = Route$e.update({
17329
17560
  id: "/model-metadata",
17330
17561
  path: "/model-metadata",
17331
17562
  getParentRoute: () => ApiProvidersProviderIdRoute
17332
17563
  });
17333
- const ApiLogsIdReplayRoute = Route$8.update({
17564
+ const ApiLogsIdReplayRoute = Route$d.update({
17334
17565
  id: "/replay",
17335
17566
  path: "/replay",
17336
17567
  getParentRoute: () => ApiLogsIdRoute
17337
17568
  });
17338
- const ApiLogsIdChunksRoute = Route$7.update({
17569
+ const ApiLogsIdChunksRoute = Route$c.update({
17339
17570
  id: "/chunks",
17340
17571
  path: "/chunks",
17341
17572
  getParentRoute: () => ApiLogsIdRoute
17342
17573
  });
17343
- const ApiLogsIdBodyRoute = Route$6.update({
17574
+ const ApiLogsIdBodyRoute = Route$b.update({
17344
17575
  id: "/body",
17345
17576
  path: "/body",
17346
17577
  getParentRoute: () => ApiLogsIdRoute
17347
17578
  });
17348
- const ApiKnowledgeCandidatesCandidateIdRoute = Route$5.update({
17579
+ const ApiKnowledgeCandidatesCandidateIdRoute = Route$a.update({
17349
17580
  id: "/$candidateId",
17350
17581
  path: "/$candidateId",
17351
17582
  getParentRoute: () => ApiKnowledgeCandidatesRoute
17352
17583
  });
17353
- const ApiGroupsGroupIdSessionsRoute = Route$4.update({
17584
+ const ApiGroupsGroupIdSessionsRoute = Route$9.update({
17354
17585
  id: "/sessions",
17355
17586
  path: "/sessions",
17356
17587
  getParentRoute: () => ApiGroupsGroupIdRoute
17357
17588
  });
17358
- const ApiGroupsGroupIdEvidenceRoute = Route$3.update({
17589
+ const ApiGroupsGroupIdEvidenceRoute = Route$8.update({
17359
17590
  id: "/evidence",
17360
17591
  path: "/evidence",
17361
17592
  getParentRoute: () => ApiGroupsGroupIdRoute
17362
17593
  });
17363
- const ApiProvidersProviderIdTestLogRoute = Route$2.update({
17594
+ const ApiEcosystemTasksTaskIdRoute = Route$7.update({
17595
+ id: "/$taskId",
17596
+ path: "/$taskId",
17597
+ getParentRoute: () => ApiEcosystemTasksRoute
17598
+ });
17599
+ const ApiProvidersProviderIdTestLogRoute = Route$6.update({
17364
17600
  id: "/log",
17365
17601
  path: "/log",
17366
17602
  getParentRoute: () => ApiProvidersProviderIdTestRoute
17367
17603
  });
17368
- const ApiKnowledgeSessionsSessionIdCandidatesRoute = Route$1.update({
17604
+ const ApiKnowledgeSessionsSessionIdCandidatesRoute = Route$5.update({
17369
17605
  id: "/api/knowledge/sessions/$sessionId/candidates",
17370
17606
  path: "/api/knowledge/sessions/$sessionId/candidates",
17371
- getParentRoute: () => Route$E
17607
+ getParentRoute: () => Route$K
17372
17608
  });
17373
- const ApiKnowledgeCandidatesCandidateIdPromoteRoute = Route.update({
17609
+ const ApiKnowledgeCandidatesCandidateIdPromoteRoute = Route$4.update({
17374
17610
  id: "/promote",
17375
17611
  path: "/promote",
17376
17612
  getParentRoute: () => ApiKnowledgeCandidatesCandidateIdRoute
17377
17613
  });
17614
+ const ApiEcosystemPackagesPackageIdUpgradeRoute = Route$3.update({
17615
+ id: "/$packageId/upgrade",
17616
+ path: "/$packageId/upgrade",
17617
+ getParentRoute: () => ApiEcosystemPackagesRoute
17618
+ });
17619
+ const ApiEcosystemPackagesPackageIdRunnerPresetsRoute = Route$2.update({
17620
+ id: "/$packageId/runner-presets",
17621
+ path: "/$packageId/runner-presets",
17622
+ getParentRoute: () => ApiEcosystemPackagesRoute
17623
+ });
17624
+ const ApiEcosystemPackagesPackageIdInstallRoute = Route$1.update({
17625
+ id: "/$packageId/install",
17626
+ path: "/$packageId/install",
17627
+ getParentRoute: () => ApiEcosystemPackagesRoute
17628
+ });
17629
+ const ApiEcosystemPackagesPackageIdHelpRoute = Route.update({
17630
+ id: "/$packageId/help",
17631
+ path: "/$packageId/help",
17632
+ getParentRoute: () => ApiEcosystemPackagesRoute
17633
+ });
17378
17634
  const ApiAlertsRouteChildren = {
17379
17635
  ApiAlertsSummaryRoute
17380
17636
  };
@@ -17444,6 +17700,17 @@ const ApiRunsRouteChildren = {
17444
17700
  ApiRunsRunIdRoute: ApiRunsRunIdRouteWithChildren
17445
17701
  };
17446
17702
  const ApiRunsRouteWithChildren = ApiRunsRoute._addFileChildren(ApiRunsRouteChildren);
17703
+ const ApiEcosystemPackagesRouteChildren = {
17704
+ ApiEcosystemPackagesPackageIdHelpRoute,
17705
+ ApiEcosystemPackagesPackageIdInstallRoute,
17706
+ ApiEcosystemPackagesPackageIdRunnerPresetsRoute,
17707
+ ApiEcosystemPackagesPackageIdUpgradeRoute
17708
+ };
17709
+ const ApiEcosystemPackagesRouteWithChildren = ApiEcosystemPackagesRoute._addFileChildren(ApiEcosystemPackagesRouteChildren);
17710
+ const ApiEcosystemTasksRouteChildren = {
17711
+ ApiEcosystemTasksTaskIdRoute
17712
+ };
17713
+ const ApiEcosystemTasksRouteWithChildren = ApiEcosystemTasksRoute._addFileChildren(ApiEcosystemTasksRouteChildren);
17447
17714
  const ApiKnowledgeCandidatesCandidateIdRouteChildren = {
17448
17715
  ApiKnowledgeCandidatesCandidateIdPromoteRoute
17449
17716
  };
@@ -17470,13 +17737,14 @@ const rootRouteChildren = {
17470
17737
  ApiSessionsRoute,
17471
17738
  ProxySplatRoute,
17472
17739
  SessionSessionIdRoute,
17473
- ApiEcosystemPackagesRoute,
17740
+ ApiEcosystemPackagesRoute: ApiEcosystemPackagesRouteWithChildren,
17741
+ ApiEcosystemTasksRoute: ApiEcosystemTasksRouteWithChildren,
17474
17742
  ApiKnowledgeCandidatesRoute: ApiKnowledgeCandidatesRouteWithChildren,
17475
17743
  ApiKnowledgeProjectContextRoute,
17476
17744
  ApiKnowledgeSearchRoute,
17477
17745
  ApiKnowledgeSessionsSessionIdCandidatesRoute
17478
17746
  };
17479
- const routeTree = Route$E._addFileChildren(rootRouteChildren)._addFileTypes();
17747
+ const routeTree = Route$K._addFileChildren(rootRouteChildren)._addFileTypes();
17480
17748
  function getRouter() {
17481
17749
  const router2 = createRouter({
17482
17750
  routeTree,
@@ -17518,7 +17786,8 @@ export {
17518
17786
  router as N,
17519
17787
  OpenAIRequestSchema as O,
17520
17788
  ProviderConfigSchema as P,
17521
- Route$C as R,
17789
+ Route$I as R,
17790
+ StreamingChunkSchema$1 as S,
17522
17791
  TimeDisplayFormatSchema as T,
17523
17792
  DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS as a,
17524
17793
  DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS as b,