@omega.js/desktop 0.52.0 → 0.53.0

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 (273) hide show
  1. package/README.md +17 -12
  2. package/dist/assets/css/core/_initialize.scss +1 -1
  3. package/dist/assets/js/core/app-shell.js +14 -15
  4. package/dist/assets/themes/_template/_theme.js +6 -6
  5. package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
  6. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
  7. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
  8. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
  9. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
  10. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
  11. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
  12. package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
  13. package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
  14. package/dist/assets/themes/base/_theme.js +4 -3
  15. package/dist/assets/themes/bootstrap/_theme.js +2 -2
  16. package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
  17. package/dist/assets/themes/classy/_theme.js +8 -6
  18. package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
  19. package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
  20. package/dist/assets/themes/neobrutalism/_theme.js +5 -5
  21. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
  22. package/dist/assets/themes/newsflash/_theme.js +6 -6
  23. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
  24. package/dist/build.js +87 -111
  25. package/dist/cli.js +1 -1
  26. package/dist/commands/build.js +2 -2
  27. package/dist/commands/cdp/capture.js +2 -2
  28. package/dist/commands/cdp/quit.js +2 -2
  29. package/dist/commands/cdp/relaunch.js +2 -2
  30. package/dist/commands/cdp/theme.js +1 -1
  31. package/dist/commands/clean.js +2 -2
  32. package/dist/commands/deploy.js +4 -4
  33. package/dist/commands/finalize-release.js +4 -4
  34. package/dist/commands/install.js +3 -3
  35. package/dist/commands/launch.js +2 -2
  36. package/dist/commands/lib/deploy-precheck.js +3 -3
  37. package/dist/commands/lib/ensure-target.js +6 -6
  38. package/dist/commands/package.js +2 -2
  39. package/dist/commands/publish.js +2 -2
  40. package/dist/commands/release.js +3 -3
  41. package/dist/commands/runner.js +11 -11
  42. package/dist/commands/sign-windows.js +5 -5
  43. package/dist/commands/test.js +4 -4
  44. package/dist/commands/update.js +2 -2
  45. package/dist/commands/validate-certs.js +4 -4
  46. package/dist/commands/version.js +3 -3
  47. package/dist/defaults/AGENTS.md +17 -8
  48. package/dist/defaults/config/omega.json5 +7 -7
  49. package/dist/defaults/hooks/build/post.js +1 -1
  50. package/dist/defaults/hooks/build/pre.js +1 -1
  51. package/dist/defaults/hooks/deploy/pre.js +1 -1
  52. package/dist/defaults/hooks/release/post.js +1 -1
  53. package/dist/defaults/hooks/release/pre.js +1 -1
  54. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  55. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  56. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  57. package/dist/defaults/src/integrations/context-menu/index.js +2 -2
  58. package/dist/defaults/src/integrations/menu/index.js +3 -3
  59. package/dist/defaults/src/integrations/tray/index.js +3 -3
  60. package/dist/defaults/src/main.js +3 -5
  61. package/dist/defaults/src/preload.js +3 -5
  62. package/dist/defaults/test/README.md +2 -2
  63. package/dist/gulp/main.js +9 -10
  64. package/dist/gulp/tasks/audit.js +7 -7
  65. package/dist/gulp/tasks/build-config.js +8 -8
  66. package/dist/gulp/tasks/bundle.js +16 -16
  67. package/dist/gulp/tasks/defaults.js +3 -3
  68. package/dist/gulp/tasks/distribute.js +2 -2
  69. package/dist/gulp/tasks/html.js +9 -9
  70. package/dist/gulp/tasks/package-quick.js +3 -3
  71. package/dist/gulp/tasks/package.js +3 -3
  72. package/dist/gulp/tasks/release.js +3 -3
  73. package/dist/gulp/tasks/sass.js +6 -6
  74. package/dist/gulp/tasks/serve.js +4 -4
  75. package/dist/hooks/notarize-artifacts.js +1 -1
  76. package/dist/hooks/notarize.js +1 -1
  77. package/dist/index.js +5 -8
  78. package/dist/lib/_environment-mixin.js +50 -0
  79. package/dist/lib/_lifecycle-mixin.js +45 -0
  80. package/dist/lib/analytics.js +33 -35
  81. package/dist/lib/app-state.js +14 -14
  82. package/dist/lib/auth-flow.js +18 -18
  83. package/dist/lib/auth-persistence.js +12 -12
  84. package/dist/lib/auth.js +421 -0
  85. package/dist/lib/auto-updater.js +49 -49
  86. package/dist/lib/context-menu.js +13 -13
  87. package/dist/lib/context.js +19 -19
  88. package/dist/lib/deep-link.js +34 -34
  89. package/dist/lib/fontawesome.js +5 -5
  90. package/dist/lib/ipc.js +4 -4
  91. package/dist/lib/menu.js +25 -25
  92. package/dist/lib/protocol.js +5 -5
  93. package/dist/lib/remote-config.js +22 -22
  94. package/dist/lib/remote-scripts.js +21 -21
  95. package/dist/lib/restart-manager/index.js +28 -28
  96. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  97. package/dist/lib/sign-helpers/sign-events.js +1 -1
  98. package/dist/lib/startup.js +18 -13
  99. package/dist/lib/storage.js +10 -10
  100. package/dist/lib/templating.js +16 -16
  101. package/dist/lib/theme.js +10 -10
  102. package/dist/lib/tray.js +27 -27
  103. package/dist/lib/usage.js +11 -11
  104. package/dist/lib/window-manager.js +26 -26
  105. package/dist/main.js +398 -483
  106. package/dist/preload.js +236 -176
  107. package/dist/renderer.js +417 -391
  108. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  109. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  110. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  111. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  112. package/dist/test/harness/boot-entry.js +22 -20
  113. package/dist/test/harness/main-entry.js +31 -30
  114. package/dist/test/harness/renderer-entry.js +5 -5
  115. package/dist/test/harness/renderer-preload.js +137 -141
  116. package/dist/test/index.js +10 -10
  117. package/dist/test/runner.js +2 -2
  118. package/dist/test/runners/boot.js +7 -6
  119. package/dist/test/runners/electron.js +3 -2
  120. package/dist/test/runners/render-event.js +2 -2
  121. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  122. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  123. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  124. package/dist/test/suites/boot/theme.test.js +13 -13
  125. package/dist/test/suites/build/audit.test.js +1 -1
  126. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  127. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  128. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  129. package/dist/test/suites/build/brand-scss.test.js +1 -1
  130. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  131. package/dist/test/suites/build/cli.test.js +2 -2
  132. package/dist/test/suites/build/config-schema.test.js +5 -5
  133. package/dist/test/suites/build/defaults-scaffold.test.js +2 -2
  134. package/dist/test/suites/build/deploy-hook.test.js +3 -3
  135. package/dist/test/suites/build/ensure-target.test.js +2 -2
  136. package/dist/test/suites/build/env-delivery.test.js +2 -2
  137. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  138. package/dist/test/suites/build/exports.test.js +9 -8
  139. package/dist/test/suites/build/get-config.test.js +4 -4
  140. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  141. package/dist/test/suites/build/merge-line-files.test.js +1 -1
  142. package/dist/test/suites/build/omega-shell.test.js +34 -2
  143. package/dist/test/suites/build/omega.test.js +350 -0
  144. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  145. package/dist/test/suites/build/runner.test.js +2 -2
  146. package/dist/test/suites/build/sentry.test.js +2 -2
  147. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  148. package/dist/test/suites/build/templating.test.js +3 -3
  149. package/dist/test/suites/build/test-stealth.test.js +7 -9
  150. package/dist/test/suites/build/url-helpers.test.js +55 -56
  151. package/dist/test/suites/build/validate-config.test.js +2 -2
  152. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  153. package/dist/test/suites/main/analytics.test.js +59 -59
  154. package/dist/test/suites/main/app-state.test.js +66 -66
  155. package/dist/test/suites/main/auth-flow.test.js +41 -41
  156. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  157. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  158. package/dist/test/suites/main/auth.test.js +336 -0
  159. package/dist/test/suites/main/auto-updater.test.js +134 -134
  160. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  161. package/dist/test/suites/main/context-menu.test.js +51 -50
  162. package/dist/test/suites/main/context.test.js +25 -25
  163. package/dist/test/suites/main/deep-link.test.js +74 -74
  164. package/dist/test/suites/main/fontawesome.test.js +27 -27
  165. package/dist/test/suites/main/ipc.test.js +35 -35
  166. package/dist/test/suites/main/menu.test.js +101 -100
  167. package/dist/test/suites/main/protocol.test.js +19 -19
  168. package/dist/test/suites/main/remote-config.test.js +63 -63
  169. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  170. package/dist/test/suites/main/request.test.js +71 -0
  171. package/dist/test/suites/main/restart-manager.test.js +33 -33
  172. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  173. package/dist/test/suites/main/startup.test.js +26 -26
  174. package/dist/test/suites/main/stealth-window.test.js +1 -1
  175. package/dist/test/suites/main/storage.test.js +25 -25
  176. package/dist/test/suites/main/theme.test.js +34 -34
  177. package/dist/test/suites/main/tray.test.js +79 -79
  178. package/dist/test/suites/main/url-helpers.test.js +133 -133
  179. package/dist/test/suites/main/usage.test.js +25 -25
  180. package/dist/test/suites/main/window-bounds.test.js +27 -27
  181. package/dist/test/suites/main/window-manager.test.js +44 -44
  182. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  183. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  184. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  185. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  186. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +27 -7
  187. package/dist/test/utils/extended-mode-warning.js +1 -1
  188. package/dist/utils/boot-harness.js +56 -0
  189. package/dist/utils/mode-helpers.js +2 -15
  190. package/dist/utils/ship-keys.js +3 -3
  191. package/dist/utils/signing-status.js +51 -0
  192. package/dist/utils/test-events.js +7 -0
  193. package/dist/utils/test-stealth.js +6 -6
  194. package/dist/utils/url-helpers.js +52 -42
  195. package/dist/utils/user-agent.js +44 -0
  196. package/dist/vendor/account/engine.js +3 -3
  197. package/dist/vendor/account/index.js +14 -45
  198. package/dist/vendor/account/resolve-account.js +44 -0
  199. package/dist/vendor/account/schema.js +1 -1
  200. package/dist/vendor/account/user.js +99 -0
  201. package/dist/vendor/config/client-config.js +1 -1
  202. package/dist/vendor/config/environment.js +11 -30
  203. package/dist/vendor/config/index.js +8 -11
  204. package/dist/vendor/config/load.js +1 -2
  205. package/dist/vendor/config/platforms.js +1 -1
  206. package/dist/vendor/config/retired-keys.js +2 -2
  207. package/dist/vendor/config/schema.js +5 -8
  208. package/dist/vendor/config/site-global.js +2 -3
  209. package/dist/vendor/config/validate.js +1 -2
  210. package/dist/vendor/config/winback.js +1 -1
  211. package/dist/vendor/devkit/actions-secrets.js +1 -1
  212. package/dist/vendor/devkit/attach-log-file.js +1 -1
  213. package/dist/vendor/devkit/build-json.js +1 -1
  214. package/dist/vendor/devkit/cli-router.js +3 -4
  215. package/dist/vendor/devkit/defaults-engine.js +9 -11
  216. package/dist/vendor/devkit/local.js +2 -0
  217. package/dist/vendor/devkit/merge-line-files.js +2 -3
  218. package/dist/vendor/devkit/test/runner-core.js +6 -6
  219. package/dist/vendor/monitoring/env.js +2 -2
  220. package/dist/vendor/monitoring/index.js +1 -1
  221. package/dist/vendor/monitoring/main.js +1 -1
  222. package/dist/vendor/monitoring/preload.js +1 -1
  223. package/dist/vendor/monitoring/renderer.js +1 -1
  224. package/docs/analytics.md +8 -8
  225. package/docs/app-state.md +19 -19
  226. package/docs/audit.md +4 -4
  227. package/docs/{client-bridge.md → auth.md} +88 -73
  228. package/docs/auto-updater.md +8 -8
  229. package/docs/boot-sequence.md +11 -6
  230. package/docs/build-system.md +1 -1
  231. package/docs/cdp-debugging.md +1 -1
  232. package/docs/common-mistakes.md +7 -7
  233. package/docs/config-schema.md +1 -1
  234. package/docs/context-menu.md +13 -13
  235. package/docs/context.md +11 -11
  236. package/docs/css.md +3 -9
  237. package/docs/deep-link.md +25 -25
  238. package/docs/environment-detection.md +16 -16
  239. package/docs/fontawesome.md +7 -5
  240. package/docs/hooks.md +8 -8
  241. package/docs/index.md +38 -27
  242. package/docs/ipc.md +10 -10
  243. package/docs/lib-modules.md +9 -9
  244. package/docs/logging.md +12 -14
  245. package/docs/menu.md +18 -18
  246. package/docs/remote-config.md +9 -9
  247. package/docs/remote-scripts.md +12 -12
  248. package/docs/restart-manager.md +8 -8
  249. package/docs/sentry.md +4 -4
  250. package/docs/shared/analytics.md +1 -1
  251. package/docs/shared/breaking-changes.md +79 -13
  252. package/docs/shared/config.md +17 -21
  253. package/docs/shared/logging.md +1 -1
  254. package/docs/shared/monitoring.md +5 -5
  255. package/docs/shared/testing.md +2 -2
  256. package/docs/shared/theming.md +1 -1
  257. package/docs/shared/translation.md +19 -10
  258. package/docs/startup.md +16 -16
  259. package/docs/storage.md +11 -11
  260. package/docs/templating.md +3 -3
  261. package/docs/test-boot-layer.md +12 -12
  262. package/docs/test-framework.md +17 -17
  263. package/docs/themes.md +7 -7
  264. package/docs/tooltips.md +2 -2
  265. package/docs/tray.md +31 -31
  266. package/docs/usage.md +7 -7
  267. package/docs/verts.md +1 -1
  268. package/docs/windows.md +22 -22
  269. package/package.json +3 -4
  270. package/dist/lib/client-bridge.js +0 -374
  271. package/dist/lib/logger.js +0 -4
  272. package/dist/test/suites/build/manager.test.js +0 -213
  273. package/dist/test/suites/main/client-bridge.test.js +0 -262
