@skybridge/test 2.0.0-beta.dd3cba3 → 2.0.1-beta.5c35b50

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.
@@ -35,14 +35,13 @@ interface StartOptions {
35
35
  }
36
36
  /**
37
37
  * Opens a fresh MCP session and conversation against the app under test. The
38
- * app is served in-process, and the session is closed when the current test
38
+ * app is served in-process by a handler built on `app.createServerInstance`
39
+ * for this conversation alone, and both are closed when the current test
39
40
  * finishes, so scenarios never leak sessions and never write teardown, and
40
41
  * tests that run concurrently cannot close each other's sessions.
41
42
  *
42
43
  * The assertions are inferred from the app value itself, so `expect.chat` gets
43
- * the project's tool names and argument shapes with no type parameter. The
44
- * session talks to an in-process handler built on `app.createServerInstance`,
45
- * which never closes: it is memoized per app and shared by every test.
44
+ * the project's tool names and argument shapes with no type parameter.
46
45
  *
47
46
  * `authInfo` claims an identity for the session: the app's per-tool scheme and
48
47
  * scope enforcement runs against it for real, only token verification is
@@ -1 +1 @@
1
- {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAaD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,UAAU,YAAY;IACpB,uDAAuD;IACvD,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,KAAK,CAAC,GAAG,SAAS,OAAO,EAC7C,OAAO,EAAE,YAAY,GAAG;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAoBpB"}
1
+ {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,UAAU,YAAY;IACpB,uDAAuD;IACvD,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,KAAK,CAAC,GAAG,SAAS,OAAO,EAC7C,OAAO,EAAE,YAAY,GAAG;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAwBpB"}
@@ -1,15 +1,6 @@
1
- import { createMcpHandler, } from "@modelcontextprotocol/server";
1
+ import { createMcpHandler } from "@modelcontextprotocol/server";
2
2
  import { inject, onTestFinished } from "vitest";
3
3
  import { Chat } from "./chat.js";
4
- const handlers = new WeakMap();
5
- function getHandler(app) {
6
- let handler = handlers.get(app);
7
- if (!handler) {
8
- handler = createMcpHandler(() => app.createServerInstance());
9
- handlers.set(app, handler);
10
- }
11
- return handler;
12
- }
13
4
  function sharedDefaults() {
14
5
  try {
15
6
  return inject("skybridgeEvals");
@@ -20,14 +11,13 @@ function sharedDefaults() {
20
11
  }
21
12
  /**
22
13
  * Opens a fresh MCP session and conversation against the app under test. The
23
- * app is served in-process, and the session is closed when the current test
14
+ * app is served in-process by a handler built on `app.createServerInstance`
15
+ * for this conversation alone, and both are closed when the current test
24
16
  * finishes, so scenarios never leak sessions and never write teardown, and
25
17
  * tests that run concurrently cannot close each other's sessions.
26
18
  *
27
19
  * The assertions are inferred from the app value itself, so `expect.chat` gets
28
- * the project's tool names and argument shapes with no type parameter. The
29
- * session talks to an in-process handler built on `app.createServerInstance`,
30
- * which never closes: it is memoized per app and shared by every test.
20
+ * the project's tool names and argument shapes with no type parameter.
31
21
  *
32
22
  * `authInfo` claims an identity for the session: the app's per-tool scheme and
33
23
  * scope enforcement runs against it for real, only token verification is
@@ -36,13 +26,17 @@ function sharedDefaults() {
36
26
  export async function start(options) {
37
27
  const config = sharedDefaults();
38
28
  const { app, authInfo } = options;
29
+ const handler = createMcpHandler(() => app.createServerInstance());
39
30
  const chat = await Chat.open({
40
31
  model: options.model,
41
32
  temperature: options.temperature ?? config?.temperature,
42
33
  systemPrompt: options.systemPrompt ?? config?.systemPrompt,
43
34
  maxSteps: options.maxSteps ?? config?.maxSteps,
44
- }, (url, init) => getHandler(app).fetch(new Request(url, init), authInfo === undefined ? undefined : { authInfo }));
45
- onTestFinished(() => chat.close());
35
+ }, (url, init) => handler.fetch(new Request(url, init), authInfo === undefined ? undefined : { authInfo }));
36
+ onTestFinished(async () => {
37
+ await chat.close();
38
+ await handler.close();
39
+ });
46
40
  return chat;
47
41
  }
48
42
  //# sourceMappingURL=session-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAGjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA2B,CAAC;AAExD,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC7D,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAwBD,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAA6D;IAE7D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAElC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAC1B;QACE,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW;QACvD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,MAAM,EAAE,YAAY;QAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,QAAQ;KAC/C,EACD,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACZ,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CACnB,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EACtB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAClD,CACJ,CAAC;IAEF,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAmCjC,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAA6D;IAE7D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEnE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAC1B;QACE,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW;QACvD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,MAAM,EAAE,YAAY;QAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,QAAQ;KAC/C,EACD,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,CACX,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EACtB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAClD,CACJ,CAAC;IAEF,cAAc,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skybridge/test",
3
- "version": "2.0.0-beta.dd3cba3",
3
+ "version": "2.0.1-beta.5c35b50",
4
4
  "description": "Eval runner for Skybridge MCP apps: does a prompt reach the right tool with the right arguments",
5
5
  "license": "ISC",
6
6
  "type": "module",
@@ -22,9 +22,9 @@
22
22
  "@modelcontextprotocol/server": "^2.0.0"
23
23
  },
24
24
  "peerDependencies": {
25
- "@skybridge/vite-plugin": "^2.0.0-beta.0",
25
+ "@skybridge/vite-plugin": "^2.0.0",
26
26
  "ai": "^5.0.0",
27
- "skybridge": "^2.0.0-beta.0",
27
+ "skybridge": "^2.0.0",
28
28
  "vitest": "^4.1.0"
29
29
  },
30
30
  "devDependencies": {
@@ -33,8 +33,8 @@
33
33
  "typescript": "^5.9.3",
34
34
  "vitest": "^4.1.10",
35
35
  "zod": "^4.4.3",
36
- "@skybridge/vite-plugin": "2.0.0-beta.dd3cba3",
37
- "skybridge": "2.0.0-beta.dd3cba3"
36
+ "@skybridge/vite-plugin": "2.0.1",
37
+ "skybridge": "2.0.1"
38
38
  },
39
39
  "engines": {
40
40
  "node": ">=22.23.1"