@withbuddi/buddi 0.1.0-pre.39 → 0.1.0-pre.41

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 (241) hide show
  1. package/extension/manifest.json +2 -2
  2. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/cli/dist/args.d.ts +2 -0
  4. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  5. package/node_modules/@buddi/cli/dist/args.js +11 -2
  6. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  7. package/node_modules/@buddi/cli/dist/backup/index.d.ts +3 -1
  8. package/node_modules/@buddi/cli/dist/backup/index.d.ts.map +1 -1
  9. package/node_modules/@buddi/cli/dist/backup/index.js +16 -1
  10. package/node_modules/@buddi/cli/dist/backup/index.js.map +1 -1
  11. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  12. package/node_modules/@buddi/cli/dist/commands.js +5 -3
  13. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  14. package/node_modules/@buddi/cli/dist/main.d.ts +4 -1
  15. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  16. package/node_modules/@buddi/cli/dist/main.js +41 -3
  17. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  18. package/node_modules/@buddi/cli/dist/mode.d.ts +41 -0
  19. package/node_modules/@buddi/cli/dist/mode.d.ts.map +1 -0
  20. package/node_modules/@buddi/cli/dist/mode.js +103 -0
  21. package/node_modules/@buddi/cli/dist/mode.js.map +1 -0
  22. package/node_modules/@buddi/cli/dist/paths.d.ts +13 -1
  23. package/node_modules/@buddi/cli/dist/paths.d.ts.map +1 -1
  24. package/node_modules/@buddi/cli/dist/paths.js +23 -2
  25. package/node_modules/@buddi/cli/dist/paths.js.map +1 -1
  26. package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts +12 -2
  27. package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts.map +1 -1
  28. package/node_modules/@buddi/cli/dist/uninstall-cmd.js +63 -12
  29. package/node_modules/@buddi/cli/dist/uninstall-cmd.js.map +1 -1
  30. package/node_modules/@buddi/cli/dist/vault-cmd.d.ts +3 -0
  31. package/node_modules/@buddi/cli/dist/vault-cmd.d.ts.map +1 -1
  32. package/node_modules/@buddi/cli/dist/vault-cmd.js +26 -5
  33. package/node_modules/@buddi/cli/dist/vault-cmd.js.map +1 -1
  34. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  35. package/node_modules/@buddi/core/dist/uninstall.d.ts +18 -0
  36. package/node_modules/@buddi/core/dist/uninstall.d.ts.map +1 -1
  37. package/node_modules/@buddi/core/dist/uninstall.js +47 -0
  38. package/node_modules/@buddi/core/dist/uninstall.js.map +1 -1
  39. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  40. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts +2 -0
  41. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts.map +1 -1
  42. package/node_modules/@buddi/gateway/dist/codex-accounts.js +4 -4
  43. package/node_modules/@buddi/gateway/dist/codex-accounts.js.map +1 -1
  44. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  45. package/node_modules/@buddi/gateway/dist/serve.js +31 -0
  46. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  47. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  48. package/node_modules/@buddi/gateway/dist/web/api-routes.js +20 -2
  49. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  50. package/node_modules/@buddi/gateway/dist/web/cli-tool.d.ts +11 -0
  51. package/node_modules/@buddi/gateway/dist/web/cli-tool.d.ts.map +1 -0
  52. package/node_modules/@buddi/gateway/dist/web/cli-tool.js +27 -0
  53. package/node_modules/@buddi/gateway/dist/web/cli-tool.js.map +1 -0
  54. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +14 -0
  55. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  56. package/node_modules/@buddi/gateway/dist/web/extension.js +22 -1
  57. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  58. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +12 -0
  59. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/web/lock.js +13 -0
  61. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts +41 -6
  63. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts.map +1 -1
  64. package/node_modules/@buddi/gateway/dist/web/onboarding.js +91 -15
  65. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  66. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.d.ts +64 -0
  67. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.d.ts.map +1 -0
  68. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.js +112 -0
  69. package/node_modules/@buddi/gateway/dist/web/passphrase-notice.js.map +1 -0
  70. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  71. package/node_modules/@buddi/gateway/dist/web/server.js +78 -9
  72. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  73. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts +28 -3
  74. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts.map +1 -1
  75. package/node_modules/@buddi/gateway/dist/web/take-on.js +48 -3
  76. package/node_modules/@buddi/gateway/dist/web/take-on.js.map +1 -1
  77. package/node_modules/@buddi/gateway/dist/web/uninstall.d.ts +36 -0
  78. package/node_modules/@buddi/gateway/dist/web/uninstall.d.ts.map +1 -0
  79. package/node_modules/@buddi/gateway/dist/web/uninstall.js +116 -0
  80. package/node_modules/@buddi/gateway/dist/web/uninstall.js.map +1 -0
  81. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  82. package/node_modules/@buddi/install/dist/app-layout.d.ts +4 -0
  83. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
  84. package/node_modules/@buddi/install/dist/app-layout.js +6 -0
  85. package/node_modules/@buddi/install/dist/app-layout.js.map +1 -1
  86. package/node_modules/@buddi/install/dist/cli-shim.d.ts +76 -0
  87. package/node_modules/@buddi/install/dist/cli-shim.d.ts.map +1 -0
  88. package/node_modules/@buddi/install/dist/cli-shim.js +215 -0
  89. package/node_modules/@buddi/install/dist/cli-shim.js.map +1 -0
  90. package/node_modules/@buddi/install/dist/environment.d.ts +90 -1
  91. package/node_modules/@buddi/install/dist/environment.d.ts.map +1 -1
  92. package/node_modules/@buddi/install/dist/environment.js +216 -3
  93. package/node_modules/@buddi/install/dist/environment.js.map +1 -1
  94. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  95. package/node_modules/@buddi/install/dist/launcher.js +140 -5
  96. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  97. package/node_modules/@buddi/install/dist/product-uninstall.d.ts +86 -0
  98. package/node_modules/@buddi/install/dist/product-uninstall.d.ts.map +1 -0
  99. package/node_modules/@buddi/install/dist/product-uninstall.js +150 -0
  100. package/node_modules/@buddi/install/dist/product-uninstall.js.map +1 -0
  101. package/node_modules/@buddi/install/dist/supervisor.d.ts +16 -1
  102. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  103. package/node_modules/@buddi/install/dist/supervisor.js +191 -10
  104. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  105. package/node_modules/@buddi/install/dist/uninstall.d.ts +20 -1
  106. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  107. package/node_modules/@buddi/install/dist/uninstall.js +84 -13
  108. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  109. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  110. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts +6 -0
  111. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts.map +1 -1
  112. package/node_modules/@buddi/runtime/dist/codex-oauth.js +15 -0
  113. package/node_modules/@buddi/runtime/dist/codex-oauth.js.map +1 -1
  114. package/node_modules/@buddi/runtime/dist/openai.d.ts +9 -2
  115. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  116. package/node_modules/@buddi/runtime/dist/openai.js +117 -16
  117. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  118. package/package.json +2 -2
  119. package/packages/cli/dist/.tsbuildinfo +1 -1
  120. package/packages/cli/dist/args.d.ts +2 -0
  121. package/packages/cli/dist/args.d.ts.map +1 -1
  122. package/packages/cli/dist/args.js +11 -2
  123. package/packages/cli/dist/args.js.map +1 -1
  124. package/packages/cli/dist/backup/index.d.ts +3 -1
  125. package/packages/cli/dist/backup/index.d.ts.map +1 -1
  126. package/packages/cli/dist/backup/index.js +16 -1
  127. package/packages/cli/dist/backup/index.js.map +1 -1
  128. package/packages/cli/dist/commands.d.ts.map +1 -1
  129. package/packages/cli/dist/commands.js +5 -3
  130. package/packages/cli/dist/commands.js.map +1 -1
  131. package/packages/cli/dist/main.d.ts +4 -1
  132. package/packages/cli/dist/main.d.ts.map +1 -1
  133. package/packages/cli/dist/main.js +41 -3
  134. package/packages/cli/dist/main.js.map +1 -1
  135. package/packages/cli/dist/mode.d.ts +41 -0
  136. package/packages/cli/dist/mode.d.ts.map +1 -0
  137. package/packages/cli/dist/mode.js +103 -0
  138. package/packages/cli/dist/mode.js.map +1 -0
  139. package/packages/cli/dist/paths.d.ts +13 -1
  140. package/packages/cli/dist/paths.d.ts.map +1 -1
  141. package/packages/cli/dist/paths.js +23 -2
  142. package/packages/cli/dist/paths.js.map +1 -1
  143. package/packages/cli/dist/uninstall-cmd.d.ts +12 -2
  144. package/packages/cli/dist/uninstall-cmd.d.ts.map +1 -1
  145. package/packages/cli/dist/uninstall-cmd.js +63 -12
  146. package/packages/cli/dist/uninstall-cmd.js.map +1 -1
  147. package/packages/cli/dist/vault-cmd.d.ts +3 -0
  148. package/packages/cli/dist/vault-cmd.d.ts.map +1 -1
  149. package/packages/cli/dist/vault-cmd.js +26 -5
  150. package/packages/cli/dist/vault-cmd.js.map +1 -1
  151. package/packages/core/dist/.tsbuildinfo +1 -1
  152. package/packages/core/dist/uninstall.d.ts +18 -0
  153. package/packages/core/dist/uninstall.d.ts.map +1 -1
  154. package/packages/core/dist/uninstall.js +47 -0
  155. package/packages/core/dist/uninstall.js.map +1 -1
  156. package/packages/gateway/dist/.tsbuildinfo +1 -1
  157. package/packages/gateway/dist/codex-accounts.d.ts +2 -0
  158. package/packages/gateway/dist/codex-accounts.d.ts.map +1 -1
  159. package/packages/gateway/dist/codex-accounts.js +4 -4
  160. package/packages/gateway/dist/codex-accounts.js.map +1 -1
  161. package/packages/gateway/dist/serve.d.ts.map +1 -1
  162. package/packages/gateway/dist/serve.js +31 -0
  163. package/packages/gateway/dist/serve.js.map +1 -1
  164. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  165. package/packages/gateway/dist/web/api-routes.js +20 -2
  166. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  167. package/packages/gateway/dist/web/cli-tool.d.ts +11 -0
  168. package/packages/gateway/dist/web/cli-tool.d.ts.map +1 -0
  169. package/packages/gateway/dist/web/cli-tool.js +27 -0
  170. package/packages/gateway/dist/web/cli-tool.js.map +1 -0
  171. package/packages/gateway/dist/web/extension.d.ts +14 -0
  172. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  173. package/packages/gateway/dist/web/extension.js +22 -1
  174. package/packages/gateway/dist/web/extension.js.map +1 -1
  175. package/packages/gateway/dist/web/lock.d.ts +12 -0
  176. package/packages/gateway/dist/web/lock.d.ts.map +1 -1
  177. package/packages/gateway/dist/web/lock.js +13 -0
  178. package/packages/gateway/dist/web/lock.js.map +1 -1
  179. package/packages/gateway/dist/web/onboarding.d.ts +41 -6
  180. package/packages/gateway/dist/web/onboarding.d.ts.map +1 -1
  181. package/packages/gateway/dist/web/onboarding.js +91 -15
  182. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  183. package/packages/gateway/dist/web/passphrase-notice.d.ts +64 -0
  184. package/packages/gateway/dist/web/passphrase-notice.d.ts.map +1 -0
  185. package/packages/gateway/dist/web/passphrase-notice.js +112 -0
  186. package/packages/gateway/dist/web/passphrase-notice.js.map +1 -0
  187. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  188. package/packages/gateway/dist/web/server.js +78 -9
  189. package/packages/gateway/dist/web/server.js.map +1 -1
  190. package/packages/gateway/dist/web/take-on.d.ts +28 -3
  191. package/packages/gateway/dist/web/take-on.d.ts.map +1 -1
  192. package/packages/gateway/dist/web/take-on.js +48 -3
  193. package/packages/gateway/dist/web/take-on.js.map +1 -1
  194. package/packages/gateway/dist/web/uninstall.d.ts +36 -0
  195. package/packages/gateway/dist/web/uninstall.d.ts.map +1 -0
  196. package/packages/gateway/dist/web/uninstall.js +116 -0
  197. package/packages/gateway/dist/web/uninstall.js.map +1 -0
  198. package/packages/install/dist/.tsbuildinfo +1 -1
  199. package/packages/install/dist/app-layout.d.ts +4 -0
  200. package/packages/install/dist/app-layout.d.ts.map +1 -1
  201. package/packages/install/dist/app-layout.js +6 -0
  202. package/packages/install/dist/app-layout.js.map +1 -1
  203. package/packages/install/dist/cli-shim.d.ts +76 -0
  204. package/packages/install/dist/cli-shim.d.ts.map +1 -0
  205. package/packages/install/dist/cli-shim.js +215 -0
  206. package/packages/install/dist/cli-shim.js.map +1 -0
  207. package/packages/install/dist/environment.d.ts +90 -1
  208. package/packages/install/dist/environment.d.ts.map +1 -1
  209. package/packages/install/dist/environment.js +216 -3
  210. package/packages/install/dist/environment.js.map +1 -1
  211. package/packages/install/dist/launcher.d.ts.map +1 -1
  212. package/packages/install/dist/launcher.js +140 -5
  213. package/packages/install/dist/launcher.js.map +1 -1
  214. package/packages/install/dist/product-uninstall.d.ts +86 -0
  215. package/packages/install/dist/product-uninstall.d.ts.map +1 -0
  216. package/packages/install/dist/product-uninstall.js +150 -0
  217. package/packages/install/dist/product-uninstall.js.map +1 -0
  218. package/packages/install/dist/supervisor.d.ts +16 -1
  219. package/packages/install/dist/supervisor.d.ts.map +1 -1
  220. package/packages/install/dist/supervisor.js +191 -10
  221. package/packages/install/dist/supervisor.js.map +1 -1
  222. package/packages/install/dist/uninstall.d.ts +20 -1
  223. package/packages/install/dist/uninstall.d.ts.map +1 -1
  224. package/packages/install/dist/uninstall.js +84 -13
  225. package/packages/install/dist/uninstall.js.map +1 -1
  226. package/packages/runtime/dist/.tsbuildinfo +1 -1
  227. package/packages/runtime/dist/codex-oauth.d.ts +6 -0
  228. package/packages/runtime/dist/codex-oauth.d.ts.map +1 -1
  229. package/packages/runtime/dist/codex-oauth.js +15 -0
  230. package/packages/runtime/dist/codex-oauth.js.map +1 -1
  231. package/packages/runtime/dist/openai.d.ts +9 -2
  232. package/packages/runtime/dist/openai.d.ts.map +1 -1
  233. package/packages/runtime/dist/openai.js +117 -16
  234. package/packages/runtime/dist/openai.js.map +1 -1
  235. package/packages/web/dist/assets/index-BkxHX_8g.js +146 -0
  236. package/packages/web/dist/assets/{index-DYfeUW-0.css → index-D2rOodlH.css} +1 -1
  237. package/packages/web/dist/assets/{lottie_light-BFAMYgLA.js → lottie_light-D-P1tn3V.js} +1 -1
  238. package/packages/web/dist/build.json +1 -1
  239. package/packages/web/dist/index.html +2 -2
  240. package/packages/web/dist/precache.json +4 -4
  241. package/packages/web/dist/assets/index-vpc904_b.js +0 -146
