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

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 (164) hide show
  1. package/extension/manifest.json +2 -2
  2. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/install/dist/app-layout.d.ts +24 -0
  4. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
  5. package/node_modules/@buddi/install/dist/app-layout.js +64 -2
  6. package/node_modules/@buddi/install/dist/app-layout.js.map +1 -1
  7. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  8. package/node_modules/@buddi/install/dist/launcher.js +89 -10
  9. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  10. package/node_modules/@buddi/install/dist/linux-install.d.ts +41 -0
  11. package/node_modules/@buddi/install/dist/linux-install.d.ts.map +1 -0
  12. package/node_modules/@buddi/install/dist/linux-install.js +86 -0
  13. package/node_modules/@buddi/install/dist/linux-install.js.map +1 -0
  14. package/node_modules/@buddi/install/dist/runtime-info.d.ts +23 -0
  15. package/node_modules/@buddi/install/dist/runtime-info.d.ts.map +1 -0
  16. package/node_modules/@buddi/install/dist/runtime-info.js +69 -0
  17. package/node_modules/@buddi/install/dist/runtime-info.js.map +1 -0
  18. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  19. package/node_modules/@buddi/install/dist/supervisor.js +8 -6
  20. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  21. package/node_modules/@buddi/install/dist/uninstall.d.ts +20 -0
  22. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  23. package/node_modules/@buddi/install/dist/uninstall.js +50 -1
  24. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  25. package/node_modules/@buddi/install/dist/upgrade.d.ts +4 -1
  26. package/node_modules/@buddi/install/dist/upgrade.d.ts.map +1 -1
  27. package/node_modules/@buddi/install/dist/upgrade.js +77 -51
  28. package/node_modules/@buddi/install/dist/upgrade.js.map +1 -1
  29. package/node_modules/@hono/node-server/package.json +2 -2
  30. package/node_modules/@types/node/README.md +1 -1
  31. package/node_modules/@types/node/package.json +2 -2
  32. package/node_modules/@types/node/util.d.ts +6 -3
  33. package/node_modules/content-disposition/README.md +105 -35
  34. package/node_modules/content-disposition/dist/index.d.ts +72 -0
  35. package/node_modules/content-disposition/dist/index.js +388 -0
  36. package/node_modules/content-disposition/dist/index.js.map +1 -0
  37. package/node_modules/content-disposition/package.json +31 -19
  38. package/node_modules/docx/dist/index.cjs +182 -80
  39. package/node_modules/docx/dist/index.d.cts +63 -6
  40. package/node_modules/docx/dist/index.d.ts +63 -6
  41. package/node_modules/docx/dist/index.iife.js +182 -80
  42. package/node_modules/docx/dist/index.mjs +182 -80
  43. package/node_modules/docx/dist/index.umd.cjs +182 -80
  44. package/node_modules/docx/dist/layout.cjs +1 -6
  45. package/node_modules/docx/dist/layout.iife.js +1 -6
  46. package/node_modules/docx/dist/layout.mjs +1 -6
  47. package/node_modules/docx/dist/layout.umd.cjs +1 -6
  48. package/node_modules/docx/package.json +4 -3
  49. package/node_modules/express/Readme.md +15 -9
  50. package/node_modules/express/lib/application.js +2 -2
  51. package/node_modules/express/lib/request.js +32 -19
  52. package/node_modules/express/lib/response.js +27 -30
  53. package/node_modules/express/node_modules/content-type/LICENSE +22 -0
  54. package/node_modules/express/node_modules/content-type/README.md +71 -0
  55. package/node_modules/express/node_modules/content-type/dist/index.d.ts +46 -0
  56. package/node_modules/express/node_modules/content-type/dist/index.js +176 -0
  57. package/node_modules/express/node_modules/content-type/dist/index.js.map +1 -0
  58. package/node_modules/express/node_modules/content-type/package.json +52 -0
  59. package/node_modules/express/package.json +10 -10
  60. package/node_modules/imapflow/CHANGELOG.md +33 -0
  61. package/node_modules/imapflow/dist/cjs/commands/append.d.ts +1 -1
  62. package/node_modules/imapflow/dist/cjs/commands/append.js +15 -4
  63. package/node_modules/imapflow/dist/cjs/commands/compress.js +2 -2
  64. package/node_modules/imapflow/dist/cjs/commands/id.js +5 -3
  65. package/node_modules/imapflow/dist/cjs/commands/idle.js +9 -9
  66. package/node_modules/imapflow/dist/cjs/commands/list.js +2 -2
  67. package/node_modules/imapflow/dist/cjs/commands/namespace.js +18 -14
  68. package/node_modules/imapflow/dist/cjs/commands/quota.js +2 -3
  69. package/node_modules/imapflow/dist/cjs/commands/status.js +2 -4
  70. package/node_modules/imapflow/dist/cjs/connection-deadline.d.ts +1 -1
  71. package/node_modules/imapflow/dist/cjs/connection-deadline.js +2 -4
  72. package/node_modules/imapflow/dist/cjs/download.js +66 -35
  73. package/node_modules/imapflow/dist/cjs/errors.d.ts +15 -0
  74. package/node_modules/imapflow/dist/cjs/errors.js +22 -0
  75. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.d.ts +4 -4
  76. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.js +18 -18
  77. package/node_modules/imapflow/dist/cjs/handler/imap-parser.js +28 -3
  78. package/node_modules/imapflow/dist/cjs/handler/imap-stream.js +9 -8
  79. package/node_modules/imapflow/dist/cjs/handler/limits.d.ts +1 -1
  80. package/node_modules/imapflow/dist/cjs/handler/limits.js +5 -7
  81. package/node_modules/imapflow/dist/cjs/handler/parser-instance.js +23 -38
  82. package/node_modules/imapflow/dist/cjs/handler/token-parser.d.ts +12 -0
  83. package/node_modules/imapflow/dist/cjs/handler/token-parser.js +44 -104
  84. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +4 -3
  85. package/node_modules/imapflow/dist/cjs/imap-flow.js +98 -72
  86. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  87. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  88. package/node_modules/imapflow/dist/cjs/proxy-connection.js +2 -5
  89. package/node_modules/imapflow/dist/cjs/search-compiler.js +2 -3
  90. package/node_modules/imapflow/dist/cjs/tools.d.ts +14 -3
  91. package/node_modules/imapflow/dist/cjs/tools.js +30 -18
  92. package/node_modules/imapflow/dist/cjs/types.d.ts +11 -0
  93. package/node_modules/imapflow/dist/esm/commands/append.d.ts +1 -1
  94. package/node_modules/imapflow/dist/esm/commands/append.js +15 -4
  95. package/node_modules/imapflow/dist/esm/commands/compress.js +2 -2
  96. package/node_modules/imapflow/dist/esm/commands/id.js +6 -4
  97. package/node_modules/imapflow/dist/esm/commands/idle.js +9 -9
  98. package/node_modules/imapflow/dist/esm/commands/list.js +3 -3
  99. package/node_modules/imapflow/dist/esm/commands/namespace.js +19 -15
  100. package/node_modules/imapflow/dist/esm/commands/quota.js +3 -4
  101. package/node_modules/imapflow/dist/esm/commands/status.js +2 -4
  102. package/node_modules/imapflow/dist/esm/connection-deadline.d.ts +1 -1
  103. package/node_modules/imapflow/dist/esm/connection-deadline.js +2 -4
  104. package/node_modules/imapflow/dist/esm/download.js +66 -35
  105. package/node_modules/imapflow/dist/esm/errors.d.ts +15 -0
  106. package/node_modules/imapflow/dist/esm/errors.js +21 -0
  107. package/node_modules/imapflow/dist/esm/handler/imap-compiler.d.ts +4 -4
  108. package/node_modules/imapflow/dist/esm/handler/imap-compiler.js +18 -18
  109. package/node_modules/imapflow/dist/esm/handler/imap-parser.js +28 -3
  110. package/node_modules/imapflow/dist/esm/handler/imap-stream.js +9 -8
  111. package/node_modules/imapflow/dist/esm/handler/limits.d.ts +1 -1
  112. package/node_modules/imapflow/dist/esm/handler/limits.js +5 -7
  113. package/node_modules/imapflow/dist/esm/handler/parser-instance.js +23 -38
  114. package/node_modules/imapflow/dist/esm/handler/token-parser.d.ts +12 -0
  115. package/node_modules/imapflow/dist/esm/handler/token-parser.js +44 -104
  116. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +4 -3
  117. package/node_modules/imapflow/dist/esm/imap-flow.js +99 -73
  118. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  119. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  120. package/node_modules/imapflow/dist/esm/proxy-connection.js +2 -5
  121. package/node_modules/imapflow/dist/esm/search-compiler.js +2 -3
  122. package/node_modules/imapflow/dist/esm/tools.d.ts +14 -3
  123. package/node_modules/imapflow/dist/esm/tools.js +30 -19
  124. package/node_modules/imapflow/dist/esm/types.d.ts +11 -0
  125. package/node_modules/imapflow/package.json +6 -3
  126. package/node_modules/process-warning/.github/workflows/ci.yml +1 -1
  127. package/node_modules/process-warning/.github/workflows/lock-threads.yml +1 -1
  128. package/node_modules/process-warning/.github/workflows/release.yml +24 -0
  129. package/node_modules/process-warning/README.md +46 -46
  130. package/node_modules/process-warning/package.json +1 -1
  131. package/package.json +2 -2
  132. package/packages/install/dist/.tsbuildinfo +1 -1
  133. package/packages/install/dist/app-layout.d.ts +24 -0
  134. package/packages/install/dist/app-layout.d.ts.map +1 -1
  135. package/packages/install/dist/app-layout.js +64 -2
  136. package/packages/install/dist/app-layout.js.map +1 -1
  137. package/packages/install/dist/launcher.d.ts.map +1 -1
  138. package/packages/install/dist/launcher.js +89 -10
  139. package/packages/install/dist/launcher.js.map +1 -1
  140. package/packages/install/dist/linux-install.d.ts +41 -0
  141. package/packages/install/dist/linux-install.d.ts.map +1 -0
  142. package/packages/install/dist/linux-install.js +86 -0
  143. package/packages/install/dist/linux-install.js.map +1 -0
  144. package/packages/install/dist/runtime-info.d.ts +23 -0
  145. package/packages/install/dist/runtime-info.d.ts.map +1 -0
  146. package/packages/install/dist/runtime-info.js +69 -0
  147. package/packages/install/dist/runtime-info.js.map +1 -0
  148. package/packages/install/dist/supervisor.d.ts.map +1 -1
  149. package/packages/install/dist/supervisor.js +8 -6
  150. package/packages/install/dist/supervisor.js.map +1 -1
  151. package/packages/install/dist/uninstall.d.ts +20 -0
  152. package/packages/install/dist/uninstall.d.ts.map +1 -1
  153. package/packages/install/dist/uninstall.js +50 -1
  154. package/packages/install/dist/uninstall.js.map +1 -1
  155. package/packages/install/dist/upgrade.d.ts +4 -1
  156. package/packages/install/dist/upgrade.d.ts.map +1 -1
  157. package/packages/install/dist/upgrade.js +77 -51
  158. package/packages/install/dist/upgrade.js.map +1 -1
  159. package/packages/web/dist/assets/{index-oxmxR39o.js → index-DgpPl0TR.js} +57 -57
  160. package/packages/web/dist/assets/{lottie_light-DROBTM6Y.js → lottie_light-twPed1FM.js} +1 -1
  161. package/packages/web/dist/build.json +1 -1
  162. package/packages/web/dist/index.html +1 -1
  163. package/packages/web/dist/precache.json +3 -3
  164. package/node_modules/content-disposition/index.js +0 -536
