@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
package/docs/AGENTS.md ADDED
@@ -0,0 +1,200 @@
1
+ # ========== Default Values ==========
2
+ # OMEGA Desktop (@omega.js/desktop) consumer project
3
+
4
+ <!-- MAINTAINERS (framework repo): this consumer template is MIRRORED across all OMEGA framework consumer templates (src/defaults/AGENTS.md ×N; web's lives at scaffold/AGENTS.md).
5
+ Same sections in the same order: framework-specific extras may be inserted; canonical sections are never reordered/renamed. Edit every framework consumer template together.
6
+ The mirroring rule lives in each framework guide's Doc-update parity section (docs/<framework>/index.md) -->
7
+
8
+ ## Framework
9
+
10
+ This project consumes **OMEGA Desktop** (@omega.js/desktop), a comprehensive framework for building modern Electron desktop apps. @omega.js/desktop provides one-line-import bootstrap per Electron process, a modular feature library with file-based extensibility, a multi-platform build/release pipeline (DMG / NSIS / deb / AppImage), and a built-in four-layer test framework.
11
+
12
+ ## 🚨 READ THE FRAMEWORK DOCS FIRST
13
+
14
+ **Before doing ANY work on this codebase, the agent MUST read the framework documentation: that is where the architecture, conventions, APIs, and gotchas live. Skipping these will result in solutions that conflict with framework patterns.**
15
+
16
+ **Required reading:**
17
+ - **`node_modules/@omega.js/AGENTS.md`**: the OMEGA map, the one agent entry into the framework docs; follow it to `docs/desktop/index.md` (the @omega.js/desktop guide: identity, architecture, conventions)
18
+ - **`node_modules/@omega.js/desktop/docs/`**: subsystem deep references (read the relevant ones for the task at hand)
19
+
20
+ ## 🚨 READ @omega.js/client TOO
21
+
22
+ **@omega.js/desktop ships `@omega.js/client` as a runtime singleton inside the renderer process.**
23
+ - It powers auth, Firebase, reactive `data-omega-bind` directives, analytics, error tracking, and utilities (`escapeHTML`, etc.).
24
+ - Any task that touches auth flows, Firestore reads/writes, subscription resolution, push notifications, or DOM bindings means you are working with @omega.js/client as much as with @omega.js/desktop.
25
+
26
+ **Required reading:**
27
+ - **`node_modules/@omega.js/AGENTS.md`** → `docs/client/index.md`, the @omega.js/client guide: identity, module list, conventions
28
+ - **`node_modules/@omega.js/client/docs/`**: module deep references (Auth, Bindings, Firestore, Notifications, etc.)
29
+
30
+ ## Quick start
31
+
32
+ ```bash
33
+ npm start # dev with auto-reload (gulp → esbuild → electron .)
34
+ npm run build # local production build (compiles bundles only, no installer)
35
+ npm run package # full local production package (DMG/zip/universal-mac, NSIS-win, deb+AppImage-linux)
36
+ npm run package:quick # fast packaged build for the host platform/arch only (~20-30s)
37
+ npm run release # signed + published release (requires certs)
38
+ npx omega test # run YOUR project's test suites (bare runs never include the framework corpus)
39
+ npx omega test build/config # run project tests by path (relative to test/; full:<path> for both sources)
40
+ npx omega test project: # run ONLY your project tests (all of them)
41
+ npx omega test project:custom-test # run only consumer project tests matching a path
42
+ npx omega test mgr: # run ONLY framework tests (universal alias; desktop:/framework: are equivalent)
43
+ npx omega test desktop:build/config # run only framework tests matching a path
44
+ npx omega test --extended # also run tests that hit REAL external services (off by default; TEST_EXTENDED_MODE=true is the env equivalent, a shared name across @omega.js/backend, @omega.js/extension, UJM, and @omega.js/desktop)
45
+ # (output is teed to logs/: dev.log on `npm start`, build.log on `npm run build`, test.log on `npx omega test`; cat instead of scrolling scrollback)
46
+ npx omega install dev # use LOCAL @omega.js/desktop source (to test framework edits)
47
+ npx omega install live # restore the published @omega.js/desktop from npm
48
+ ```
49
+
50
+ > Editing the @omega.js/desktop framework source while working here? Run `npx omega install dev` so this project picks up your uncommitted framework changes (it otherwise uses its installed `node_modules/@omega.js/desktop`). Run `npx omega install live` to switch back.
51
+
52
+ ## Where things live
53
+
54
+ - `config/omega.json5`: the single OMEGA config (JSON5), with shared sections (brand, analytics, payment, cloud, monitoring, theme) at the top level; desktop settings (app, platforms, autoUpdate, startup, releases, remoteConfig, restartManager) under `targets.desktop`.
55
+ - Packaging config: fully generated. @omega.js/desktop produces `dist/electron-builder.yml` from `config/omega.json5` (brand/app/signing) + @omega.js/desktop's opinionated defaults. Consumers never ship an `electron-builder.yml`. Override defaults via the `electronBuilder:` block in `omega.json5` if you genuinely need to.
56
+ - `hooks/notarize/post.js`: optional post-notarize extension hook (@omega.js/desktop owns the actual `afterSign` notarize step).
57
+ - `src/main.js`: main-process entry. One-line bootstrap of `@omega.js/desktop/main`.
58
+ - `src/preload.js`: preload entry. Exposes `window.desktop` via contextBridge.
59
+ - `src/integrations/tray/index.js`: tray definition. Edit this; it's yours.
60
+ - `src/integrations/menu/index.js`: application menu definition.
61
+ - `src/integrations/context-menu/index.js`: right-click menu definition (called per-event with `params`).
62
+ - `src/views/<window>/index.html`: per-window HTML.
63
+ - `src/assets/js/components/<window>/index.js`: renderer entry per window.
64
+ - `src/assets/scss/main.scss`: shared SCSS.
65
+ - `config/icons/<platform>/<slot>.png`: optional icon overrides (`macos/icon.png`, `macos/tray.png`, `macos/dmg.png`, `windows/icon.png`, etc.).
66
+ - Ship ONE file per slot at the native (retina) size; @omega.js/desktop auto-downscales @1x variants.
67
+ - macOS tray must be 32×32 (@omega.js/desktop renames to `trayTemplate.png` in dist for the OS dark-mode magic).
68
+ - Missing slots fall back to @omega.js/desktop bundled defaults; Linux falls back to Windows resolution.
69
+ - `test/**/*.js`: your project test suites (framework auto-runs them alongside its own).
70
+
71
+ ## Per-context imports
72
+
73
+ ```js
74
+ // src/main.js
75
+ new (require('@omega.js/desktop/main'))().initialize(); // auto-loads JSON5 config
76
+
77
+ // src/preload.js
78
+ new (require('@omega.js/desktop/preload'))().initialize();
79
+
80
+ // src/assets/js/components/main/index.js
81
+ new (require('@omega.js/desktop/renderer'))().initialize();
82
+ ```
83
+
84
+ ## Available APIs at runtime
85
+
86
+ In main: `manager.storage`, `manager.ipc`, `manager.windows`, `manager.tray`, `manager.menu`, `manager.contextMenu`, `manager.startup`, `manager.appState`, `manager.deepLink`, `manager.autoUpdater`, `manager.sentry`, `manager.omega`, `manager.context`, `manager.usage`, `manager.remoteConfig`, `manager.analytics`, `manager.restartManager`.
87
+
88
+ In renderer: `window.desktop.storage`, `window.desktop.ipc`, `window.desktop.logger`, `OMEGA_BUILD_JSON.config`.
89
+
90
+ ## Dependency resolution
91
+
92
+ - **Do NOT install framework dependencies directly** (`firebase`, `fs-jetpack`, `@omega.js/client`, etc.). @omega.js/desktop's bundler resolves them through the framework's own `node_modules/`. If something doesn't resolve, the issue is in @omega.js/desktop's bundle task, not your `package.json`.
93
+ - **@omega.js/client owns Firebase.** Never `require('firebase')` or `import('firebase/app')`. Use `require('@omega.js/client')` → `omega.auth()`, `omega.firestore()` in renderers. In main process, use `manager.omega` (the @omega.js/desktop bridge).
94
+ - **`Manager.require(name)`** resolves from @omega.js/desktop's module context at runtime for unbundled code (gulp tasks, test fixtures).
95
+
96
+ ## Testing
97
+
98
+ Every feature ships with tests at every layer it has a surface in: **logic** (`test/build/`, `test/main/`), **UI** (`test/renderer/`: real events on the real DOM), and **end-to-end** (`test/boot/`).
99
+ - Skip a layer only when the feature genuinely has no surface there; "the logic test covers it" does not excuse the UI test.
100
+ - Test runs are invisible and never steal keyboard focus (@omega.js/desktop test stealth; set `OMEGA_TEST_SHOW=1` to watch a run live).
101
+ - See `test/README.md` and `node_modules/@omega.js/desktop/docs/test-framework.md`.
102
+
103
+ <!-- Everything above this marker is owned by the framework and rewritten by every omega verb. Add your project-specific notes below — they are preserved. -->
104
+
105
+ # ========== Custom Values ==========
106
+ > The entry point. Read this top to bottom (it is short), then follow the map. This file is a MAP, not a manual: the knowledge lives in `docs/` (segregated by framework), and the omega Claude plugin's hooks load it into a session deterministically, by where the work is happening. Keep this file under 250 lines.
107
+ The `@omega.js` framework ecosystem in one repo: npm workspaces, changesets for independent versioning. Remote: [github.com/Omega-JS-Stack/omega](https://github.com/Omega-JS-Stack/omega) (npm org `omega.js`, GH org `Omega-JS-Stack` — both Ian's, names final).
108
+ **Lineage** (the migration story, kept short): OMEGA consolidates the legacy manager ecosystem. The legacy repos keep serving production and are read-only reference (HARD RULE 1).
109
+ - backend-manager (BEM) became `@omega.js/backend`; electron-manager (EM) became `@omega.js/desktop`; browser-extension-manager (BXM) became `@omega.js/extension`.
110
+ - ultimate-jekyll-manager (UJM) was replaced by `@omega.js/web` (rebuilt on Eleventy 3, not ported); jekyll-uj-powertools became `@omega.js/template-kit`.
111
+ - web-manager (WM) was absorbed into `@omega.js/client` — WM no longer exists as a concept; omega-manager's brains became `@omega.js/manager`.
112
+ 1. 🚫 **The legacy repos are READ-ONLY.** Never modify `omega-manager`, `backend-manager`, `ultimate-jekyll-manager`, `browser-extension-manager`, `electron-manager`, `mobile-app-manager`, `web-manager`, `jekyll-uj-powertools`, or any consumer brand repo. They are reference/history and keep serving production. All work happens HERE.
113
+ 2. **Every package here is `@omega.js/*`-named; zero npm publishes until Ian finalizes versions.** Old-name releases ship from the LEGACY repos; the monorepo's `pre-*-rename` tags are the backup lane.
114
+ 3. **Publish policy — internal by default**: private shared packages (`account`, `analytics`, `config`, `devkit`, `monitoring`, `template-kit`) are vendored into published frameworks at prepare time and never publish.
115
+ - Published = frameworks + `@omega.js/manager` + `@omega.js/client` (a real runtime dependency of backend/desktop/extension — never vendored) + `@omega.js/mcp-router` (a real runtime dependency of manager, so the vendored plugin's MCP declaration resolves inside the install — Ian 2026-07-30).
116
+ - All seven publishables carry a mechanical `private: true` latch until the proving checkpoint ([docs/shared/publishing.md](shared/publishing.md)) unlatches them.
117
+ 4. **MAM is parked.** No `packages/mobile`, no mobile work — slot reserved only.
118
+ 5. **Preserve semantics, replace plumbing.** Blueprints/default-pages, FILE_MAP scaffolding semantics, `mgr i local`, prepare-watch, the frontend↔backend contract, and the disperse model must keep working exactly as consumers expect.
119
+ 6. **Every extraction/normalization step is gated**: golden-master where applicable, package test suites, cross-stack e2e, canary consumer.
120
+ - **`docs/` is the SSOT.** Cross-framework contracts live in `docs/shared/`; each framework's guide is `docs/<framework>/index.md` with its deep docs beside it. No line budget applies inside `docs/`.
121
+ - **This file is the ONE agent entry — packages carry no agent docs.** Agents work at this level; the parent walk hands every session this map, and the map plus the plugin's hooks route to `docs/`. Knowledge lives in `docs/`, never in any AGENTS.md.
122
+ - No `packages/<pkg>/AGENTS.md` or `CLAUDE.md` exists, none — the one lookalike is `packages/manager/docs/AGENTS.md`, a gitignored GENERATED copy of this map the prepare lane vendors for published installs ([#144](https://github.com/Omega-JS-Stack/omega/issues/144)); never read or edit it here.
123
+ - **Loading is deterministic, not preloaded.** The omega Claude plugin's hooks detect where the chat is working — a `packages/<framework>/` tree here, or a target's tree in a consumer repo — and inject the relevant docs then. Nobody reads guides "just in case".
124
+ - **Consumer brands read THIS file.** A brand root's `AGENTS.md` line-1 import is `@node_modules/@omega.js/AGENTS.md` — a symlink the manager's workspace service maintains, pointing at this map.
125
+ - It resolves to the LIVE file in a locally linked brand, and to the copy prepare vendors into `@omega.js/manager/docs/AGENTS.md` (links retargeted) on a published install.
126
+ - Brand-root knowledge (the target table, the verbs, the brand hard rules, upstream-first) lives in [docs/manager/brand.md](brand.md). Contract: [docs/shared/agent-docs.md](shared/agent-docs.md).
127
+ - **Consumers get version-matched knowledge.** In the local era, `node_modules/@omega.js/*` symlinks into this monorepo, so the pointers resolve as-is.
128
+ - Published packages carry their docs inside the package — prepare vendors each guide as `docs/index.md` plus `docs/shared/` ([docs/shared/agent-docs.md](shared/agent-docs.md)) — so the plugin reads knowledge that matches the installed version, never a global copy.
129
+ The monorepo ships a Claude Code plugin (`agent-plugins/claude/`, listed by the repo-root marketplace manifest `.claude-plugin/marketplace.json`). It serves both audiences: developing this monorepo, and every consumer working on a brand built from these frameworks.
130
+ - It is the ONLY home of the `omega:*` skills — folders and frontmatter names stay plain (`web`, `backend`, …); Claude Code namespaces them `omega:<skill>` automatically from the plugin manifest's `"name": "omega"`; the old global copies are deleted — plus the hooks that do the deterministic loading above.
131
+ - Install is AUTOMATIC (Ian 2026-07-27): the repo's committed `.claude/settings.json` registers the marketplace and enables the plugin — Claude Code asks one trust question on first open, then it loads every session.
132
+ - Consumer brands get the same deal: the plugin is vendored into `@omega.js/manager` at prepare time and the workspace service writes the brand's `.claude/settings.json` to enable it from `./node_modules/@omega.js/manager` ([docs/shared/agent-docs.md](shared/agent-docs.md)).
133
+ - It declares exactly ONE MCP server, in `agent-plugins/claude/.mcp.json`: the `@omega.js/mcp-router` endpoint that lazily proxies the browser, electron, and extension upstreams ([docs/mcp-router/index.md](../../mcp-router/docs/index.md)) — no other native MCP declarations, anywhere.
134
+ - A directory-source marketplace is read LIVE from its path, so an enabled plugin serves the CURRENT files — `/reload-plugins` picks up edits mid-session, and `claude --plugin-dir ./agent-plugins/claude` is only for same-session iteration and edge cases, not for freshness. The contract: [docs/shared/agent-docs.md](shared/agent-docs.md).
135
+ | Package | What it is | The guide |
136
+ |---|---|---|
137
+ | `@omega.js/web` | Web framework (UJM successor): Eleventy 3 + LiquidJS, sections/themes, asset lanes, translation | [docs/web/index.md](../../web/docs/index.md) |
138
+ | `@omega.js/backend` | Firebase Cloud Functions backend framework: build, test, deploy | [docs/backend/index.md](../../backend/docs/index.md) |
139
+ | `@omega.js/desktop` | Electron desktop framework: build, test, package for macOS/Windows/Linux | [docs/desktop/index.md](../../desktop/docs/index.md) |
140
+ | `@omega.js/extension` | Chrome/Firefox MV3 extension framework | [docs/extension/index.md](../../extension/docs/index.md) |
141
+ | `@omega.js/client` | Shared frontend runtime singleton (Firebase auth, account, analytics, notifications, bindings) embedded by web/desktop/extension | [docs/client/index.md](../../client/docs/index.md) |
142
+ | `@omega.js/manager` | Brand orchestration engine: walks every service in dependency order, reconciles a brand monorepo to its omega.json5 | [docs/manager/index.md](index.md) |
143
+ | `@omega.js/mcp-router` | One lazy MCP endpoint per session: a stdio server proxying the browser/extension upstreams, tools cached and children spawned on demand | [docs/mcp-router/index.md](../../mcp-router/docs/index.md) |
144
+ | `@omega.js/devkit` | Internal: shared build-time internals (logger, local linking, CLI router, prompts, deploy/update executors), vendored into every framework | [docs/devkit/index.md](../../devkit/docs/index.md) |
145
+ | `@omega.js/config` | Internal: the omega.json5 loader, schema, merge, validator | [docs/shared/config.md](shared/config.md) |
146
+ | `@omega.js/account` | Internal: user/account schema + subscription resolution, shared by backend and client | packages/account/src |
147
+ | `@omega.js/analytics` | Internal: the ONE analytics contract — event catalog, per-provider adapters (GA4/Meta/TikTok), guarded browser transport, consent seam | [docs/shared/analytics.md](shared/analytics.md) |
148
+ | `@omega.js/monitoring` | Internal: the ONE error-reporting contract — config resolution, release tags, PII scrub, the client-side @omega.js-bundle filter, per-platform SDK entries | [docs/shared/monitoring.md](shared/monitoring.md) |
149
+ | `@omega.js/template-kit` | Internal: the `omega_*` template filters/tags as engine-neutral JS | [docs/web/template-kit.md](../../web/docs/template-kit.md) |
150
+ | Brand | Who it is | Cloud |
151
+ |---|---|---|
152
+ | `brands/naked-brand` | "Naked Brand" — the bare fixture: the minimum a brand can declare, so a walkthrough sees every prompt fire from zero; a QA walk may reset it | Offline, `demo-*` only |
153
+ | `brands/sandbox-brand` | Synthetic fixture for the automated corpus/e2e; test runs may mangle and reset it | Offline, `demo-*` only |
154
+ | `brands/omega-playground` | "OMEGA Playground" — the standing LIVE test brand, classy theme | Real-but-throwaway project `omegajs-playground` |
155
+ | `brands/newsflash-brand` | "The Daily Build" — the standing second-skin brand, newsflash theme | Offline, `demo-*` only |
156
+ | `../omega-brand` (sibling repo) | The REAL brand: omegajs.dev, LIVE | Real project `omegajs` |
157
+ The in-repo brands and the playground project are test-only forever; nothing in this monorepo is ever the production brand.
158
+ - Full topology, history, the local-era `file:` dependency contract, and the remaining launch gates: [docs/shared/brands.md](shared/brands.md).
159
+ - **Working inside a consumer brand right now?** Read [docs/manager/brand.md](brand.md) first — the brand-root anatomy, the verbs, and the brand hard rules.
160
+ - **Migrating a legacy brand onto OMEGA?** The playbook is [docs/manager/migration.md](migration.md) — the six phases, their exit criteria, and the trap register.
161
+ - Root `npm start` watches every dist-building package concurrently (single-instance lock).
162
+ - Re-preparing EVERY package (pre-ship, or after touching a vendored internal like analytics) is ONE root command: `npm run prepare --workspaces --if-present`. Bare `npm run prepare` fails (no root script); never loop per-package.
163
+ - In a brand's website target, `omega dev --local` links every `@omega.js/*` dep brand-wide from this monorepo and starts the watch; `omega i local` does the same per target.
164
+ - Linking is ONE-TIME and durable — never re-run per change; a linked brand just restarts `npm start`.
165
+ - A brand ROOT's `npm start` runs `omega dev`: the whole stack (website + backend) in ONE terminal — never boot the targets separately. Full contract: [docs/shared/local-dev.md](shared/local-dev.md).
166
+ - **Upstream-first**: consumer work on a locally linked brand that reveals a framework-level hole fixes it HERE, in the framework — never as a consumer-side patch to repeat in the next project.
167
+ - A consumer session asks first: it surfaces the proposed framework change and waits for Ian's go (or files an issue), never editing the monorepo unprompted.
168
+ - The rule (and its "within reason" line) lives in [docs/shared/local-dev.md](shared/local-dev.md) and ships to brand sessions via the brand guide.
169
+ - Tests run in lanes: `npm run test:packages` (unit), then corpus/e2e/verts/auth/journey — the full pipeline and when each lane gates is in [docs/shared/testing.md](shared/testing.md).
170
+ Every framework AND `@omega.js/manager` ship `omega` + `omg` + `mgr` — all are the SAME context-aware dispatcher (`@omega.js/devkit/omega-bin`).
171
+ - The nearest package.json walking up from cwd (including a backend's `functions/`) names the framework, and THAT framework's CLI runs via its `./cli` export — so npm's arbitrary hoist-winner in a brand monorepo is always correct.
172
+ - An `@omega.js/*` package's OWN root dispatches to that package's own CLI, ahead of any framework it merely DEPENDS on — `npx omega test` in `packages/extension` runs the extension's self-test, and a package with no CLI is refused rather than scaffolded into ([#757](https://github.com/Omega-JS-Stack/omega/issues/757)).
173
+ - No target context (fresh dir) → falls back to the HOST package's CLI with a stderr note, which keeps a verb run in a fresh directory on the host CLI — and with the manager as host, keeps `npx omega onboard` working in a fresh brand-template clone ([#276](https://github.com/Omega-JS-Stack/omega/issues/276)).
174
+ - `omega-<framework>` bins run their own CLI directly, no dispatch. Docs say `npx omega`; `omg`/`mgr` are supported aliases.
175
+ - Every framework-owned package.json script spells the verb BARE (`omega build`), on all four frameworks ([#748](https://github.com/Omega-JS-Stack/omega/issues/748)): npm already puts `node_modules/.bin` on the path inside a script. `npx omega` stays canonical for docs and the terminal.
176
+ Single config format everywhere: shared sections (brand, cloud, analytics, payment, sentry, connections, theme) + a `targets` object (key presence = target enabled; any shared key inside a target entry overrides it). Owned by `@omega.js/config`.
177
+ - Merge chain: `defaults ← company ← brand shared ← brand targets.<type> ← local shared ← local targets.<type>`.
178
+ - Secrets stay in `.env` — the validator hard-fails secret-shaped keys in config.
179
+ - **No dual-read (Ian's call, 2026-07-06)**: frameworks flip to omega.json5 outright; legacy brands convert once via the mapping tables. Full reference: [docs/shared/config.md](shared/config.md).
180
+ `docs/shared/` — cross-framework contracts:
181
+ - [config.md](shared/config.md) — the omega.json5 schema, merge chain, legacy mapping tables
182
+ - [local-dev.md](shared/local-dev.md) — local linking + watch mechanics
183
+ - [testing.md](shared/testing.md) — the tiered verification pipeline (unit → corpus → e2e → verts → journey)
184
+ - [deploys.md](shared/deploys.md) — the deliberate `omega deploy` verb on every target (no push triggers, ever)
185
+ - [updates.md](shared/updates.md) — the `omega update` dependency-update contract
186
+ - [publishing.md](shared/publishing.md) — the publish proving-checkpoint runbook (gated, not yet run)
187
+ - [icons.md](shared/icons.md) — the one Font Awesome mechanism on every surface
188
+ - [logging.md](shared/logging.md) — the one log-tag contract (`[@omega.js/<package>:<module>]`) and its guard
189
+ - [theming.md](shared/theming.md) — the `--omega-*` design-system contract, shell chrome, motion
190
+ - [translation.md](shared/translation.md) — the AI translation engine + config-driven cache
191
+ - [analytics.md](shared/analytics.md) — the event catalog, the placement rule, consent gating, attribution
192
+ - [monitoring.md](shared/monitoring.md) — the error-reporting contract: the doctrine, the switches, the release tags, the capture seams
193
+ - [agent-docs.md](shared/agent-docs.md) — the agent-docs chain: thin pointers here, the brand chain in consumers
194
+ - [breaking-changes.md](shared/breaking-changes.md) — the legacy→OMEGA breaking-changes register: what changed shape, and the by-hand migration step for each
195
+ - [brands.md](shared/brands.md) — brand topology, history, the local era
196
+ - [rulings.md](shared/rulings.md) — standing rulings from the retired board era
197
+ `docs/<framework>/` — each framework's guide (`index.md`) plus its deep docs. Web carries the extra set:
198
+ - [sections.md](../../web/docs/sections.md) (the sections & components contract), [frontmatter.md](../../web/docs/frontmatter.md) (every page-frontmatter key, by family), [omega-sections-spec.md](../../web/docs/omega-sections-spec.md) (the ratified architecture spec), [template-kit.md](../../web/docs/template-kit.md)
199
+ - [libs.md](../../web/docs/libs.md) (the `core/js/libs/` inventory and the `__main_assets__` import idiom), [classy-v2/DIRECTION.md](../../web/docs/classy-v2/DIRECTION.md) (the locked visual spec), [ads-system.md](../../web/docs/ads-system.md) (the ratified vert/ads architecture)
200
+ Live work is GitHub issues (project-state spec v4): the queue is a query (`gh issue list`), status labels carry state, and a spec is the `## Spec` section of its issue — never a file. The retired board era's plan files are history in `_attic/plans/` (on disk, out of git); its durable rulings live in [docs/shared/rulings.md](shared/rulings.md).
@@ -0,0 +1,45 @@
1
+ # The account service — the brand's required accounts
2
+
3
+ The `account` service makes sure the configured admin accounts exist in the brand's Firebase
4
+ Auth with the resolved passwords, carry the admin role and the highest plan on their Firestore
5
+ user doc — and that NO ONE ELSE holds the admin role. It runs AFTER the update/deploy pass,
6
+ because the signup and marketing calls it makes hit the live brand backend.
7
+
8
+ ## What it reconciles
9
+
10
+ One operation, `users`. Per configured entry:
11
+
12
+ - `account: true` → create the auth user when missing (then `POST /user/signup` to complete
13
+ the flow), else converge the password; set `roles.admin` and the highest plan on the user
14
+ doc; sync to marketing when flagged.
15
+ - `marketing: true` only → push the contact to the marketing providers when the auth user
16
+ exists, and skip quietly when it does not.
17
+
18
+ Then the AUDIT: any other user holding `roles.admin` FAILS the service. An unauthorized admin
19
+ is not a warning.
20
+
21
+ ## Config
22
+
23
+ | Key | Meaning |
24
+ |---|---|
25
+ | `account.enabled: false` (or `account: false`) | Skip. |
26
+ | `account.admins[]` | The required accounts — `{ email, account, marketing }`, with `{domain}` templated from `brand.url`. The manager default is `support@{domain}` ONLY; a company's own list lives in its company omega.json5 and replaces the default whole. |
27
+ | `cloud.config.apiKey` | Read for password verification and backend calls (the cloud service lands it). |
28
+ | `cloud.shared: true` | Skip — the owning brand manages accounts. |
29
+
30
+ The service also skips with no `backend` target, and when
31
+ `.omega/secrets/service-account.json` is missing (run the cloud service first).
32
+
33
+ **Passwords** resolve per account through the owner channels, lazily — nothing happens until
34
+ an account actually needs one: `OMEGA_ACCOUNT_PASSWORD__*` env var →
35
+ `config/hooks/account/password.js` → a lazy `ACCOUNT_PASSWORD_SEED` derivation. A brand fully
36
+ covered by env vars or hooks never grows a seed in its `.env`.
37
+
38
+ ## Gotchas
39
+
40
+ - **De-ITW'd from omega-manager.** The account list used to be hardcoded company Gmail
41
+ addresses and the password a company-specific formula in code; both are config and owner
42
+ channels now.
43
+ - **`firebase-admin` is not used.** The service talks to the Identity Toolkit REST API and
44
+ `FirestoreREST` over the brand's own service account, which is what keeps it runnable from
45
+ the manager without the admin SDK's ambient credentials.
@@ -0,0 +1,46 @@
1
+ # The advertising service — the domain in AdSense
2
+
3
+ The `advertising` service verifies the brand's domain is present in the configured AdSense
4
+ account and reports its approval state. The AdSense Management API v2 is READ-ONLY — sites
5
+ cannot be added or configured programmatically — so the service proves presence and state and
6
+ deep-links the console for the manual half. It never mutates AdSense, which makes a dry run
7
+ identical to a normal run.
8
+
9
+ ## What it reconciles
10
+
11
+ One operation, `sites`: presence with a `READY` state is the converged proof. Missing → an
12
+ interactive run opens the add-site console page and polls until the site appears;
13
+ non-interactive and dry runs warn with the deep-link. A non-READY state is warned with what
14
+ Google is waiting on:
15
+
16
+ | State | Meaning |
17
+ |---|---|
18
+ | `READY` | Serving ads. |
19
+ | `GETTING_READY` | Google is reviewing the site — a multi-day human review, so this one legitimately stays a rerun. |
20
+ | `REQUIRES_REVIEW` | Request one in the console. |
21
+ | `NEEDS_ATTENTION` | Resolve the issues in the console. |
22
+
23
+ ## Config
24
+
25
+ `advertising.providers.adsense` is the home — the provider-neutral section, never a
26
+ brand-named top-level key. **A missing provider entry is a deliberate absence**: authoring
27
+ `advertising: { providers: { adsense: {} } }`, even empty, is how a brand opts in.
28
+
29
+ - `advertising.providers.adsense.client` — the `ca-pub-…` id, and the ONE AdSense switch
30
+ ([#527](https://github.com/Omega-JS-Stack/omega/issues/527)): there is no second `enabled`
31
+ key. The API's account id is the same value without the `ca-` prefix. Missing, with
32
+ credentials in hand, an interactive run offers the account selection flow (create-new opens
33
+ the AdSense signup) and lands it in omega.json5.
34
+
35
+ Because `client` is schema-typed as a string, "Disable permanently" opts the PROVIDER out
36
+ (`advertising.providers.adsense: false`) rather than landing `client: false`, which would fail
37
+ validation forever.
38
+
39
+ **Credentials**: `GOOGLE_CLIENT_ID` + `GOOGLE_CLIENT_SECRET` with the `adsense.readonly`
40
+ scope.
41
+
42
+ ## Gotcha
43
+
44
+ AdSense lists sites at the APEX only, so an apex entry covers every subdomain of it
45
+ ([#631](https://github.com/Omega-JS-Stack/omega/issues/631)) — a subdomain project matches its
46
+ parent's entry rather than needing one of its own.
package/docs/ai.md ADDED
@@ -0,0 +1,34 @@
1
+ # The ai service — one key per AI provider
2
+
3
+ The `ai` service ([#639](https://github.com/Omega-JS-Stack/omega/issues/639)) provisions
4
+ NOTHING: there is no AI platform API to reconcile a brand against, only two credentials the
5
+ backend needs before it can call OpenAI or Anthropic (contact inference, content and
6
+ newsletter generation). The whole service is the shared setup contract's gate plus a line in
7
+ the run record naming which providers the brand has credentials for.
8
+
9
+ It runs before the delivery lane, because the keys must be in the brand `.env` before a
10
+ target's runtime env composes from it.
11
+
12
+ ## What it reconciles
13
+
14
+ One operation, `keys`: by the time it runs the setup gate has already acquired what was
15
+ missing (or skipped the service), so the environment IS the answer. It prints which of the
16
+ declared keys are present — NAMES only; a value never reaches the log — and returns them as
17
+ the operation's output.
18
+
19
+ ## Config and credentials
20
+
21
+ - `ai.enabled: false` — the tri-state opt-out. A brand that does not want AI answers "Disable
22
+ permanently" once and is never asked again.
23
+
24
+ `OPENAI_API_KEY` and `ANTHROPIC_API_KEY` in the brand `.env`. Both are OPTIONAL
25
+ (`gates: false`): preflight never gates a run on them, and the service asks in place. The
26
+ legacy split — a company-wide `OMEGA_*` key beside the brand's bare one — is GONE: the bare
27
+ name is the only name, and a company-wide value is simply the COMPANY layer of the `.env`
28
+ cascade under that same name.
29
+
30
+ ## Gotcha
31
+
32
+ `ANTHROPIC_API_KEY` is a workspace API key. A Claude Code subscription login is a separate
33
+ thing and needs no key — the two are often confused when a brand's translation lane works
34
+ locally but not in CI.
@@ -0,0 +1,69 @@
1
+ # The analytics service — GA4 streams and the ad pixels
2
+
3
+ The `analytics` service reconciles the brand's analytics providers to `analytics: {}` in
4
+ `config/omega.json5`: one GA4 web data stream per enabled target, the GA property ↔ Firebase
5
+ project link, and the Meta and TikTok pixels. It runs after the cloud service (the Firebase
6
+ project must exist to link) and before search (which associates the GA property).
7
+
8
+ The cross-framework event contract — the catalog, the placement rule, consent gating — is
9
+ [analytics.md](shared/analytics.md); this file is only what the manage walk provisions.
10
+
11
+ ## What it reconciles
12
+
13
+ | Operation | What it does |
14
+ |---|---|
15
+ | `google-streams` | One GA4 web stream per enabled target, found BY URI (each target gets its own subdomain of the brand domain, virtual for app targets): created when missing, renamed on displayName drift, enhanced measurement diffed before patching, plus a clean Measurement Protocol secret per stream. |
16
+ | `google-firebase-link` | The GA property ↔ Firebase project link. A property holds at most one FirebaseLink and a project links to at most one property, so a project linked to the WRONG property is unlinked there and linked here — config is the source of truth. It also normalizes the stream Firebase auto-creates on linking ("Web App", often with no URI). |
17
+ | `meta-pixel` | The Meta Pixel exists on the ad account and a Conversions API token is in hand. |
18
+ | `tiktok-pixel` | The same shape for TikTok. |
19
+
20
+ ## Config
21
+
22
+ - `analytics.enabled: false` — skip.
23
+ - `analytics.providers.google.propertyId` / `.accountId` — the GA4 property. Missing, with
24
+ credentials available, an interactive run offers the account + property selection/creation
25
+ flow and lands both ids; without a propertyId the two google operations are filtered out.
26
+ - `targets.<type>.analytics.providers.google.id` — where each stream's measurement ID lands
27
+ ([#417](https://github.com/Omega-JS-Stack/omega/issues/417)): the per-surface override every
28
+ framework reads through the merge chain, the same shape monitoring uses for DSNs.
29
+ - `analytics.providers.meta.{id,accountId}` and `analytics.providers.tiktok.{id,accountId}` —
30
+ the pixel and the ad account / advertiser it lives on. Public ids, so they live in config
31
+ beside the Google ones, never in `.env`. `analytics.providers.<provider>: false` disables
32
+ that provider outright.
33
+
34
+ **Credentials**: `GOOGLE_CLIENT_ID` + `GOOGLE_CLIENT_SECRET` (the `analytics.edit` scope;
35
+ tokens cache to `.omega/auth/google-analytics-tokens.json`), plus `META_ACCESS_TOKEN` and
36
+ `TIKTOK_ACCESS_TOKEN` — the names `@omega.js/backend` reads. Both pixel tokens are OPTIONAL
37
+ (`gates: false`): a pixel-only brand is never asked for a Google credential, and a Google-only
38
+ brand is never gated on a pixel token. Each stream's Measurement Protocol secret goes to the
39
+ brand `.env` as `GOOGLE_ANALYTICS_SECRET_{TARGET}`
40
+ ([#434](https://github.com/Omega-JS-Stack/omega/issues/434)); the delivery step composes it
41
+ into each target's runtime env as `GOOGLE_ANALYTICS_SECRET`, so the pair travels together.
42
+
43
+ ## Near-zero input
44
+
45
+ A missing pixel reconciles in ONE interactive pass (Ian 2026-08-21, the GA4 standard): acquire
46
+ the access token (an Enter-gated open of the mint page, then a paste-in), discover the ad
47
+ account the token can see — auto-selected when there is exactly one, landed in config —
48
+ create the pixel by name, land its id in omega.json5 and in the in-memory config, so the token
49
+ check in the same pass reports the pixel it just made. No token means no provisioning this
50
+ pass: warned with where-to-get guidance, never a failure.
51
+
52
+ ## TikTok: the one credential OMEGA MINTS rather than asks for
53
+
54
+ TikTok is the instance where the credential is MINTED rather than pasted ([#448](https://github.com/Omega-JS-Stack/omega/issues/448)): the setup asks for the developer app's secret ONCE (masked, never persisted anywhere), opens the app's page in the developer portal (`analytics.providers.tiktok.appId`), takes the app's own "Advertiser authorization URL" pasted from there (never built, never stored: the redirect URI is the app's setting), opens it, takes the pasted redirect URL and reads its `auth_code`, exchanges it inline, and saves ONLY the long-lived `TIKTOK_ACCESS_TOKEN` — the name `@omega.js/backend` reads. A re-authorization asks for the secret again; a company-level home for it is [#446](https://github.com/Omega-JS-Stack/omega/issues/446). Nothing here can fail a walk: a headless run, a declined gate, an empty paste, or a rejected exchange all keep the warned where-to-get guidance.
55
+
56
+ ## Gotchas
57
+
58
+ - **GA's "User Data Collection Acknowledgement" gates secret creation** and has no API. An
59
+ interactive run opens the settings page and retry-polls until the acknowledgement lands, so
60
+ ONE run finishes the job. It is per-property, so the first stream's prompt clears the gate for
61
+ every stream after it.
62
+ - **GA holds a just-deleted link for a moment.** When the service unlinks a wrong property and
63
+ immediately creates the right link, the create can fail as "still propagating"; since
64
+ [#662](https://github.com/Omega-JS-Stack/omega/issues/662) an interactive run polls the create
65
+ until GA releases it, and only a skipped or headless run reports warned.
66
+ - **A shared cloud project skips the link** — the owning brand manages it.
67
+ - **The TikTok pixel path is a scaffold.** The wiring is complete and the token is the gate, but
68
+ no brand carries the key yet, so the create path has never run against the live API and the
69
+ pass ends at the warned guidance.
package/docs/assets.md ADDED
@@ -0,0 +1,57 @@
1
+ # The assets service — the brand's derived visual collateral
2
+
3
+ The `assets` service generates everything derived from the brand's logo sources: the wordmark
4
+ and combomark, colour and black SVG variants with PNG size ladders, the PSD templates and
5
+ their exports, the macOS/Windows app icons, the social profile icons, and the web favicon set.
6
+ It runs on the BOOT lane too — `omega dev` and a brand-root `omega deploy` both redistribute
7
+ it — because it is local file work the target legs consume.
8
+
9
+ **Sources** are committed brand collateral in the brand repo: `assets/logo/*.svg` and
10
+ `assets/templates/*.psd`. **Derived files** land in the gitignored `.omega/assets/`.
11
+
12
+ ## What it reconciles
13
+
14
+ | Operation | What it does |
15
+ |---|---|
16
+ | `logo-gen` | Wordmark + combomark SVGs from the brandmark and `brand.font`, text rendered as PATH OUTLINES so the SVGs are self-contained. Missing-only: an existing (possibly hand-tuned) file is never overwritten. |
17
+ | `process` | Per logo source: the colour SVG as-is plus an all-black conversion, exported as SVG + PNGs at every ladder size. |
18
+ | `templates` | Seeds the brand's PSDs from the company root when missing (company-managed brands), replaces the logo and text layers, writes the PSD back, composites and exports the PNGs. |
19
+ | `icons` | macOS `.icns` and Windows `.ico`, from the composited `icon.png` the templates op produced when there is one, else the brandmark. |
20
+ | `social-icons` | The square brandmark centred on white with padding, for profile pictures. |
21
+ | `favicons` | The favicon PNG ladder, a multi-size `favicon.ico`, and `site.webmanifest` (content-diffed, since it derives from config rather than an image). |
22
+ | `reconcile` | Deletes the files inside the operations' own output dirs that the brand's current sources no longer derive ([#636](https://github.com/Omega-JS-Stack/omega/issues/636)) — dropping `assets/logo/wordmark.svg` takes its variants and ladders with it. Runs last, so everything this walk generated is already derived; the derived NAMES come from the same lib the writers generate from (`lib/derived.js`). The brand's committed sources are never touched. |
23
+
24
+ ## Config
25
+
26
+ - `assets.enabled: false` — skip.
27
+ - `brand.font` — a font FILE NAME without extension, resolved from the brand repo's
28
+ `assets/fonts/` first, then the system font dirs. No font configured means nothing to
29
+ generate a wordmark with (noted and passed); configured but not found is an ERROR — the
30
+ config intent failed. There is no default: omega-manager packaged the company's licensed
31
+ fonts, this port ships none.
32
+ - `brand.name`, `brand.images.brandmark` and the other brand values the templates and
33
+ webmanifest read.
34
+
35
+ **Credentials** (optional): `MRLOGO_SERVICE_ACCOUNT` / `MRLOGO_API_KEY` / `LOGO_API_ID_TOKEN`
36
+ — the product-service ladder for AI brandmark generation via MrLogo when the brand has no
37
+ `assets/logo/brandmark.svg` yet. Zero config options by design: setting a credential IS the
38
+ consent to spend the call. Interactive runs ask for optional art direction; dry runs never
39
+ mint. With no credentials the service skips with guidance.
40
+
41
+ ## The force refresh
42
+
43
+ The `assets` service is mtime-diffed, so a converged brand rebuilds nothing; `omega manage --reset-assets` ([#214](https://github.com/Omega-JS-Stack/omega/issues/214)) is the force refresh for the cases no timestamp records. It clears the derived cache under `.omega/assets/` before the walk, then the same operations regenerate it and the run names what was cleared. Bare resets both kinds; `--reset-assets=logos` takes the logo variants, app icons, social icons and favicons, `--reset-assets=templates` the PSD exports. The brand's committed `assets/logo/*.svg` and `assets/templates/*.psd` are sources, never cache, so they are never touched (the port of omega-manager's `--reset-logos` / `--reset-templates`).
44
+
45
+ Invalidation IS deletion: `isStale()` calls a missing derived file stale, so removing a kind's
46
+ outputs is precisely what makes the same walk regenerate them — no second freshness mechanism
47
+ to keep in sync.
48
+
49
+ ## Gotchas
50
+
51
+ - **The brandmark is the root of every derived asset.** No `assets/logo/brandmark.svg` and no
52
+ MrLogo credential means the whole service skips.
53
+ - **A PSD stores each layer's raster.** Replaced TEXT content lands in the layer metadata and
54
+ Photoshop re-renders it on open, so a text change appears in the exports only after the PSD
55
+ is opened and saved once. The LOGO layers are re-rastered here, so they are always current.
56
+ - **Manual Photoshop edits persist and re-trigger the pass**: editing a PSD bumps its mtime, so
57
+ the next run re-replaces the logo/text layers and re-exports.
@@ -0,0 +1,26 @@
1
+ # The bookmark service — brand links into Chrome
2
+
3
+ The `bookmark` service pushes the brand's console and dashboard links to the companion Chrome
4
+ extension over the WebSocket protocol; the extension files them under `Ω / {Brand} /
5
+ {Category}`. It runs at the very end of the walk and is interactive-only.
6
+
7
+ ## What it reconciles
8
+
9
+ One operation, `sync`: start the WebSocket server the extension auto-connects to (it retries
10
+ every 5s), send one `OMEGA_BOOKMARK_SYNC` message, and wait for the extension's ack.
11
+
12
+ Link sources are the brand's own config and state, so groups with unmet inputs are simply
13
+ absent — a brand with no analytics ids gets no Analytics folder. Deployed Cloud Function names
14
+ (for per-function log links) come from a `gcloud` shell-out whose every failure — no gcloud, no
15
+ auth, no project — just means "no function links".
16
+
17
+ ## Config and credentials
18
+
19
+ None of its own: everything is derived from the brand's existing config and state.
20
+
21
+ ## Gotchas
22
+
23
+ - **A headless run skips cleanly** rather than burning the ten-second connect wait: there is no
24
+ Chrome to talk to.
25
+ - **A dry run prints the link groups** it would sync without opening the server and without the
26
+ gcloud lookup — no live reads.