@@ -9,11 +9,155 @@
9
9
  * Node's own standard library plus `dotenv`.
10
10
  */
11
11
  import { mkdir, readFile, writeFile, rename, open, stat, unlink } from 'node:fs/promises';
12
- import { existsSync, readdirSync, constants } from 'node:fs';
12
+ import { existsSync, readdirSync, readFileSync, rmSync, constants } from 'node:fs';
13
13
  import { randomBytes, createHash, createHmac } from 'node:crypto';
14
14
  import os from 'node:os';
15
15
  import path from 'node:path';
16
16
  import net from 'node:net';
17
+ import { execFileSync } from 'node:child_process';
18
+ /** The one line the app and the CLI say about a moved port. */
19
+ export function portMovedLines(moved) {
20
+ if (!moved)
21
+ return [];
22
+ const lines = [];
23
+ if (moved.web)
24
+ lines.push(`Port ${moved.web.from} was taken by another program; buddi now listens on ${moved.web.to}.`);
25
+ if (moved.db)
26
+ lines.push(`Port ${moved.db.from} was taken by another program; buddi's database now uses ${moved.db.to}.`);
27
+ return lines;
28
+ }
29
+ /** Is this port free to listen on at 127.0.0.1 right now? */
30
+ export async function portFree(port) {
31
+ const server = net.createServer();
32
+ try {
33
+ await new Promise((resolve, reject) => { server.once('error', reject); server.listen(port, '127.0.0.1', () => resolve()); });
34
+ return true;
35
+ }
36
+ catch (error) {
37
+ if (errorCode(error) === 'EADDRINUSE' || errorCode(error) === 'EACCES')
38
+ return false;
39
+ throw error;
40
+ }
41
+ finally {
42
+ if (server.listening)
43
+ await new Promise(resolve => server.close(resolve));
44
+ }
45
+ }
46
+ /**
47
+ * The recorded ports, checked at a start: one another program has taken is
48
+ * replaced with a free one, and the state says so. Returns the state to
49
+ * write, or undefined when nothing moved.
50
+ */
51
+ export async function movePortsIfTaken(state, deps) {
52
+ const tries = deps.tries ?? 5;
53
+ const taken = async (port) => {
54
+ for (let i = 0; i < tries; i++) {
55
+ if (await deps.free(port))
56
+ return false;
57
+ if (i < tries - 1)
58
+ await deps.sleep(1000);
59
+ }
60
+ return true;
61
+ };
62
+ const moved = { at: deps.now().toISOString() };
63
+ let webPort = state.webPort, dbPort = state.dbPort;
64
+ if (await taken(webPort) && !(deps.stopOwnGateway && await deps.stopOwnGateway() && !(await taken(webPort)))) {
65
+ let to = await deps.pick();
66
+ while (to === dbPort)
67
+ to = await deps.pick();
68
+ moved.web = { from: webPort, to };
69
+ webPort = to;
70
+ }
71
+ if (state.database === 'managed' && deps.ownClusterPort() !== dbPort && await taken(dbPort)) {
72
+ let to = await deps.pick();
73
+ while (to === webPort)
74
+ to = await deps.pick();
75
+ moved.db = { from: dbPort, to };
76
+ dbPort = to;
77
+ }
78
+ if (!moved.web && !moved.db)
79
+ return undefined;
80
+ return { ...state, webPort, dbPort, portMoved: moved };
81
+ }
82
+ /** Where the supervisor records its gateway's pid while it runs, beside `supervisor.lock`. */
83
+ export const GATEWAY_PID_FILE = 'gateway.pid';
84
+ function defaultOrphanDeps(data) {
85
+ const file = path.join(data, GATEWAY_PID_FILE);
86
+ return {
87
+ read: () => { try {
88
+ return readFileSync(file, 'utf8');
89
+ }
90
+ catch {
91
+ return undefined;
92
+ } },
93
+ alive: pid => { try {
94
+ process.kill(pid, 0);
95
+ return true;
96
+ }
97
+ catch (e) {
98
+ return errorCode(e) === 'EPERM';
99
+ } },
100
+ command: pid => {
101
+ if (process.platform === 'win32')
102
+ return undefined;
103
+ try {
104
+ return execFileSync('ps', ['-o', 'command=', '-p', String(pid)], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ },
110
+ signal: (pid, signal) => { try {
111
+ process.kill(pid, signal);
112
+ }
113
+ catch { /* gone already */ } },
114
+ remove: () => { rmSync(file, { force: true }); },
115
+ sleep: ms => new Promise(resolve => setTimeout(resolve, ms)),
116
+ };
117
+ }
118
+ /**
119
+ * This installation's gateway, still running after its supervisor died: the
120
+ * pid `gateway.pid` records, if it is alive and still a buddi gateway (the
121
+ * pid was not reused). Stopped (SIGTERM, then SIGKILL) so the next start can
122
+ * have its port back. True when one was stopped.
123
+ */
124
+ export async function stopOrphanGateway(data, deps = defaultOrphanDeps(data)) {
125
+ const pid = Number((deps.read() ?? '').trim());
126
+ if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid)
127
+ return false;
128
+ if (!deps.alive(pid) || !(deps.command(pid) ?? '').includes('__gateway')) {
129
+ deps.remove();
130
+ return false;
131
+ }
132
+ deps.signal(pid, 'SIGTERM');
133
+ const grace = deps.graceMs ?? 10_000;
134
+ for (let waited = 0; waited < grace && deps.alive(pid); waited += 250)
135
+ await deps.sleep(250);
136
+ if (deps.alive(pid))
137
+ deps.signal(pid, 'SIGKILL');
138
+ deps.remove();
139
+ return true;
140
+ }
141
+ /** The keychain namespace of the installation in `data`: `buddi.install.<sha256(data)[:20]>`. */
142
+ export function vaultServiceFor(data) {
143
+ return `buddi.install.${createHash('sha256').update(data).digest('hex').slice(0, 20)}`;
144
+ }
145
+ /**
146
+ * Does `installation.json` name a different installation than the one at
147
+ * hand? The sentence that says so, or undefined when it matches (or is too
148
+ * old to say).
149
+ */
150
+ export function identityMismatch(state, data, vaultService) {
151
+ if (!state)
152
+ return undefined;
153
+ if (state.dataDir !== undefined && path.resolve(state.dataDir) !== path.resolve(data)) {
154
+ return `${path.join(data, 'installation.json')} was written for the installation in ${state.dataDir}, not ${data}.`;
155
+ }
156
+ if (state.vaultService !== undefined && vaultService !== undefined && state.vaultService !== vaultService) {
157
+ return `${path.join(data, 'installation.json')} names the keychain namespace ${state.vaultService}, but this run would use ${vaultService}.`;
158
+ }
159
+ return undefined;
160
+ }
17
161
  function failure(error) {
18
162
  return (error ?? {});
19
163
  }
@@ -226,7 +370,7 @@ export async function environment(root, env = process.env) {
226
370
  if (settings !== undefined)
227
371
  populate(env, parse(settings));
228
372
  // A separate keychain namespace prevents a test or second install sharing credentials.
229
- env.BUDDI_VAULT_SERVICE = `buddi.install.${createHash('sha256').update(data).digest('hex').slice(0, 20)}`;
373
+ env.BUDDI_VAULT_SERVICE = vaultServiceFor(data);
230
374
  env.BUDDI_VAULT_FILE = path.join(data, 'vault.json');
231
375
  if ((env.BUDDI_VAULT || (process.platform === 'darwin' ? 'keychain' : 'file')) === 'file') {
232
376
  const keyFile = path.join(data, 'vault-key');
@@ -307,6 +451,29 @@ export async function acquireLock(data) {
307
451
  }
308
452
  throw new Error('Could not acquire the installation lock.');
309
453
  }
454
+ /** `uninstall.json` (product-uninstall.ts's UNINSTALL_REQUEST), named here so this module imports nothing of buddi's. */
455
+ export const UNINSTALL_REQUEST_FILE = 'uninstall.json';
456
+ /**
457
+ * Has the installation in `data` been moved here from the folder its
458
+ * `installation.json` names? Only when the folder holds a managed cluster
459
+ * (`postgres/PG_VERSION`) and this process holds its `supervisor.lock`: a
460
+ * stray file in some other folder never takes the identity.
461
+ */
462
+ export function movedHere(state, data, pid = process.pid) {
463
+ if (state.dataDir === undefined || path.resolve(state.dataDir) === path.resolve(data))
464
+ return false;
465
+ if (!existsSync(path.join(data, 'postgres', 'PG_VERSION')))
466
+ return false;
467
+ try {
468
+ return readFileSync(path.join(data, 'supervisor.lock'), 'utf8').trim() === String(pid);
469
+ }
470
+ catch {
471
+ return false;
472
+ }
473
+ }
474
+ function identity(data) {
475
+ return { kind: 'packaged', dataDir: path.resolve(data), vaultService: vaultServiceFor(path.resolve(data)) };
476
+ }
310
477
  export async function initialize(ctx) {
311
478
  // `incoming` is where the dashboard writes an uploaded archive, and the one
312
479
  // directory the control socket accepts a path inside.
@@ -326,7 +493,53 @@ export async function initialize(ctx) {
326
493
  let dbPort = await freePort();
327
494
  while (dbPort === webPort)
328
495
  dbPort = await freePort();
329
- ctx.state = { version: 1, database: ctx.env.DATABASE_URL ? 'external' : 'managed', webPort, dbPort, phase: 'provisioning' };
496
+ ctx.state = { version: 1, database: ctx.env.DATABASE_URL ? 'external' : 'managed', webPort, dbPort, phase: 'provisioning', ...identity(ctx.data) };
497
+ await atomicJson(path.join(ctx.data, 'installation.json'), ctx.state);
498
+ }
499
+ else {
500
+ // A recorded port another program took since: moved, and said (portMovedLines).
501
+ const movedState = await movePortsIfTaken(ctx.state, {
502
+ free: portFree,
503
+ pick: () => freePort(),
504
+ ownClusterPort: () => {
505
+ const pid = (() => { try {
506
+ return readFileSync(path.join(ctx.data, 'postgres', 'postmaster.pid'), 'utf8');
507
+ }
508
+ catch {
509
+ return '';
510
+ } })();
511
+ const port = Number(pid.split('\n')[3]);
512
+ return Number.isInteger(port) && port > 0 ? port : undefined;
513
+ },
514
+ stopOwnGateway: async () => {
515
+ const stopped = await stopOrphanGateway(ctx.data);
516
+ if (stopped)
517
+ console.error('supervisor: stopped a gateway of this installation left running by a supervisor that did not exit cleanly.');
518
+ return stopped;
519
+ },
520
+ sleep: ms => new Promise(resolve => setTimeout(resolve, ms)),
521
+ now: () => new Date(),
522
+ });
523
+ if (movedState) {
524
+ ctx.state = movedState;
525
+ await atomicJson(path.join(ctx.data, 'installation.json'), ctx.state);
526
+ for (const line of portMovedLines(movedState.portMoved))
527
+ console.error(`supervisor: ${line}`);
528
+ }
529
+ }
530
+ if (movedHere(ctx.state, ctx.data)) {
531
+ // The folder was moved or restored to a new path: it has this installation's
532
+ // cluster and this supervisor holds its lock, so it is this installation.
533
+ // The identity follows it (or uninstall would refuse it for ever).
534
+ console.error(`supervisor: ${path.join(ctx.data, 'installation.json')} was written for ${ctx.state.dataDir}; this folder is now at ${path.resolve(ctx.data)}, so it says so from now on (keychain namespace ${vaultServiceFor(path.resolve(ctx.data))}).`);
535
+ ctx.state = { ...ctx.state, ...identity(ctx.data) };
536
+ await atomicJson(path.join(ctx.data, 'installation.json'), ctx.state);
537
+ }
538
+ // A Remove buddi request the app did not read (it deletes it when it does) is never acted on later.
539
+ rmSync(path.join(ctx.data, UNINSTALL_REQUEST_FILE), { force: true });
540
+ if (ctx.state.kind === undefined || ctx.state.dataDir === undefined || ctx.state.vaultService === undefined) {
541
+ // An installation provisioned before the file said who it is: said now, once.
542
+ ctx.state = { ...ctx.state, ...identity(ctx.data) };
330
543
  await atomicJson(path.join(ctx.data, 'installation.json'), ctx.state);
331
544
  }
332
545
  ctx.env.BUDDI_WEB_PORT = String(ctx.state.webPort);
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAkCrE,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,KAAqC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,uDAAuD,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACxH,IAAI,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC,IAAI,4DAA4D,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1H,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnI,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrF,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QAAC,IAAI,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;AAC1F,CAAC;AAmBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAwB,EAAE,IAAkB;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YACxC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,KAAK,GAAgD,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5F,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACnD,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,MAAM;YAAE,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5F,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,OAAO;YAAE,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAChC,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAc9C,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YAAC,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC,CAAC,CAAC;QACtF,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;QAAC,CAAC,CAAC,CAAC;QAC3G,OAAO,EAAE,GAAG,CAAC,EAAE;YACb,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAAE,OAAO,SAAS,CAAC;YACnD,IAAI,CAAC;gBAAC,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,SAAS,CAAC;YAAC,CAAC;QACzK,CAAC;QACD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAA0B,iBAAiB,CAAC,IAAI,CAAC;IACrG,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC5E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAC1G,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;IACrC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,GAAG;QAAE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7F,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,iBAAiB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAoC,EAAE,IAAY,EAAE,YAAgC;IACnH,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtF,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,wCAAwC,KAAK,CAAC,OAAO,SAAS,IAAI,GAAG,CAAC;IACtH,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;QAC1G,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,iCAAiC,KAAK,CAAC,YAAY,4BAA4B,YAAY,GAAG,CAAC;IAC/I,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAgBD,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,CAAC,KAAK,IAAI,EAAE,CAAmB,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAQ,KAA2C,EAAE,IAAI,CAAC;AAC5D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;SAC7H,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAW,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAA+B,EAAE,SAAyB,SAAS,EAAE,OAAO,GAAG,MAAM;IACnH,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO;IAChF,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;QAChC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,KAAa,EAAE,UAAwB,KAAK;IAC7F,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,IAAI,2BAA2B,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzJ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;IACzD,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,qBAAqB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IAC7G,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9H,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACnF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAmB,EAAE,IAAY;IACvE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAmB,EAAE,MAAc,EAAE,KAAa,EAAE,KAAa;IACvG,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;QAAC,QAAQ,GAAG,IAAI,CAAC;IAAC,CAAC;IACpF,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAAE,MAAM,KAAK,CAAC;IAC7H,CAAC;IACD,qEAAqE;IACrE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACrC,SAAS,CAAC;YACR,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;YACjE,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;oBAAE,MAAM;gBACtG,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;YAC9H,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI,EAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YAC/F,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,oDAAoD,CAAC,CAAC;QACnG,CAAC;QACD,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,mCAAmC,CAAC,CAAC;QAClH,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAqC,OAAO,CAAC,QAAQ,EAAE,MAAyB,OAAO,CAAC,GAAG,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IACrJ,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC7F,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7G,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACrF,CAAC;AAED,0HAA0H;AAC1H,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,kBAAkB,CAAC,WAAqC,OAAO,CAAC,QAAQ,EAAE,MAAyB,OAAO,CAAC,GAAG,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IACzJ,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IACxF,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;IACrH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC;AACrF,CAAC;AAYD,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QAAC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAyB,EAAE;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,GAAG,CAAC,wBAAwB;QAAE,OAAO,GAAG,CAAC,wBAAwB,CAAC;IACtE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACjD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAAc;IAC3D,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACzC,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAS,GAAG,CAAC;IAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxI,OAAQ,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,YAAY;YAAE,OAAO,QAAQ,EAAE,CAAC;QACtE,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QAAC,IAAI,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;AAC1F,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IAClF,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC5D,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;IACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,wBAAwB,GAAG,QAAQ,CAAC;IACpE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,QAAQ,KAAK,SAAS;QAAE,QAAQ,CAAC,GAA6B,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,uFAAuF;IACvF,GAAG,CAAC,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACvD,IAAI,KAAoC,CAAC;IACzC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAsB,CAAC;QAC3E,oEAAoE;QACpE,8CAA8C;QAC9C,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC1F,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QACD,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,mFAAmF;IACnF,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC;IACjC,OAAO,GAAG,CAAC,uBAAuB,CAAC;IACnC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAChD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,KAAK,IAAI,EAAE;gBAChB,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3E,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YAC/C,uEAAuE;YACvE,oEAAoE;YACpE,IAAI,QAAoB,CAAC;YACzB,IAAI,CAAC;gBAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAAC,CAAC;YAC/D,MAAM,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;YAAC,CAAC;YACxI,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,IAAI,KAAK,GAAG,KAAK,CAAC;gBAClB,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;oBACrC,IAAI,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;oBAAC,CAAC;gBAC/E,CAAC;qBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC;gBAC3D,CAAC;gBACD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,KAAK;wBAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;oBACvG,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;oBAAS,CAAC;gBAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAC,MAAM,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;YAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC9D,CAAC;AAED,yHAAyH;AACzH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAwB,EAAE,IAAY,EAAE,MAAc,OAAO,CAAC,GAAG;IACzF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACzE,IAAI,CAAC;QAAC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACzH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAmB;IAClD,4EAA4E;IAC5E,sDAAsD;IACtD,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;QACpF,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,MAAM,SAAS,CAAC,OAAO,EAAE,sDAAsD,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC1H,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,GAAG,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC;QACvE,IAAI,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,KAAK,OAAO;YAAE,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnJ,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,gFAAgF;QAChF,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE;YACnD,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;YACtB,cAAc,EAAE,GAAG,EAAE;gBACnB,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;oBAAC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,EAAE,CAAC;gBAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvI,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,CAAC;YACD,cAAc,EAAE,KAAK,IAAI,EAAE;gBACzB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,OAAO;oBAAE,OAAO,CAAC,KAAK,CAAC,4GAA4G,CAAC,CAAC;gBACzI,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5D,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC;YACvB,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACtE,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,6EAA6E;QAC7E,0EAA0E;QAC1E,mEAAmE;QACnE,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,oBAAoB,GAAG,CAAC,KAAK,CAAC,OAAO,2BAA2B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3P,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IACD,oGAAoG;IACpG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5G,8EAA8E;QAC9E,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":";AAyBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA0ExD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAM5D"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":";AA0BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA+ExD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAM5D"}
@@ -11,16 +11,17 @@ import path from 'node:path';
11
11
  import { fileURLToPath } from 'node:url';
12
12
  import { spawn, execFile } from 'node:child_process';
13
13
  import { request } from 'node:http';
14
- import { open, mkdir, writeFile, rm, rename, copyFile } from 'node:fs/promises';
14
+ import { open, mkdir, writeFile, rm, rename, copyFile, chmod } from 'node:fs/promises';
15
15
  import os from 'node:os';
16
16
  import { promisify } from 'node:util';
17
- import { existsSync, readFileSync } from 'node:fs';
18
- import { environment, dashboardReady, launchAgentLabel, launchAgentPlist, reloadLaunchAgent, nativeEnvironment, reloadSystemdUnit, systemdUnitPath, atomicJson, browsersDir, SERVICE_UNIT_VAR } from './environment.js';
17
+ import { existsSync, readFileSync, realpathSync } from 'node:fs';
18
+ import { environment, identityMismatch, portMovedLines, dashboardReady, launchAgentLabel, launchAgentPlist, reloadLaunchAgent, nativeEnvironment, reloadSystemdUnit, systemdUnitPath, atomicJson, browsersDir, SERVICE_UNIT_VAR } from './environment.js';
19
19
  import { supervise, supervisorSocket } from './supervisor.js';
20
20
  import { keptPluginDataLine, readKeptPluginData } from './kept-data.js';
21
21
  import { readProfileZone, timezoneLine } from './doctor-timezone.js';
22
22
  import { installedVersion, readUpgradeState, upgradeDoctorLines, versionView } from './upgrade.js';
23
- import { appLayout, insideAppBundle } from './app-layout.js';
23
+ import { APP_RUNNING_LINE, appLayout, insideAppBundle, runsAppCopy } from './app-layout.js';
24
+ import { APP_BUNDLE_ID, SHIM_REFUSAL, SHIM_VAR, shimAction, shimDoctorLines, shimsFor } from './cli-shim.js';
24
25
  const entry = fileURLToPath(import.meta.url);
25
26
  // <root>/packages/install/dist/launcher.js — the installation root is three up.
26
27
  const root = path.resolve(path.dirname(entry), '../../..');
@@ -94,6 +95,10 @@ async function ask(ctx, method, route, body) {
94
95
  function isAppInstall(ctx) {
95
96
  return appLayout(process.env) !== undefined || insideAppBundle(root) || root.startsWith(path.join(ctx.data, 'releases') + path.sep);
96
97
  }
98
+ /** Does the supervisor answering run buddi.app's copy (the bundle's, or a release it installed)? */
99
+ function runsFromApp(status, ctx) {
100
+ return runsAppCopy(status.installRoot, ctx.data);
101
+ }
97
102
  function withApp(view, ctx) {
98
103
  return isAppInstall(ctx) ? { ...view, app: true } : view;
99
104
  }
@@ -228,7 +233,21 @@ async function uninstall(ctx, rest) {
228
233
  answers: () => control(ctx).then(() => true, () => false),
229
234
  stopGateway: async () => { await control(ctx, 'stop'); },
230
235
  backup: () => supervisedBackup(ctx),
231
- passphrase: async () => (await ask(ctx, 'GET', '/passphrase')).passphrase,
236
+ },
237
+ // Read from the vault itself, never through the supervisor's route: that one makes a passphrase when there is none.
238
+ passphrase: async () => {
239
+ const stored = await vault?.get(core.BACKUP_PASSPHRASE_KEY);
240
+ return stored === null || stored === undefined || stored.trim() === '' ? undefined : core.normalizePassphrase(stored);
241
+ },
242
+ writePrivate: async (file, text) => {
243
+ await mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
244
+ await writeFile(file, text, { mode: 0o600 });
245
+ await chmod(file, 0o600);
246
+ },
247
+ copy: async (from, to) => { await mkdir(path.dirname(to), { recursive: true }); await copyFile(from, to); },
248
+ readState: () => {
249
+ const file = path.join(ctx.data, 'installation.json');
250
+ return existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : undefined;
232
251
  },
233
252
  supervisorPid: lockPid,
234
253
  signal: (pid, signal) => { try {
@@ -261,6 +280,26 @@ async function uninstall(ctx, rest) {
261
280
  },
262
281
  }),
263
282
  ...(app === undefined ? {} : { app }),
283
+ ...(() => {
284
+ const shimDeps = { home, exists: existsSync, read: (file) => { try {
285
+ return readFileSync(file, 'utf8');
286
+ }
287
+ catch {
288
+ return undefined;
289
+ } } };
290
+ const files = shimsFor(ctx.data, shimDeps);
291
+ if (files.length === 0)
292
+ return {};
293
+ return { shims: { files, remove: async (file) => {
294
+ try {
295
+ await rm(file, { force: true });
296
+ if (!existsSync(file))
297
+ return;
298
+ }
299
+ catch { /* root's folder */ }
300
+ await exec('/usr/bin/osascript', ['-e', `do shell script ${JSON.stringify(`/bin/rm -f '${file.replace(/'/g, `'\\''`)}'`)} with administrator privileges`]);
301
+ } } };
302
+ })(),
264
303
  sleep: ms => new Promise(resolve => setTimeout(resolve, ms)),
265
304
  io: {
266
305
  log: line => console.log(line),
@@ -382,6 +421,17 @@ async function restoreThroughSupervisor(ctx, rest) {
382
421
  // The vault holds the passphrase of an archive this installation encrypted;
383
422
  // `--passphrase` is for one that came from another machine.
384
423
  let passphrase = flag('passphrase');
424
+ // `<archive>.passphrase.txt` beside it, which uninstall writes before the vault goes.
425
+ if (passphrase === undefined && name.endsWith('.age')) {
426
+ const { passphraseFileFor, passphraseFromFile } = await import('@buddi/core/uninstall');
427
+ for (const archive of [resolved, path.join(backups, name)]) {
428
+ const file = passphraseFileFor(archive);
429
+ if (passphrase === undefined && existsSync(file))
430
+ passphrase = passphraseFromFile(readFileSync(file, 'utf8'));
431
+ }
432
+ if (passphrase !== undefined)
433
+ console.log(`Using the passphrase in ${name}.passphrase.txt beside it.`);
434
+ }
385
435
  if (passphrase === undefined && name.endsWith('.age')) {
386
436
  passphrase = (await ask(ctx, 'GET', '/passphrase').catch(() => undefined))?.passphrase;
387
437
  }
@@ -515,6 +565,12 @@ async function launchService(ctx, temporary) {
515
565
  }
516
566
  async function run() {
517
567
  let ctx = await environment(root);
568
+ // A supervisor started through buddi.app's command line tool would compete with the app's own (cli-shim.ts).
569
+ if (args[0] === 'supervise' && process.platform === 'darwin' && (process.env[SHIM_VAR] ?? '').trim() !== '') {
570
+ console.error(`buddi: ${SHIM_REFUSAL}`);
571
+ process.exitCode = 2;
572
+ return;
573
+ }
518
574
  if (args[0] === 'supervise')
519
575
  return supervise(ctx);
520
576
  if (args[0] === '__gateway') {
@@ -536,6 +592,45 @@ async function run() {
536
592
  }
537
593
  // Help is the command table's, whatever the command: `buddi service status --help`.
538
594
  const wantsHelp = args.some(arg => arg === '--help' || arg === '-h') || args[0] === 'help';
595
+ // A folder whose installation.json names another installation is not one to stop or remove from here.
596
+ const guarded = args[0] === 'uninstall' || (args[0] === 'service' && ['install', 'stop', 'uninstall'].includes(args[1]));
597
+ const mismatch = identityMismatch(ctx.state, ctx.data, ctx.env.BUDDI_VAULT_SERVICE);
598
+ if (!wantsHelp && guarded && mismatch !== undefined) {
599
+ console.error(`buddi: ${mismatch}`);
600
+ console.error("Run this from the app's menu, or set BUDDI_DATA_DIR to the installation you mean.");
601
+ process.exitCode = 2;
602
+ return;
603
+ }
604
+ /*
605
+ * Through buddi.app's command line tool (cli-shim.ts): the app runs buddi
606
+ * here. Starting it opens the app (and waits for its supervisor) instead of
607
+ * installing a LaunchAgent that would compete with it; a service of its own
608
+ * is refused; everything else talks to the app's supervisor as usual.
609
+ */
610
+ const viaShim = process.platform === 'darwin' && (process.env[SHIM_VAR] ?? '').trim() !== '';
611
+ if (viaShim && !wantsHelp) {
612
+ const action = shimAction(args);
613
+ if (action === 'refuse') {
614
+ console.error(`buddi: ${SHIM_REFUSAL}`);
615
+ process.exitCode = 2;
616
+ return;
617
+ }
618
+ if (action === 'open-app' && !(await control(ctx).then(() => true, () => false))) {
619
+ console.log('Opening buddi.app.');
620
+ const app = (process.env[SHIM_VAR] ?? '').trim();
621
+ await exec('open', ['-b', APP_BUNDLE_ID], { env: nativeEnvironment(ctx.env) })
622
+ .catch(() => exec('open', [app], { env: nativeEnvironment(ctx.env) }));
623
+ const deadline = Date.now() + 120_000;
624
+ for (;;) {
625
+ await new Promise(resolve => setTimeout(resolve, 500));
626
+ ctx = await environment(root);
627
+ if (await control(ctx).then(() => true, () => false))
628
+ break;
629
+ if (Date.now() > deadline)
630
+ throw new Error(`buddi.app did not start buddi within two minutes. Open it from ${app}, and inspect ${path.join(ctx.data, 'logs/supervisor.log')}.`);
631
+ }
632
+ }
633
+ }
539
634
  if (!wantsHelp && args[0] === 'uninstall') {
540
635
  process.exitCode = await uninstall(ctx, args.slice(1));
541
636
  return;
@@ -555,6 +650,8 @@ async function run() {
555
650
  }
556
651
  // `--json`: the supervisor's own answer, for scripts (and the release smoke).
557
652
  console.log(serviceJson ? JSON.stringify(status, null, 2) : serviceLine(status));
653
+ if (!serviceJson && status.portNotice)
654
+ console.log(status.portNotice);
558
655
  if (status.gateway !== 'running' && args[1] !== 'stop')
559
656
  process.exitCode = 1;
560
657
  return;
@@ -576,6 +673,22 @@ async function run() {
576
673
  return;
577
674
  }
578
675
  if (!wantsHelp && args[0] === 'doctor') {
676
+ // Which buddi answered, and from where: buddi.app's copy, a release it installed, or npm's.
677
+ const invoked = (() => { try {
678
+ return realpathSync(process.argv[1] ?? entry);
679
+ }
680
+ catch {
681
+ return entry;
682
+ } })();
683
+ console.log(`This buddi: ${invoked} (Node ${process.execPath})`);
684
+ console.log(`From: ${insideAppBundle(root) ? `buddi.app (${root.slice(0, root.indexOf('.app/') + 4)})` : root.startsWith(path.join(ctx.data, 'releases') + path.sep) ? `an update buddi.app installed (${root})` : `npm (${root})`}`);
685
+ for (const line of shimDoctorLines({ home: os.homedir(), exists: existsSync, read: file => { try {
686
+ return readFileSync(file, 'utf8');
687
+ }
688
+ catch {
689
+ return undefined;
690
+ } } }))
691
+ console.log(line);
579
692
  console.log(`Data: ${ctx.data}`);
580
693
  // What the vault is and what it protects, said the same way everywhere
581
694
  // (install.md §4): the keychain on a Mac, the file beside its key elsewhere.
@@ -620,6 +733,15 @@ async function run() {
620
733
  console.log('This is the latest version.');
621
734
  return;
622
735
  }
736
+ if (!wantsHelp && args[0] === 'upgrade' && !isAppInstall(ctx)) {
737
+ // npm's buddi in front of buddi.app's supervisor: the app updates buddi, not this command.
738
+ const status = await control(ctx).catch(() => undefined);
739
+ if (status !== undefined && runsFromApp(status, ctx)) {
740
+ console.log(APP_RUNNING_LINE);
741
+ console.log('Update buddi from the app: buddi → Update to … in the menu bar, or Settings → System.');
742
+ return;
743
+ }
744
+ }
623
745
  if (!wantsHelp && args[0] === 'upgrade') {
624
746
  // The checkout's `--no-backup` has no meaning here: the archive is the way
625
747
  // back from a migration, and this path migrates under code it just installed.
@@ -679,9 +801,17 @@ async function run() {
679
801
  await control(ctx, 'start');
680
802
  running = true;
681
803
  }
804
+ else if (runsFromApp(status, ctx) && (!isAppInstall(ctx) || viaShim)) {
805
+ // npm's buddi, with buddi.app running this installation: install no service, talk to the app's.
806
+ console.log(APP_RUNNING_LINE);
807
+ running = true;
808
+ }
682
809
  }
683
810
  catch { /* A missing supervisor is normal on first run. */ }
684
811
  }
812
+ // The shim never installs a service beside buddi.app (it opened the app above).
813
+ if (!running && viaShim)
814
+ throw new Error('buddi.app is not running buddi. Open buddi.app, then run buddi again.');
685
815
  if (!running) {
686
816
  if (!relaunched) {
687
817
  console.log('Starting Buddi. First run provisions a private Postgres cluster.');
@@ -716,6 +846,11 @@ async function run() {
716
846
  throw new Error(`Gateway did not become ready. Inspect ${path.join(ctx.data, 'logs/gateway.log')}`);
717
847
  await new Promise(resolve => setTimeout(resolve, 250));
718
848
  }
849
+ // A recorded port another program took was moved at the last start: said here, once a day at most.
850
+ if (ctx.state?.portMoved && Date.now() - Date.parse(ctx.state.portMoved.at) < 24 * 60 * 60_000) {
851
+ for (const line of portMovedLines(ctx.state.portMoved))
852
+ console.log(line);
853
+ }
719
854
  console.log(`Dashboard: ${terminalLink(url)}`);
720
855
  console.log('The link is good for five minutes. Run buddi again for a fresh one.');
721
856
  /*