sunpeak 0.18.2 → 0.18.6

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 (57) hide show
  1. package/bin/commands/inspect.mjs +392 -4
  2. package/bin/lib/sandbox-server.mjs +11 -1
  3. package/dist/chatgpt/index.cjs +1 -1
  4. package/dist/chatgpt/index.js +1 -1
  5. package/dist/claude/index.cjs +1 -1
  6. package/dist/claude/index.js +1 -1
  7. package/dist/hooks/index.d.ts +1 -0
  8. package/dist/hooks/use-request-teardown.d.ts +21 -0
  9. package/dist/host/chatgpt/index.cjs +1 -1
  10. package/dist/host/chatgpt/index.js +1 -1
  11. package/dist/index.cjs +110 -70
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.ts +3 -3
  14. package/dist/index.js +68 -31
  15. package/dist/index.js.map +1 -1
  16. package/dist/inspector/hosts.d.ts +12 -0
  17. package/dist/inspector/index.cjs +1 -1
  18. package/dist/inspector/index.js +1 -1
  19. package/dist/inspector/mcp-app-host.d.ts +3 -0
  20. package/dist/inspector/simple-sidebar.d.ts +1 -1
  21. package/dist/inspector/use-mcp-connection.d.ts +9 -1
  22. package/dist/{inspector-ClhpqKLi.js → inspector-CjSoXm6N.js} +497 -117
  23. package/dist/inspector-CjSoXm6N.js.map +1 -0
  24. package/dist/{inspector-CByJjmPD.cjs → inspector-DRD_Q66E.cjs} +498 -118
  25. package/dist/inspector-DRD_Q66E.cjs.map +1 -0
  26. package/dist/mcp/index.cjs +38 -33
  27. package/dist/mcp/index.cjs.map +1 -1
  28. package/dist/mcp/index.js +35 -30
  29. package/dist/mcp/index.js.map +1 -1
  30. package/dist/style.css +8 -0
  31. package/dist/{use-app-X7JbGskk.js → use-app-BNbz1uzj.js} +51 -42
  32. package/dist/use-app-BNbz1uzj.js.map +1 -0
  33. package/dist/{use-app-D2h-aiyr.cjs → use-app-Dqh20JPP.cjs} +93 -72
  34. package/dist/use-app-Dqh20JPP.cjs.map +1 -0
  35. package/package.json +2 -2
  36. package/template/dist/albums/albums.html +3 -3
  37. package/template/dist/albums/albums.json +1 -1
  38. package/template/dist/carousel/carousel.html +3 -3
  39. package/template/dist/carousel/carousel.json +1 -1
  40. package/template/dist/map/map.html +3 -3
  41. package/template/dist/map/map.json +1 -1
  42. package/template/dist/review/review.html +3 -3
  43. package/template/dist/review/review.json +1 -1
  44. package/template/node_modules/.vite/deps/_metadata.json +3 -3
  45. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps.js +51 -42
  46. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps.js.map +1 -1
  47. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_app-bridge.js +56 -50
  48. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_app-bridge.js.map +1 -1
  49. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_react.js +52 -43
  50. package/template/node_modules/.vite-mcp/deps/@modelcontextprotocol_ext-apps_react.js.map +1 -1
  51. package/template/node_modules/.vite-mcp/deps/_metadata.json +22 -22
  52. package/template/tests/e2e/albums.spec.ts +19 -15
  53. package/template/tests/live/albums.spec.ts +10 -0
  54. package/dist/inspector-CByJjmPD.cjs.map +0 -1
  55. package/dist/inspector-ClhpqKLi.js.map +0 -1
  56. package/dist/use-app-D2h-aiyr.cjs.map +0 -1
  57. package/dist/use-app-X7JbGskk.js.map +0 -1
