@omega.js/desktop 0.51.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 (289) hide show
  1. package/README.md +18 -13
  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 +145 -48
  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/.github/workflows/build.yml +2 -0
  48. package/dist/defaults/AGENTS.md +17 -8
  49. package/dist/defaults/config/omega.json5 +7 -7
  50. package/dist/defaults/hooks/build/post.js +1 -1
  51. package/dist/defaults/hooks/build/pre.js +1 -1
  52. package/dist/defaults/hooks/deploy/pre.js +1 -1
  53. package/dist/defaults/hooks/release/post.js +1 -1
  54. package/dist/defaults/hooks/release/pre.js +1 -1
  55. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  56. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  57. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  58. package/dist/defaults/src/integrations/context-menu/index.js +2 -2
  59. package/dist/defaults/src/integrations/menu/index.js +3 -3
  60. package/dist/defaults/src/integrations/tray/index.js +3 -3
  61. package/dist/defaults/src/main.js +3 -5
  62. package/dist/defaults/src/preload.js +3 -5
  63. package/dist/defaults/test/README.md +2 -2
  64. package/dist/gulp/main.js +9 -10
  65. package/dist/gulp/tasks/audit.js +7 -7
  66. package/dist/gulp/tasks/build-config.js +8 -8
  67. package/dist/gulp/tasks/bundle.js +16 -16
  68. package/dist/gulp/tasks/defaults.js +3 -3
  69. package/dist/gulp/tasks/distribute.js +2 -2
  70. package/dist/gulp/tasks/html.js +9 -9
  71. package/dist/gulp/tasks/package-quick.js +3 -3
  72. package/dist/gulp/tasks/package.js +3 -3
  73. package/dist/gulp/tasks/release.js +3 -3
  74. package/dist/gulp/tasks/sass.js +6 -6
  75. package/dist/gulp/tasks/serve.js +4 -4
  76. package/dist/hooks/notarize-artifacts.js +1 -1
  77. package/dist/hooks/notarize.js +1 -1
  78. package/dist/index.js +5 -8
  79. package/dist/lib/_environment-mixin.js +50 -0
  80. package/dist/lib/_lifecycle-mixin.js +45 -0
  81. package/dist/lib/analytics.js +33 -35
  82. package/dist/lib/app-state.js +14 -14
  83. package/dist/lib/auth-flow.js +18 -18
  84. package/dist/lib/auth-persistence.js +12 -12
  85. package/dist/lib/auth.js +421 -0
  86. package/dist/lib/auto-updater.js +49 -49
  87. package/dist/lib/context-menu.js +13 -13
  88. package/dist/lib/context.js +19 -19
  89. package/dist/lib/deep-link.js +34 -34
  90. package/dist/lib/fontawesome.js +5 -5
  91. package/dist/lib/ipc.js +4 -4
  92. package/dist/lib/menu.js +25 -25
  93. package/dist/lib/protocol.js +5 -5
  94. package/dist/lib/remote-config.js +22 -22
  95. package/dist/lib/remote-scripts.js +21 -21
  96. package/dist/lib/restart-manager/index.js +28 -28
  97. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  98. package/dist/lib/sign-helpers/sign-events.js +1 -1
  99. package/dist/lib/startup.js +18 -13
  100. package/dist/lib/storage.js +10 -10
  101. package/dist/lib/templating.js +16 -16
  102. package/dist/lib/theme.js +10 -10
  103. package/dist/lib/tray.js +27 -27
  104. package/dist/lib/usage.js +11 -11
  105. package/dist/lib/window-manager.js +26 -26
  106. package/dist/main.js +398 -483
  107. package/dist/preload.js +236 -176
  108. package/dist/renderer.js +417 -391
  109. package/dist/runner/job-started.js +1 -1
  110. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  111. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  112. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  113. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  114. package/dist/test/harness/boot-entry.js +22 -20
  115. package/dist/test/harness/main-entry.js +31 -30
  116. package/dist/test/harness/renderer-entry.js +5 -5
  117. package/dist/test/harness/renderer-preload.js +137 -141
  118. package/dist/test/index.js +10 -10
  119. package/dist/test/runner.js +2 -2
  120. package/dist/test/runners/boot.js +7 -6
  121. package/dist/test/runners/electron.js +3 -2
  122. package/dist/test/runners/render-event.js +2 -2
  123. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  124. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  125. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  126. package/dist/test/suites/boot/theme.test.js +13 -13
  127. package/dist/test/suites/build/audit.test.js +1 -1
  128. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  129. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  130. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  131. package/dist/test/suites/build/brand-scss.test.js +1 -1
  132. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  133. package/dist/test/suites/build/cli.test.js +2 -2
  134. package/dist/test/suites/build/config-schema.test.js +5 -5
  135. package/dist/test/suites/build/defaults-scaffold.test.js +2 -2
  136. package/dist/test/suites/build/deploy-hook.test.js +3 -3
  137. package/dist/test/suites/build/ensure-target.test.js +2 -2
  138. package/dist/test/suites/build/env-delivery.test.js +2 -2
  139. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  140. package/dist/test/suites/build/exports.test.js +9 -8
  141. package/dist/test/suites/build/get-config.test.js +4 -4
  142. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  143. package/dist/test/suites/build/merge-line-files.test.js +1 -1
  144. package/dist/test/suites/build/omega-shell.test.js +34 -2
  145. package/dist/test/suites/build/omega.test.js +350 -0
  146. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  147. package/dist/test/suites/build/runner.test.js +612 -5
  148. package/dist/test/suites/build/sentry.test.js +2 -2
  149. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  150. package/dist/test/suites/build/templating.test.js +3 -3
  151. package/dist/test/suites/build/test-stealth.test.js +7 -9
  152. package/dist/test/suites/build/url-helpers.test.js +55 -56
  153. package/dist/test/suites/build/validate-config.test.js +2 -2
  154. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  155. package/dist/test/suites/main/analytics.test.js +59 -59
  156. package/dist/test/suites/main/app-state.test.js +66 -66
  157. package/dist/test/suites/main/auth-flow.test.js +41 -41
  158. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  159. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  160. package/dist/test/suites/main/auth.test.js +336 -0
  161. package/dist/test/suites/main/auto-updater.test.js +134 -134
  162. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  163. package/dist/test/suites/main/context-menu.test.js +51 -50
  164. package/dist/test/suites/main/context.test.js +25 -25
  165. package/dist/test/suites/main/deep-link.test.js +74 -74
  166. package/dist/test/suites/main/fontawesome.test.js +27 -27
  167. package/dist/test/suites/main/ipc.test.js +35 -35
  168. package/dist/test/suites/main/menu.test.js +101 -100
  169. package/dist/test/suites/main/protocol.test.js +19 -19
  170. package/dist/test/suites/main/remote-config.test.js +63 -63
  171. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  172. package/dist/test/suites/main/request.test.js +71 -0
  173. package/dist/test/suites/main/restart-manager.test.js +33 -33
  174. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  175. package/dist/test/suites/main/startup.test.js +26 -26
  176. package/dist/test/suites/main/stealth-window.test.js +1 -1
  177. package/dist/test/suites/main/storage.test.js +25 -25
  178. package/dist/test/suites/main/theme.test.js +34 -34
  179. package/dist/test/suites/main/tray.test.js +79 -79
  180. package/dist/test/suites/main/url-helpers.test.js +133 -133
  181. package/dist/test/suites/main/usage.test.js +25 -25
  182. package/dist/test/suites/main/window-bounds.test.js +27 -27
  183. package/dist/test/suites/main/window-manager.test.js +44 -44
  184. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  185. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  186. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  187. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  188. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +27 -7
  189. package/dist/test/utils/extended-mode-warning.js +1 -1
  190. package/dist/utils/boot-harness.js +56 -0
  191. package/dist/utils/mode-helpers.js +2 -15
  192. package/dist/utils/ship-keys.js +3 -3
  193. package/dist/utils/signing-status.js +51 -0
  194. package/dist/utils/test-events.js +7 -0
  195. package/dist/utils/test-stealth.js +6 -6
  196. package/dist/utils/url-helpers.js +52 -42
  197. package/dist/utils/user-agent.js +44 -0
  198. package/dist/vendor/account/engine.js +3 -3
  199. package/dist/vendor/account/index.js +14 -45
  200. package/dist/vendor/account/resolve-account.js +44 -0
  201. package/dist/vendor/account/schema.js +1 -1
  202. package/dist/vendor/account/user.js +99 -0
  203. package/dist/vendor/config/client-config.js +1 -1
  204. package/dist/vendor/config/environment.js +11 -30
  205. package/dist/vendor/config/index.js +13 -12
  206. package/dist/vendor/config/load.js +1 -2
  207. package/dist/vendor/config/platforms.js +1 -1
  208. package/dist/vendor/config/repo.js +24 -0
  209. package/dist/vendor/config/retired-keys.js +2 -2
  210. package/dist/vendor/config/schema.js +5 -8
  211. package/dist/vendor/config/site-global.js +2 -3
  212. package/dist/vendor/config/validate.js +1 -2
  213. package/dist/vendor/config/winback.js +1 -1
  214. package/dist/vendor/devkit/actions-secrets.js +1 -1
  215. package/dist/vendor/devkit/attach-log-file.js +1 -1
  216. package/dist/vendor/devkit/brand-version.js +162 -1
  217. package/dist/vendor/devkit/build-json.js +1 -1
  218. package/dist/vendor/devkit/cli-router.js +3 -4
  219. package/dist/vendor/devkit/defaults-engine.js +9 -11
  220. package/dist/vendor/devkit/deploy.js +64 -4
  221. package/dist/vendor/devkit/git-remote.js +78 -1
  222. package/dist/vendor/devkit/local.js +53 -3
  223. package/dist/vendor/devkit/lockfile.js +127 -0
  224. package/dist/vendor/devkit/merge-line-files.js +2 -3
  225. package/dist/vendor/devkit/pack-local.js +4 -7
  226. package/dist/vendor/devkit/preludes/origin-heal.js +35 -49
  227. package/dist/vendor/devkit/target-secrets.js +34 -45
  228. package/dist/vendor/devkit/test/runner-core.js +6 -6
  229. package/dist/vendor/monitoring/env.js +2 -2
  230. package/dist/vendor/monitoring/index.js +1 -1
  231. package/dist/vendor/monitoring/main.js +1 -1
  232. package/dist/vendor/monitoring/preload.js +1 -1
  233. package/dist/vendor/monitoring/renderer.js +1 -1
  234. package/docs/analytics.md +8 -8
  235. package/docs/app-state.md +19 -19
  236. package/docs/audit.md +4 -4
  237. package/docs/{client-bridge.md → auth.md} +88 -73
  238. package/docs/auto-updater.md +8 -8
  239. package/docs/boot-sequence.md +11 -6
  240. package/docs/build-system.md +1 -1
  241. package/docs/cdp-debugging.md +1 -1
  242. package/docs/common-mistakes.md +7 -7
  243. package/docs/config-schema.md +1 -1
  244. package/docs/context-menu.md +13 -13
  245. package/docs/context.md +11 -11
  246. package/docs/css.md +3 -9
  247. package/docs/deep-link.md +25 -25
  248. package/docs/environment-detection.md +16 -16
  249. package/docs/fontawesome.md +7 -5
  250. package/docs/hooks.md +8 -8
  251. package/docs/index.md +39 -28
  252. package/docs/ipc.md +10 -10
  253. package/docs/lib-modules.md +9 -9
  254. package/docs/logging.md +12 -14
  255. package/docs/menu.md +18 -18
  256. package/docs/releasing.md +4 -2
  257. package/docs/remote-config.md +9 -9
  258. package/docs/remote-scripts.md +12 -12
  259. package/docs/restart-manager.md +8 -8
  260. package/docs/runner.md +12 -10
  261. package/docs/sentry.md +4 -4
  262. package/docs/shared/analytics.md +1 -1
  263. package/docs/shared/brands.md +1 -1
  264. package/docs/shared/breaking-changes.md +79 -13
  265. package/docs/shared/config.md +24 -21
  266. package/docs/shared/deploys.md +30 -7
  267. package/docs/shared/local-dev.md +5 -3
  268. package/docs/shared/logging.md +1 -1
  269. package/docs/shared/monitoring.md +5 -5
  270. package/docs/shared/testing.md +2 -2
  271. package/docs/shared/theming.md +1 -1
  272. package/docs/shared/translation.md +19 -10
  273. package/docs/signing.md +1 -1
  274. package/docs/startup.md +16 -16
  275. package/docs/storage.md +11 -11
  276. package/docs/templating.md +3 -3
  277. package/docs/test-boot-layer.md +12 -12
  278. package/docs/test-framework.md +17 -17
  279. package/docs/themes.md +7 -7
  280. package/docs/tooltips.md +2 -2
  281. package/docs/tray.md +31 -31
  282. package/docs/usage.md +7 -7
  283. package/docs/verts.md +1 -1
  284. package/docs/windows.md +22 -22
  285. package/package.json +3 -4
  286. package/dist/lib/client-bridge.js +0 -374
  287. package/dist/lib/logger.js +0 -4
  288. package/dist/test/suites/build/manager.test.js +0 -213
  289. package/dist/test/suites/main/client-bridge.test.js +0 -262
