@omega.js/desktop 0.1.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 (818) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +166 -0
  3. package/bin/omega +2 -0
  4. package/bin/omega-desktop +2 -0
  5. package/bin/omg +2 -0
  6. package/dist/assets/css/core/_fontawesome.scss +146 -0
  7. package/dist/assets/css/core/_initialize.scss +38 -0
  8. package/dist/assets/css/omega-desktop.scss +39 -0
  9. package/dist/assets/css/shell/_index.scss +207 -0
  10. package/dist/assets/css/tokens/_index.scss +166 -0
  11. package/dist/assets/js/bootstrap.bundle.js +1 -0
  12. package/dist/assets/js/core/app-shell.js +136 -0
  13. package/dist/assets/themes/_template/README.md +115 -0
  14. package/dist/assets/themes/_template/_config.scss +60 -0
  15. package/dist/assets/themes/_template/_theme.js +14 -0
  16. package/dist/assets/themes/_template/_theme.scss +28 -0
  17. package/dist/assets/themes/_template/css/base/_root.scss +19 -0
  18. package/dist/assets/themes/_template/css/components/_components.scss +23 -0
  19. package/dist/assets/themes/base/README.md +5 -0
  20. package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
  21. package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
  22. package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
  23. package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
  24. package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
  25. package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
  26. package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
  27. package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
  28. package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
  29. package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
  30. package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
  31. package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
  32. package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
  33. package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
  34. package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
  35. package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
  36. package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
  37. package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
  38. package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
  39. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
  40. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
  41. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
  42. package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
  43. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
  44. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
  45. package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
  46. package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
  47. package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
  48. package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
  49. package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
  50. package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
  51. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
  52. package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
  53. package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
  54. package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
  55. package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
  56. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
  57. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
  58. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
  59. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
  60. package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
  61. package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
  62. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
  63. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
  64. package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
  65. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
  66. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
  67. package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
  68. package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
  69. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
  70. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
  71. package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
  72. package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
  73. package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
  74. package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
  75. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
  76. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
  77. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
  78. package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
  79. package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
  80. package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
  81. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
  82. package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
  83. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
  84. package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
  85. package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
  86. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
  87. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
  88. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
  89. package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
  90. package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
  91. package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
  92. package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
  93. package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
  94. package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
  95. package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
  96. package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
  97. package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
  98. package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
  99. package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
  100. package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
  101. package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
  102. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
  103. package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
  104. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
  105. package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
  106. package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
  107. package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
  108. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
  109. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
  110. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
  111. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
  112. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
  113. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
  114. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
  115. package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
  116. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
  117. package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
  118. package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
  119. package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
  120. package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
  121. package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
  122. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
  123. package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
  124. package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
  125. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
  126. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
  127. package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
  128. package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
  129. package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
  130. package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
  131. package/dist/assets/themes/base/_theme.js +13 -0
  132. package/dist/assets/themes/base/_theme.scss +4 -0
  133. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  134. package/dist/assets/themes/bootstrap/_theme.scss +11 -0
  135. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  136. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  137. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  138. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  139. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  140. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  141. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  142. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  143. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  144. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  145. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  146. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  147. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  148. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  149. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  150. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  151. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  152. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  153. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  154. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  155. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  156. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  157. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  158. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  159. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  160. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  161. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  162. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  163. package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
  164. package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
  165. package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
  166. package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
  167. package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
  168. package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
  169. package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
  170. package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
  171. package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
  172. package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
  173. package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
  174. package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
  175. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  176. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  177. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  178. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  179. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  180. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  181. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  182. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  183. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  184. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  185. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  186. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  187. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  188. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  189. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  190. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  191. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  192. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  193. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  194. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  195. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  196. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  197. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  198. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  199. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  200. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  201. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  202. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  203. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  204. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  205. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  206. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  207. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  208. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  209. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  210. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  211. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  212. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  213. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  214. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  215. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  216. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  217. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  218. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  219. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  220. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  221. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  222. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  223. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  224. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  225. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  226. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  227. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  228. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  229. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  230. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  231. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  232. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  233. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  234. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  235. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  236. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  237. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  238. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  239. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  240. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  241. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  242. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  243. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  244. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  245. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  246. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  247. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  248. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  249. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  250. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  251. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  252. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  253. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  254. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  255. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  256. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  257. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  258. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  259. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  260. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  261. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  262. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  263. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  264. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  265. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  266. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  267. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  268. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  269. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  270. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  271. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  272. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  273. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  274. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  275. package/dist/assets/themes/classy/README.md +89 -0
  276. package/dist/assets/themes/classy/_config.scss +245 -0
  277. package/dist/assets/themes/classy/_theme.js +31 -0
  278. package/dist/assets/themes/classy/_theme.scss +57 -0
  279. package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
  280. package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
  281. package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
  282. package/dist/assets/themes/classy/css/base/_root.scss +113 -0
  283. package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
  284. package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
  285. package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
  286. package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
  287. package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
  288. package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
  289. package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
  290. package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
  291. package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
  292. package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
  293. package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
  294. package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
  295. package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
  296. package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
  297. package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
  298. package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
  299. package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
  300. package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
  301. package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
  302. package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
  303. package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
  304. package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
  305. package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
  306. package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
  307. package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
  308. package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
  309. package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
  310. package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
  311. package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
  312. package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
  313. package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
  314. package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
  315. package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
  316. package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
  317. package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
  318. package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
  319. package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
  320. package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
  321. package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
  322. package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
  323. package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
  324. package/dist/assets/themes/neobrutalism/README.md +118 -0
  325. package/dist/assets/themes/neobrutalism/_config.scss +139 -0
  326. package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
  327. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
  328. package/dist/assets/themes/neobrutalism/_theme.js +24 -0
  329. package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
  330. package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
  331. package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
  332. package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
  333. package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
  334. package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
  335. package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
  336. package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
  337. package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
  338. package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
  339. package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
  340. package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
  341. package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
  342. package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
  343. package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
  344. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
  345. package/dist/assets/themes/newsflash/README.md +117 -0
  346. package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
  347. package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
  348. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
  349. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
  350. package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
  351. package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
  352. package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
  353. package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
  354. package/dist/assets/themes/newsflash/_config.scss +147 -0
  355. package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
  356. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
  357. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
  358. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
  359. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
  360. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
  361. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
  362. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
  363. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
  364. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
  365. package/dist/assets/themes/newsflash/_theme.js +24 -0
  366. package/dist/assets/themes/newsflash/_theme.scss +70 -0
  367. package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
  368. package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
  369. package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
  370. package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
  371. package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
  372. package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
  373. package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
  374. package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
  375. package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
  376. package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
  377. package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
  378. package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
  379. package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
  380. package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
  381. package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
  382. package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
  383. package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
  384. package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
  385. package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
  386. package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
  387. package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
  388. package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
  389. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
  390. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
  391. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
  392. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
  393. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
  394. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
  395. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
  396. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
  397. package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
  398. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
  399. package/dist/build.js +249 -0
  400. package/dist/cli-run.js +34 -0
  401. package/dist/cli.js +49 -0
  402. package/dist/commands/build.js +32 -0
  403. package/dist/commands/cdp/capture.js +91 -0
  404. package/dist/commands/cdp/client.js +140 -0
  405. package/dist/commands/cdp/eval.js +20 -0
  406. package/dist/commands/cdp/quit.js +84 -0
  407. package/dist/commands/cdp/relaunch.js +62 -0
  408. package/dist/commands/cdp/shot.js +20 -0
  409. package/dist/commands/cdp/status.js +38 -0
  410. package/dist/commands/cdp/theme.js +21 -0
  411. package/dist/commands/cdp.js +53 -0
  412. package/dist/commands/clean.js +34 -0
  413. package/dist/commands/deploy.js +75 -0
  414. package/dist/commands/finalize-release.js +238 -0
  415. package/dist/commands/install.js +37 -0
  416. package/dist/commands/launch.js +150 -0
  417. package/dist/commands/lib/dependencies.js +35 -0
  418. package/dist/commands/lib/deploy-precheck.js +117 -0
  419. package/dist/commands/lib/ensure-target.js +300 -0
  420. package/dist/commands/logs.js +185 -0
  421. package/dist/commands/package.js +31 -0
  422. package/dist/commands/publish.js +34 -0
  423. package/dist/commands/push-secrets.js +141 -0
  424. package/dist/commands/release.js +286 -0
  425. package/dist/commands/runner.js +1874 -0
  426. package/dist/commands/sign-windows.js +563 -0
  427. package/dist/commands/test.js +121 -0
  428. package/dist/commands/update.js +21 -0
  429. package/dist/commands/validate-certs.js +238 -0
  430. package/dist/commands/version.js +9 -0
  431. package/dist/config/page-template.html +35 -0
  432. package/dist/defaults/.github/workflows/build.yml +276 -0
  433. package/dist/defaults/AGENTS.md +109 -0
  434. package/dist/defaults/CHANGELOG.md +15 -0
  435. package/dist/defaults/CLAUDE.md +1 -0
  436. package/dist/defaults/_.gitignore +24 -0
  437. package/dist/defaults/_mas/README.md +49 -0
  438. package/dist/defaults/_mas/entitlements.mas.inherit.plist +12 -0
  439. package/dist/defaults/_mas/entitlements.mas.loginhelper.plist +8 -0
  440. package/dist/defaults/_mas/entitlements.mas.plist +33 -0
  441. package/dist/defaults/config/certs/.gitkeep +0 -0
  442. package/dist/defaults/config/certs/README.md +60 -0
  443. package/dist/defaults/config/icons/macos/dmg.png +0 -0
  444. package/dist/defaults/config/icons/macos/icon.png +0 -0
  445. package/dist/defaults/config/icons/macos/tray.png +0 -0
  446. package/dist/defaults/config/icons/windows/icon.png +0 -0
  447. package/dist/defaults/config/omega.json5 +279 -0
  448. package/dist/defaults/docs/README.md +17 -0
  449. package/dist/defaults/gulpfile.js +6 -0
  450. package/dist/defaults/hooks/build/post.js +9 -0
  451. package/dist/defaults/hooks/build/pre.js +9 -0
  452. package/dist/defaults/hooks/notarize/post.js +16 -0
  453. package/dist/defaults/hooks/release/post.js +9 -0
  454. package/dist/defaults/hooks/release/pre.js +9 -0
  455. package/dist/defaults/src/assets/js/components/about/index.js +10 -0
  456. package/dist/defaults/src/assets/js/components/main/index.js +14 -0
  457. package/dist/defaults/src/assets/js/components/settings/index.js +10 -0
  458. package/dist/defaults/src/assets/scss/main.scss +34 -0
  459. package/dist/defaults/src/assets/scss/pages/about.scss +3 -0
  460. package/dist/defaults/src/assets/scss/pages/main.scss +4 -0
  461. package/dist/defaults/src/assets/scss/pages/settings.scss +3 -0
  462. package/dist/defaults/src/integrations/context-menu/index.js +60 -0
  463. package/dist/defaults/src/integrations/menu/index.js +58 -0
  464. package/dist/defaults/src/integrations/tray/index.js +60 -0
  465. package/dist/defaults/src/main.js +78 -0
  466. package/dist/defaults/src/preload.js +15 -0
  467. package/dist/defaults/src/views/about/index.html +3 -0
  468. package/dist/defaults/src/views/main/index.html +8 -0
  469. package/dist/defaults/src/views/settings/index.html +3 -0
  470. package/dist/defaults/test/README.md +41 -0
  471. package/dist/defaults/test/_init.js +10 -0
  472. package/dist/gulp/main.js +144 -0
  473. package/dist/gulp/tasks/audit.js +82 -0
  474. package/dist/gulp/tasks/build-config.js +445 -0
  475. package/dist/gulp/tasks/bundle.js +451 -0
  476. package/dist/gulp/tasks/defaults.js +20 -0
  477. package/dist/gulp/tasks/distribute.js +8 -0
  478. package/dist/gulp/tasks/html.js +95 -0
  479. package/dist/gulp/tasks/package-quick.js +102 -0
  480. package/dist/gulp/tasks/package.js +53 -0
  481. package/dist/gulp/tasks/release.js +57 -0
  482. package/dist/gulp/tasks/sass.js +82 -0
  483. package/dist/gulp/tasks/serve.js +191 -0
  484. package/dist/hooks/notarize.js +70 -0
  485. package/dist/index.js +14 -0
  486. package/dist/lib/_menu-mixin.js +199 -0
  487. package/dist/lib/analytics.js +360 -0
  488. package/dist/lib/app-state.js +220 -0
  489. package/dist/lib/auth-flow.js +160 -0
  490. package/dist/lib/auth-persistence.js +207 -0
  491. package/dist/lib/auto-updater.js +752 -0
  492. package/dist/lib/client-bridge.js +371 -0
  493. package/dist/lib/context-menu.js +302 -0
  494. package/dist/lib/context.js +162 -0
  495. package/dist/lib/deep-link.js +370 -0
  496. package/dist/lib/fontawesome.js +203 -0
  497. package/dist/lib/ipc.js +169 -0
  498. package/dist/lib/logger-lite.js +259 -0
  499. package/dist/lib/logger.js +4 -0
  500. package/dist/lib/menu.js +521 -0
  501. package/dist/lib/protocol.js +85 -0
  502. package/dist/lib/remote-config.js +224 -0
  503. package/dist/lib/remote-scripts.js +158 -0
  504. package/dist/lib/restart-manager/index.js +550 -0
  505. package/dist/lib/restart-manager/install.js +353 -0
  506. package/dist/lib/restart-manager/protocol.js +274 -0
  507. package/dist/lib/sign-helpers/auto-unlock.js +95 -0
  508. package/dist/lib/sign-helpers/entitlements.js +98 -0
  509. package/dist/lib/sign-helpers/resolve-icons.js +171 -0
  510. package/dist/lib/sign-helpers/sign-events.js +75 -0
  511. package/dist/lib/sign-helpers/update-info.js +186 -0
  512. package/dist/lib/startup.js +214 -0
  513. package/dist/lib/storage.js +193 -0
  514. package/dist/lib/templating.js +85 -0
  515. package/dist/lib/theme.js +173 -0
  516. package/dist/lib/tray.js +414 -0
  517. package/dist/lib/usage.js +141 -0
  518. package/dist/lib/window-manager.js +509 -0
  519. package/dist/main.js +542 -0
  520. package/dist/omega-bin.js +6 -0
  521. package/dist/preload.js +241 -0
  522. package/dist/renderer.js +456 -0
  523. package/dist/test/assert.js +4 -0
  524. package/dist/test/fixtures/consumer-app/config/omega.json5 +39 -0
  525. package/dist/test/fixtures/consumer-app/package.json +13 -0
  526. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +11 -0
  527. package/dist/test/fixtures/consumer-app/src/assets/scss/main.scss +3 -0
  528. package/dist/test/fixtures/consumer-app/src/main.js +17 -0
  529. package/dist/test/fixtures/consumer-app/src/preload.js +4 -0
  530. package/dist/test/fixtures/consumer-app/src/views/main/index.html +4 -0
  531. package/dist/test/harness/boot-entry.js +237 -0
  532. package/dist/test/harness/main-entry.js +494 -0
  533. package/dist/test/harness/package.json +6 -0
  534. package/dist/test/harness/renderer-entry.js +173 -0
  535. package/dist/test/harness/renderer-preload.js +310 -0
  536. package/dist/test/harness/renderer.html +12 -0
  537. package/dist/test/index.js +65 -0
  538. package/dist/test/runner.js +99 -0
  539. package/dist/test/runners/boot.js +414 -0
  540. package/dist/test/runners/electron.js +92 -0
  541. package/dist/test/runners/render-event.js +46 -0
  542. package/dist/test/suites/boot/build-isolation.test.js +54 -0
  543. package/dist/test/suites/boot/consumer-app-boots.test.js +99 -0
  544. package/dist/test/suites/boot/restart-manager.test.js +38 -0
  545. package/dist/test/suites/boot/storage-bundled.test.js +59 -0
  546. package/dist/test/suites/boot/theme.test.js +68 -0
  547. package/dist/test/suites/boot/view-suite.test.js +47 -0
  548. package/dist/test/suites/build/attach-log-file.test.js +99 -0
  549. package/dist/test/suites/build/audit.test.js +271 -0
  550. package/dist/test/suites/build/boot-fixture.test.js +48 -0
  551. package/dist/test/suites/build/build-config.test.js +457 -0
  552. package/dist/test/suites/build/build-verbs.test.js +156 -0
  553. package/dist/test/suites/build/build-workflow-jobs.test.js +55 -0
  554. package/dist/test/suites/build/cdp.test.js +89 -0
  555. package/dist/test/suites/build/cli.test.js +135 -0
  556. package/dist/test/suites/build/config-schema.test.js +133 -0
  557. package/dist/test/suites/build/defaults-scaffold.test.js +192 -0
  558. package/dist/test/suites/build/deliver-certs.test.js +95 -0
  559. package/dist/test/suites/build/derive-signing-env.test.js +122 -0
  560. package/dist/test/suites/build/electron-node-version.test.js +49 -0
  561. package/dist/test/suites/build/electron-targets.test.js +92 -0
  562. package/dist/test/suites/build/ensure-target.test.js +131 -0
  563. package/dist/test/suites/build/entitlements.test.js +107 -0
  564. package/dist/test/suites/build/env-delivery.test.js +166 -0
  565. package/dist/test/suites/build/env-watch.test.js +86 -0
  566. package/dist/test/suites/build/exports.test.js +63 -0
  567. package/dist/test/suites/build/finalize-release.test.js +152 -0
  568. package/dist/test/suites/build/format-fetch-error.test.js +85 -0
  569. package/dist/test/suites/build/framework-deps.test.js +173 -0
  570. package/dist/test/suites/build/get-config.test.js +137 -0
  571. package/dist/test/suites/build/github-utils.test.js +54 -0
  572. package/dist/test/suites/build/icon-sheet.test.js +62 -0
  573. package/dist/test/suites/build/license-stamp.test.js +63 -0
  574. package/dist/test/suites/build/logger-lite.test.js +148 -0
  575. package/dist/test/suites/build/logs-command.test.js +226 -0
  576. package/dist/test/suites/build/manager.test.js +193 -0
  577. package/dist/test/suites/build/menu-mixin.test.js +130 -0
  578. package/dist/test/suites/build/merge-line-files.test.js +230 -0
  579. package/dist/test/suites/build/omega-shell.test.js +94 -0
  580. package/dist/test/suites/build/omega-tokens.test.js +64 -0
  581. package/dist/test/suites/build/project-scripts-deps.test.js +90 -0
  582. package/dist/test/suites/build/push-secrets.test.js +226 -0
  583. package/dist/test/suites/build/release-pipeline.test.js +365 -0
  584. package/dist/test/suites/build/renderer-auth-bridge.test.js +158 -0
  585. package/dist/test/suites/build/renderer-entry-key.test.js +37 -0
  586. package/dist/test/suites/build/renderer-node-shims.test.js +125 -0
  587. package/dist/test/suites/build/resolve-icons.test.js +296 -0
  588. package/dist/test/suites/build/resolve-signing-cert.test.js +342 -0
  589. package/dist/test/suites/build/restart-manager-install.test.js +178 -0
  590. package/dist/test/suites/build/restart-manager-protocol.test.js +158 -0
  591. package/dist/test/suites/build/run-consumer-hook.test.js +137 -0
  592. package/dist/test/suites/build/runner.test.js +2599 -0
  593. package/dist/test/suites/build/sanitize-signing-env.test.js +98 -0
  594. package/dist/test/suites/build/sanitize-url.test.js +78 -0
  595. package/dist/test/suites/build/secure-remote-url.test.js +42 -0
  596. package/dist/test/suites/build/sentry.test.js +89 -0
  597. package/dist/test/suites/build/serve-resolve-electron.test.js +58 -0
  598. package/dist/test/suites/build/setup-scripts.test.js +172 -0
  599. package/dist/test/suites/build/sign-events.test.js +90 -0
  600. package/dist/test/suites/build/sign-windows-e2e.test.js +302 -0
  601. package/dist/test/suites/build/sign-windows.test.js +313 -0
  602. package/dist/test/suites/build/strip-dev-blocks.test.js +116 -0
  603. package/dist/test/suites/build/templating.test.js +95 -0
  604. package/dist/test/suites/build/test-discovery.test.js +64 -0
  605. package/dist/test/suites/build/test-stealth.test.js +83 -0
  606. package/dist/test/suites/build/test-target-no-match.test.js +119 -0
  607. package/dist/test/suites/build/update-info.test.js +224 -0
  608. package/dist/test/suites/build/url-helpers.test.js +289 -0
  609. package/dist/test/suites/build/validate-certs.test.js +103 -0
  610. package/dist/test/suites/build/validate-config.test.js +90 -0
  611. package/dist/test/suites/build/verb-logs.test.js +43 -0
  612. package/dist/test/suites/build/wave5-pins.test.js +35 -0
  613. package/dist/test/suites/main/analytics.test.js +364 -0
  614. package/dist/test/suites/main/app-state.test.js +197 -0
  615. package/dist/test/suites/main/auth-flow.test.js +196 -0
  616. package/dist/test/suites/main/auth-persistence.test.js +167 -0
  617. package/dist/test/suites/main/auto-updater.test.js +1138 -0
  618. package/dist/test/suites/main/boot-sequence.test.js +77 -0
  619. package/dist/test/suites/main/client-bridge.integration.test.js +134 -0
  620. package/dist/test/suites/main/client-bridge.test.js +249 -0
  621. package/dist/test/suites/main/context-menu.test.js +365 -0
  622. package/dist/test/suites/main/context.test.js +155 -0
  623. package/dist/test/suites/main/deep-link.test.js +288 -0
  624. package/dist/test/suites/main/epipe-handler.test.js +40 -0
  625. package/dist/test/suites/main/fontawesome.test.js +147 -0
  626. package/dist/test/suites/main/harness-cdp.test.js +49 -0
  627. package/dist/test/suites/main/ipc.test.js +165 -0
  628. package/dist/test/suites/main/menu.test.js +419 -0
  629. package/dist/test/suites/main/protocol.test.js +77 -0
  630. package/dist/test/suites/main/remote-config.test.js +189 -0
  631. package/dist/test/suites/main/remote-scripts.test.js +276 -0
  632. package/dist/test/suites/main/restart-manager.test.js +328 -0
  633. package/dist/test/suites/main/startup-paths-and-ua.test.js +99 -0
  634. package/dist/test/suites/main/startup.test.js +129 -0
  635. package/dist/test/suites/main/stealth-window.test.js +74 -0
  636. package/dist/test/suites/main/storage.test.js +89 -0
  637. package/dist/test/suites/main/theme.test.js +137 -0
  638. package/dist/test/suites/main/tray.test.js +322 -0
  639. package/dist/test/suites/main/truncate-on-boot.test.js +22 -0
  640. package/dist/test/suites/main/url-helpers.test.js +429 -0
  641. package/dist/test/suites/main/usage.test.js +127 -0
  642. package/dist/test/suites/main/window-bounds.test.js +169 -0
  643. package/dist/test/suites/main/window-manager.test.js +233 -0
  644. package/dist/test/suites/renderer/analytics-bridge.test.js +128 -0
  645. package/dist/test/suites/renderer/cross-context-helpers.test.js +131 -0
  646. package/dist/test/suites/renderer/fontawesome.test.js +190 -0
  647. package/dist/test/suites/renderer/round-trip.test.js +107 -0
  648. package/dist/test/suites/renderer/theme.test.js +118 -0
  649. package/dist/test/suites/renderer/tooltips.test.js +166 -0
  650. package/dist/test/suites/renderer/verts.test.js +100 -0
  651. package/dist/test/suites/renderer/window-em-surface.test.js +107 -0
  652. package/dist/test/utils/dist-snapshot.js +36 -0
  653. package/dist/test/utils/extended-mode-warning.js +13 -0
  654. package/dist/utils/app-root.js +28 -0
  655. package/dist/utils/attach-log-file.js +4 -0
  656. package/dist/utils/build-pipeline.js +58 -0
  657. package/dist/utils/deliver-certs.js +69 -0
  658. package/dist/utils/derive-signing-env.js +56 -0
  659. package/dist/utils/dist-root.js +21 -0
  660. package/dist/utils/electron-node-version.js +48 -0
  661. package/dist/utils/electron-targets.js +72 -0
  662. package/dist/utils/format-fetch-error.js +38 -0
  663. package/dist/utils/github.js +73 -0
  664. package/dist/utils/load-consumer-file.js +26 -0
  665. package/dist/utils/merge-line-files.js +5 -0
  666. package/dist/utils/mode-helpers.js +147 -0
  667. package/dist/utils/resolve-signing-cert.js +175 -0
  668. package/dist/utils/run-consumer-hook.js +38 -0
  669. package/dist/utils/runner-env.js +687 -0
  670. package/dist/utils/safe-install.js +4 -0
  671. package/dist/utils/sanitize-signing-env.js +45 -0
  672. package/dist/utils/sanitize-url.js +28 -0
  673. package/dist/utils/secure-remote-url.js +25 -0
  674. package/dist/utils/stealth-window.js +37 -0
  675. package/dist/utils/test-stealth.js +29 -0
  676. package/dist/utils/url-helpers.js +169 -0
  677. package/dist/vendor/account/engine.js +182 -0
  678. package/dist/vendor/account/features.js +220 -0
  679. package/dist/vendor/account/index.js +53 -0
  680. package/dist/vendor/account/schema.js +272 -0
  681. package/dist/vendor/account/subscription.js +38 -0
  682. package/dist/vendor/analytics/adapters/ga4.js +26 -0
  683. package/dist/vendor/analytics/adapters/meta.js +26 -0
  684. package/dist/vendor/analytics/adapters/resolve.js +130 -0
  685. package/dist/vendor/analytics/adapters/tiktok.js +27 -0
  686. package/dist/vendor/analytics/catalog.js +908 -0
  687. package/dist/vendor/analytics/consent.js +49 -0
  688. package/dist/vendor/analytics/core.js +141 -0
  689. package/dist/vendor/analytics/identity.js +136 -0
  690. package/dist/vendor/analytics/index.js +170 -0
  691. package/dist/vendor/analytics/logger.js +40 -0
  692. package/dist/vendor/analytics/transports/browser.js +110 -0
  693. package/dist/vendor/config/company.js +31 -0
  694. package/dist/vendor/config/defaults.js +173 -0
  695. package/dist/vendor/config/demo.js +18 -0
  696. package/dist/vendor/config/desktop-artifacts.js +110 -0
  697. package/dist/vendor/config/edit.js +769 -0
  698. package/dist/vendor/config/env-delivery.js +145 -0
  699. package/dist/vendor/config/env-rules.js +93 -0
  700. package/dist/vendor/config/env-schema.js +1078 -0
  701. package/dist/vendor/config/env.js +445 -0
  702. package/dist/vendor/config/hooks.js +97 -0
  703. package/dist/vendor/config/index.js +237 -0
  704. package/dist/vendor/config/instances.js +208 -0
  705. package/dist/vendor/config/load.js +490 -0
  706. package/dist/vendor/config/merge.js +68 -0
  707. package/dist/vendor/config/order.js +139 -0
  708. package/dist/vendor/config/ports.js +374 -0
  709. package/dist/vendor/config/providers.js +32 -0
  710. package/dist/vendor/config/repo.js +142 -0
  711. package/dist/vendor/config/retired-keys.js +430 -0
  712. package/dist/vendor/config/schema.js +1610 -0
  713. package/dist/vendor/config/secrets.js +50 -0
  714. package/dist/vendor/config/seed.js +34 -0
  715. package/dist/vendor/config/site-global.js +205 -0
  716. package/dist/vendor/config/validate.js +554 -0
  717. package/dist/vendor/config/winback.js +61 -0
  718. package/dist/vendor/devkit/actions-secrets.js +145 -0
  719. package/dist/vendor/devkit/attach-log-file.js +262 -0
  720. package/dist/vendor/devkit/bundle.js +292 -0
  721. package/dist/vendor/devkit/certs.js +199 -0
  722. package/dist/vendor/devkit/ci-workflows.js +520 -0
  723. package/dist/vendor/devkit/clean-dirs.js +28 -0
  724. package/dist/vendor/devkit/cli-router.js +156 -0
  725. package/dist/vendor/devkit/defaults-engine.js +372 -0
  726. package/dist/vendor/devkit/deploy-precheck.js +54 -0
  727. package/dist/vendor/devkit/deploy-record.js +180 -0
  728. package/dist/vendor/devkit/deploy.js +286 -0
  729. package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
  730. package/dist/vendor/devkit/env-watch.js +132 -0
  731. package/dist/vendor/devkit/framework-deps.js +46 -0
  732. package/dist/vendor/devkit/license.js +155 -0
  733. package/dist/vendor/devkit/local.js +1905 -0
  734. package/dist/vendor/devkit/logger.js +128 -0
  735. package/dist/vendor/devkit/merge-line-files.js +296 -0
  736. package/dist/vendor/devkit/npm-registry.js +52 -0
  737. package/dist/vendor/devkit/omega-bin.js +345 -0
  738. package/dist/vendor/devkit/prompt.js +187 -0
  739. package/dist/vendor/devkit/safe-install.js +18 -0
  740. package/dist/vendor/devkit/scaffold-guard.js +96 -0
  741. package/dist/vendor/devkit/stop-signals.js +28 -0
  742. package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
  743. package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
  744. package/dist/vendor/devkit/target-dependencies.js +137 -0
  745. package/dist/vendor/devkit/target-secrets.js +165 -0
  746. package/dist/vendor/devkit/test/assert.js +120 -0
  747. package/dist/vendor/devkit/test/define-cases.js +104 -0
  748. package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
  749. package/dist/vendor/devkit/test/runner-core.js +554 -0
  750. package/dist/vendor/devkit/test/scope.js +162 -0
  751. package/dist/vendor/devkit/update.js +569 -0
  752. package/dist/vendor/monitoring/core.js +180 -0
  753. package/dist/vendor/monitoring/env.js +49 -0
  754. package/dist/vendor/monitoring/index.js +28 -0
  755. package/dist/vendor/monitoring/logger.js +39 -0
  756. package/dist/vendor/monitoring/main.js +99 -0
  757. package/dist/vendor/monitoring/preload.js +45 -0
  758. package/dist/vendor/monitoring/renderer.js +87 -0
  759. package/docs/analytics.md +140 -0
  760. package/docs/app-state.md +92 -0
  761. package/docs/audit.md +69 -0
  762. package/docs/auto-updater.md +243 -0
  763. package/docs/boot-sequence.md +39 -0
  764. package/docs/build-system.md +161 -0
  765. package/docs/cdp-debugging.md +169 -0
  766. package/docs/client-bridge.md +267 -0
  767. package/docs/common-mistakes.md +21 -0
  768. package/docs/config-schema.md +120 -0
  769. package/docs/context-menu.md +112 -0
  770. package/docs/context.md +81 -0
  771. package/docs/css.md +84 -0
  772. package/docs/deep-link.md +178 -0
  773. package/docs/environment-detection.md +104 -0
  774. package/docs/fontawesome.md +107 -0
  775. package/docs/hooks.md +87 -0
  776. package/docs/icons.md +79 -0
  777. package/docs/index.md +279 -0
  778. package/docs/installer-options.md +162 -0
  779. package/docs/ipc.md +61 -0
  780. package/docs/lib-modules.md +53 -0
  781. package/docs/logging.md +229 -0
  782. package/docs/menu.md +160 -0
  783. package/docs/releasing.md +229 -0
  784. package/docs/remote-config.md +118 -0
  785. package/docs/remote-scripts.md +144 -0
  786. package/docs/restart-manager.md +144 -0
  787. package/docs/runner.md +253 -0
  788. package/docs/sentry.md +97 -0
  789. package/docs/shared/agent-docs.md +89 -0
  790. package/docs/shared/analytics.md +612 -0
  791. package/docs/shared/brands.md +51 -0
  792. package/docs/shared/breaking-changes.md +497 -0
  793. package/docs/shared/config.md +1387 -0
  794. package/docs/shared/deploys.md +215 -0
  795. package/docs/shared/icons.md +201 -0
  796. package/docs/shared/local-dev.md +147 -0
  797. package/docs/shared/logging.md +202 -0
  798. package/docs/shared/monitoring.md +153 -0
  799. package/docs/shared/publishing.md +183 -0
  800. package/docs/shared/rulings.md +34 -0
  801. package/docs/shared/testing.md +147 -0
  802. package/docs/shared/theming.md +604 -0
  803. package/docs/shared/translation.md +291 -0
  804. package/docs/shared/updates.md +61 -0
  805. package/docs/signing.md +267 -0
  806. package/docs/startup.md +142 -0
  807. package/docs/storage.md +59 -0
  808. package/docs/templating.md +101 -0
  809. package/docs/test-boot-layer.md +157 -0
  810. package/docs/test-framework.md +357 -0
  811. package/docs/themes.md +135 -0
  812. package/docs/tooltips.md +99 -0
  813. package/docs/tray.md +164 -0
  814. package/docs/usage.md +58 -0
  815. package/docs/verts.md +62 -0
  816. package/docs/windows.md +149 -0
  817. package/package.json +184 -0
  818. package/scripts/sync-nvmrc.js +100 -0
