@equinor/fusion-framework-cli-plugin-copilot 2.0.1 → 2.0.3

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 (265) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/esm/commands/app/{session-logger.js → attach-session-logger.js} +16 -2
  3. package/dist/esm/commands/app/attach-session-logger.js.map +1 -0
  4. package/dist/esm/commands/app/{command.js → copilot-command.js} +22 -11
  5. package/dist/esm/commands/app/copilot-command.js.map +1 -0
  6. package/dist/esm/commands/app/{eval.js → create-session.js} +8 -6
  7. package/dist/esm/commands/app/create-session.js.map +1 -0
  8. package/dist/esm/commands/app/format-plan.js +24 -0
  9. package/dist/esm/commands/app/format-plan.js.map +1 -0
  10. package/dist/esm/commands/app/format-step-result.js +14 -0
  11. package/dist/esm/commands/app/format-step-result.js.map +1 -0
  12. package/dist/esm/commands/app/format-verdict.js +38 -0
  13. package/dist/esm/commands/app/format-verdict.js.map +1 -0
  14. package/dist/esm/commands/app/prompts/{system.dev-server.prompt.js → create-dev-server-context.js} +1 -1
  15. package/dist/esm/commands/app/prompts/create-dev-server-context.js.map +1 -0
  16. package/dist/esm/commands/app/prompts/{execute-step.prompt.js → create-execute-step-prompt.js} +1 -1
  17. package/dist/esm/commands/app/prompts/create-execute-step-prompt.js.map +1 -0
  18. package/dist/esm/commands/app/prompts/{judge.prompt.js → create-judge-prompt.js} +5 -1
  19. package/dist/esm/commands/app/prompts/create-judge-prompt.js.map +1 -0
  20. package/dist/esm/commands/app/prompts/{plan.prompt.js → create-plan-prompt.js} +1 -1
  21. package/dist/esm/commands/app/prompts/create-plan-prompt.js.map +1 -0
  22. package/dist/esm/commands/app/prompts/{step.prompt.js → create-step-prompt.js} +3 -2
  23. package/dist/esm/commands/app/prompts/create-step-prompt.js.map +1 -0
  24. package/dist/esm/commands/app/prompts/{system.prompt.js → create-system-prompt.js} +1 -1
  25. package/dist/esm/commands/app/prompts/create-system-prompt.js.map +1 -0
  26. package/dist/esm/commands/app/{login.js → run-login.js} +5 -1
  27. package/dist/esm/commands/app/run-login.js.map +1 -0
  28. package/dist/esm/commands/app/{server.js → start-app-server.js} +7 -1
  29. package/dist/esm/commands/app/start-app-server.js.map +1 -0
  30. package/dist/esm/commands/app/status-icon.js +18 -0
  31. package/dist/esm/commands/app/status-icon.js.map +1 -0
  32. package/dist/esm/commands/app/tools/{registry.js → AgentBrowserToolRegistry.js} +1 -1
  33. package/dist/esm/commands/app/tools/AgentBrowserToolRegistry.js.map +1 -0
  34. package/dist/esm/commands/app/tools/{write-file.js → create-append-file-tool.js} +5 -38
  35. package/dist/esm/commands/app/tools/create-append-file-tool.js.map +1 -0
  36. package/dist/esm/commands/app/tools/{click.js → create-click-tool.js} +1 -1
  37. package/dist/esm/commands/app/tools/create-click-tool.js.map +1 -0
  38. package/dist/esm/commands/app/tools/{errors.js → create-errors-tool.js} +1 -1
  39. package/dist/esm/commands/app/tools/create-errors-tool.js.map +1 -0
  40. package/dist/esm/commands/app/tools/{eval-js.js → create-eval-js-tool.js} +1 -1
  41. package/dist/esm/commands/app/tools/create-eval-js-tool.js.map +1 -0
  42. package/dist/esm/commands/app/tools/{fill.js → create-fill-tool.js} +1 -1
  43. package/dist/esm/commands/app/tools/create-fill-tool.js.map +1 -0
  44. package/dist/esm/commands/app/tools/{find.js → create-find-tool.js} +4 -1
  45. package/dist/esm/commands/app/tools/create-find-tool.js.map +1 -0
  46. package/dist/esm/commands/app/tools/{get-styles.js → create-get-styles-tool.js} +1 -1
  47. package/dist/esm/commands/app/tools/create-get-styles-tool.js.map +1 -0
  48. package/dist/esm/commands/app/tools/{get-url.js → create-get-url-tool.js} +1 -1
  49. package/dist/esm/commands/app/tools/create-get-url-tool.js.map +1 -0
  50. package/dist/esm/commands/app/tools/{go-back.js → create-go-back-tool.js} +1 -1
  51. package/dist/esm/commands/app/tools/create-go-back-tool.js.map +1 -0
  52. package/dist/esm/commands/app/tools/{hover.js → create-hover-tool.js} +1 -1
  53. package/dist/esm/commands/app/tools/create-hover-tool.js.map +1 -0
  54. package/dist/esm/commands/app/tools/{navigate.js → create-navigate-tool.js} +1 -1
  55. package/dist/esm/commands/app/tools/create-navigate-tool.js.map +1 -0
  56. package/dist/esm/commands/app/tools/{press-key.js → create-press-key-tool.js} +1 -1
  57. package/dist/esm/commands/app/tools/create-press-key-tool.js.map +1 -0
  58. package/dist/esm/commands/app/tools/{read-file.js → create-read-file-tool.js} +4 -2
  59. package/dist/esm/commands/app/tools/create-read-file-tool.js.map +1 -0
  60. package/dist/esm/commands/app/tools/{reload.js → create-reload-tool.js} +1 -1
  61. package/dist/esm/commands/app/tools/create-reload-tool.js.map +1 -0
  62. package/dist/esm/commands/app/tools/{screenshot.js → create-screenshot-tool.js} +7 -1
  63. package/dist/esm/commands/app/tools/create-screenshot-tool.js.map +1 -0
  64. package/dist/esm/commands/app/tools/{scroll.js → create-scroll-tool.js} +3 -1
  65. package/dist/esm/commands/app/tools/create-scroll-tool.js.map +1 -0
  66. package/dist/esm/commands/app/tools/{select.js → create-select-tool.js} +1 -1
  67. package/dist/esm/commands/app/tools/create-select-tool.js.map +1 -0
  68. package/dist/esm/commands/app/tools/{snapshot.js → create-snapshot-tool.js} +1 -1
  69. package/dist/esm/commands/app/tools/create-snapshot-tool.js.map +1 -0
  70. package/dist/esm/commands/app/tools/{type-text.js → create-type-text-tool.js} +1 -1
  71. package/dist/esm/commands/app/tools/create-type-text-tool.js.map +1 -0
  72. package/dist/esm/commands/app/tools/{wait.js → create-wait-tool.js} +5 -1
  73. package/dist/esm/commands/app/tools/create-wait-tool.js.map +1 -0
  74. package/dist/esm/commands/app/tools/create-write-file-tool.js +65 -0
  75. package/dist/esm/commands/app/tools/create-write-file-tool.js.map +1 -0
  76. package/dist/esm/commands/app/tools/index.js +19 -19
  77. package/dist/esm/commands/app/tools/index.js.map +1 -1
  78. package/dist/esm/commands/app/truncate.js +11 -0
  79. package/dist/esm/commands/app/truncate.js.map +1 -0
  80. package/dist/esm/commands/app/try-format-message.js +39 -0
  81. package/dist/esm/commands/app/try-format-message.js.map +1 -0
  82. package/dist/esm/exit-with-resolution-error.js +16 -0
  83. package/dist/esm/exit-with-resolution-error.js.map +1 -0
  84. package/dist/esm/index.js +1 -1
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/resolve-eval-command-input.js +37 -0
  87. package/dist/esm/resolve-eval-command-input.js.map +1 -0
  88. package/dist/esm/resolve-eval-files.js +49 -0
  89. package/dist/esm/resolve-eval-files.js.map +1 -0
  90. package/dist/esm/utils/ab-error-message.js +34 -0
  91. package/dist/esm/utils/ab-error-message.js.map +1 -0
  92. package/dist/esm/utils/{agent-browser.js → ab.js} +3 -32
  93. package/dist/esm/utils/ab.js.map +1 -0
  94. package/dist/esm/utils/create-run-dir.js +24 -0
  95. package/dist/esm/utils/create-run-dir.js.map +1 -0
  96. package/dist/esm/utils/{process.js → helpers.js} +28 -11
  97. package/dist/esm/utils/helpers.js.map +1 -0
  98. package/dist/esm/utils/index.js +8 -5
  99. package/dist/esm/utils/index.js.map +1 -1
  100. package/dist/esm/utils/{browser-poll.js → poll-console.js} +5 -3
  101. package/dist/esm/utils/poll-console.js.map +1 -0
  102. package/dist/esm/utils/{daemon.js → reset-daemon.js} +5 -14
  103. package/dist/esm/utils/reset-daemon.js.map +1 -0
  104. package/dist/esm/utils/resolve-app-key.js +20 -0
  105. package/dist/esm/utils/resolve-app-key.js.map +1 -0
  106. package/dist/esm/utils/wait-for-server.js +26 -0
  107. package/dist/esm/utils/wait-for-server.js.map +1 -0
  108. package/dist/esm/version.js +1 -1
  109. package/dist/tsconfig.tsbuildinfo +1 -1
  110. package/dist/types/commands/app/{command.d.ts → copilot-command.d.ts} +1 -1
  111. package/dist/types/commands/app/format-plan.d.ts +8 -0
  112. package/dist/types/commands/app/format-step-result.d.ts +8 -0
  113. package/dist/types/commands/app/format-verdict.d.ts +8 -0
  114. package/dist/types/commands/app/prompts/{step.prompt.d.ts → create-step-prompt.d.ts} +1 -1
  115. package/dist/types/commands/app/status-icon.d.ts +8 -0
  116. package/dist/types/commands/app/tools/create-append-file-tool.d.ts +10 -0
  117. package/dist/types/commands/app/tools/{click.d.ts → create-click-tool.d.ts} +1 -1
  118. package/dist/types/commands/app/tools/{errors.d.ts → create-errors-tool.d.ts} +1 -1
  119. package/dist/types/commands/app/tools/{eval-js.d.ts → create-eval-js-tool.d.ts} +1 -1
  120. package/dist/types/commands/app/tools/{fill.d.ts → create-fill-tool.d.ts} +1 -1
  121. package/dist/types/commands/app/tools/{find.d.ts → create-find-tool.d.ts} +1 -1
  122. package/dist/types/commands/app/tools/{get-styles.d.ts → create-get-styles-tool.d.ts} +1 -1
  123. package/dist/types/commands/app/tools/{get-url.d.ts → create-get-url-tool.d.ts} +1 -1
  124. package/dist/types/commands/app/tools/{go-back.d.ts → create-go-back-tool.d.ts} +1 -1
  125. package/dist/types/commands/app/tools/{hover.d.ts → create-hover-tool.d.ts} +1 -1
  126. package/dist/types/commands/app/tools/{navigate.d.ts → create-navigate-tool.d.ts} +1 -1
  127. package/dist/types/commands/app/tools/{press-key.d.ts → create-press-key-tool.d.ts} +1 -1
  128. package/dist/types/commands/app/tools/{read-file.d.ts → create-read-file-tool.d.ts} +1 -1
  129. package/dist/types/commands/app/tools/{reload.d.ts → create-reload-tool.d.ts} +1 -1
  130. package/dist/types/commands/app/tools/{screenshot.d.ts → create-screenshot-tool.d.ts} +1 -1
  131. package/dist/types/commands/app/tools/{scroll.d.ts → create-scroll-tool.d.ts} +1 -1
  132. package/dist/types/commands/app/tools/{select.d.ts → create-select-tool.d.ts} +1 -1
  133. package/dist/types/commands/app/tools/{snapshot.d.ts → create-snapshot-tool.d.ts} +1 -1
  134. package/dist/types/commands/app/tools/{type-text.d.ts → create-type-text-tool.d.ts} +1 -1
  135. package/dist/types/commands/app/tools/{wait.d.ts → create-wait-tool.d.ts} +1 -1
  136. package/dist/types/commands/app/tools/create-write-file-tool.d.ts +10 -0
  137. package/dist/types/commands/app/truncate.d.ts +8 -0
  138. package/dist/types/commands/app/try-format-message.d.ts +10 -0
  139. package/dist/types/exit-with-resolution-error.d.ts +8 -0
  140. package/dist/types/{eval-resolve.d.ts → resolve-eval-command-input.d.ts} +0 -8
  141. package/dist/types/resolve-eval-files.d.ts +8 -0
  142. package/dist/types/utils/ab-error-message.d.ts +11 -0
  143. package/dist/types/utils/{agent-browser.d.ts → ab.d.ts} +0 -13
  144. package/dist/types/utils/create-run-dir.d.ts +8 -0
  145. package/dist/types/utils/{process.d.ts → helpers.d.ts} +13 -6
  146. package/dist/types/utils/index.d.ts +8 -5
  147. package/dist/types/utils/{daemon.d.ts → reset-daemon.d.ts} +0 -5
  148. package/dist/types/utils/resolve-app-key.d.ts +9 -0
  149. package/dist/types/utils/wait-for-server.d.ts +9 -0
  150. package/dist/types/version.d.ts +1 -1
  151. package/package.json +6 -6
  152. package/src/commands/app/{session-logger.ts → attach-session-logger.ts} +15 -1
  153. package/src/commands/app/{command.ts → copilot-command.ts} +21 -12
  154. package/src/commands/app/{eval.ts → create-session.ts} +7 -5
  155. package/src/commands/app/format-plan.ts +26 -0
  156. package/src/commands/app/format-step-result.ts +16 -0
  157. package/src/commands/app/format-verdict.ts +43 -0
  158. package/src/commands/app/prompts/{judge.prompt.ts → create-judge-prompt.ts} +4 -0
  159. package/src/commands/app/prompts/{step.prompt.ts → create-step-prompt.ts} +2 -1
  160. package/src/commands/app/{login.ts → run-login.ts} +4 -0
  161. package/src/commands/app/{server.ts → start-app-server.ts} +6 -0
  162. package/src/commands/app/status-icon.ts +16 -0
  163. package/src/commands/app/tools/{write-file.ts → create-append-file-tool.ts} +4 -39
  164. package/src/commands/app/tools/{find.ts → create-find-tool.ts} +3 -0
  165. package/src/commands/app/tools/{read-file.ts → create-read-file-tool.ts} +3 -1
  166. package/src/commands/app/tools/{screenshot.ts → create-screenshot-tool.ts} +6 -0
  167. package/src/commands/app/tools/{scroll.ts → create-scroll-tool.ts} +2 -0
  168. package/src/commands/app/tools/{wait.ts → create-wait-tool.ts} +4 -0
  169. package/src/commands/app/tools/create-write-file-tool.ts +69 -0
  170. package/src/commands/app/tools/index.ts +19 -19
  171. package/src/commands/app/truncate.ts +10 -0
  172. package/src/commands/app/try-format-message.ts +42 -0
  173. package/src/exit-with-resolution-error.ts +15 -0
  174. package/src/index.ts +1 -1
  175. package/src/resolve-eval-command-input.ts +59 -0
  176. package/src/resolve-eval-files.ts +57 -0
  177. package/src/utils/ab-error-message.ts +31 -0
  178. package/src/utils/{agent-browser.ts → ab.ts} +2 -30
  179. package/src/utils/create-run-dir.ts +24 -0
  180. package/src/utils/{process.ts → helpers.ts} +28 -10
  181. package/src/utils/index.ts +8 -5
  182. package/src/utils/{browser-poll.ts → poll-console.ts} +4 -2
  183. package/src/utils/{daemon.ts → reset-daemon.ts} +4 -13
  184. package/src/utils/resolve-app-key.ts +20 -0
  185. package/src/utils/wait-for-server.ts +24 -0
  186. package/src/version.ts +1 -1
  187. package/tsconfig.json +3 -1
  188. package/dist/esm/commands/app/command.js.map +0 -1
  189. package/dist/esm/commands/app/eval.js.map +0 -1
  190. package/dist/esm/commands/app/format.js +0 -93
  191. package/dist/esm/commands/app/format.js.map +0 -1
  192. package/dist/esm/commands/app/login.js.map +0 -1
  193. package/dist/esm/commands/app/prompts/execute-step.prompt.js.map +0 -1
  194. package/dist/esm/commands/app/prompts/judge.prompt.js.map +0 -1
  195. package/dist/esm/commands/app/prompts/plan.prompt.js.map +0 -1
  196. package/dist/esm/commands/app/prompts/step.prompt.js.map +0 -1
  197. package/dist/esm/commands/app/prompts/system.dev-server.prompt.js.map +0 -1
  198. package/dist/esm/commands/app/prompts/system.prompt.js.map +0 -1
  199. package/dist/esm/commands/app/server.js.map +0 -1
  200. package/dist/esm/commands/app/session-logger.js.map +0 -1
  201. package/dist/esm/commands/app/tools/click.js.map +0 -1
  202. package/dist/esm/commands/app/tools/errors.js.map +0 -1
  203. package/dist/esm/commands/app/tools/eval-js.js.map +0 -1
  204. package/dist/esm/commands/app/tools/fill.js.map +0 -1
  205. package/dist/esm/commands/app/tools/find.js.map +0 -1
  206. package/dist/esm/commands/app/tools/get-styles.js.map +0 -1
  207. package/dist/esm/commands/app/tools/get-url.js.map +0 -1
  208. package/dist/esm/commands/app/tools/go-back.js.map +0 -1
  209. package/dist/esm/commands/app/tools/hover.js.map +0 -1
  210. package/dist/esm/commands/app/tools/navigate.js.map +0 -1
  211. package/dist/esm/commands/app/tools/press-key.js.map +0 -1
  212. package/dist/esm/commands/app/tools/read-file.js.map +0 -1
  213. package/dist/esm/commands/app/tools/registry.js.map +0 -1
  214. package/dist/esm/commands/app/tools/reload.js.map +0 -1
  215. package/dist/esm/commands/app/tools/screenshot.js.map +0 -1
  216. package/dist/esm/commands/app/tools/scroll.js.map +0 -1
  217. package/dist/esm/commands/app/tools/select.js.map +0 -1
  218. package/dist/esm/commands/app/tools/snapshot.js.map +0 -1
  219. package/dist/esm/commands/app/tools/type-text.js.map +0 -1
  220. package/dist/esm/commands/app/tools/wait.js.map +0 -1
  221. package/dist/esm/commands/app/tools/write-file.js.map +0 -1
  222. package/dist/esm/eval-resolve.js +0 -83
  223. package/dist/esm/eval-resolve.js.map +0 -1
  224. package/dist/esm/utils/agent-browser.js.map +0 -1
  225. package/dist/esm/utils/browser-poll.js.map +0 -1
  226. package/dist/esm/utils/daemon.js.map +0 -1
  227. package/dist/esm/utils/process.js.map +0 -1
  228. package/dist/esm/utils/server.js +0 -65
  229. package/dist/esm/utils/server.js.map +0 -1
  230. package/dist/types/commands/app/format.d.ts +0 -14
  231. package/dist/types/commands/app/tools/write-file.d.ts +0 -19
  232. package/dist/types/utils/server.d.ts +0 -26
  233. package/src/commands/app/format.ts +0 -110
  234. package/src/eval-resolve.ts +0 -113
  235. package/src/utils/server.ts +0 -66
  236. /package/dist/types/commands/app/{session-logger.d.ts → attach-session-logger.d.ts} +0 -0
  237. /package/dist/types/commands/app/{eval.d.ts → create-session.d.ts} +0 -0
  238. /package/dist/types/commands/app/prompts/{system.dev-server.prompt.d.ts → create-dev-server-context.d.ts} +0 -0
  239. /package/dist/types/commands/app/prompts/{execute-step.prompt.d.ts → create-execute-step-prompt.d.ts} +0 -0
  240. /package/dist/types/commands/app/prompts/{judge.prompt.d.ts → create-judge-prompt.d.ts} +0 -0
  241. /package/dist/types/commands/app/prompts/{plan.prompt.d.ts → create-plan-prompt.d.ts} +0 -0
  242. /package/dist/types/commands/app/prompts/{system.prompt.d.ts → create-system-prompt.d.ts} +0 -0
  243. /package/dist/types/commands/app/{login.d.ts → run-login.d.ts} +0 -0
  244. /package/dist/types/commands/app/{server.d.ts → start-app-server.d.ts} +0 -0
  245. /package/dist/types/commands/app/tools/{registry.d.ts → AgentBrowserToolRegistry.d.ts} +0 -0
  246. /package/dist/types/utils/{browser-poll.d.ts → poll-console.d.ts} +0 -0
  247. /package/src/commands/app/prompts/{system.dev-server.prompt.ts → create-dev-server-context.ts} +0 -0
  248. /package/src/commands/app/prompts/{execute-step.prompt.ts → create-execute-step-prompt.ts} +0 -0
  249. /package/src/commands/app/prompts/{plan.prompt.ts → create-plan-prompt.ts} +0 -0
  250. /package/src/commands/app/prompts/{system.prompt.ts → create-system-prompt.ts} +0 -0
  251. /package/src/commands/app/tools/{registry.ts → AgentBrowserToolRegistry.ts} +0 -0
  252. /package/src/commands/app/tools/{click.ts → create-click-tool.ts} +0 -0
  253. /package/src/commands/app/tools/{errors.ts → create-errors-tool.ts} +0 -0
  254. /package/src/commands/app/tools/{eval-js.ts → create-eval-js-tool.ts} +0 -0
  255. /package/src/commands/app/tools/{fill.ts → create-fill-tool.ts} +0 -0
  256. /package/src/commands/app/tools/{get-styles.ts → create-get-styles-tool.ts} +0 -0
  257. /package/src/commands/app/tools/{get-url.ts → create-get-url-tool.ts} +0 -0
  258. /package/src/commands/app/tools/{go-back.ts → create-go-back-tool.ts} +0 -0
  259. /package/src/commands/app/tools/{hover.ts → create-hover-tool.ts} +0 -0
  260. /package/src/commands/app/tools/{navigate.ts → create-navigate-tool.ts} +0 -0
  261. /package/src/commands/app/tools/{press-key.ts → create-press-key-tool.ts} +0 -0
  262. /package/src/commands/app/tools/{reload.ts → create-reload-tool.ts} +0 -0
  263. /package/src/commands/app/tools/{select.ts → create-select-tool.ts} +0 -0
  264. /package/src/commands/app/tools/{snapshot.ts → create-snapshot-tool.ts} +0 -0
  265. /package/src/commands/app/tools/{type-text.ts → create-type-text-tool.ts} +0 -0