package/dist/lib/tray.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // @omega.js/desktop looks for the consumer's `src/integrations/tray/index.js` and calls it with a builder API:
4
4
  //
5
5
  // // src/integrations/tray/index.js
6
- // module.exports = ({ manager, tray }) => {
6
+ // module.exports = ({ omega, tray }) => {
7
7
  // tray.icon('src/assets/icons/tray-Template.png');
8
8
  // tray.tooltip('MyApp');
9
9
  //
@@ -11,11 +11,11 @@
11
11
  // tray.useDefaults();
12
12
  //
13
13
  // // ...or build from scratch:
14
- // tray.item({ id: 'open', label: 'Open', click: () => manager.windows.show('main') });
14
+ // tray.item({ id: 'open', label: 'Open', click: () => omega.windows.show('main') });
15
15
  // tray.separator();
16
16
  // tray.item({ id: 'quit', label: 'Quit', click: () => require('electron').app.quit() });
17
17
  //
18
- // // Mutate by id (works during definition AND at runtime via `manager.tray.*`):
18
+ // // Mutate by id (works during definition AND at runtime via `omega.tray.*`):
19
19
  // tray.insertAfter('open', { id: 'preferences', label: 'Preferences...', click: ... });
20
20
  // tray.update('check-for-updates', { label: 'Updates' });
