@omega.js/manager 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 (416) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/LICENSE +98 -0
  3. package/README.md +165 -0
  4. package/bin/omega +2 -0
  5. package/bin/omg +2 -0
  6. package/claude-plugin/.claude-plugin/plugin.json +11 -0
  7. package/claude-plugin/.mcp.json +9 -0
  8. package/claude-plugin/README.md +139 -0
  9. package/claude-plugin/hooks/gate/mark.sh +58 -0
  10. package/claude-plugin/hooks/gate/run.sh +97 -0
  11. package/claude-plugin/hooks/guard/run.sh +249 -0
  12. package/claude-plugin/hooks/hooks.json +63 -0
  13. package/claude-plugin/hooks/inject/run.sh +127 -0
  14. package/claude-plugin/hooks/lib/omega-gate.sh +20 -0
  15. package/claude-plugin/hooks/lib/omega-scope.sh +41 -0
  16. package/claude-plugin/hooks/lib/omega-skills.sh +209 -0
  17. package/claude-plugin/hooks/quality/run.sh +132 -0
  18. package/claude-plugin/hooks/shape/run.sh +45 -0
  19. package/claude-plugin/mcp-router-launch.js +29 -0
  20. package/claude-plugin/skills/README.md +48 -0
  21. package/claude-plugin/skills/accessibility/SKILL.md +31 -0
  22. package/claude-plugin/skills/analytics/SKILL.md +30 -0
  23. package/claude-plugin/skills/backend/SKILL.md +25 -0
  24. package/claude-plugin/skills/brandcheck/SKILL.md +29 -0
  25. package/claude-plugin/skills/browser/SKILL.md +64 -0
  26. package/claude-plugin/skills/client/SKILL.md +24 -0
  27. package/claude-plugin/skills/desktop/SKILL.md +25 -0
  28. package/claude-plugin/skills/extension/SKILL.md +25 -0
  29. package/claude-plugin/skills/main/SKILL.md +54 -0
  30. package/claude-plugin/skills/manager/SKILL.md +25 -0
  31. package/claude-plugin/skills/seo/SKILL.md +36 -0
  32. package/claude-plugin/skills/theme/SKILL.md +33 -0
  33. package/claude-plugin/skills/web/SKILL.md +29 -0
  34. package/dist/cli-run.js +34 -0
  35. package/dist/cli.js +29 -0
  36. package/dist/commands/build.js +17 -0
  37. package/dist/commands/clean.js +16 -0
  38. package/dist/commands/company.js +46 -0
  39. package/dist/commands/deploy.js +143 -0
  40. package/dist/commands/dev.js +437 -0
  41. package/dist/commands/devlog.js +25 -0
  42. package/dist/commands/help.js +48 -0
  43. package/dist/commands/manage.js +53 -0
  44. package/dist/commands/migrate.js +76 -0
  45. package/dist/commands/onboard.js +31 -0
  46. package/dist/commands/pipeline.js +319 -0
  47. package/dist/commands/test.js +380 -0
  48. package/dist/commands/update.js +128 -0
  49. package/dist/commands/version.js +8 -0
  50. package/dist/company-init.js +167 -0
  51. package/dist/company.js +283 -0
  52. package/dist/config.js +1359 -0
  53. package/dist/devlog/index.js +226 -0
  54. package/dist/devlog/lib/collect-commits.js +136 -0
  55. package/dist/devlog/lib/generate-post.js +201 -0
  56. package/dist/devlog/lib/ghostii.js +122 -0
  57. package/dist/devlog/lib/project-map.js +98 -0
  58. package/dist/devlog/lib/publish-website.js +88 -0
  59. package/dist/index.js +45 -0
  60. package/dist/lib/agents-md.js +201 -0
  61. package/dist/lib/analytics-secret.js +22 -0
  62. package/dist/lib/argv.js +21 -0
  63. package/dist/lib/auth-admin.js +120 -0
  64. package/dist/lib/automation-client.js +210 -0
  65. package/dist/lib/backend-marketing.js +49 -0
  66. package/dist/lib/brand.js +240 -0
  67. package/dist/lib/bundle-id.js +53 -0
  68. package/dist/lib/claude-settings.js +125 -0
  69. package/dist/lib/company-scaffold.js +213 -0
  70. package/dist/lib/company.js +227 -0
  71. package/dist/lib/config-flow.js +350 -0
  72. package/dist/lib/config-write.js +41 -0
  73. package/dist/lib/custom-target.js +75 -0
  74. package/dist/lib/domain-utils.js +19 -0
  75. package/dist/lib/duration.js +39 -0
  76. package/dist/lib/env-order.js +236 -0
  77. package/dist/lib/env-secret.js +78 -0
  78. package/dist/lib/firestore-rest.js +326 -0
  79. package/dist/lib/framework-bin.js +156 -0
  80. package/dist/lib/gitignore.js +63 -0
  81. package/dist/lib/google-auth.js +495 -0
  82. package/dist/lib/google-token.js +66 -0
  83. package/dist/lib/jwt.js +31 -0
  84. package/dist/lib/legacy-oauth.js +59 -0
  85. package/dist/lib/node-version.js +127 -0
  86. package/dist/lib/owner-plan.js +78 -0
  87. package/dist/lib/package-scripts.js +152 -0
  88. package/dist/lib/preflight.js +470 -0
  89. package/dist/lib/product-create.js +144 -0
  90. package/dist/lib/run-command.js +74 -0
  91. package/dist/lib/run-gates.js +70 -0
  92. package/dist/lib/run-output.js +42 -0
  93. package/dist/lib/run-summary.js +384 -0
  94. package/dist/lib/scaffold.js +427 -0
  95. package/dist/lib/service-input.js +207 -0
  96. package/dist/lib/service-runner.js +466 -0
  97. package/dist/lib/stale.js +24 -0
  98. package/dist/lib/target-selection.js +155 -0
  99. package/dist/lib/verb-fanout.js +128 -0
  100. package/dist/lib/verify-live.js +188 -0
  101. package/dist/manage.js +311 -0
  102. package/dist/omega-bin.js +7 -0
  103. package/dist/onboard.js +532 -0
  104. package/dist/services/account/ensure/users.js +259 -0
  105. package/dist/services/account/index.js +97 -0
  106. package/dist/services/account/lib/backend-client.js +107 -0
  107. package/dist/services/account/lib/password.js +36 -0
  108. package/dist/services/account/lib/resolve-password.js +100 -0
  109. package/dist/services/advertising/ensure/sites.js +101 -0
  110. package/dist/services/advertising/index.js +101 -0
  111. package/dist/services/advertising/lib/adsense-api.js +41 -0
  112. package/dist/services/ai/ensure/keys.js +21 -0
  113. package/dist/services/ai/index.js +36 -0
  114. package/dist/services/analytics/ensure/google-firebase-link.js +230 -0
  115. package/dist/services/analytics/ensure/google-streams.js +256 -0
  116. package/dist/services/analytics/ensure/meta-pixel.js +22 -0
  117. package/dist/services/analytics/ensure/tiktok-pixel.js +22 -0
  118. package/dist/services/analytics/index.js +134 -0
  119. package/dist/services/analytics/lib/analytics-api.js +156 -0
  120. package/dist/services/analytics/lib/meta-api.js +83 -0
  121. package/dist/services/analytics/lib/pixel-account.js +78 -0
  122. package/dist/services/analytics/lib/pixel-provision.js +152 -0
  123. package/dist/services/analytics/lib/pixel-specs.js +57 -0
  124. package/dist/services/analytics/lib/pixel-token.js +88 -0
  125. package/dist/services/analytics/lib/property-flow.js +77 -0
  126. package/dist/services/analytics/lib/tiktok-api.js +157 -0
  127. package/dist/services/analytics/lib/tiktok-auth.js +153 -0
  128. package/dist/services/assets/ensure/logo-gen.js +68 -0
  129. package/dist/services/assets/index.js +109 -0
  130. package/dist/services/assets/lib/assets-config.js +168 -0
  131. package/dist/services/assets/lib/brandmark-api.js +160 -0
  132. package/dist/services/assets/lib/derived.js +113 -0
  133. package/dist/services/assets/lib/font-loader.js +67 -0
  134. package/dist/services/assets/lib/reconcile.js +122 -0
  135. package/dist/services/assets/lib/reset.js +118 -0
  136. package/dist/services/assets/lib/svg-logo-generator.js +154 -0
  137. package/dist/services/assets/lib/svg-to-black.js +32 -0
  138. package/dist/services/assets/write/favicons.js +82 -0
  139. package/dist/services/assets/write/icons.js +64 -0
  140. package/dist/services/assets/write/process.js +96 -0
  141. package/dist/services/assets/write/reconcile.js +30 -0
  142. package/dist/services/assets/write/social-icons.js +108 -0
  143. package/dist/services/assets/write/templates.js +345 -0
  144. package/dist/services/bookmark/ensure/sync.js +255 -0
  145. package/dist/services/bookmark/index.js +17 -0
  146. package/dist/services/campaigns/ensure/contact-person.js +40 -0
  147. package/dist/services/campaigns/ensure/custom-fields.js +84 -0
  148. package/dist/services/campaigns/ensure/domain-auth.js +92 -0
  149. package/dist/services/campaigns/ensure/event-webhook.js +89 -0
  150. package/dist/services/campaigns/ensure/link-branding.js +187 -0
  151. package/dist/services/campaigns/ensure/list.js +50 -0
  152. package/dist/services/campaigns/ensure/segments.js +109 -0
  153. package/dist/services/campaigns/ensure/sender-identity.js +153 -0
  154. package/dist/services/campaigns/ensure/unsubscribe-groups.js +116 -0
  155. package/dist/services/campaigns/index.js +79 -0
  156. package/dist/services/campaigns/lib/dns-sync.js +81 -0
  157. package/dist/services/campaigns/lib/segment-query.js +138 -0
  158. package/dist/services/campaigns/lib/sendgrid-api.js +287 -0
  159. package/dist/services/captcha/ensure/site-key.js +83 -0
  160. package/dist/services/captcha/index.js +78 -0
  161. package/dist/services/captcha/lib/console-url.js +45 -0
  162. package/dist/services/captcha/lib/recaptcha-api.js +36 -0
  163. package/dist/services/certificates/ensure/api-key.js +22 -0
  164. package/dist/services/certificates/ensure/bundle-ids.js +115 -0
  165. package/dist/services/certificates/ensure/certificates.js +187 -0
  166. package/dist/services/certificates/ensure/profiles.js +143 -0
  167. package/dist/services/certificates/index.js +225 -0
  168. package/dist/services/certificates/lib/apple-api.js +183 -0
  169. package/dist/services/certificates/lib/certificate-manager.js +252 -0
  170. package/dist/services/certificates/lib/identifier-manager.js +107 -0
  171. package/dist/services/certificates/lib/keychain.js +135 -0
  172. package/dist/services/certificates/lib/manual-walkthrough.js +165 -0
  173. package/dist/services/certificates/lib/profile-manager.js +115 -0
  174. package/dist/services/chat/data/baseline-knowledge.md +96 -0
  175. package/dist/services/chat/ensure/chat.js +106 -0
  176. package/dist/services/chat/ensure/user.js +45 -0
  177. package/dist/services/chat/index.js +139 -0
  178. package/dist/services/chat/lib/baseline-knowledge.js +137 -0
  179. package/dist/services/cloud/ensure/authentication.js +267 -0
  180. package/dist/services/cloud/ensure/billing.js +120 -0
  181. package/dist/services/cloud/ensure/cloud-messaging.js +105 -0
  182. package/dist/services/cloud/ensure/database.js +60 -0
  183. package/dist/services/cloud/ensure/firestore.js +79 -0
  184. package/dist/services/cloud/ensure/functions.js +49 -0
  185. package/dist/services/cloud/ensure/hosting.js +398 -0
  186. package/dist/services/cloud/ensure/oauth-consent.js +248 -0
  187. package/dist/services/cloud/ensure/project-settings.js +72 -0
  188. package/dist/services/cloud/ensure/sdk-config.js +95 -0
  189. package/dist/services/cloud/ensure/service-account.js +152 -0
  190. package/dist/services/cloud/ensure/services.js +103 -0
  191. package/dist/services/cloud/ensure/storage.js +47 -0
  192. package/dist/services/cloud/index.js +130 -0
  193. package/dist/services/cloud/lib/access-heal.js +130 -0
  194. package/dist/services/cloud/lib/firebase-api.js +662 -0
  195. package/dist/services/cloud/lib/project-flow.js +102 -0
  196. package/dist/services/directory/ensure/entry.js +48 -0
  197. package/dist/services/directory/index.js +64 -0
  198. package/dist/services/directory/lib/blocks.js +104 -0
  199. package/dist/services/disperse/index.js +45 -0
  200. package/dist/services/disperse/write/certs.js +117 -0
  201. package/dist/services/domain/ensure/nameservers.js +179 -0
  202. package/dist/services/domain/index.js +69 -0
  203. package/dist/services/domain/lib/namecheap-api.js +167 -0
  204. package/dist/services/domain/lib/registrars.js +46 -0
  205. package/dist/services/domain/lib/whitelist-walkthrough.js +76 -0
  206. package/dist/services/edge/ensure/cache-rules.js +105 -0
  207. package/dist/services/edge/ensure/dns-records.js +304 -0
  208. package/dist/services/edge/ensure/email-routing.js +292 -0
  209. package/dist/services/edge/ensure/rules-configuration.js +98 -0
  210. package/dist/services/edge/ensure/rules-managed-transforms.js +101 -0
  211. package/dist/services/edge/ensure/rules-redirect.js +107 -0
  212. package/dist/services/edge/ensure/rules-response-headers.js +90 -0
  213. package/dist/services/edge/ensure/rules-security.js +142 -0
  214. package/dist/services/edge/ensure/speed-scheduled-tests.js +98 -0
  215. package/dist/services/edge/ensure/workers.js +219 -0
  216. package/dist/services/edge/ensure/zone-settings.js +108 -0
  217. package/dist/services/edge/ensure/zone.js +183 -0
  218. package/dist/services/edge/index.js +73 -0
  219. package/dist/services/edge/lib/cloudflare-api.js +84 -0
  220. package/dist/services/edge/lib/dns-records-helpers.js +518 -0
  221. package/dist/services/edge/lib/read-cache.js +16 -0
  222. package/dist/services/edge/lib/ruleset-helper.js +108 -0
  223. package/dist/services/edge/workers/omega-api-proxy.js +43 -0
  224. package/dist/services/email/data/baseline-filter.md +4 -0
  225. package/dist/services/email/data/baseline-knowledge.md +86 -0
  226. package/dist/services/email/ensure/agent.js +107 -0
  227. package/dist/services/email/ensure/user.js +45 -0
  228. package/dist/services/email/index.js +138 -0
  229. package/dist/services/email/lib/baseline.js +82 -0
  230. package/dist/services/email/lib/knowledge-file.js +53 -0
  231. package/dist/services/forms/ensure/form.js +46 -0
  232. package/dist/services/forms/ensure/user.js +45 -0
  233. package/dist/services/forms/index.js +138 -0
  234. package/dist/services/migrations/ensure/notifications.js +189 -0
  235. package/dist/services/migrations/ensure/orders.js +34 -0
  236. package/dist/services/migrations/ensure/payment-provider.js +132 -0
  237. package/dist/services/migrations/ensure/payments-intents.js +34 -0
  238. package/dist/services/migrations/ensure/state-retirement.js +266 -0
  239. package/dist/services/migrations/ensure/targets-rename.js +124 -0
  240. package/dist/services/migrations/ensure/users.js +1176 -0
  241. package/dist/services/migrations/index.js +101 -0
  242. package/dist/services/migrations/lib/attribution-touch.js +64 -0
  243. package/dist/services/migrations/lib/ensure-metadata.js +144 -0
  244. package/dist/services/migrations/lib/migration-runner.js +473 -0
  245. package/dist/services/migrations/lib/sanitize-strings.js +112 -0
  246. package/dist/services/migrations/lib/schema-validator.js +154 -0
  247. package/dist/services/monitoring/ensure/dsn.js +54 -0
  248. package/dist/services/monitoring/ensure/projects.js +135 -0
  249. package/dist/services/monitoring/index.js +54 -0
  250. package/dist/services/monitoring/lib/sentry-api.js +94 -0
  251. package/dist/services/newsletter/ensure/custom-fields.js +90 -0
  252. package/dist/services/newsletter/ensure/publication.js +94 -0
  253. package/dist/services/newsletter/ensure/segments.js +140 -0
  254. package/dist/services/newsletter/ensure/webhook.js +108 -0
  255. package/dist/services/newsletter/index.js +64 -0
  256. package/dist/services/newsletter/lib/beehiiv-api.js +124 -0
  257. package/dist/services/newsletter/lib/segment-automation.js +577 -0
  258. package/dist/services/payment/ensure/chargebee-account.js +30 -0
  259. package/dist/services/payment/ensure/chargebee-products.js +359 -0
  260. package/dist/services/payment/ensure/chargebee-webhook.js +113 -0
  261. package/dist/services/payment/ensure/paypal-account.js +36 -0
  262. package/dist/services/payment/ensure/paypal-products.js +374 -0
  263. package/dist/services/payment/ensure/paypal-webhook.js +128 -0
  264. package/dist/services/payment/ensure/stripe-account.js +93 -0
  265. package/dist/services/payment/ensure/stripe-disputes.js +56 -0
  266. package/dist/services/payment/ensure/stripe-products.js +245 -0
  267. package/dist/services/payment/ensure/stripe-radar.js +74 -0
  268. package/dist/services/payment/ensure/stripe-webhook.js +130 -0
  269. package/dist/services/payment/index.js +163 -0
  270. package/dist/services/payment/lib/chargebee-api.js +338 -0
  271. package/dist/services/payment/lib/payment-utils.js +116 -0
  272. package/dist/services/payment/lib/paypal-api.js +354 -0
  273. package/dist/services/payment/lib/provider-setup.js +134 -0
  274. package/dist/services/payment/lib/stripe-api.js +152 -0
  275. package/dist/services/repo/ensure/org.js +70 -0
  276. package/dist/services/repo/ensure/pages.js +72 -0
  277. package/dist/services/repo/ensure/repo.js +90 -0
  278. package/dist/services/repo/index.js +52 -0
  279. package/dist/services/repo/lib/github-api.js +196 -0
  280. package/dist/services/search/ensure/ga-link.js +57 -0
  281. package/dist/services/search/ensure/property.js +137 -0
  282. package/dist/services/search/ensure/sitemaps.js +70 -0
  283. package/dist/services/search/index.js +61 -0
  284. package/dist/services/search/lib/search-console-api.js +92 -0
  285. package/dist/services/seo/ensure/github-repos.js +271 -0
  286. package/dist/services/seo/index.js +55 -0
  287. package/dist/services/seo/lib/gh-api.js +161 -0
  288. package/dist/services/seo/templates/developer-tool/.github/workflows/maintenance.yml +25 -0
  289. package/dist/services/seo/templates/developer-tool/.nvmrc +1 -0
  290. package/dist/services/seo/templates/developer-tool/_README.md.js +121 -0
  291. package/dist/services/seo/templates/developer-tool/_package.json.js +33 -0
  292. package/dist/services/seo/templates/developer-tool/src/index.js +120 -0
  293. package/dist/services/seo/templates/index.js +57 -0
  294. package/dist/services/server/ensure/brands.js +63 -0
  295. package/dist/services/server/index.js +42 -0
  296. package/dist/services/testing/ensure/target-checks.js +97 -0
  297. package/dist/services/testing/index.js +11 -0
  298. package/dist/services/testing/lib/checks.js +467 -0
  299. package/dist/services/update/index.js +20 -0
  300. package/dist/services/update/lib/cache.js +59 -0
  301. package/dist/services/update/lib/fingerprint.js +157 -0
  302. package/dist/services/update/write/targets.js +206 -0
  303. package/dist/services/workspace/ensure/agents.js +42 -0
  304. package/dist/services/workspace/ensure/claude-settings.js +34 -0
  305. package/dist/services/workspace/ensure/config.js +54 -0
  306. package/dist/services/workspace/ensure/defaults.js +60 -0
  307. package/dist/services/workspace/ensure/env-keys.js +55 -0
  308. package/dist/services/workspace/ensure/env-order.js +66 -0
  309. package/dist/services/workspace/ensure/env-rules.js +97 -0
  310. package/dist/services/workspace/ensure/gitignore.js +18 -0
  311. package/dist/services/workspace/ensure/scripts.js +126 -0
  312. package/dist/services/workspace/ensure/structure.js +97 -0
  313. package/dist/services/workspace/ensure/translation-sdk.js +148 -0
  314. package/dist/services/workspace/ensure/workflows.js +54 -0
  315. package/dist/services/workspace/index.js +8 -0
  316. package/dist/vendor/account/engine.js +182 -0
  317. package/dist/vendor/account/features.js +220 -0
  318. package/dist/vendor/account/index.js +53 -0
  319. package/dist/vendor/account/schema.js +272 -0
  320. package/dist/vendor/account/subscription.js +38 -0
  321. package/dist/vendor/config/company.js +31 -0
  322. package/dist/vendor/config/defaults.js +173 -0
  323. package/dist/vendor/config/demo.js +18 -0
  324. package/dist/vendor/config/desktop-artifacts.js +110 -0
  325. package/dist/vendor/config/edit.js +769 -0
  326. package/dist/vendor/config/env-delivery.js +145 -0
  327. package/dist/vendor/config/env-rules.js +93 -0
  328. package/dist/vendor/config/env-schema.js +1078 -0
  329. package/dist/vendor/config/env.js +445 -0
  330. package/dist/vendor/config/hooks.js +97 -0
  331. package/dist/vendor/config/index.js +237 -0
  332. package/dist/vendor/config/instances.js +208 -0
  333. package/dist/vendor/config/load.js +490 -0
  334. package/dist/vendor/config/merge.js +68 -0
  335. package/dist/vendor/config/order.js +139 -0
  336. package/dist/vendor/config/ports.js +374 -0
  337. package/dist/vendor/config/providers.js +32 -0
  338. package/dist/vendor/config/repo.js +142 -0
  339. package/dist/vendor/config/retired-keys.js +430 -0
  340. package/dist/vendor/config/schema.js +1610 -0
  341. package/dist/vendor/config/secrets.js +50 -0
  342. package/dist/vendor/config/seed.js +34 -0
  343. package/dist/vendor/config/site-global.js +205 -0
  344. package/dist/vendor/config/validate.js +554 -0
  345. package/dist/vendor/config/winback.js +61 -0
  346. package/dist/vendor/devkit/attach-log-file.js +262 -0
  347. package/dist/vendor/devkit/certs.js +199 -0
  348. package/dist/vendor/devkit/ci-workflows.js +520 -0
  349. package/dist/vendor/devkit/cli-router.js +156 -0
  350. package/dist/vendor/devkit/command-path.js +46 -0
  351. package/dist/vendor/devkit/deploy-record.js +180 -0
  352. package/dist/vendor/devkit/flows.js +317 -0
  353. package/dist/vendor/devkit/local-https.js +360 -0
  354. package/dist/vendor/devkit/local.js +1905 -0
  355. package/dist/vendor/devkit/logger.js +128 -0
  356. package/dist/vendor/devkit/omega-bin.js +345 -0
  357. package/dist/vendor/devkit/prompt.js +187 -0
  358. package/dist/vendor/devkit/safe-install.js +18 -0
  359. package/dist/vendor/devkit/stop-signals.js +28 -0
  360. package/dist/vendor/devkit/test/scope.js +162 -0
  361. package/dist/vendor/devkit/translate/cache.js +84 -0
  362. package/dist/vendor/devkit/translate/engine.js +243 -0
  363. package/dist/vendor/devkit/translate/index.js +49 -0
  364. package/dist/vendor/devkit/translate/languages.js +134 -0
  365. package/dist/vendor/devkit/translate/providers.js +188 -0
  366. package/dist/vendor/devkit/update.js +569 -0
  367. package/docs/AGENTS.md +200 -0
  368. package/docs/account.md +45 -0
  369. package/docs/advertising.md +46 -0
  370. package/docs/ai.md +34 -0
  371. package/docs/analytics.md +69 -0
  372. package/docs/assets.md +57 -0
  373. package/docs/bookmark.md +26 -0
  374. package/docs/brand.md +151 -0
  375. package/docs/campaigns.md +96 -0
  376. package/docs/captcha.md +46 -0
  377. package/docs/certificates.md +68 -0
  378. package/docs/chat.md +47 -0
  379. package/docs/cloud.md +110 -0
  380. package/docs/company.md +64 -0
  381. package/docs/directory.md +140 -0
  382. package/docs/disperse.md +46 -0
  383. package/docs/domain.md +56 -0
  384. package/docs/edge.md +234 -0
  385. package/docs/email.md +42 -0
  386. package/docs/forms.md +48 -0
  387. package/docs/index.md +109 -0
  388. package/docs/migration.md +203 -0
  389. package/docs/migrations.md +56 -0
  390. package/docs/monitoring.md +41 -0
  391. package/docs/newsletter.md +48 -0
  392. package/docs/payment.md +83 -0
  393. package/docs/repo.md +48 -0
  394. package/docs/search.md +44 -0
  395. package/docs/seo.md +34 -0
  396. package/docs/server.md +37 -0
  397. package/docs/shared/agent-docs.md +89 -0
  398. package/docs/shared/analytics.md +612 -0
  399. package/docs/shared/brands.md +51 -0
  400. package/docs/shared/breaking-changes.md +497 -0
  401. package/docs/shared/config.md +1387 -0
  402. package/docs/shared/deploys.md +215 -0
  403. package/docs/shared/icons.md +201 -0
  404. package/docs/shared/local-dev.md +147 -0
  405. package/docs/shared/logging.md +202 -0
  406. package/docs/shared/monitoring.md +153 -0
  407. package/docs/shared/publishing.md +183 -0
  408. package/docs/shared/rulings.md +34 -0
  409. package/docs/shared/testing.md +147 -0
  410. package/docs/shared/theming.md +604 -0
  411. package/docs/shared/translation.md +291 -0
  412. package/docs/shared/updates.md +61 -0
  413. package/docs/testing.md +34 -0
  414. package/docs/update.md +36 -0
  415. package/docs/workspace.md +64 -0
  416. package/package.json +88 -0
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Company-workspace scaffolding — the file plan `omega company init` writes.
3
+ *
4
+ * The COMPANY rung's counterpart to lib/scaffold.js (brands): a company
5
+ * workspace is a REPO, not a machine cache — the config layer every brand
6
+ * inherits, the `.env` that sits UNDER every brand's own, and the shared
7
+ * Apple signing tree — so init is one plan of files in one directory, written
8
+ * with the same fill-missing semantics (existing files are never touched).
9
+ *
10
+ * What the repo TRACKS is the config skeleton, the README, and the
11
+ * .gitignore. Everything the workspace holds that is unshareable stays out of
12
+ * git: `.env` (secrets), `.omega/` (the signing tree's `.p8`/`.p12`/CSR
13
+ * private keys, run output, logs), and `brands/` (each managed brand is its
14
+ * OWN repo — never an embedded one).
15
+ */
16
+
17
+ const path = require('node:path');
18
+
19
+ // The .env template is a canonical render with NO values — one SSOT
20
+ // (lib/env-order.js) shared with the brand scaffold stub and every
21
+ // writeEnvValue writeback, so a company .env and a brand .env look alike.
22
+ const { renderCanonicalEnv } = require('./env-order.js');
23
+
24
+ // The ONE environment vocabulary — the same three overlays the brand scaffold
25
+ // plans beside its own .env (#586)
26
+ const { ENV_ENVIRONMENTS } = require('../vendor/config/index.js');
27
+
28
+ // Directories init guarantees. The signing tree is the certificates service's
29
+ // layout under {signingRoot}/.omega/certificates/apple/ — created empty so
30
+ // the operator has an obvious home for the App Store Connect `AuthKey_*.p8`
31
+ // before any run; `brands/` is the default `brands.roots` entry (a missing
32
+ // one is a company-config error on the next manage).
33
+ const COMPANY_DIRS = [
34
+ 'brands',
35
+ '.omega/certificates/apple/certificates',
36
+ '.omega/certificates/apple/csr',
37
+ '.omega/certificates/apple/profiles',
38
+ ];
39
+
40
+ /**
41
+ * The company-level config/omega.json5: the `brands` key (which is what MAKES
42
+ * a directory a company root) plus commented, brand-agnostic placeholders for
43
+ * the layers a company usually owns. Every key here is a DEFAULT its brands
44
+ * inherit and can override.
45
+ */
46
+ function renderCompanyConfig(name) {
47
+ return [
48
+ `// ${name} — company-level omega.json5: the config layer EVERY managed brand`,
49
+ '// inherits (manager DEFAULTS ← this file ← the brand ← the brand\'s targets), so a key',
50
+ '// set here is a default any brand can override in its own config/omega.json5.',
51
+ '// Secrets NEVER live here — they go in the gitignored .env beside this file.',
52
+ '{',
53
+ ' // Where the brands are, RELATIVE to this root (absolute paths are an error).',
54
+ ' // Keep them inside the workspace with \'./brands\', or point at the org folder',
55
+ ' // with [\'..\'] to treat this workspace\'s SIBLING directories as the brands.',
56
+ ' brands: {',
57
+ ' roots: ["./brands"],',
58
+ ' },',
59
+ '',
60
+ ' // Company identity — a brand without its own value inherits these.',
61
+ ' // brand: {',
62
+ ' // name: "My Company",',
63
+ ' // url: "https://mycompany.com",',
64
+ ' // contact: { email: "support@mycompany.com" },',
65
+ ' // },',
66
+ '',
67
+ ' // Managed Firebase Auth accounts every brand should carry (account service).',
68
+ ' // Passwords never live here — see the brand scaffold\'s notes on the seed.',
69
+ ' // account: {',
70
+ ' // admins: [',
71
+ ' // { email: "you@mycompany.com", account: true, marketing: false },',
72
+ ' // ],',
73
+ ' // },',
74
+ '',
75
+ ' // The company GA account: a brand\'s analytics setup defaults to it instead',
76
+ ' // of prompting for one (a brand-level accountId always wins).',
77
+ ' // analytics: {',
78
+ ' // providers: { google: { accountId: "123456789" } },',
79
+ ' // },',
80
+ '',
81
+ ' // Error monitoring: the Sentry org every brand\'s projects live under.',
82
+ ' // monitoring: {',
83
+ ' // providers: { sentry: { org: "my-company" } },',
84
+ ' // },',
85
+ '',
86
+ ' // Apple signing: ONE Apple account signs everything the company ships, so',
87
+ ' // the reverse-DNS prefix (and the signing tree below) belongs here.',
88
+ ' // certificates: {',
89
+ ' // providers: { apple: { bundleIdPrefix: "com.mycompany" } },',
90
+ ' // },',
91
+ '}',
92
+ '',
93
+ ].join('\n');
94
+ }
95
+
96
+ /**
97
+ * The company `.env` template — every canonical group, every key commented
98
+ * out. Nothing is generated: the company file holds only what EVERY brand
99
+ * shares (the Apple signing account, a company-wide token), and a brand's own
100
+ * `.env` wins over it.
101
+ */
102
+ function renderCompanyEnvStub(name) {
103
+ return renderCanonicalEnv({
104
+ header: [
105
+ `# ${name} — COMPANY secrets (gitignored; loaded UNDER every managed brand's own .env).`,
106
+ '# Precedence: shell env > brand .env > this file. Put here only what every brand',
107
+ '# shares — anything brand-specific belongs in that brand\'s .env, never here.',
108
+ ],
109
+ });
110
+ }
111
+
112
+ /**
113
+ * A company environment-overlay stub — a header comment and NOTHING else, the
114
+ * same shape the BRAND scaffold plans
115
+ * ([#586](https://github.com/Omega-JS-Stack/omega/issues/586)). The company
116
+ * layer is a layer like any other: its `.env` is the one file that documents
117
+ * the keys, and an overlay holds only the handful that differ for one
118
+ * environment (a sandbox Apple account, a staging token).
119
+ *
120
+ * @param {string} environment - `development` | `testing` | `production`.
121
+ * @returns {string} The file contents.
122
+ */
123
+ function renderCompanyEnvOverlayStub(environment) {
124
+ return [
125
+ `# .env.${environment} — overlays .env when a managed brand runs in ${environment} (gitignored).`,
126
+ '# Only the keys that differ — anything not set here falls through to .env.',
127
+ '',
128
+ ].join('\n');
129
+ }
130
+
131
+ /**
132
+ * The company repo's .gitignore. The `.omega/` and `logs/` entries match the
133
+ * shared healer's (lib/gitignore.js) exactly, so a company root scaffolded
134
+ * here is already 'present' when a company run checks.
135
+ */
136
+ function renderCompanyGitignore() {
137
+ return [
138
+ '# Dependencies',
139
+ 'node_modules/',
140
+ '',
141
+ '# Omega manager state (durable IDs + per-run output) — and the SHARED SIGNING',
142
+ '# TREE: .omega/certificates/apple/ holds Apple private key material (.p8, .p12,',
143
+ '# CSR keys). It never goes in git — move it between machines out of band.',
144
+ '.omega/',
145
+ '',
146
+ '# Run logs (truncated on every launch — never committed)',
147
+ 'logs/',
148
+ '',
149
+ '# Secrets — the shared .env and its per-environment overlays',
150
+ '.env',
151
+ '.env.*',
152
+ '',
153
+ '# Managed brands — each one is its OWN git repo, never embedded in this one',
154
+ 'brands/',
155
+ '',
156
+ '# OS',
157
+ '.DS_Store',
158
+ '',
159
+ ].join('\n');
160
+ }
161
+
162
+ function renderCompanyReadme(name) {
163
+ return `# ${name}
164
+
165
+ The OMEGA **company workspace** — the layer every brand this company ships
166
+ inherits. It is a repo, not a machine cache: config, shared secrets, and the
167
+ shared Apple signing tree live here, and each brand stays its own repo.
168
+
169
+ ## What's here
170
+
171
+ - \`config/omega.json5\` — the company config layer (\`brands.roots\` says where the
172
+ brands are; every other key is a default a brand can override).
173
+ - \`.env\` — company secrets, loaded UNDER each brand's own \`.env\`
174
+ (shell > brand \`.env\` > this file). Gitignored.
175
+ - \`.env.<environment>\` — the per-environment overlay (\`development\`, \`testing\`,
176
+ \`production\`): only the keys that differ there.
177
+ - \`.omega/certificates/apple/\` — the shared Apple signing tree: one Apple
178
+ account signs everything the company ships. Gitignored; drop the App Store
179
+ Connect \`AuthKey_*.p8\` here.
180
+ - \`brands/\` — the managed brands (each its own git repo; gitignored here).
181
+
182
+ ## Verbs
183
+
184
+ \`\`\`bash
185
+ npx omega company adopt <brand-path> # stamp an existing brand: it inherits this company
186
+ npx omega onboard # create a NEW brand under brands/ (stamped for you)
187
+ npx omega manage # the full manage walk, once per managed brand
188
+ npx omega manage --brand=<id> # ... just one brand
189
+ npx omega manage --parallel # ... every brand concurrently
190
+ \`\`\`
191
+ `;
192
+ }
193
+
194
+ /**
195
+ * Build the scaffold plan for a company workspace.
196
+ *
197
+ * @param {string} name - Display name for the generated headers (the dir name)
198
+ * @returns {Array<{ path: string, contents: string }>} - Company-root-relative file plan
199
+ */
200
+ function buildCompanyScaffoldPlan(name) {
201
+ return [
202
+ { path: path.join('config', 'omega.json5'), contents: renderCompanyConfig(name) },
203
+ { path: '.gitignore', contents: renderCompanyGitignore() },
204
+ { path: '.env', contents: renderCompanyEnvStub(name) },
205
+ ...ENV_ENVIRONMENTS.map((environment) => ({ path: `.env.${environment}`, contents: renderCompanyEnvOverlayStub(environment) })),
206
+ { path: 'README.md', contents: renderCompanyReadme(name) },
207
+ // Self-protecting: signing material can never be committed even if the
208
+ // root .gitignore is edited or the tree is copied into another repo.
209
+ { path: path.join('.omega', 'certificates', 'apple', '.gitignore'), contents: '*\n!.gitignore\n' },
210
+ ];
211
+ }
212
+
213
+ module.exports = { COMPANY_DIRS, buildCompanyScaffoldPlan };
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Company-workspace helpers — the COMPANY → BRAND rung of the hierarchy
3
+ * (Task M3 design, settled 2026-07-07).
4
+ *
5
+ * A company root is a directory whose config/omega.json5 has a `brands` key:
6
+ *
7
+ * brands: { roots: ['./brands'] } // dirs to scan, RELATIVE to the
8
+ * // company root (never absolute)
9
+ *
10
+ * Anything under a root with its own config/omega.json5 is a brand. A brand
11
+ * behaves IDENTICALLY everywhere (standalone / nested / loose sibling) — the
12
+ * company layer only changes what defaults it inherits:
13
+ *
14
+ * manager DEFAULTS ← company omega.json5 ← brand ← local … (config)
15
+ * company .env ← brand .env ← shell env (secrets)
16
+ *
17
+ * The reverse link without nesting: company runs idempotently stamp
18
+ * `.omega/company.json` ({ root }) into each managed brand; brand-local runs
19
+ * read the stamp and layer the company config + .env, warn when it's stale,
20
+ * and run standalone when it's absent.
21
+ */
22
+
23
+ const fs = require('node:fs');
24
+ const path = require('node:path');
25
+ const JSON5 = require('json5');
26
+ const jetpack = require('fs-jetpack');
27
+
28
+ const { resolveConfigPath, hasOmegaConfig, findSecretKeys, readCompanyRoot, COMPANY_MARKER } = require('../vendor/config/index.js');
29
+ const { resolveBrandRoot } = require('./brand.js');
30
+ const { stripLeadingVerb } = require('./argv.js');
31
+
32
+ const DEFAULT_BRAND_ROOTS = ['./brands'];
33
+
34
+ /**
35
+ * Raw config/omega.json5 read — no merge, no validation, null when the file
36
+ * is missing or unparseable (discovery must never throw on a broken brand;
37
+ * the brand's own workspace service reports it).
38
+ */
39
+ function readRawConfig(dir) {
40
+ const configPath = resolveConfigPath(dir);
41
+ if (!configPath) return null;
42
+
43
+ try {
44
+ return JSON5.parse(fs.readFileSync(configPath, 'utf8'));
45
+ } catch {
46
+ return null;
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Is this directory a company root (config with a `brands` key)?
52
+ */
53
+ function isCompanyRoot(dir) {
54
+ return !!readRawConfig(dir)?.brands;
55
+ }
56
+
57
+ /**
58
+ * Resolve what kind of root contains startDir: the nearest omega.json5 root
59
+ * (brand walk-up rules), classified as company or brand.
60
+ *
61
+ * @returns {{ root: string, isCompany: boolean }|null}
62
+ */
63
+ function resolveManageRoot(startDir) {
64
+ const root = resolveBrandRoot(startDir);
65
+ if (!root) return null;
66
+
67
+ return { root, isCompany: isCompanyRoot(root) };
68
+ }
69
+
70
+ /**
71
+ * Discover the brands a company manages: for each entry in brands.roots
72
+ * (relative to the company root), every immediate child directory with a
73
+ * config/omega.json5 is a brand. The company root itself and nested company
74
+ * configs are skipped (one rung: company → brands).
75
+ *
76
+ * Throws on config mistakes (absolute or missing roots); broken brand
77
+ * configs do NOT throw — the brand is listed and its own run reports them.
78
+ *
79
+ * @param {string} companyRoot - Absolute company root
80
+ * @returns {{ brands: Array<{ id, name, dirName, root, enabled }>, skipped: Array<{ dir, reason }> }}
81
+ */
82
+ function discoverBrands(companyRoot) {
83
+ const raw = readRawConfig(companyRoot) || {};
84
+ const roots = raw.brands?.roots || DEFAULT_BRAND_ROOTS;
85
+
86
+ if (!Array.isArray(roots) || roots.length === 0) {
87
+ throw new Error('brands.roots must be a non-empty array of directories relative to the company root');
88
+ }
89
+
90
+ const companyReal = fs.realpathSync(companyRoot);
91
+ const seen = new Set();
92
+ const brands = [];
93
+ const skipped = [];
94
+
95
+ for (const rootSpec of roots) {
96
+ if (path.isAbsolute(rootSpec)) {
97
+ throw new Error(`brands.roots entries must be RELATIVE to the company root — got absolute path: ${rootSpec}`);
98
+ }
99
+
100
+ const scanDir = path.resolve(companyRoot, rootSpec);
101
+ if (!fs.existsSync(scanDir)) {
102
+ throw new Error(`brands root not found: ${rootSpec} (${scanDir})`);
103
+ }
104
+
105
+ for (const entry of fs.readdirSync(scanDir, { withFileTypes: true })) {
106
+ if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules') continue;
107
+
108
+ const brandDir = path.join(scanDir, entry.name);
109
+ const real = fs.realpathSync(brandDir);
110
+ if (real === companyReal || seen.has(real)) continue;
111
+
112
+ if (!hasOmegaConfig(brandDir)) continue;
113
+ seen.add(real);
114
+
115
+ const brandRaw = readRawConfig(brandDir);
116
+ if (brandRaw?.brands) {
117
+ skipped.push({ dir: brandDir, reason: 'nested company workspace (one rung: company → brands)' });
118
+ continue;
119
+ }
120
+
121
+ brands.push({
122
+ id: brandRaw?.brand?.id || entry.name,
123
+ name: brandRaw?.brand?.name || brandRaw?.brand?.id || entry.name,
124
+ dirName: entry.name,
125
+ root: brandDir,
126
+ enabled: brandRaw?.enabled !== false,
127
+ });
128
+ }
129
+ }
130
+
131
+ brands.sort((a, b) => a.id.localeCompare(b.id));
132
+ return { brands, skipped };
133
+ }
134
+
135
+ /**
136
+ * The company config layer a brand inherits: the raw company omega.json5
137
+ * minus the `brands` key (company plumbing, meaningless inside a brand).
138
+ * Hard-fails on secret-shaped keys — same rule as every omega.json5.
139
+ */
140
+ function loadCompanyConfig(companyRoot) {
141
+ const raw = readRawConfig(companyRoot);
142
+ if (!raw) return {};
143
+
144
+ const secretKeys = findSecretKeys(raw);
145
+ if (secretKeys.length > 0) {
146
+ throw new Error(
147
+ `Secret-shaped keys in company config ${companyRoot}: ${secretKeys.join(', ')} — `
148
+ + `secrets live in the company .env, never in omega.json5`,
149
+ );
150
+ }
151
+
152
+ const { brands, ...inheritable } = raw;
153
+ return inheritable;
154
+ }
155
+
156
+ /**
157
+ * Idempotently stamp `.omega/company.json` into a brand so its local runs
158
+ * layer this company's defaults.
159
+ *
160
+ * @returns {boolean} - true when the marker was (re)written
161
+ */
162
+ function stampCompanyMarker(brandRoot, companyRoot) {
163
+ const markerPath = path.join(brandRoot, COMPANY_MARKER);
164
+ const existing = jetpack.read(markerPath, 'json');
165
+
166
+ if (existing?.root === companyRoot) {
167
+ return false;
168
+ }
169
+
170
+ jetpack.write(markerPath, { root: companyRoot }, { jsonIndent: 2 });
171
+ return true;
172
+ }
173
+
174
+ /**
175
+ * Read a brand's company marker. null when absent (standalone brand);
176
+ * `stale: true` when the marker points at something that is no longer a
177
+ * company workspace.
178
+ *
179
+ * @returns {{ companyRoot: string, stale: boolean }|null}
180
+ */
181
+ function readCompanyMarker(brandRoot) {
182
+ const root = readCompanyRoot(brandRoot);
183
+ if (!root) return null;
184
+
185
+ return { companyRoot: root, stale: !isCompanyRoot(root) };
186
+ }
187
+
188
+ /**
189
+ * Strip the leading verb (#229 — each child spawn names `manage` itself) and
190
+ * the company-only flags from a raw argv, so the remainder forwards to
191
+ * per-brand child processes verbatim (--brand/--concurrency take values in
192
+ * both --flag=x and --flag x forms; --parallel is boolean).
193
+ */
194
+ function filterChildArgs(rawArgv) {
195
+ const argv = stripLeadingVerb(rawArgv);
196
+ const VALUE_FLAGS = new Set(['--brand', '--concurrency']);
197
+ const BOOLEAN_FLAGS = new Set(['--parallel']);
198
+ const out = [];
199
+
200
+ for (let i = 0; i < argv.length; i++) {
201
+ const name = argv[i].split('=')[0];
202
+
203
+ if (BOOLEAN_FLAGS.has(name)) continue;
204
+ if (VALUE_FLAGS.has(name)) {
205
+ if (!argv[i].includes('=') && argv[i + 1] !== undefined && !argv[i + 1].startsWith('-')) {
206
+ i++;
207
+ }
208
+ continue;
209
+ }
210
+
211
+ out.push(argv[i]);
212
+ }
213
+
214
+ return out;
215
+ }
216
+
217
+ module.exports = {
218
+ DEFAULT_BRAND_ROOTS,
219
+ readRawConfig,
220
+ isCompanyRoot,
221
+ resolveManageRoot,
222
+ discoverBrands,
223
+ loadCompanyConfig,
224
+ stampCompanyMarker,
225
+ readCompanyMarker,
226
+ filterChildArgs,
227
+ };