plum-e2e 2.8.0 → 2.8.2

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 (143) hide show
  1. package/backend/app.js +1 -0
  2. package/backend/lib/nodeRegister.js +2 -10
  3. package/backend/mcp/server.js +444 -448
  4. package/backend/middleware/jwtAuth.js +0 -9
  5. package/backend/middleware/runnerOrAdmin.js +26 -0
  6. package/backend/package.json +1 -2
  7. package/backend/routes/mcp.routes.js +46 -0
  8. package/backend/routes/runners.routes.js +11 -6
  9. package/backend/scripts/manage-runners.mjs +7 -6
  10. package/backend/services/runnerService.js +11 -0
  11. package/bin/plum.js +0 -27
  12. package/bin/postinstall.js +5 -5
  13. package/docker-compose.yml +0 -1
  14. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +1 -1
  15. package/frontend/.svelte-kit/adapter-node/manifest-full.js +1 -1
  16. package/frontend/.svelte-kit/adapter-node/manifest.js +1 -1
  17. package/frontend/.svelte-kit/adapter-node/nodes/0.js +1 -1
  18. package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -1
  19. package/frontend/.svelte-kit/adapter-node/nodes/11.js +1 -1
  20. package/frontend/.svelte-kit/adapter-node/nodes/12.js +1 -1
  21. package/frontend/.svelte-kit/adapter-node/nodes/3.js +1 -1
  22. package/frontend/.svelte-kit/adapter-node/nodes/5.js +1 -1
  23. package/frontend/.svelte-kit/adapter-node/nodes/6.js +1 -1
  24. package/frontend/.svelte-kit/adapter-node/nodes/8.js +1 -1
  25. package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -1
  26. package/frontend/.svelte-kit/generated/server/internal.js +1 -1
  27. package/frontend/.svelte-kit/output/client/.vite/manifest.json +37 -37
  28. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{nURnIknV.js → DEKAA-Fm.js} +1 -1
  29. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DMyTUV-Y.js → Dhf4xQKo.js} +1 -1
  30. package/frontend/{build/client/_app/immutable/entry/app.BkBD0hgA.js → .svelte-kit/output/client/_app/immutable/entry/app.B0GH5ONo.js} +2 -2
  31. package/frontend/{build/client/_app/immutable/entry/start.BxeX1Uxs.js → .svelte-kit/output/client/_app/immutable/entry/start.Bn25CW9X.js} +1 -1
  32. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{0.ChjDHxSJ.js → 0.-imXt0f5.js} +1 -1
  33. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{1.DBSWa36f.js → 1.Dom3CKWF.js} +1 -1
  34. package/frontend/{build/client/_app/immutable/nodes/11.O4cjXCg4.js → .svelte-kit/output/client/_app/immutable/nodes/11.DMlayLCK.js} +1 -1
  35. package/frontend/{build/client/_app/immutable/nodes/12.BWQdeRdX.js → .svelte-kit/output/client/_app/immutable/nodes/12.Bu89A1eX.js} +1 -1
  36. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{3._S1vrLVF.js → 3.B86rlHXU.js} +1 -1
  37. package/frontend/{build/client/_app/immutable/nodes/5.BiFBiWcW.js → .svelte-kit/output/client/_app/immutable/nodes/5.CqTXvadV.js} +1 -1
  38. package/frontend/{build/client/_app/immutable/nodes/6.BNS-W0R_.js → .svelte-kit/output/client/_app/immutable/nodes/6.BJZ62MCd.js} +1 -1
  39. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{8.BEUdazrw.js → 8.B4fj2Xyu.js} +1 -1
  40. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{9.CrLHYPEJ.js → 9.C57_2xq6.js} +1 -1
  41. package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
  42. package/frontend/.svelte-kit/output/server/chunks/internal.js +1 -1
  43. package/frontend/.svelte-kit/output/server/manifest-full.js +1 -1
  44. package/frontend/.svelte-kit/output/server/manifest.js +1 -1
  45. package/frontend/.svelte-kit/output/server/nodes/0.js +1 -1
  46. package/frontend/.svelte-kit/output/server/nodes/1.js +1 -1
  47. package/frontend/.svelte-kit/output/server/nodes/11.js +1 -1
  48. package/frontend/.svelte-kit/output/server/nodes/12.js +1 -1
  49. package/frontend/.svelte-kit/output/server/nodes/3.js +1 -1
  50. package/frontend/.svelte-kit/output/server/nodes/5.js +1 -1
  51. package/frontend/.svelte-kit/output/server/nodes/6.js +1 -1
  52. package/frontend/.svelte-kit/output/server/nodes/8.js +1 -1
  53. package/frontend/.svelte-kit/output/server/nodes/9.js +1 -1
  54. package/frontend/build/client/_app/immutable/chunks/{nURnIknV.js → DEKAA-Fm.js} +1 -1
  55. package/frontend/build/client/_app/immutable/chunks/DEKAA-Fm.js.br +0 -0
  56. package/frontend/build/client/_app/immutable/chunks/DEKAA-Fm.js.gz +0 -0
  57. package/frontend/build/client/_app/immutable/chunks/{DMyTUV-Y.js → Dhf4xQKo.js} +1 -1
  58. package/frontend/build/client/_app/immutable/chunks/Dhf4xQKo.js.br +0 -0
  59. package/frontend/build/client/_app/immutable/chunks/Dhf4xQKo.js.gz +0 -0
  60. package/frontend/{.svelte-kit/output/client/_app/immutable/entry/app.BkBD0hgA.js → build/client/_app/immutable/entry/app.B0GH5ONo.js} +2 -2
  61. package/frontend/build/client/_app/immutable/entry/app.B0GH5ONo.js.br +0 -0
  62. package/frontend/build/client/_app/immutable/entry/app.B0GH5ONo.js.gz +0 -0
  63. package/frontend/{.svelte-kit/output/client/_app/immutable/entry/start.BxeX1Uxs.js → build/client/_app/immutable/entry/start.Bn25CW9X.js} +1 -1
  64. package/frontend/build/client/_app/immutable/entry/{start.BxeX1Uxs.js.br → start.Bn25CW9X.js.br} +0 -0
  65. package/frontend/build/client/_app/immutable/entry/{start.BxeX1Uxs.js.gz → start.Bn25CW9X.js.gz} +0 -0
  66. package/frontend/build/client/_app/immutable/nodes/{0.ChjDHxSJ.js → 0.-imXt0f5.js} +1 -1
  67. package/frontend/build/client/_app/immutable/nodes/0.-imXt0f5.js.br +0 -0
  68. package/frontend/build/client/_app/immutable/nodes/0.-imXt0f5.js.gz +0 -0
  69. package/frontend/build/client/_app/immutable/nodes/{1.DBSWa36f.js → 1.Dom3CKWF.js} +1 -1
  70. package/frontend/build/client/_app/immutable/nodes/1.Dom3CKWF.js.br +0 -0
  71. package/frontend/build/client/_app/immutable/nodes/1.Dom3CKWF.js.gz +0 -0
  72. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/11.O4cjXCg4.js → build/client/_app/immutable/nodes/11.DMlayLCK.js} +1 -1
  73. package/frontend/build/client/_app/immutable/nodes/11.DMlayLCK.js.br +0 -0
  74. package/frontend/build/client/_app/immutable/nodes/11.DMlayLCK.js.gz +0 -0
  75. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/12.BWQdeRdX.js → build/client/_app/immutable/nodes/12.Bu89A1eX.js} +1 -1
  76. package/frontend/build/client/_app/immutable/nodes/12.Bu89A1eX.js.br +0 -0
  77. package/frontend/build/client/_app/immutable/nodes/12.Bu89A1eX.js.gz +0 -0
  78. package/frontend/build/client/_app/immutable/nodes/{3._S1vrLVF.js → 3.B86rlHXU.js} +1 -1
  79. package/frontend/build/client/_app/immutable/nodes/3.B86rlHXU.js.br +0 -0
  80. package/frontend/build/client/_app/immutable/nodes/3.B86rlHXU.js.gz +0 -0
  81. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/5.BiFBiWcW.js → build/client/_app/immutable/nodes/5.CqTXvadV.js} +1 -1
  82. package/frontend/build/client/_app/immutable/nodes/5.CqTXvadV.js.br +0 -0
  83. package/frontend/build/client/_app/immutable/nodes/5.CqTXvadV.js.gz +0 -0
  84. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/6.BNS-W0R_.js → build/client/_app/immutable/nodes/6.BJZ62MCd.js} +1 -1
  85. package/frontend/build/client/_app/immutable/nodes/6.BJZ62MCd.js.br +0 -0
  86. package/frontend/build/client/_app/immutable/nodes/6.BJZ62MCd.js.gz +0 -0
  87. package/frontend/build/client/_app/immutable/nodes/{8.BEUdazrw.js → 8.B4fj2Xyu.js} +1 -1
  88. package/frontend/build/client/_app/immutable/nodes/8.B4fj2Xyu.js.br +0 -0
  89. package/frontend/build/client/_app/immutable/nodes/8.B4fj2Xyu.js.gz +0 -0
  90. package/frontend/build/client/_app/immutable/nodes/{9.CrLHYPEJ.js → 9.C57_2xq6.js} +1 -1
  91. package/frontend/build/client/_app/immutable/nodes/9.C57_2xq6.js.br +0 -0
  92. package/frontend/build/client/_app/immutable/nodes/9.C57_2xq6.js.gz +0 -0
  93. package/frontend/build/client/_app/version.json +1 -1
  94. package/frontend/build/client/_app/version.json.br +0 -0
  95. package/frontend/build/client/_app/version.json.gz +0 -0
  96. package/frontend/build/server/chunks/{0-Cn_2hzqk.js → 0-DG1Uv07a.js} +2 -2
  97. package/frontend/build/server/chunks/{0-Cn_2hzqk.js.map → 0-DG1Uv07a.js.map} +1 -1
  98. package/frontend/build/server/chunks/{1-BrRGJFSB.js → 1-iB0ogJU_.js} +2 -2
  99. package/frontend/build/server/chunks/{1-BrRGJFSB.js.map → 1-iB0ogJU_.js.map} +1 -1
  100. package/frontend/build/server/chunks/{11-BLPbHJqB.js → 11-Df9vGZ_v.js} +2 -2
  101. package/frontend/build/server/chunks/{11-BLPbHJqB.js.map → 11-Df9vGZ_v.js.map} +1 -1
  102. package/frontend/build/server/chunks/{12-S1ujUrHy.js → 12-DqvjCln4.js} +2 -2
  103. package/frontend/build/server/chunks/{12-S1ujUrHy.js.map → 12-DqvjCln4.js.map} +1 -1
  104. package/frontend/build/server/chunks/{3-BHkXVoNI.js → 3-BYKCZi4U.js} +2 -2
  105. package/frontend/build/server/chunks/{3-BHkXVoNI.js.map → 3-BYKCZi4U.js.map} +1 -1
  106. package/frontend/build/server/chunks/{5-F1ZsXMt2.js → 5-B6Jc1foX.js} +2 -2
  107. package/frontend/build/server/chunks/{5-F1ZsXMt2.js.map → 5-B6Jc1foX.js.map} +1 -1
  108. package/frontend/build/server/chunks/{6-FlZLnYJ6.js → 6-dXZKtN86.js} +2 -2
  109. package/frontend/build/server/chunks/{6-FlZLnYJ6.js.map → 6-dXZKtN86.js.map} +1 -1
  110. package/frontend/build/server/chunks/{8-DXReUGxi.js → 8-D-Bp7HzS.js} +2 -2
  111. package/frontend/build/server/chunks/{8-DXReUGxi.js.map → 8-D-Bp7HzS.js.map} +1 -1
  112. package/frontend/build/server/chunks/{9-Cy_mGmt4.js → 9-BynjuGUO.js} +2 -2
  113. package/frontend/build/server/chunks/{9-Cy_mGmt4.js.map → 9-BynjuGUO.js.map} +1 -1
  114. package/frontend/build/server/index.js +1 -1
  115. package/frontend/build/server/index.js.map +1 -1
  116. package/frontend/build/server/manifest.js +10 -10
  117. package/frontend/build/server/manifest.js.map +1 -1
  118. package/frontend/src/routes/settings/+page.svelte +4 -5
  119. package/package.json +1 -1
  120. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.br +0 -0
  121. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.gz +0 -0
  122. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.br +0 -0
  123. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.gz +0 -0
  124. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.br +0 -0
  125. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.gz +0 -0
  126. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.br +0 -0
  127. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.gz +0 -0
  128. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.br +0 -0
  129. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.gz +0 -0
  130. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.br +0 -0
  131. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.gz +0 -0
  132. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.br +0 -0
  133. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.gz +0 -0
  134. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.br +0 -0
  135. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.gz +0 -0
  136. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.br +0 -0
  137. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.gz +0 -0
  138. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.br +0 -0
  139. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.gz +0 -0
  140. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.br +0 -0
  141. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.gz +0 -0
  142. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.br +0 -0
  143. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.gz +0 -0