21
21
  // tray.remove('website');
@@ -28,12 +28,12 @@
28
28
  // tray.useDefaults() — populate with @omega.js/desktop's default template
29
29
  // tray.clear() — start over
30
30
  //
31
- // Id-path API (during definition AND at runtime via `manager.tray.*`):
31
+ // Id-path API (during definition AND at runtime via `omega.tray.*`):
32
32
  // .find / .has / .update / .remove / .enable / .show / .hide /
33
33
  // .insertBefore / .insertAfter / .appendTo
34
34
  //
35
35
  // Items support dynamic labels (function) and dynamic enabled/visible/checked.
36
- // Call `manager.tray.refresh()` after mutating state to re-render the menu.
36
+ // Call `omega.tray.refresh()` after mutating state to re-render the menu.
37
37
  //
38
38
  // Default template ids (flat — no `tray/` prefix; the lib namespace is implicit):
39
39
  // title — disabled label showing the app name
@@ -42,7 +42,7 @@
42
42
  // website — opens brand.url in external browser (only if configured)
43
43
  // quit — quits the app
44
44
  //
45
- // Disabling at runtime: call `manager.tray.disable()` from anywhere in main —
45
+ // Disabling at runtime: call `omega.tray.disable()` from anywhere in main,
46
46
  // idempotent, tears down any existing Tray + clears items. There is no config
