@withbuddi/buddi 0.1.0-pre.52 → 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 (552) 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 +53 -0
  104. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
  105. package/node_modules/@buddi/install/dist/app-layout.js +123 -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 +340 -54
  115. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  116. package/node_modules/@buddi/install/dist/linux-install.d.ts +41 -0
  117. package/node_modules/@buddi/install/dist/linux-install.d.ts.map +1 -0
  118. package/node_modules/@buddi/install/dist/linux-install.js +86 -0
  119. package/node_modules/@buddi/install/dist/linux-install.js.map +1 -0
  120. package/node_modules/@buddi/install/dist/postgres-check.js +1 -1
  121. package/node_modules/@buddi/install/dist/postgres-check.js.map +1 -1
  122. package/node_modules/@buddi/install/dist/product-uninstall.d.ts +14 -0
  123. package/node_modules/@buddi/install/dist/product-uninstall.d.ts.map +1 -1
  124. package/node_modules/@buddi/install/dist/product-uninstall.js +10 -0
  125. package/node_modules/@buddi/install/dist/product-uninstall.js.map +1 -1
  126. package/node_modules/@buddi/install/dist/runtime-info.d.ts +23 -0
  127. package/node_modules/@buddi/install/dist/runtime-info.d.ts.map +1 -0
  128. package/node_modules/@buddi/install/dist/runtime-info.js +72 -0
  129. package/node_modules/@buddi/install/dist/runtime-info.js.map +1 -0
  130. package/node_modules/@buddi/install/dist/supervisor.d.ts +60 -3
  131. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  132. package/node_modules/@buddi/install/dist/supervisor.js +175 -17
  133. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  134. package/node_modules/@buddi/install/dist/uninstall.d.ts +49 -3
  135. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  136. package/node_modules/@buddi/install/dist/uninstall.js +184 -27
  137. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  138. package/node_modules/@buddi/install/dist/upgrade.d.ts +20 -5
  139. package/node_modules/@buddi/install/dist/upgrade.d.ts.map +1 -1
  140. package/node_modules/@buddi/install/dist/upgrade.js +125 -62
  141. package/node_modules/@buddi/install/dist/upgrade.js.map +1 -1
  142. package/node_modules/@buddi/install/dist/windows-install.d.ts +102 -0
  143. package/node_modules/@buddi/install/dist/windows-install.d.ts.map +1 -0
  144. package/node_modules/@buddi/install/dist/windows-install.js +223 -0
  145. package/node_modules/@buddi/install/dist/windows-install.js.map +1 -0
  146. package/node_modules/@buddi/install/dist/windows-setup.d.ts +107 -0
  147. package/node_modules/@buddi/install/dist/windows-setup.d.ts.map +1 -0
  148. package/node_modules/@buddi/install/dist/windows-setup.js +700 -0
  149. package/node_modules/@buddi/install/dist/windows-setup.js.map +1 -0
  150. package/node_modules/@buddi/install/dist/windows-task.d.ts +49 -0
  151. package/node_modules/@buddi/install/dist/windows-task.d.ts.map +1 -0
  152. package/node_modules/@buddi/install/dist/windows-task.js +167 -0
  153. package/node_modules/@buddi/install/dist/windows-task.js.map +1 -0
  154. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  155. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +1 -1
  156. package/node_modules/@buddi/runtime/dist/codex-direct.js +1 -1
  157. package/node_modules/@buddi/runtime/dist/openai.d.ts +11 -0
  158. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  159. package/node_modules/@buddi/runtime/dist/openai.js +36 -3
  160. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  161. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  162. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js +3 -3
  163. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js.map +1 -1
  164. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  165. package/node_modules/@buddi/tool-browser/dist/availability.d.ts.map +1 -1
  166. package/node_modules/@buddi/tool-browser/dist/availability.js +1 -0
  167. package/node_modules/@buddi/tool-browser/dist/availability.js.map +1 -1
  168. package/node_modules/@buddi/tool-browser/dist/brand.d.ts +19 -0
  169. package/node_modules/@buddi/tool-browser/dist/brand.d.ts.map +1 -0
  170. package/node_modules/@buddi/tool-browser/dist/brand.js +31 -0
  171. package/node_modules/@buddi/tool-browser/dist/brand.js.map +1 -0
  172. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +2 -2
  173. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  174. package/node_modules/@buddi/tool-browser/dist/controller.js +16 -7
  175. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  176. package/node_modules/@buddi/tool-browser/dist/downloads.js +1 -1
  177. package/node_modules/@buddi/tool-browser/dist/downloads.js.map +1 -1
  178. package/node_modules/@buddi/tool-browser/dist/extension.d.ts +3 -1
  179. package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
  180. package/node_modules/@buddi/tool-browser/dist/extension.js +4 -4
  181. package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
  182. package/node_modules/@buddi/tool-browser/dist/index.d.ts +3 -2
  183. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  184. package/node_modules/@buddi/tool-browser/dist/index.js +7 -6
  185. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  186. package/node_modules/@buddi/tool-browser/dist/routes.d.ts +12 -1
  187. package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -1
  188. package/node_modules/@buddi/tool-browser/dist/routes.js +31 -14
  189. package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -1
  190. package/node_modules/@buddi/tool-browser/dist/service.d.ts +2 -0
  191. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  192. package/node_modules/@buddi/tool-browser/dist/service.js +6 -6
  193. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  194. package/node_modules/@buddi/tool-browser/dist/telemetry.d.ts +2 -2
  195. package/node_modules/@buddi/tool-browser/dist/telemetry.js +2 -2
  196. package/node_modules/@buddi/tool-browser/dist/telemetry.js.map +1 -1
  197. package/node_modules/@buddi/tool-browser/dist/types.js +1 -1
  198. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  199. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  200. package/node_modules/@buddi/tool-host/dist/index.d.ts +2 -1
  201. package/node_modules/@buddi/tool-host/dist/index.d.ts.map +1 -1
  202. package/node_modules/@buddi/tool-host/dist/index.js +11 -2
  203. package/node_modules/@buddi/tool-host/dist/index.js.map +1 -1
  204. package/node_modules/@buddi/tool-host/dist/process.d.ts +58 -1
  205. package/node_modules/@buddi/tool-host/dist/process.d.ts.map +1 -1
  206. package/node_modules/@buddi/tool-host/dist/process.js +229 -15
  207. package/node_modules/@buddi/tool-host/dist/process.js.map +1 -1
  208. package/node_modules/@buddi/tool-host/dist/service.d.ts +2 -0
  209. package/node_modules/@buddi/tool-host/dist/service.d.ts.map +1 -1
  210. package/node_modules/@buddi/tool-host/dist/service.js +8 -6
  211. package/node_modules/@buddi/tool-host/dist/service.js.map +1 -1
  212. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts +10 -0
  213. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts.map +1 -1
  214. package/node_modules/@buddi/tool-host/dist/skill-run.js +14 -0
  215. package/node_modules/@buddi/tool-host/dist/skill-run.js.map +1 -1
  216. package/node_modules/@hono/node-server/package.json +2 -2
  217. package/node_modules/@types/node/README.md +1 -1
  218. package/node_modules/@types/node/package.json +2 -2
  219. package/node_modules/@types/node/util.d.ts +6 -3
  220. package/node_modules/content-disposition/README.md +105 -35
  221. package/node_modules/content-disposition/dist/index.d.ts +72 -0
  222. package/node_modules/content-disposition/dist/index.js +388 -0
  223. package/node_modules/content-disposition/dist/index.js.map +1 -0
  224. package/node_modules/content-disposition/package.json +31 -19
  225. package/node_modules/docx/dist/index.cjs +182 -80
  226. package/node_modules/docx/dist/index.d.cts +63 -6
  227. package/node_modules/docx/dist/index.d.ts +63 -6
  228. package/node_modules/docx/dist/index.iife.js +182 -80
  229. package/node_modules/docx/dist/index.mjs +182 -80
  230. package/node_modules/docx/dist/index.umd.cjs +182 -80
  231. package/node_modules/docx/dist/layout.cjs +1 -6
  232. package/node_modules/docx/dist/layout.iife.js +1 -6
  233. package/node_modules/docx/dist/layout.mjs +1 -6
  234. package/node_modules/docx/dist/layout.umd.cjs +1 -6
  235. package/node_modules/docx/package.json +4 -3
  236. package/node_modules/express/Readme.md +15 -9
  237. package/node_modules/express/lib/application.js +2 -2
  238. package/node_modules/express/lib/request.js +32 -19
  239. package/node_modules/express/lib/response.js +27 -30
  240. package/node_modules/express/node_modules/content-type/LICENSE +22 -0
  241. package/node_modules/express/node_modules/content-type/README.md +71 -0
  242. package/node_modules/express/node_modules/content-type/dist/index.d.ts +46 -0
  243. package/node_modules/express/node_modules/content-type/dist/index.js +176 -0
  244. package/node_modules/express/node_modules/content-type/dist/index.js.map +1 -0
  245. package/node_modules/express/node_modules/content-type/package.json +52 -0
  246. package/node_modules/express/package.json +10 -10
  247. package/node_modules/imapflow/CHANGELOG.md +33 -0
  248. package/node_modules/imapflow/dist/cjs/commands/append.d.ts +1 -1
  249. package/node_modules/imapflow/dist/cjs/commands/append.js +15 -4
  250. package/node_modules/imapflow/dist/cjs/commands/compress.js +2 -2
  251. package/node_modules/imapflow/dist/cjs/commands/id.js +5 -3
  252. package/node_modules/imapflow/dist/cjs/commands/idle.js +9 -9
  253. package/node_modules/imapflow/dist/cjs/commands/list.js +2 -2
  254. package/node_modules/imapflow/dist/cjs/commands/namespace.js +18 -14
  255. package/node_modules/imapflow/dist/cjs/commands/quota.js +2 -3
  256. package/node_modules/imapflow/dist/cjs/commands/status.js +2 -4
  257. package/node_modules/imapflow/dist/cjs/connection-deadline.d.ts +1 -1
  258. package/node_modules/imapflow/dist/cjs/connection-deadline.js +2 -4
  259. package/node_modules/imapflow/dist/cjs/download.js +66 -35
  260. package/node_modules/imapflow/dist/cjs/errors.d.ts +15 -0
  261. package/node_modules/imapflow/dist/cjs/errors.js +22 -0
  262. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.d.ts +4 -4
  263. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.js +18 -18
  264. package/node_modules/imapflow/dist/cjs/handler/imap-parser.js +28 -3
  265. package/node_modules/imapflow/dist/cjs/handler/imap-stream.js +9 -8
  266. package/node_modules/imapflow/dist/cjs/handler/limits.d.ts +1 -1
  267. package/node_modules/imapflow/dist/cjs/handler/limits.js +5 -7
  268. package/node_modules/imapflow/dist/cjs/handler/parser-instance.js +23 -38
  269. package/node_modules/imapflow/dist/cjs/handler/token-parser.d.ts +12 -0
  270. package/node_modules/imapflow/dist/cjs/handler/token-parser.js +44 -104
  271. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +4 -3
  272. package/node_modules/imapflow/dist/cjs/imap-flow.js +98 -72
  273. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  274. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  275. package/node_modules/imapflow/dist/cjs/proxy-connection.js +2 -5
  276. package/node_modules/imapflow/dist/cjs/search-compiler.js +2 -3
  277. package/node_modules/imapflow/dist/cjs/tools.d.ts +14 -3
  278. package/node_modules/imapflow/dist/cjs/tools.js +30 -18
  279. package/node_modules/imapflow/dist/cjs/types.d.ts +11 -0
  280. package/node_modules/imapflow/dist/esm/commands/append.d.ts +1 -1
  281. package/node_modules/imapflow/dist/esm/commands/append.js +15 -4
  282. package/node_modules/imapflow/dist/esm/commands/compress.js +2 -2
  283. package/node_modules/imapflow/dist/esm/commands/id.js +6 -4
  284. package/node_modules/imapflow/dist/esm/commands/idle.js +9 -9
  285. package/node_modules/imapflow/dist/esm/commands/list.js +3 -3
  286. package/node_modules/imapflow/dist/esm/commands/namespace.js +19 -15
  287. package/node_modules/imapflow/dist/esm/commands/quota.js +3 -4
  288. package/node_modules/imapflow/dist/esm/commands/status.js +2 -4
  289. package/node_modules/imapflow/dist/esm/connection-deadline.d.ts +1 -1
  290. package/node_modules/imapflow/dist/esm/connection-deadline.js +2 -4
  291. package/node_modules/imapflow/dist/esm/download.js +66 -35
  292. package/node_modules/imapflow/dist/esm/errors.d.ts +15 -0
  293. package/node_modules/imapflow/dist/esm/errors.js +21 -0
  294. package/node_modules/imapflow/dist/esm/handler/imap-compiler.d.ts +4 -4
  295. package/node_modules/imapflow/dist/esm/handler/imap-compiler.js +18 -18
  296. package/node_modules/imapflow/dist/esm/handler/imap-parser.js +28 -3
  297. package/node_modules/imapflow/dist/esm/handler/imap-stream.js +9 -8
  298. package/node_modules/imapflow/dist/esm/handler/limits.d.ts +1 -1
  299. package/node_modules/imapflow/dist/esm/handler/limits.js +5 -7
  300. package/node_modules/imapflow/dist/esm/handler/parser-instance.js +23 -38
  301. package/node_modules/imapflow/dist/esm/handler/token-parser.d.ts +12 -0
  302. package/node_modules/imapflow/dist/esm/handler/token-parser.js +44 -104
  303. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +4 -3
  304. package/node_modules/imapflow/dist/esm/imap-flow.js +99 -73
  305. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  306. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  307. package/node_modules/imapflow/dist/esm/proxy-connection.js +2 -5
  308. package/node_modules/imapflow/dist/esm/search-compiler.js +2 -3
  309. package/node_modules/imapflow/dist/esm/tools.d.ts +14 -3
  310. package/node_modules/imapflow/dist/esm/tools.js +30 -19
  311. package/node_modules/imapflow/dist/esm/types.d.ts +11 -0
  312. package/node_modules/imapflow/package.json +6 -3
  313. package/node_modules/ip-address/README.md +70 -70
  314. package/node_modules/ip-address/dist/ipv6.js +7 -4
  315. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  316. package/node_modules/ip-address/dist/v6/constants.d.ts +3 -0
  317. package/node_modules/ip-address/dist/v6/constants.js +3 -0
  318. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  319. package/node_modules/ip-address/package.json +2 -1
  320. package/node_modules/marked/bin/main.js +1 -1
  321. package/node_modules/marked/lib/marked.d.ts +6 -3
  322. package/node_modules/marked/lib/marked.esm.js +48 -50
  323. package/node_modules/marked/lib/marked.esm.js.map +3 -3
  324. package/node_modules/marked/lib/marked.umd.js +45 -47
  325. package/node_modules/marked/lib/marked.umd.js.map +3 -3
  326. package/node_modules/marked/man/marked.1 +1 -1
  327. package/node_modules/marked/package.json +1 -1
  328. package/node_modules/process-warning/.github/workflows/ci.yml +1 -1
  329. package/node_modules/process-warning/.github/workflows/lock-threads.yml +1 -1
  330. package/node_modules/process-warning/.github/workflows/release.yml +24 -0
  331. package/node_modules/process-warning/README.md +46 -46
  332. package/node_modules/process-warning/package.json +1 -1
  333. package/package.json +2 -2
  334. package/packages/cli/dist/.tsbuildinfo +1 -1
  335. package/packages/cli/dist/dashboard-cmd.d.ts.map +1 -1
  336. package/packages/cli/dist/dashboard-cmd.js +6 -3
  337. package/packages/cli/dist/dashboard-cmd.js.map +1 -1
  338. package/packages/cli/dist/main.js +2 -2
  339. package/packages/cli/dist/main.js.map +1 -1
  340. package/packages/cli/dist/status.d.ts +16 -2
  341. package/packages/cli/dist/status.d.ts.map +1 -1
  342. package/packages/cli/dist/status.js +42 -2
  343. package/packages/cli/dist/status.js.map +1 -1
  344. package/packages/core/dist/.tsbuildinfo +1 -1
  345. package/packages/core/dist/agents/catalog.d.ts +6 -0
  346. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  347. package/packages/core/dist/agents/catalog.js +1 -1
  348. package/packages/core/dist/agents/catalog.js.map +1 -1
  349. package/packages/core/dist/backup/archive.d.ts +6 -0
  350. package/packages/core/dist/backup/archive.d.ts.map +1 -1
  351. package/packages/core/dist/backup/archive.js +19 -6
  352. package/packages/core/dist/backup/archive.js.map +1 -1
  353. package/packages/core/dist/postgres/binaries.d.ts +21 -1
  354. package/packages/core/dist/postgres/binaries.d.ts.map +1 -1
  355. package/packages/core/dist/postgres/binaries.js +72 -10
  356. package/packages/core/dist/postgres/binaries.js.map +1 -1
  357. package/packages/core/dist/postgres/cluster.d.ts +8 -0
  358. package/packages/core/dist/postgres/cluster.d.ts.map +1 -1
  359. package/packages/core/dist/postgres/cluster.js +119 -17
  360. package/packages/core/dist/postgres/cluster.js.map +1 -1
  361. package/packages/core/dist/postgres/windows-guard.d.ts +20 -0
  362. package/packages/core/dist/postgres/windows-guard.d.ts.map +1 -0
  363. package/packages/core/dist/postgres/windows-guard.js +140 -0
  364. package/packages/core/dist/postgres/windows-guard.js.map +1 -0
  365. package/packages/gateway/dist/.tsbuildinfo +1 -1
  366. package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
  367. package/packages/gateway/dist/agents/catalog.js +3 -2
  368. package/packages/gateway/dist/agents/catalog.js.map +1 -1
  369. package/packages/gateway/dist/agents/catalogue-package.d.ts +2 -2
  370. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  371. package/packages/gateway/dist/agents/catalogue-package.js +1 -1
  372. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
  373. package/packages/gateway/dist/agents/platform-catalogue.d.ts +6 -6
  374. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  375. package/packages/gateway/dist/agents/platform-catalogue.js +5 -5
  376. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
  377. package/packages/gateway/dist/browser-host.js +1 -1
  378. package/packages/gateway/dist/browser-host.js.map +1 -1
  379. package/packages/gateway/dist/missions/chrome-scope.d.ts +10 -10
  380. package/packages/gateway/dist/missions/chrome-scope.d.ts.map +1 -1
  381. package/packages/gateway/dist/missions/chrome-scope.js +20 -20
  382. package/packages/gateway/dist/missions/chrome-scope.js.map +1 -1
  383. package/packages/gateway/dist/missions/execute.d.ts +2 -2
  384. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  385. package/packages/gateway/dist/missions/execute.js +11 -11
  386. package/packages/gateway/dist/missions/execute.js.map +1 -1
  387. package/packages/gateway/dist/missions/reminders.d.ts +2 -2
  388. package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
  389. package/packages/gateway/dist/missions/reminders.js +5 -5
  390. package/packages/gateway/dist/missions/reminders.js.map +1 -1
  391. package/packages/gateway/dist/owner-notify.js +1 -1
  392. package/packages/gateway/dist/owner-notify.js.map +1 -1
  393. package/packages/gateway/dist/plugins/npm.d.ts +9 -2
  394. package/packages/gateway/dist/plugins/npm.d.ts.map +1 -1
  395. package/packages/gateway/dist/plugins/npm.js +29 -6
  396. package/packages/gateway/dist/plugins/npm.js.map +1 -1
  397. package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
  398. package/packages/gateway/dist/plugins/stage.js +2 -2
  399. package/packages/gateway/dist/plugins/stage.js.map +1 -1
  400. package/packages/gateway/dist/serve.js +1 -1
  401. package/packages/gateway/dist/serve.js.map +1 -1
  402. package/packages/gateway/dist/surfaces/browser-cards.d.ts +1 -1
  403. package/packages/gateway/dist/surfaces/browser-cards.js +1 -1
  404. package/packages/gateway/dist/system-context.d.ts +11 -0
  405. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  406. package/packages/gateway/dist/system-context.js +42 -1
  407. package/packages/gateway/dist/system-context.js.map +1 -1
  408. package/packages/gateway/dist/telegram/approvals.js +1 -1
  409. package/packages/gateway/dist/telegram/approvals.js.map +1 -1
  410. package/packages/gateway/dist/telegram/browser-view.js +1 -1
  411. package/packages/gateway/dist/telegram/browser-view.js.map +1 -1
  412. package/packages/gateway/dist/web/api-routes.js +6 -6
  413. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  414. package/packages/gateway/dist/web/approval-ask.js +1 -1
  415. package/packages/gateway/dist/web/extension.d.ts +6 -0
  416. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  417. package/packages/gateway/dist/web/extension.js +22 -11
  418. package/packages/gateway/dist/web/extension.js.map +1 -1
  419. package/packages/gateway/dist/web/read.d.ts +1 -1
  420. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  421. package/packages/gateway/dist/web/server.js +4 -4
  422. package/packages/gateway/dist/web/server.js.map +1 -1
  423. package/packages/gateway/dist/web/service.d.ts +6 -1
  424. package/packages/gateway/dist/web/service.d.ts.map +1 -1
  425. package/packages/gateway/dist/web/service.js +10 -1
  426. package/packages/gateway/dist/web/service.js.map +1 -1
  427. package/packages/gateway/dist/web/skills.d.ts.map +1 -1
  428. package/packages/gateway/dist/web/skills.js +2 -1
  429. package/packages/gateway/dist/web/skills.js.map +1 -1
  430. package/packages/gateway/dist/web/write.d.ts +1 -1
  431. package/packages/gateway/dist/web/write.js +1 -1
  432. package/packages/install/dist/.tsbuildinfo +1 -1
  433. package/packages/install/dist/app-layout.d.ts +53 -0
  434. package/packages/install/dist/app-layout.d.ts.map +1 -1
  435. package/packages/install/dist/app-layout.js +123 -10
  436. package/packages/install/dist/app-layout.js.map +1 -1
  437. package/packages/install/dist/cloudflared.js +2 -2
  438. package/packages/install/dist/cloudflared.js.map +1 -1
  439. package/packages/install/dist/environment.d.ts +40 -1
  440. package/packages/install/dist/environment.d.ts.map +1 -1
  441. package/packages/install/dist/environment.js +158 -12
  442. package/packages/install/dist/environment.js.map +1 -1
  443. package/packages/install/dist/launcher.d.ts.map +1 -1
  444. package/packages/install/dist/launcher.js +340 -54
  445. package/packages/install/dist/launcher.js.map +1 -1
  446. package/packages/install/dist/linux-install.d.ts +41 -0
  447. package/packages/install/dist/linux-install.d.ts.map +1 -0
  448. package/packages/install/dist/linux-install.js +86 -0
  449. package/packages/install/dist/linux-install.js.map +1 -0
  450. package/packages/install/dist/postgres-check.js +1 -1
  451. package/packages/install/dist/postgres-check.js.map +1 -1
  452. package/packages/install/dist/product-uninstall.d.ts +14 -0
  453. package/packages/install/dist/product-uninstall.d.ts.map +1 -1
  454. package/packages/install/dist/product-uninstall.js +10 -0
  455. package/packages/install/dist/product-uninstall.js.map +1 -1
  456. package/packages/install/dist/runtime-info.d.ts +23 -0
  457. package/packages/install/dist/runtime-info.d.ts.map +1 -0
  458. package/packages/install/dist/runtime-info.js +72 -0
  459. package/packages/install/dist/runtime-info.js.map +1 -0
  460. package/packages/install/dist/supervisor.d.ts +60 -3
  461. package/packages/install/dist/supervisor.d.ts.map +1 -1
  462. package/packages/install/dist/supervisor.js +175 -17
  463. package/packages/install/dist/supervisor.js.map +1 -1
  464. package/packages/install/dist/uninstall.d.ts +49 -3
  465. package/packages/install/dist/uninstall.d.ts.map +1 -1
  466. package/packages/install/dist/uninstall.js +184 -27
  467. package/packages/install/dist/uninstall.js.map +1 -1
  468. package/packages/install/dist/upgrade.d.ts +20 -5
  469. package/packages/install/dist/upgrade.d.ts.map +1 -1
  470. package/packages/install/dist/upgrade.js +125 -62
  471. package/packages/install/dist/upgrade.js.map +1 -1
  472. package/packages/install/dist/windows-install.d.ts +102 -0
  473. package/packages/install/dist/windows-install.d.ts.map +1 -0
  474. package/packages/install/dist/windows-install.js +223 -0
  475. package/packages/install/dist/windows-install.js.map +1 -0
  476. package/packages/install/dist/windows-setup.d.ts +107 -0
  477. package/packages/install/dist/windows-setup.d.ts.map +1 -0
  478. package/packages/install/dist/windows-setup.js +700 -0
  479. package/packages/install/dist/windows-setup.js.map +1 -0
  480. package/packages/install/dist/windows-task.d.ts +49 -0
  481. package/packages/install/dist/windows-task.d.ts.map +1 -0
  482. package/packages/install/dist/windows-task.js +167 -0
  483. package/packages/install/dist/windows-task.js.map +1 -0
  484. package/packages/runtime/dist/.tsbuildinfo +1 -1
  485. package/packages/runtime/dist/codex-direct.d.ts +1 -1
  486. package/packages/runtime/dist/codex-direct.js +1 -1
  487. package/packages/runtime/dist/openai.d.ts +11 -0
  488. package/packages/runtime/dist/openai.d.ts.map +1 -1
  489. package/packages/runtime/dist/openai.js +36 -3
  490. package/packages/runtime/dist/openai.js.map +1 -1
  491. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  492. package/packages/tools/artifacts/dist/tools/write.js +3 -3
  493. package/packages/tools/artifacts/dist/tools/write.js.map +1 -1
  494. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  495. package/packages/tools/browser/dist/availability.d.ts.map +1 -1
  496. package/packages/tools/browser/dist/availability.js +1 -0
  497. package/packages/tools/browser/dist/availability.js.map +1 -1
  498. package/packages/tools/browser/dist/brand.d.ts +19 -0
  499. package/packages/tools/browser/dist/brand.d.ts.map +1 -0
  500. package/packages/tools/browser/dist/brand.js +31 -0
  501. package/packages/tools/browser/dist/brand.js.map +1 -0
  502. package/packages/tools/browser/dist/controller.d.ts +2 -2
  503. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  504. package/packages/tools/browser/dist/controller.js +16 -7
  505. package/packages/tools/browser/dist/controller.js.map +1 -1
  506. package/packages/tools/browser/dist/downloads.js +1 -1
  507. package/packages/tools/browser/dist/downloads.js.map +1 -1
  508. package/packages/tools/browser/dist/extension.d.ts +3 -1
  509. package/packages/tools/browser/dist/extension.d.ts.map +1 -1
  510. package/packages/tools/browser/dist/extension.js +4 -4
  511. package/packages/tools/browser/dist/extension.js.map +1 -1
  512. package/packages/tools/browser/dist/index.d.ts +3 -2
  513. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  514. package/packages/tools/browser/dist/index.js +7 -6
  515. package/packages/tools/browser/dist/index.js.map +1 -1
  516. package/packages/tools/browser/dist/routes.d.ts +12 -1
  517. package/packages/tools/browser/dist/routes.d.ts.map +1 -1
  518. package/packages/tools/browser/dist/routes.js +31 -14
  519. package/packages/tools/browser/dist/routes.js.map +1 -1
  520. package/packages/tools/browser/dist/service.d.ts +2 -0
  521. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  522. package/packages/tools/browser/dist/service.js +6 -6
  523. package/packages/tools/browser/dist/service.js.map +1 -1
  524. package/packages/tools/browser/dist/telemetry.d.ts +2 -2
  525. package/packages/tools/browser/dist/telemetry.js +2 -2
  526. package/packages/tools/browser/dist/telemetry.js.map +1 -1
  527. package/packages/tools/browser/dist/types.js +1 -1
  528. package/packages/tools/browser/dist/types.js.map +1 -1
  529. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  530. package/packages/tools/host/dist/index.d.ts +2 -1
  531. package/packages/tools/host/dist/index.d.ts.map +1 -1
  532. package/packages/tools/host/dist/index.js +11 -2
  533. package/packages/tools/host/dist/index.js.map +1 -1
  534. package/packages/tools/host/dist/process.d.ts +58 -1
  535. package/packages/tools/host/dist/process.d.ts.map +1 -1
  536. package/packages/tools/host/dist/process.js +229 -15
  537. package/packages/tools/host/dist/process.js.map +1 -1
  538. package/packages/tools/host/dist/service.d.ts +2 -0
  539. package/packages/tools/host/dist/service.d.ts.map +1 -1
  540. package/packages/tools/host/dist/service.js +8 -6
  541. package/packages/tools/host/dist/service.js.map +1 -1
  542. package/packages/tools/host/dist/skill-run.d.ts +10 -0
  543. package/packages/tools/host/dist/skill-run.d.ts.map +1 -1
  544. package/packages/tools/host/dist/skill-run.js +14 -0
  545. package/packages/tools/host/dist/skill-run.js.map +1 -1
  546. package/packages/web/dist/assets/index-DnZhfnM7.js +155 -0
  547. package/packages/web/dist/assets/{lottie_light-DROBTM6Y.js → lottie_light-CGUtDt_b.js} +1 -1
  548. package/packages/web/dist/build.json +1 -1
  549. package/packages/web/dist/index.html +1 -1
  550. package/packages/web/dist/precache.json +3 -3
  551. package/node_modules/content-disposition/index.js +0 -536
  552. package/packages/web/dist/assets/index-oxmxR39o.js +0 -155
