create-ailk 0.24.0 → 0.26.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.
- package/README.md +53 -22
- package/component-catalog.json +3 -3
- package/component-catalog.md +3 -3
- package/dist/add-module.js +4 -2
- package/dist/add-route.d.ts +12 -1
- package/dist/add-route.js +31 -3
- package/dist/cli.js +12 -7
- package/dist/derive-architecture.d.ts +3 -4
- package/dist/derive-architecture.js +65 -29
- package/dist/lib/design-checks.d.ts +9 -4
- package/dist/lib/design-checks.js +13 -7
- package/dist/lib/extract-module-bundle.js +29 -2
- package/dist/lib/fetch-template-snapshot.d.ts +2 -1
- package/dist/lib/fetch-template-snapshot.js +8 -3
- package/dist/lib/import-graph.d.ts +1 -1
- package/dist/lib/import-graph.js +4 -4
- package/dist/lib/module-license-gate.d.ts +12 -1
- package/dist/lib/module-license-gate.js +36 -15
- package/dist/lib/module-tier.d.ts +2 -8
- package/dist/lib/module-tier.js +13 -12
- package/dist/module-architecture.d.ts +20 -3
- package/dist/module-architecture.js +129 -552
- package/dist/paid-sections.d.ts +25 -1
- package/dist/paid-sections.js +88 -3
- package/dist/starter-grid.d.ts +6 -6
- package/dist/starter-grid.js +12 -5
- package/dist/surfaces.js +39 -2
- package/dist/template-record.d.ts +21 -3
- package/dist/template-record.js +38 -7
- package/dist/topology.d.ts +16 -3
- package/dist/topology.js +54 -23
- package/dist/update.d.ts +10 -1
- package/dist/update.js +715 -21
- package/package.json +3 -3
- package/release-scope.json +2 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +8 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +2 -2
- package/site-templates/marketing-site/ailk-template.json +7 -1
- package/site-templates/marketing-site/provenance.json +7 -1
- package/site-templates/saas-product/ailk-template.json +2 -1
- package/site-templates/saas-product/provenance.json +1 -0
- package/templates/.claude/cloudparity-repo-hooks.json +5 -0
- package/templates/.claude/hooks/template-guard.sh +137 -0
- package/templates/.claude/rules/extending.md +106 -0
- package/templates/.claude/rules/loop-contract.md +2 -2
- package/templates/.claude/settings.json +11 -0
- package/templates/.env.example +20 -5
- package/templates/.github/workflows/ci.yml +7 -4
- package/templates/CLAUDE.md +11 -1
- package/templates/CONVENTIONS.md +8 -10
- package/templates/README.md +14 -13
- package/templates/apps/api/.env.example +23 -2
- package/templates/apps/api/CLAUDE.md +119 -83
- package/templates/apps/api/jest.config.cjs +15 -5
- package/templates/apps/api/package.json +16 -20
- package/templates/apps/api/src/__tests__/trusted-origins.server.test.ts +2 -2
- package/templates/apps/api/src/__tests__/vercel-handler.test.ts +4 -4
- package/templates/apps/api/src/index.ts +1 -1
- package/templates/apps/api/src/lib/__mocks__/prisma-client.js +16 -0
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +3 -3
- package/templates/apps/api/src/modules/commerce.ts +10 -0
- package/templates/apps/api/src/modules/content-write.ts +10 -0
- package/templates/apps/api/src/modules/multi-tenant.ts +10 -0
- package/templates/apps/api/src/modules/scheduling.ts +10 -0
- package/templates/apps/api/src/modules/signal-collectors.ts +10 -0
- package/templates/apps/api/src/modules/workspace.ts +10 -0
- package/templates/apps/api/src/server.ts +117 -1882
- package/templates/apps/api/vercel.json +2 -2
- package/templates/apps/mcp/CLAUDE.md +90 -26
- package/templates/apps/mcp/__tests__/app-entry.test.ts +4 -254
- package/templates/apps/mcp/__tests__/boot-file.test.ts +92 -0
- package/templates/apps/mcp/jest.config.cjs +6 -1
- package/templates/apps/mcp/package.json +5 -13
- package/templates/apps/mcp/src/app.ts +8 -7
- package/templates/apps/mcp/src/index.ts +6 -34
- package/templates/apps/mcp/src/lib/paid-tools.generated.ts +10 -0
- package/templates/apps/mcp/src/lib/topology.generated.ts +2 -2
- package/templates/apps/mcp/src/site.ts +12 -0
- package/templates/apps/web/.env.example +1 -1
- package/templates/apps/web/CLAUDE.md +31 -3
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +9 -3
- package/templates/apps/web/app/[locale]/(auth)/__tests__/auth-pages.test.tsx +43 -4
- package/templates/apps/web/app/[locale]/(auth)/legal-footnote.tsx +35 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-in/__tests__/page.test.tsx +117 -8
- package/templates/apps/web/app/[locale]/(auth)/sign-in/page.tsx +14 -37
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +6 -6
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-text.ts +20 -35
- package/templates/apps/web/app/[locale]/(auth)/sign-up/__tests__/page.test.tsx +108 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-up/__tests__/sign-up-card.test.tsx +111 -5
- package/templates/apps/web/app/[locale]/(auth)/sign-up/page.tsx +78 -16
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +132 -12
- package/templates/apps/web/app/[locale]/(authed)/__tests__/gate.test.tsx +53 -1
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/billing.test.tsx +38 -0
- package/templates/apps/web/app/[locale]/(authed)/account/billing/page.tsx +4 -2
- package/templates/apps/web/app/[locale]/(authed)/sign-in-gate.tsx +47 -24
- package/templates/apps/web/app/[locale]/(authed)/signed-out-gate.generated.tsx +23 -4
- package/templates/apps/web/app/[locale]/contact/intake-analytics.ts +1 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/magnet-page.test.tsx +22 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/magnet-page.tsx +7 -3
- package/templates/apps/web/app/[locale]/layout.tsx +33 -13
- package/templates/apps/web/app/[locale]/meet/confirmed/BookingHandOff.tsx +128 -0
- package/templates/apps/web/app/[locale]/meet/confirmed/__tests__/BookingHandOff.test.tsx +126 -0
- package/templates/apps/web/app/[locale]/pricing/__tests__/unconnected.test.tsx +43 -0
- package/templates/apps/web/app/[locale]/pricing/page.tsx +7 -3
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/__tests__/route.test.ts +222 -0
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/route.ts +10 -3
- package/templates/apps/web/app/api/revalidate/route.ts +3 -3
- package/templates/apps/web/auth.ts +10 -6
- package/templates/apps/web/i18n/request.ts +49 -1
- package/templates/apps/web/jest.config.cjs +1 -0
- package/templates/apps/web/lib/__tests__/account-config.test.ts +7 -0
- package/templates/apps/web/lib/__tests__/auth-email.test.ts +276 -0
- package/templates/apps/web/lib/auth-email.ts +103 -21
- package/templates/apps/web/lib/hub-session/__tests__/sign-in-gate.test.tsx +72 -23
- package/templates/apps/web/lib/hub-session/sign-in-gate.tsx +94 -70
- package/templates/apps/web/lib/prisma-for-auth.ts +5 -2
- package/templates/apps/web/lib/relay.ts +2 -2
- package/templates/apps/web/lib/release-scope.ts +47 -0
- package/templates/apps/web/lib/server-api.ts +1 -1
- package/templates/apps/web/lib/sign-up-agreements.ts +291 -28
- package/templates/apps/web/lib/site-contributions.ts +18 -0
- package/templates/apps/web/messages/en.json +186 -20
- package/templates/apps/web/messages/site/en.json +1 -0
- package/templates/apps/web/src/lib/commerce-claim.ts +1 -1
- package/templates/customizations.yaml +37 -0
- package/templates/database/prisma.config.ts +10 -14
- package/templates/database/seed-test.ts +2 -2
- package/templates/database/seed.ts +5 -5
- package/templates/package.json +12 -6
- package/templates/pnpm-workspace.yaml +0 -1
- package/templates/project.yaml +16 -8
- package/templates/tools/jest/reporters.cjs +65 -0
- package/templates/tools/lint-architecture.ts +553 -7
- package/templates/tsconfig.json +1 -2
- package/versions.json +49 -36
- package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +0 -409
- package/templates/apps/api/src/__tests__/factories/agent-caller.ts +0 -102
- package/templates/apps/api/src/__tests__/factories/content-fixture.ts +0 -138
- package/templates/apps/api/src/__tests__/factories/in-memory-prisma.ts +0 -441
- package/templates/apps/api/src/__tests__/factories/index.ts +0 -70
- package/templates/apps/api/src/__tests__/factories/lead-fixture.ts +0 -82
- package/templates/apps/api/src/__tests__/leads-forwarded-rate-limit.test.ts +0 -135
- package/templates/apps/api/src/__tests__/services/enrichment-shim.test.ts +0 -126
- package/templates/apps/api/src/__tests__/stripe-boot.test.ts +0 -132
- package/templates/apps/api/src/__tests__/support/hub-sign-in-fake-db.ts +0 -362
- package/templates/apps/api/src/bin/__tests__/rate-limit-probe.test.ts +0 -184
- package/templates/apps/api/src/bin/abandon-sweep.ts +0 -42
- package/templates/apps/api/src/bin/rate-limit-probe.ts +0 -53
- package/templates/apps/api/src/bin/spokes.ts +0 -198
- package/templates/apps/api/src/bin/stripe-connections-rekey.ts +0 -45
- package/templates/apps/api/src/config/__tests__/hub-require-spoke-key.test.ts +0 -196
- package/templates/apps/api/src/config/__tests__/index.test.ts +0 -233
- package/templates/apps/api/src/config/__tests__/modules.test.ts +0 -76
- package/templates/apps/api/src/config/__tests__/stripe-connection-key.test.ts +0 -185
- package/templates/apps/api/src/config/__tests__/trusted-origins.test.ts +0 -238
- package/templates/apps/api/src/config/index.ts +0 -596
- package/templates/apps/api/src/config/modules.ts +0 -83
- package/templates/apps/api/src/lib/__tests__/agent-store.test.ts +0 -581
- package/templates/apps/api/src/lib/__tests__/auth-email-budget.test.ts +0 -143
- package/templates/apps/api/src/lib/__tests__/consent-ledger-double.ts +0 -237
- package/templates/apps/api/src/lib/__tests__/consent-store.test.ts +0 -353
- package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +0 -201
- package/templates/apps/api/src/lib/__tests__/deliverable-asset-store.test.ts +0 -224
- package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +0 -120
- package/templates/apps/api/src/lib/__tests__/errors.test.ts +0 -94
- package/templates/apps/api/src/lib/__tests__/file-fallback.test.ts +0 -144
- package/templates/apps/api/src/lib/__tests__/fixtures/HomePage/home.mdx +0 -8
- package/templates/apps/api/src/lib/__tests__/flow-completion-store.test.ts +0 -149
- package/templates/apps/api/src/lib/__tests__/flow-rename-race.db.test.ts +0 -116
- package/templates/apps/api/src/lib/__tests__/hub-sign-in-store.test.ts +0 -209
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +0 -257
- package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +0 -96
- package/templates/apps/api/src/lib/__tests__/outbound-http.test.ts +0 -125
- package/templates/apps/api/src/lib/__tests__/prisma.test.ts +0 -165
- package/templates/apps/api/src/lib/__tests__/require-commerce-claim.test.ts +0 -317
- package/templates/apps/api/src/lib/__tests__/require-paid-tier.test.ts +0 -129
- package/templates/apps/api/src/lib/__tests__/site.test.ts +0 -308
- package/templates/apps/api/src/lib/__tests__/slice-load.test.ts +0 -89
- package/templates/apps/api/src/lib/__tests__/spoke-store.test.ts +0 -202
- package/templates/apps/api/src/lib/__tests__/stripe-admission.test.ts +0 -217
- package/templates/apps/api/src/lib/__tests__/stripe.test.ts +0 -82
- package/templates/apps/api/src/lib/agent-store.ts +0 -613
- package/templates/apps/api/src/lib/auth-email-budget.ts +0 -161
- package/templates/apps/api/src/lib/consent-store.ts +0 -363
- package/templates/apps/api/src/lib/content-adapter.ts +0 -112
- package/templates/apps/api/src/lib/deliverable-asset-store.ts +0 -96
- package/templates/apps/api/src/lib/error-serializer.ts +0 -164
- package/templates/apps/api/src/lib/errors.ts +0 -95
- package/templates/apps/api/src/lib/file-fallback.ts +0 -87
- package/templates/apps/api/src/lib/flow-completion-store.ts +0 -136
- package/templates/apps/api/src/lib/hub-sign-in-store.ts +0 -455
- package/templates/apps/api/src/lib/lead-capture-store.ts +0 -122
- package/templates/apps/api/src/lib/lead-delivery.ts +0 -52
- package/templates/apps/api/src/lib/license-key-store.ts +0 -45
- package/templates/apps/api/src/lib/locales.ts +0 -201
- package/templates/apps/api/src/lib/outbound-http.ts +0 -127
- package/templates/apps/api/src/lib/prisma.ts +0 -21
- package/templates/apps/api/src/lib/proposal-paid-store.ts +0 -66
- package/templates/apps/api/src/lib/rate-limit-probe.ts +0 -165
- package/templates/apps/api/src/lib/rate-limit-store.ts +0 -142
- package/templates/apps/api/src/lib/require-commerce-claim.ts +0 -250
- package/templates/apps/api/src/lib/require-paid-tier.ts +0 -53
- package/templates/apps/api/src/lib/site.ts +0 -257
- package/templates/apps/api/src/lib/slice-load.ts +0 -90
- package/templates/apps/api/src/lib/spoke-store.ts +0 -180
- package/templates/apps/api/src/lib/stripe.ts +0 -321
- package/templates/apps/api/src/lib/webhook-idempotency.ts +0 -156
- package/templates/apps/api/src/middleware/__tests__/adversarial/bearer-token-format.test.ts +0 -111
- package/templates/apps/api/src/middleware/__tests__/adversarial/cookie-or-bearer-precedence.test.ts +0 -172
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-bearer-skip.test.ts +0 -119
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-cookie-path.test.ts +0 -138
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-trusted-origins.test.ts +0 -142
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +0 -155
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-timeout.test.ts +0 -139
- package/templates/apps/api/src/middleware/__tests__/auth.bearer-path.test.ts +0 -562
- package/templates/apps/api/src/middleware/__tests__/auth.both-present-precedence.test.ts +0 -76
- package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +0 -220
- package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +0 -97
- package/templates/apps/api/src/middleware/__tests__/auth.hub-session-path.test.ts +0 -557
- package/templates/apps/api/src/middleware/__tests__/auth.neither-present.test.ts +0 -72
- package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +0 -140
- package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +0 -721
- package/templates/apps/api/src/middleware/__tests__/rate-limit-cross-isolate.db.test.ts +0 -220
- package/templates/apps/api/src/middleware/__tests__/rate-limit-store.test.ts +0 -430
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +0 -1409
- package/templates/apps/api/src/middleware/__tests__/write-budget.test.ts +0 -174
- package/templates/apps/api/src/middleware/auth.ts +0 -864
- package/templates/apps/api/src/middleware/default-tenant.ts +0 -166
- package/templates/apps/api/src/middleware/rate-limit.ts +0 -983
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +0 -391
- package/templates/apps/api/src/openapi/__tests__/spec-identity.test.ts +0 -182
- package/templates/apps/api/src/openapi/index.ts +0 -18
- package/templates/apps/api/src/openapi/spec.ts +0 -2148
- package/templates/apps/api/src/openapi/surface-drift.ts +0 -195
- package/templates/apps/api/src/routes/aeo/__tests__/index.test.ts +0 -175
- package/templates/apps/api/src/routes/aeo/index.ts +0 -107
- package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +0 -196
- package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +0 -249
- package/templates/apps/api/src/routes/auth/__tests__/hub-sign-in.test.ts +0 -532
- package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +0 -313
- package/templates/apps/api/src/routes/auth/__tests__/transactional-email.test.ts +0 -413
- package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +0 -609
- package/templates/apps/api/src/routes/auth/hub-sign-in.ts +0 -242
- package/templates/apps/api/src/routes/auth/tokens.ts +0 -211
- package/templates/apps/api/src/routes/auth/transactional-email.ts +0 -301
- package/templates/apps/api/src/routes/auth/user.ts +0 -305
- package/templates/apps/api/src/routes/billing/plan-checkout.ts +0 -332
- package/templates/apps/api/src/routes/checkout/__tests__/live-key.test.ts +0 -178
- package/templates/apps/api/src/routes/checkout/__tests__/offerings-authorization.test.ts +0 -1426
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +0 -448
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +0 -1742
- package/templates/apps/api/src/routes/checkout/index.ts +0 -34
- package/templates/apps/api/src/routes/checkout/session.ts +0 -171
- package/templates/apps/api/src/routes/checkout/sessions.ts +0 -540
- package/templates/apps/api/src/routes/consent/__tests__/account.test.ts +0 -386
- package/templates/apps/api/src/routes/consent/__tests__/sign-up-rate-limit.test.ts +0 -160
- package/templates/apps/api/src/routes/consent/account.ts +0 -268
- package/templates/apps/api/src/routes/consent/cookie.ts +0 -90
- package/templates/apps/api/src/routes/consent/index.ts +0 -26
- package/templates/apps/api/src/routes/consent/unsubscribe.ts +0 -127
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +0 -853
- package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +0 -230
- package/templates/apps/api/src/routes/content/__tests__/list-types.test.ts +0 -44
- package/templates/apps/api/src/routes/content/__tests__/locale.test.ts +0 -118
- package/templates/apps/api/src/routes/content/__tests__/offerings.test.ts +0 -731
- package/templates/apps/api/src/routes/content/__tests__/pricing.test.ts +0 -753
- package/templates/apps/api/src/routes/content/__tests__/rate-limit.test.ts +0 -51
- package/templates/apps/api/src/routes/content/__tests__/search.test.ts +0 -450
- package/templates/apps/api/src/routes/content/__tests__/shown-offerings.test.ts +0 -762
- package/templates/apps/api/src/routes/content/get-page.ts +0 -183
- package/templates/apps/api/src/routes/content/index.ts +0 -49
- package/templates/apps/api/src/routes/content/list-pages.ts +0 -74
- package/templates/apps/api/src/routes/content/list-types.ts +0 -19
- package/templates/apps/api/src/routes/content/offerings.ts +0 -184
- package/templates/apps/api/src/routes/content/pricing.ts +0 -176
- package/templates/apps/api/src/routes/content/rate-limit.ts +0 -22
- package/templates/apps/api/src/routes/content/search.ts +0 -100
- package/templates/apps/api/src/routes/content/shown-offerings.ts +0 -229
- package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +0 -88
- package/templates/apps/api/src/routes/leads/__tests__/list.test.ts +0 -171
- package/templates/apps/api/src/routes/leads/__tests__/magnet-completion.test.ts +0 -515
- package/templates/apps/api/src/routes/leads/__tests__/spoke.test.ts +0 -392
- package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +0 -165
- package/templates/apps/api/src/routes/leads/index.ts +0 -639
- package/templates/apps/api/src/routes/leads/list.ts +0 -104
- package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +0 -626
- package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +0 -1268
- package/templates/apps/api/src/routes/project-listings/__tests__/founder-identity.test.ts +0 -847
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +0 -491
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +0 -476
- package/templates/apps/api/src/routes/project-listings/__tests__/resume-email.test.ts +0 -872
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +0 -1022
- package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +0 -484
- package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +0 -535
- package/templates/apps/api/src/routes/project-listings/index.ts +0 -164
- package/templates/apps/api/src/routes/project-listings/me.ts +0 -87
- package/templates/apps/api/src/routes/project-listings/patch-copy.ts +0 -224
- package/templates/apps/api/src/routes/project-listings/patch-draft.ts +0 -102
- package/templates/apps/api/src/routes/project-listings/public.ts +0 -98
- package/templates/apps/api/src/routes/project-listings/respond.ts +0 -48
- package/templates/apps/api/src/routes/project-listings/resume-token.ts +0 -27
- package/templates/apps/api/src/routes/project-listings/start.ts +0 -140
- package/templates/apps/api/src/routes/project-listings/submit.ts +0 -130
- package/templates/apps/api/src/routes/project-listings/verify-email.ts +0 -150
- package/templates/apps/api/src/routes/requests/__tests__/confirm.test.ts +0 -686
- package/templates/apps/api/src/routes/requests/confirm.ts +0 -601
- package/templates/apps/api/src/routes/requests/index.ts +0 -54
- package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +0 -306
- package/templates/apps/api/src/routes/test/auth/session.ts +0 -143
- package/templates/apps/api/src/routes/webhooks/README.md +0 -398
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-checkout-consent.test.ts +0 -649
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-dunning.test.ts +0 -749
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +0 -449
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +0 -264
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-livemode-live.test.ts +0 -159
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-livemode.test.ts +0 -158
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-offerings.test.ts +0 -814
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +0 -301
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-proposal-paid.test.ts +0 -369
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +0 -215
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-request-paid.test.ts +0 -301
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-site-filter.test.ts +0 -809
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +0 -1155
- package/templates/apps/api/src/routes/webhooks/index.ts +0 -141
- package/templates/apps/api/src/routes/webhooks/stripe-offerings.ts +0 -384
- package/templates/apps/api/src/routes/webhooks/stripe.ts +0 -2028
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +0 -645
- package/templates/apps/api/src/services/__tests__/answer-distributions.test.ts +0 -132
- package/templates/apps/api/src/services/__tests__/audit-log.test.ts +0 -1028
- package/templates/apps/api/src/services/__tests__/checkout-plan.test.ts +0 -313
- package/templates/apps/api/src/services/__tests__/consent-ledger.test.ts +0 -503
- package/templates/apps/api/src/services/__tests__/consent-migration.test.ts +0 -65
- package/templates/apps/api/src/services/__tests__/consent.test.ts +0 -299
- package/templates/apps/api/src/services/__tests__/default-tenant.test.ts +0 -147
- package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +0 -877
- package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +0 -379
- package/templates/apps/api/src/services/__tests__/dunning-policy.test.ts +0 -368
- package/templates/apps/api/src/services/__tests__/entitlements.test.ts +0 -142
- package/templates/apps/api/src/services/__tests__/hub-sign-in.test.ts +0 -854
- package/templates/apps/api/src/services/__tests__/keyless-workspace-predicate.test.ts +0 -234
- package/templates/apps/api/src/services/__tests__/lead-accept-user.test.ts +0 -251
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +0 -2660
- package/templates/apps/api/src/services/__tests__/listing-config.test.ts +0 -166
- package/templates/apps/api/src/services/__tests__/magnet-completion.test.ts +0 -389
- package/templates/apps/api/src/services/__tests__/person.test.ts +0 -1204
- package/templates/apps/api/src/services/__tests__/plan-offerings.test.ts +0 -450
- package/templates/apps/api/src/services/__tests__/project-listings.counts.test.ts +0 -202
- package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +0 -151
- package/templates/apps/api/src/services/__tests__/public-site-resolver.test.ts +0 -137
- package/templates/apps/api/src/services/__tests__/request-confirm.test.ts +0 -531
- package/templates/apps/api/src/services/__tests__/revalidation.test.ts +0 -372
- package/templates/apps/api/src/services/__tests__/slack-notify.test.ts +0 -348
- package/templates/apps/api/src/services/__tests__/spoke-resolution.test.ts +0 -660
- package/templates/apps/api/src/services/__tests__/usage-aggregation.test.ts +0 -941
- package/templates/apps/api/src/services/__tests__/usage-credits.test.ts +0 -588
- package/templates/apps/api/src/services/__tests__/verified-email.test.ts +0 -78
- package/templates/apps/api/src/services/abandon-email.ts +0 -336
- package/templates/apps/api/src/services/aeo-score.ts +0 -325
- package/templates/apps/api/src/services/answer-distributions.ts +0 -138
- package/templates/apps/api/src/services/audit-log.ts +0 -961
- package/templates/apps/api/src/services/checkout-buyer.ts +0 -168
- package/templates/apps/api/src/services/consent.ts +0 -834
- package/templates/apps/api/src/services/default-tenant.ts +0 -416
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +0 -750
- package/templates/apps/api/src/services/dunning-policy.ts +0 -294
- package/templates/apps/api/src/services/enrichment-shim.ts +0 -53
- package/templates/apps/api/src/services/entitlements.ts +0 -338
- package/templates/apps/api/src/services/hub-sign-in.ts +0 -472
- package/templates/apps/api/src/services/lead-accept-user.ts +0 -126
- package/templates/apps/api/src/services/lead-promotion.ts +0 -160
- package/templates/apps/api/src/services/lead-routing.ts +0 -1372
- package/templates/apps/api/src/services/leads-inbox.ts +0 -312
- package/templates/apps/api/src/services/listing-config.ts +0 -178
- package/templates/apps/api/src/services/magnet-completion.ts +0 -242
- package/templates/apps/api/src/services/offerings/__tests__/catalog.test.ts +0 -348
- package/templates/apps/api/src/services/offerings/__tests__/checkout-session-record.test.ts +0 -268
- package/templates/apps/api/src/services/offerings/__tests__/connection.test.ts +0 -975
- package/templates/apps/api/src/services/offerings/__tests__/fixtures.ts +0 -416
- package/templates/apps/api/src/services/offerings/__tests__/org-products.test.ts +0 -400
- package/templates/apps/api/src/services/offerings/__tests__/readers.test.ts +0 -685
- package/templates/apps/api/src/services/offerings/__tests__/source.test.ts +0 -231
- package/templates/apps/api/src/services/offerings/catalog.ts +0 -318
- package/templates/apps/api/src/services/offerings/checkout-authorization.ts +0 -403
- package/templates/apps/api/src/services/offerings/checkout-session-record.ts +0 -192
- package/templates/apps/api/src/services/offerings/connection.ts +0 -1083
- package/templates/apps/api/src/services/offerings/index.ts +0 -614
- package/templates/apps/api/src/services/offerings/source.ts +0 -140
- package/templates/apps/api/src/services/offerings/store.ts +0 -150
- package/templates/apps/api/src/services/owner-workspaces.ts +0 -132
- package/templates/apps/api/src/services/person.ts +0 -1211
- package/templates/apps/api/src/services/plan-offerings.ts +0 -125
- package/templates/apps/api/src/services/project-listing-resume-email.ts +0 -326
- package/templates/apps/api/src/services/project-listings.ts +0 -2085
- package/templates/apps/api/src/services/public-site-resolver.ts +0 -396
- package/templates/apps/api/src/services/request-confirm.ts +0 -698
- package/templates/apps/api/src/services/revalidation.ts +0 -235
- package/templates/apps/api/src/services/slack-notify.ts +0 -291
- package/templates/apps/api/src/services/usage-aggregation.ts +0 -516
- package/templates/apps/api/src/services/usage-credits.ts +0 -340
- package/templates/apps/api/src/services/verified-email.ts +0 -71
- package/templates/apps/mcp/__tests__/abuse/daily-cap.test.ts +0 -52
- package/templates/apps/mcp/__tests__/abuse/email-validator.test.ts +0 -46
- package/templates/apps/mcp/__tests__/abuse/guard.test.ts +0 -198
- package/templates/apps/mcp/__tests__/abuse/honeypot.test.ts +0 -36
- package/templates/apps/mcp/__tests__/abuse/user-agent-deny.test.ts +0 -54
- package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +0 -116
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +0 -299
- package/templates/apps/mcp/__tests__/boot.test.ts +0 -280
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +0 -359
- package/templates/apps/mcp/__tests__/config/modules.test.ts +0 -78
- package/templates/apps/mcp/__tests__/get_business_hours.test.ts +0 -82
- package/templates/apps/mcp/__tests__/get_faq.test.ts +0 -80
- package/templates/apps/mcp/__tests__/get_locations.test.ts +0 -65
- package/templates/apps/mcp/__tests__/get_offerings.test.ts +0 -557
- package/templates/apps/mcp/__tests__/get_pricing.test.ts +0 -524
- package/templates/apps/mcp/__tests__/get_site_info.test.ts +0 -81
- package/templates/apps/mcp/__tests__/http-transport.test.ts +0 -1232
- package/templates/apps/mcp/__tests__/index.test.ts +0 -195
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +0 -191
- package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +0 -531
- package/templates/apps/mcp/__tests__/lib/content-adapter-parity.test.ts +0 -70
- package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +0 -162
- package/templates/apps/mcp/__tests__/lib/content-root.test.ts +0 -93
- package/templates/apps/mcp/__tests__/lib/errors.test.ts +0 -75
- package/templates/apps/mcp/__tests__/lib/fail-closed-tools.test.ts +0 -180
- package/templates/apps/mcp/__tests__/lib/public-workspace.test.ts +0 -124
- package/templates/apps/mcp/__tests__/list_pages.test.ts +0 -268
- package/templates/apps/mcp/__tests__/locale.test.ts +0 -120
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +0 -175
- package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +0 -101
- package/templates/apps/mcp/__tests__/rate-limit-write.test.ts +0 -189
- package/templates/apps/mcp/__tests__/read_content.test.ts +0 -511
- package/templates/apps/mcp/__tests__/request_callback.test.ts +0 -160
- package/templates/apps/mcp/__tests__/search_content.test.ts +0 -271
- package/templates/apps/mcp/__tests__/server.test.ts +0 -388
- package/templates/apps/mcp/__tests__/start_purchase.test.ts +0 -448
- package/templates/apps/mcp/__tests__/submit_lead.test.ts +0 -222
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +0 -152
- package/templates/apps/mcp/__tests__/tools/create_project.test.ts +0 -243
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +0 -451
- package/templates/apps/mcp/src/abuse/daily-cap.ts +0 -47
- package/templates/apps/mcp/src/abuse/email-validator.ts +0 -25
- package/templates/apps/mcp/src/abuse/honeypot.ts +0 -21
- package/templates/apps/mcp/src/abuse/index.ts +0 -349
- package/templates/apps/mcp/src/abuse/user-agent-deny.ts +0 -58
- package/templates/apps/mcp/src/boot.ts +0 -167
- package/templates/apps/mcp/src/config/modules.ts +0 -43
- package/templates/apps/mcp/src/http-transport.ts +0 -564
- package/templates/apps/mcp/src/lib/audit-single-page.ts +0 -308
- package/templates/apps/mcp/src/lib/commerce-claim.ts +0 -263
- package/templates/apps/mcp/src/lib/content-adapter.ts +0 -116
- package/templates/apps/mcp/src/lib/empty-content-adapter.ts +0 -140
- package/templates/apps/mcp/src/lib/errors.ts +0 -61
- package/templates/apps/mcp/src/lib/license-key-store.ts +0 -45
- package/templates/apps/mcp/src/lib/locales.ts +0 -171
- package/templates/apps/mcp/src/lib/prisma.ts +0 -39
- package/templates/apps/mcp/src/lib/public-workspace.ts +0 -133
- package/templates/apps/mcp/src/lib/resolve-locale.ts +0 -30
- package/templates/apps/mcp/src/lib/shown-offerings.ts +0 -105
- package/templates/apps/mcp/src/lib/site-config.ts +0 -53
- package/templates/apps/mcp/src/lib/stripe-tax-signal.ts +0 -59
- package/templates/apps/mcp/src/request-context.ts +0 -52
- package/templates/apps/mcp/src/server.ts +0 -343
- package/templates/apps/mcp/src/serverless-app.ts +0 -88
- package/templates/apps/mcp/src/tools/audit.ts +0 -127
- package/templates/apps/mcp/src/tools/capture_lead.ts +0 -66
- package/templates/apps/mcp/src/tools/create_project.ts +0 -134
- package/templates/apps/mcp/src/tools/get_business_hours.ts +0 -68
- package/templates/apps/mcp/src/tools/get_faq.ts +0 -71
- package/templates/apps/mcp/src/tools/get_locations.ts +0 -88
- package/templates/apps/mcp/src/tools/get_offerings.ts +0 -96
- package/templates/apps/mcp/src/tools/get_pricing.ts +0 -94
- package/templates/apps/mcp/src/tools/get_site_info.ts +0 -86
- package/templates/apps/mcp/src/tools/index.ts +0 -138
- package/templates/apps/mcp/src/tools/list_pages.ts +0 -68
- package/templates/apps/mcp/src/tools/person_notes.ts +0 -25
- package/templates/apps/mcp/src/tools/proposals.ts +0 -27
- package/templates/apps/mcp/src/tools/purchase.ts +0 -205
- package/templates/apps/mcp/src/tools/read_content.ts +0 -81
- package/templates/apps/mcp/src/tools/request_callback.ts +0 -52
- package/templates/apps/mcp/src/tools/search_content.ts +0 -63
- package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +0 -54
- package/templates/apps/mcp/src/workspace-server.ts +0 -224
- package/templates/database/CHANGELOG.md +0 -981
- package/templates/database/LICENSE +0 -202
- package/templates/database/NOTICE +0 -2
- package/templates/database/README.md +0 -243
- package/templates/database/__tests__/agents.db.test.ts +0 -320
- package/templates/database/__tests__/appointment.db.test.ts +0 -106
- package/templates/database/__tests__/artifact-content-store.db.test.ts +0 -316
- package/templates/database/__tests__/composite-fence.db.test.ts +0 -206
- package/templates/database/__tests__/consent-ledger.db.test.ts +0 -345
- package/templates/database/__tests__/consent-source-checkout-migration.test.ts +0 -79
- package/templates/database/__tests__/fence-fan-out.db.test.ts +0 -715
- package/templates/database/__tests__/fixtures/appointment-create-probe.ts +0 -79
- package/templates/database/__tests__/fixtures/person-backfill.json +0 -264
- package/templates/database/__tests__/fixtures/person-contact-backfill.json +0 -182
- package/templates/database/__tests__/fixtures/project-listing-consent-probe.ts +0 -100
- package/templates/database/__tests__/flow-completion-migration.test.ts +0 -115
- package/templates/database/__tests__/flow-completion.db.test.ts +0 -136
- package/templates/database/__tests__/flow-workspace-key.db.test.ts +0 -263
- package/templates/database/__tests__/flows-listing-diagnostic.test.ts +0 -392
- package/templates/database/__tests__/flows-presets.test.ts +0 -173
- package/templates/database/__tests__/in-page-magnets-migration.test.ts +0 -161
- package/templates/database/__tests__/lead-idempotency-key.db.test.ts +0 -92
- package/templates/database/__tests__/member-area.db.test.ts +0 -257
- package/templates/database/__tests__/member-contract-migration.test.ts +0 -85
- package/templates/database/__tests__/member-contract.db.test.ts +0 -413
- package/templates/database/__tests__/offerings-checkout-session.db.test.ts +0 -270
- package/templates/database/__tests__/offerings-migration.test.ts +0 -197
- package/templates/database/__tests__/offerings-shown-price-ids-migration.test.ts +0 -86
- package/templates/database/__tests__/offerings.db.test.ts +0 -303
- package/templates/database/__tests__/outbound-message-action.db.test.ts +0 -80
- package/templates/database/__tests__/person-contact.db.test.ts +0 -563
- package/templates/database/__tests__/person-notes.db.test.ts +0 -249
- package/templates/database/__tests__/person.db.test.ts +0 -586
- package/templates/database/__tests__/piece-kind-migration.test.ts +0 -67
- package/templates/database/__tests__/piece-kind.db.test.ts +0 -208
- package/templates/database/__tests__/prefixed-ids.db.test.ts +0 -222
- package/templates/database/__tests__/project-listing-consent-at.db.test.ts +0 -111
- package/templates/database/__tests__/seed.test.ts +0 -272
- package/templates/database/__tests__/spoke-registry.db.test.ts +0 -191
- package/templates/database/__tests__/tenancy.test.ts +0 -141
- package/templates/database/__tests__/trial-magnet-migration.test.ts +0 -186
- package/templates/database/__tests__/user-cascade.test.ts +0 -140
- package/templates/database/_gitignore +0 -8
- package/templates/database/auth/.gitkeep +0 -0
- package/templates/database/auth/schema.prisma +0 -641
- package/templates/database/config/.gitkeep +0 -0
- package/templates/database/config/schema.prisma +0 -441
- package/templates/database/content/.gitkeep +0 -0
- package/templates/database/content/schema.prisma +0 -339
- package/templates/database/eslint.config.mjs +0 -69
- package/templates/database/flows/listing-diagnostic.ts +0 -182
- package/templates/database/flows/presets.ts +0 -315
- package/templates/database/inbox/.gitkeep +0 -0
- package/templates/database/inbox/README.md +0 -3
- package/templates/database/inbox/__tests__/schema.test.ts +0 -44
- package/templates/database/inbox/schema.prisma +0 -1447
- package/templates/database/jest.config.cjs +0 -36
- package/templates/database/migrations/20260508000000_add_inbox_namespace/migration.sql +0 -328
- package/templates/database/migrations/20260513000000_better_auth_migration/migration.sql +0 -100
- package/templates/database/migrations/20260515000000_add_user_billing_fields/migration.sql +0 -28
- package/templates/database/migrations/20260516000000_add_user_tier_care_plan_seat/migration.sql +0 -25
- package/templates/database/migrations/20260518000000_add_telemetry_records/migration.sql +0 -42
- package/templates/database/migrations/20260525000000_theme_wiring/migration.sql +0 -67
- package/templates/database/migrations/20260710000000_retire_commercial_tier/migration.sql +0 -21
- package/templates/database/migrations/20260712215647_add_multi_tenant_tenancy/migration.sql +0 -201
- package/templates/database/migrations/20260713143320_reanchor_site_config_to_workspace/migration.sql +0 -67
- package/templates/database/migrations/20260713174000_add_audit_logs/migration.sql +0 -46
- package/templates/database/migrations/20260713190000_drop_telemetry_records/migration.sql +0 -25
- package/templates/database/migrations/20260713192000_add_uuidv7_function/migration.sql +0 -49
- package/templates/database/migrations/20260713192429_prefixed_uuid_entity_ids/migration.sql +0 -197
- package/templates/database/migrations/20260713200000_add_org_billing/migration.sql +0 -32
- package/templates/database/migrations/20260714000000_add_lead_promotion_fields/migration.sql +0 -22
- package/templates/database/migrations/20260714010000_add_usage_billing_content_models/migration.sql +0 -151
- package/templates/database/migrations/20260714020000_add_usage_billing_auth_config_models/migration.sql +0 -223
- package/templates/database/migrations/20260714030000_credit_balance_non_negative/migration.sql +0 -22
- package/templates/database/migrations/20260714030000_widen_usage_billing_report_aggregates/migration.sql +0 -32
- package/templates/database/migrations/20260810233516_add_flow_engine_models/migration.sql +0 -40
- package/templates/database/migrations/20260811020000_add_flow_session_abandon_email_columns/migration.sql +0 -4
- package/templates/database/migrations/20260811030000_add_flow_session_abandon_email_index/migration.sql +0 -2
- package/templates/database/migrations/20260811040000_add_flow_session_segment/migration.sql +0 -2
- package/templates/database/migrations/20260811050000_add_deliverable_models/migration.sql +0 -29
- package/templates/database/migrations/20260812000000_add_deliverable_grant_send_columns/migration.sql +0 -6
- package/templates/database/migrations/20260902222948_add_waitlist_experiment_models/migration.sql +0 -39
- package/templates/database/migrations/20260902224500_add_waitlist_id_format_checks/migration.sql +0 -24
- package/templates/database/migrations/20260903004112_add_flow_session_flags_aeo_score/migration.sql +0 -3
- package/templates/database/migrations/20260903010000_add_playbook_instance/migration.sql +0 -33
- package/templates/database/migrations/20260904000000_add_waitlist_followup_send/migration.sql +0 -30
- package/templates/database/migrations/20260905230000_add_flow_checkout/migration.sql +0 -47
- package/templates/database/migrations/20260906000000_add_flow_checkout_idempotency/migration.sql +0 -16
- package/templates/database/migrations/20260907120000_add_project_listing/migration.sql +0 -47
- package/templates/database/migrations/20260907130000_add_project_listing_slack_columns/migration.sql +0 -10
- package/templates/database/migrations/20260907180000_add_listing_csv_send/migration.sql +0 -26
- package/templates/database/migrations/20260909120000_project_listings_platform/migration.sql +0 -90
- package/templates/database/migrations/20260909180000_listing_draft_and_fields/migration.sql +0 -174
- package/templates/database/migrations/20260910120000_listing_public_site_key/migration.sql +0 -14
- package/templates/database/migrations/20260911120000_listing_copy_edit_audit/migration.sql +0 -25
- package/templates/database/migrations/20260911140000_listing_structured_address/migration.sql +0 -32
- package/templates/database/migrations/20260911180000_consent_grants/migration.sql +0 -71
- package/templates/database/migrations/20260911200000_listing_site_answers/migration.sql +0 -30
- package/templates/database/migrations/20260912120000_listing_owner_link/migration.sql +0 -49
- package/templates/database/migrations/20260914120000_listing_founder_identity/migration.sql +0 -123
- package/templates/database/migrations/20260915120000_project_listing_solution/migration.sql +0 -15
- package/templates/database/migrations/20260916120000_artifact_content_store/migration.sql +0 -158
- package/templates/database/migrations/20260917120000_callback_request_confirm/migration.sql +0 -40
- package/templates/database/migrations/20260918120000_add_appointment/migration.sql +0 -67
- package/templates/database/migrations/20260918120000_asset_metadata_columns/migration.sql +0 -70
- package/templates/database/migrations/20260919120000_flow_workspace_key/migration.sql +0 -181
- package/templates/database/migrations/20260919130000_flow_definition_admin_columns/migration.sql +0 -172
- package/templates/database/migrations/20260919130000_workspace_meetings/migration.sql +0 -41
- package/templates/database/migrations/20260919140000_inbox_workspace_key/migration.sql +0 -185
- package/templates/database/migrations/20260920120000_lead_handled_at/migration.sql +0 -70
- package/templates/database/migrations/20260920130000_lead_workspace_source_index/migration.sql +0 -57
- package/templates/database/migrations/20260921120000_deliverable_grant_workspace_key/migration.sql +0 -68
- package/templates/database/migrations/20260922120000_tenancy_fence/migration.sql +0 -1067
- package/templates/database/migrations/20260923120000_listing_capturing_magnet/migration.sql +0 -210
- package/templates/database/migrations/20261003120000_spoke_registry/migration.sql +0 -80
- package/templates/database/migrations/20261003130000_scheduling_connection/migration.sql +0 -49
- package/templates/database/migrations/20261005120000_agents/migration.sql +0 -84
- package/templates/database/migrations/20261008120000_user_last_workspace/migration.sql +0 -35
- package/templates/database/migrations/20261008130000_lead_idempotency_key/migration.sql +0 -20
- package/templates/database/migrations/20261009120000_agent_grants/migration.sql +0 -33
- package/templates/database/migrations/20261010120000_person/migration.sql +0 -106
- package/templates/database/migrations/20261010121000_person_backfill/migration.sql +0 -132
- package/templates/database/migrations/20261010130000_agent_grants_people_read/migration.sql +0 -20
- package/templates/database/migrations/20261011120000_member_area/migration.sql +0 -158
- package/templates/database/migrations/20261011130000_agent_grants_member_pieces_manage/migration.sql +0 -21
- package/templates/database/migrations/20261012120000_member_contract/migration.sql +0 -192
- package/templates/database/migrations/20261013120000_lead_spoke_checkout/migration.sql +0 -20
- package/templates/database/migrations/20261014120000_consent_ledger/migration.sql +0 -122
- package/templates/database/migrations/20261014120000_person_contact/migration.sql +0 -231
- package/templates/database/migrations/20261015120000_person_notes/migration.sql +0 -77
- package/templates/database/migrations/20261015120000_rate_limit_counters/migration.sql +0 -43
- package/templates/database/migrations/20261016120000_piece_kind/migration.sql +0 -95
- package/templates/database/migrations/20261017120000_outbound_message_action/migration.sql +0 -30
- package/templates/database/migrations/20261018120000_flow_completion/migration.sql +0 -52
- package/templates/database/migrations/20261019120000_consent_source_checkout/migration.sql +0 -27
- package/templates/database/migrations/20261020120000_offerings_data_model/migration.sql +0 -146
- package/templates/database/migrations/20261021120000_offerings_checkout_session/migration.sql +0 -77
- package/templates/database/migrations/20261022120000_in_page_magnets/migration.sql +0 -45
- package/templates/database/migrations/20261023120000_offerings_shown_price_ids/migration.sql +0 -47
- package/templates/database/migrations/20261024120000_organization_plan_checkout_session/migration.sql +0 -16
- package/templates/database/migrations/20261025120000_trial_magnet/migration.sql +0 -28
- package/templates/database/migrations/20261026120000_trial_magnet_proof_line/migration.sql +0 -23
- package/templates/database/migrations/migration_lock.toml +0 -3
- package/templates/database/ops/.gitkeep +0 -0
- package/templates/database/ops/schema.prisma +0 -43
- package/templates/database/package.json +0 -89
- package/templates/database/schema.prisma +0 -71
- package/templates/database/scripts/db-generate-locked.sh +0 -80
- package/templates/database/scripts/person-backfill.sql +0 -132
- package/templates/database/tenancy.ts +0 -183
- package/templates/database/tsconfig.build.json +0 -16
- package/templates/database/tsconfig.flows.json +0 -15
- package/templates/database/tsconfig.json +0 -16
- package/templates/database/tsconfig.tenancy.json +0 -14
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
* (#8661 D11); `admitSeededContactPage` admits only those two fields.
|
|
26
26
|
*/
|
|
27
27
|
import { execFileSync } from "node:child_process";
|
|
28
|
-
import { writeFileSync } from "node:fs";
|
|
29
28
|
import { join } from "node:path";
|
|
30
29
|
import { isDeepStrictEqual } from "node:util";
|
|
31
30
|
import { CONTACT_PAGE_PATH } from "../design-home.js";
|
|
@@ -189,9 +188,10 @@ export function assessJsonLdDrift(design, before, after) {
|
|
|
189
188
|
};
|
|
190
189
|
}
|
|
191
190
|
/**
|
|
192
|
-
* Scaffold
|
|
193
|
-
* JSON-LD, run `apply-design <design>` on
|
|
194
|
-
* exit at any step throws naming the step
|
|
191
|
+
* Scaffold an `organization-product` site on `standard` — keyed when
|
|
192
|
+
* `licenseKey` is given — compose its JSON-LD, run `apply-design <design>` on
|
|
193
|
+
* it, and compose again. A non-zero exit at any step throws naming the step
|
|
194
|
+
* and the child's stderr.
|
|
195
195
|
*/
|
|
196
196
|
export function measureApplyDesignDrift(opts) {
|
|
197
197
|
const baseEnv = { ...process.env };
|
|
@@ -223,9 +223,15 @@ export function measureApplyDesignDrift(opts) {
|
|
|
223
223
|
throw new Error(`drift: ${label} printed no JSON: ${err.message}`, { cause: err });
|
|
224
224
|
}
|
|
225
225
|
};
|
|
226
|
-
exec("scaffold organization-product on standard", process.execPath, [
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
exec("scaffold organization-product on standard", process.execPath, [
|
|
227
|
+
opts.cliPath,
|
|
228
|
+
site,
|
|
229
|
+
"--shape",
|
|
230
|
+
"organization-product",
|
|
231
|
+
"--design",
|
|
232
|
+
"standard",
|
|
233
|
+
...(opts.licenseKey === undefined ? [] : ["--license", opts.licenseKey]),
|
|
234
|
+
], registryEnv);
|
|
229
235
|
const before = compose("compose JSON-LD before apply-design");
|
|
230
236
|
const applyStdout = exec(`apply-design ${opts.design}`, process.execPath, [opts.cliPath, "apply-design", opts.design, "--target", site], opts.registryUrl === undefined ? {} : { AILK_MODULE_REGISTRY_URL: opts.registryUrl });
|
|
231
237
|
const after = compose("compose JSON-LD after apply-design");
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
* `extractBundle` extracts into an EMPTY staging dir that then swap-renames
|
|
24
24
|
* over the (possibly pre-existing) install target — appropriate for a single
|
|
25
25
|
* self-contained skill directory. A fetched module's files are scattered
|
|
26
|
-
* across an ALREADY-SCAFFOLDED tree (`apps/
|
|
27
|
-
* `apps/web/
|
|
26
|
+
* across an ALREADY-SCAFFOLDED tree (`apps/web/app/...`,
|
|
27
|
+
* `apps/web/lib/...`), so there is no single directory to rename over.
|
|
28
28
|
* `extractModuleBundle` therefore extracts into a throwaway temp dir first
|
|
29
29
|
* (same validation, same guards), and ONLY on full success copies each
|
|
30
30
|
* validated file into its place under `targetDir` — so a rejected or
|
|
@@ -386,6 +386,26 @@ function validateLayerOwnership(destinations, ownership, subject, isTemplate, pa
|
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
388
|
/** Every regular file under `srcRoot`, as a `/`-separated relative path. */
|
|
389
|
+
const API_SOURCE_ROOT = "apps/api/";
|
|
390
|
+
/**
|
|
391
|
+
* #9565 D6 — refuse a tree that would write under `apps/api/`, naming the
|
|
392
|
+
* path. Checked BEFORE any write, beside `validateInstallMap` and
|
|
393
|
+
* `validatePatches`.
|
|
394
|
+
*/
|
|
395
|
+
function refuseApiSource(sourceRoot, installMap, patches, subject) {
|
|
396
|
+
const toPosixRel = (p) => normalize(p).split(sep).join("/").replace(/^\.\//, "");
|
|
397
|
+
// Compared lower-cased: on a case-insensitive filesystem `Apps/API/...` lands
|
|
398
|
+
// in the same tree.
|
|
399
|
+
const underApi = (rel) => rel.toLowerCase().startsWith(API_SOURCE_ROOT);
|
|
400
|
+
const offenders = [
|
|
401
|
+
...stagedFiles(sourceRoot).filter(underApi),
|
|
402
|
+
...Object.values(installMap).map(toPosixRel).filter(underApi),
|
|
403
|
+
...patches.map((patch) => toPosixRel(patch.target)).filter(underApi),
|
|
404
|
+
];
|
|
405
|
+
if (offenders.length > 0) {
|
|
406
|
+
throw new Error(`${subject}: refuses to write ${offenders[0]} — API source ships in its @working-theory/api-<module> package, never in a bundle (#9565)`);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
389
409
|
function stagedFiles(srcRoot) {
|
|
390
410
|
const out = [];
|
|
391
411
|
const stack = [srcRoot];
|
|
@@ -545,6 +565,13 @@ export function installBundleTree(options) {
|
|
|
545
565
|
// Every declared patch is validated, skipped or not (#7426 D4), exactly as
|
|
546
566
|
// the installMap is above; only then are the skipped ones dropped.
|
|
547
567
|
validatePatches(declaredPatches, targetAbs, subject);
|
|
568
|
+
// #9565 D6 — no bundle writes under apps/api/: a module's API source is its
|
|
569
|
+
// `@working-theory/api-<module>` package, installed from npm, never a copy
|
|
570
|
+
// in the site's tree. A staged file, a (remapped) installMap destination or
|
|
571
|
+
// a patch target under apps/api/ refuses the whole tree at this same
|
|
572
|
+
// fail-closed point, for module and template trees alike — which is what
|
|
573
|
+
// holds for a bundle built before this change and still at the store.
|
|
574
|
+
refuseApiSource(sourceRoot, remappedInstallMap, declaredPatches, subject);
|
|
548
575
|
const patches = declaredPatches.filter((patch) => !isSkipped(patch.target));
|
|
549
576
|
options.checkPatches?.(patches);
|
|
550
577
|
// The exclusion set copyTree/the content-only guard both use — built from
|
|
@@ -12,7 +12,8 @@ export interface FetchTemplateSnapshotOptions {
|
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Fetch and re-materialise create-ailk `version`'s `templates/apps/{web,api,mcp}/`
|
|
15
|
-
* tree
|
|
15
|
+
* tree, plus its `templates/database/` boot files and root `templates/tools/`
|
|
16
|
+
* files, from its published npm tarball.
|
|
16
17
|
*
|
|
17
18
|
* @throws FetchTemplateSnapshotError on an invalid version, an unreachable
|
|
18
19
|
* or malformed registry response, an integrity mismatch, or a symlink /
|
|
@@ -21,6 +21,7 @@ import { createHash } from "node:crypto";
|
|
|
21
21
|
import { gunzipSync } from "node:zlib";
|
|
22
22
|
import * as tar from "tar";
|
|
23
23
|
import { templateDestination } from "../copy.js";
|
|
24
|
+
import { DATABASE_BOOT_FILES, ROOT_TOOL_FILES } from "../template-record.js";
|
|
24
25
|
import { MAX_TOTAL_SIZE_BYTES } from "./extract-module-bundle.js";
|
|
25
26
|
import { assertContentLengthWithinLimit, assertHttpsRegistryUrl, fetchTimeoutSignal, } from "./fetch-guard.js";
|
|
26
27
|
export const DEFAULT_AILK_NPM_REGISTRY_URL = "https://registry.npmjs.org";
|
|
@@ -29,6 +30,8 @@ const VERSION_PATTERN = /^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$/;
|
|
|
29
30
|
/** The one tar path prefix a snapshot is read from, and the three app roots inside it. */
|
|
30
31
|
const TAR_ROOT = "package/templates/";
|
|
31
32
|
const APP_PREFIXES = ["apps/web/", "apps/api/", "apps/mcp/"];
|
|
33
|
+
/** The paths outside the app roots a snapshot keeps: a hub's three database boot files (#9569 DD8) and the root tools/ files the app configs require (#9654). */
|
|
34
|
+
const BOOT_FILES = new Set([...DATABASE_BOOT_FILES, ...ROOT_TOOL_FILES]);
|
|
32
35
|
export class FetchTemplateSnapshotError extends Error {
|
|
33
36
|
constructor(message) {
|
|
34
37
|
super(message);
|
|
@@ -110,13 +113,14 @@ async function fetchTarball(tarballUrl, integrity, version, fetchImpl) {
|
|
|
110
113
|
}
|
|
111
114
|
return buf;
|
|
112
115
|
}
|
|
113
|
-
/** The
|
|
116
|
+
/** The template-relative path (no `package/templates/` prefix) for a tar entry path, or undefined outside the three app trees, the database boot files and the root tools/ files. */
|
|
114
117
|
function appRelativePath(tarPath) {
|
|
115
118
|
if (!tarPath.startsWith(TAR_ROOT))
|
|
116
119
|
return undefined;
|
|
117
120
|
const rel = tarPath.slice(TAR_ROOT.length);
|
|
118
|
-
if (!APP_PREFIXES.some((prefix) => rel.startsWith(prefix)))
|
|
121
|
+
if (!APP_PREFIXES.some((prefix) => rel.startsWith(prefix)) && !BOOT_FILES.has(rel)) {
|
|
119
122
|
return undefined;
|
|
123
|
+
}
|
|
120
124
|
if (rel.length === 0)
|
|
121
125
|
return undefined;
|
|
122
126
|
const segments = rel.split("/");
|
|
@@ -176,7 +180,8 @@ function parseSnapshot(gunzipped, version) {
|
|
|
176
180
|
}
|
|
177
181
|
/**
|
|
178
182
|
* Fetch and re-materialise create-ailk `version`'s `templates/apps/{web,api,mcp}/`
|
|
179
|
-
* tree
|
|
183
|
+
* tree, plus its `templates/database/` boot files and root `templates/tools/`
|
|
184
|
+
* files, from its published npm tarball.
|
|
180
185
|
*
|
|
181
186
|
* @throws FetchTemplateSnapshotError on an invalid version, an unreachable
|
|
182
187
|
* or malformed registry response, an integrity mismatch, or a symlink /
|
|
@@ -16,7 +16,7 @@ export declare function resolveRelativeImport(fromFile: string, spec: string, ca
|
|
|
16
16
|
* This is the shape both consumers need, and the reason the walk is shared
|
|
17
17
|
* rather than copied. `paidModuleTemplateExclusions()` seeds it with every
|
|
18
18
|
* paid module's `ownedFiles` to get the files a keyless starter must not
|
|
19
|
-
* carry;
|
|
19
|
+
* carry; the retired slice-registration lint seeded it with the same set to
|
|
20
20
|
* derive, by subtraction, the files a scaffold ships UNCONDITIONALLY.
|
|
21
21
|
*
|
|
22
22
|
* Never a filename-stem rule (#5182 D7), which misses eleven files and
|
package/dist/lib/import-graph.js
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* - `paidModuleTemplateExclusions()` (module-architecture.ts) walks it to take
|
|
9
9
|
* the companion closure of every paid module's `ownedFiles` — the files that
|
|
10
10
|
* would ship dangling into a keyless starter.
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* - the slice-registration lint walked it (#5701, retired by #9565 D8 once
|
|
12
|
+
* no bundle delivered an API file) to close over the specifiers a module
|
|
13
|
+
* gate loaded and check each against what the slice delivered.
|
|
14
14
|
*
|
|
15
15
|
* Both questions are "which files does this one reach through relative
|
|
16
16
|
* imports", and the answer must be the same function in both mouths: a lint
|
|
@@ -105,7 +105,7 @@ function posixJoin(dir, spec) {
|
|
|
105
105
|
* This is the shape both consumers need, and the reason the walk is shared
|
|
106
106
|
* rather than copied. `paidModuleTemplateExclusions()` seeds it with every
|
|
107
107
|
* paid module's `ownedFiles` to get the files a keyless starter must not
|
|
108
|
-
* carry;
|
|
108
|
+
* carry; the retired slice-registration lint seeded it with the same set to
|
|
109
109
|
* derive, by subtraction, the files a scaffold ships UNCONDITIONALLY.
|
|
110
110
|
*
|
|
111
111
|
* Never a filename-stem rule (#5182 D7), which misses eleven files and
|
|
@@ -17,7 +17,7 @@ export declare class LicenseRequiredError extends Error {
|
|
|
17
17
|
}
|
|
18
18
|
/** The five axes `release-scope.json` declares (spec 6977 D3). */
|
|
19
19
|
export type ReleaseAxis = "templates" | "shapes" | "designs" | "modules" | "levels";
|
|
20
|
-
/** `gated` and `deferred` are both refused; only a `gated` one gets negative checks. */
|
|
20
|
+
/** `gated` and `deferred` are both refused; only a `gated` one gets negative checks (the Free level excepted, #6484). */
|
|
21
21
|
export type ReleaseStatus = "released" | "gated" | "deferred";
|
|
22
22
|
export type ReleaseScope = Readonly<Record<ReleaseAxis, Readonly<Record<string, ReleaseStatus>>>>;
|
|
23
23
|
/**
|
|
@@ -44,6 +44,17 @@ export declare class ReleaseScopeError extends Error {
|
|
|
44
44
|
* gated module.
|
|
45
45
|
*/
|
|
46
46
|
export declare function assertReleased(axis: ReleaseAxis, names: readonly (string | undefined)[], scope?: ReleaseScope): void;
|
|
47
|
+
/**
|
|
48
|
+
* A run with no key is a Free run, and `release-scope.json` says whether Free
|
|
49
|
+
* is available (#6484, REL-034.1: deferred — held). Refused before any prompt,
|
|
50
|
+
* fetch or write, with the level gate's message naming the pricing page; zero
|
|
51
|
+
* network. A keyed run passes through untouched — its level is the registry's
|
|
52
|
+
* answer (`deriveLevel`), never decided here. Called by `cli.ts` ahead of the
|
|
53
|
+
* shape prompt, and by `resolvePaidModules` for an all-Free request — the
|
|
54
|
+
* seam every `scaffold()` branch crosses (alias, keep and default alike),
|
|
55
|
+
* after the scope-name refusals and before the first write.
|
|
56
|
+
*/
|
|
57
|
+
export declare function assertKeyedOrFreeReleased(licenseKey?: string | undefined): void;
|
|
47
58
|
/**
|
|
48
59
|
* Design names every level renders (#6760 D1). Anything else in
|
|
49
60
|
* `STARTER_DESIGNS` is Pro and up. A path design's Free-ness is decided by
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
* (c) a valid key → every requested paid module's bundle bytes, ready for
|
|
13
13
|
* `extract-module-bundle.ts` to merge into the scaffold.
|
|
14
14
|
*
|
|
15
|
-
* A Free-only request (no paid modules) never reaches the
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* A Free-only request (no paid modules) never reaches the network — but since
|
|
16
|
+
* #6484 (REL-034.1) it does read the key: no key is the Free level, which
|
|
17
|
+
* `release-scope.json` defers, so `resolvePaidModules` refuses it through
|
|
18
|
+
* `assertKeyedOrFreeReleased` before returning its empty map. A keyed
|
|
19
|
+
* all-Free scaffold is unaffected (K1's regression floor, keyed).
|
|
19
20
|
*
|
|
20
21
|
* Also carries the design gate (#6760): `assertDesignAllowed` refuses a
|
|
21
22
|
* non-`standard` design at the `free` level, naming the design and the
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
import releaseScopeJson from "../../release-scope.json" with { type: "json" };
|
|
29
30
|
import { FetchModuleError, fetchModule } from "./fetch-module.js";
|
|
30
31
|
import { assertLicenseKeyShape } from "./license-key-files.js";
|
|
31
|
-
import {
|
|
32
|
+
import { LEVEL_LABEL, LEVEL_MODULES, PAID_MODULES, classifyModules, composeModuleSet, isAddition, levelOf, } from "./module-tier.js";
|
|
32
33
|
/**
|
|
33
34
|
* Where a refused run sends the buyer. `/pricing`, not `/pro`: there is no
|
|
34
35
|
* `/pro` route and there will not be one (#6439, operator decision OD-2) —
|
|
@@ -107,14 +108,32 @@ export function assertReleased(axis, names, scope = RELEASE_SCOPE) {
|
|
|
107
108
|
continue;
|
|
108
109
|
const released = Object.keys(statuses).filter((n) => statuses[n] === "released");
|
|
109
110
|
// A level comes from the key, never a flag — so it points at what the run CAN choose.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
// `free` is the keyless level (#6484): it points at the pricing page.
|
|
112
|
+
const choose = axis === "levels" && name === "free"
|
|
113
|
+
? `No licence key, so this would be a Free scaffold — pass --license <key> or set AILK_LICENSE_KEY with a Pro key → ${CONVERSION_HINT_URL}`
|
|
114
|
+
: axis === "levels"
|
|
115
|
+
? `Your licence key's level is ${name}; name the modules you want with --modules (one of: ${Object.keys(scope.modules)
|
|
116
|
+
.filter((m) => scope.modules[m] === "released")
|
|
117
|
+
.join(", ")}).`
|
|
118
|
+
: `Choose one of: ${released.join(", ")}.`;
|
|
115
119
|
throw new ReleaseScopeError(`${AXIS_NOUN[axis]} "${name}" is not available yet. ${choose}`);
|
|
116
120
|
}
|
|
117
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* A run with no key is a Free run, and `release-scope.json` says whether Free
|
|
124
|
+
* is available (#6484, REL-034.1: deferred — held). Refused before any prompt,
|
|
125
|
+
* fetch or write, with the level gate's message naming the pricing page; zero
|
|
126
|
+
* network. A keyed run passes through untouched — its level is the registry's
|
|
127
|
+
* answer (`deriveLevel`), never decided here. Called by `cli.ts` ahead of the
|
|
128
|
+
* shape prompt, and by `resolvePaidModules` for an all-Free request — the
|
|
129
|
+
* seam every `scaffold()` branch crosses (alias, keep and default alike),
|
|
130
|
+
* after the scope-name refusals and before the first write.
|
|
131
|
+
*/
|
|
132
|
+
export function assertKeyedOrFreeReleased(licenseKey = process.env["AILK_LICENSE_KEY"]) {
|
|
133
|
+
if (licenseKey === undefined || licenseKey.length === 0) {
|
|
134
|
+
assertReleased("levels", ["free"]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
118
137
|
/**
|
|
119
138
|
* Design names every level renders (#6760 D1). Anything else in
|
|
120
139
|
* `STARTER_DESIGNS` is Pro and up. A path design's Free-ness is decided by
|
|
@@ -182,12 +201,15 @@ function licenseErrorMessage(err, moduleName, templateName, level) {
|
|
|
182
201
|
*/
|
|
183
202
|
export async function resolvePaidModules(options) {
|
|
184
203
|
const { paidModules } = options;
|
|
204
|
+
const token = options.licenseKey ?? process.env["AILK_LICENSE_KEY"];
|
|
185
205
|
if (paidModules.length === 0) {
|
|
186
|
-
//
|
|
187
|
-
//
|
|
206
|
+
// Zero network for any request that names no paid module — but no
|
|
207
|
+
// longer zero key reads (#6484): a keyless all-Free request is the Free
|
|
208
|
+
// level, which `release-scope.json` holds, and is refused here, after
|
|
209
|
+
// `scaffold()`'s scope-name refusals and before its first write.
|
|
210
|
+
assertKeyedOrFreeReleased(token);
|
|
188
211
|
return new Map();
|
|
189
212
|
}
|
|
190
|
-
const token = options.licenseKey ?? process.env["AILK_LICENSE_KEY"];
|
|
191
213
|
if (token === undefined || token.length === 0) {
|
|
192
214
|
throw new LicenseRequiredError(noKeyMessage(paidModules, options.templateName));
|
|
193
215
|
}
|
|
@@ -324,8 +346,7 @@ export async function deriveDesignLevel(options) {
|
|
|
324
346
|
*/
|
|
325
347
|
export async function resolveModuleSet(options) {
|
|
326
348
|
const namedList = options.named ?? [];
|
|
327
|
-
const
|
|
328
|
-
const isKeep = namedList.some((m) => !additions.includes(m));
|
|
349
|
+
const isKeep = namedList.some((m) => !isAddition(m));
|
|
329
350
|
if (isKeep) {
|
|
330
351
|
const modules = composeModuleSet(namedList, "free");
|
|
331
352
|
const { paid } = classifyModules(modules);
|
|
@@ -23,13 +23,6 @@ export declare const LEVEL_LABEL: Readonly<Record<Level, string>>;
|
|
|
23
23
|
* an add-on ON TOP of.
|
|
24
24
|
*/
|
|
25
25
|
export declare const ADD_ONS: readonly ModuleName[];
|
|
26
|
-
/**
|
|
27
|
-
* Included at Pro and above (the licence manifest's `pro` tier), but not
|
|
28
|
-
* switched on by default at any level (D1) — an authed app surface
|
|
29
|
-
* contributing no PUBLIC page to a marketing site. Naming it in `--modules`
|
|
30
|
-
* adds it without trimming, exactly like an add-on.
|
|
31
|
-
*/
|
|
32
|
-
export declare const OPT_IN_MODULES: readonly ModuleName[];
|
|
33
26
|
/** Whether naming `m` in `--modules` adds it without trimming the level default. */
|
|
34
27
|
export declare function isAddition(m: ModuleName): boolean;
|
|
35
28
|
/**
|
|
@@ -42,7 +35,8 @@ export declare const LEVEL_MODULES: Readonly<Record<Level, readonly ModuleName[]
|
|
|
42
35
|
/**
|
|
43
36
|
* Which level (or add-on status) a module belongs to (D2). `"free"` for
|
|
44
37
|
* `FREE_MODULES`, `"add-on"` for `ADD_ONS`, `"pro-plus"` for
|
|
45
|
-
* `PRO_PLUS_MODULES`, else `"pro"` (`workspace` included —
|
|
38
|
+
* `PRO_PLUS_MODULES`, else `"pro"` (`workspace` included — in the Pro default
|
|
39
|
+
* since #9696, the DECISION-LOG row in salessmyth/ailaunchkit-site#134). Pure.
|
|
46
40
|
*/
|
|
47
41
|
export declare function levelOf(m: ModuleName): Level | "add-on";
|
|
48
42
|
/**
|
package/dist/lib/module-tier.js
CHANGED
|
@@ -43,22 +43,22 @@ export const LEVEL_LABEL = {
|
|
|
43
43
|
* an add-on ON TOP of.
|
|
44
44
|
*/
|
|
45
45
|
export const ADD_ONS = ["commerce"];
|
|
46
|
-
/**
|
|
47
|
-
* Included at Pro and above (the licence manifest's `pro` tier), but not
|
|
48
|
-
* switched on by default at any level (D1) — an authed app surface
|
|
49
|
-
* contributing no PUBLIC page to a marketing site. Naming it in `--modules`
|
|
50
|
-
* adds it without trimming, exactly like an add-on.
|
|
51
|
-
*/
|
|
52
|
-
export const OPT_IN_MODULES = ["workspace"];
|
|
53
46
|
/** The Pro Plus membership: what Pro Plus switches on beyond Pro. */
|
|
54
47
|
const PRO_PLUS_MODULES = ["multi-tenant"];
|
|
55
|
-
/**
|
|
56
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Named modules that never trim the level default when composing a set (D2):
|
|
50
|
+
* the add-ons, and `workspace` — the authed /admin surface, which contributes
|
|
51
|
+
* no PUBLIC page. Since #9696 (reversing #6759 D1; the DECISION-LOG row dated
|
|
52
|
+
* 2026-10-24, salessmyth/ailaunchkit-site#134) `workspace` is IN the Pro and
|
|
53
|
+
* Pro Plus defaults, so naming it is a no-op there; below Pro it adds it, and
|
|
54
|
+
* the gate refuses it naming Pro.
|
|
55
|
+
*/
|
|
56
|
+
const ADDITIONS = [...ADD_ONS, "workspace"];
|
|
57
57
|
/** Whether naming `m` in `--modules` adds it without trimming the level default. */
|
|
58
58
|
export function isAddition(m) {
|
|
59
59
|
return ADDITIONS.includes(m);
|
|
60
60
|
}
|
|
61
|
-
const PRO_EXCLUDED = new Set([...
|
|
61
|
+
const PRO_EXCLUDED = new Set([...ADD_ONS, ...PRO_PLUS_MODULES]);
|
|
62
62
|
/**
|
|
63
63
|
* What a key at each level switches on with no `--modules` (D2). Derived —
|
|
64
64
|
* every list is `RECOGNIZED_MODULES.filter(...)`, so declaration order is
|
|
@@ -70,12 +70,13 @@ export const LEVEL_MODULES = Object.freeze({
|
|
|
70
70
|
pro: RECOGNIZED_MODULES.filter((m) => FREE_MODULES.includes(m) ||
|
|
71
71
|
(PAID_MODULES.includes(m) && !PRO_EXCLUDED.has(m))),
|
|
72
72
|
"pro-plus": RECOGNIZED_MODULES.filter((m) => FREE_MODULES.includes(m) ||
|
|
73
|
-
(PAID_MODULES.includes(m) && !
|
|
73
|
+
(PAID_MODULES.includes(m) && !ADD_ONS.includes(m))),
|
|
74
74
|
});
|
|
75
75
|
/**
|
|
76
76
|
* Which level (or add-on status) a module belongs to (D2). `"free"` for
|
|
77
77
|
* `FREE_MODULES`, `"add-on"` for `ADD_ONS`, `"pro-plus"` for
|
|
78
|
-
* `PRO_PLUS_MODULES`, else `"pro"` (`workspace` included —
|
|
78
|
+
* `PRO_PLUS_MODULES`, else `"pro"` (`workspace` included — in the Pro default
|
|
79
|
+
* since #9696, the DECISION-LOG row in salessmyth/ailaunchkit-site#134). Pure.
|
|
79
80
|
*/
|
|
80
81
|
export function levelOf(m) {
|
|
81
82
|
if (FREE_MODULES.includes(m))
|
|
@@ -100,6 +100,15 @@ export interface ModuleSlice {
|
|
|
100
100
|
* otherwise. Only a module with a BASE-tree consumer sets it.
|
|
101
101
|
*/
|
|
102
102
|
paidSectionsPackage?: string;
|
|
103
|
+
/**
|
|
104
|
+
* The paid MCP tool packages base code loads through
|
|
105
|
+
* `apps/mcp/src/lib/paid-tools.generated.ts` (#9460 DD6). Each is one row
|
|
106
|
+
* in the generated registry: a bundled `import()` when the scaffold's
|
|
107
|
+
* `apps/mcp/package.json` declares the package, absent otherwise. A
|
|
108
|
+
* package two modules deliver (`mcp-workspace`) is listed by each and
|
|
109
|
+
* rendered once.
|
|
110
|
+
*/
|
|
111
|
+
paidMcpToolPackages?: string[];
|
|
103
112
|
/** Packages this module adds to apps/web.may_import_from (its presentation surface). */
|
|
104
113
|
webImports?: string[];
|
|
105
114
|
/** Apps this module declares (api, mcp replace the base block; admin is new). web is BASE, never here. */
|
|
@@ -124,7 +133,7 @@ export interface ModuleSlice {
|
|
|
124
133
|
* *scaffolded customer site's* `architecture.yaml` — "apps/web MAY import
|
|
125
134
|
* packages/fumadocs-schema." `ownedFiles` instead names, one literal path at
|
|
126
135
|
* a time, which files in *this* monorepo physically belong to the module —
|
|
127
|
-
* "
|
|
136
|
+
* "packages-paid/api-scheduling/src/routes/schedule/index.ts IS the scheduling module." A
|
|
128
137
|
* package can appear in one view and not the other: `packages/fumadocs-schema`
|
|
129
138
|
* is a `webImports` entry (a permission — a docs scaffold installs it) but
|
|
130
139
|
* NOT an `ownedFiles` entry (it is `oss`-tiered; the strip keeps it).
|
|
@@ -154,7 +163,7 @@ export interface ModuleSlice {
|
|
|
154
163
|
* `RECOGNIZED_MODULES`, so adding a `content-write` key would make
|
|
155
164
|
* `create-ailk --modules content-write` a valid scaffold selection. It is
|
|
156
165
|
* not one — content-write is a licence-tier line drawn inside a single
|
|
157
|
-
* app, never a customer opt-in (see `
|
|
166
|
+
* app, never a customer opt-in (see `packages/api/src/config/modules.ts`).
|
|
158
167
|
* - Two are this-list-only and the manifest simply never recorded them:
|
|
159
168
|
* `apps/web/app/[locale]/docs/[[...slug]]/page.tsx` and
|
|
160
169
|
* `apps/web/app/[locale]/meet/confirmed/page.tsx`.
|
|
@@ -164,6 +173,14 @@ export interface ModuleSlice {
|
|
|
164
173
|
* are derived from the import graph — a test or story file carries
|
|
165
174
|
* `oss: false` iff it imports a slice file — never from filename stems,
|
|
166
175
|
* which miss eleven and over-mark three.
|
|
176
|
+
*
|
|
177
|
+
* Since REL-034.4 (#9565 D6) no entry names an `apps/api/` path: a module's
|
|
178
|
+
* API source is its `@working-theory/api-<module>` package under
|
|
179
|
+
* `packages-paid/`, dropped from the public tree wholesale and reached by a
|
|
180
|
+
* keyed scaffold through npm, never through a bundle. The producer
|
|
181
|
+
* (`scripts/build-module-bundles.mjs` `stageModule`) refuses to stage, and
|
|
182
|
+
* the extractor (`lib/extract-module-bundle.ts` `installBundleTree`) refuses
|
|
183
|
+
* to install, any path under `apps/api/`.
|
|
167
184
|
*/
|
|
168
185
|
ownedFiles?: string[];
|
|
169
186
|
/**
|
|
@@ -349,7 +366,7 @@ export declare const ARCHITECTURE_BASE: {
|
|
|
349
366
|
readonly version: 1;
|
|
350
367
|
readonly composition_model: {
|
|
351
368
|
readonly tiers: {
|
|
352
|
-
readonly data: "database/ — Prisma
|
|
369
|
+
readonly data: "database/ — Prisma config + seed; schema and migrations ship in @working-theory/database";
|
|
353
370
|
readonly api: "apps/api (public HTTP API) + apps/mcp (agent tools)";
|
|
354
371
|
readonly presentation: "apps/web — frontend surfaces";
|
|
355
372
|
};
|