@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,150 @@
1
+ // `npx omega launch [app-path] [--args ...]` — open a packaged Electron app with a clean
2
+ // environment (specifically: ELECTRON_RUN_AS_NODE stripped from inherited env).
3
+ //
4
+ // Why this exists:
5
+ // When @omega.js/desktop is running inside a host process that has ELECTRON_RUN_AS_NODE=1 set
6
+ // (e.g., VS Code's Claude Code extension, which lives in a `node.mojom.NodeService`
7
+ // utility process), every shell @omega.js/desktop spawns inherits that variable. Launching a
8
+ // packaged Electron app from such a shell — via `open .../MyApp.app` or by running
9
+ // the binary directly — propagates the variable to the app, which Electron then
10
+ // honors by running as plain Node: no `app` API, no BrowserWindow, no window. The
11
+ // app exits cleanly with code 0 and no error. Total invisible silent failure.
12
+ //
13
+ // `bin/omega-desktop` and `src/gulp/main.js` already strip ELECTRON_RUN_AS_NODE
14
+ // at the boundary so anything launched THROUGH mgr or gulp is fine. But the manual
15
+ // smoke-test flow (`open -n release/mac-arm64/MyApp.app`) bypasses both. This
16
+ // command is the manual-launch equivalent of those boundary strips.
17
+ //
18
+ // Usage:
19
+ // npx omega launch # auto-find a .app/.exe under release/<host-platform>-<host-arch>/
20
+ // npx omega launch ./release/mac-arm64/MyApp.app # explicit path
21
+ // npx omega launch /Applications/MyApp.app # an installed .app
22
+ //
23
+ // Forwarding argv to the app (for hidden-mode tests, custom flags, etc.):
24
+ // npx omega launch --args="--omega-launched-at-login" # single flag (quoted to keep yargs from eating it)
25
+ // npx omega launch --args="--foo=bar --baz" # multiple, space-separated inside the quotes
26
+ //
27
+ // Aliases: `npx omega open`, `npx omega --launch`.
28
+
29
+ const path = require('path');
30
+ const fs = require('fs');
31
+ const jetpack = require('fs-jetpack');
32
+ const { spawn } = require('child_process');
33
+
34
+ const Manager = new (require('../build.js'));
35
+ const logger = Manager.logger('launch');
36
+
37
+ module.exports = async function (options) {
38
+ options = options || {};
39
+ options._ = options._ || [];
40
+
41
+ // Positional app path (after the `launch` subcommand). e.g. `mgr launch ./foo.app`
42
+ // → options._ = ['launch', './foo.app']. Resolution order:
43
+ // 1. Explicit positional argument
44
+ // 2. Auto-discover under release/<platform>-<arch>/ (output of `mgr package:quick`)
45
+ // 3. Error
46
+ let appPath = options._[1] ? path.resolve(process.cwd(), options._[1]) : null;
47
+ if (!appPath) {
48
+ appPath = autoDiscoverApp();
49
+ if (!appPath) {
50
+ throw new Error(`No app path supplied and could not auto-discover a packaged app. Tried release/<platform>-<arch>/. Pass an explicit path: \`npx omega launch ./release/...\``);
51
+ }
52
+ logger.log(`auto-discovered: ${path.relative(process.cwd(), appPath)}`);
53
+ }
54
+
55
+ if (!jetpack.exists(appPath)) {
56
+ throw new Error(`App not found: ${appPath}`);
57
+ }
58
+
59
+ // Strip ELECTRON_RUN_AS_NODE from the env we hand to the child. (The CLI entry already
60
+ // strips it from this process — we strip again at spawn time as defense-in-depth in case
61
+ // some intermediate code re-set it.)
62
+ const childEnv = { ...process.env };
63
+ delete childEnv.ELECTRON_RUN_AS_NODE;
64
+
65
+ // Forward extra argv to the app via `--args`. yargs splits the rest of argv into
66
+ // options._ when no flag matches; everything after the app path goes through.
67
+ const extraArgs = options._.slice(2);
68
+ // Also accept --args as an explicit array/string.
69
+ if (typeof options.args === 'string') extraArgs.push(...options.args.split(/\s+/).filter(Boolean));
70
+ else if (Array.isArray(options.args)) extraArgs.push(...options.args);
71
+
72
+ const platform = process.platform;
73
+ let cmd;
74
+ let args;
75
+ let logHint;
76
+
77
+ if (platform === 'darwin' && appPath.endsWith('.app')) {
78
+ // macOS .app — use `open -n` (new instance, LaunchServices-aware so dock-click
79
+ // routes to this instance for activate events). Pass extra argv via --args.
80
+ cmd = 'open';
81
+ args = ['-n', appPath, ...(extraArgs.length ? ['--args', ...extraArgs] : [])];
82
+ logHint = `open -n ${shellEscape(appPath)}${extraArgs.length ? ' --args ' + extraArgs.map(shellEscape).join(' ') : ''}`;
83
+ } else {
84
+ // Direct binary launch — Windows .exe, Linux binary, or running the .app's MacOS
85
+ // binary directly (rare, used to bypass LaunchServices for diagnosis).
86
+ cmd = appPath;
87
+ if (platform === 'darwin' && appPath.endsWith('.app')) {
88
+ cmd = path.join(appPath, 'Contents', 'MacOS', path.basename(appPath, '.app'));
89
+ }
90
+ args = extraArgs;
91
+ logHint = `${shellEscape(cmd)}${args.length ? ' ' + args.map(shellEscape).join(' ') : ''}`;
92
+ }
93
+
94
+ logger.log(`launching with clean env (ELECTRON_RUN_AS_NODE stripped)...`);
95
+ logger.log(` ${logHint}`);
96
+
97
+ // Detached so the launched app outlives the mgr process. Inherit stdio so any
98
+ // immediate-exit error (e.g. a crash in main.bundle.js) shows up in the user's
99
+ // terminal — defeats the whole "silent exit" symptom we're trying to make easy
100
+ // to debug.
101
+ const child = spawn(cmd, args, {
102
+ env: childEnv,
103
+ detached: true,
104
+ stdio: 'inherit',
105
+ });
106
+ child.unref();
107
+
108
+ // Give the child ~500ms to print any immediate failure before we return.
109
+ await new Promise((resolve) => setTimeout(resolve, 500));
110
+
111
+ logger.log('launched.');
112
+ };
113
+
114
+ // Auto-discover a packaged app under release/<platform>-<arch>/ — matches the output
115
+ // directory of `mgr package:quick` for the host platform/arch.
116
+ function autoDiscoverApp() {
117
+ const projectRoot = process.cwd();
118
+ const platform = process.platform === 'darwin' ? 'mac' : process.platform === 'win32' ? 'win' : 'linux';
119
+ const arch = process.arch;
120
+ const releaseDir = path.join(projectRoot, 'release', `${platform}-${arch}`);
121
+
122
+ if (!jetpack.exists(releaseDir)) return null;
123
+
124
+ // mac: look for *.app
125
+ if (platform === 'mac') {
126
+ const apps = jetpack.find(releaseDir, { matching: '*.app', recursive: false, files: false, directories: true });
127
+ if (apps.length > 0) return apps[0];
128
+ }
129
+ // win: look for *.exe at the root (electron-builder --dir output is `win-unpacked/<App>.exe`)
130
+ if (platform === 'win') {
131
+ const exes = jetpack.find(releaseDir, { matching: '*.exe', recursive: false, files: true });
132
+ if (exes.length > 0) return exes[0];
133
+ }
134
+ // linux: look for the binary (no extension) inside linux-unpacked/
135
+ if (platform === 'linux') {
136
+ const dirs = jetpack.list(releaseDir) || [];
137
+ for (const d of dirs) {
138
+ const full = path.join(releaseDir, d);
139
+ if (jetpack.exists(full) === 'dir') return full;
140
+ }
141
+ }
142
+
143
+ return null;
144
+ }
145
+
146
+ // Minimal shell-escape for log readability. Not used for actual exec (spawn args bypass shell).
147
+ function shellEscape(s) {
148
+ if (!/[\s'"\\$]/.test(s)) return s;
149
+ return `"${s.replace(/(["\\$])/g, '\\$1')}"`;
150
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @omega.js/desktop's half of the shared dependency checks
3
+ * ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)) — the logic is
4
+ * `@omega.js/devkit/target-dependencies` (one copy for every framework); this
5
+ * file is the DATA: which peer deps install as devDependencies, and the
6
+ * framework's own `safeInstall`.
7
+ *
8
+ * ensurePeerDependencies the target cannot build without them — LOCAL half,
9
+ * ensure-target.js runs it on every verb
10
+ * updateManager asks the npm registry whether the framework itself
11
+ * is stale — NETWORK half, deploy-precheck.js runs it
12
+ */
13
+ const shared = require('../../vendor/devkit/target-dependencies.js');
14
+ const { safeInstall } = require('../../utils/safe-install');
15
+
16
+ // Peer-dep install location overrides
17
+ const DEPENDENCY_MAP = {
18
+ gulp: 'dev',
19
+ electron: 'dev',
20
+ 'electron-builder': 'dev',
21
+ };
22
+
23
+ const readProject = shared.readProject;
24
+
25
+ /** See `@omega.js/devkit/target-dependencies` — bound to desktop's map + installer. */
26
+ function ensurePeerDependencies(input) {
27
+ return shared.ensurePeerDependencies({ ...input, dependencyMap: DEPENDENCY_MAP, safeInstall });
28
+ }
29
+
30
+ /** See `@omega.js/devkit/target-dependencies` — bound to desktop's installer. */
31
+ function updateManager(input) {
32
+ return shared.updateManager({ ...input, safeInstall });
33
+ }
34
+
35
+ module.exports = { ensurePeerDependencies, updateManager, readProject, DEPENDENCY_MAP };
@@ -0,0 +1,117 @@
1
+ /**
2
+ * deploy-precheck — the NETWORK half `omega setup` used to own
3
+ * ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
4
+ *
5
+ * Setup's local half now rides every verb (ensure-target.js); what needs the
6
+ * network rides the ONE verb that needs the remote side right —
7
+ * `omega deploy` — as a precheck before the dispatch:
8
+ *
9
+ * framework freshness the npm registry's latest vs the installed version
10
+ * validate-certs the signing prereqs, soft (a warning, never fatal)
11
+ * provision-repos the public releases repo the config names (idempotent)
12
+ * push-secrets the composed target env → GitHub Actions repo secrets
13
+ *
14
+ * Every step is soft: a precheck reports, the deploy proceeds. `--no-secrets`
15
+ * skips the whole precheck — the same opt-out name on web, desktop and
16
+ * extension (parity; desktop's old `--quick` is gone).
17
+ *
18
+ * The RUNNER is `@omega.js/devkit/deploy-precheck` (one copy for every
19
+ * framework); this file is desktop's STEPS.
20
+ */
21
+ const Manager = new (require('../../build.js'));
22
+ const { runDeployPrecheck } = require('../../vendor/devkit/deploy-precheck.js');
23
+ const { releasesRepo } = require('../../vendor/config/index.js');
24
+ const { updateManager } = require('./dependencies.js');
25
+ const { publishEnvSecrets } = require('../push-secrets.js');
26
+
27
+ const package = Manager.getPackage('main');
28
+
29
+ /**
30
+ * Auto-provision the brand's ONE public releases repo, addressed by
31
+ * @omega.js/config's `releasesRepo` (`<brand.id>-releases` under the brand repo
32
+ * owner unless the config names another). Idempotent: only creates if missing.
33
+ * Config-only, never the git remote: a brand nested in another repo would
34
+ * provision under the enclosing repo's owner (#799).
35
+ *
36
+ * @param {object} input
37
+ * @param {Function} input.log - Progress line sink.
38
+ * @param {Function} input.warn - Warning sink.
39
+ * @param {object} [input.octokit] - Injectable client (tests); defaults to the GH_TOKEN one.
40
+ * @param {object} [input.config] - Injectable resolved config (tests).
41
+ */
42
+ async function provisionReleaseRepos({ log, warn, octokit, config }) {
43
+ const { getOctokit, ensureRepo } = require('../../utils/github.js');
44
+ const client = octokit || getOctokit();
45
+ if (!client) return;
46
+
47
+ const resolved = config || Manager.getConfig() || {};
48
+ if (resolved.releases?.enabled === false) return;
49
+
50
+ const { owner, name, repo } = releasesRepo(resolved);
51
+ if (!repo) {
52
+ warn('provision-repos: could not address the releases repo. Set repo.providers.github.org (or targets.desktop.releases.owner) and brand.id in config/omega.json5.');
53
+ return;
54
+ }
55
+
56
+ const description = `Public release artifacts + auto-update feed for ${owner}'s @omega.js/desktop apps. Managed by @omega.js/desktop.`;
57
+
58
+ try {
59
+ const result = await ensureRepo(client, owner, name, { description, private: false });
60
+ log(`provision-repos: ✓ ${result.created ? 'created ' : ''}${repo}${result.created ? '' : ' already exists'} — releases (auto-update feed + the site's download links)`);
61
+ } catch (e) {
62
+ warn(`provision-repos: ✗ ${repo} (releases) — ${e.message}`);
63
+ }
64
+ }
65
+
66
+ /**
67
+ * The default steps, in order. Named so a test can hand its own recorder in
68
+ * and read back exactly which ones ran.
69
+ */
70
+ const STEPS = [
71
+ {
72
+ name: 'framework-freshness',
73
+ run: ({ projectDir, log, warn }) => updateManager({ projectDir, package, log, error: warn }),
74
+ },
75
+ {
76
+ name: 'validate-certs',
77
+ run: async ({ log }) => {
78
+ const validateCerts = require('../validate-certs.js');
79
+ const result = await validateCerts({ strict: false });
80
+ if (result?.ok === false) {
81
+ log('(Run `npx omega validate-certs` after wiring up your signing assets to re-check.)');
82
+ }
83
+ },
84
+ },
85
+ {
86
+ name: 'provision-repos',
87
+ run: async ({ projectDir, log, warn }) => {
88
+ require('../../vendor/config/index.js').loadEnv(projectDir);
89
+ if (!process.env.GH_TOKEN) {
90
+ return log('(Skipping repo provisioning: GH_TOKEN not set.)');
91
+ }
92
+ await provisionReleaseRepos({ log, warn });
93
+ },
94
+ },
95
+ {
96
+ name: 'push-secrets',
97
+ // No .env check and no PAT: the keys come from the composed target env (the
98
+ // brand root's .env, #678) and the transport is `gh`'s own auth session
99
+ // ([#682](https://github.com/Omega-JS-Stack/omega/issues/682)) — the same
100
+ // one-line call web and the extension make.
101
+ run: ({ projectDir, log, warn }) => publishEnvSecrets({ targetDir: projectDir, logger: { log, warn, error: warn } }),
102
+ },
103
+ ];
104
+
105
+ /**
106
+ * @param {object} input
107
+ * @param {string} input.projectDir - The target root.
108
+ * @param {object} input.options - The parsed CLI options (`secrets: false` = opted out).
109
+ * @param {object} input.logger - `{ log, warn, error }`.
110
+ * @param {Array} [input.steps] - Injectable step list (tests).
111
+ * @returns {Promise<{ skipped: string }|{ ran: string[] }>} The steps that ran, or the opt-out marker.
112
+ */
113
+ function deployPrecheck({ projectDir, options, logger, steps }) {
114
+ return runDeployPrecheck({ projectDir, options, logger, steps: steps || STEPS });
115
+ }
116
+
117
+ module.exports = { deployPrecheck, STEPS, provisionReleaseRepos };
@@ -0,0 +1,300 @@
1
+ /**
2
+ * ensure-target — the LOCAL, idempotent scaffold every verb runs
3
+ * ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
4
+ *
5
+ * `omega setup` used to own this half and nothing ran it for you, so a target
6
+ * drifted until someone remembered the command per target. It is retired: the
7
+ * "write it if missing" steps live here and build/package/publish/test/deploy
8
+ * all call it first, so every verb heals the tree on the way past.
9
+ *
10
+ * What it guarantees, in this order:
11
+ *
12
+ * package.json the omega verb scripts, `private`, and the electron main
13
+ * entry — pure manifest edits, so they land before anything
14
+ * that can throw
15
+ * .nvmrc SEEDED from the framework's pinned Electron runtime when
16
+ * the file is missing; the postinstall sync-nvmrc script is
17
+ * the one live reader of the Electron releases feed and
18
+ * keeps it current from there (one writer per fact)
19
+ * node version a WARNING when the running major is not the pin
20
+ * peer dependencies installed when missing or behind (a satisfied target
21
+ * installs nothing)
22
+ * defaults tree src/defaults/** — copy-if-missing, marker merges for
23
+ * .env/.gitignore/AGENTS.md, workflows re-rendered
24
+ * locality a WARNING when the framework is a `file:` link
25
+ *
26
+ * Everything here is copy-if-missing, marker-merge or write-if-changed. What
27
+ * needs the network is NOT here — cert validation, repo provisioning, secret
28
+ * publication and the framework freshness check are `omega deploy` prechecks
29
+ * (deploy-precheck.js).
30
+ */
31
+ const path = require('path');
32
+ const jetpack = require('fs-jetpack');
33
+ const version = require('wonderful-version');
34
+ const Manager = new (require('../../build.js'));
35
+ const { ensurePeerDependencies, readProject } = require('./dependencies.js');
36
+ const { renderSecretsBlock } = require('../../vendor/config/env-delivery.js');
37
+ const { composeTargetWorkflows } = require('../../vendor/devkit/ci-workflows.js');
38
+ const { assertScaffoldable } = require('../../vendor/devkit/scaffold-guard.js');
39
+
40
+ const logger = Manager.logger('ensure-target');
41
+ const package = Manager.getPackage('main');
42
+
43
+ /**
44
+ * Sync the consumer manifest: the omega verb scripts, the npm-private latch,
45
+ * and the electron main entry (the gulp `bundle` task's output bundle).
46
+ * Identical content is not a write (#590).
47
+ */
48
+ function setupScripts(projectDir, result) {
49
+ projectDir = projectDir || Manager.getRootPath('project');
50
+ result = result || { changed: [] };
51
+
52
+ const project = readProject(projectDir);
53
+
54
+ project.scripts = project.scripts || {};
55
+
56
+ Object.keys(package.projectScripts || {}).forEach((key) => {
57
+ project.scripts[key] = package.projectScripts[key];
58
+ });
59
+
60
+ // Electron consumer projects should not be published to npm
61
+ project.private = true;
62
+
63
+ // Point electron at the built main bundle.
64
+ // The gulp `bundle` task emits dist/main.bundle.js; the consumer's src/main.js is the *source* entry.
65
+ project.main = 'dist/main.bundle.js';
66
+
67
+ // Save the project — npm's own shape, trailing newline included. `jetpack.write`
68
+ // emits none, and this used to write unconditionally, so every build re-stripped
69
+ // the newline a consumer's editor or lint hook put back.
70
+ const projectPath = path.join(projectDir, 'package.json');
71
+ const contents = `${JSON.stringify(project, null, 2)}\n`;
72
+
73
+ if (jetpack.read(projectPath) === contents) {
74
+ return;
75
+ }
76
+
77
+ jetpack.write(projectPath, contents);
78
+ result.changed.push('package.json (scripts + main + private)');
79
+ }
80
+
81
+ /**
82
+ * Seed .nvmrc from the framework's pinned Electron runtime when it is missing.
83
+ * An existing pin is left alone: `scripts/sync-nvmrc.js` (the consumer's
84
+ * postinstall) is the ONE reader of the Electron releases feed and owns keeping
85
+ * it current, so this offline seed can never fight it.
86
+ */
87
+ function ensureNvmrc(projectDir, requiredMajor, result) {
88
+ const nvmrcPath = path.join(projectDir, '.nvmrc');
89
+
90
+ if (jetpack.exists(nvmrcPath)) {
91
+ return;
92
+ }
93
+
94
+ jetpack.write(nvmrcPath, `v${requiredMajor}/*\n`);
95
+ result.written.push('.nvmrc');
96
+ }
97
+
98
+ /**
99
+ * Warn when the running Node major is not the target's pin. Never fatal (#15):
100
+ * the pin is written, the remaining steps complete, and manage runs spawn
101
+ * verbs under the app's own Node anyway.
102
+ */
103
+ function checkNodeVersion(projectDir, requiredMajor, warn) {
104
+ const installedMajor = version.clean(process.version).split('.')[0];
105
+
106
+ if (String(installedMajor) === String(requiredMajor)) {
107
+ return;
108
+ }
109
+
110
+ warn(
111
+ `Node version mismatch: running v${installedMajor} but Electron requires v${requiredMajor} (matches Electron's bundled Node). `
112
+ + `Standalone shells: run \`nvm use\` (the .nvmrc is pinned to v${requiredMajor}/*) before the next build.`,
113
+ );
114
+ }
115
+
116
+ /**
117
+ * Apply the framework's defaults tree (src/defaults/**) to the target root via
118
+ * the shared devkit engine.
119
+ *
120
+ * @param {string} projectDir - The target root.
121
+ * @param {object} log - `{ log, warn, error }` handed to the engine.
122
+ */
123
+ async function copyDefaults(projectDir, engineLogger) {
124
+ projectDir = projectDir || Manager.getRootPath('project');
125
+ engineLogger = engineLogger || logger;
126
+
127
+ const defaultsDir = path.resolve(__dirname, '..', '..', 'defaults');
128
+
129
+ if (!jetpack.exists(defaultsDir)) {
130
+ engineLogger.warn(`Defaults directory not found at ${defaultsDir}`);
131
+ return;
132
+ }
133
+
134
+ // Template substitution context — `{{ versions.node }}` etc. resolved at scaffold time.
135
+ // Source of truth is @omega.js/desktop's pinned `omega.nodeRuntime` (the Electron-bundled
136
+ // Node major; consumers' .nvmrc additionally self-syncs from the live Electron feed via
137
+ // scripts/sync-nvmrc.js). `engines.node` is deliberately NOT used here — it's the honest
138
+ // dev floor (`>=22`), not a renderable version.
139
+ // `githubSecrets` is the build workflow's env block, GENERATED from the env
140
+ // schema ([#627](https://github.com/Omega-JS-Stack/omega/issues/627)): one
141
+ // `KEY: ${{ secrets.KEY }}` line per key the schema delivers to desktop, at
142
+ // the token's two-space indent. The yml rule below re-renders on every verb,
143
+ // so the block tracks the schema like the node version tracks the pin.
144
+ const templateContext = {
145
+ versions: { ...(package.engines || {}), node: package.omega.nodeRuntime },
146
+ githubSecrets: renderSecretsBlock('desktop', { indent: ' ' }),
147
+ };
148
+
149
+ // Scaffolding runs through the shared devkit engine (vendored at prepare time).
150
+ // Engine built-ins cover @omega.js/desktop's structural rules: `_.` renames (`_.gitignore` → `.gitignore`),
151
+ // archive-dir skips (`_mas/` reference plists ship in the package, never to
152
+ // consumers — `_`-prefixed FILENAMES like `test/_init.js` still copy), and
153
+ // write-only-if-changed.
154
+ const { applyDefaults, renderTemplate } = require('../../vendor/devkit/defaults-engine.js');
155
+
156
+ // Layer-aware config (cp121c/cp122d): brand targets carry NO local-layer
157
+ // omega.json5 — the brand file's `targets.*` is the per-target home, and
158
+ // the local file is the STANDALONE escape hatch only. Inside a brand
159
+ // monorepo the template's config must not scaffold at all (the old
160
+ // targets-only seed kept resurrecting deleted local files on every run).
161
+ const { resolveSeedMode } = require('../../vendor/config/index.js');
162
+ const seed = resolveSeedMode(projectDir);
163
+ const isBrandTarget = !seed.standalone;
164
+
165
+ const applied = applyDefaults({
166
+ defaultsDir,
167
+ outputDir: projectDir,
168
+ fileMap: {
169
+ // Consumers own their files — never overwrite what exists.
170
+ '**/*': { overwrite: false },
171
+ ...(isBrandTarget ? { 'config/omega.json5': { skip: true } } : {}),
172
+ // Marker-section merges: framework owns the Default section, consumer owns
173
+ // everything below the Custom marker. Every verb keeps the framework
174
+ // section live-synced without clobbering the consumer's values.
175
+ // The target-root .env is NOT scaffolded ([#678](https://github.com/Omega-JS-Stack/omega/issues/678)):
176
+ // the brand root's .env is the one file humans and the manager edit, a
177
+ // target .env is an optional per-key override a HUMAN writes, and no
178
+ // machine writes a target .env — so the template is gone.
179
+ '_.gitignore': { mergeLines: true, template: templateContext },
180
+ // The agent-docs chain (#63): AGENTS.md carries the content (marker-merged
181
+ // like .gitignore), CLAUDE.md is the one-line `@AGENTS.md` pointer — copied
182
+ // when missing by the `**/*` rule above, never clobbered.
183
+ 'AGENTS.md': { mergeLines: true, template: templateContext },
184
+ // Brand doc unification (Ian 2026-07-20): inside a brand monorepo the
185
+ // BRAND ROOT is the one doc home — per-target AGENTS.md/CLAUDE.md/CHANGELOG.md/docs/
186
+ // never scaffold, and existing framework-owned-only copies are swept
187
+ // (retire rules; consumer content is never destroyed). Standalone projects
188
+ // keep them. Last-match-wins: these override the rules above.
189
+ ...(isBrandTarget ? {
190
+ 'AGENTS.md': { retire: true, template: templateContext },
191
+ 'CLAUDE.md': { retire: true, template: templateContext },
192
+ 'CHANGELOG.md': { retire: true },
193
+ 'docs/**/*': { retire: true },
194
+ } : {}),
195
+ // Workflow YAMLs are framework-owned: always re-rendered so they track changes in
196
+ // @omega.js/desktop's defaults (e.g. engines.node bumping when Electron updates). The
197
+ // renderer is tolerant — GitHub Actions' `${{ secrets.X }}` survives — and
198
+ // the engine skips the write when the rendered content is byte-identical.
199
+ '**/*.{yml,yaml}': { overwrite: true, template: templateContext },
200
+ // CI (#265): GitHub runs workflows from the REPO ROOT only, so a per-target
201
+ // .github/workflows/ in a brand monorepo can never fire — the #627 secrets
202
+ // block was rendering into a file Actions would never execute. It is
203
+ // composed into the brand root below instead, scoped to this target's
204
+ // path, exactly as web and the extension do. Last-match-wins over the yml
205
+ // rule above; a STANDALONE target (its own git root) keeps its own copy.
206
+ ...(isBrandTarget ? { '.github/**/*': { skip: true } } : {}),
207
+ },
208
+ logger: engineLogger,
209
+ });
210
+
211
+ if (isBrandTarget) {
212
+ // The same templateContext the yml rule uses, so the composed copy carries
213
+ // the generated `githubSecrets` block — a composed workflow with the raw
214
+ // token in it would be the only file CI actually runs, and broken.
215
+ composeTargetWorkflows({
216
+ sourceDir: path.join(defaultsDir, '.github', 'workflows'),
217
+ targetDir: projectDir,
218
+ brandRoot: seed.brandRoot,
219
+ transform: (contents) => renderTemplate(contents, templateContext),
220
+ logger: engineLogger,
221
+ });
222
+ }
223
+
224
+ return applied;
225
+ }
226
+
227
+ /** Warn when the framework is a `file:` link — that install never publishes. */
228
+ function checkLocality(projectDir, warn) {
229
+ const project = readProject(projectDir);
230
+ const installedVersion = project.devDependencies[package.name] || project.dependencies[package.name];
231
+
232
+ if (!installedVersion) {
233
+ throw new Error(`No installed version of ${package.name} found in dependencies or devDependencies.`);
234
+ }
235
+
236
+ if (installedVersion.startsWith('file:')) {
237
+ warn(`⚠️ You are using the local version of ${package.name}. This WILL NOT WORK when published.`);
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Make the target whole — idempotent, offline, and quiet when there is
243
+ * nothing to do.
244
+ *
245
+ * @param {object} [options]
246
+ * @param {string} [options.projectDir] - The target root (default: cwd).
247
+ * @param {function} [options.log] - Line logger (silent by default).
248
+ * @param {function} [options.warn] - Warning logger (silent by default).
249
+ * @returns {Promise<{ written: string[], merged: string[], changed: string[] }>}
250
+ * Target-relative paths per outcome — empty on a no-op run.
251
+ */
252
+ async function ensureTarget(options) {
253
+ options = options || {};
254
+ const projectDir = options.projectDir || Manager.getRootPath('project');
255
+ const log = options.log || (() => {});
256
+ const warn = options.warn || (() => {});
257
+ const result = { written: [], merged: [], changed: [] };
258
+
259
+ // The framework's own tree is not a consumer target. Running the framework's
260
+ // suite from packages/desktop puts the framework at the cwd, and a verb that
261
+ // scaffolds unconditionally would install its own peer deps into itself and
262
+ // scatter the consumer defaults through the package. Refuse, quietly: this is
263
+ // a normal state, not a broken one.
264
+ if (readProject(projectDir).name === package.name) {
265
+ return result;
266
+ }
267
+
268
+ // A workspace ROOT is not a target either — and unlike the case above, landing
269
+ // there is an accident (a verb run from the wrong cwd), so it fails LOUD (#699).
270
+ assertScaffoldable(projectDir);
271
+
272
+ // The Electron-bundled Node major, offline: the framework's pinned runtime.
273
+ // `engines.node` is the honest dev FLOOR (`>=22`), never a version.
274
+ const requiredMajor = version.clean(package.omega.nodeRuntime).split('.')[0];
275
+
276
+ // Manifest edits FIRST — they don't depend on the Node version or the peer
277
+ // deps being right, and the consumer needs the postinstall script wired up
278
+ // regardless of what the steps below find.
279
+ setupScripts(projectDir, result);
280
+ ensureNvmrc(projectDir, requiredMajor, result);
281
+ checkNodeVersion(projectDir, requiredMajor, warn);
282
+
283
+ await ensurePeerDependencies({ projectDir, package, log });
284
+
285
+ const applied = await copyDefaults(projectDir, { log: () => {}, warn, error: warn });
286
+ if (applied) {
287
+ result.written.push(...applied.written);
288
+ result.merged.push(...applied.merged);
289
+ }
290
+
291
+ checkLocality(projectDir, warn);
292
+
293
+ for (const [label, files] of [['Created', result.written], ['Merged', result.merged], ['Synced', result.changed]]) {
294
+ if (files.length > 0) log(`${label} ${files.join(', ')}`);
295
+ }
296
+
297
+ return result;
298
+ }
299
+
300
+ module.exports = { ensureTarget, setupScripts, copyDefaults };