@@ -13,8 +13,59 @@ import type { Connector, ConnectorStatus } from './cloudflared.js';
13
13
  * `state.upgrade` says which upgrade was under way and what it backed up.
14
14
  */
15
15
  export declare function pendingUpgrade(marker: UpgradeInProgress | undefined): UpgradeInProgress | undefined;
16
- /** The control socket of the installation whose data directory this is. */
17
- export declare function supervisorSocket(data: string): string;
16
+ /** Where a Windows supervisor records the name of its pipe, inside the private data directory. */
17
+ export declare const PIPE_NAME_FILE = "supervisor.pipe";
18
+ /** The response header a Windows supervisor proves itself with: the secret beside its pipe's name. */
19
+ export declare const SUPERVISOR_SECRET_HEADER = "x-buddi-supervisor";
20
+ /** The live supervisor's pipe name and secret (Windows), or nothing when `supervisor.lock` names no live process. */
21
+ export declare function supervisorPipe(data: string): {
22
+ name: string;
23
+ secret: string;
24
+ } | undefined;
25
+ /**
26
+ * The control socket of the installation whose data directory this is. On
27
+ * Windows a named pipe instead (Node listens on no other kind of path there).
28
+ * A pipe's name is in a namespace every account shares and can list, and
29
+ * one created first by someone else would be answered by them; so the name
30
+ * is random, made afresh at each supervisor start, kept where only this
31
+ * account can read it (`supervisor.pipe` in the data directory, see
32
+ * protectDataDirectory) beside a secret every answer carries, and given out
33
+ * only while `supervisor.lock` names a live supervisor. Otherwise: a name
34
+ * nobody can have made, which no one answers.
35
+ */
36
+ export declare function supervisorSocket(data: string, platform?: NodeJS.Platform | string): string;
37
+ /** Does an answer on this installation's socket come from its supervisor? Always, but on Windows (see supervisorSocket). */
38
+ export declare function answeredBySupervisor(data: string, headers: Record<string, string | string[] | undefined>, platform?: NodeJS.Platform | string): boolean;
39
+ /** What a client says when the pipe answered without this supervisor's secret (Windows). */
40
+ export declare class NotOurSupervisor extends Error {
41
+ constructor();
42
+ }
43
+ export interface StartingOptions {
44
+ timeoutMs?: number;
45
+ intervalMs?: number;
46
+ sleep?: (ms: number) => Promise<void>;
47
+ now?: () => number;
48
+ }
49
+ /**
50
+ * A supervisor that holds the lock but does not answer yet is starting: its
51
+ * database, its migrations, then its socket (or pipe). It is waited for, never
52
+ * started again over it (that is what a sign-in race did: the task's
53
+ * supervisor starting while the desktop app ran `buddi --no-open`, which then
54
+ * tried to restart the service and could not reach it). Undefined when no
55
+ * supervisor holds the lock (any more). Throws when it has not answered in
56
+ * time, or at once when something else answers in its place: either way the
57
+ * caller must not start or restart anything over a live holder.
58
+ */
59
+ export declare function awaitStartingSupervisor<T>(holder: () => number | undefined, ask: () => Promise<T>, options?: StartingOptions): Promise<T | undefined>;
60
+ /**
61
+ * `buddi` with no command: the running supervisor's status, a starting one's
62
+ * once it answers, or undefined when none holds the lock (start one). Errors
63
+ * about a live holder (it never answered, something else answered) are
64
+ * thrown, never turned into "start another".
65
+ */
66
+ export declare function runningOrStarting<T>(ask: () => Promise<T>, holder: () => number | undefined, options?: StartingOptions): Promise<T | undefined>;
67
+ /** A new pipe name and secret for this supervisor (Windows; elsewhere the socket's path is fixed). Called with the lock held; returns the secret. */
68
+ export declare function nameSupervisorPipe(data: string, platform?: NodeJS.Platform | string): Promise<string | undefined>;
18
69
  export declare function restartDelay(failures: number): number;
