@withbuddi/buddi 0.1.0-pre.53 → 0.1.0-pre.54

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 (439) hide show
  1. package/extension/background.js +38 -7
  2. package/extension/manifest.json +2 -2
  3. package/extension/popup.html +2 -2
  4. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  5. package/node_modules/@buddi/cli/dist/dashboard-cmd.d.ts.map +1 -1
  6. package/node_modules/@buddi/cli/dist/dashboard-cmd.js +6 -3
  7. package/node_modules/@buddi/cli/dist/dashboard-cmd.js.map +1 -1
  8. package/node_modules/@buddi/cli/dist/main.js +2 -2
  9. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  10. package/node_modules/@buddi/cli/dist/status.d.ts +16 -2
  11. package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
  12. package/node_modules/@buddi/cli/dist/status.js +42 -2
  13. package/node_modules/@buddi/cli/dist/status.js.map +1 -1
  14. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  15. package/node_modules/@buddi/core/dist/agents/catalog.d.ts +6 -0
  16. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  17. package/node_modules/@buddi/core/dist/agents/catalog.js +1 -1
  18. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  19. package/node_modules/@buddi/core/dist/backup/archive.d.ts +6 -0
  20. package/node_modules/@buddi/core/dist/backup/archive.d.ts.map +1 -1
  21. package/node_modules/@buddi/core/dist/backup/archive.js +19 -6
  22. package/node_modules/@buddi/core/dist/backup/archive.js.map +1 -1
  23. package/node_modules/@buddi/core/dist/postgres/binaries.d.ts +21 -1
  24. package/node_modules/@buddi/core/dist/postgres/binaries.d.ts.map +1 -1
  25. package/node_modules/@buddi/core/dist/postgres/binaries.js +72 -10
  26. package/node_modules/@buddi/core/dist/postgres/binaries.js.map +1 -1
  27. package/node_modules/@buddi/core/dist/postgres/cluster.d.ts +8 -0
  28. package/node_modules/@buddi/core/dist/postgres/cluster.d.ts.map +1 -1
  29. package/node_modules/@buddi/core/dist/postgres/cluster.js +119 -17
  30. package/node_modules/@buddi/core/dist/postgres/cluster.js.map +1 -1
  31. package/node_modules/@buddi/core/dist/postgres/windows-guard.d.ts +20 -0
  32. package/node_modules/@buddi/core/dist/postgres/windows-guard.d.ts.map +1 -0
  33. package/node_modules/@buddi/core/dist/postgres/windows-guard.js +140 -0
  34. package/node_modules/@buddi/core/dist/postgres/windows-guard.js.map +1 -0
  35. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  36. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
  37. package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -2
  38. package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
  39. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +2 -2
  40. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  41. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +1 -1
  42. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -1
  43. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +6 -6
  44. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  45. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +5 -5
  46. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -1
  47. package/node_modules/@buddi/gateway/dist/browser-host.js +1 -1
  48. package/node_modules/@buddi/gateway/dist/browser-host.js.map +1 -1
  49. package/node_modules/@buddi/gateway/dist/missions/chrome-scope.d.ts +10 -10
  50. package/node_modules/@buddi/gateway/dist/missions/chrome-scope.d.ts.map +1 -1
  51. package/node_modules/@buddi/gateway/dist/missions/chrome-scope.js +20 -20
  52. package/node_modules/@buddi/gateway/dist/missions/chrome-scope.js.map +1 -1
  53. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +2 -2
  54. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  55. package/node_modules/@buddi/gateway/dist/missions/execute.js +11 -11
  56. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  57. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts +2 -2
  58. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
  59. package/node_modules/@buddi/gateway/dist/missions/reminders.js +5 -5
  60. package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
  61. package/node_modules/@buddi/gateway/dist/owner-notify.js +1 -1
  62. package/node_modules/@buddi/gateway/dist/owner-notify.js.map +1 -1
  63. package/node_modules/@buddi/gateway/dist/plugins/npm.d.ts +9 -2
  64. package/node_modules/@buddi/gateway/dist/plugins/npm.d.ts.map +1 -1
  65. package/node_modules/@buddi/gateway/dist/plugins/npm.js +29 -6
  66. package/node_modules/@buddi/gateway/dist/plugins/npm.js.map +1 -1
  67. package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
  68. package/node_modules/@buddi/gateway/dist/plugins/stage.js +2 -2
  69. package/node_modules/@buddi/gateway/dist/plugins/stage.js.map +1 -1
  70. package/node_modules/@buddi/gateway/dist/serve.js +1 -1
  71. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  72. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts +1 -1
  73. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js +1 -1
  74. package/node_modules/@buddi/gateway/dist/system-context.d.ts +11 -0
  75. package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
  76. package/node_modules/@buddi/gateway/dist/system-context.js +42 -1
  77. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  78. package/node_modules/@buddi/gateway/dist/telegram/approvals.js +1 -1
  79. package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
  80. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js +1 -1
  81. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js.map +1 -1
  82. package/node_modules/@buddi/gateway/dist/web/api-routes.js +6 -6
  83. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  84. package/node_modules/@buddi/gateway/dist/web/approval-ask.js +1 -1
  85. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +6 -0
  86. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  87. package/node_modules/@buddi/gateway/dist/web/extension.js +22 -11
  88. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  89. package/node_modules/@buddi/gateway/dist/web/read.d.ts +1 -1
  90. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  91. package/node_modules/@buddi/gateway/dist/web/server.js +4 -4
  92. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  93. package/node_modules/@buddi/gateway/dist/web/service.d.ts +6 -1
  94. package/node_modules/@buddi/gateway/dist/web/service.d.ts.map +1 -1
  95. package/node_modules/@buddi/gateway/dist/web/service.js +10 -1
  96. package/node_modules/@buddi/gateway/dist/web/service.js.map +1 -1
  97. package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/web/skills.js +2 -1
  99. package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -1
  100. package/node_modules/@buddi/gateway/dist/web/write.d.ts +1 -1
  101. package/node_modules/@buddi/gateway/dist/web/write.js +1 -1
  102. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  103. package/node_modules/@buddi/install/dist/app-layout.d.ts +30 -1
  104. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
  105. package/node_modules/@buddi/install/dist/app-layout.js +61 -10
  106. package/node_modules/@buddi/install/dist/app-layout.js.map +1 -1
  107. package/node_modules/@buddi/install/dist/cloudflared.js +2 -2
  108. package/node_modules/@buddi/install/dist/cloudflared.js.map +1 -1
  109. package/node_modules/@buddi/install/dist/environment.d.ts +40 -1
  110. package/node_modules/@buddi/install/dist/environment.d.ts.map +1 -1
  111. package/node_modules/@buddi/install/dist/environment.js +158 -12
  112. package/node_modules/@buddi/install/dist/environment.js.map +1 -1
  113. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  114. package/node_modules/@buddi/install/dist/launcher.js +257 -50
  115. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  116. package/node_modules/@buddi/install/dist/postgres-check.js +1 -1
  117. package/node_modules/@buddi/install/dist/postgres-check.js.map +1 -1
  118. package/node_modules/@buddi/install/dist/product-uninstall.d.ts +14 -0
  119. package/node_modules/@buddi/install/dist/product-uninstall.d.ts.map +1 -1
  120. package/node_modules/@buddi/install/dist/product-uninstall.js +10 -0
  121. package/node_modules/@buddi/install/dist/product-uninstall.js.map +1 -1
  122. package/node_modules/@buddi/install/dist/runtime-info.d.ts.map +1 -1
  123. package/node_modules/@buddi/install/dist/runtime-info.js +4 -1
  124. package/node_modules/@buddi/install/dist/runtime-info.js.map +1 -1
  125. package/node_modules/@buddi/install/dist/supervisor.d.ts +60 -3
  126. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  127. package/node_modules/@buddi/install/dist/supervisor.js +173 -17
  128. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  129. package/node_modules/@buddi/install/dist/uninstall.d.ts +29 -3
  130. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  131. package/node_modules/@buddi/install/dist/uninstall.js +135 -27
  132. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  133. package/node_modules/@buddi/install/dist/upgrade.d.ts +16 -4
  134. package/node_modules/@buddi/install/dist/upgrade.d.ts.map +1 -1
  135. package/node_modules/@buddi/install/dist/upgrade.js +50 -13
  136. package/node_modules/@buddi/install/dist/upgrade.js.map +1 -1
  137. package/node_modules/@buddi/install/dist/windows-install.d.ts +102 -0
  138. package/node_modules/@buddi/install/dist/windows-install.d.ts.map +1 -0
  139. package/node_modules/@buddi/install/dist/windows-install.js +223 -0
  140. package/node_modules/@buddi/install/dist/windows-install.js.map +1 -0
  141. package/node_modules/@buddi/install/dist/windows-setup.d.ts +107 -0
  142. package/node_modules/@buddi/install/dist/windows-setup.d.ts.map +1 -0
  143. package/node_modules/@buddi/install/dist/windows-setup.js +700 -0
  144. package/node_modules/@buddi/install/dist/windows-setup.js.map +1 -0
  145. package/node_modules/@buddi/install/dist/windows-task.d.ts +49 -0
  146. package/node_modules/@buddi/install/dist/windows-task.d.ts.map +1 -0
  147. package/node_modules/@buddi/install/dist/windows-task.js +167 -0
  148. package/node_modules/@buddi/install/dist/windows-task.js.map +1 -0
  149. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  150. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +1 -1
  151. package/node_modules/@buddi/runtime/dist/codex-direct.js +1 -1
  152. package/node_modules/@buddi/runtime/dist/openai.d.ts +11 -0
  153. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  154. package/node_modules/@buddi/runtime/dist/openai.js +36 -3
  155. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  156. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  157. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js +3 -3
  158. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js.map +1 -1
  159. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  160. package/node_modules/@buddi/tool-browser/dist/availability.d.ts.map +1 -1
  161. package/node_modules/@buddi/tool-browser/dist/availability.js +1 -0
  162. package/node_modules/@buddi/tool-browser/dist/availability.js.map +1 -1
  163. package/node_modules/@buddi/tool-browser/dist/brand.d.ts +19 -0
  164. package/node_modules/@buddi/tool-browser/dist/brand.d.ts.map +1 -0
  165. package/node_modules/@buddi/tool-browser/dist/brand.js +31 -0
  166. package/node_modules/@buddi/tool-browser/dist/brand.js.map +1 -0
  167. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +2 -2
  168. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  169. package/node_modules/@buddi/tool-browser/dist/controller.js +16 -7
  170. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  171. package/node_modules/@buddi/tool-browser/dist/downloads.js +1 -1
  172. package/node_modules/@buddi/tool-browser/dist/downloads.js.map +1 -1
  173. package/node_modules/@buddi/tool-browser/dist/extension.d.ts +3 -1
  174. package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
  175. package/node_modules/@buddi/tool-browser/dist/extension.js +4 -4
  176. package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
  177. package/node_modules/@buddi/tool-browser/dist/index.d.ts +3 -2
  178. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  179. package/node_modules/@buddi/tool-browser/dist/index.js +7 -6
  180. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  181. package/node_modules/@buddi/tool-browser/dist/routes.d.ts +12 -1
  182. package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -1
  183. package/node_modules/@buddi/tool-browser/dist/routes.js +31 -14
  184. package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -1
  185. package/node_modules/@buddi/tool-browser/dist/service.d.ts +2 -0
  186. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  187. package/node_modules/@buddi/tool-browser/dist/service.js +6 -6
  188. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  189. package/node_modules/@buddi/tool-browser/dist/telemetry.d.ts +2 -2
  190. package/node_modules/@buddi/tool-browser/dist/telemetry.js +2 -2
  191. package/node_modules/@buddi/tool-browser/dist/telemetry.js.map +1 -1
  192. package/node_modules/@buddi/tool-browser/dist/types.js +1 -1
  193. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  194. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  195. package/node_modules/@buddi/tool-host/dist/index.d.ts +2 -1
  196. package/node_modules/@buddi/tool-host/dist/index.d.ts.map +1 -1
  197. package/node_modules/@buddi/tool-host/dist/index.js +11 -2
  198. package/node_modules/@buddi/tool-host/dist/index.js.map +1 -1
  199. package/node_modules/@buddi/tool-host/dist/process.d.ts +58 -1
  200. package/node_modules/@buddi/tool-host/dist/process.d.ts.map +1 -1
  201. package/node_modules/@buddi/tool-host/dist/process.js +229 -15
  202. package/node_modules/@buddi/tool-host/dist/process.js.map +1 -1
  203. package/node_modules/@buddi/tool-host/dist/service.d.ts +2 -0
  204. package/node_modules/@buddi/tool-host/dist/service.d.ts.map +1 -1
  205. package/node_modules/@buddi/tool-host/dist/service.js +8 -6
  206. package/node_modules/@buddi/tool-host/dist/service.js.map +1 -1
  207. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts +10 -0
  208. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts.map +1 -1
  209. package/node_modules/@buddi/tool-host/dist/skill-run.js +14 -0
  210. package/node_modules/@buddi/tool-host/dist/skill-run.js.map +1 -1
  211. package/node_modules/ip-address/README.md +70 -70
  212. package/node_modules/ip-address/dist/ipv6.js +7 -4
  213. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  214. package/node_modules/ip-address/dist/v6/constants.d.ts +3 -0
  215. package/node_modules/ip-address/dist/v6/constants.js +3 -0
  216. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  217. package/node_modules/ip-address/package.json +2 -1
  218. package/node_modules/marked/bin/main.js +1 -1
  219. package/node_modules/marked/lib/marked.d.ts +6 -3
  220. package/node_modules/marked/lib/marked.esm.js +48 -50
  221. package/node_modules/marked/lib/marked.esm.js.map +3 -3
  222. package/node_modules/marked/lib/marked.umd.js +45 -47
  223. package/node_modules/marked/lib/marked.umd.js.map +3 -3
  224. package/node_modules/marked/man/marked.1 +1 -1
  225. package/node_modules/marked/package.json +1 -1
  226. package/package.json +2 -2
  227. package/packages/cli/dist/.tsbuildinfo +1 -1
  228. package/packages/cli/dist/dashboard-cmd.d.ts.map +1 -1
  229. package/packages/cli/dist/dashboard-cmd.js +6 -3
  230. package/packages/cli/dist/dashboard-cmd.js.map +1 -1
  231. package/packages/cli/dist/main.js +2 -2
  232. package/packages/cli/dist/main.js.map +1 -1
  233. package/packages/cli/dist/status.d.ts +16 -2
  234. package/packages/cli/dist/status.d.ts.map +1 -1
  235. package/packages/cli/dist/status.js +42 -2
  236. package/packages/cli/dist/status.js.map +1 -1
  237. package/packages/core/dist/.tsbuildinfo +1 -1
  238. package/packages/core/dist/agents/catalog.d.ts +6 -0
  239. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  240. package/packages/core/dist/agents/catalog.js +1 -1
  241. package/packages/core/dist/agents/catalog.js.map +1 -1
  242. package/packages/core/dist/backup/archive.d.ts +6 -0
  243. package/packages/core/dist/backup/archive.d.ts.map +1 -1
  244. package/packages/core/dist/backup/archive.js +19 -6
  245. package/packages/core/dist/backup/archive.js.map +1 -1
  246. package/packages/core/dist/postgres/binaries.d.ts +21 -1
  247. package/packages/core/dist/postgres/binaries.d.ts.map +1 -1
  248. package/packages/core/dist/postgres/binaries.js +72 -10
  249. package/packages/core/dist/postgres/binaries.js.map +1 -1
  250. package/packages/core/dist/postgres/cluster.d.ts +8 -0
  251. package/packages/core/dist/postgres/cluster.d.ts.map +1 -1
  252. package/packages/core/dist/postgres/cluster.js +119 -17
  253. package/packages/core/dist/postgres/cluster.js.map +1 -1
  254. package/packages/core/dist/postgres/windows-guard.d.ts +20 -0
  255. package/packages/core/dist/postgres/windows-guard.d.ts.map +1 -0
  256. package/packages/core/dist/postgres/windows-guard.js +140 -0
  257. package/packages/core/dist/postgres/windows-guard.js.map +1 -0
  258. package/packages/gateway/dist/.tsbuildinfo +1 -1
  259. package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
  260. package/packages/gateway/dist/agents/catalog.js +3 -2
  261. package/packages/gateway/dist/agents/catalog.js.map +1 -1
  262. package/packages/gateway/dist/agents/catalogue-package.d.ts +2 -2
  263. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  264. package/packages/gateway/dist/agents/catalogue-package.js +1 -1
  265. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
  266. package/packages/gateway/dist/agents/platform-catalogue.d.ts +6 -6
  267. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  268. package/packages/gateway/dist/agents/platform-catalogue.js +5 -5
  269. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
  270. package/packages/gateway/dist/browser-host.js +1 -1
  271. package/packages/gateway/dist/browser-host.js.map +1 -1
  272. package/packages/gateway/dist/missions/chrome-scope.d.ts +10 -10
  273. package/packages/gateway/dist/missions/chrome-scope.d.ts.map +1 -1
  274. package/packages/gateway/dist/missions/chrome-scope.js +20 -20
  275. package/packages/gateway/dist/missions/chrome-scope.js.map +1 -1
  276. package/packages/gateway/dist/missions/execute.d.ts +2 -2
  277. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  278. package/packages/gateway/dist/missions/execute.js +11 -11
  279. package/packages/gateway/dist/missions/execute.js.map +1 -1
  280. package/packages/gateway/dist/missions/reminders.d.ts +2 -2
  281. package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
  282. package/packages/gateway/dist/missions/reminders.js +5 -5
  283. package/packages/gateway/dist/missions/reminders.js.map +1 -1
  284. package/packages/gateway/dist/owner-notify.js +1 -1
  285. package/packages/gateway/dist/owner-notify.js.map +1 -1
  286. package/packages/gateway/dist/plugins/npm.d.ts +9 -2
  287. package/packages/gateway/dist/plugins/npm.d.ts.map +1 -1
  288. package/packages/gateway/dist/plugins/npm.js +29 -6
  289. package/packages/gateway/dist/plugins/npm.js.map +1 -1
  290. package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
  291. package/packages/gateway/dist/plugins/stage.js +2 -2
  292. package/packages/gateway/dist/plugins/stage.js.map +1 -1
  293. package/packages/gateway/dist/serve.js +1 -1
  294. package/packages/gateway/dist/serve.js.map +1 -1
  295. package/packages/gateway/dist/surfaces/browser-cards.d.ts +1 -1
  296. package/packages/gateway/dist/surfaces/browser-cards.js +1 -1
  297. package/packages/gateway/dist/system-context.d.ts +11 -0
  298. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  299. package/packages/gateway/dist/system-context.js +42 -1
  300. package/packages/gateway/dist/system-context.js.map +1 -1
  301. package/packages/gateway/dist/telegram/approvals.js +1 -1
  302. package/packages/gateway/dist/telegram/approvals.js.map +1 -1
  303. package/packages/gateway/dist/telegram/browser-view.js +1 -1
  304. package/packages/gateway/dist/telegram/browser-view.js.map +1 -1
  305. package/packages/gateway/dist/web/api-routes.js +6 -6
  306. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  307. package/packages/gateway/dist/web/approval-ask.js +1 -1
  308. package/packages/gateway/dist/web/extension.d.ts +6 -0
  309. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  310. package/packages/gateway/dist/web/extension.js +22 -11
  311. package/packages/gateway/dist/web/extension.js.map +1 -1
  312. package/packages/gateway/dist/web/read.d.ts +1 -1
  313. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  314. package/packages/gateway/dist/web/server.js +4 -4
  315. package/packages/gateway/dist/web/server.js.map +1 -1
  316. package/packages/gateway/dist/web/service.d.ts +6 -1
  317. package/packages/gateway/dist/web/service.d.ts.map +1 -1
  318. package/packages/gateway/dist/web/service.js +10 -1
  319. package/packages/gateway/dist/web/service.js.map +1 -1
  320. package/packages/gateway/dist/web/skills.d.ts.map +1 -1
  321. package/packages/gateway/dist/web/skills.js +2 -1
  322. package/packages/gateway/dist/web/skills.js.map +1 -1
  323. package/packages/gateway/dist/web/write.d.ts +1 -1
  324. package/packages/gateway/dist/web/write.js +1 -1
  325. package/packages/install/dist/.tsbuildinfo +1 -1
  326. package/packages/install/dist/app-layout.d.ts +30 -1
  327. package/packages/install/dist/app-layout.d.ts.map +1 -1
  328. package/packages/install/dist/app-layout.js +61 -10
  329. package/packages/install/dist/app-layout.js.map +1 -1
  330. package/packages/install/dist/cloudflared.js +2 -2
  331. package/packages/install/dist/cloudflared.js.map +1 -1
  332. package/packages/install/dist/environment.d.ts +40 -1
  333. package/packages/install/dist/environment.d.ts.map +1 -1
  334. package/packages/install/dist/environment.js +158 -12
  335. package/packages/install/dist/environment.js.map +1 -1
  336. package/packages/install/dist/launcher.d.ts.map +1 -1
  337. package/packages/install/dist/launcher.js +257 -50
  338. package/packages/install/dist/launcher.js.map +1 -1
  339. package/packages/install/dist/postgres-check.js +1 -1
  340. package/packages/install/dist/postgres-check.js.map +1 -1
  341. package/packages/install/dist/product-uninstall.d.ts +14 -0
  342. package/packages/install/dist/product-uninstall.d.ts.map +1 -1
  343. package/packages/install/dist/product-uninstall.js +10 -0
  344. package/packages/install/dist/product-uninstall.js.map +1 -1
  345. package/packages/install/dist/runtime-info.d.ts.map +1 -1
  346. package/packages/install/dist/runtime-info.js +4 -1
  347. package/packages/install/dist/runtime-info.js.map +1 -1
  348. package/packages/install/dist/supervisor.d.ts +60 -3
  349. package/packages/install/dist/supervisor.d.ts.map +1 -1
  350. package/packages/install/dist/supervisor.js +173 -17
  351. package/packages/install/dist/supervisor.js.map +1 -1
  352. package/packages/install/dist/uninstall.d.ts +29 -3
  353. package/packages/install/dist/uninstall.d.ts.map +1 -1
  354. package/packages/install/dist/uninstall.js +135 -27
  355. package/packages/install/dist/uninstall.js.map +1 -1
  356. package/packages/install/dist/upgrade.d.ts +16 -4
  357. package/packages/install/dist/upgrade.d.ts.map +1 -1
  358. package/packages/install/dist/upgrade.js +50 -13
  359. package/packages/install/dist/upgrade.js.map +1 -1
  360. package/packages/install/dist/windows-install.d.ts +102 -0
  361. package/packages/install/dist/windows-install.d.ts.map +1 -0
  362. package/packages/install/dist/windows-install.js +223 -0
  363. package/packages/install/dist/windows-install.js.map +1 -0
  364. package/packages/install/dist/windows-setup.d.ts +107 -0
  365. package/packages/install/dist/windows-setup.d.ts.map +1 -0
  366. package/packages/install/dist/windows-setup.js +700 -0
  367. package/packages/install/dist/windows-setup.js.map +1 -0
  368. package/packages/install/dist/windows-task.d.ts +49 -0
  369. package/packages/install/dist/windows-task.d.ts.map +1 -0
  370. package/packages/install/dist/windows-task.js +167 -0
  371. package/packages/install/dist/windows-task.js.map +1 -0
  372. package/packages/runtime/dist/.tsbuildinfo +1 -1
  373. package/packages/runtime/dist/codex-direct.d.ts +1 -1
  374. package/packages/runtime/dist/codex-direct.js +1 -1
  375. package/packages/runtime/dist/openai.d.ts +11 -0
  376. package/packages/runtime/dist/openai.d.ts.map +1 -1
  377. package/packages/runtime/dist/openai.js +36 -3
  378. package/packages/runtime/dist/openai.js.map +1 -1
  379. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  380. package/packages/tools/artifacts/dist/tools/write.js +3 -3
  381. package/packages/tools/artifacts/dist/tools/write.js.map +1 -1
  382. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  383. package/packages/tools/browser/dist/availability.d.ts.map +1 -1
  384. package/packages/tools/browser/dist/availability.js +1 -0
  385. package/packages/tools/browser/dist/availability.js.map +1 -1
  386. package/packages/tools/browser/dist/brand.d.ts +19 -0
  387. package/packages/tools/browser/dist/brand.d.ts.map +1 -0
  388. package/packages/tools/browser/dist/brand.js +31 -0
  389. package/packages/tools/browser/dist/brand.js.map +1 -0
  390. package/packages/tools/browser/dist/controller.d.ts +2 -2
  391. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  392. package/packages/tools/browser/dist/controller.js +16 -7
  393. package/packages/tools/browser/dist/controller.js.map +1 -1
  394. package/packages/tools/browser/dist/downloads.js +1 -1
  395. package/packages/tools/browser/dist/downloads.js.map +1 -1
  396. package/packages/tools/browser/dist/extension.d.ts +3 -1
  397. package/packages/tools/browser/dist/extension.d.ts.map +1 -1
  398. package/packages/tools/browser/dist/extension.js +4 -4
  399. package/packages/tools/browser/dist/extension.js.map +1 -1
  400. package/packages/tools/browser/dist/index.d.ts +3 -2
  401. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  402. package/packages/tools/browser/dist/index.js +7 -6
  403. package/packages/tools/browser/dist/index.js.map +1 -1
  404. package/packages/tools/browser/dist/routes.d.ts +12 -1
  405. package/packages/tools/browser/dist/routes.d.ts.map +1 -1
  406. package/packages/tools/browser/dist/routes.js +31 -14
  407. package/packages/tools/browser/dist/routes.js.map +1 -1
  408. package/packages/tools/browser/dist/service.d.ts +2 -0
  409. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  410. package/packages/tools/browser/dist/service.js +6 -6
  411. package/packages/tools/browser/dist/service.js.map +1 -1
  412. package/packages/tools/browser/dist/telemetry.d.ts +2 -2
  413. package/packages/tools/browser/dist/telemetry.js +2 -2
  414. package/packages/tools/browser/dist/telemetry.js.map +1 -1
  415. package/packages/tools/browser/dist/types.js +1 -1
  416. package/packages/tools/browser/dist/types.js.map +1 -1
  417. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  418. package/packages/tools/host/dist/index.d.ts +2 -1
  419. package/packages/tools/host/dist/index.d.ts.map +1 -1
  420. package/packages/tools/host/dist/index.js +11 -2
  421. package/packages/tools/host/dist/index.js.map +1 -1
  422. package/packages/tools/host/dist/process.d.ts +58 -1
  423. package/packages/tools/host/dist/process.d.ts.map +1 -1
  424. package/packages/tools/host/dist/process.js +229 -15
  425. package/packages/tools/host/dist/process.js.map +1 -1
  426. package/packages/tools/host/dist/service.d.ts +2 -0
  427. package/packages/tools/host/dist/service.d.ts.map +1 -1
  428. package/packages/tools/host/dist/service.js +8 -6
  429. package/packages/tools/host/dist/service.js.map +1 -1
  430. package/packages/tools/host/dist/skill-run.d.ts +10 -0
  431. package/packages/tools/host/dist/skill-run.d.ts.map +1 -1
  432. package/packages/tools/host/dist/skill-run.js +14 -0
  433. package/packages/tools/host/dist/skill-run.js.map +1 -1
  434. package/packages/web/dist/assets/index-DnZhfnM7.js +155 -0
  435. package/packages/web/dist/assets/{lottie_light-twPed1FM.js → lottie_light-CGUtDt_b.js} +1 -1
  436. package/packages/web/dist/build.json +1 -1
  437. package/packages/web/dist/index.html +1 -1
  438. package/packages/web/dist/precache.json +3 -3
  439. package/packages/web/dist/assets/index-DgpPl0TR.js +0 -155