@@ -13,6 +13,23 @@ export declare const SOURCE_REPOSITORY = "https://github.com/withbuddi/buddi";
13
13
  export declare const APP_BUNDLE = "This buddi runs from inside buddi.app, and the app updates it. Open buddi from the menu bar to update.";
14
14
  /** `<releases>` when this installation is buddi.app's, else undefined. */
15
15
  export declare function appLayout(env: NodeJS.ProcessEnv): string | undefined;
16
+ /**
17
+ * The Linux install (`scripts/install.sh`) uses this same layout without an
18
+ * app around it: `<data>/node/node` is the bundled Node (npm beside it),
19
+ * `<data>/releases/current` the release that runs, and a systemd user unit
20
+ * starts `current` again after an upgrade. Its unit and its `buddi` command
21
+ * set this variable next to `BUDDI_APP_LAYOUT`, so the words and the ways
22
+ * back are the installer's, not buddi.app's menu.
23
+ */
24
+ export declare const LINUX_INSTALL_VAR = "BUDDI_LINUX_INSTALL";
25
+ /** Is this the Linux install's layout (no app, systemd restarts `current`)? */
26
+ export declare function linuxInstall(env: NodeJS.ProcessEnv): boolean;
27
+ /** Is buddi.app the one running this installation (the layout, and not the Linux install's)? */
28
+ export declare function appRuns(env: NodeJS.ProcessEnv): boolean;
29
+ /** The line the Linux install is installed and upgraded with (the site serves scripts/install.sh). */
30
+ export declare const LINUX_INSTALL_LINE = "curl -fsSL https://withbuddi.com/install.sh | sh";
31
+ /** The command the Linux install's own launcher runs: `current`'s, so a unit written once follows every upgrade. */
32
+ export declare function currentLauncher(releases: string): string;
16
33
  /** Does this root sit inside a macOS app bundle? */