19
70
  /**
20
71
  * How long a handed-over supervisor waits to leave on its own before it is
@@ -104,6 +155,12 @@ export interface ControlSocketOptions {
104
155
  } | undefined;
105
156
  /** Cloudflare's connector (cloudflared.ts): its status, and the two verbs the gateway asks for. */
106
157
  connector?: Pick<Connector, 'status' | 'sync' | 'remove'> | undefined;
158
+ /**
159
+ * Shut the supervisor down as SIGTERM would. Windows has no signals (a kill
160
+ * there is TerminateProcess, which would leave the cluster running), so the
161
+ * uninstall asks here instead.
162
+ */
163
+ exit?: (() => void) | undefined;
107
164
  }
108
165
  /**
109
166
  * The maintenance API, served on a Unix domain socket in the data directory.
@@ -124,7 +181,7 @@ export interface ControlSocketOptions {
124
181
  * `<data>/incoming/`, and that is checked to be under that directory, resolved,
125
182
  * before it is passed on.
126
183
  */
127
- export declare function controlSocket({ status, action, backup, upgrade, data, uninstall, cli, connector }: ControlSocketOptions): Server;
184
+ export declare function controlSocket({ status, action, backup, upgrade, data, uninstall, cli, connector, exit }: ControlSocketOptions): Server;
128
185
  /**
129
186
  * Bind the control socket, replacing a stale file a killed supervisor left.
130
187
  *
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
@@ -11,16 +11,19 @@ import { createServer } from 'node:http';
11
11
  import { spawn, execFile } from 'node:child_process';
12
12
  import { createWriteStream, existsSync, openSync, closeSync, mkdirSync, readFileSync, realpathSync, rmSync } from 'node:fs';
13
13
  import { readFile, chmod, unlink, lstat, mkdir, rename, copyFile, rm, writeFile } from 'node:fs/promises';
14
+ import { randomBytes } from 'node:crypto';
14
15
  import os from 'node:os';
15
16
  import path from 'node:path';
16
17
  import { fileURLToPath } from 'node:url';
17
- import { GATEWAY_PID_FILE, acquireLock, initialize, atomicJson, stopChild, portMovedLines, launchAgentLabel, launchAgentPlist, systemdUnitPath, nativeEnvironment, SERVICE_UNIT_VAR } from './environment.js';
18
- import { APP_UNINSTALL_EXIT, UNINSTALL_REQUEST, createProductUninstall } from './product-uninstall.js';
18
+ import { GATEWAY_PID_FILE, KEPT_FOR_REINSTALL_FILE, acquireLock, lockHolder, initialize, atomicJson, stopChild, portMovedLines, launchAgentLabel, launchAgentPlist, systemdUnitPath, nativeEnvironment, SERVICE_UNIT_VAR } from './environment.js';
19
+ import { APP_UNINSTALL_EXIT, UNINSTALL_REQUEST, createProductUninstall, desktopAppOnThisComputer } from './product-uninstall.js';
19
20
  import { installShim, shimsFor } from './cli-shim.js';
21
+ import { windowsTaskName, windowsTaskScript } from './windows-task.js';
22
+ import { nodeOutsideData, readWindowsInstallerRecord } from './windows-install.js';
20
23
  import { createBackupService, isIncomingPath, isSafeArchiveName, parseSchedule, sweepIncoming } from './backup.js';
21
24
  import { startDatabase } from './postgres.js';
22
25
  import { createUpgradeService, finishUpgrade, handOver, installedVersion, isVersion, recoverySentence, statusOnSocket, TICK_INTERVAL_MS } from './upgrade.js';
23
- import { APP_RESTART_EXIT, appLayout } from './app-layout.js';
26
+ import { APP_RESTART_EXIT, appLayout, appRuns, currentLauncher, installerLayout, linuxInstall, windowsInstall } from './app-layout.js';
24
27
  import { createConnector } from './cloudflared.js';
25
28
  /** The launcher, as the supervisor spawns it for the gateway child. */