47
47
  // flag for this; default is "enabled, looks at the conventional path."
48
48
 
@@ -56,7 +56,7 @@ const logger = new LoggerLite('tray');
56
56
 
57
57
  const tray = {
58
58
  _initialized: false,
59
- _manager: null,
59
+ _omega: null,
60
60
  _tray: null, // electron Tray instance
61
61
  _items: [], // raw item descriptors
62
62
  _icon: null, // resolved abs path
@@ -64,15 +64,15 @@ const tray = {
64
64
  _electron: null,
65
65
  _definitionFn: null, // consumer's exported fn (or null)
66
66
 
67
- initialize(manager) {
67
+ initialize(omega) {
68
68
  if (tray._initialized) {
69
69
  return;
70
70
  }
71
71
 
72
- tray._manager = manager;
72
+ tray._omega = omega;
73
73
 
74
74
  if (tray._disabled) {
75
- logger.log('initialize — disabled via manager.tray.disable() called pre-init');
75
+ logger.log('initialize — disabled via omega.tray.disable() called pre-init');
76
76
  tray._initialized = true;
77
77
  return;
78
78
  }
@@ -87,7 +87,7 @@ const tray = {
87
87
 
88
88
  if (fs.existsSync(absPath)) {
89
89
  const loadConsumerFile = require('../utils/load-consumer-file.js');
90
- const loaded = loadConsumerFile(absPath, logger);
90
+ const loaded = loadConsumerFile(absPath);
91
91
  if (typeof loaded === 'function') {
92
92
  tray._definitionFn = loaded;
93
93
  } else if (loaded != null) {
@@ -103,7 +103,7 @@ const tray = {
103
103
 
104
104
  if (tray._definitionFn) {
105
105
  try {
106
- tray._definitionFn({ manager, tray: builder });
106
+ tray._definitionFn({ omega, tray: builder });
107
107
  } catch (e) {
108
108
  logger.error('tray definition fn threw:', e);
109
109
  }
@@ -116,14 +116,14 @@ const tray = {
116
116
  // back to sensible framework defaults so a consumer file is truly optional —
117
117
  // someone with no `src/integrations/tray/index.js` still gets a working tray.
118
118
  if (!tray._icon) tray._icon = tray._defaultIconPath();
119
- if (!tray._tooltip) tray._tooltip = manager.config.app?.productName || manager.config.brand.name;
119
+ if (!tray._tooltip) tray._tooltip = omega.config.app?.productName || omega.config.brand.name;
120
120
 
121
121
  // Create the Tray now that items/icon/tooltip are in place.
122
122
  tray._render();
123
123
 
124
124
  // Reflect current auto-updater state into the tray check-for-updates item if present.
125
- if (manager.autoUpdater._updateTrayItem) {
126
- manager.autoUpdater._updateTrayItem();
125
+ if (omega.autoUpdater._updateTrayItem) {
126
+ omega.autoUpdater._updateTrayItem();
127
127
  }
128
128
 
129
129
  logger.log(`initialize — items=${tray._items.length} icon=${tray._icon || '(none)'}`);
@@ -207,9 +207,9 @@ const tray = {
207
207
 
208
208
  // Default template — id-tagged so consumers can target each item.
209
209
  _defaultTemplate() {
210
- const m = tray._manager;
211
- const productName = m.config.app?.productName || m.config.brand.name;
212
- const brandUrl = m.config.brand.url || null;
210
+ const omega = tray._omega;
211
+ const productName = omega.config.app?.productName || omega.config.brand.name;
212
+ const brandUrl = omega.config.brand.url || null;
213
213
 
214
214
  const items = [
215
215
  { id: 'title', label: productName, enabled: false },
@@ -218,17 +218,17 @@ const tray = {
218
218
  id: 'open',
219
219
  label: `Open ${productName}`,
220
220
  click: () => {
221
- m.windows.show('main');
221
+ omega.windows.show('main');
222
222
  },
223
223
  },
224
224
  {
225
225
  id: 'check-for-updates',
226
226
  label: 'Check for Updates...',
227
227
  click: () => {
228
- if (!m || !m.autoUpdater) return;
229
- const status = m.autoUpdater.getStatus();
230
- if (status.code === 'downloaded') m.autoUpdater.installNow();
231
- else m.autoUpdater.checkNow({ userInitiated: true });
228
+ if (!omega || !omega.autoUpdater) return;
229
+ const status = omega.autoUpdater.getStatus();
230
+ if (status.code === 'downloaded') omega.autoUpdater.installNow();
231
+ else omega.autoUpdater.checkNow({ userInitiated: true });
232
232
  },
233
233
  },
234
234
  ];
@@ -241,7 +241,7 @@ const tray = {
241
241
  const { shell } = require('electron');
242
242
  // Route through getWebsiteUrl() so dev runs open localhost:4000 instead
243
243
  // of punching out to the live brand site.
244
- const safe = sanitizeURL(m.getWebsiteUrl());
244
+ const safe = sanitizeURL(omega.getWebsiteUrl());
245
245
  if (safe) shell.openExternal(safe);
246
246
  },
247
247
  });
@@ -349,7 +349,7 @@ const tray = {
349
349
  throw new Error('tray.define: fn must be a function');
350
350
  }
351
351
  tray._items = [];
352
- fn({ manager: tray._manager, tray: tray._buildBuilder() });
352
+ fn({ omega: tray._omega, tray: tray._buildBuilder() });
353
353
  tray._render();
354
354
  },
355
355
 
@@ -391,7 +391,7 @@ const tray = {
391
391
  // Disable the tray entirely. Idempotent. Safe to call before OR after initialize:
392
392
  // - Pre-init: marks the lib as disabled, initialize() short-circuits.
393
393
  // - Post-init: tears down the live Tray + clears items.
394
- // No way to re-enable after disable() — call manager.tray.define() if you want a fresh
394
+ // No way to re-enable after disable(): call omega.tray.define() if you want a fresh
395
395
  // tray, then it'll re-render on next refresh.
396
396
  disable() {
397
397
  tray._disabled = true;
@@ -405,7 +405,7 @@ const tray = {
405
405
  isDisabled() { return Boolean(tray._disabled); },
406
406
  };
407
407
 
408
- // Mix the id-path API onto the singleton so `manager.tray.update(...)` works at runtime.
408
+ // Mix the id-path API onto the singleton so `omega.tray.update(...)` works at runtime.
409
409
  Object.assign(tray, buildIdApi({
410
410
  getItems: () => tray._items,
411
411
  render: () => tray._render(),
package/dist/lib/usage.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Usage tracking — opens (= launchCount) + hours-of-use accumulation.
2
2
  // Sister of legacy @omega.js/desktop's Usage library, but without the
3
- // electron-store-cwd hack (uses our manager.storage instead).
3
+ // electron-store-cwd hack (uses our omega.storage instead).
4
4
  //
5
5
  // Persisted shape (storage.usage):
6
6
  // {
@@ -37,17 +37,17 @@ const STORAGE_KEY = 'usage';
37
37
 
38
38
  const usage = {
39
39
  _initialized: false,
40
- _manager: null,
40
+ _omega: null,
41
41
  _sessionStart: null,
42
42
  _snapshot: null,
43
43
 
44
- initialize(manager) {
44
+ initialize(omega) {
45
45
  if (usage._initialized) return;
46
46
  usage._initialized = true;
47
- usage._manager = manager;
47
+ usage._omega = omega;
48
48
  usage._sessionStart = Date.now();
49
49
 
50
- const previous = manager.storage.get(STORAGE_KEY) || {};
50
+ const previous = omega.storage.get(STORAGE_KEY) || {};
51
51
  const now = new Date();
52
52
 
53
53
  // Step 2: credit prior session if it ended cleanly.
@@ -69,15 +69,15 @@ const usage = {
69
69
  lastQuitAt: null, // cleared; will be set on quit
70
70
  };
71
71
 
72
- manager.storage.set(STORAGE_KEY, next);
72
+ omega.storage.set(STORAGE_KEY, next);
73
73
  usage._snapshot = next;
74
74
 
75
75
  // Wire the quit handler — single registration, idempotent if re-init runs.
76
76
  usage._wireQuitHandler();
77
77
 
78
78
  // IPC for renderer access to usage stats.
79
- manager.ipc.unhandle('desktop:usage:get');
80
- manager.ipc.handle('desktop:usage:get', () => usage.toJSON());
79
+ omega.ipc.unhandle('desktop:usage:get');
80
+ omega.ipc.handle('desktop:usage:get', () => usage.toJSON());
81
81
 
82
82
  logger.log(`usage initialized — opens=${next.opens} hoursTotal=${next.hoursTotal.toFixed(2)} installedAt=${next.installedAt}`);
83
83
  },
@@ -87,9 +87,9 @@ const usage = {
87
87
  usage._quitHandlerWired = true;
88
88
  const { app } = require('electron');
89
89
  app.on('before-quit', () => {
90
- const cur = usage._manager.storage.get(STORAGE_KEY) || usage._snapshot || {};
90
+ const cur = usage._omega.storage.get(STORAGE_KEY) || usage._snapshot || {};
91
91
  cur.lastQuitAt = new Date().toISOString();
92
- usage._manager.storage.set(STORAGE_KEY, cur);
92
+ usage._omega.storage.set(STORAGE_KEY, cur);
93
93
  });
94
94
  },
95
95
 
@@ -129,7 +129,7 @@ const usage = {
129
129
  // Test teardown.
130
130
  shutdown() {
131
131
  usage._initialized = false;
132
- usage._manager = null;
132
+ usage._omega = null;
133
133
  usage._sessionStart = null;
134
134
  usage._snapshot = null;
135
135
  // Note: we don't unwire `app.on('before-quit')` — Electron has no listener
@@ -1,8 +1,8 @@
1
1
  // Window manager — named-window registry over BrowserWindow.
2
2
  //
3
3
  // **Lazy creation.** @omega.js/desktop does NOT auto-create any windows. Consumers call
4
- // `manager.windows.create('main', opts?)` from their main.js when they want UI
5
- // to surface — typically right after `manager.initialize()` resolves, but may
4
+ // `omega.windows.create('main', opts?)` from their main.js when they want UI
5
+ // to surface — typically right after `omega.initialize()` resolves, but may
6
6
  // be deferred (e.g. agent apps that only show UI when the user clicks the tray).
7
7
  //
8
8
  // Defaults baked in (no JSON config required):
@@ -10,8 +10,8 @@
10
10
  // any other → { width: 800, height: 600, hideOnClose: false, view: name }
11
11
  //
12
12
  // Override at the call site:
13
- // manager.windows.create('main', { width: 1280, height: 800 });
14
- // manager.windows.create('settings', { width: 600, height: 480 });
13
+ // omega.windows.create('main', { width: 1280, height: 800 });
14
+ // omega.windows.create('settings', { width: 600, height: 480 });
15
15
  //
16
16
  // `view` resolves to `<projectRoot>/dist/views/<view>/index.html`.
17
17
  //
@@ -37,13 +37,13 @@ const SAVE_DEBOUNCE_MS = 250;
37
37
 
38
38
  const windowManager = {
39
39
  _initialized: false,
40
- _manager: null,
40
+ _omega: null,
41
41
  _windows: {}, // name -> BrowserWindow
42
42
  _saveTimers: {}, // name -> debounce timer
43
43
  _electron: null,
44
44
 
45
- initialize(manager) {
46
- windowManager._manager = manager;
45
+ initialize(omega) {
46
+ windowManager._omega = omega;
47
47
  windowManager._initialized = true;
48
48
 
49
49
  windowManager._electron = require('electron');
@@ -83,15 +83,15 @@ const windowManager = {
83
83
  // can configure entirely from main.js without touching JSON. Falls through to
84
84
  // createNamed which does the heavy lifting.
85
85
  async create(name, overrides) {
86
- return windowManager.createNamed(name, windowManager._manager, overrides);
86
+ return windowManager.createNamed(name, windowManager._omega, overrides);
87
87
  },
88
88
 
89
89
  // Create or focus a named window. Args:
90
90
  // name — registry key + default view name + storage key for bounds.
91
- // manager — Manager instance (defaults to the one passed to initialize()).
91
+ // omega : the omega instance (defaults to the one passed to initialize()).
92
92
  // overrides — optional opts that take precedence over config.windows.<name>.
93
- async createNamed(name, manager, overrides) {
94
- manager = manager || windowManager._manager;
93
+ async createNamed(name, omega, overrides) {
94
+ omega = omega || windowManager._omega;
95
95
  overrides = overrides || {};
96
96
 
97
97
  // Single-instance dedup
@@ -119,7 +119,7 @@ const windowManager = {
119
119
  const defaults = isMain
120
120
  ? { width: 1024, height: 720, view: 'main', hideOnClose: true }
121
121
  : { width: 800, height: 600, view: name, hideOnClose: false };
122
- const jsonConfig = manager.config.windows?.[name] || {};
122
+ const jsonConfig = omega.config.windows?.[name] || {};
123
123
  const config = { ...defaults, ...jsonConfig, ...overrides };
124
124
 
125
125
  logger.log(`createNamed: building "${name}" (show=${config.show !== false}, hideOnClose=${config.hideOnClose})`);
@@ -141,7 +141,7 @@ const windowManager = {
141
141
  };
142
142
  if (typeof config.x === 'number') defaultBounds.x = config.x;
143
143
  if (typeof config.y === 'number') defaultBounds.y = config.y;
144
- const savedBounds = persistBounds ? windowManager._loadBounds(name, manager) : null;
144
+ const savedBounds = persistBounds ? windowManager._loadBounds(name, omega) : null;
145
145
  const bounds = savedBounds
146
146
  ? windowManager._clampToDisplays(savedBounds)
147
147
  : defaultBounds;
@@ -190,7 +190,7 @@ const windowManager = {
190
190
  show: false, // flicker prevention — show on ready-to-show
191
191
  // Tray-only apps suppress all taskbar/dock representation for their windows.
192
192
  skipTaskbar,
193
- title: config.title || manager.config.app?.productName || name,
193
+ title: config.title || omega.config.app?.productName || name,
194
194
  backgroundColor: config.backgroundColor || '#ffffff',
195
195
  ...titleBarOpts,
196
196
  webPreferences: {
@@ -218,7 +218,7 @@ const windowManager = {
218
218
  }
219
219
 
220
220
  // Attach the context-menu listener so right-click works in this window.
221
- manager.contextMenu.attach(win.webContents);
221
+ omega.contextMenu.attach(win.webContents);
222
222
 
223
223
  // ALL event listeners must attach BEFORE `await loadFile()` below — otherwise the
224
224
  // window can be in the registry but missing close/resize/etc. listeners during the
@@ -265,9 +265,9 @@ const windowManager = {
265
265
  // Consumers override per-window via config.windows.<name>.hideOnClose.
266
266
  //
267
267
  // Three escape hatches let a close-event ACTUALLY close:
268
- // 1. `manager._allowQuit` — set by manager.quit({ force: true }) and by the
268
+ // 1. `omega._allowQuit` — set by omega.quit({ force: true }) and by the
269
269
  // auto-updater before installNow().
270
- // 2. `manager._isQuitting` — set by app.on('before-quit'), so any quit path
270
+ // 2. `omega._isQuitting` — set by app.on('before-quit'), so any quit path
271
271
  // Electron knows about (Cmd+Q, role:'quit' menu, app.quit() programmatic,
272
272
  // OS shutdown) flows through naturally.
273
273
  // 3. `win._emForceClose` — per-window override for one-off "close this for
@@ -275,8 +275,8 @@ const windowManager = {
275
275
  const hideOnClose = config.hideOnClose === true;
276
276
 
277
277
  win.on('close', (event) => {
278
- const allowQuit = manager._allowQuit === true;
279
- const isQuitting = manager._isQuitting === true;
278
+ const allowQuit = omega._allowQuit === true;
279
+ const isQuitting = omega._isQuitting === true;
280
280
  const force = win._emForceClose === true;
281
281
 
282
282
  if (hideOnClose && !allowQuit && !isQuitting && !force) {
@@ -332,7 +332,7 @@ const windowManager = {
332
332
  const win = windowManager._windows[name];
333
333
  if (!win || win.isDestroyed()) return;
334
334
 
335
- const storage = windowManager._manager.storage;
335
+ const storage = windowManager._omega.storage;
336
336
 
337
337
  // Use getNormalBounds when maximized/fullscreen so we restore to the underlying size on next launch.
338
338
  const isMaximized = win.isMaximized();
@@ -353,8 +353,8 @@ const windowManager = {
353
353
  storage.set(`windows.${name}.bounds`, bounds);
354
354
  },
355
355
 
356
- _loadBounds(name, manager) {
357
- const storage = (manager || windowManager._manager).storage;
356
+ _loadBounds(name, omega) {
357
+ const storage = (omega || windowManager._omega).storage;
358
358
 
359
359
  const saved = storage.get(`windows.${name}.bounds`);
360
360
  if (!saved || typeof saved !== 'object') return null;
@@ -431,7 +431,7 @@ const windowManager = {
431
431
  // focus app-wide) is suppressed separately — main.js flips the app to the
432
432
  // accessory activation policy under the same predicate.
433
433
  _isStealth() {
434
- return require('../utils/test-stealth.js')(windowManager._manager);
434
+ return require('../utils/test-stealth.js')(windowManager._omega);
435
435
  },
436
436
 
437
437
  // Surface a window: normal show (+ dock) — or stealth-show in Testing mode.
@@ -470,9 +470,9 @@ const windowManager = {
470
470
  // alone. No-op off macOS. Wired to every named window's 'hide' event.
471
471
  _maybeRehideDock() {
472
472
  if (process.platform !== 'darwin') return;
473
- const manager = windowManager._manager;
474
- if (manager.startup.getMode() !== 'hidden') return;
475
- if (manager._isQuitting === true) return;
473
+ const omega = windowManager._omega;
474
+ if (omega.startup.getMode() !== 'hidden') return;
475
+ if (omega._isQuitting === true) return;
476
476
 
477
477
  const anyVisible = Object.values(windowManager._windows)
478
478
  .some((win) => !win.isDestroyed() && win.isVisible());