@@ -0,0 +1,84 @@
1
+ // `npx omega cdp quit` — quit the running dev app and WAIT for its full process
2
+ // tree to drain (Electron mains + the npm-start chain), so it's safe to run
3
+ // `npx omega test` the moment this returns. Port-down alone is NOT that signal —
4
+ // the chain takes a few more seconds to flush, and a test run started inside
5
+ // that window gets contaminated (slow polls, flaky boot suites).
6
+ //
7
+ // macOS only (osascript).
8
+
9
+ const { execFileSync } = require('child_process');
10
+ const client = require('./client');
11
+
12
+ const Manager = new (require('../../build.js'))();
13
+
14
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
15
+
16
+ async function portUp() {
17
+ const response = await fetch(`http://127.0.0.1:${client.port()}/json/version`).catch(() => null);
18
+ return Boolean(response && response.ok);
19
+ }
20
+
21
+ // Electron mains (dev AND stray test instances) + the npm-start chain
22
+ // (mgr start / gulp) belonging to THIS project.
23
+ function devProcsAlive() {
24
+ const escaped = process.cwd().replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
25
+ try {
26
+ const out = execFileSync('pgrep', ['-f', `${escaped}/node_modules/(electron/dist|\\.bin/(mgr start|gulp))`]);
27
+ return out.toString().trim().split('\n').filter(Boolean).length;
28
+ } catch (error) {
29
+ return 0; // pgrep exits 1 when nothing matches
30
+ }
31
+ }
32
+
33
+ // True when an app was running and has been quit; false when nothing was up.
34
+ async function quitAndDrain(names) {
35
+ if (process.platform !== 'darwin') {
36
+ throw new Error('mgr cdp quit/relaunch is macOS-only (osascript)');
37
+ }
38
+
39
+ if (!await portUp()) {
40
+ return false;
41
+ }
42
+
43
+ // Real app quit (before-quit handlers run).
44
+ let lastError = null;
45
+ for (const name of names) {
46
+ try {
47
+ execFileSync('osascript', ['-e', `tell application "${name}" to quit`]);
48
+ lastError = null;
49
+ break;
50
+ } catch (error) {
51
+ lastError = error;
52
+ }
53
+ }
54
+ if (lastError) {
55
+ throw new Error(`could not quit the app (tried: ${names.join(', ')}): ${lastError.message}`);
56
+ }
57
+
58
+ for (let i = 0; i < 30; i++) {
59
+ if (!await portUp()) {
60
+ break;
61
+ }
62
+ await sleep(500);
63
+ if (i === 29) {
64
+ throw new Error('app did not release the CDP port after quit');
65
+ }
66
+ }
67
+
68
+ // Port-down ≠ process-tree dead — drain it before returning.
69
+ for (let i = 0; i < 30; i++) {
70
+ if (!devProcsAlive()) {
71
+ return true;
72
+ }
73
+ await sleep(500);
74
+ }
75
+ console.warn('warning: app processes still draining — wait a moment before running tests');
76
+ return true;
77
+ }
78
+
79
+ module.exports = async function (options) {
80
+ const wasRunning = await quitAndDrain(client.appNames(Manager.getConfig()));
81
+ console.log(wasRunning ? 'quit running app' : 'app was not running');
82
+ };
83
+
84
+ module.exports.quitAndDrain = quitAndDrain;
@@ -0,0 +1,62 @@
1
+ // `npx omega cdp relaunch` — the dev iterate loop in one command. @omega.js/desktop's
2
+ // `npm start` has NO watch (build once, then run), so every src/ edit needs
3
+ // quit → rebuild → boot.
4
+ //
5
+ // Boots with CDP on OMEGA_CDP_PORT (default 9222) so the other cdp subcommands
6
+ // can attach. "Booted" = a page target matching the ready signal exists —
7
+ // default: the main window's document (`/views/main/`); consumers whose boot
8
+ // completes later than first paint override via config `cdp.readySignal`
9
+ // (a URL substring, e.g. an overlay view created last in the boot sequence).
10
+ //
11
+ // The spawned `npm start` is detached and keeps running after this exits;
12
+ // its output goes to logs/dev.log as usual.
13
+ //
14
+ // macOS only (the quit step uses osascript).
15
+
16
+ const { spawn } = require('child_process');
17
+ const client = require('./client');
18
+ const { quitAndDrain } = require('./quit');
19
+
20
+ const Manager = new (require('../../build.js'))();
21
+
22
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
23
+
24
+ async function portUp() {
25
+ const response = await fetch(`http://127.0.0.1:${client.port()}/json/version`).catch(() => null);
26
+ return Boolean(response && response.ok);
27
+ }
28
+
29
+ async function waitForBoot(matcher) {
30
+ // Build + boot: electron's own startup takes the bulk of it. Generous ceiling.
31
+ for (let i = 0; i < 120; i++) {
32
+ await sleep(2000);
33
+ if (!await portUp()) {
34
+ continue;
35
+ }
36
+ const pages = await client.targets().catch(() => []);
37
+ if (client.pickTarget(pages, matcher)) {
38
+ return;
39
+ }
40
+ }
41
+ throw new Error('boot timeout — check logs/dev.log');
42
+ }
43
+
44
+ module.exports = async function (options) {
45
+ const config = Manager.getConfig();
46
+
47
+ const wasRunning = await quitAndDrain(client.appNames(config));
48
+ console.log(wasRunning ? 'quit running app' : 'app was not running');
49
+
50
+ const child = spawn('npm', ['start'], {
51
+ cwd: process.cwd(),
52
+ env: { ...process.env, OMEGA_CDP_PORT: String(client.port()) },
53
+ detached: true,
54
+ stdio: 'ignore',
55
+ });
56
+ child.unref();
57
+
58
+ const matcher = client.readyMatcher(config);
59
+ console.log('building + booting (logs/dev.log)…');
60
+ await waitForBoot(matcher);
61
+ console.log(`booted — CDP on ${client.port()}, ready ("${matcher}" target up)`);
62
+ };
@@ -0,0 +1,20 @@
1
+ // `npx omega cdp shot <target-match> <out.png>` — per-renderer screenshot: what
2
+ // ONE webContents painted (its own surface).
3
+ //
4
+ // This is NOT the composited window (BrowserWindow document + WebContentsViews
5
+ // stack in the window server) — use `mgr cdp capture` to see what the user
6
+ // actually sees. Per-renderer shots are the discriminator when compositing
7
+ // looks wrong: if this image is correct but capture isn't, the bug is between
8
+ // the renderer and the window server, not in your CSS.
9
+
10
+ const client = require('./client');
11
+
12
+ module.exports = async function (options) {
13
+ const [, , matcher, outPath] = options._;
14
+ if (!matcher || !outPath) {
15
+ throw new Error('Usage: npx omega cdp shot <target-match> <out.png>');
16
+ }
17
+
18
+ await client.screenshot(String(matcher), String(outPath));
19
+ console.log(`saved ${outPath}`);
20
+ };
@@ -0,0 +1,38 @@
1
+ // `npx omega cdp status` — is the dev app up, and what's in it? One-stop
2
+ // orientation: every CDP page target (the main window's document is marked),
3
+ // the window geometry, and the live theme.
4
+
5
+ const client = require('./client');
6
+
7
+ module.exports = async function (options) {
8
+ let pages;
9
+ try {
10
+ pages = await client.targets();
11
+ } catch (error) {
12
+ console.log(`App: NOT RUNNING (${error.message})`);
13
+ process.exitCode = 1;
14
+ return;
15
+ }
16
+
17
+ console.log(`App: running (CDP port ${client.port()})`);
18
+ console.log('\nTargets:');
19
+ for (const t of pages) {
20
+ const role = t.url.includes(client.MAIN_VIEW) ? 'main' : ' ';
21
+ console.log(` [${role}] ${t.url}`);
22
+ }
23
+
24
+ const main = client.pickTarget(pages, client.MAIN_VIEW);
25
+ if (!main) {
26
+ console.log(`\n(no ${client.MAIN_VIEW} target — window info unavailable)`);
27
+ return;
28
+ }
29
+
30
+ const info = await client.evaluate(client.MAIN_VIEW, `(async () => ({
31
+ window: { x: window.screenX, y: window.screenY, width: window.outerWidth, height: window.outerHeight },
32
+ bsTheme: document.documentElement.getAttribute('data-bs-theme'),
33
+ theme: window.desktop?.theme ? await window.desktop.theme.get() : null,
34
+ }))()`);
35
+
36
+ console.log(`\nWindow: ${info.window.width}x${info.window.height} at (${info.window.x}, ${info.window.y})`);
37
+ console.log(`Theme: ${info.theme ? `source=${info.theme.source} resolved=${info.theme.resolved}` : '(em.theme unavailable)'}${info.bsTheme ? ` data-bs-theme=${info.bsTheme}` : ''}`);
38
+ };
@@ -0,0 +1,21 @@
1
+ // `npx omega cdp theme <dark|light|system>` — flip the app's theme live
2
+ // (manager.theme via the main window's renderer).
3
+ //
4
+ // Flips every renderer (BrowserWindows AND WebContentsViews) with no restart —
5
+ // nativeTheme.themeSource → prefers-color-scheme → the preload applier
6
+ // rewrites <html data-bs-theme>. The choice PERSISTS in storage (wins over
7
+ // config.theme.appearance on later boots) — flip back when you're done.
8
+
9
+ const client = require('./client');
10
+
11
+ const SOURCES = ['dark', 'light', 'system'];
12
+
13
+ module.exports = async function (options) {
14
+ const source = options._[2];
15
+ if (!SOURCES.includes(source)) {
16
+ throw new Error(`Usage: npx omega cdp theme <${SOURCES.join('|')}>`);
17
+ }
18
+
19
+ const state = await client.evaluate(client.MAIN_VIEW, `window.desktop.theme.set('${source}')`);
20
+ console.log(`theme: source=${state.source} resolved=${state.resolved}`);
21
+ };
@@ -0,0 +1,53 @@
1
+ // `npx omega cdp <subcommand>` — drive the RUNNING dev app over the Chrome
2
+ // DevTools Protocol: orient (status), act (eval, theme), see (shot, capture),
3
+ // and run the no-watch iterate loop (relaunch / quit).
4
+ //
5
+ // npx omega cdp status # running? targets, window rect, theme
6
+ // npx omega cdp eval <match> '<expr>' # evaluate JS in any webContents
7
+ // npx omega cdp shot <match> <out.png> # ONE renderer's own pixels
8
+ // npx omega cdp capture <out.png> # the COMPOSITED window (macOS)
9
+ // npx omega cdp theme <dark|light|system> # flip the live theme
10
+ // npx omega cdp relaunch # quit → npm start → wait for boot
11
+ // npx omega cdp quit # quit + wait for the process tree to drain
12
+ //
13
+ // All subcommands read OMEGA_CDP_PORT (default 9222) — the same env var `npm
14
+ // start` uses to open the endpoint — or take `--port <n>` (which wins).
15
+ // `--port` exists for npm scripts: prefixing `npx cross-env OMEGA_CDP_PORT=…`
16
+ // MANGLES quoted eval expressions (cross-env strips inner quotes), so a
17
+ // pinned-port script must pass the port as a flag instead. Targets are
18
+ // matched by URL substring (the main window is always `/views/main/`).
19
+ // Full reference: docs/cdp-debugging.md.
20
+
21
+ const path = require('path');
22
+
23
+ const SUBCOMMANDS = ['status', 'eval', 'shot', 'capture', 'theme', 'relaunch', 'quit'];
24
+
25
+ const USAGE = [
26
+ 'Usage: npx omega cdp <subcommand> [--port <n>] (port default: OMEGA_CDP_PORT or 9222)',
27
+ ' status app up? targets, window rect, theme',
28
+ " eval <match> '<expr>' evaluate JS in the matched webContents",
29
+ ' shot <match> <out.png> per-renderer screenshot',
30
+ ' capture <out.png> composited window capture (macOS)',
31
+ ' theme <dark|light|system> flip the live theme',
32
+ ' relaunch quit → npm start → wait for boot',
33
+ ' quit quit the app, wait for processes to drain',
34
+ ].join('\n');
35
+
36
+ module.exports = async function (options) {
37
+ options = options || {};
38
+ options._ = options._ || [];
39
+
40
+ const sub = options._[1];
41
+ if (!sub || !SUBCOMMANDS.includes(sub)) {
42
+ console.error(USAGE);
43
+ throw new Error(sub ? `Unknown cdp subcommand "${sub}"` : 'Missing cdp subcommand');
44
+ }
45
+
46
+ // --port overrides OMEGA_CDP_PORT for this invocation (client.js reads the env).
47
+ if (options.port) {
48
+ process.env.OMEGA_CDP_PORT = String(options.port);
49
+ }
50
+
51
+ const handler = require(path.join(__dirname, 'cdp', `${sub}.js`));
52
+ await handler(options);
53
+ };
@@ -0,0 +1,34 @@
1
+ // Libraries
2
+ const Manager = new (require('../build.js'));
3
+ const logger = Manager.logger('clean');
4
+ const { cleanDirs } = require('../vendor/devkit/clean-dirs.js');
5
+ const { ensureTarget } = require('./lib/ensure-target.js');
6
+
7
+ // Dirs to clean
8
+ const dirs = [
9
+ '.temp',
10
+ '.cache',
11
+ 'dist',
12
+ 'release',
13
+ ];
14
+
15
+ module.exports = async function (options) {
16
+ // The local scaffold (#675): the consumer `start` script is
17
+ // `omega clean && npm run gulp --`, and gulp itself is one of the peer
18
+ // deps the ensure installs — clean is the only verb that runs before it.
19
+ await ensureTarget({ log: (line) => logger.log(line), warn: (line) => logger.warn(line) });
20
+
21
+ // Quick mode used to keep `dist/` so "the next gulp run is incremental" —
22
+ // a claim webpack never made good on (it rebuilt every bundle anyway) and
23
+ // esbuild retires outright (the numbers are the CHANGELOG's
24
+ // [#737](https://github.com/Omega-JS-Stack/omega/issues/737) entry). Every run
25
+ // cleans, so `--quick` now means exactly one thing: the trimmed
26
+ // electron-builder phase.
27
+ logger.log('Cleaning .temp, .cache, dist, release...');
28
+
29
+ try {
30
+ cleanDirs(dirs);
31
+ } catch (e) {
32
+ logger.error(`Error clearing directories: ${e}`);
33
+ }
34
+ };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * `omega deploy` — the uniform explicit publish verb (D13). Desktop's real
3
+ * flow lives in `omega release` (workflow_dispatch + live CI log streaming +
4
+ * GitHub-release artifacts); this verb exists so every target deploys the
5
+ * same way. --dry-run prints the exact dispatch release would send, without
6
+ * sending it; anything else delegates to release.
7
+ *
8
+ * Every run starts with the local scaffold the retired `omega setup` used to
9
+ * own (ensureTarget, #675), delivers the Apple signing artifacts into the
10
+ * target's certs dir (#678), and then runs setup's NETWORK half as a precheck:
11
+ * framework freshness, cert validation, repo provisioning, secret publication.
12
+ * `--no-secrets` skips that precheck.
13
+ */
14
+ const { execSync } = require('node:child_process');
15
+ const Manager = new (require('../build.js'));
16
+ const logger = Manager.logger('deploy');
17
+ const { deployViaDispatch, findLocalSpecs } = require('../vendor/devkit/deploy.js');
18
+ const { ensureTarget } = require('./lib/ensure-target.js');
19
+ const { deployPrecheck } = require('./lib/deploy-precheck.js');
20
+ const { deliverTargetCerts } = require('../utils/deliver-certs.js');
21
+ const { dispatchTarget } = require('./release.js');
22
+
23
+ module.exports = async function (options) {
24
+ options = options || {};
25
+ const dryRun = options.dryRun || options['dry-run'];
26
+ const projectDir = process.cwd();
27
+
28
+ // The local half of the retired `omega setup` (#675), then the signing
29
+ // artifacts this target needs before anything signs (#678). Both are
30
+ // idempotent and quiet on a converged target.
31
+ await ensureTarget({ projectDir, log: (line) => logger.log(line), warn: (line) => logger.warn(line) });
32
+ deliverTargetCerts({ projectDir, logger });
33
+
34
+ // The NETWORK half, as a precheck: a deploy is the verb that needs the
35
+ // remote side right. A dry run sends nothing, so it prechecks nothing.
36
+ if (!dryRun) {
37
+ await deployPrecheck({ projectDir, options, logger });
38
+ }
39
+
40
+ // Linked local packages (tree-wide file: specs — cp194) → the LOCAL
41
+ // release flow automatically: build + sign + publish from this machine
42
+ // with the linked frameworks bundled in. Mirrored rule (Ian 2026-07-20);
43
+ // CI dispatch is only for registry-clean trees.
44
+ if (findLocalSpecs({ dir: process.cwd() }).length > 0) {
45
+ logger.log('Linked local packages detected — running the LOCAL release flow (build + sign + publish from this machine). CI dispatch resumes after `omega i live`.');
46
+ if (dryRun) {
47
+ logger.log('DRY RUN — would run: npm run release:local');
48
+ return;
49
+ }
50
+ execSync('npm run release:local', { stdio: 'inherit' });
51
+ require('../vendor/devkit/deploy-record.js').recordDeploy({ dir: process.cwd(), target: 'desktop', detail: { method: 'local' } });
52
+ return logger.log('Deployed from the LOCAL release flow (linked frameworks included).');
53
+ }
54
+
55
+ if (dryRun) {
56
+ const platforms = options.platforms || options.platform || 'all';
57
+ // The SAME address `omega release` dispatches on (config, and the composed
58
+ // workflow name inside a brand), so the printed plan is the real one.
59
+ const target = dispatchTarget({ projectRoot: projectDir, config: Manager.getConfig() });
60
+ const { plan } = await deployViaDispatch({
61
+ workflow: target.workflow,
62
+ owner: target.owner,
63
+ repo: target.repo,
64
+ inputs: { platforms: String(platforms) },
65
+ dryRun: true,
66
+ });
67
+ logger.log('DRY RUN — would send:');
68
+ logger.log(` ${plan.method} ${plan.url}`);
69
+ logger.log(` body: ${JSON.stringify(plan.body)}`);
70
+ logger.log(` then watch: ${plan.runsUrl}`);
71
+ return;
72
+ }
73
+
74
+ return require('./release.js')(options);
75
+ };
@@ -0,0 +1,238 @@
1
+ // finalize-release — wraps up a release after the matrix builds finish.
2
+ //
3
+ // Two modes (one command, --flag selects):
4
+ // --signed-dir <path> Upload signed Windows artifacts to the releases-repo release
5
+ // (created earlier by mac/linux's electron-builder --publish).
6
+ // Used by the windows-sign CI job.
7
+ // --publish Flip that release from draft → published so electron-updater
8
+ // can read its feed. Used by the finalize CI job.
9
+ //
10
+ // The repo is the brand's ONE public releases repo, addressed by @omega.js/config's
11
+ // `releasesRepo` from config/omega.json5 alone (#799): the same address the build
12
+ // baked into the app's update feed, never the git remote of whatever repo the
13
+ // target sits in.
14
+ //
15
+ // Both modes find the release by LISTING the repo's releases, drafts included
16
+ // (#810): `repos.getReleaseByTag` returns published releases only, because a draft
17
+ // carries no tag ref, so it 404'd on the very draft electron-builder had just
18
+ // created and every run piled up another draft for the same version.
19
+ //
20
+ // Idempotent: each mode is safe to re-run. An upload whose asset name is already
21
+ // on the release replaces it (delete, then upload), publish uses GH's
22
+ // "set draft=false" which is a no-op if already published.
23
+
24
+ const path = require('path');
25
+ const fs = require('fs');
26
+ const jetpack = require('fs-jetpack');
27
+
28
+ const { getOctokit } = require('../utils/github.js');
29
+ const { releasesRepo } = require('../vendor/config/index.js');
30
+ const Manager = new (require('../build.js'));
31
+
32
+ const logger = Manager.logger('finalize-release');
33
+
34
+ module.exports = async function finalizeRelease(options = {}) {
35
+ const argv = options._ || [];
36
+ // Parse flags from yargs-style options (yargs camelCases --signed-dir → signedDir).
37
+ const signedDir = options.signedDir || options['signed-dir'];
38
+ const doPublish = options.publish === true;
39
+
40
+ if (!signedDir && !doPublish) {
41
+ throw new Error('finalize-release: pass --signed-dir <path> or --publish');
42
+ }
43
+
44
+ const projectRoot = process.cwd();
45
+ const config = Manager.getConfig() || {};
46
+ const pkgVersion = (Manager.getPackage('project') || {}).version;
47
+
48
+ if (!pkgVersion) {
49
+ throw new Error('finalize-release: package.json version not found');
50
+ }
51
+
52
+ if (!process.env.GH_TOKEN) {
53
+ throw new Error('finalize-release: GH_TOKEN not set in env');
54
+ }
55
+
56
+ const octokit = options.octokit || getOctokit();
57
+ if (!octokit) {
58
+ throw new Error('finalize-release: failed to create octokit (missing GH_TOKEN?)');
59
+ }
60
+
61
+ // The releases repo (the auto-updater feed source), from config alone.
62
+ const { owner, name, repo } = releasesRepo(config);
63
+ if (!repo) {
64
+ throw new Error('finalize-release: could not address the releases repo. Set repo.providers.github.org (or targets.desktop.releases.owner) and brand.id in config/omega.json5.');
65
+ }
66
+
67
+ const releaseTag = `v${pkgVersion}`;
68
+
69
+ if (signedDir) {
70
+ await uploadSignedWindows({
71
+ octokit, owner, repo: name, tag: releaseTag,
72
+ signedDir: path.resolve(projectRoot, signedDir),
73
+ });
74
+ }
75
+
76
+ if (doPublish) {
77
+ await publishReleasesRepoRelease({
78
+ octokit, owner, repo: name, tag: releaseTag,
79
+ });
80
+ }
81
+ };
82
+
83
+ /**
84
+ * Find the repo's release for a tag, DRAFTS INCLUDED (#810).
85
+ *
86
+ * The newest draft wins: that is the one the current run's electron-builder
87
+ * publish step created, and an older duplicate draft for the same version (what
88
+ * the tag lookup's blindness left behind) never steals the assets. A published
89
+ * release for the tag answers when no draft does.
90
+ *
91
+ * @param {object} args - Lookup args.
92
+ * @param {object} args.octokit - Authenticated octokit client.
93
+ * @param {string} args.owner - Releases repo owner.
94
+ * @param {string} args.repo - Releases repo name.
95
+ * @param {string} args.tag - Release tag, e.g. `v1.2.3`.
96
+ * @returns {Promise<object|null>} The release, or null when the tag has none.
97
+ */
98
+ async function findRelease({ octokit, owner, repo, tag }) {
99
+ const releases = await octokit.paginate(octokit.rest.repos.listReleases, {
100
+ owner, repo, per_page: 100,
101
+ });
102
+
103
+ const matches = releases.filter((release) => release.tag_name === tag);
104
+ const drafts = matches
105
+ .filter((release) => release.draft)
106
+ .sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
107
+
108
+ return drafts[0] || matches.find((release) => !release.draft) || null;
109
+ }
110
+
111
+ async function uploadSignedWindows({ octokit, owner, repo, tag, signedDir }) {
112
+ if (!jetpack.exists(signedDir)) {
113
+ logger.warn(`No signed dir at ${signedDir} — nothing to upload.`);
114
+ return;
115
+ }
116
+
117
+ const files = (jetpack.list(signedDir) || []).filter((f) => {
118
+ if (!f.includes('.')) return false;
119
+ if (f.endsWith('.blockmap')) return false;
120
+ if (f.endsWith('.yml')) return false;
121
+ return true;
122
+ });
123
+
124
+ if (files.length === 0) {
125
+ logger.warn(`No signed files in ${signedDir}.`);
126
+ return;
127
+ }
128
+
129
+ // Find the release for the tag, drafts included. Normally mac/linux's
130
+ // electron-builder publish step has already created it (as a draft). For
131
+ // partial-platform runs (`--platforms windows` on a brand-new version) it
132
+ // doesn't exist yet, and in that case we create it ourselves as a draft so we
133
+ // have a place to attach signed assets. The `finalize` job is the one gated on
134
+ // all-platforms before flipping draft → published, so a draft created here just
135
+ // sits until a full run completes.
136
+ let release = await findRelease({ octokit, owner, repo, tag });
137
+ if (!release) {
138
+ logger.log(`No release at ${owner}/${repo}@${tag} yet: creating draft so we have somewhere to upload signed assets...`);
139
+ const { data } = await octokit.rest.repos.createRelease({
140
+ owner, repo,
141
+ tag_name: tag,
142
+ name: tag,
143
+ body: `Draft release auto-created by @omega.js/desktop for partial-platform run. Will be filled in by subsequent runs and published once all platforms have built.`,
144
+ draft: true,
145
+ prerelease: false,
146
+ });
147
+ release = data;
148
+ }
149
+
150
+ logger.log(`Uploading ${files.length} signed file(s) to ${owner}/${repo}@${tag} (release id ${release.id})...`);
151
+
152
+ // Replace any existing assets with the same name.
153
+ const { data: existing } = await octokit.rest.repos.listReleaseAssets({
154
+ owner, repo, release_id: release.id, per_page: 100,
155
+ });
156
+ const existingByName = new Map(existing.map((a) => [a.name, a]));
157
+
158
+ for (const filename of files) {
159
+ const src = path.join(signedDir, filename);
160
+ const data = fs.readFileSync(src);
161
+
162
+ const old = existingByName.get(filename);
163
+ if (old) {
164
+ logger.log(` ↻ ${filename} is already on the release (asset ${old.id}): replacing it.`);
165
+ await octokit.rest.repos.deleteReleaseAsset({ owner, repo, asset_id: old.id });
166
+ }
167
+
168
+ await octokit.rest.repos.uploadReleaseAsset({
169
+ owner, repo, release_id: release.id,
170
+ name: filename,
171
+ data,
172
+ headers: {
173
+ 'content-type': 'application/octet-stream',
174
+ 'content-length': data.length,
175
+ },
176
+ });
177
+
178
+ logger.log(` ✓ ${filename} (${(data.length / 1024 / 1024).toFixed(1)}MB) → ${owner}/${repo}@${tag}`);
179
+ }
180
+
181
+ // Also upload the latest.yml / .blockmap auto-updater metadata if present.
182
+ const meta = (jetpack.list(signedDir) || []).filter((f) => f.endsWith('.yml') || f.endsWith('.blockmap'));
183
+ for (const filename of meta) {
184
+ const src = path.join(signedDir, filename);
185
+ const data = fs.readFileSync(src);
186
+ const old = existingByName.get(filename);
187
+ if (old) {
188
+ logger.log(` ↻ ${filename} is already on the release (asset ${old.id}): replacing it.`);
189
+ await octokit.rest.repos.deleteReleaseAsset({ owner, repo, asset_id: old.id });
190
+ }
191
+ await octokit.rest.repos.uploadReleaseAsset({
192
+ owner, repo, release_id: release.id,
193
+ name: filename,
194
+ data,
195
+ headers: { 'content-type': 'application/octet-stream', 'content-length': data.length },
196
+ });
197
+ logger.log(` ✓ ${filename} (auto-updater feed) → ${owner}/${repo}@${tag}`);
198
+ }
199
+ }
200
+
201
+ async function publishReleasesRepoRelease({ octokit, owner, repo, tag }) {
202
+ const release = await findRelease({ octokit, owner, repo, tag });
203
+
204
+ if (!release) {
205
+ throw new Error(`Release ${tag} not found at ${owner}/${repo}. Did the build/publish job succeed?`);
206
+ }
207
+
208
+ if (!release.draft && !release.prerelease) {
209
+ logger.log(`✓ ${owner}/${repo}@${tag} already published (draft=false, prerelease=false).`);
210
+ } else {
211
+ await octokit.rest.repos.updateRelease({
212
+ owner, repo, release_id: release.id,
213
+ draft: false,
214
+ prerelease: false,
215
+ });
216
+ logger.log(`✓ Flipped ${owner}/${repo}@${tag} to published (was draft=${release.draft}, prerelease=${release.prerelease}).`);
217
+ }
218
+
219
+ // Sanity check — ensure the auto-updater feeds are present so electron-updater works.
220
+ const { data: assets } = await octokit.rest.repos.listReleaseAssets({
221
+ owner, repo, release_id: release.id, per_page: 100,
222
+ });
223
+ const names = assets.map((a) => a.name);
224
+
225
+ const expected = ['latest.yml', 'latest-mac.yml', 'latest-linux.yml'];
226
+ const missing = expected.filter((feed) => !names.includes(feed));
227
+
228
+ if (missing.length > 0) {
229
+ logger.warn(`Auto-updater feeds missing from ${owner}/${repo}@${tag}: ${missing.join(', ')}`);
230
+ logger.warn(' electron-updater will fail for these platforms until the feed yml is uploaded.');
231
+ } else {
232
+ logger.log(`✓ All auto-updater feeds present (${expected.join(', ')}).`);
233
+ }
234
+
235
+ logger.log(`Release URL: https://github.com/${owner}/${repo}/releases/tag/${tag}`);
236
+ }
237
+
238
+ module.exports.findRelease = findRelease;
@@ -0,0 +1,37 @@
1
+ // Libraries
2
+ const Manager = new (require('../build.js'));
3
+ const logger = Manager.logger('install');
4
+ const local = require('../vendor/devkit/local.js');
5
+
6
+ const package = Manager.getPackage('main');
7
+
8
+ module.exports = async function (options) {
9
+ logger.log(`Installing ${package.name}...`);
10
+
11
+ const type = options._[1] || 'prod';
12
+
13
+ try {
14
+ if (['live', 'prod', 'p', 'production'].includes(type)) {
15
+ // The publish-day inverse of `i local`: flip every file: spec in the
16
+ // brand tree to the exact <linked version>, then one registry install
17
+ logger.log('Installing production (restoring registry specs tree-wide)...');
18
+ const actions = await local.restoreRegistrySpecs({ dir: process.cwd(), logger });
19
+ const flipped = actions.filter((action) => action.action === 'flip').length;
20
+ return logger.log(flipped > 0
21
+ ? `Production installation complete (${flipped} spec(s) restored to registry ranges).`
22
+ : 'Already on registry specs — nothing to flip.');
23
+ }
24
+
25
+ if (['dev', 'd', 'development', 'local', 'l'].includes(type)) {
26
+ logger.log('Installing development (local Omega monorepo)...');
27
+ await local.linkLocalPackages({
28
+ dir: process.cwd(),
29
+ monorepoRoot: local.resolveMonorepoRoot(),
30
+ logger,
31
+ });
32
+ return logger.log('Development installation complete.');
33
+ }
34
+ } catch (e) {
35
+ logger.error('Error during install:', e);
36
+ }
37
+ };