@inspectr/mcplab 1.31.0 → 1.32.0

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 (32) hide show
  1. package/dist/app/assets/index-CBxKXA35.js +267 -0
  2. package/dist/app/index.html +1 -1
  3. package/dist/app-server/evaluation-result-projection.d.ts.map +1 -1
  4. package/dist/app-server/evaluation-result-projection.js +5 -0
  5. package/dist/app-server/evaluation-result-projection.js.map +1 -1
  6. package/dist/app-server/inspectr-routes.d.ts +14 -0
  7. package/dist/app-server/inspectr-routes.d.ts.map +1 -0
  8. package/dist/app-server/inspectr-routes.js +35 -0
  9. package/dist/app-server/inspectr-routes.js.map +1 -0
  10. package/dist/app-server/inspectr-session-manager.d.ts +33 -34
  11. package/dist/app-server/inspectr-session-manager.d.ts.map +1 -1
  12. package/dist/app-server/inspectr-session-manager.js +70 -23
  13. package/dist/app-server/inspectr-session-manager.js.map +1 -1
  14. package/dist/app-server/router.d.ts.map +1 -1
  15. package/dist/app-server/router.js +32 -0
  16. package/dist/app-server/router.js.map +1 -1
  17. package/dist/app-server/run-queue-domain.d.ts +2 -0
  18. package/dist/app-server/run-queue-domain.d.ts.map +1 -1
  19. package/dist/app-server/run-queue-domain.js +2 -1
  20. package/dist/app-server/run-queue-domain.js.map +1 -1
  21. package/dist/app-server/run-queue-executor.d.ts +2 -0
  22. package/dist/app-server/run-queue-executor.d.ts.map +1 -1
  23. package/dist/app-server/run-queue-executor.js +67 -0
  24. package/dist/app-server/run-queue-executor.js.map +1 -1
  25. package/dist/app-server/runs-routes.d.ts +1 -0
  26. package/dist/app-server/runs-routes.d.ts.map +1 -1
  27. package/dist/app-server/runs-routes.js +1 -1
  28. package/dist/app-server/runs-routes.js.map +1 -1
  29. package/dist/cli.js +5 -0
  30. package/dist/cli.js.map +1 -1
  31. package/package.json +7 -4
  32. package/dist/app/assets/index-Cwogc_kk.js +0 -267
@@ -16,7 +16,7 @@
16
16
  <meta name="twitter:card" content="summary_large_image" />
17
17
  <meta name="twitter:site" content="@Inspectr" />
18
18
  <meta name="twitter:image" content="" />
19
- <script type="module" crossorigin src="/assets/index-Cwogc_kk.js"></script>
19
+ <script type="module" crossorigin src="/assets/index-CBxKXA35.js"></script>
20
20
  <link rel="stylesheet" crossorigin href="/assets/index-D5OYchKq.css">
21
21
  </head>