@@ -1,103 +1,103 @@
1
1
  {
2
- "hash": "ea2e52c1",
2
+ "hash": "1e81f3aa",
3
3
  "configHash": "276d46b2",
4
- "lockfileHash": "a41e63ba",
5
- "browserHash": "9b1eab7b",
4
+ "lockfileHash": "bd15fa0f",
5
+ "browserHash": "6e50c791",
6
6
  "optimized": {
7
7
  "@modelcontextprotocol/ext-apps": {
8
- "src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.2.2_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_e9bf7657371391a829fe8b4e289b253c/node_modules/@modelcontextprotocol/ext-apps/dist/src/app.js",
8
+ "src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.3.1_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_cd1fb28fd87e0bddd0a29eba0721855d/node_modules/@modelcontextprotocol/ext-apps/dist/src/app.js",
9
9
  "file": "@modelcontextprotocol_ext-apps.js",
10
- "fileHash": "c55a9218",
10
+ "fileHash": "8319477b",
11
11
  "needsInterop": false
12
12
  },
13
13
  "@modelcontextprotocol/ext-apps/app-bridge": {
14
- "src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.2.2_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_e9bf7657371391a829fe8b4e289b253c/node_modules/@modelcontextprotocol/ext-apps/dist/src/app-bridge.js",
14
+ "src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.3.1_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_cd1fb28fd87e0bddd0a29eba0721855d/node_modules/@modelcontextprotocol/ext-apps/dist/src/app-bridge.js",
15
15
  "file": "@modelcontextprotocol_ext-apps_app-bridge.js",
16
- "fileHash": "0846f57f",
16
+ "fileHash": "42754418",
17
17
  "needsInterop": false
18
18
  },
19
19
  "@modelcontextprotocol/ext-apps/react": {
20
- "src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.2.2_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_e9bf7657371391a829fe8b4e289b253c/node_modules/@modelcontextprotocol/ext-apps/dist/src/react/index.js",
20
+ "src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.3.1_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_cd1fb28fd87e0bddd0a29eba0721855d/node_modules/@modelcontextprotocol/ext-apps/dist/src/react/index.js",
21
21
  "file": "@modelcontextprotocol_ext-apps_react.js",
22
- "fileHash": "4117a8f1",
22
+ "fileHash": "11b48420",
23
23
  "needsInterop": false
24
24
  },
25
25
  "@testing-library/react": {
26
26
  "src": "../../../../../../node_modules/.pnpm/@testing-library+react@16.3.2_@testing-library+dom@10.4.1_@types+react-dom@19.2.3_@type_893f466751a7d66081fd06e9edb9241a/node_modules/@testing-library/react/dist/@testing-library/react.esm.js",
27
27
  "file": "@testing-library_react.js",
28
- "fileHash": "7da1596d",
28
+ "fileHash": "83450cb2",
29
29
  "needsInterop": false
30
30
  },
31
31
  "clsx": {
32
32
  "src": "../../../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs",
33
33
  "file": "clsx.js",
34
- "fileHash": "0aaf372b",
34
+ "fileHash": "9a26b7b9",
35
35
  "needsInterop": false
36
36
  },
37
37
  "embla-carousel-react": {
38
38
  "src": "../../../../../../node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.4/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js",
39
39
  "file": "embla-carousel-react.js",
40
- "fileHash": "3c5a7c5c",
40
+ "fileHash": "86a4fd9e",
41
41
  "needsInterop": false
42
42
  },
43
43
  "embla-carousel-wheel-gestures": {
44
44
  "src": "../../../../../../node_modules/.pnpm/embla-carousel-wheel-gestures@8.1.0_embla-carousel@8.6.0/node_modules/embla-carousel-wheel-gestures/dist/embla-carousel-wheel-gestures.esm.js",
45
45
  "file": "embla-carousel-wheel-gestures.js",
46
- "fileHash": "ccbdf054",
46
+ "fileHash": "f08b3fa3",
47
47
  "needsInterop": false
48
48
  },
49
49
  "mapbox-gl": {
50
50
  "src": "../../../../../../node_modules/.pnpm/mapbox-gl@3.20.0/node_modules/mapbox-gl/dist/mapbox-gl.js",
51
51
  "file": "mapbox-gl.js",
52
- "fileHash": "4ffe4afe",
52
+ "fileHash": "e5b3a894",
53
53
  "needsInterop": true
54
54
  },
55
55
  "react-dom": {
56
56
  "src": "../../../../../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/index.js",
57
57
  "file": "react-dom.js",
58
- "fileHash": "4d49f264",
58
+ "fileHash": "6d145f8d",
59
59
  "needsInterop": true
60
60
  },
61
61
  "react-dom/client": {
62
62
  "src": "../../../../../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/client.js",
63
63
  "file": "react-dom_client.js",
64
- "fileHash": "80eaedf6",
64
+ "fileHash": "0d5f624a",
65
65
  "needsInterop": true
66
66
  },
67
67
  "react": {
68
68
  "src": "../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/index.js",
69
69
  "file": "react.js",
70
- "fileHash": "7e139e48",
70
+ "fileHash": "b1480ffb",
71
71
  "needsInterop": true
72
72
  },
73
73
  "react/jsx-dev-runtime": {
74
74
  "src": "../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-dev-runtime.js",
75
75
  "file": "react_jsx-dev-runtime.js",
76
- "fileHash": "8fe1fa8e",
76
+ "fileHash": "f3ecec03",
77
77
  "needsInterop": true
78
78
  },
79
79
  "react/jsx-runtime": {
80
80
  "src": "../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js",
81
81
  "file": "react_jsx-runtime.js",
82
- "fileHash": "ba719946",
82
+ "fileHash": "29b2bae5",
83
83
  "needsInterop": true
84
84
  },
85
85
  "tailwind-merge": {
86
86
  "src": "../../../../../../node_modules/.pnpm/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs",
87
87
  "file": "tailwind-merge.js",
88
- "fileHash": "47ba3d6b",
88
+ "fileHash": "f6b574af",
89
89
  "needsInterop": false
90
90
  },
91
91
  "vitest": {
92
92
  "src": "../../../../../../node_modules/.pnpm/vitest@4.1.0_@types+node@25.5.0_jsdom@29.0.1_vite@8.0.1_@types+node@25.5.0_esbuild@0.27.4_jiti@2.6.1_tsx@4.21.0_/node_modules/vitest/dist/index.js",
93
93
  "file": "vitest.js",
94
- "fileHash": "258cddf8",
94
+ "fileHash": "3f78ac14",
95
95
  "needsInterop": false
96
96
  },
97
97
  "zod": {
98
98
  "src": "../../../../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/index.js",
99
99
  "file": "zod.js",
100
- "fileHash": "d8049871",
100
+ "fileHash": "b4c71c7b",
101
101
  "needsInterop": false
102
102
  }
103
103
  },
@@ -222,21 +222,25 @@ for (const host of hosts) {
222
222
  });