package/backend/app.js CHANGED
@@ -38,6 +38,7 @@ if (!isNodeMode()) {
38
38
  app.use('/test-runs', require('./routes/test-runs.routes'));
39
39
  app.use('/trigger', require('./routes/trigger.routes'));
40
40
  app.use('/active-runs', require('./routes/active-runs.routes'));
41
+ app.use('/mcp', require('./routes/mcp.routes'));
41
42
  }
42
43
 
43
44
  // Global JSON error handler — Express's default sends HTML, which breaks JSON clients
@@ -58,17 +58,9 @@ function saveNodeConfig(dir, cfg) {
58
58
  */
59
59
  async function registerWithPrimary({ primary, name, url, token, browser }) {
60
60
  const base = primary.replace(/\/$/, '');
61
- // The /runners routes require an authenticated admin session, which this
62
- // headless flow has no browser/JWT to provide — PLUM_NODE_KEY is the shared
63
- // secret that stands in for one (see backend/middleware/jwtAuth.js).
64
- const nodeKey = process.env.PLUM_NODE_KEY;
65
- const authHeaders = nodeKey ? { Authorization: `ApiKey ${nodeKey}` } : {};
66
61
 
67
62
  let existing = null;
68
- const listRes = await fetch(`${base}/runners`, {
69
- headers: authHeaders,
70
- signal: AbortSignal.timeout(10000)
71
- });
63
+ const listRes = await fetch(`${base}/runners`, { signal: AbortSignal.timeout(10000) });
72
64
  if (!listRes.ok) throw new Error(`primary returned HTTP ${listRes.status} listing runners`);
73
65
  const { runners = [] } = await listRes.json();
74
66
  existing = runners.find((r) => r.name === name && r.url === url) ?? null;
@@ -76,7 +68,7 @@ async function registerWithPrimary({ primary, name, url, token, browser }) {
76
68
 
77
69
  const res = await fetch(`${base}/runners`, {
78
70
  method: 'POST',
79
- headers: { 'Content-Type': 'application/json', ...authHeaders },
71
+ headers: { 'Content-Type': 'application/json' },
80
72
  body: JSON.stringify({ name, url, token, browser }),
81
73
  signal: AbortSignal.timeout(10000)
82
74
  });