@supatype/cli 0.1.0 → 0.1.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 (331) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +121 -86
  3. package/.turbo/turbo-typecheck.log +2 -2
  4. package/dist/binary-cache.d.ts +2 -0
  5. package/dist/binary-cache.d.ts.map +1 -1
  6. package/dist/binary-cache.js +36 -0
  7. package/dist/binary-cache.js.map +1 -1
  8. package/dist/binary-download-lock.d.ts +12 -0
  9. package/dist/binary-download-lock.d.ts.map +1 -0
  10. package/dist/binary-download-lock.js +106 -0
  11. package/dist/binary-download-lock.js.map +1 -0
  12. package/dist/cli-package-version.d.ts +3 -0
  13. package/dist/cli-package-version.d.ts.map +1 -0
  14. package/dist/cli-package-version.js +15 -0
  15. package/dist/cli-package-version.js.map +1 -0
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +5 -2
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/add.js +25 -19
  20. package/dist/commands/add.js.map +1 -1
  21. package/dist/commands/admin.d.ts +28 -1
  22. package/dist/commands/admin.d.ts.map +1 -1
  23. package/dist/commands/admin.js +290 -112
  24. package/dist/commands/admin.js.map +1 -1
  25. package/dist/commands/cache.d.ts +1 -1
  26. package/dist/commands/cache.d.ts.map +1 -1
  27. package/dist/commands/cache.js +98 -5
  28. package/dist/commands/cache.js.map +1 -1
  29. package/dist/commands/dev.d.ts.map +1 -1
  30. package/dist/commands/dev.js +28 -22
  31. package/dist/commands/dev.js.map +1 -1
  32. package/dist/commands/init.d.ts +8 -4
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +278 -139
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/link-helpers.d.ts.map +1 -1
  37. package/dist/commands/link-helpers.js +26 -25
  38. package/dist/commands/link-helpers.js.map +1 -1
  39. package/dist/commands/push.js +3 -3
  40. package/dist/commands/push.js.map +1 -1
  41. package/dist/compose-local-server-image.d.ts +13 -0
  42. package/dist/compose-local-server-image.d.ts.map +1 -0
  43. package/dist/compose-local-server-image.js +57 -0
  44. package/dist/compose-local-server-image.js.map +1 -0
  45. package/dist/compose-rename.d.ts +10 -0
  46. package/dist/compose-rename.d.ts.map +1 -0
  47. package/dist/compose-rename.js +64 -0
  48. package/dist/compose-rename.js.map +1 -0
  49. package/dist/dev-compose.d.ts.map +1 -1
  50. package/dist/dev-compose.js +138 -97
  51. package/dist/dev-compose.js.map +1 -1
  52. package/dist/dev-log-bus.d.ts +5 -0
  53. package/dist/dev-log-bus.d.ts.map +1 -1
  54. package/dist/dev-log-bus.js +14 -0
  55. package/dist/dev-log-bus.js.map +1 -1
  56. package/dist/dev-log-filter.d.ts +4 -0
  57. package/dist/dev-log-filter.d.ts.map +1 -1
  58. package/dist/dev-log-filter.js +52 -0
  59. package/dist/dev-log-filter.js.map +1 -1
  60. package/dist/dev-ports.d.ts +27 -0
  61. package/dist/dev-ports.d.ts.map +1 -0
  62. package/dist/dev-ports.js +178 -0
  63. package/dist/dev-ports.js.map +1 -0
  64. package/dist/dev-ready-panel.d.ts +19 -0
  65. package/dist/dev-ready-panel.d.ts.map +1 -0
  66. package/dist/dev-ready-panel.js +49 -0
  67. package/dist/dev-ready-panel.js.map +1 -0
  68. package/dist/dev-session-lock.d.ts +25 -0
  69. package/dist/dev-session-lock.d.ts.map +1 -0
  70. package/dist/dev-session-lock.js +78 -0
  71. package/dist/dev-session-lock.js.map +1 -0
  72. package/dist/dev-session.d.ts +18 -5
  73. package/dist/dev-session.d.ts.map +1 -1
  74. package/dist/dev-session.js +91 -18
  75. package/dist/dev-session.js.map +1 -1
  76. package/dist/dev-shutdown.d.ts +20 -2
  77. package/dist/dev-shutdown.d.ts.map +1 -1
  78. package/dist/dev-shutdown.js +88 -10
  79. package/dist/dev-shutdown.js.map +1 -1
  80. package/dist/dev-task-colors.d.ts +3 -1
  81. package/dist/dev-task-colors.d.ts.map +1 -1
  82. package/dist/dev-task-colors.js +23 -3
  83. package/dist/dev-task-colors.js.map +1 -1
  84. package/dist/docker-runtime.js +1 -1
  85. package/dist/docker-runtime.js.map +1 -1
  86. package/dist/engine-push-output.d.ts +1 -0
  87. package/dist/engine-push-output.d.ts.map +1 -1
  88. package/dist/engine-push-output.js +4 -1
  89. package/dist/engine-push-output.js.map +1 -1
  90. package/dist/ensure-binary.d.ts.map +1 -1
  91. package/dist/ensure-binary.js +14 -2
  92. package/dist/ensure-binary.js.map +1 -1
  93. package/dist/ensure-component-binaries.d.ts +17 -0
  94. package/dist/ensure-component-binaries.d.ts.map +1 -0
  95. package/dist/ensure-component-binaries.js +45 -0
  96. package/dist/ensure-component-binaries.js.map +1 -0
  97. package/dist/ensure-dev-api-config.d.ts +3 -0
  98. package/dist/ensure-dev-api-config.d.ts.map +1 -0
  99. package/dist/ensure-dev-api-config.js +17 -0
  100. package/dist/ensure-dev-api-config.js.map +1 -0
  101. package/dist/env-file.d.ts +5 -0
  102. package/dist/env-file.d.ts.map +1 -0
  103. package/dist/env-file.js +33 -0
  104. package/dist/env-file.js.map +1 -0
  105. package/dist/init-dependency-versions.d.ts +13 -0
  106. package/dist/init-dependency-versions.d.ts.map +1 -0
  107. package/dist/init-dependency-versions.js +53 -0
  108. package/dist/init-dependency-versions.js.map +1 -0
  109. package/dist/init-package-json.d.ts +21 -0
  110. package/dist/init-package-json.d.ts.map +1 -0
  111. package/dist/init-package-json.js +46 -0
  112. package/dist/init-package-json.js.map +1 -0
  113. package/dist/postgres-ctl.d.ts.map +1 -1
  114. package/dist/postgres-ctl.js +2 -1
  115. package/dist/postgres-ctl.js.map +1 -1
  116. package/dist/required-host-components.d.ts +11 -0
  117. package/dist/required-host-components.d.ts.map +1 -0
  118. package/dist/required-host-components.js +25 -0
  119. package/dist/required-host-components.js.map +1 -0
  120. package/dist/resolve-api-url.d.ts +6 -0
  121. package/dist/resolve-api-url.d.ts.map +1 -0
  122. package/dist/resolve-api-url.js +39 -0
  123. package/dist/resolve-api-url.js.map +1 -0
  124. package/dist/rest-cache-admin.d.ts +33 -0
  125. package/dist/rest-cache-admin.d.ts.map +1 -0
  126. package/dist/rest-cache-admin.js +96 -0
  127. package/dist/rest-cache-admin.js.map +1 -0
  128. package/dist/scripts/postinstall.d.ts +4 -6
  129. package/dist/scripts/postinstall.d.ts.map +1 -1
  130. package/dist/scripts/postinstall.js +8 -41
  131. package/dist/scripts/postinstall.js.map +1 -1
  132. package/dist/self-host-compose.d.ts.map +1 -1
  133. package/dist/self-host-compose.js +24 -13
  134. package/dist/self-host-compose.js.map +1 -1
  135. package/dist/studio-dev-server.d.ts +4 -2
  136. package/dist/studio-dev-server.d.ts.map +1 -1
  137. package/dist/studio-dev-server.js +3 -2
  138. package/dist/studio-dev-server.js.map +1 -1
  139. package/dist/ui/brand.d.ts +2 -5
  140. package/dist/ui/brand.d.ts.map +1 -1
  141. package/dist/ui/brand.js +2 -7
  142. package/dist/ui/brand.js.map +1 -1
  143. package/dist/ui/clack-api.d.ts +44 -0
  144. package/dist/ui/clack-api.d.ts.map +1 -0
  145. package/dist/ui/clack-api.js +76 -0
  146. package/dist/ui/clack-api.js.map +1 -0
  147. package/dist/ui/clack.d.ts +14 -0
  148. package/dist/ui/clack.d.ts.map +1 -0
  149. package/dist/ui/clack.js +147 -0
  150. package/dist/ui/clack.js.map +1 -0
  151. package/dist/ui/components/FlowSpinner.d.ts +5 -0
  152. package/dist/ui/components/FlowSpinner.d.ts.map +1 -0
  153. package/dist/ui/components/FlowSpinner.js +8 -0
  154. package/dist/ui/components/FlowSpinner.js.map +1 -0
  155. package/dist/ui/components/LogoWordmark.d.ts +9 -0
  156. package/dist/ui/components/LogoWordmark.d.ts.map +1 -0
  157. package/dist/ui/components/LogoWordmark.js +17 -0
  158. package/dist/ui/components/LogoWordmark.js.map +1 -0
  159. package/dist/ui/components/PromptPanel.d.ts +5 -0
  160. package/dist/ui/components/PromptPanel.d.ts.map +1 -0
  161. package/dist/ui/components/PromptPanel.js +7 -0
  162. package/dist/ui/components/PromptPanel.js.map +1 -0
  163. package/dist/ui/components/SelectField.d.ts +11 -0
  164. package/dist/ui/components/SelectField.d.ts.map +1 -0
  165. package/dist/ui/components/SelectField.js +19 -0
  166. package/dist/ui/components/SelectField.js.map +1 -0
  167. package/dist/ui/confirm.d.ts +2 -1
  168. package/dist/ui/confirm.d.ts.map +1 -1
  169. package/dist/ui/confirm.js +4 -4
  170. package/dist/ui/confirm.js.map +1 -1
  171. package/dist/ui/dev/DevDashboard.d.ts +8 -0
  172. package/dist/ui/dev/DevDashboard.d.ts.map +1 -0
  173. package/dist/ui/dev/DevDashboard.js +151 -0
  174. package/dist/ui/dev/DevDashboard.js.map +1 -0
  175. package/dist/ui/dev/DevReadyPanelView.d.ts +7 -0
  176. package/dist/ui/dev/DevReadyPanelView.d.ts.map +1 -0
  177. package/dist/ui/dev/DevReadyPanelView.js +29 -0
  178. package/dist/ui/dev/DevReadyPanelView.js.map +1 -0
  179. package/dist/ui/fatal.d.ts.map +1 -1
  180. package/dist/ui/fatal.js +5 -11
  181. package/dist/ui/fatal.js.map +1 -1
  182. package/dist/ui/flows/FlowApp.d.ts +8 -0
  183. package/dist/ui/flows/FlowApp.d.ts.map +1 -0
  184. package/dist/ui/flows/FlowApp.js +42 -0
  185. package/dist/ui/flows/FlowApp.js.map +1 -0
  186. package/dist/ui/flows/prompt-fields.d.ts +48 -0
  187. package/dist/ui/flows/prompt-fields.d.ts.map +1 -0
  188. package/dist/ui/flows/prompt-fields.js +88 -0
  189. package/dist/ui/flows/prompt-fields.js.map +1 -0
  190. package/dist/ui/flows/types.d.ts +41 -0
  191. package/dist/ui/flows/types.d.ts.map +1 -0
  192. package/dist/ui/flows/types.js +2 -0
  193. package/dist/ui/flows/types.js.map +1 -0
  194. package/dist/ui/index.d.ts +1 -1
  195. package/dist/ui/index.js +1 -1
  196. package/dist/ui/messages.d.ts +1 -0
  197. package/dist/ui/messages.d.ts.map +1 -1
  198. package/dist/ui/messages.js +48 -8
  199. package/dist/ui/messages.js.map +1 -1
  200. package/dist/ui/progress.d.ts +5 -1
  201. package/dist/ui/progress.d.ts.map +1 -1
  202. package/dist/ui/progress.js +12 -3
  203. package/dist/ui/progress.js.map +1 -1
  204. package/dist/ui/prompts.d.ts +7 -5
  205. package/dist/ui/prompts.d.ts.map +1 -1
  206. package/dist/ui/prompts.js +15 -8
  207. package/dist/ui/prompts.js.map +1 -1
  208. package/dist/ui/runtime/cancel.d.ts +4 -0
  209. package/dist/ui/runtime/cancel.d.ts.map +1 -0
  210. package/dist/ui/runtime/cancel.js +6 -0
  211. package/dist/ui/runtime/cancel.js.map +1 -0
  212. package/dist/ui/runtime/command-chrome.d.ts +17 -0
  213. package/dist/ui/runtime/command-chrome.d.ts.map +1 -0
  214. package/dist/ui/runtime/command-chrome.js +123 -0
  215. package/dist/ui/runtime/command-chrome.js.map +1 -0
  216. package/dist/ui/runtime/dev-prompt-queue.d.ts +30 -0
  217. package/dist/ui/runtime/dev-prompt-queue.d.ts.map +1 -0
  218. package/dist/ui/runtime/dev-prompt-queue.js +57 -0
  219. package/dist/ui/runtime/dev-prompt-queue.js.map +1 -0
  220. package/dist/ui/runtime/flow-session.d.ts +4 -0
  221. package/dist/ui/runtime/flow-session.d.ts.map +1 -0
  222. package/dist/ui/runtime/flow-session.js +8 -0
  223. package/dist/ui/runtime/flow-session.js.map +1 -0
  224. package/dist/ui/runtime/run-clack-flow.d.ts +5 -0
  225. package/dist/ui/runtime/run-clack-flow.d.ts.map +1 -0
  226. package/dist/ui/runtime/run-clack-flow.js +34 -0
  227. package/dist/ui/runtime/run-clack-flow.js.map +1 -0
  228. package/dist/ui/theme.d.ts +24 -0
  229. package/dist/ui/theme.d.ts.map +1 -0
  230. package/dist/ui/theme.js +34 -0
  231. package/dist/ui/theme.js.map +1 -0
  232. package/dist/valkey-sidecar.d.ts +17 -0
  233. package/dist/valkey-sidecar.d.ts.map +1 -0
  234. package/dist/valkey-sidecar.js +94 -0
  235. package/dist/valkey-sidecar.js.map +1 -0
  236. package/package.json +11 -3
  237. package/src/binary-cache.ts +61 -0
  238. package/src/binary-download-lock.ts +124 -0
  239. package/src/cli-package-version.ts +15 -0
  240. package/src/cli.ts +6 -2
  241. package/src/commands/add.ts +26 -19
  242. package/src/commands/admin.ts +380 -137
  243. package/src/commands/cache.ts +105 -5
  244. package/src/commands/dev.ts +29 -21
  245. package/src/commands/init.ts +217 -46
  246. package/src/commands/link-helpers.ts +30 -29
  247. package/src/commands/push.ts +3 -3
  248. package/src/compose-local-server-image.ts +68 -0
  249. package/src/compose-rename.ts +73 -0
  250. package/src/dev-compose.ts +175 -96
  251. package/src/dev-log-bus.ts +18 -0
  252. package/src/dev-log-filter.ts +42 -0
  253. package/src/dev-ports.ts +223 -0
  254. package/src/dev-ready-panel.ts +63 -0
  255. package/src/dev-session-lock.ts +98 -0
  256. package/src/dev-session.ts +98 -18
  257. package/src/dev-shutdown.ts +114 -9
  258. package/src/dev-task-colors.ts +22 -3
  259. package/src/docker-runtime.ts +1 -1
  260. package/src/engine-push-output.ts +5 -1
  261. package/src/ensure-binary.ts +21 -1
  262. package/src/ensure-component-binaries.ts +71 -0
  263. package/src/ensure-dev-api-config.ts +18 -0
  264. package/src/env-file.ts +37 -0
  265. package/src/init-dependency-versions.ts +69 -0
  266. package/src/init-package-json.ts +63 -0
  267. package/src/postgres-ctl.ts +2 -1
  268. package/src/required-host-components.ts +37 -0
  269. package/src/resolve-api-url.ts +43 -0
  270. package/src/rest-cache-admin.ts +135 -0
  271. package/src/scripts/postinstall.ts +9 -46
  272. package/src/self-host-compose.ts +23 -12
  273. package/src/studio-dev-server.ts +5 -4
  274. package/src/ui/README.md +13 -9
  275. package/src/ui/brand.ts +2 -8
  276. package/src/ui/clack-api.ts +123 -0
  277. package/src/ui/clack.ts +153 -0
  278. package/src/ui/components/FlowSpinner.tsx +15 -0
  279. package/src/ui/components/LogoWordmark.tsx +36 -0
  280. package/src/ui/components/PromptPanel.tsx +17 -0
  281. package/src/ui/components/SelectField.tsx +58 -0
  282. package/src/ui/confirm.ts +5 -4
  283. package/src/ui/dev/DevDashboard.tsx +213 -0
  284. package/src/ui/dev/DevReadyPanelView.tsx +67 -0
  285. package/src/ui/fatal.ts +5 -10
  286. package/src/ui/flows/FlowApp.tsx +67 -0
  287. package/src/ui/flows/prompt-fields.tsx +192 -0
  288. package/src/ui/flows/types.ts +50 -0
  289. package/src/ui/index.ts +1 -1
  290. package/src/ui/messages.ts +50 -8
  291. package/src/ui/progress.ts +14 -3
  292. package/src/ui/prompts.ts +17 -9
  293. package/src/ui/runtime/cancel.ts +6 -0
  294. package/src/ui/runtime/command-chrome.ts +147 -0
  295. package/src/ui/runtime/dev-prompt-queue.ts +84 -0
  296. package/src/ui/runtime/flow-session.ts +11 -0
  297. package/src/ui/runtime/run-clack-flow.tsx +52 -0
  298. package/src/ui/theme.ts +41 -0
  299. package/src/valkey-sidecar.ts +126 -0
  300. package/tests/admin-ensure.test.ts +59 -0
  301. package/tests/binary-cache-cloud-overrides.test.ts +2 -2
  302. package/tests/binary-download-lock.test.ts +41 -0
  303. package/tests/cli-help.test.ts +7 -4
  304. package/tests/cli-package-version.test.ts +15 -0
  305. package/tests/command-chrome-coverage.test.ts +149 -0
  306. package/tests/command-chrome-wrap.test.ts +51 -0
  307. package/tests/config.test.ts +8 -4
  308. package/tests/dev-ports.test.ts +41 -0
  309. package/tests/dev-ready-panel.test.ts +20 -0
  310. package/tests/dev-session-lock.test.ts +54 -0
  311. package/tests/dev-ui.test.ts +66 -3
  312. package/tests/docker-runtime.test.ts +9 -20
  313. package/tests/ensure-dev-api-config.test.ts +22 -0
  314. package/tests/init-dependency-versions.test.ts +62 -0
  315. package/tests/init-package-json.test.ts +18 -0
  316. package/tests/init.test.ts +30 -3
  317. package/tests/required-host-components.test.ts +51 -0
  318. package/tests/resolve-api-url.test.ts +23 -0
  319. package/tests/rest-cache-admin.test.ts +28 -0
  320. package/tests/runtime-contract.test.ts +12 -3
  321. package/tests/tsconfig.json +8 -2
  322. package/tests/ui-confirm.test.ts +13 -9
  323. package/tests/ui-messages.test.ts +4 -18
  324. package/tsconfig.json +1 -0
  325. package/tsconfig.tsbuildinfo +1 -1
  326. package/vitest.config.ts +3 -0
  327. package/dist/dev-tui.d.ts +0 -24
  328. package/dist/dev-tui.d.ts.map +0 -1
  329. package/dist/dev-tui.js +0 -188
  330. package/dist/dev-tui.js.map +0 -1
  331. package/src/dev-tui.ts +0 -232
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Line filters for subprocess output during `supatype dev`.
3
3
  */