26
29
  const LAUNCHER = path.resolve(path.dirname(fileURLToPath(import.meta.url)), 'launcher.js');
@@ -38,10 +41,111 @@ export function pendingUpgrade(marker) {
38
41
  const named = [from, to, startedAt].every(value => typeof value === 'string' && value !== '');
39
42
  return named ? marker : undefined;
40
43
  }
41
- /** The control socket of the installation whose data directory this is. */
42
- export function supervisorSocket(data) {
44
+ /** Where a Windows supervisor records the name of its pipe, inside the private data directory. */
45
+ export const PIPE_NAME_FILE = 'supervisor.pipe';
46
+ /** The response header a Windows supervisor proves itself with: the secret beside its pipe's name. */
47
+ export const SUPERVISOR_SECRET_HEADER = 'x-buddi-supervisor';
48
+ /** The live supervisor's pipe name and secret (Windows), or nothing when `supervisor.lock` names no live process. */
49
+ export function supervisorPipe(data) {
50
+ if (lockHolder(data) === undefined)
51
+ return undefined;
52
+ const [name = '', secret = ''] = (() => { try {
53
+ return readFileSync(path.join(data, PIPE_NAME_FILE), 'utf8').split(/\r?\n/);
54
+ }
55
+ catch {
56
+ return [];
57
+ } })();
58
+ return /^buddi-supervisor-[0-9a-f]{32}$/.test(name) && /^[0-9a-f]{64}$/.test(secret) ? { name, secret } : undefined;
59
+ }
60
+ /**
61
+ * The control socket of the installation whose data directory this is. On
62
+ * Windows a named pipe instead (Node listens on no other kind of path there).
63
+ * A pipe's name is in a namespace every account shares and can list, and
64
+ * one created first by someone else would be answered by them; so the name
65
+ * is random, made afresh at each supervisor start, kept where only this
66
+ * account can read it (`supervisor.pipe` in the data directory, see
67
+ * protectDataDirectory) beside a secret every answer carries, and given out
68
+ * only while `supervisor.lock` names a live supervisor. Otherwise: a name
69
+ * nobody can have made, which no one answers.
70
+ */
71
+ export function supervisorSocket(data, platform = process.platform) {
72
+ if (platform === 'win32') {
73
+ const pipe = supervisorPipe(data);
74
+ return pipe !== undefined ? `\\\\.\\pipe\\${pipe.name}` : `\\\\.\\pipe\\buddi-supervisor-none-${randomBytes(16).toString('hex')}`;
75
+ }
43
76
  return path.join(data, 'supervisor.sock');
44
77
  }
78
+ /** Does an answer on this installation's socket come from its supervisor? Always, but on Windows (see supervisorSocket). */
79
+ export function answeredBySupervisor(data, headers, platform = process.platform) {
80
+ if (platform !== 'win32')
81
+ return true;
82
+ const secret = supervisorPipe(data)?.secret;
83
+ return secret !== undefined && headers[SUPERVISOR_SECRET_HEADER] === secret;
84
+ }
85
+ /** What a client says when the pipe answered without this supervisor's secret (Windows). */
86
+ export class NotOurSupervisor extends Error {
87
+ constructor() { super('Something other than this installation\'s supervisor answered on its pipe.'); }
88
+ }
89
+ /**
90
+ * A supervisor that holds the lock but does not answer yet is starting: its
91
+ * database, its migrations, then its socket (or pipe). It is waited for, never
92
+ * started again over it (that is what a sign-in race did: the task's
93
+ * supervisor starting while the desktop app ran `buddi --no-open`, which then
94
+ * tried to restart the service and could not reach it). Undefined when no
95
+ * supervisor holds the lock (any more). Throws when it has not answered in
96
+ * time, or at once when something else answers in its place: either way the
97
+ * caller must not start or restart anything over a live holder.
98
+ */
99
+ export async function awaitStartingSupervisor(holder, ask, options = {}) {
100
+ const { timeoutMs = 90_000, intervalMs = 500 } = options;
101
+ const sleep = options.sleep ?? ((ms) => new Promise(resolve => setTimeout(resolve, ms)));
102
+ const now = options.now ?? Date.now;
103
+ const since = now();
104
+ for (;;) {
105
+ const pid = holder();
106
+ if (pid === undefined)
107
+ return undefined;
108
+ try {
109
+ return await ask();
110
+ }
111
+ catch (error) {
112
+ if (error instanceof NotOurSupervisor)
113
+ throw error; /* not listening yet */
114
+ }
115
+ if (now() - since >= timeoutMs) {
116
+ throw new Error(`buddi is starting (supervisor pid ${pid}) and has not answered for ${Math.round(timeoutMs / 1000)} seconds. Its log is logs/supervisor.log in the data folder.`);
117
+ }
118
+ await sleep(intervalMs);
119
+ }
120
+ }
121
+ /**
122
+ * `buddi` with no command: the running supervisor's status, a starting one's
123
+ * once it answers, or undefined when none holds the lock (start one). Errors
124
+ * about a live holder (it never answered, something else answered) are
125
+ * thrown, never turned into "start another".
126
+ */
127
+ export async function runningOrStarting(ask, holder, options = {}) {
128
+ try {
129
+ return await ask();
130
+ }
131
+ catch (error) {
132
+ if (error instanceof NotOurSupervisor)
133
+ throw error;
134
+ if (holder() === undefined)
135
+ return undefined;
136
+ return await awaitStartingSupervisor(holder, ask, options);
137
+ }
138
+ }
139
+ /** A new pipe name and secret for this supervisor (Windows; elsewhere the socket's path is fixed). Called with the lock held; returns the secret. */
140
+ export async function nameSupervisorPipe(data, platform = process.platform) {
141
+ if (platform !== 'win32')
142
+ return undefined;
143
+ const file = path.join(data, PIPE_NAME_FILE);
144
+ const secret = randomBytes(32).toString('hex');
145
+ await writeFile(`${file}.tmp`, `buddi-supervisor-${randomBytes(16).toString('hex')}\n${secret}\n`, { mode: 0o600 });
146
+ await rename(`${file}.tmp`, file);
147
+ return secret;
148
+ }
45
149
  /** The moved-port line for `/status`, for a day after the move. */
46
150
  function portNotice(moved) {
47
151
  if (!moved || Date.now() - Date.parse(moved.at) > 24 * 60 * 60_000)
@@ -190,7 +294,7 @@ function optionalString(value) {
190
294
  * `<data>/incoming/`, and that is checked to be under that directory, resolved,
191
295
  * before it is passed on.
192
296
  */
193
- export function controlSocket({ status, action, backup, upgrade, data, uninstall, cli, connector }) {
297
+ export function controlSocket({ status, action, backup, upgrade, data, uninstall, cli, connector, exit }) {
194
298
  return createServer((req, res) => {
195
299
  void handle(req, res).catch(() => send(res, 500, { error: 'The supervisor could not complete that action.' }));
196
300
  });
@@ -208,6 +312,15 @@ export function controlSocket({ status, action, backup, upgrade, data, uninstall
208
312
  return send(res, 200, base);
209
313
  return send(res, 200, { ...base, recovery: await recovery(), lastBackupAt: await backup.lastBackupAt() });
210
314
  }
315
+ if (method === 'POST' && route === '/exit' && exit) {
316
+ if (backup?.busy())
317
+ return send(res, 409, { error: 'A restore is running.' });
318
+ if (upgrade?.busy())
319
+ return send(res, 409, { error: 'An upgrade is running.' });
320
+ send(res, 202, status());
321
+ exit();
322
+ return;
323
+ }
211
324
  if (method === 'POST' && ['/start', '/stop', '/restart'].includes(route)) {
212
325
  // One hand on the lever at a time: a restore is already stopping and
213
326
  // starting the gateway around a database it is replacing.
@@ -473,6 +586,20 @@ function normalizePassphraseText(input) {
473
586
  * can reach the path in that window either way.
474
587
  */
475
588
  export async function listenOnSocket(server, socket) {
589
+ // A Windows named pipe is no file: nothing to replace, and no mode to set.
590
+ // Node offers no access list for it, so it has the default one: full
591
+ // control for this account, administrators and SYSTEM, read-only for
592
+ // everyone else — not enough to write a request. Its random name, readable
593
+ // by this account alone, is what keeps others from finding or squatting it
594
+ // (supervisorSocket), and libuv creates it as the first instance, so a pipe
595
+ // of that name someone else made first fails the listen instead of sharing it.
596
+ if (socket.startsWith('\\\\.\\pipe\\')) {
597
+ await new Promise((resolve, reject) => {
598
+ server.once('error', reject);
599
+ server.listen(socket, () => resolve());
600
+ });
601
+ return;
602
+ }
476
603
  // Only a socket is replaced: a killed supervisor leaves exactly that. Any
477
604
  // other entry at the path is somebody else's, and refusing beats deleting it.
478
605
  try {
@@ -517,6 +644,7 @@ export async function supervise(ctx) {
517
644
  /** Has a pending upgrade been written into the history yet? */
518
645
  let resolved = false, pending;
519
646
  let desired = true, closing = false, chain = Promise.resolve();
647
+ let pipeSecret;
520
648
  let failures = 0;
521
649
  const stopGateway = async () => {
522
650
  desired = false;
@@ -533,11 +661,17 @@ export async function supervise(ctx) {
533
661
  const onSignal = () => { closing = true; desired = false; resolveShutdown(); };
534
662
  process.once('SIGINT', onSignal);
535
663
  process.once('SIGTERM', onSignal);
664
+ // Windows: its console closing (sign-out, shutdown) is the one signal node gets there.
665
+ if (process.platform === 'win32')
666
+ process.once('SIGHUP', onSignal);
536
667
  if (briefPid !== undefined) {
537
668
  unwatchBrief = watchBriefParent({ parent: briefPid, leave: why => { console.error(`supervisor: leaving the brief run: ${why}.`); onSignal(); } });
538
669
  }
539
670
  try {
540
671
  await initialize(ctx);
672
+ // Kept data that a buddi runs on again (buddi.app reinstalled on a Mac, where no setup clears it).
673
+ await rm(path.join(ctx.data, KEPT_FOR_REINSTALL_FILE), { force: true }).catch(() => { });
674
+ pipeSecret = await nameSupervisorPipe(ctx.data);
541
675
  const ready = ctx;
542
676
  /*
543
677
  * An upgrade that installed new code and handed over is finished here, by
@@ -602,7 +736,7 @@ export async function supervise(ctx) {
602
736
  // back and came up, so the upgrade is over without having arrived.
603
737
  console.error(entry.outcome === 'done'
604
738
  ? `upgrade: ${entry.from} to ${entry.to} finished.`
605
- : entry.step === 'finishing' ? `upgrade: ${entry.error}.` : recoverySentence(entry, { app: appLayout(process.env) !== undefined }));
739
+ : entry.step === 'finishing' ? `upgrade: ${entry.error}.` : recoverySentence(entry, { app: appRuns(process.env), linux: linuxInstall(process.env), windows: windowsInstall(process.env) }));
606
740
  }
607
741
  else {
608
742
  ready.state.phase = 'ready';
@@ -618,7 +752,7 @@ export async function supervise(ctx) {
618
752
  if (closing || !database.alive || (child && child.exitCode === null && child.signalCode === null))
619
753
  return;
620
754
  const started = Date.now();
621
- child = spawn(process.execPath, [LAUNCHER, '__gateway'], { env: ready.env, stdio: ['ignore', 'pipe', 'pipe', 'ipc'] });
755
+ child = spawn(process.execPath, [LAUNCHER, '__gateway'], { env: ready.env, stdio: ['ignore', 'pipe', 'pipe', 'ipc'], windowsHide: true });
622
756
  console.error(`supervisor: gateway started (pid ${child.pid}).`);
623
757
  // Recorded, so a supervisor that dies and leaves it running is not taken
624
758
  // for a stranger holding the web port at the next start (environment.ts).
@@ -678,19 +812,30 @@ export async function supervise(ctx) {
678
812
  });
679
813
  // Uninstall from the product: the last backup and its words first, then the removal (product-uninstall.ts).
680
814
  const home = os.homedir();
681
- const appFinishes = appLayout(process.env) !== undefined;
815
+ // buddi.app finishes its own removal; the Linux install shares its layout but not that.
816
+ const appFinishes = appRuns(process.env);
682
817
  uninstall = createProductUninstall({
683
818
  data: ready.data, home, backup, appFinishes,
684
819
  plan: () => {
685
- const unit = process.platform === 'darwin' ? launchAgentPlist(ready.data, home) : process.platform === 'linux' ? systemdUnitPath(ready.data, ready.env, home) : undefined;
820
+ const unit = process.platform === 'darwin' ? launchAgentPlist(ready.data, home) : process.platform === 'linux' ? systemdUnitPath(ready.data, ready.env, home) : process.platform === 'win32' ? windowsTaskScript(ready.data) : undefined;
686
821
  const bundle = process.env.BUDDI_APP_BUNDLE?.trim();
822
+ const setupUninstaller = process.platform === 'win32'
823
+ ? readWindowsInstallerRecord((() => { try {
824
+ return readFileSync(path.join(ready.data, 'installer.json'), 'utf8');
825
+ }
826
+ catch {
827
+ return undefined;
828
+ } })()).uninstaller
829
+ : undefined;
830
+ const desktopApp = desktopAppOnThisComputer(process.platform, { exists: existsSync, ...(setupUninstaller === undefined ? {} : { setupUninstaller }) });
687
831
  return {
688
832
  data: ready.data,
689
833
  ...(core.vaultSelection({ env: ready.env }) === 'keychain' && ready.env.BUDDI_VAULT_SERVICE ? { keychain: ready.env.BUDDI_VAULT_SERVICE } : {}),
690
- ...(unit !== undefined && existsSync(unit) ? { service: process.platform === 'darwin' ? `launchd agent ${launchAgentLabel(ready.data)}` : `systemd user unit ${launchAgentLabel(ready.data)}.service` } : {}),
834
+ ...(unit !== undefined && existsSync(unit) ? { service: process.platform === 'darwin' ? `launchd agent ${launchAgentLabel(ready.data)}` : process.platform === 'win32' ? `Task Scheduler task ${windowsTaskName(launchAgentLabel(ready.data))}` : `systemd user unit ${launchAgentLabel(ready.data)}.service` } : {}),
691
835
  ...(appFinishes && bundle ? { app: bundle } : {}),
692
836
  backups: path.join(home, 'buddi-backups'),
693
837
  appFinishes,
838
+ ...(desktopApp === undefined ? {} : { desktopApp }),
694
839
  };
695
840
  },
696
841
  exists: existsSync,
@@ -717,11 +862,13 @@ export async function supervise(ctx) {
717
862
  const env = { ...nativeEnvironment(startEnv), BUDDI_DATA_DIR: ready.data,
718
863
  ...Object.fromEntries(['XDG_RUNTIME_DIR', 'DBUS_SESSION_BUS_ADDRESS'].filter(key => typeof startEnv[key] === 'string').map(key => [key, startEnv[key]])) };
719
864
  // systemd stops every process in the unit's cgroup with it: the uninstall runs in a transient scope of its own.
865
+ // Windows: a node from inside the data folder (the Windows install's) would keep it from being removed.
866
+ const node = nodeOutsideData(ready.data);
720
867
  const [command, args] = startEnv[SERVICE_UNIT_VAR]
721
868
  ? ['systemd-run', ['--user', '--collect', '--quiet', '--scope', process.execPath, LAUNCHER, ...argv]]
722
- : [process.execPath, [LAUNCHER, ...argv]];
869
+ : [node, [LAUNCHER, ...argv]];
723
870
  console.error(`supervisor: removing buddi; the account is in ${logFile}.`);
724
- const child = spawn(command, args, { detached: true, stdio: ['ignore', fd, fd], env, cwd: home });
871
+ const child = spawn(command, args, { detached: true, stdio: ['ignore', fd, fd], env, cwd: home, windowsHide: true });
725
872
  child.unref();
726
873
  closeSync(fd);
727
874
  },
@@ -789,7 +936,13 @@ export async function supervise(ctx) {
789
936
  await stopGateway(); if (name !== 'stop')
790
937
  start(); }); return chain; },
791
938
  backup, upgrade, data: ready.data, uninstall, cli, connector,
939
+ exit: () => { console.error('supervisor: asked to exit on the control socket.'); onSignal(); },
792
940
  });
941
+ if (pipeSecret !== undefined) {
942
+ const secret = pipeSecret;
943
+ // Before the routes answer: every reply says it is this supervisor's.
944
+ server.prependListener('request', (_req, res) => { res.setHeader(SUPERVISOR_SECRET_HEADER, secret); });
945
+ }
793
946
  await listenOnSocket(server, supervisorSocket(ready.data));
794
947
  if (briefly)
795
948
  console.error('supervisor: started briefly, for an uninstall\'s last backup; the gateway stays stopped.');
@@ -833,7 +986,7 @@ export async function supervise(ctx) {
833
986
  const entry = await finishUpgrade(ctx, pending, { ok: false, error: error instanceof Error ? error.message : String(error) }, 'starting')
834
987
  .catch(() => undefined);
835
988
  if (entry)
836
- console.error(recoverySentence(entry, { app: appLayout(process.env) !== undefined }));
989
+ console.error(recoverySentence(entry, { app: appRuns(process.env), linux: linuxInstall(process.env), windows: windowsInstall(process.env) }));
837
990
  }
838
991
  throw error;
839
992
  }
@@ -864,9 +1017,13 @@ export async function supervise(ctx) {
864
1017
  }
865
1018
  finally {
866
1019
  log?.end();
1020
+ // Its pipe's name and secret go before the lock does (Windows).
1021
+ if (pipeSecret !== undefined)
1022
+ await rm(path.join(ctx.data, PIPE_NAME_FILE), { force: true });
867
1023
  await release();
868
1024
  process.removeListener('SIGINT', onSignal);
869
1025
  process.removeListener('SIGTERM', onSignal);
1026
+ process.removeListener('SIGHUP', onSignal);
870
1027
  }
871
1028
  }
872
1029
  // buddi.app finishes an uninstall the owner started in Settings → System (product-uninstall.ts).
@@ -885,7 +1042,8 @@ export async function supervise(ctx) {
885
1042
  if (handingOver) {
886
1043
  const marker = ctx.state?.upgrade;
887
1044
  const result = await handOver({
888
- ctx, launcher: LAUNCHER, env: startEnv,
1045
+ // An installer's successor (Linux, Windows) is `current`'s launcher, which the upgrade just switched.
1046
+ ctx, launcher: installerLayout(process.env) ? currentLauncher(appLayout(process.env)) : LAUNCHER, env: startEnv,
889
1047
  /*
890
1048
  * The successor is ready when it serves, not when it holds the lock: it
891
1049
  * takes the lock first and then starts a cluster and runs migrations,
@@ -893,7 +1051,7 @@ export async function supervise(ctx) {
893
1051
  * installed is the whole hand-over, observed rather than assumed.
894
1052
  */
895
1053
  ready: async () => {
896
- const status = await statusOnSocket(supervisorSocket(ctx.data));
1054
+ const status = await statusOnSocket(supervisorSocket(ctx.data), undefined, headers => answeredBySupervisor(ctx.data, headers));
897
1055
  if (status !== undefined && status.current === marker?.to)
898
1056
  return true;
899
1057
  /*
@@ -924,7 +1082,7 @@ export async function supervise(ctx) {
924
1082
  const entry = await finishUpgrade(ctx, marker, { ok: false, error: `the upgraded supervisor did not answer on ${supervisorSocket(ctx.data)}` }, 'starting')
925
1083
  .catch(() => undefined);
926
1084
  if (entry)
927
- console.error(recoverySentence(entry, { app: appLayout(process.env) !== undefined }));
1085
+ console.error(recoverySentence(entry, { app: appRuns(process.env), linux: linuxInstall(process.env), windows: windowsInstall(process.env) }));
928
1086
  }
929
1087
  /*
930
1088
  * And then go, whatever is still holding the loop.