@@ -1,66 +0,0 @@
1
- import { execFileSync } from 'node:child_process';
2
- import { mkdirSync } from 'node:fs';
3
- import { join, relative, resolve } from 'node:path';
4
-
5
- import { sleep } from './process.js';
6
-
7
- /**
8
- * Creates a timestamped, run-specific output directory for eval artifacts.
9
- *
10
- * @param title - Human label used as the directory name prefix (slugified)
11
- * @param baseDir - Optional parent directory override
12
- * @returns Absolute path to the newly created directory
13
- */
14
- export function createRunDir(title: string, baseDir?: string): string {
15
- const now = new Date();
16
- const time = [now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()]
17
- .map((n) => String(n).padStart(2, '0'))
18
- .join('');
19
- const ms = String(now.getUTCMilliseconds()).padStart(3, '0');
20
- const slug = title.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-');
21
- const parent = baseDir ? resolve(baseDir) : resolve('.tmp', 'copilot');
22
- const dir = join(parent, `${slug}_${time}${ms}`);
23
- mkdirSync(dir, { recursive: true });
24
- console.log(`📁 Run dir: ${relative(process.cwd(), dir)}`);
25
- return dir;
26
- }
27
-
28
- /**
29
- * Resolves the Fusion `appKey` by running `ffc app manifest --silent`
30
- * in the given application directory and parsing the JSON output.
31
- *
32
- * @param appDir - Absolute path to the Fusion application
33
- * @returns The `appKey` string from the manifest
34
- * @throws {Error} When `ffc app manifest` fails or returns invalid JSON
35
- */
36
- export function resolveAppKey(appDir: string): string {
37
- const output = execFileSync('ffc', ['app', 'manifest', '--silent'], {
38
- cwd: appDir,
39
- encoding: 'utf-8',
40
- timeout: 30_000,
41
- stdio: ['ignore', 'pipe', 'pipe'],
42
- });
43
- const manifest = JSON.parse(output) as { appKey: string };
44
- return manifest.appKey;
45
- }
46
-
47
- /**
48
- * Polls a server URL until it responds with a non-5xx status or the
49
- * timeout is reached.
50
- *
51
- * @param url - The URL to poll (e.g. `http://localhost:3000`)
52
- * @param timeoutSeconds - Maximum number of seconds to wait
53
- * @returns `true` if the server responded before timeout, `false` otherwise
54
- */
55
- export async function waitForServer(url: string, timeoutSeconds: number): Promise<boolean> {
56
- for (let i = 0; i < timeoutSeconds; i++) {
57
- try {
58
- const res = await fetch(url, { signal: AbortSignal.timeout(2000) });
59
- if (res.ok || res.status < 500) return true;
60
- } catch {
61
- // Server not ready yet — retry
62
- }
63
- await sleep(1000);
64
- }
65
- return false;
66
- }