4
+ import { isComposeProgressLine } from "./engine-push-output.js";
4
5
  /** Strip ANSI SGR sequences for TUI rendering. */
5
6
  export function stripAnsi(text) {
6
7
  return text.replace(/\x1b\[[0-9;]*m/g, "");
@@ -18,6 +19,57 @@ export function filterDevSubprocessLine(taskId, line) {
18
19
  return false;
19
20
  return true;
20
21
  }
22
+ const DOCKER_BUILD_NOISE = /^#\d+\s|^#\d+ \[|^\s*=> \[|^\s*=>\s|^\s*--->\s|^\s*\d+\.\d+s\s|^\s*CACHED\s|^\s*DONE\s[\d.]+s?$|^Step \d+\/\d+|^Successfully (built|tagged)|^WARNING:|^DEPRECATED:|^View build details:|^What's next:|^The push refers to|^Using docker|^Sending build context|^Pulling fs layer|^Waiting$|^Verifying Checksum|^Download complete|^Pull complete|^Extracting \[|^Already exists$|^Building dependency tree|^Reading state information|^Get:\d+ |^Fetched \d+ |^Reading package lists|^Preparing to unpack|^Unpacking |^Setting up /i;
23
+ /** Drop docker build / compose progress from the orchestrator (stack) pane. */
24
+ export function filterStackLogLine(line) {
25
+ const t = stripAnsi(line).trim();
26
+ if (!t)
27
+ return false;
28
+ if (t.startsWith("✗ ") || t.startsWith("⚠ "))
29
+ return true;
30
+ if (/https?:\/\//.test(t) || /^ws:\/\//.test(t))
31
+ return true;
32
+ if (/\[supatype\]/.test(line))
33
+ return true;
34
+ if (/^Services running/i.test(t))
35
+ return true;
36
+ if (/^(anon key|service_role|API \(Kong\)|REST API|Auth|Storage|Realtime|Studio|App|Demo data|Postgres|supatype-server|Press Ctrl)/.test(t)) {
37
+ return true;
38
+ }
39
+ if (/^Applied \d+ operation|^Schema up to date|^Schema pushed|^Watching .+ for changes|^Change detected|^Shutting down|^Compose stack stopped|^Local server image ready|^Building local server|^Waiting for |^Recreating server|^API config written|^provider: docker|^Bringing up Docker|^Schema push failed|^Initial schema push failed|^Storage bucket|^Storage API at|^Local binary overrides active|^Resolving component binaries|^Postgres |^Demo data:|^JWT secret:/.test(t)) {
40
+ return true;
41
+ }
42
+ if (/^\S+\s+→\s/.test(t))
43
+ return true;
44
+ if (isComposeProgressLine(t))
45
+ return false;
46
+ if (DOCKER_BUILD_NOISE.test(t))
47
+ return false;
48
+ if (/^Container\s+/i.test(t))
49
+ return false;
50
+ if (/^Image\s+/i.test(t))
51
+ return false;
52
+ if (/^network\s+\S+\s+(Creating|Created)/i.test(t))
53
+ return false;
54
+ if (/^volume\s+\S+\s+(Creating|Created)/i.test(t))
55
+ return false;
56
+ return false;
57
+ }
58
+ /** Drop docker noise only — keep diff tables, push status, and command output. */
59
+ export function filterCommandLogLine(line) {
60
+ const t = stripAnsi(line).trim();
61
+ if (!t)
62
+ return false;
63
+ if (isComposeProgressLine(t))
64
+ return false;
65
+ if (DOCKER_BUILD_NOISE.test(t))
66
+ return false;
67
+ if (/^Container\s+/i.test(t))
68
+ return false;
69
+ if (/^Image\s+/i.test(t))
70
+ return false;
71
+ return true;
72
+ }
21
73
  /** Format console.* arguments the way Node does for a single log line. */
22
74
  export function formatConsoleArgs(args) {
23
75
  return args
@@ -1 +1 @@
1
- {"version":3,"file":"dev-log-filter.js","sourceRoot":"","sources":["../src/dev-log-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,IAAY;IAClE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACxD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACvE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAA;QACvC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"dev-log-filter.js","sourceRoot":"","sources":["../src/dev-log-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Kong / Postgres host port resolution for local Docker dev.
3
+ * Persists SUPATYPE_KONG_PORT in `.env` so re-runs are stable, but re-checks
4
+ * availability so multiple projects and port collisions are surfaced clearly.
5
+ */
6
+ export declare function isValidHostPort(port: number): boolean;
7
+ export declare function parseHostPortInput(raw: string): number | null;
8
+ /** Next free TCP port on 127.0.0.1 starting at `start`. */
9
+ export declare function findNextFreePort(start: number): Promise<number>;
10
+ export declare function readPersistedKongPort(cwd: string): number | null;
11
+ export interface EnsureKongPortOptions {
12
+ /** When false, fail fast instead of prompting (CI / scripts). */
13
+ interactive?: boolean;
14
+ /** init wizard — slightly different copy */
15
+ context?: "dev" | "init";
16
+ }
17
+ /**
18
+ * Resolve the Kong host port for this project directory.
19
+ * - Uses `.env` when set and available.
20
+ * - Prompts (or errors) when the configured port is taken.
21
+ * - Auto-picks the next free port on first run when unset.
22
+ */
23
+ export declare function ensureKongPort(cwd: string, opts?: EnsureKongPortOptions): Promise<number>;
24
+ /** Wizard / init — pick a Kong port without writing `.env` (scaffold writes it). */
25
+ export declare function promptKongPortChoice(): Promise<number>;
26
+ export declare function ensureDevDbPort(cwd: string): Promise<number>;
27
+ //# sourceMappingURL=dev-ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-ports.d.ts","sourceRoot":"","sources":["../src/dev-ports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED,2DAA2D;AAC3D,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOrE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAsBD,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACzB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,oFAAoF;AACpF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CA0B5D;AAqED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlE"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Kong / Postgres host port resolution for local Docker dev.
3
+ * Persists SUPATYPE_KONG_PORT in `.env` so re-runs are stable, but re-checks
4
+ * availability so multiple projects and port collisions are surfaced clearly.
5
+ */
6
+ import { isCancel, p } from "./ui/clack.js";
7
+ import { COMPOSE_DEV_KONG_PORT } from "./project-config.js";
8
+ import { isPortInUse } from "./postgres-ctl.js";
9
+ import { readEnvInt, upsertEnvFile } from "./env-file.js";
10
+ import { isInteractive } from "./ui/interactive.js";
11
+ import { fatalError } from "./ui/fatal.js";
12
+ const MIN_PORT = 1024;
13
+ const MAX_PORT = 65535;
14
+ export function isValidHostPort(port) {
15
+ return Number.isInteger(port) && port >= MIN_PORT && port <= MAX_PORT;
16
+ }
17
+ export function parseHostPortInput(raw) {
18
+ const port = Number(raw.trim());
19
+ return isValidHostPort(port) ? port : null;
20
+ }
21
+ /** Next free TCP port on 127.0.0.1 starting at `start`. */
22
+ export async function findNextFreePort(start) {
23
+ let port = Math.max(MIN_PORT, start);
24
+ while (port <= MAX_PORT && (await isPortInUse(port)))
25
+ port++;
26
+ if (port > MAX_PORT) {
27
+ throw new Error(`No free local port found in range ${start}–${MAX_PORT}.`);
28
+ }
29
+ return port;
30
+ }
31
+ export function readPersistedKongPort(cwd) {
32
+ return readEnvInt(cwd, "SUPATYPE_KONG_PORT");
33
+ }
34
+ function persistKongPort(cwd, port) {
35
+ const apiUrl = `http://localhost:${port}`;
36
+ upsertEnvFile(cwd, {
37
+ SUPATYPE_KONG_PORT: String(port),
38
+ PUBLIC_SUPATYPE_URL: apiUrl,
39
+ API_EXTERNAL_URL: apiUrl,
40
+ SITE_URL: apiUrl,
41
+ });
42
+ }
43
+ async function promptPortConflict(cwd, blockedPort, reason) {
44
+ const port = await promptPortConflictWithoutPersist(blockedPort, reason);
45
+ persistKongPort(cwd, port);
46
+ return port;
47
+ }
48
+ /**
49
+ * Resolve the Kong host port for this project directory.
50
+ * - Uses `.env` when set and available.
51
+ * - Prompts (or errors) when the configured port is taken.
52
+ * - Auto-picks the next free port on first run when unset.
53
+ */
54
+ export async function ensureKongPort(cwd, opts = {}) {
55
+ const interactive = opts.interactive ?? isInteractive();
56
+ const context = opts.context ?? "dev";
57
+ const persisted = readPersistedKongPort(cwd);
58
+ if (persisted !== null) {
59
+ if (!(await isPortInUse(persisted)))
60
+ return persisted;
61
+ if (!interactive) {
62
+ fatalError(`Port ${persisted} is already in use (SUPATYPE_KONG_PORT in .env).`, [
63
+ "Stop the other service or set a different SUPATYPE_KONG_PORT.",
64
+ "Run `supatype dev` in a terminal to pick a new port interactively.",
65
+ ]);
66
+ }
67
+ return promptPortConflict(cwd, persisted, "in_use");
68
+ }
69
+ const preferred = COMPOSE_DEV_KONG_PORT;
70
+ const port = (await isPortInUse(preferred))
71
+ ? interactive && context === "init"
72
+ ? await promptPortConflict(cwd, preferred, "init")
73
+ : await findNextFreePort(preferred)
74
+ : preferred;
75
+ return port;
76
+ }
77
+ /** Wizard / init — pick a Kong port without writing `.env` (scaffold writes it). */
78
+ export async function promptKongPortChoice() {
79
+ const freeDefault = (await isPortInUse(COMPOSE_DEV_KONG_PORT))
80
+ ? await findNextFreePort(COMPOSE_DEV_KONG_PORT)
81
+ : COMPOSE_DEV_KONG_PORT;
82
+ const value = await p.text({
83
+ message: "Local API gateway port (Kong)",
84
+ defaultValue: String(freeDefault),
85
+ placeholder: String(COMPOSE_DEV_KONG_PORT),
86
+ validate: (raw) => {
87
+ const port = parseHostPortInput(raw ?? "");
88
+ if (!port)
89
+ return `Enter a port between ${MIN_PORT} and ${MAX_PORT}.`;
90
+ return undefined;
91
+ },
92
+ });
93
+ if (isCancel(value)) {
94
+ p.cancel("Cancelled.");
95
+ process.exit(0);
96
+ }
97
+ const port = parseHostPortInput(value);
98
+ if (await isPortInUse(port)) {
99
+ return promptPortConflictWithoutPersist(port, "init");
100
+ }
101
+ return port;
102
+ }
103
+ async function promptPortConflictWithoutPersist(blockedPort, reason) {
104
+ const suggested = await findNextFreePort(blockedPort + 1);
105
+ const headline = reason === "init"
106
+ ? `Port ${blockedPort} is already in use on this machine.`
107
+ : `Port ${blockedPort} is in use — another Supatype project or service may already be bound to it.`;
108
+ const choice = await p.select({
109
+ message: headline,
110
+ options: [
111
+ {
112
+ value: "suggested",
113
+ label: `Use ${suggested} instead`,
114
+ hint: "next available port",
115
+ },
116
+ { value: "custom", label: "Enter a different port" },
117
+ { value: "cancel", label: "Cancel" },
118
+ ],
119
+ });
120
+ if (isCancel(choice) || choice === "cancel") {
121
+ p.cancel("Cancelled.");
122
+ process.exit(0);
123
+ }
124
+ if (choice === "suggested")
125
+ return suggested;
126
+ const custom = await p.text({
127
+ message: "Local API gateway port (Kong)",
128
+ defaultValue: String(suggested),
129
+ validate: (value) => {
130
+ const port = parseHostPortInput(value ?? "");
131
+ if (!port)
132
+ return `Enter a port between ${MIN_PORT} and ${MAX_PORT}.`;
133
+ return undefined;
134
+ },
135
+ });
136
+ if (isCancel(custom)) {
137
+ p.cancel("Cancelled.");
138
+ process.exit(0);
139
+ }
140
+ const port = parseHostPortInput(custom);
141
+ if (!port) {
142
+ p.cancel("Invalid port.");
143
+ process.exit(1);
144
+ }
145
+ if (await isPortInUse(port)) {
146
+ fatalError(`Port ${port} is still in use.`, [
147
+ "Pick another port or stop the service using it.",
148
+ "Check Docker Desktop for other Supatype stacks.",
149
+ ]);
150
+ }
151
+ return port;
152
+ }
153
+ const COMPOSE_DEV_DB_PORT = 54329;
154
+ function devDbConnectionUrl(port) {
155
+ return `postgresql://supatype_admin:postgres@localhost:${port}/supatype?sslmode=disable`;
156
+ }
157
+ export async function ensureDevDbPort(cwd) {
158
+ const persisted = readEnvInt(cwd, "SUPATYPE_DEV_DB_PORT");
159
+ const persist = (port) => {
160
+ upsertEnvFile(cwd, {
161
+ SUPATYPE_DEV_DB_PORT: String(port),
162
+ DATABASE_URL: devDbConnectionUrl(port),
163
+ });
164
+ return port;
165
+ };
166
+ if (persisted !== null) {
167
+ if (!(await isPortInUse(persisted)))
168
+ return persisted;
169
+ const next = await findNextFreePort(persisted + 1);
170
+ return persist(next);
171
+ }
172
+ let port = COMPOSE_DEV_DB_PORT;
173
+ if (await isPortInUse(port)) {
174
+ port = await findNextFreePort(port + 1);
175
+ }
176
+ return persist(port);
177
+ }
178
+ //# sourceMappingURL=dev-ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-ports.js","sourceRoot":"","sources":["../src/dev-ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Pinned service URLs + dev keys for the Ink dashboard.
3
+ */
4
+ export interface DevServiceLink {
5
+ label: string;
6
+ url: string;
7
+ }
8
+ export interface DevReadyPanel {
9
+ title: string;
10
+ links: DevServiceLink[];
11
+ anonKey?: string;
12
+ serviceRoleKey?: string;
13
+ hints?: string[];
14
+ }
15
+ /** Ink row budget for DevReadyPanelView (border, title, links, hints, keys, margin). */
16
+ export declare function devReadyPanelRowCount(panel: DevReadyPanel): number;
17
+ /** Pin links in the TUI or print the classic block in stream mode. */
18
+ export declare function publishDevReady(panel: DevReadyPanel): void;
19
+ //# sourceMappingURL=dev-ready-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-ready-panel.d.ts","sourceRoot":"","sources":["../src/dev-ready-panel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAclE;AAmBD,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQ1D"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Pinned service URLs + dev keys for the Ink dashboard.
3
+ */
4
+ import { appendStackOutput, getActiveDevSession } from "./dev-session.js";
5
+ /** Ink row budget for DevReadyPanelView (border, title, links, hints, keys, margin). */
6
+ export function devReadyPanelRowCount(panel) {
7
+ let rows = 2; // round border top + bottom
8
+ rows += 1; // title
9
+ rows += panel.links.length;
10
+ for (const hint of panel.hints ?? []) {
11
+ if (hint.trim())
12
+ rows += 1;
13
+ }
14
+ if (panel.anonKey) {
15
+ rows += 1; // "API keys (local dev)"
16
+ rows += 1; // anon
17
+ if (panel.serviceRoleKey)
18
+ rows += 1; // service_role
19
+ }
20
+ rows += 1; // marginBottom on panel box
21
+ return rows;
22
+ }
23
+ function formatStreamBlock(panel) {
24
+ const lines = [`[supatype] ${panel.title}`];
25
+ for (const link of panel.links) {
26
+ lines.push(` ${link.label.padEnd(16)} ${link.url}`);
27
+ }
28
+ for (const hint of panel.hints ?? []) {
29
+ lines.push(` ${hint}`);
30
+ }
31
+ if (panel.anonKey) {
32
+ lines.push(" API keys (local dev only):");
33
+ lines.push(` anon key ${panel.anonKey}`);
34
+ lines.push(` service_role ${panel.serviceRoleKey ?? ""}`);
35
+ }
36
+ lines.push(" Press Ctrl+C to stop.");
37
+ return lines.join("\n");
38
+ }
39
+ /** Pin links in the TUI or print the classic block in stream mode. */
40
+ export function publishDevReady(panel) {
41
+ const session = getActiveDevSession();
42
+ if (session?.isTui()) {
43
+ session.bus.setReadyPanel(panel);
44
+ appendStackOutput("Services running.", "log");
45
+ return;
46
+ }
47
+ console.log(formatStreamBlock(panel));
48
+ }
49
+ //# sourceMappingURL=dev-ready-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-ready-panel.js","sourceRoot":"","sources":["../src/dev-ready-panel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAezE,wFAAwF;AACxF,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACxD,IAAI,IAAI,GAAG,CAAC,CAAA,CAAC,4BAA4B;IACzC,IAAI,IAAI,CAAC,CAAA,CAAC,QAAQ;IAClB,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,IAAI,IAAI,CAAC,CAAA;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,CAAA,CAAC,yBAAyB;QACnC,IAAI,IAAI,CAAC,CAAA,CAAC,OAAO;QACjB,IAAI,KAAK,CAAC,cAAc;YAAE,IAAI,IAAI,CAAC,CAAA,CAAC,eAAe;IACrD,CAAC;IACD,IAAI,IAAI,CAAC,CAAA,CAAC,4BAA4B;IACtC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,MAAM,KAAK,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACzB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACjD,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;IACrC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAChC,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;QAC7C,OAAM;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAA;AACvC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tracks an active `supatype dev` session so we can recover when the CLI exits
3
+ * without graceful shutdown (terminal closed, kill signal, etc.).
4
+ */
5
+ declare const LOCK_VERSION: 1;
6
+ export interface DevSessionLock {
7
+ version: typeof LOCK_VERSION;
8
+ composeProject: string;
9
+ projectRef: string;
10
+ composePath: string;
11
+ kongPort: number;
12
+ startedAt: string;
13
+ }
14
+ export declare function devSessionLockPath(cwd: string): string;
15
+ export declare function readDevSessionLock(cwd: string): DevSessionLock | null;
16
+ export declare function writeDevSessionLock(cwd: string, lock: Omit<DevSessionLock, "version">): void;
17
+ export declare function clearDevSessionLock(cwd: string): void;
18
+ export declare function composeStackHasContainers(composeProject: string): boolean;
19
+ /**
20
+ * When a previous dev session did not shut down cleanly, offer to stop its stack
21
+ * before starting a new one.
22
+ */
23
+ export declare function recoverStaleDevSession(cwd: string): Promise<void>;
24
+ export {};
25
+ //# sourceMappingURL=dev-session-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-session-lock.d.ts","sourceRoot":"","sources":["../src/dev-session-lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,QAAA,MAAM,YAAY,EAAG,CAAU,CAAA;AAE/B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,YAAY,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAUrE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,IAAI,CAK5F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAOzE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCvE"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Tracks an active `supatype dev` session so we can recover when the CLI exits
3
+ * without graceful shutdown (terminal closed, kill signal, etc.).
4
+ */
5
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
6
+ import { join, resolve } from "node:path";
7
+ import { spawnSync } from "node:child_process";
8
+ import { runDockerCompose } from "./self-host-compose.js";
9
+ import { confirm as uiConfirm } from "./ui/confirm.js";
10
+ import { success, warn } from "./ui/messages.js";
11
+ import { isInteractive } from "./ui/interactive.js";
12
+ const LOCK_VERSION = 1;
13
+ export function devSessionLockPath(cwd) {
14
+ return resolve(cwd, ".supatype/dev-session.json");
15
+ }
16
+ export function readDevSessionLock(cwd) {
17
+ const path = devSessionLockPath(cwd);
18
+ if (!existsSync(path))
19
+ return null;
20
+ try {
21
+ const data = JSON.parse(readFileSync(path, "utf8"));
22
+ if (data.version !== LOCK_VERSION)
23
+ return null;
24
+ return data;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ export function writeDevSessionLock(cwd, lock) {
31
+ const dir = join(cwd, ".supatype");
32
+ mkdirSync(dir, { recursive: true });
33
+ const payload = { version: LOCK_VERSION, ...lock };
34
+ writeFileSync(devSessionLockPath(cwd), `${JSON.stringify(payload, null, 2)}\n`, "utf8");
35
+ }
36
+ export function clearDevSessionLock(cwd) {
37
+ const path = devSessionLockPath(cwd);
38
+ if (existsSync(path))
39
+ unlinkSync(path);
40
+ }
41
+ export function composeStackHasContainers(composeProject) {
42
+ const result = spawnSync("docker", ["ps", "-a", "--filter", `label=com.docker.compose.project=${composeProject}`, "--format", "{{.Names}}"], { encoding: "utf8", shell: process.platform === "win32" });
43
+ return Boolean(result.stdout?.trim());
44
+ }
45
+ /**
46
+ * When a previous dev session did not shut down cleanly, offer to stop its stack
47
+ * before starting a new one.
48
+ */
49
+ export async function recoverStaleDevSession(cwd) {
50
+ const lock = readDevSessionLock(cwd);
51
+ if (!lock)
52
+ return;
53
+ if (!composeStackHasContainers(lock.composeProject)) {
54
+ clearDevSessionLock(cwd);
55
+ return;
56
+ }
57
+ const message = `Previous dev session for "${lock.projectRef}" may not have shut down cleanly ` +
58
+ `(stack "${lock.composeProject}" is still running).`;
59
+ if (!isInteractive()) {
60
+ warn(message);
61
+ warn(`Stop it manually: docker compose -p ${lock.composeProject} down`);
62
+ return;
63
+ }
64
+ const stop = await uiConfirm(`${message}\n\nStop the orphaned stack before starting?`, { default: true });
65
+ if (!stop) {
66
+ warn(`Leaving "${lock.composeProject}" running.`);
67
+ return;
68
+ }
69
+ const status = runDockerCompose(lock.composePath, ["down"], cwd, lock.composeProject, { quiet: true });
70
+ if (status === 0) {
71
+ clearDevSessionLock(cwd);
72
+ success(`Stopped orphaned stack "${lock.composeProject}".`);
73
+ }
74
+ else {
75
+ warn(`Could not stop "${lock.composeProject}" (exit ${status}).`);
76
+ }
77
+ }
78
+ //# sourceMappingURL=dev-session-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-session-lock.js","sourceRoot":"","sources":["../src/dev-session-lock.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,38 @@
1
1
  /**
2
- * `supatype dev` output session — TUI (default) or interleaved stream mode.
2
+ * `supatype dev` output session — Ink dashboard (default) or interleaved stream mode.
3
3
  */
4
4
  import type { ProcessOptions } from "./process-manager.js";
5
5
  import { DevLogBus, type DevLogLevel } from "./dev-log-bus.js";
6
6
  export type DevUiMode = "tui" | "stream";
7
7
  export declare function resolveDevUiMode(streamFlag: boolean): DevUiMode;
8
8
  export declare function beginDevSession(mode: DevUiMode): DevSession;
9
- /** Enter console capture + TUI. */
9
+ /** @deprecated Ink starts in beginDevSession — kept for callers that invoke late. */
10
10
  export declare function startDevSession(): void;
11
+ export declare function isDevTuiActive(): boolean;
11
12
  export declare function endDevSession(): void;
13
+ /** @deprecated Dev prompts render inside the Ink dashboard — no suspend needed. */
14
+ export declare function suspendDevSessionForPrompt(): void;
15
+ export declare function prepareStdinForInteractivePrompt(): void;
16
+ /** @deprecated Dev prompts render inside the Ink dashboard — no resume needed. */
17
+ export declare function resumeDevSessionAfterPrompt(): void;
18
+ /** @deprecated Use Ink overlay prompts — runs fn without tearing down the dashboard. */
19
+ export declare function withDevSessionSuspended<T>(fn: () => Promise<T>): Promise<T>;
12
20
  export declare function getActiveDevSession(): DevSession | null;
13
- /** Log to a TUI task stream, or prefixed console output in stream mode. */
21
+ export declare function appendStackOutput(text: string | null | undefined, level?: DevLogLevel): void;
14
22
  export declare function appendDevTaskLog(taskId: string, taskTitle: string, line: string, level?: DevLogLevel): void;
15
23
  export declare class DevSession {
16
24
  readonly bus: DevLogBus;
17
25
  readonly mode: DevUiMode;
18
- private tui;
26
+ private ink;
19
27
  private restoreConsole;
28
+ private consoleCaptured;
20
29
  constructor(mode: DevUiMode);
21
30
  isTui(): boolean;
22
- start(): void;
31
+ isInkMounted(): boolean;
32
+ isConsoleCaptured(): boolean;
33
+ needsPromptSuspend(): boolean;
34
+ enableConsoleCapture(_tee: boolean): void;
35
+ startInk(): void;
23
36
  stop(): void;
24
37
  }
25
38
  export declare function enhanceProcessOptions(label: string, opts: ProcessOptions): ProcessOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-session.d.ts","sourceRoot":"","sources":["../src/dev-session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;AAExC,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAI/D;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAI3D;AAED,mCAAmC;AACnC,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAEvD;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,WAAmB,GACzB,IAAI,CAUN;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,GAAG,YAAkB;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,cAAc,CAA4B;gBAEtC,IAAI,EAAE,SAAS;IAI3B,KAAK,IAAI,OAAO;IAIhB,KAAK,IAAI,IAAI;IAOb,IAAI,IAAI,IAAI;CAMb;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,cAAc,CAmBzF"}
1
+ {"version":3,"file":"dev-session.d.ts","sourceRoot":"","sources":["../src/dev-session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAK9D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;AAExC,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAI/D;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAS3D;AAED,qFAAqF;AACrF,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAIvD;AAED,kFAAkF;AAClF,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,wFAAwF;AACxF,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEjF;AAED,wBAAgB,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAEvD;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,KAAK,GAAE,WAAmB,GACzB,IAAI,CAaN;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,WAAmB,GACzB,IAAI,CAUN;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,GAAG,YAAkB;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,eAAe,CAAQ;gBAEnB,IAAI,EAAE,SAAS;IAI3B,KAAK,IAAI,OAAO;IAIhB,YAAY,IAAI,OAAO;IAIvB,iBAAiB,IAAI,OAAO;IAI5B,kBAAkB,IAAI,OAAO;IAI7B,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMzC,QAAQ,IAAI,IAAI;IAKhB,IAAI,IAAI,IAAI;CASb;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,cAAc,CAmBzF"}