@@ -24,7 +24,7 @@
24
24
  // stop Kill every Runner.Listener.exe under RUNNER_HOME.
25
25
  // status Registered orgs, Startup shortcuts, live listeners.
26
26
  // uninstall Remove everything — legacy services and tasks, and the
27
- // electron-manager era's em-runner install, included.
27
+ // legacy em-runner install, included.
28
28
  // monitor Tail the JSONL signing event log, pretty-printed.
29
29
  //
30
30
  // Every subcommand except `monitor` refuses on non-Windows
@@ -35,8 +35,8 @@ const fs = require('fs');
35
35
  const os = require('os');
36
36
  const jetpack = require('fs-jetpack');
37
37
 
38
- const Manager = new (require('../build.js'));
39
- const logger = Manager.logger('runner');
38
+ const build = require('../build.js');
39
+ const logger = build.logger('runner');
40
40
 
41
41
  const RUNNER_LABELS = ['self-hosted', 'windows', 'ev-token'];
42
42
 
@@ -63,7 +63,7 @@ const attachLogFile = require('../utils/attach-log-file.js');
63
63
  const RUNNER_HOME = process.env.OMEGA_RUNNER_HOME || defaultRunnerHome();
64
64
  loadRunnerEnv({ home: RUNNER_HOME });