223
223
  });
224
224
 
225
- test('should render content after switching from inline to pip', async ({ page }) => {
226
- // Start in inline mode
227
- await page.goto(createInspectorUrl({ simulation: 'show-albums', theme: 'dark', host }));
228
-
229
- const iframe = page.frameLocator('iframe').frameLocator('iframe');
230
- await expect(iframe.locator('button:has-text("Summer Slice")')).toBeVisible();
231
-
232
- // Switch to PiP via sidebar
233
- await page.locator('button:has-text("PiP")').click();
234
-
235
- // Content should still be visible after the mode transition
236
- await expect(iframe.locator('button:has-text("Summer Slice")')).toBeVisible({
237
- timeout: 5000,
238
- });
239
- });
225
+ // Claude doesn't support PiP only run this test for hosts that have the button.
226
+ (host === 'claude' ? test.skip : test)(
227
+ 'should render content after switching from inline to pip',
228
+ async ({ page }) => {
229
+ // Start in inline mode
230
+ await page.goto(createInspectorUrl({ simulation: 'show-albums', theme: 'dark', host }));
231
+
232
+ const iframe = page.frameLocator('iframe').frameLocator('iframe');
233
+ await expect(iframe.locator('button:has-text("Summer Slice")')).toBeVisible();
234
+
235
+ // Switch to PiP via sidebar
236
+ await page.locator('button:has-text("PiP")').click();
237
+
238
+ // Content should still be visible after the mode transition
239
+ await expect(iframe.locator('button:has-text("Summer Slice")')).toBeVisible({
240
+ timeout: 5000,
241
+ });
242
+ }
243
+ );
240
244
  });
241
245
  });
242
246
  }
@@ -25,6 +25,16 @@ test('albums tool renders photo grid with correct styles', async ({ live }) => {
25
25
  });
26
26
  expect(containerStyles.overflow).toBe('hidden');
27
27
 
28
+ // Background: the app's root should have a resolved background color
29
+ // (from --color-background-primary or the CSS Canvas system color),
30
+ // not transparent. A transparent root would show the host container
31
+ // rather than the app's own styled background.
32
+ const rootBg = await app
33
+ .locator(':root')
34
+ .evaluate((el) => window.getComputedStyle(el).backgroundColor);
35
+ expect(rootBg).not.toBe('rgba(0, 0, 0, 0)');
36
+ expect(rootBg).toMatch(/^rgb/);
37
+
28
38
  // Theme: text color has appropriate luminance in light mode
29
39
  const textColor = await albumCard.evaluate((el) => window.getComputedStyle(el).color);
30
40
  assertTextContrast(textColor);