@@ -8,14 +8,15 @@
8
8
  * stopped and started again as our own child — never adopted — so there is
9
9
  * exactly one lifecycle: a spawned child plus the probe.
10
10
  */
11
- import { readFile, rename, unlink } from 'node:fs/promises';
11
+ import { readFile, readdir, rename, unlink, writeFile, rm } from 'node:fs/promises';
12
12
  import { existsSync, createWriteStream } from 'node:fs';
13
13
  import { spawn, execFile } from 'node:child_process';
14
14
  import { promisify } from 'node:util';
15
15
  import path from 'node:path';
16
16
  import { randomBytes } from 'node:crypto';
17
17
  import pg from 'pg';
18
- import { prepareBinaries, nativeEnvironment, BINARY_VERSION } from './binaries.js';
18
+ import { prepareBinaries, nativeEnvironment, pgBinary, BINARY_VERSION } from './binaries.js';
19
+ import { startDatabaseGuard } from './windows-guard.js';
19
20
  const exec = promisify(execFile);
20
21
  const { Client } = pg;
21
22
  export async function stopChild(child, signal = 'SIGTERM', timeout = 15_000) {
@@ -62,13 +63,13 @@ export async function inspectCluster(cluster, checks) {
62
63
  return 'stale';
63
64
  }
64
65
  /** Ask a port which cluster it serves. Only this cluster's own answer is `ours`. */
65
- async function portIdentity(cluster, connection) {
66
+ async function portIdentity(ours, connection) {
66
67
  const client = new Client(connection);
67
68
  client.on('error', () => { });
68
69
  try {
69
70
  await client.connect();
70
71
  const result = await client.query('SHOW data_directory');
71
- return path.resolve(result.rows[0].data_directory) === cluster ? 'ours' : 'other';
72
+ return ours(result.rows[0].data_directory) ? 'ours' : 'other';
72
73
  }
73
74
  catch (error) {
74
75
  const code = error.code;
@@ -110,6 +111,8 @@ export function watchDatabase(probe, { interval = 1000, failures = 3 } = {}) {
110
111
  return { exited, fail, get alive() { return alive; }, stop() { stopped = true; clearTimeout(timer); } };
111
112
  }
112
113
  async function initializeCluster(bin, stage, password, env) {
114
+ if (process.platform === 'win32')
115
+ return initializeClusterWindows(bin, stage, password, env);
113
116
  // initdb opens /dev/stdin as a file. Give it a real kernel pipe (Node's
114
117
  // socket-backed stdio cannot be reopened this way on Linux). The shell program
115
118
  // is fixed; paths are positional arguments and the password travels only on stdin.
@@ -127,6 +130,89 @@ async function initializeCluster(bin, stage, password, env) {
127
130
  child.stdin?.end(password + '\n');
128
131
  });
129
132
  }
133
+ /**
134
+ * Windows has no /dev/stdin to hand initdb: the password goes through a file
135
+ * beside the stage instead, in the private data directory (owner-only on
136
+ * Windows too: the supervisor sets its ACL before anything is written there),
137
+ * removed the moment initdb has read it, on failure too, and at the next
138
+ * start if the supervisor was killed in between.
139
+ */
140
+ async function initializeClusterWindows(bin, stage, password, env) {
141
+ const pwfile = `${stage}.pw`;
142
+ await writeFile(pwfile, password + '\n', { mode: 0o600, flag: 'wx' });
143
+ try {
144
+ await exec(pgBinary(bin, 'initdb'), ['-D', stage, '-U', 'buddi_admin', '--auth=scram-sha-256', `--pwfile=${pwfile}`, '--encoding=UTF8', '--locale=C'], { env: nativeEnvironment(env), timeout: 120_000, windowsHide: true });
145
+ }
146
+ catch {
147
+ throw new Error('initdb failed or timed out; its staging directory was preserved.');
148
+ }
149
+ finally {
150
+ await rm(pwfile, { force: true });
151
+ }
152
+ }
153
+ /**
154
+ * Stop the postmaster we started. Elsewhere a signal does it (SIGINT is a fast
155
+ * shutdown); Windows has no signals, and killing postgres.exe outright is an
156
+ * unclean shutdown that can leave its backends behind, so `pg_ctl stop` asks
157
+ * it the way Postgres does there — and a server that will not stop is left
158
+ * running and reported, never killed: the caller must not hand the cluster
159
+ * over, or remove it, while it runs.
160
+ */
161
+ async function stopPostmaster(child, bin, cluster, env) {
162
+ if (process.platform !== 'win32')
163
+ return stopChild(child, 'SIGINT');
164
+ const running = () => child.exitCode === null && child.signalCode === null;
165
+ if (!running())
166
+ return;
167
+ const exited = new Promise(resolve => child.once('exit', () => resolve()));
168
+ let failure;
169
+ // -t 60: a shutdown checkpoint after a busy hour can take a while.
170
+ try {
171
+ await exec(pgBinary(bin, 'pg_ctl'), ['stop', '-D', cluster, '-m', 'fast', '-t', '60'], { timeout: 70_000, env: nativeEnvironment(env), windowsHide: true });
172
+ }
173
+ catch (error) {
174
+ failure = error.message.split('\n')[0];
175
+ }
176
+ // pg_ctl returns when postmaster.pid is gone; the process itself follows.
177
+ if (running())
178
+ await Promise.race([exited, new Promise(resolve => setTimeout(resolve, 10_000))]);
179
+ if (running())
180
+ throw new Error(`Postgres (pid ${child.pid}) did not stop${failure === undefined ? '' : ` (${failure})`}. It was left running rather than killed; stop it before removing or moving ${cluster}.`);
181
+ }
182
+ const ASCII = /^[\x20-\x7e]*$/;
183
+ /**
184
+ * The data directory as Postgres is given it. Postgres on Windows reads a
185
+ * path in the ANSI code page and then treats it as UTF-8, so initdb fails on
186
+ * C:\Users\Zoë ("invalid byte sequence for encoding UTF8"). The folder's 8.3
187
+ * short name is the same folder in ASCII; a drive that keeps none is refused
188
+ * in words. Elsewhere, and for a plain path, the directory as it is.
189
+ */
190
+ export async function postgresDataDir(dataDir, env, short = dir => shortPath(dir, env), platform = process.platform) {
191
+ if (platform !== 'win32' || ASCII.test(dataDir))
192
+ return dataDir;
193
+ const ascii = await short(dataDir).catch(() => '');
194
+ if (ascii === '' || !ASCII.test(ascii)) {
195
+ throw new Error(`Postgres on Windows cannot run in ${dataDir}: its path has letters outside English and this drive keeps no short (8.3) names for it. Set BUDDI_DATA_DIR to a folder whose path is plain English letters, such as C:\\buddi-data, and run buddi again.`);
196
+ }
197
+ return ascii;
198
+ }
199
+ async function shortPath(dir, env) {
200
+ const systemRoot = env.SystemRoot ?? env.SYSTEMROOT ?? 'C:\\Windows';
201
+ const { stdout } = await exec(path.win32.join(systemRoot, 'System32', 'WindowsPowerShell', 'v1.0', 'powershell.exe'), ['-NoProfile', '-NonInteractive', '-Command', '(New-Object -ComObject Scripting.FileSystemObject).GetFolder($env:BUDDI_SHORT_DIR).ShortPath'], { env: { ...nativeEnvironment(env), BUDDI_SHORT_DIR: dir }, windowsHide: true, timeout: 60_000 });
202
+ return String(stdout).trim();
203
+ }
204
+ /** Is `dir` (as Postgres reports it) one of these? Windows paths ignore case. */
205
+ function sameDirectory(dir, ...candidates) {
206
+ const resolved = path.resolve(dir);
207
+ return process.platform === 'win32'
208
+ ? candidates.some(candidate => resolved.toLowerCase() === path.resolve(candidate).toLowerCase())
209
+ : candidates.includes(resolved);
210
+ }
211
+ /** initdb password files a killed supervisor left beside its stage (Windows, see initializeClusterWindows). */
212
+ async function removeStalePasswordFiles(dataDir) {
213
+ const names = await readdir(dataDir).catch(() => []);
214
+ await Promise.all(names.filter(name => /^postgres-init-.*\.pw$/.test(name)).map(name => rm(path.join(dataDir, name), { force: true })));
215
+ }
130
216
  export async function startManagedCluster({ root, dataDir, port, vault, logFile, env = process.env, log: diagnostic = (line) => console.error(line) }) {
131
217
  const cluster = path.join(dataDir, 'postgres');
132
218
  let adminPassword = await vault.get('BUDDI_DB_ADMIN_PASSWORD');
@@ -143,13 +229,20 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
143
229
  password = randomBytes(32).toString('base64url');
144
230
  await vault.set('BUDDI_DB_PASSWORD', password);
145
231
  }
146
- const bin = await prepareBinaries({ root, dataDir, env, log: diagnostic });
232
+ const binaries = await prepareBinaries({ root, dataDir, env, log: diagnostic });
233
+ await removeStalePasswordFiles(dataDir);
234
+ // What Postgres is told (an ASCII form on Windows), and what it may answer
235
+ // with: its binaries' folder too, which it finds its share files from.
236
+ const pgData = await postgresDataDir(dataDir, env);
237
+ const bin = await postgresDataDir(binaries, env);
238
+ const pgCluster = path.join(pgData, 'postgres');
239
+ const ours = (dir) => sameDirectory(dir, cluster, pgCluster);
147
240
  if (!existsSync(path.join(cluster, 'PG_VERSION'))) {
148
241
  if (existsSync(cluster))
149
242
  throw new Error('The postgres directory is incomplete or unrecognized. It was preserved; inspect it before retrying.');
150
- const stage = path.join(dataDir, `postgres-init-${process.pid}-${Date.now()}`);
151
- await initializeCluster(bin, stage, adminPassword, env);
152
- await rename(stage, cluster);
243
+ const name = `postgres-init-${process.pid}-${Date.now()}`;
244
+ await initializeCluster(bin, path.join(pgData, name), adminPassword, env);
245
+ await rename(path.join(dataDir, name), cluster);
153
246
  }
154
247
  const major = (await readFile(path.join(cluster, 'PG_VERSION'), 'utf8')).trim();
155
248
  if (major !== BINARY_VERSION.split('.')[0])
@@ -163,14 +256,14 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
163
256
  const occupancy = await inspectCluster(cluster, {
164
257
  status: async () => {
165
258
  try {
166
- await exec(path.join(bin, 'pg_ctl'), ['status', '-D', cluster], { timeout: 5000, env: nativeEnvironment(env) });
259
+ await exec(pgBinary(bin, 'pg_ctl'), ['status', '-D', pgCluster], { timeout: 5000, env: nativeEnvironment(env), windowsHide: true });
167
260
  return true;
168
261
  }
169
262
  catch {
170
263
  return false;
171
264
  }
172
265
  },
173
- identity: recorded => portIdentity(cluster, { host: '127.0.0.1', port: recorded, user: 'buddi_admin', password: adminPassword, database: 'postgres', connectionTimeoutMillis: 1000, query_timeout: 1000 }),
266
+ identity: recorded => portIdentity(ours, { host: '127.0.0.1', port: recorded, user: 'buddi_admin', password: adminPassword, database: 'postgres', connectionTimeoutMillis: 1000, query_timeout: 1000 }),
174
267
  command: processCommand,
175
268
  });
176
269
  if (occupancy === 'stale') {
@@ -180,7 +273,7 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
180
273
  if (occupancy === 'orphan') {
181
274
  diagnostic('Stopping an orphaned Postgres server left on this cluster by a previous supervisor.');
182
275
  try {
183
- await exec(path.join(bin, 'pg_ctl'), ['stop', '-D', cluster, '-m', 'fast', '-t', '15'], { timeout: 20_000, env: nativeEnvironment(env) });
276
+ await exec(pgBinary(bin, 'pg_ctl'), ['stop', '-D', pgCluster, '-m', 'fast', '-t', '15'], { timeout: 20_000, env: nativeEnvironment(env), windowsHide: true });
184
277
  }
185
278
  catch (error) {
186
279
  // It may have finished shutting down on its own between the status check
@@ -188,7 +281,7 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
188
281
  // fatal: never start a second postmaster on a cluster someone still owns.
189
282
  let stopped = false;
190
283
  try {
191
- await exec(path.join(bin, 'pg_ctl'), ['status', '-D', cluster], { timeout: 5000, env: nativeEnvironment(env) });
284
+ await exec(pgBinary(bin, 'pg_ctl'), ['status', '-D', pgCluster], { timeout: 5000, env: nativeEnvironment(env), windowsHide: true });
192
285
  }
193
286
  catch {
194
287
  stopped = true;
@@ -198,7 +291,14 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
198
291
  }
199
292
  }
200
293
  const log = createWriteStream(logFile, { flags: 'a', mode: 0o600 });
201
- const child = spawn(path.join(bin, 'postgres'), ['-D', cluster, '-p', String(port), '-h', '127.0.0.1', '-k', ''], { env: nativeEnvironment(env), stdio: ['ignore', 'pipe', 'pipe'] });
294
+ /*
295
+ * Never detached on Windows: a postmaster without a console of its own gives
296
+ * every backend it starts a new console window. Hidden, it shares one
297
+ * invisible console with them, and it lives in the supervisor's job, so it
298
+ * goes when the supervisor goes (the next start recovers it); a restart or a
299
+ * sign-out stops it cleanly first (windows-guard.ts).
300
+ */
301
+ const child = spawn(pgBinary(bin, 'postgres'), ['-D', pgCluster, '-p', String(port), '-h', '127.0.0.1', '-k', ''], { env: nativeEnvironment(env), stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true });
202
302
  child.stdout?.pipe(log, { end: false });
203
303
  child.stderr?.pipe(log, { end: false });
204
304
  let failed;
@@ -215,7 +315,7 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
215
315
  await client.connect();
216
316
  // Never mistake another Postgres on the selected port for our child.
217
317
  const result = await client.query('SHOW data_directory');
218
- if (path.resolve(result.rows[0].data_directory) !== cluster)
318
+ if (!ours(result.rows[0].data_directory))
219
319
  throw new Error('database-port-conflict');
220
320
  const role = await client.query("SELECT 1 FROM pg_roles WHERE rolname = 'buddi'");
221
321
  if (!role.rowCount) {
@@ -242,10 +342,11 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
242
342
  }
243
343
  }
244
344
  catch (error) {
245
- await stopChild(child, 'SIGINT');
345
+ await stopPostmaster(child, bin, pgCluster, env).catch(stop => diagnostic(stop.message));
246
346
  log.end();
247
347
  throw error;
248
348
  }
349
+ const endGuard = process.platform === 'win32' && child.pid !== undefined ? startDatabaseGuard({ cluster, postmaster: child.pid, logFile, env: nativeEnvironment(env) }, diagnostic) : undefined;
249
350
  const url = `postgres://buddi:${encodeURIComponent(password)}@127.0.0.1:${port}/buddi`;
250
351
  const monitor = watchDatabase(async () => {
251
352
  const client = new Client(connection);
@@ -253,7 +354,7 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
253
354
  try {
254
355
  await client.connect();
255
356
  const result = await client.query('SHOW data_directory');
256
- if (path.resolve(result.rows[0].data_directory) !== cluster)
357
+ if (!ours(result.rows[0].data_directory))
257
358
  throw new Error('Cluster identity changed');
258
359
  }
259
360
  finally {
@@ -265,7 +366,8 @@ export async function startManagedCluster({ root, dataDir, port, vault, logFile,
265
366
  monitor.fail();
266
367
  return { pid: child.pid, child, url, exited: monitor.exited, get alive() { return monitor.alive; }, stop: async () => {
267
368
  monitor.stop();
268
- await stopChild(child, 'SIGINT');
369
+ endGuard?.();
370
+ await stopPostmaster(child, bin, pgCluster, env);
269
371
  log.end();
270
372
  } };
271
373
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/postgres/cluster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/postgres/cluster.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** The arguments PowerShell runs the guard with: the script travels encoded, so nothing in it is quoted for a command line. */
2
+ export declare function guardArguments(): string[];
3
+ export interface DatabaseGuardOptions {
4
+ cluster: string;
5
+ postmaster: number;
6
+ /** Where the guard notes what it did: the postmaster's own log. */
7
+ logFile: string;
8
+ env: NodeJS.ProcessEnv;
9
+ }
10
+ /**
11
+ * Start the guard for a running postmaster: hidden, in the supervisor's job
12
+ * (detached, PowerShell would have no console and leave at once). At the end
13
+ * of a session it is told before the supervisor and the postmaster are
14
+ * stopped, which is all it needs. One that leaves while the postmaster runs
15
+ * (an installer's Restart Manager closed it) is started again. A failure to
16
+ * start it costs only the clean shutdown at sign-out, so it is reported,
17
+ * never thrown. The returned function ends it for good.
18
+ */
19
+ export declare function startDatabaseGuard({ cluster, postmaster, logFile, env }: DatabaseGuardOptions, report: (line: string) => void, respawnMs?: number): () => void;
20
+ //# sourceMappingURL=windows-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-guard.d.ts","sourceRoot":"","sources":["../../src/postgres/windows-guard.ts"],"names":[],"mappings":"AAgGA,+HAA+H;AAC/H,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,SAAS,SAAS,GAAG,MAAM,IAAI,CAqB9J"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Windows: a clean database shutdown when the owner signs out or restarts.
3
+ *
4
+ * Nothing in Node hears a sign-out there. libuv maps no console event to
5
+ * CTRL_LOGOFF or CTRL_SHUTDOWN, the task's processes have no window for
6
+ * WM_ENDSESSION, and a process without one is simply terminated at the end of
7
+ * the session, Postgres with it: the next start then reads "database system
8
+ * was not properly shut down; automatic recovery in progress".
9
+ *
10
+ * So a small window-owning helper (Windows PowerShell, compiled C# through
11
+ * Add-Type, present on every Windows 10 and 11) runs beside the postmaster.
12
+ * It asks to be told first (SetProcessShutdownParameters 0x2FF, the top of
13
+ * the range applications may use). Asked whether the session may end
14
+ * (WM_QUERYENDSESSION), it sends the postmaster a fast shutdown the way
15
+ * `pg_ctl stop -m fast` does on Windows — the signal number on the
16
+ * postmaster's `pgsignal_<pid>` pipe — and answers "not yet" with a reason
17
+ * on screen while the database stops, never past 15 seconds; when the
18
+ * session does end (WM_ENDSESSION) it waits out what is left of those. Starting pg_ctl itself at that moment fails
19
+ * (a console program cannot start while the session is ending, 0xC0000142).
20
+ * The helper leaves by itself when the postmaster it watches is gone.
21
+ *
22
+ * No administrator rights, no group policy shutdown script, no service.
23
+ */
24
+ import { spawn } from 'node:child_process';
25
+ import path from 'node:path';
26
+ const SCRIPT = String.raw `
27
+ $ErrorActionPreference = 'Stop'
28
+ Add-Type -ReferencedAssemblies System.Windows.Forms -TypeDefinition @'
29
+ using System; using System.Diagnostics; using System.IO; using System.IO.Pipes; using System.Runtime.InteropServices; using System.Windows.Forms;
30
+ public class BuddiDatabaseGuard : NativeWindow {
31
+ [DllImport("kernel32.dll")] static extern bool SetProcessShutdownParameters(uint level, uint flags);
32
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern bool ShutdownBlockReasonCreate(IntPtr h, string reason);
33
+ [DllImport("user32.dll")] static extern bool ShutdownBlockReasonDestroy(IntPtr h);
34
+ const int CapMs = 15000;
35
+ readonly string cluster, log; readonly int postmaster; Stopwatch since;
36
+ public BuddiDatabaseGuard(string cluster, int postmaster, string log) {
37
+ this.cluster = cluster; this.postmaster = postmaster; this.log = log;
38
+ SetProcessShutdownParameters(0x2FF, 0);
39
+ CreateHandle(new CreateParams());
40
+ }
41
+ void Note(string line) { try { File.AppendAllText(log, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " buddi: " + line + Environment.NewLine); } catch {} }
42
+ /** The postmaster this guard watches still runs and still owns the cluster. */
43
+ public bool Live() {
44
+ try {
45
+ if (Process.GetProcessById(postmaster).HasExited) return false;
46
+ return int.Parse(File.ReadAllLines(Path.Combine(cluster, "postmaster.pid"))[0].Trim()) == postmaster;
47
+ } catch { return false; }
48
+ }
49
+ bool Capped() { return since != null && since.ElapsedMilliseconds >= CapMs; }
50
+ protected override void WndProc(ref Message m) {
51
+ // ENDSESSION_CLOSEAPP: not the end of the session but an installer's
52
+ // Restart Manager asking this program to close (Windows Update does).
53
+ // The database is none of its business: the guard closes alone, and the
54
+ // supervisor starts it again.
55
+ if ((m.Msg == 0x11 || m.Msg == 0x16) && (m.LParam.ToInt64() & 0x1) != 0) {
56
+ if (m.Msg == 0x16 && m.WParam != IntPtr.Zero) Application.Exit();
57
+ m.Result = m.Msg == 0x11 ? (IntPtr)1 : IntPtr.Zero; return;
58
+ }
59
+ if (m.Msg == 0x11) {
60
+ // Asked whether the session may end: begin the fast shutdown now, and
61
+ // hold the end (with a reason on screen) while the database stops, up to the cap.
62
+ if (Live() && !Capped()) { Begin(); ShutdownBlockReasonCreate(Handle, "Stopping buddi's database"); m.Result = IntPtr.Zero; return; }
63
+ ShutdownBlockReasonDestroy(Handle); m.Result = (IntPtr)1; return;
64
+ }
65
+ if (m.Msg == 0x16) {
66
+ if (m.WParam != IntPtr.Zero && Live()) { Begin(); while (Live() && !Capped()) System.Threading.Thread.Sleep(100); Note(Live() ? "the database was still stopping when the session ended" : "the database stopped for the end of the session"); }
67
+ ShutdownBlockReasonDestroy(Handle); m.Result = IntPtr.Zero; return;
68
+ }
69
+ base.WndProc(ref m);
70
+ }
71
+ void Begin() {
72
+ if (since != null) return;
73
+ since = Stopwatch.StartNew();
74
+ try {
75
+ Note("the Windows session is ending: a fast shutdown of the database (postmaster " + postmaster + ")");
76
+ // pg_ctl's own way on Windows: the signal number on the postmaster's signal pipe (SIGINT: fast shutdown).
77
+ using (var pipe = new NamedPipeClientStream(".", "pgsignal_" + postmaster, PipeDirection.InOut)) {
78
+ pipe.Connect(3000); pipe.ReadMode = PipeTransmissionMode.Message; pipe.WriteByte(2); pipe.Flush(); pipe.ReadByte();
79
+ }
80
+ } catch (Exception e) { Note("the database could not be asked to stop for the end of the session: " + e.Message); }
81
+ }
82
+ /** Called by the timer: once the database is gone, the end of the session is no longer held. */
83
+ public void Tick() { if (since != null && (!Live() || Capped())) ShutdownBlockReasonDestroy(Handle); }
84
+ }
85
+ '@
86
+ $postmaster = [int]$env:BUDDI_GUARD_POSTMASTER
87
+ $guard = New-Object BuddiDatabaseGuard $env:BUDDI_GUARD_CLUSTER, $postmaster, $env:BUDDI_GUARD_LOG
88
+ $timer = New-Object System.Windows.Forms.Timer
89
+ $timer.Interval = 250
90
+ $timer.add_Tick({ $guard.Tick(); if (-not (Get-Process -Id $postmaster -ErrorAction SilentlyContinue)) { [System.Windows.Forms.Application]::Exit() } })
91
+ $timer.Start()
92
+ [System.Windows.Forms.Application]::Run()
93
+ `;
94
+ /** The arguments PowerShell runs the guard with: the script travels encoded, so nothing in it is quoted for a command line. */
95
+ export function guardArguments() {
96
+ return ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-WindowStyle', 'Hidden', '-EncodedCommand', Buffer.from(SCRIPT, 'utf16le').toString('base64')];
97
+ }
98
+ /**
99
+ * Start the guard for a running postmaster: hidden, in the supervisor's job
100
+ * (detached, PowerShell would have no console and leave at once). At the end
101
+ * of a session it is told before the supervisor and the postmaster are
102
+ * stopped, which is all it needs. One that leaves while the postmaster runs
103
+ * (an installer's Restart Manager closed it) is started again. A failure to
104
+ * start it costs only the clean shutdown at sign-out, so it is reported,
105
+ * never thrown. The returned function ends it for good.
106
+ */
107
+ export function startDatabaseGuard({ cluster, postmaster, logFile, env }, report, respawnMs = 10_000) {
108
+ const systemRoot = env.SystemRoot ?? env.SYSTEMROOT ?? 'C:\\Windows';
109
+ const powershell = path.win32.join(systemRoot, 'System32', 'WindowsPowerShell', 'v1.0', 'powershell.exe');
110
+ let stopped = false, child, timer;
111
+ const alive = () => { try {
112
+ process.kill(postmaster, 0);
113
+ return true;
114
+ }
115
+ catch {
116
+ return false;
117
+ } };
118
+ const start = () => {
119
+ if (stopped || !alive())
120
+ return;
121
+ try {
122
+ child = spawn(powershell, guardArguments(), {
123
+ stdio: 'ignore', windowsHide: true,
124
+ env: { ...env, BUDDI_GUARD_CLUSTER: cluster, BUDDI_GUARD_POSTMASTER: String(postmaster), BUDDI_GUARD_LOG: logFile },
125
+ });
126
+ child.once('error', error => report(`The database's sign-out guard did not start (${error.message}); a Windows restart will not stop the database cleanly.`));
127
+ child.once('exit', () => { if (!stopped && alive()) {
128
+ timer = setTimeout(start, respawnMs);
129
+ timer.unref();
130
+ } });
131
+ child.unref();
132
+ }
133
+ catch (error) {
134
+ report(`The database's sign-out guard did not start (${error.message}); a Windows restart will not stop the database cleanly.`);
135
+ }
136
+ };
137
+ start();
138
+ return () => { stopped = true; clearTimeout(timer); };
139
+ }
140
+ //# sourceMappingURL=windows-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-guard.js","sourceRoot":"","sources":["../../src/postgres/windows-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmExB,CAAC;AAEF,+HAA+H;AAC/H,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzK,CAAC;AAUD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAwB,EAAE,MAA8B,EAAE,SAAS,GAAG,MAAM;IAChJ,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,aAAa,CAAC;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1G,IAAI,OAAO,GAAG,KAAK,EAAE,KAA+B,EAAE,KAAiC,CAAC;IACxF,MAAM,KAAK,GAAG,GAAY,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE;gBAC1C,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI;gBAClC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE;aACpH,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,gDAAgD,KAAK,CAAC,OAAO,0DAA0D,CAAC,CAAC,CAAC;YAC9J,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,EAAE,CAAC;gBAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChH,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,gDAAiD,KAAe,CAAC,OAAO,0DAA0D,CAAC,CAAC;QAC7I,CAAC;IACH,CAAC,CAAC;IACF,KAAK,EAAE,CAAC;IACR,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC"}