65
65
 
66
- // The electron-manager era of this command (`em runner`) laid the same design
66
+ // The legacy generation of this command (`em runner`) laid the same design
67
67
  // down under other names: the home was %LOCALAPPDATA%\em-runner (C:\actions-runners
68
68
  // before that), and the Startup shortcuts and the GitHub-side runners were
69
69
  // `em-runner-<host>-<org>`. An upgraded box still has all of it — live, and
@@ -207,7 +207,7 @@ async function install(options) {
207
207
  // the calling terminal at normal user privilege.
208
208
 
209
209
  // Idempotent by replacement: always tear down any prior install before starting —
210
- // the omega one, or the electron-manager one an upgraded box still runs.
210
+ // the omega one, or the legacy em-runner one an upgraded box still runs.
211
211
  if (jetpack.exists(home) || listLegacyRunnerHomes({ home }).length > 0 || listLegacyRunnerStartupShortcuts().length > 0) {
212
212
  logger.log(`Existing runner installation detected — uninstalling first for a clean re-install...`);
213
213
  try {
@@ -369,8 +369,8 @@ async function registerOrg(options) {
369
369
  // THIS host. Without this, re-running install accumulates orphaned runners (one per
370
370
  // failed/aborted install, one per host rename, etc.) which causes actions/runner to
371
371
  // auto-suffix the new runner's name (e.g. `-2872`) and breaks our ability to predict
372
- // service names. Match prefix is `omega-runner-<host>-<org>` — and the electron-manager
373
- // era's `em-runner-<host>-<org>`, the same box's older registration — so we never touch
372
+ // service names. Match prefix is `omega-runner-<host>-<org>` — and the legacy
373
+ // `em-runner-<host>-<org>`, the same box's older registration — so we never touch
374
374
  // user-created runners or runners from other hosts.
375
375
  //
376
376
  // We do this BEFORE fetching the registration token because the token is one-shot
@@ -900,7 +900,7 @@ async function statusServices(options) {
900
900
  }
901
901
  }
902
902
 
903
- // The electron-manager era's install (`em runner`): its home, its Startup
903
+ // The legacy install (`em runner`): its home, its Startup
904
904
  // shortcuts, and any listener still running out of it. None of it answers to
905
905
  // the omega names above, so it is named here and torn down by `uninstall`.
906
906
  const legacyHomes = listLegacyRunnerHomes({ home });
@@ -989,7 +989,7 @@ async function uninstall(options) {
989
989
  // handles asynchronously after stop).
990
990
  await removeRunnerHomeWithRetry(new Set(failed.map((f) => f.dir)), home);
991
991
 
992
- // The electron-manager era's install, when this box still has one: the same
992
+ // The legacy em-runner install, when this box still has one: the same
993
993
  // teardown, org by org, so its GitHub-side registrations come off too.
994
994
  const legacy = await uninstallLegacyRunnerInstalls(home);
995
995
  const stillRegistered = [...failed, ...legacy.failed];
@@ -1002,7 +1002,7 @@ async function uninstall(options) {
1002
1002
  logger.warn(` Their directories were kept — re-run 'npx omega runner uninstall' to retry, or delete them under each org's Settings → Actions → Runners.`);
1003
1003
  }
1004
1004
 
1005
- // Tear down the electron-manager era's runner install: its `em-runner-*`
1005
+ // Tear down the legacy runner install: its `em-runner-*`
1006
1006
  // Startup shortcuts, then each legacy home — deregister every org dir through
1007
1007
  // its own config.cmd, kill what runs out of it, remove it. A registration that
1008
1008
  // did not come off keeps its directory, exactly as the omega home's does.
@@ -1657,7 +1657,7 @@ function listRunnerStartupShortcuts(startupDir) {
1657
1657
  return listStartupShortcuts('omega-runner-', startupDir);
1658
1658
  }
1659
1659
 
1660
- // The electron-manager era's: `em-runner-<host>-<org>`, which `status` names
1660
+ // The legacy shortcuts: `em-runner-<host>-<org>`, which `status` names
1661
1661
  // and `uninstall` removes — never anything `start` would launch.
1662
1662
  function listLegacyRunnerStartupShortcuts(startupDir) {
1663
1663
  return listStartupShortcuts(LEGACY_RUNNER_PREFIX, startupDir);
@@ -21,8 +21,8 @@ const os = require('os');
21
21
  const jetpack = require('fs-jetpack');
22
22
  const { execute } = require('node-powertools');
23
23
 
24
- const Manager = new (require('../build.js'));
25
- const logger = Manager.logger('sign-windows');
24
+ const build = require('../build.js');
25
+ const logger = build.logger('sign-windows');
26
26
 
27
27
  // The box's own signing configuration (`<runner home>\.env`: the cert, the PIN,
28
28
  // signtool) is read before anything below looks at process.env, so a manual
@@ -90,9 +90,9 @@ async function runSignCommand(options) {
90
90
  return smokeTest();
91
91
  }
92
92
 
93
- const strategy = Manager.getWindowsSignStrategy();
93
+ const strategy = build.getWindowsSignStrategy();
94
94
 
95
- const config = Manager.getConfig();
95
+ const config = build.getConfig();
96
96
  const projectRoot = process.cwd();
97
97
 
98
98
  // Resolve --in and --out (CLI flags) → directories of unsigned / signed artifacts.
@@ -441,7 +441,7 @@ async function signWithSigntool(targets, inDir, outDir, deps) {
441
441
  // (mac/linux equivalents are produced by electron-builder during their publish step,
442
442
  // but Windows is split into a post-build sign job so we have to write the yml here).
443
443
  if (signedExes.length > 0) {
444
- const pkg = Manager.getPackage('project') || {};
444
+ const pkg = build.getPackage('project') || {};
445
445
  const version = pkg.version;
446
446
  if (!version) {
447
447
  log.warn('Could not determine version from package.json; skipping latest.yml generation.');
@@ -1,8 +1,8 @@
1
1
  // Libraries
2
2
  const path = require('path');
3
3
  const fs = require('fs');
4
- const Manager = new (require('../build.js'));
5
- const logger = Manager.logger('test');
4
+ const build = require('../build.js');
5
+ const logger = build.logger('test');
6
6
  const { run } = require('../test/runner.js');
7
7
  const attachLogFile = require('../utils/attach-log-file.js');
8
8
  const { EXTENDED_MODE_WARNING } = require('../test/utils/extended-mode-warning.js');
@@ -43,7 +43,7 @@ module.exports = async function (options) {
43
43
  // Extended mode — opt into tests that hit REAL external services (Firebase, analytics,
44
44
  // update feeds) instead of skipping them. Off by default so `npx omega test` stays fast and
45
45
  // offline-safe. The canonical signal is the unprefixed `TEST_EXTENDED_MODE` env var — the
46
- // SAME name across @omega.js/backend, @omega.js/extension, UJM, and @omega.js/desktop (cross-framework parity); `--extended` is the CLI
46
+ // SAME name on every framework (cross-framework parity); `--extended` is the CLI
47
47
  // shorthand. Once set on process.env it propagates to every spawned child (electron
48
48
  // main/renderer/boot, the gulp boot build) automatically via `{ ...process.env }`.
49
49
  const extended = options.extended === true
@@ -58,7 +58,7 @@ module.exports = async function (options) {
58
58
  // When @omega.js/desktop itself runs its own boot-layer tests (the cwd's package.json is @omega.js/desktop's), there's
59
59
  // no real consumer app to boot. Point the boot runner at the fixture under
60
60
  // dist/test/fixtures/consumer-app unless the caller has already set OMEGA_TEST_BOOT_PROJECT
61
- // explicitly. Mirrors BXM's OMEGA_TEST_BOOT_PROJECT / UJM's UJ_TEST_BOOT_PROJECT.
61
+ // explicitly.
62
62
  if (!process.env.OMEGA_TEST_BOOT_PROJECT) {
63
63
  try {
64
64
  const cwdPkg = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'));
@@ -5,8 +5,8 @@
5
5
  * non-quarantined, non-breaking set (`--major` opts into breaking) through
6
6
  * npu when present. The whole verb is the shared devkit implementation.
7
7
  */
8
- const Manager = new (require('../build.js'));
9
- const logger = Manager.logger('update');
8
+ const build = require('../build.js');
9
+ const logger = build.logger('update');
10
10
  const { runUpdate } = require('../vendor/devkit/update.js');
11
11
 
12
12
  module.exports = async function (options) {
@@ -38,8 +38,8 @@ const { certificateExpiry, EXPIRY_WARN_DAYS } = require('../vendor/devkit/certs.
38
38
  const { signingPathCandidates } = require('../vendor/devkit/signing-env.js');
39
39
  const { requiredWhenHolds } = require('../vendor/config/env-rules.js');
40
40
 
41
- const Manager = new (require('../build.js'));
42
- const logger = Manager.logger('validate-certs');
41
+ const build = require('../build.js');
42
+ const logger = build.logger('validate-certs');
43
43
 
44
44
  module.exports = async function (options) {
45
45
  options = options || {};
@@ -48,8 +48,8 @@ module.exports = async function (options) {
48
48
  logger.log('Validating signing prerequisites...');
49
49
 
50
50
  const platform = process.platform;
51
- const config = Manager.getConfig();
52
- const winStrategy = Manager.getWindowsSignStrategy();
51
+ const config = build.getConfig();
52
+ const winStrategy = build.getWindowsSignStrategy();
53
53
 
54
54
  const issues = [];
55
55
 
@@ -1,8 +1,8 @@
1
1
  // Libraries
2
- const Manager = new (require('../build.js'));
3
- const logger = Manager.logger('version');
2
+ const build = require('../build.js');
3
+ const logger = build.logger('version');
4
4
 
5
- const package = Manager.getPackage('main');
5
+ const package = build.getPackage('main');
6
6
 
7
7
  module.exports = async function (options) {
8
8
  logger.log(package.version);
@@ -19,8 +19,9 @@ This project consumes **OMEGA Desktop** (@omega.js/desktop), a comprehensive fra
19
19
 
20
20
  ## 🚨 READ @omega.js/client TOO
21
21
 
22
- **@omega.js/desktop ships `@omega.js/client` as a runtime singleton inside the renderer process.**
22
+ **@omega.js/desktop's renderer instance extends `@omega.js/client`'s base class.**
23
23
  - It powers auth, Firebase, reactive `data-omega-bind` directives, analytics, error tracking, and utilities (`escapeHTML`, etc.).
24
+ - `omega.auth.user` is always a `User`: `authenticated`, `plan`, `active`, `profile.displayName`; `omega.auth.listen()` delivers `{ user, denied }`.
24
25
  - Any task that touches auth flows, Firestore reads/writes, subscription resolution, push notifications, or DOM bindings means you are working with @omega.js/client as much as with @omega.js/desktop.
25
26
 
26
27
  **Required reading:**
@@ -71,28 +72,36 @@ npx omega install live # restore the published @omega.js/desktop from npm
71
72
 
72
73
  ## Per-context imports
73
74
 
75
+ Each entry exports ONE ready-made instance, `omega`; a consumer never writes `new`.
76
+
74
77
  ```js
75
78
  // src/main.js
76
- new (require('@omega.js/desktop/main'))().initialize(); // auto-loads JSON5 config
79
+ const omega = require('@omega.js/desktop/main');
80
+ omega.initialize().then(() => { const { logger, windows } = omega; }); // auto-loads JSON5 config
77
81
 
78
82
  // src/preload.js
79
- new (require('@omega.js/desktop/preload'))().initialize();
83
+ const omega = require('@omega.js/desktop/preload');
84
+ omega.initialize();
80
85
 
81
86
  // src/assets/js/components/main/index.js
82
- new (require('@omega.js/desktop/renderer'))().initialize();
87
+ import omega from '@omega.js/desktop/renderer';
88
+ omega.initialize().then(() => { const { logger, desktop } = omega; });
83
89
  ```
84
90
 
85
91
  ## Available APIs at runtime
86
92
 
87
- In main: `manager.storage`, `manager.ipc`, `manager.windows`, `manager.tray`, `manager.menu`, `manager.contextMenu`, `manager.startup`, `manager.appState`, `manager.deepLink`, `manager.autoUpdater`, `manager.sentry`, `manager.omega`, `manager.context`, `manager.usage`, `manager.remoteConfig`, `manager.analytics`, `manager.restartManager`.
93
+ In main, each a property of `omega`: `windows`, `tray`, `menu`, `contextMenu`, `ipc`, `storage`, `deepLink`, `autoUpdater`, `appState`, `startup`, `protocol`, `authFlow`, `theme`, `fontawesome`, `context`, `usage`, `remoteConfig`, `remoteScripts`, `restartManager`, `analytics`, `sentry`, `logger`.
94
+ - `omega.auth` is the signed-in account in main: `.user` (a `User`), `.listen()`, `.signOut()`, `.getIdToken()`, `.handleToken()`.
88
95
 
89
- In renderer: `window.desktop.storage`, `window.desktop.ipc`, `window.desktop.logger`, `window.OMEGA_BUILD_JSON.config` (the one `build.js` the view's shell loads).
96
+ In renderer: the @omega.js/client base (`omega.auth`, `omega.firestore`, `omega.bindings`, and `omega.storage`, the page store) plus `omega.desktop`, the preload's bridge to main.
97
+ - `omega.desktop.{ipc,storage,theme,fontawesome,autoUpdater,analytics,context,usage,remoteConfig}`; `omega.desktop.storage` is the app store, async over IPC.
98
+ - Config: `window.OMEGA_BUILD_JSON.config` (the one `build.js` the view's shell loads).
90
99
 
91
100
  ## Dependency resolution
92
101
 
93
102
  - **Do NOT install framework dependencies directly** (`firebase`, `fs-jetpack`, `@omega.js/client`, etc.). @omega.js/desktop's bundler resolves them through the framework's own `node_modules/`. If something doesn't resolve, the issue is in @omega.js/desktop's bundle task, not your `package.json`.
94
- - **@omega.js/client owns Firebase.** Never `require('firebase')` or `import('firebase/app')`. Use `require('@omega.js/client')` → `omega.auth()`, `omega.firestore()` in renderers. In main process, use `manager.omega` (the @omega.js/desktop bridge).
95
- - **`Manager.require(name)`** resolves from @omega.js/desktop's module context at runtime for unbundled code (gulp tasks, test fixtures).
103
+ - **@omega.js/client owns Firebase.** Never `require('firebase')` or `import('firebase/app')`. In renderers use `omega.auth` and `omega.firestore` on the renderer instance. In the main process, use `omega.auth` (the @omega.js/desktop bridge).
104
+ - **`omega.require(name)`** resolves from @omega.js/desktop's module context at runtime for unbundled code (gulp tasks, test fixtures).
96
105
 
97
106
  ## Testing
98
107
 
@@ -71,7 +71,7 @@
71
71
  // App/cloud platform role (provider-discriminated). `config` is the Firebase web
72
72
  // SDK config — copy directly from Firebase Console → Project Settings → SDK setup
73
73
  // (Config option). Same shape every OMEGA target reads.
74
- // Empty config {} disables Firebase Auth in the renderer (client-bridge logs a warn).
74
+ // Empty config {} disables Firebase Auth in the renderer (the auth lib logs a warn).
75
75
  cloud: {
76
76
  provider: 'firebase',
77
77
  config: {
@@ -87,7 +87,7 @@
87
87
  },
88
88
 
89
89
  // Appearance — the app's DEFAULT theme. 'system' follows the OS preference live;
90
- // 'light'/'dark' are explicit overrides. A user's runtime choice (manager.theme.set
90
+ // 'light'/'dark' are explicit overrides. A user's runtime choice (omega.theme.set
91
91
  // or the [data-omega-theme-set] controls) persists in storage and wins over this on
92
92
  // every boot. See docs/themes.md.
93
93
  theme: {
@@ -234,8 +234,8 @@
234
234
  // src/integrations/tray/index.js
235
235
  // src/integrations/menu/index.js
236
236
  // src/integrations/context-menu/index.js
237
- // To disable at runtime: call `manager.tray.disable()` / `manager.menu.disable()` /
238
- // `manager.contextMenu.disable()` from your main entry. Idempotent.
237
+ // To disable at runtime: call `omega.tray.disable()` / `omega.menu.disable()` /
238
+ // `omega.contextMenu.disable()` from your main entry. Idempotent.
239
239
 
240
240
  // Startup behavior — two independent knobs.
241
241
  //
@@ -263,7 +263,7 @@
263
263
  },
264
264
  },
265
265
  // No `windows` block needed — @omega.js/desktop no longer auto-creates windows. Your main.js
266
- // calls `manager.windows.create('main', { width: 1280, height: 800, ... })` when
266
+ // calls `omega.windows.create('main', { width: 1280, height: 800, ... })` when
267
267
  // you want UI to surface. Defaults baked in:
268
268
  // main → { width: 1024, height: 720, hideOnClose: true, view: 'main' }
269
269
  // any other → { width: 800, height: 600, hideOnClose: false, view: name }
@@ -282,9 +282,9 @@
282
282
  },
283
283
  // Deep links: scheme is automatically `<brand.id>://...`. Built-in routes:
284
284
  // auth/token → @omega.js/client auth token handoff
285
- // app/show → manager.windows.show(query.window || 'main')
285
+ // app/show → omega.windows.show(query.window || 'main')
286
286
  // app/quit → app.quit()
287
- // Add custom routes at runtime: manager.deepLink.on('my-route', (ctx) => {...}) in main.
287
+ // Add custom routes at runtime: omega.deepLink.on('my-route', (ctx) => {...}) in main.
288
288
 
289
289
  // "Hot config" — JSON document fetched from the brand site so app behavior
290
290
  // can be flipped without shipping a new build (e.g. force-update gate, ads
@@ -5,5 +5,5 @@
5
5
  // auxiliary files (changelog, license bundling, etc.).
6
6
 
7
7
  module.exports = async (ctx) => {
8
- // ctx = { manager, mode, projectRoot, distDir }
8
+ // ctx = { build, mode, projectRoot, distDir }
9
9
  };
@@ -5,5 +5,5 @@
5
5
  // the bundle / build-config tasks see it.
6
6
 
7
7
  module.exports = async (ctx) => {
8
- // ctx = { manager, mode, projectRoot }
8
+ // ctx = { build, mode, projectRoot }
9
9
  };
@@ -6,5 +6,5 @@
6
6
  // that must happen before the publish reaches the release repo.
7
7
 
8
8
  module.exports = async (ctx) => {
9
- // ctx = { manager, projectRoot, mode }
9
+ // ctx = { build, projectRoot, mode }
10
10
  };
@@ -5,5 +5,5 @@
5
5
  // changelog page on your marketing site, sending notification emails.
6
6
 
7
7
  module.exports = async (ctx) => {
8
- // ctx = { manager, projectRoot, artifacts } // artifacts: array of release/ paths
8
+ // ctx = { build, projectRoot, artifacts } // artifacts: array of release/ paths
9
9
  };
@@ -5,5 +5,5 @@
5
5
  // previous release before overwriting.
6
6
 
7
7
  module.exports = async (ctx) => {
8
- // ctx = { manager, projectRoot }
8
+ // ctx = { build, projectRoot }
9
9
  };
@@ -1,10 +1,8 @@
1
1
  // About window renderer entry.
2
- const Manager = require('@omega.js/desktop/renderer');
2
+ import omega from '@omega.js/desktop/renderer';
3
3
 
4
- const manager = new Manager();
5
-
6
- manager.initialize()
4
+ omega.initialize()
7
5
  .then(() => {
8
- const { logger } = manager;
6
+ const { logger } = omega;
9
7
  logger.log('About window initialized!');
10
8
  });
@@ -1,11 +1,9 @@
1
1
  // Main window renderer entry.
2
- const Manager = require('@omega.js/desktop/renderer');
2
+ import omega from '@omega.js/desktop/renderer';
3
3
 
4
- const manager = new Manager();
5
-
6
- manager.initialize()
4
+ omega.initialize()
7
5
  .then(() => {
8
- const { logger, ipc, storage, omega } = manager;
6
+ const { logger, desktop } = omega;
9
7
 
10
8
  // Add your main-window UI logic here.
11
9
  // ...
@@ -1,10 +1,8 @@
1
1
  // Settings window renderer entry.
2
- const Manager = require('@omega.js/desktop/renderer');
2
+ import omega from '@omega.js/desktop/renderer';
3
3
 
4
- const manager = new Manager();
5
-
6
- manager.initialize()
4
+ omega.initialize()
7
5
  .then(() => {
8
- const { logger } = manager;
6
+ const { logger } = omega;
9
7
  logger.log('Settings window initialized!');
10
8
  });
@@ -1,6 +1,6 @@
1
1
  // Context-menu definition. Called by @omega.js/desktop EVERY time the user right-clicks.
2
2
  //
3
- // `manager` — the running @omega.js/desktop Manager.
3
+ // `omega`: the running @omega.js/desktop main-process instance.
4
4
  // `menu` — per-event builder API + id-path API.
5
5
  // `params` — Electron's context-menu params (selectionText, isEditable, linkURL,
6
6
  // srcURL, mediaType, editFlags, x, y, etc.).
@@ -17,7 +17,7 @@
17
17
  // reload — always
18
18
  // inspect, toggle-devtools — dev mode only
19
19
 
20
- module.exports = ({ manager, menu, params, webContents }) => {
20
+ module.exports = ({ omega, menu, params, webContents }) => {
21
21
  // Start from @omega.js/desktop's default template. Don't add anything by default — leave it
22
22
  // identical to what the framework would do without this file.
23
23
  menu.useDefaults();
@@ -1,6 +1,6 @@
1
1
  // Application menu definition. Called by @omega.js/desktop during boot.
2
2
  //
3
- // `manager` — the running @omega.js/desktop Manager.
3
+ // `omega`: the running @omega.js/desktop main-process instance.
4
4
  // `menu` — builder API + id-path API (find/update/remove/insertAfter/etc.).
5
5
  // `defaults` — the platform-aware default template (an array you can mutate manually if needed).
6
6
  //
@@ -18,7 +18,7 @@
18
18
  // development/{open-exe-folder, open-user-data, open-logs, open-app-config,
19
19
  // test-error} (dev only)
20
20
 
21
- module.exports = ({ manager, menu, defaults }) => {
21
+ module.exports = ({ omega, menu, defaults }) => {
22
22
  // Start from the platform-appropriate default template. Don't add anything
23
23
  // by default — leave it identical to what the framework would do without
24
24
  // this file. Add your own customizations below.
@@ -34,7 +34,7 @@ module.exports = ({ manager, menu, defaults }) => {
34
34
  // menu.insertAfter('main/check-for-updates', {
35
35
  // id: 'main/account',
36
36
  // label: 'Account...',
37
- // click: () => manager.windows.show('account'),
37
+ // click: () => omega.windows.show('account'),
38
38
  // });
39
39
  //
40
40
  // // Rename an existing item:
@@ -1,6 +1,6 @@
1
1
  // Tray definition. Called by @omega.js/desktop during boot.
2
2
  //
3
- // `manager` — the running @omega.js/desktop Manager.
3
+ // `omega`: the running @omega.js/desktop main-process instance.
4
4
  // `tray` — builder API + id-path API (find/update/remove/insertAfter/etc.).
5
5
  //
6
6
  // @omega.js/desktop auto-resolves the tray icon by convention (most specific wins):
@@ -19,7 +19,7 @@
19
19
  //
20
20
  // This file is OPTIONAL — delete it and @omega.js/desktop still ships a working tray.
21
21
 
22
- module.exports = ({ manager, tray }) => {
22
+ module.exports = ({ omega, tray }) => {
23
23
  // Use @omega.js/desktop's default template + auto-resolved icon + auto-resolved tooltip.
24
24
  tray.useDefaults();
25
25
 
@@ -36,7 +36,7 @@ module.exports = ({ manager, tray }) => {
36
36
  // tray.insertAfter('open', {
37
37
  // id: 'dashboard',
38
38
  // label: 'Open Dashboard',
39
- // click: () => manager.windows.show('dashboard'),
39
+ // click: () => omega.windows.show('dashboard'),
40
40
  // });
41
41
  //
42
42
  // // Rename an existing item:
@@ -1,11 +1,9 @@
1
1
  // Main-process entry. Config is auto-loaded from config/omega.json5 (resolved for the desktop target).
2
- const Manager = require('@omega.js/desktop/main');
2
+ const omega = require('@omega.js/desktop/main');
3
3
 
4
- const manager = new Manager();
5
-
6
- manager.initialize()
4
+ omega.initialize()
7
5
  .then(() => {
8
- const { logger, ipc, storage, windows, tray, menu, contextMenu, deepLink, autoUpdater, omega, appState, sentry, startup } = manager;
6
+ const { logger, ipc, storage, windows, tray, menu, contextMenu, deepLink, autoUpdater, auth, appState, sentry, startup } = omega;
9
7
 
10
8
  // ─────────────────────────────────────────────────────────────────────────────
11
9
  // 1. Create the main window
@@ -1,11 +1,9 @@
1
1
  // Preload entry. Exposes window.desktop to the renderer via contextBridge.
2
- const Manager = require('@omega.js/desktop/preload');
2
+ const omega = require('@omega.js/desktop/preload');
3
3
 
4
- const manager = new Manager();
5
-
6
- manager.initialize()
4
+ omega.initialize()
7
5
  .then(() => {
8
- const { logger } = manager;
6
+ const { logger } = omega;
9
7
 
10
8
  // Add any extra contextBridge-exposed APIs here. Be careful — anything you expose runs
11
9
  // in the renderer's context, so don't pass through privileged Node APIs without care.
@@ -23,13 +23,13 @@ Every feature ships with tests at every layer it has a surface in — logic (`bu
23
23
 
24
24
  ```js
25
25
  // test/build/my-feature.test.js
26
- const Manager = require('@omega.js/desktop/build');
26
+ const build = require('@omega.js/desktop/build');
27
27
 
28
28
  module.exports = {
29
29
  layer: 'build',
30
30
  description: 'the project config carries a brand id',
31
31
  run: (ctx) => {
32
- ctx.expect(Manager.getConfig().brand.id).toBeTruthy();
32
+ ctx.expect(build.getConfig().brand.id).toBeTruthy();
33
33
  },
34
34
  };
35
35
  ```
package/dist/gulp/main.js CHANGED
@@ -3,17 +3,17 @@
3
3
  delete process.env.ELECTRON_RUN_AS_NODE;
4
4
 
5
5
  // Libraries
6
- const Manager = new (require('../build.js'));
7
- const logger = Manager.logger('main');
8
- const argv = Manager.getArguments();
6
+ const build = require('../build.js');
7
+ const logger = build.logger('main');
8
+ const argv = build.getArguments();
9
9
  const { series, parallel } = require('gulp');
10
10
  const path = require('path');
11
11
  const glob = require('glob').globSync;
12
12
 
13
13
  // Load packages
14
- const package = Manager.getPackage('main');
15
- const project = Manager.getPackage('project');
16
- const projectRoot = Manager.getRootPath('project');
14
+ const package = build.getPackage('main');
15
+ const project = build.getPackage('project');
16
+ const projectRoot = build.getRootPath('project');
17
17
 
18
18
  // Resolve the .env cascade from the project root (shell > app > brand > company)
19
19
  // and derive the signing paths the brand's signing tree implies. gulp is its own
@@ -40,7 +40,7 @@ if (sanitizedSigningKeys.length) {
40
40
  const attachLogFile = require('../utils/attach-log-file.js');
41
41
  const logFileEnv = process.env.OMEGA_LOG_FILE;
42
42
  if (logFileEnv !== 'false' && logFileEnv !== '0') {
43
- const defaultName = Manager.isBuildMode() ? 'build.log' : 'dev.log';
43
+ const defaultName = build.isBuildMode() ? 'build.log' : 'dev.log';
44
44
  const logPath = (logFileEnv && logFileEnv !== 'true') ? logFileEnv : path.join(projectRoot, 'logs', defaultName);
45
45
  attachLogFile(logPath);
46
46
  logger.log(`Logs tee'd to ${logPath}`);
@@ -54,7 +54,7 @@ logger.log('Starting...', argv);
54
54
  // Auto-load tasks from src/gulp/tasks/*.js
55
55
  const tasks = glob('*.js', { cwd: `${__dirname}/tasks` });
56
56
 
57
- // Globals (parity with BXM)
57
+ // Globals (the same pair @omega.js/extension's gulp sets)
58
58
  global.tasks = {};
59
59
  global.websocket = null;
60
60
 
@@ -72,8 +72,7 @@ global.tasks = exports;
72
72
  const runConsumerHook = require('../utils/run-consumer-hook.js');
73
73
  function makeHookTask(name) {
74
74
  const fn = async () => {
75
- const Manager = new (require('../build.js'));
76
- await runConsumerHook(name, { manager: Manager, projectRoot: process.cwd(), mode: process.env.OMEGA_BUILD_MODE === 'true' ? 'production' : 'development' });
75
+ await runConsumerHook(name, { build, projectRoot: process.cwd(), mode: process.env.OMEGA_BUILD_MODE === 'true' ? 'production' : 'development' });
77
76
  };
78
77
  // Set displayName for nicer gulp logs.
79
78
  Object.defineProperty(fn, 'name', { value: `hook:${name.replace('/', ':')}` });
@@ -19,14 +19,14 @@
19
19
 
20
20
  const path = require('path');
21
21
  const jetpack = require('fs-jetpack');
22
- const Manager = new (require('../../build.js'));
22
+ const build = require('../../build.js');
23
23
  const { validateConfig, releasesRepo, hasOmegaConfig, loadConfig } = require('../../vendor/config/index.js');
24
24
 
25
- const logger = Manager.logger('audit');
25
+ const logger = build.logger('audit');
26
26
 
27
27
  module.exports = function audit(done) {
28
28
  const cwd = process.cwd();
29
- const config = Manager.getConfig();
29
+ const config = build.getConfig();
30
30
  const errors = [];
31
31
  const warnings = [];
32
32
 
@@ -45,11 +45,11 @@ module.exports = function audit(done) {
45
45
  // while reporting `0 warnings` ([#911](https://github.com/Omega-JS-Stack/omega/issues/911)).
46
46
  // A key the schema does not declare is what a typo looks like, and the
47
47
  // consumer has to see it at build time. They come off the LOAD, the same
48
- // resolution `Manager.getConfig()` runs: loadConfig judges what the brand
48
+ // resolution `build.getConfig()` runs: loadConfig judges what the brand
49
49
  // AUTHORED, before the loader fills its own resolved facts (`company.name`
50
50
  // and friends) and before the build attaches `environment`.
51
51
  const { warnings: configWarnings } = hasOmegaConfig(cwd)
52
- ? loadConfig(cwd, 'desktop', { environment: Manager.getEnvironment() })
52
+ ? loadConfig(cwd, 'desktop', { environment: build.getEnvironment() })
53
53
  : { warnings: [] };
54
54
  warnings.push(...configWarnings);
55
55
 
@@ -57,14 +57,14 @@ module.exports = function audit(done) {
57
57
  // tied to the build pipeline, not the config shape).
58
58
  fileMustExist('src/main.js', 'src/main.js');
59
59
  fileMustExist('src/preload.js', 'src/preload.js');
60
- if (Manager.isPublishMode() || Manager.isBuildMode()) {
60
+ if (build.isPublishMode() || build.isBuildMode()) {
61
61
  // Icon must exist when packaging — dev runs fine with the default Electron icon.
62
62
  fileMustExist(config.brand.images?.icon, 'config.brand.images.icon');
63
63
  }
64
64
  // Publishing needs an ADDRESS for the releases repo, and no repo name is ever
65
65
  // typed: @omega.js/config's releasesRepo derives `<brand.id>-releases` under
66
66
  // the brand's org, so only a missing org (or brand.id) leaves it unaddressable.
67
- if (Manager.isPublishMode() && config.releases?.enabled !== false && !releasesRepo(config)) {
67
+ if (build.isPublishMode() && config.releases?.enabled !== false && !releasesRepo(config)) {
68
68
  errors.push('the releases repo is unaddressable: set repo.org and brand.id. The repo is always "<brand.id>-releases" under that org');
69
69
  }
70
70