22
22
 
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation-result-projection.d.ts","sourceRoot":"","sources":["../../src/app-server/evaluation-result-projection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,uBAAuB,CAAC;AAErE,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,WAAW,CAmId"}
1
+ {"version":3,"file":"evaluation-result-projection.d.ts","sourceRoot":"","sources":["../../src/app-server/evaluation-result-projection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,uBAAuB,CAAC;AAErE,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,WAAW,CA0Id"}
@@ -37,6 +37,8 @@ export function projectEvaluationResult(params) {
37
37
  // Children share evaluation overrides, but Rover snapshots may omit them and
38
38
  // MCP snapshots contain only the overrides for their selected scenarios.
39
39
  const serverOverrideAll = executions.find((result) => (result.metadata.rerun_server_override_all?.length ?? 0) > 0)?.metadata.rerun_server_override_all;
40
+ // Trace URLs are keyed by per-run request IDs, so merging child executions cannot collide.
41
+ const langsmithTraceUrls = Object.fromEntries(executions.flatMap((result) => Object.entries(result.metadata.langsmith_trace_urls ?? {})));
40
42
  const scenarioServerOverrides = Object.fromEntries(executions.flatMap((result) => Object.entries(result.metadata.rerun_scenario_server_overrides ?? {})));
41
43
  const executionSources = new Set(executions.map((result) => result.metadata.execution_source).filter(Boolean));
42
44
  const executionClients = new Set(executions.map((result) => result.metadata.execution_client).filter(Boolean));
@@ -85,6 +87,9 @@ export function projectEvaluationResult(params) {
85
87
  sourceMetadata?.config_name ||
86
88
  `Evaluation ${params.evaluationRunId}`,
87
89
  ...(params.runNote?.trim() ? { run_note: params.runNote.trim() } : {}),
90
+ ...(Object.keys(langsmithTraceUrls).length > 0
91
+ ? { langsmith_trace_urls: langsmithTraceUrls }
92
+ : {}),
88
93
  ...(rerunAgents.length > 0 ? { rerun_agents: rerunAgents } : {}),
89
94
  ...(rerunScenarioIds.length > 0 ? { rerun_scenario_ids: rerunScenarioIds } : {}),
90
95
  ...(serverOverrideAll ? { rerun_server_override_all: [...serverOverrideAll] } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation-result-projection.js","sourceRoot":"","sources":["../../src/app-server/evaluation-result-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluation-result-projection.js","sourceRoot":"","sources":["../../src/app-server/evaluation-result-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,MAQvC;IACC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC;IACxD,MAAM,SAAS,GACb,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,gBAAgB;QAChB,iBAAiB,CAAC;IACpB,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EACrD,CAAC,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,KAAuD,EAAiB,EAAE;QAC1F,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,IAAI,KAAK,KAAK,qBAAqB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3F,OAAO,CACL,UAAU,CAAC,MAAM,CACf,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAC/E,CAAC,CACF,GAAG,SAAS,CACd,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,QAAQ,GAAwC;QACpD,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAiB,EAAE,CAAC;YAC5D,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;IACpD,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CACjF,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAC5E,CAAC;IACF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CACjC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAClF,CAAC;IACF,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CACvC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CACzE,EAAE,QAAQ,CAAC,yBAAyB,CAAC;IACtC,2FAA2F;IAC3F,MAAM,kBAAkB,GAAG,MAAM,CAAC,WAAW,CAC3C,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAC3F,CAAC;IACF,MAAM,uBAAuB,GAAG,MAAM,CAAC,WAAW,CAChD,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,IAAI,EAAE,CAAC,CACtE,CACF,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC7E,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC7E,CAAC;IACF,MAAM,wBAAwB,GAAG,CAC/B,GAAyE,EACrD,EAAE;QACtB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CACjC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAChF,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAClE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC3D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAC9C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,IAAI,EAAE,CAC7C,EAAE,CAAC;YACF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;iBAC1E,IAAI,QAAQ,KAAK,OAAO;gBAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;IAC/E,MAAM,eAAe,GACnB,gBAAgB,CAAC,IAAI,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;YACzB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAC;IAClB,OAAO;QACL,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,KAAK;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,cAAc,EAAE,WAAW,IAAI,MAAM,CAAC,eAAe;YAClE,WAAW,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAClE,WAAW,EAAE,cAAc,EAAE,WAAW,IAAI,SAAS;YACrD,mBAAmB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;YAC1D,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;gBAC7B,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,EAAE;gBAChE,CAAC,CAAC,EAAE,CAAC;YACP,WAAW,EACT,MAAM,CAAC,cAAc;gBACrB,cAAc,EAAE,WAAW;gBAC3B,cAAc,MAAM,CAAC,eAAe,EAAE;YACxC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC5C,CAAC,CAAC,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,GAAG,CAAC;gBACjD,CAAC,CAAC,EAAE,+BAA+B,EAAE,uBAAuB,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,iBAAiB,EAAE,MAAM,CAAC,KAAK;SAChC;QACD,OAAO,EAAE;YACP,eAAe,EAAE,cAAc;YAC/B,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;YAC/E,sBAAsB,EAAE,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC;YAC/D,mBAAmB,EAAE,QAAQ,CAAC,qBAAqB,CAAC;YACpD,QAAQ;SACT;QACD,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;KAC5D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { asJson as asJsonResponse, parseBody as parseRequestBody } from './http.js';
3
+ import type { InspectrSessionManager } from './inspectr-session-manager.js';
4
+ export declare function handleInspectrRoutes(params: {
5
+ req: IncomingMessage;
6
+ res: ServerResponse;
7
+ pathname: string;
8
+ method: string;
9
+ runsDir: string;
10
+ inspectrSessionManager: Pick<InspectrSessionManager, 'acquire'>;
11
+ parseBody: typeof parseRequestBody;
12
+ asJson: typeof asJsonResponse;
13
+ }): Promise<boolean>;
14
+ //# sourceMappingURL=inspectr-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectr-routes.d.ts","sourceRoot":"","sources":["../../src/app-server/inspectr-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,IAAI,cAAc,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAI5E,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,GAAG,EAAE,eAAe,CAAC;IACrB,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAChE,SAAS,EAAE,OAAO,gBAAgB,CAAC;IACnC,MAAM,EAAE,OAAO,cAAc,CAAC;CAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BnB"}
@@ -0,0 +1,35 @@
1
+ import { getRunResults } from './runs-store.js';
2
+ import { respondWithRunStoreError } from './runs-routes.js';
3
+ export async function handleInspectrRoutes(params) {
4
+ const { req, res, pathname, method, runsDir, inspectrSessionManager, parseBody, asJson } = params;
5
+ const match = pathname.match(/^\/api\/runs\/([^/]+)\/inspectr$/);
6
+ if (!match || method !== 'POST')
7
+ return false;
8
+ let recordedOrigins;
9
+ try {
10
+ const results = getRunResults(decodeURIComponent(match[1]), runsDir);
11
+ recordedOrigins = new Set(results.scenarios.flatMap((scenario) => scenario.inspectr_origins ?? []));
12
+ }
13
+ catch (error) {
14
+ if (!respondWithRunStoreError(res, asJson, error))
15
+ throw error;
16
+ return true;
17
+ }
18
+ // JSON bodies may be `null` or a non-object; treat anything without a string origin as missing.
19
+ const body = (await parseBody(req));
20
+ const origin = typeof body?.origin === 'string' ? body.origin : '';
21
+ // Only origins recorded on the run can be started, never arbitrary URLs from the client.
22
+ if (!recordedOrigins.has(origin)) {
23
+ asJson(res, 400, { error: 'origin was not inspected with Inspectr in this run' });
24
+ return true;
25
+ }
26
+ try {
27
+ const { upstreamOrigin, dashboardUrl } = await inspectrSessionManager.acquire(origin);
28
+ asJson(res, 200, { session: { upstreamOrigin, dashboardUrl } });
29
+ }
30
+ catch (error) {
31
+ asJson(res, 502, { error: error instanceof Error ? error.message : String(error) });
32
+ }
33
+ return true;
34
+ }
35
+ //# sourceMappingURL=inspectr-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectr-routes.js","sourceRoot":"","sources":["../../src/app-server/inspectr-routes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAS1C;IACC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAE9C,IAAI,eAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,eAAe,GAAG,IAAI,GAAG,CACvB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC,CACzE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,gGAAgG;IAChG,MAAM,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAgC,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,yFAAyF;IACzF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oDAAoD,EAAE,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,45 +1,44 @@
1
1
  import type { McpRequestHeaderContext } from '@inspectr/mcplab-core';
2
2
  export interface InspectrProxySession {
3
- upstreamOrigin: string;
4
- proxyOrigin: string;
5
- dashboardUrl: string;
3
+ upstreamOrigin: string;
4
+ proxyOrigin: string;
5
+ dashboardUrl: string;
6
6
  }
7
- export declare function buildInspectrRequestHeaders(
8
- context: McpRequestHeaderContext
9
- ): Record<string, string>;
7
+ export declare function buildInspectrRequestHeaders(context: McpRequestHeaderContext): Record<string, string>;
10
8
  interface InspectrChild {
11
- kill(signal?: NodeJS.Signals): boolean;
12
- once(event: string, listener: (...args: any[]) => void): this;
9
+ kill(signal?: NodeJS.Signals): boolean;
10
+ once(event: string, listener: (...args: any[]) => void): this;
13
11
  }
14
12
  interface InspectrSessionManagerOptions {
15
- storageRoot: string;
16
- commandPath?: string;
17
- log?: (message: string) => void;
18
- allocatePort?: () => Promise<number>;
19
- spawn?: (
20
- command: string,
21
- args: string[],
22
- options: {
23
- cwd: string;
24
- stdio: ['ignore', 'ignore', 'ignore'];
25
- }
26
- ) => InspectrChild;
27
- waitForReady?: (session: InspectrProxySession, child: InspectrChild) => Promise<void>;
13
+ storageRoot: string;
14
+ commandPath?: string;
15
+ log?: (message: string) => void;
16
+ /** Returns `count` distinct free local ports. */
17
+ allocatePorts?: (count: number) => Promise<number[]>;
18
+ spawn?: (command: string, args: string[], options: {
19
+ cwd: string;
20
+ stdio: ['ignore', 'ignore', 'ignore'];
21
+ }) => InspectrChild;
22
+ waitForReady?: (session: InspectrProxySession, child: InspectrChild) => Promise<void>;
28
23
  }
29
24
  export declare class InspectrSessionManager {
30
- private readonly storageRoot;
31
- private readonly commandPath;
32
- private readonly log;
33
- private readonly allocatePort;
34
- private readonly spawn;
35
- private readonly waitForReady;
36
- private readonly sessions;
37
- private readonly starting;
38
- constructor(options: InspectrSessionManagerOptions);
39
- acquire(serverUrl: string): Promise<InspectrProxySession>;
40
- closeAll(): Promise<void>;
41
- private start;
25
+ private readonly storageRoot;
26
+ private commandPath;
27
+ private readonly log;
28
+ private readonly allocatePorts;
29
+ private readonly spawn;
30
+ private readonly waitForReady;
31
+ private readonly sessions;
32
+ private readonly starting;
33
+ /** Every spawned process, including ones still starting, so shutdown can reach all of them. */
34
+ private readonly children;
35
+ constructor(options: InspectrSessionManagerOptions);
36
+ acquire(serverUrl: string): Promise<InspectrProxySession>;
37
+ /** Synchronously signals every running Inspectr process; safe to call from process exit hooks. */
38
+ stopAll(): void;
39
+ closeAll(): Promise<void>;
40
+ private start;
42
41
  }
43
42
  export declare function rewriteUrlThroughInspectr(serverUrl: string, proxyOrigin: string): string;
44
43
  export {};
45
- //# sourceMappingURL=inspectr-session-manager.d.ts.map
44
+ //# sourceMappingURL=inspectr-session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspectr-session-manager.d.ts","sourceRoot":"","sources":["../../src/app-server/inspectr-session-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAED,UAAU,aAAa;IACrB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAC/D;AAED,UAAU,6BAA6B;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;KAAE,KAC5D,aAAa,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAID,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsD;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6D;IAC1F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;gBAE3D,OAAO,EAAE,6BAA6B;IAS5C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAczD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAOjB,KAAK;CAiDpB;AA2BD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAGxF"}
1
+ {"version":3,"file":"inspectr-session-manager.d.ts","sourceRoot":"","sources":["../../src/app-server/inspectr-session-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB;AAED,UAAU,aAAa;IACrB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAC/D;AAED,UAAU,6BAA6B;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,iDAAiD;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;KAAE,KAC5D,aAAa,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAID,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsD;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6D;IAC1F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAErD,YAAY,OAAO,EAAE,6BAA6B,EAQjD;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAY9D;IAED,kGAAkG;IAClG,OAAO,IAAI,IAAI,CAKd;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9B;YAEa,KAAK;CA6DpB;AAiCD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAQxF"}
@@ -21,17 +21,20 @@ export class InspectrSessionManager {
21
21
  storageRoot;
22
22
  commandPath;
23
23
  log;
24
- allocatePort;
24
+ allocatePorts;
25
25
  spawn;
26
26
  waitForReady;
27
27
  sessions = new Map();
28
28
  starting = new Map();
29
+ /** Every spawned process, including ones still starting, so shutdown can reach all of them. */
30
+ children = new Set();
29
31
  constructor(options) {
30
32
  this.storageRoot = options.storageRoot;
31
- this.commandPath = options.commandPath ?? resolveInspectrCommand();
33
+ this.commandPath = options.commandPath;
32
34
  this.log = options.log ?? console.log;
33
- this.allocatePort = options.allocatePort ?? allocateFreePort;
34
- this.spawn = options.spawn ?? ((command, args, spawnOptions) => defaultSpawn(command, args, spawnOptions));
35
+ this.allocatePorts = options.allocatePorts ?? allocateFreePorts;
36
+ this.spawn =
37
+ options.spawn ?? ((command, args, spawnOptions) => defaultSpawn(command, args, spawnOptions));
35
38
  this.waitForReady = options.waitForReady ?? waitForPorts;
36
39
  }
37
40
  async acquire(serverUrl) {
@@ -48,6 +51,14 @@ export class InspectrSessionManager {
48
51
  this.starting.set(upstreamOrigin, promise);
49
52
  return promise;
50
53
  }
54
+ /** Synchronously signals every running Inspectr process; safe to call from process exit hooks. */
55
+ stopAll() {
56
+ const children = [...this.children];
57
+ this.children.clear();
58
+ this.sessions.clear();
59
+ for (const child of children)
60
+ child.kill('SIGTERM');
61
+ }
51
62
  async closeAll() {
52
63
  await Promise.allSettled(this.starting.values());
53
64
  const sessions = [...this.sessions.values()];
@@ -55,8 +66,7 @@ export class InspectrSessionManager {
55
66
  await Promise.all(sessions.map((session) => stopChild(session.child)));
56
67
  }
57
68
  async start(upstreamOrigin) {
58
- const proxyPort = await this.allocatePort();
59
- const dashboardPort = await this.allocatePort();
69
+ const [proxyPort, dashboardPort] = await this.allocatePorts(2);
60
70
  const cwd = join(this.storageRoot, originKey(upstreamOrigin));
61
71
  mkdirSync(cwd, { recursive: true });
62
72
  const channel = `mcplab-${originKey(upstreamOrigin)}`;
@@ -69,6 +79,8 @@ export class InspectrSessionManager {
69
79
  proxyOrigin: `http://127.0.0.1:${proxyPort}`,
70
80
  dashboardUrl: dashboardUrl.toString()
71
81
  };
82
+ // Resolved on first use so the app server starts even when Inspectr is not installed.
83
+ this.commandPath ??= resolveInspectrCommand();
72
84
  const child = this.spawn(this.commandPath, [
73
85
  `--listen=127.0.0.1:${proxyPort}`,
74
86
  `--app-port=${dashboardPort}`,
@@ -77,11 +89,20 @@ export class InspectrSessionManager {
77
89
  `--channel-code=${channelCode}`,
78
90
  '--print=false'
79
91
  ], { cwd, stdio: ['ignore', 'ignore', 'ignore'] });
92
+ this.children.add(child);
93
+ child.once('exit', () => this.children.delete(child));
94
+ let spawnError;
95
+ child.once('error', (error) => {
96
+ spawnError = error;
97
+ });
80
98
  try {
81
99
  await this.waitForReady(session, child);
82
100
  }
83
101
  catch (error) {
84
102
  await stopChild(child);
103
+ if (spawnError?.code === 'ENOENT') {
104
+ throw new Error('Inspectr is not installed. Install it with `npm install -g @inspectr/inspectr` or Homebrew, then try again.');
105
+ }
85
106
  throw new Error(`Inspectr failed to start for ${upstreamOrigin}: ${error instanceof Error ? error.message : String(error)}`);
86
107
  }
87
108
  this.log(`[mcplab-app] Inspectr started for ${session.upstreamOrigin}, proxy: ${session.proxyOrigin}, dashboard: ${session.dashboardUrl}`);
@@ -98,13 +119,20 @@ export class InspectrSessionManager {
98
119
  return managed;
99
120
  }
100
121
  }
122
+ /** Prefers the optional @inspectr/inspectr dependency, else an `inspectr` on PATH. */
101
123
  function resolveInspectrCommand() {
102
124
  const require = createRequire(import.meta.url);
103
- const packageJsonPath = require.resolve('@inspectr/inspectr/package.json');
125
+ let packageJsonPath;
126
+ try {
127
+ packageJsonPath = require.resolve('@inspectr/inspectr/package.json');
128
+ }
129
+ catch {
130
+ return 'inspectr';
131
+ }
104
132
  const manifest = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
105
133
  const bin = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.inspectr;
106
134
  if (!bin)
107
- throw new Error('Installed @inspectr/inspectr package has no inspectr executable');
135
+ return 'inspectr';
108
136
  const packageBin = join(dirname(packageJsonPath), bin);
109
137
  return existsSync(packageBin) ? packageBin : 'inspectr';
110
138
  }
@@ -123,26 +151,45 @@ function normalizeOrigin(serverUrl) {
123
151
  }
124
152
  export function rewriteUrlThroughInspectr(serverUrl, proxyOrigin) {
125
153
  const original = new URL(serverUrl);
126
- return new URL(`${original.pathname}${original.search}`, proxyOrigin).toString();
154
+ // Assign path and query onto the proxy URL: resolving them as a relative reference would treat
155
+ // a `//host/...` path as a new authority and bypass the proxy.
156
+ const proxied = new URL(proxyOrigin);
157
+ proxied.pathname = original.pathname;
158
+ proxied.search = original.search;
159
+ return proxied.toString();
127
160
  }
128
161
  function originKey(origin) {
129
162
  return createHash('sha256').update(origin).digest('hex').slice(0, 16);
130
163
  }
131
164
  function tagPart(value) {
132
- return value.trim().replace(/[\u0000-\u001f\u007f,]+/g, '_').slice(0, 120) || 'unknown';
165
+ // Header values must be ByteStrings: drop accents, then replace anything that is not printable
166
+ // ASCII (and the tag delimiter) so names like "Claude – prod" or CJK cannot break requests.
167
+ return (value
168
+ .normalize('NFKD')
169
+ .replace(/[\u0300-\u036f]/g, '')
170
+ .replace(/[^\x20-\x7e]+|,+/g, '_')
171
+ .trim()
172
+ .slice(0, 120) || 'unknown');
133
173
  }
134
- async function allocateFreePort() {
135
- const server = createServer();
136
- await new Promise((resolve, reject) => {
137
- server.once('error', reject);
138
- server.listen(0, '127.0.0.1', () => resolve());
139
- });
140
- const address = server.address();
141
- const port = typeof address === 'object' && address ? address.port : 0;
142
- await new Promise((resolve) => server.close(() => resolve()));
143
- if (!port)
144
- throw new Error('Could not allocate a local Inspectr port');
145
- return port;
174
+ /** Keeps every listener open until all ports are known, so the OS cannot hand out one twice. */
175
+ async function allocateFreePorts(count) {
176
+ const servers = Array.from({ length: count }, () => createServer());
177
+ try {
178
+ return await Promise.all(servers.map((server) => new Promise((resolve, reject) => {
179
+ server.once('error', reject);
180
+ server.listen(0, '127.0.0.1', () => {
181
+ const address = server.address();
182
+ const port = typeof address === 'object' && address ? address.port : 0;
183
+ if (port)
184
+ resolve(port);
185
+ else
186
+ reject(new Error('Could not allocate a local Inspectr port'));
187
+ });
188
+ })));
189
+ }
190
+ finally {
191
+ await Promise.all(servers.map((server) => new Promise((resolve) => server.listening ? server.close(() => resolve()) : resolve())));
192
+ }
146
193
  }
147
194
  async function waitForPorts(session, child) {
148
195
  const ports = [new URL(session.proxyOrigin).port, new URL(session.dashboardUrl).port].map(Number);
@@ -157,7 +204,7 @@ async function waitForPorts(session, child) {
157
204
  while (Date.now() < deadline) {
158
205
  if (childExited)
159
206
  throw new Error('Inspectr process exited during startup');
160
- if (await Promise.all(ports.map(canConnect))) {
207
+ if ((await Promise.all(ports.map(canConnect))).every(Boolean)) {
161
208
  stableChecks += 1;
162
209
  if (stableChecks >= 2 && (await hasDashboardConfig(session.dashboardUrl)))
163
210
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"inspectr-session-manager.js","sourceRoot":"","sources":["../../src/app-server/inspectr-session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspectr-session-manager.js","sourceRoot":"","sources":["../../src/app-server/inspectr-session-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/app-server/router.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,YAAY,CAAC;AAuCrF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAuB,KAAK,MAAM,EAAsB,MAAM,sBAAsB,CAAC;AA0C5F,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYjF,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,GAC7C,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,EAC9C,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAIf;AAKD,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBAiuB7D"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/app-server/router.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,YAAY,CAAC;AAwCrF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAuB,KAAK,MAAM,EAAsB,MAAM,sBAAsB,CAAC;AA2C5F,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYjF,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,GAC7C,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,EAC9C,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAIf;AAKD,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBAiwB7D"}
@@ -25,6 +25,7 @@ import { handleScenarioAssistantRoutes } from './scenario-assistant.js';
25
25
  import { handleResultAssistantRoutes } from './result-assistant.js';
26
26
  import { handleEvalsRoutes } from './evals-routes.js';
27
27
  import { handleRunsRoutes } from './runs-routes.js';
28
+ import { handleInspectrRoutes } from './inspectr-routes.js';
28
29
  import { createRunQueueService } from './run-queue-domain.js';
29
30
  import { createRunQueueState } from './run-queue-state.js';
30
31
  import { fetchProviderModels } from './provider-models.js';
@@ -37,6 +38,7 @@ import { resolveAppDist } from './app-dist.js';
37
38
  import { startBrowser } from './browser-launch.js';
38
39
  import { formatLangSmithStatus, isLangSmithEnabled } from '../cli-branding.js';
39
40
  import { getAppServerVersionInfo } from './version-info.js';
41
+ import { InspectrSessionManager } from './inspectr-session-manager.js';
40
42
  import { LiveTestService } from './live-tests.js';
41
43
  import { handleLiveTestRoutes } from './live-tests-routes.js';
42
44
  import { proposeBrowserProviderProfile, sanitizeBrowserProviderLearningTrace, sanitizeBrowserProviderProposalDiagnostics } from './browser-provider-learning.js';
@@ -100,6 +102,19 @@ export async function startAppServer(options) {
100
102
  runtimeSessions: oauthRuntimeSessions,
101
103
  oauthDebuggerSessions
102
104
  });
105
+ const inspectrSessionManager = new InspectrSessionManager({
106
+ storageRoot: join(settings.librariesDir, '.inspectr-sessions')
107
+ });
108
+ // Inspectr runs as child processes; stop them when the app server process goes away, not only on
109
+ // a graceful HTTP close. Signals are re-raised so the default termination still happens.
110
+ const stopInspectr = () => inspectrSessionManager.stopAll();
111
+ const stopInspectrOnSignal = (signal) => {
112
+ stopInspectr();
113
+ process.kill(process.pid, signal);
114
+ };
115
+ process.once('exit', stopInspectr);
116
+ process.once('SIGINT', stopInspectrOnSignal);
117
+ process.once('SIGTERM', stopInspectrOnSignal);
103
118
  const assistantSessions = new Map();
104
119
  const resultAssistantSessions = new Map();
105
120
  const liveTestService = new LiveTestService({
@@ -172,6 +187,7 @@ export async function startAppServer(options) {
172
187
  const runQueueService = createRunQueueService({
173
188
  settings,
174
189
  oauthSessionManager,
190
+ inspectrSessionManager,
175
191
  deps: routeDeps,
176
192
  jobs: jobs,
177
193
  state: runQueueState,
@@ -313,6 +329,18 @@ export async function startAppServer(options) {
313
329
  asJson(res, 200, settings);
314
330
  return;
315
331
  }
332
+ if (await handleInspectrRoutes({
333
+ req,
334
+ res,
335
+ pathname,
336
+ method,
337
+ runsDir: settings.runsDir,
338
+ inspectrSessionManager,
339
+ parseBody,
340
+ asJson
341
+ })) {
342
+ return;
343
+ }
316
344
  if (pathname === '/api/rover/status' && method === 'GET') {
317
345
  const connection = roverConnection.connection();
318
346
  asJson(res, 200, {
@@ -694,6 +722,10 @@ export async function startAppServer(options) {
694
722
  runQueueService.closeSubscribers();
695
723
  roverConnection.close();
696
724
  devMcp?.stop();
725
+ process.off('exit', stopInspectr);
726
+ process.off('SIGINT', stopInspectrOnSignal);
727
+ process.off('SIGTERM', stopInspectrOnSignal);
728
+ void inspectrSessionManager.closeAll();
697
729
  });
698
730
  const url = `http://${options.host}:${options.port}`;
699
731
  const logPrefix = '[mcplab-app]';