17
34
  export declare function insideAppBundle(root: string): boolean;
18
35
  /** Does a supervisor with this install root run buddi.app's copy: the bundle's, or a release the app installed? */
@@ -115,6 +132,13 @@ export declare function placeRelease(target: string, version: string, staging: s
115
132
  root: string;
116
133
  kept: boolean;
117
134
  }>;
135
+ /** `<releases>/.lock`: a folder (mkdir is atomic) holding the owner's pid. scripts/install.sh takes the same one. */
136
+ export declare const RELEASES_LOCK = ".lock";
137
+ /**
138
+ * Take the releases lock, or say who holds it. A lock whose process is gone
139
+ * is stale and taken over. Resolves with what lets it go again.
140
+ */
141
+ export declare function takeReleasesLock(releases: string, pid?: number): Promise<() => Promise<void>>;
118
142
  /** Where `current` and `previous` point now. */
119
143
  export declare function releaseLinks(releases: string): Promise<{
120
144
  current?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"app-layout.d.ts","sourceRoot":"","sources":["../src/app-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-layout.d.ts","sourceRoot":"","sources":["../src/app-layout.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,29 @@ export function appLayout(env) {
67
67
  const dir = env[APP_LAYOUT_VAR]?.trim();
68
68
  return dir !== undefined && dir !== '' && path.isAbsolute(dir) ? path.resolve(dir) : undefined;
69
69
  }
70
+ /**
71
+ * The Linux install (`scripts/install.sh`) uses this same layout without an
72
+ * app around it: `<data>/node/node` is the bundled Node (npm beside it),
73
+ * `<data>/releases/current` the release that runs, and a systemd user unit
74
+ * starts `current` again after an upgrade. Its unit and its `buddi` command
75
+ * set this variable next to `BUDDI_APP_LAYOUT`, so the words and the ways
76
+ * back are the installer's, not buddi.app's menu.
77
+ */
78
+ export const LINUX_INSTALL_VAR = 'BUDDI_LINUX_INSTALL';
79
+ /** Is this the Linux install's layout (no app, systemd restarts `current`)? */
80
+ export function linuxInstall(env) {
81
+ return appLayout(env) !== undefined && (env[LINUX_INSTALL_VAR] ?? '').trim() === '1';
82
+ }
83
+ /** Is buddi.app the one running this installation (the layout, and not the Linux install's)? */
84
+ export function appRuns(env) {
85
+ return appLayout(env) !== undefined && !linuxInstall(env);
86
+ }
87
+ /** The line the Linux install is installed and upgraded with (the site serves scripts/install.sh). */
88
+ export const LINUX_INSTALL_LINE = 'curl -fsSL https://withbuddi.com/install.sh | sh';
89
+ /** The command the Linux install's own launcher runs: `current`'s, so a unit written once follows every upgrade. */
90
+ export function currentLauncher(releases) {
91
+ return path.join(releases, 'current', 'packages', 'install', 'dist', 'launcher.js');
92
+ }
70
93
  /** Does this root sit inside a macOS app bundle? */
71
94
  export function insideAppBundle(root) {
72
95
  return /\.app\/Contents\//.test(root.split(path.sep).join('/') + '/');
@@ -154,7 +177,7 @@ export async function stageRelease(opts) {
154
177
  };
155
178
  const meta = await fetchReleaseMeta(registry, version, opts.http, opts.auth);
156
179
  if (requireProvenance && meta.attestations === undefined) {
157
- throw new Error(`${PACKAGE_NAME}@${version} has no provenance attestation, and buddi.app installs only releases built by withbuddi/buddi's CI.`);
180
+ throw new Error(`${PACKAGE_NAME}@${version} has no provenance attestation, and buddi installs only releases built by withbuddi/buddi's CI.`);
158
181
  }
159
182
  await mkdir(opts.releases, { recursive: true, mode: 0o700 });
160
183
  // Resolved: npm given a prefix under a symlink (`/var` → `/private/var`, a
@@ -164,7 +187,7 @@ export async function stageRelease(opts) {
164
187
  const staging = path.join(releases, `.staging-${version}-${randomBytes(4).toString('hex')}`);
165
188
  await mkdir(staging, { recursive: true, mode: 0o700 });
166
189
  // npm's own kind of prefix manifest: no name, so it is nobody's project.
167
- await writeFile(path.join(staging, 'package.json'), JSON.stringify({ private: true, description: 'A buddi release installed by buddi.app.' }, null, 2) + '\n');
190
+ await writeFile(path.join(staging, 'package.json'), JSON.stringify({ private: true, description: 'A buddi release installed by buddi itself.' }, null, 2) + '\n');
168
191
  try {
169
192
  try {
170
193
  await opts.exec(binary, stageArgs(staging, version, registry), { timeout, maxBuffer });
@@ -268,6 +291,45 @@ export async function placeRelease(target, version, staging, log) {
268
291
  log?.(`upgrade: ${version} is in place in ${dir}.`);
269
292
  return { dir, root: releaseRoot(dir), kept: false };
270
293
  }
294
+ /* ------------------------------------------------------------------ *
295
+ * One release change at a time
296
+ * ------------------------------------------------------------------ */
297
+ /** `<releases>/.lock`: a folder (mkdir is atomic) holding the owner's pid. scripts/install.sh takes the same one. */
298
+ export const RELEASES_LOCK = '.lock';
299
+ function alive(pid) {
300
+ try {
301
+ process.kill(pid, 0);
302
+ return true;
303
+ }
304
+ catch (err) {
305
+ return err.code === 'EPERM';
306
+ }
307
+ }
308
+ /**
309
+ * Take the releases lock, or say who holds it. A lock whose process is gone
310
+ * is stale and taken over. Resolves with what lets it go again.
311
+ */
312
+ export async function takeReleasesLock(releases, pid = process.pid) {
313
+ await mkdir(releases, { recursive: true, mode: 0o700 });
314
+ const lock = path.join(releases, RELEASES_LOCK);
315
+ for (let attempt = 0; attempt < 2; attempt++) {
316
+ try {
317
+ await mkdir(lock, { mode: 0o700 });
318
+ await writeFile(path.join(lock, 'pid'), `${pid}\n`);
319
+ return async () => { await rm(lock, { recursive: true, force: true }).catch(() => { }); };
320
+ }
321
+ catch (err) {
322
+ if (err.code !== 'EEXIST')
323
+ throw err;
324
+ const holder = Number((await readFile(path.join(lock, 'pid'), 'utf8').catch(() => '')).trim());
325
+ if (Number.isInteger(holder) && holder > 0 && holder !== pid && alive(holder)) {
326
+ throw new Error(`another install or upgrade is changing ${releases} (pid ${holder}); try again when it has finished`);
327
+ }
328
+ await rm(lock, { recursive: true, force: true });
329
+ }
330
+ }
331
+ throw new Error(`could not take the lock in ${releases}`);
332
+ }
271
333
  /* ------------------------------------------------------------------ *
272
334
  * current, previous, and what is kept
273
335
  * ------------------------------------------------------------------ */
@@ -1 +1 @@
1
- {"version":3,"file":"app-layout.js","sourceRoot":"","sources":["../src/app-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-layout.js","sourceRoot":"","sources":["../src/app-layout.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":";AA4BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyFxD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAM5D"}
@@ -20,7 +20,9 @@ import { briefSupervisorEnv, 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 { APP_RUNNING_LINE, appLayout, insideAppBundle, runsAppCopy } from './app-layout.js';
23
+ import { APP_RUNNING_LINE, appLayout, insideAppBundle, linuxInstall, runsAppCopy } from './app-layout.js';
24
+ import { runtimeFacts, runtimeLines } from './runtime-info.js';
25
+ import { commandOwnedBy, desktopEntryPaths, linuxUnitSpec, ownDesktopEntries } from './linux-install.js';
24
26
  import { APP_BUNDLE_ID, SHIM_REFUSAL, SHIM_VAR, shimAction, shimDoctorLines, shimRefusesSupervise, shimsFor } from './cli-shim.js';
25
27
  const entry = fileURLToPath(import.meta.url);
26
28
  // <root>/packages/install/dist/launcher.js — the installation root is three up.
@@ -99,8 +101,17 @@ function isAppInstall(ctx) {
99
101
  function runsFromApp(status, ctx) {
100
102
  return runsAppCopy(status.installRoot, ctx.data);
101
103
  }
104
+ /**
105
+ * Is this the Linux install (scripts/install.sh)? Its `buddi` and its unit say
106
+ * so; a process they started with a trimmed environment (the uninstall the
107
+ * dashboard spawns) is told by the layout: on Linux there is no buddi.app, so
108
+ * a release under `<data>/releases` is the installer's.
109
+ */
110
+ function isLinuxInstall(ctx) {
111
+ return linuxInstall(process.env) || (process.platform === 'linux' && isAppInstall(ctx));
112
+ }
102
113
  function withApp(view, ctx) {
103
- return isAppInstall(ctx) ? { ...view, app: true } : view;
114
+ return isAppInstall(ctx) && !isLinuxInstall(ctx) ? { ...view, app: true } : view;
104
115
  }
105
116
  async function control(ctx, action = 'status') {
106
117
  return await ask(ctx, action === 'status' ? 'GET' : 'POST', `/${action}`);
@@ -233,6 +244,38 @@ async function startSupervisorBriefly(ctx, lockPid) {
233
244
  await new Promise(resolve => setTimeout(resolve, 500));
234
245
  }
235
246
  }
247
+ /**
248
+ * What the Linux install put where: `installer.json` (written by
249
+ * scripts/install.sh) names the command and whether it turned on lingering;
250
+ * the command is removed only while it still carries the installer's marker.
251
+ */
252
+ function linuxInstallParts(ctx, home) {
253
+ let recorded = {};
254
+ try {
255
+ recorded = JSON.parse(readFileSync(path.join(ctx.data, 'installer.json'), 'utf8'));
256
+ }
257
+ catch { /* an older install: the defaults */ }
258
+ const command = typeof recorded.command === 'string' && path.isAbsolute(recorded.command) ? recorded.command : path.join(home, '.local', 'bin', 'buddi');
259
+ // Ours only while it runs this data folder: another installation may have written the same bin folder since.
260
+ const owned = () => commandOwnedBy((() => { try {
261
+ return readFileSync(command, 'utf8');
262
+ }
263
+ catch {
264
+ return undefined;
265
+ } })(), ctx.data, realpathSync);
266
+ return {
267
+ runtime: path.join(ctx.data, 'node'),
268
+ releases: appLayout(process.env) ?? path.join(ctx.data, 'releases'),
269
+ ...(owned() ? { command, commandOwned: owned } : {}),
270
+ ...(recorded.linger === true ? { linger: true } : {}),
271
+ desktopEntries: ownDesktopEntries(desktopEntryPaths(process.env, home), ctx.data, file => { try {
272
+ return readFileSync(file, 'utf8');
273
+ }
274
+ catch {
275
+ return undefined;
276
+ } }),
277
+ };
278
+ }
236
279
  /**
237
280
  * `buddi uninstall`, in a packaged installation. The order and the refusals
238
281
  * are in `uninstall.ts`; this wires them to the real machine: the supervisor's
@@ -280,7 +323,9 @@ async function uninstall(ctx, rest) {
280
323
  const stored = await vault?.get('TELEGRAM_BOT_TOKEN').catch(() => null) ?? null;
281
324
  const token = stored ?? (ctx.env.TELEGRAM_BOT_TOKEN?.startsWith('<') ? undefined : ctx.env.TELEGRAM_BOT_TOKEN?.trim() || undefined);
282
325
  const app = dashboardAppOwnedBy(path.join(root, 'packages/cli/dist/main.js'), home);
326
+ const linuxParts = isLinuxInstall(ctx) ? linuxInstallParts(ctx, home) : undefined;
283
327
  return await uninstallPackaged(options, {
328
+ ...(linuxParts === undefined ? {} : { linuxInstall: linuxParts }),
284
329
  data: ctx.data, home, platform: process.platform, env: ctx.env, uid: process.getuid?.() ?? 501,
285
330
  exists: existsSync,
286
331
  remove: file => rm(file, { recursive: true, force: true }),
@@ -308,7 +353,7 @@ async function uninstall(ctx, rest) {
308
353
  },
309
354
  // Run by buddi.app itself (its uninstall route), the app is already on its way out: nothing to say about it.
310
355
  buddiApp: async () => {
311
- if (appLayout(process.env) !== undefined)
356
+ if (appLayout(process.env) !== undefined || isLinuxInstall(ctx))
312
357
  return undefined;
313
358
  const status = await control(ctx).catch(() => undefined);
314
359
  if (status !== undefined && runsFromApp(status, ctx))
@@ -624,11 +669,20 @@ async function launchService(ctx, temporary) {
624
669
  const unit = systemdUnitPath(ctx.data, ctx.env);
625
670
  const { buildSystemdUnit } = await import('@buddi/cli');
626
671
  await mkdir(path.dirname(unit), { recursive: true });
672
+ /*
673
+ * The Linux install runs `<data>/releases/current` with its bundled node,
674
+ * named through the link rather than resolved: an upgrade switches the
675
+ * link and systemd's restart runs the new release from the same unit.
676
+ */
677
+ const releases = isLinuxInstall(ctx) ? appLayout(process.env) ?? path.join(ctx.data, 'releases') : undefined;
678
+ const spec = releases === undefined
679
+ ? { nodePath: process.execPath, serveEntry: entry, environment: { BUDDI_DATA_DIR: ctx.data, [SERVICE_UNIT_VAR]: label, ...serviceEnvironment() }, path: [path.dirname(process.execPath), '/usr/local/bin', '/usr/bin', '/bin'].join(':') }
680
+ : linuxUnitSpec({ data: ctx.data, releases, label, exists: existsSync, extra: serviceEnvironment() });
627
681
  await writeFile(unit, buildSystemdUnit({
628
- label, nodePath: process.execPath, serveEntry: entry, args: ['supervise'],
629
- environment: { BUDDI_DATA_DIR: ctx.data, [SERVICE_UNIT_VAR]: label, ...serviceEnvironment() },
682
+ label, nodePath: spec.nodePath, serveEntry: spec.serveEntry, args: ['supervise'],
683
+ environment: spec.environment,
630
684
  workingDirectory: ctx.data,
631
- path: [path.dirname(process.execPath), '/usr/local/bin', '/usr/bin', '/bin'].join(':'),
685
+ path: spec.path,
632
686
  logFile: path.join(ctx.data, 'logs/supervisor.log'), errorFile: path.join(ctx.data, 'logs/supervisor.log'),
633
687
  }), { mode: 0o600 });
634
688
  try {
@@ -638,7 +692,10 @@ async function launchService(ctx, temporary) {
638
692
  const detail = error instanceof Error ? error.message : String(error);
639
693
  throw new Error(`systemd could not start the service (${detail.trim()}). The unit is at ${unit}. Run buddi --no-service to start it in the foreground instead.`);
640
694
  }
641
- console.log(`Background service: systemd user unit ${label} (survives logout only after: loginctl enable-linger ${ctx.env.USER ?? '$USER'})`);
695
+ // Lingering already on (the Linux installer turns it on when it may): nothing to add.
696
+ const lingering = await exec('loginctl', ['show-user', ctx.env.USER ?? os.userInfo().username, '-p', 'Linger', '--value'], { env: nativeEnvironment(ctx.env) })
697
+ .then(out => out.stdout.trim() === 'yes', () => false);
698
+ console.log(`Background service: systemd user unit ${label}${lingering ? '' : ` (survives logout only after: loginctl enable-linger ${ctx.env.USER ?? '$USER'})`}`);
642
699
  return;
643
700
  }
644
701
  if (!temporary && process.platform !== 'darwin')
@@ -771,7 +828,11 @@ async function run() {
771
828
  return entry;
772
829
  } })();
773
830
  console.log(`This buddi: ${invoked} (Node ${process.execPath})`);
774
- 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})`}`);
831
+ const linux = isLinuxInstall(ctx);
832
+ console.log(`From: ${insideAppBundle(root) ? `buddi.app (${root.slice(0, root.indexOf('.app/') + 4)})` : linux ? `the Linux install (${root})` : root.startsWith(path.join(ctx.data, 'releases') + path.sep) ? `an update buddi.app installed (${root})` : `npm (${root})`}`);
833
+ // Which Node and which npm: the bundled runtime, or the machine's (roadmap: no dependence on a host Node).
834
+ for (const line of runtimeLines(await runtimeFacts(), insideAppBundle(process.execPath) ? 'buddi.app' : linux ? 'the Linux install' : 'this installation'))
835
+ console.log(line);
775
836
  for (const line of shimDoctorLines({ home: os.homedir(), exists: existsSync, read: file => { try {
776
837
  return readFileSync(file, 'utf8');
777
838
  }
@@ -801,7 +862,7 @@ async function run() {
801
862
  * looking at a supervisor that is barely up. The file is the record.
802
863
  */
803
864
  const state = await readUpgradeState(ctx.data, await installedVersion(root));
804
- for (const line of upgradeDoctorLines(withApp(versionView(state), ctx), ctx.state?.phase))
865
+ for (const line of upgradeDoctorLines(withApp(versionView(state), ctx), ctx.state?.phase, { linux }))
805
866
  console.log(line);
806
867
  console.log(`Logs: ${path.join(ctx.data, 'logs')}`);
807
868
  return;
@@ -904,7 +965,7 @@ async function run() {
904
965
  throw new Error('buddi.app is not running buddi. Open buddi.app, then run buddi again.');
905
966
  if (!running) {
906
967
  if (!relaunched) {
907
- console.log('Starting Buddi. First run provisions a private Postgres cluster.');
968
+ console.log(firstRun ? 'Starting Buddi. First run provisions a private Postgres cluster.' : 'Starting buddi.');
908
969
  await launchService(ctx, args.includes('--no-service'));
909
970
  }
910
971
  const deadline = Date.now() + 120_000;
@@ -959,6 +1020,24 @@ async function run() {
959
1020
  console.log(gateway.browserLine(found));
960
1021
  if (!args.includes('--no-open') && process.platform === 'darwin')
961
1022
  await exec('open', [url], { env: nativeEnvironment(ctx.env) });
1023
+ /*
1024
+ * On a Linux desktop the link opens in the owner's browser, as `open` does
1025
+ * on a Mac: only from a graphical session (a terminal on the desktop has
1026
+ * DISPLAY or WAYLAND_DISPLAY; an SSH shell has neither, and a browser
1027
+ * popping up on a screen nobody is looking at helps no one).
1028
+ */
1029
+ if (!args.includes('--no-open') && process.platform === 'linux' && (process.env.DISPLAY || process.env.WAYLAND_DISPLAY)) {
1030
+ const opened = await new Promise(resolve => {
1031
+ // The OS context and the desktop session's own variables only: never the .env secrets or the vault key.
1032
+ const desktop = ['DISPLAY', 'WAYLAND_DISPLAY', 'XAUTHORITY', 'XDG_RUNTIME_DIR', 'DBUS_SESSION_BUS_ADDRESS', 'XDG_CURRENT_DESKTOP', 'XDG_SESSION_TYPE', 'XDG_SESSION_DESKTOP', 'DESKTOP_SESSION', 'XDG_DATA_DIRS', 'XDG_CONFIG_DIRS', 'XDG_DATA_HOME', 'XDG_CONFIG_HOME', 'BROWSER'];
1033
+ const env = { ...nativeEnvironment(process.env), ...Object.fromEntries(desktop.filter(key => typeof process.env[key] === 'string').map(key => [key, process.env[key]])) };
1034
+ const child = spawn('xdg-open', [url], { detached: true, stdio: 'ignore', env });
1035
+ child.once('error', () => resolve(false));
1036
+ child.once('spawn', () => { child.unref(); resolve(true); });
1037
+ });
1038
+ if (opened)
1039
+ console.log('Opened it in your browser.');
1040
+ }
962
1041
  return;
963
1042
  }
964
1043
  if (!wantsHelp && args[0] === 'backup' && (args[1] === 'restore' || args[1] === 'create')) {