create-ailk 0.23.0 → 0.25.1
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 +68 -33
- package/component-catalog.json +3 -3
- package/component-catalog.md +3 -3
- package/dist/add-module.js +10 -3
- package/dist/add-route.d.ts +12 -1
- package/dist/add-route.js +38 -4
- package/dist/cli.js +12 -7
- package/dist/derive-architecture.d.ts +3 -4
- package/dist/derive-architecture.js +75 -22
- 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 +1 -1
- package/dist/lib/fetch-template-snapshot.js +7 -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 +34 -12
- package/dist/lib/scaffold-render-sweep.d.ts +33 -0
- package/dist/lib/scaffold-render-sweep.js +45 -0
- package/dist/module-architecture.d.ts +20 -3
- package/dist/module-architecture.js +122 -538
- package/dist/paid-sections.d.ts +25 -1
- package/dist/paid-sections.js +88 -3
- package/dist/surfaces.js +10 -2
- package/dist/sync-routes.d.ts +30 -4
- package/dist/sync-routes.js +271 -18
- package/dist/template-record.d.ts +14 -4
- package/dist/template-record.js +23 -5
- package/dist/topology.d.ts +16 -3
- package/dist/topology.js +31 -19
- package/dist/update.d.ts +10 -1
- package/dist/update.js +540 -16
- package/package.json +3 -3
- package/release-scope.json +1 -1
- 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 +9 -5
- package/templates/.github/workflows/ci.yml +7 -4
- package/templates/CLAUDE.md +15 -3
- package/templates/CONVENTIONS.md +8 -10
- package/templates/README.md +14 -13
- package/templates/apps/api/.env.example +9 -2
- package/templates/apps/api/CLAUDE.md +122 -82
- 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.ts +7 -4
- 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 -1857
- package/templates/apps/api/vercel.json +2 -2
- package/templates/apps/mcp/CLAUDE.md +77 -24
- 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 -12
- 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 +21 -5
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +9 -3
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/contact/contact.actions.ts +14 -4
- package/templates/apps/web/app/[locale]/contact/intake-analytics.ts +1 -1
- package/templates/apps/web/app/[locale]/contact/intake-script.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 +28 -7
- 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 +2 -2
- package/templates/apps/web/jest.config.cjs +1 -0
- package/templates/apps/web/lib/__tests__/magnet-routes.test.ts +7 -0
- package/templates/apps/web/lib/auth-email.ts +1 -1
- package/templates/apps/web/lib/magnet-routes.ts +3 -1
- package/templates/apps/web/lib/newsletter.actions.ts +9 -6
- 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/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 +32 -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 +757 -7
- package/templates/tsconfig.json +1 -2
- package/versions.json +48 -35
- 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 -292
- 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 -254
- 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 -318
- 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 -264
- 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 -1815
- 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 -325
- 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 -1300
- 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 -268
- package/templates/apps/api/src/routes/content/index.ts +0 -49
- package/templates/apps/api/src/routes/content/list-pages.ts +0 -95
- 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 -129
- package/templates/apps/api/src/routes/content/shown-offerings.ts +0 -229
- package/templates/apps/api/src/routes/content/slug.ts +0 -9
- 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 -573
- 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 -480
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +0 -465
- 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 -448
- 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 -808
- 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 -2026
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +0 -528
- 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 -867
- 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 -1176
- package/templates/apps/api/src/services/__tests__/plan-offerings.test.ts +0 -444
- package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +0 -154
- 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 -313
- 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 -755
- 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 -295
- 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 -868
- 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 -396
- package/templates/apps/api/src/services/offerings/__tests__/readers.test.ts +0 -681
- package/templates/apps/api/src/services/offerings/__tests__/source.test.ts +0 -231
- package/templates/apps/api/src/services/offerings/catalog.ts +0 -308
- package/templates/apps/api/src/services/offerings/checkout-authorization.ts +0 -385
- package/templates/apps/api/src/services/offerings/checkout-session-record.ts +0 -192
- package/templates/apps/api/src/services/offerings/connection.ts +0 -1003
- 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 -1188
- 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 -2073
- 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 -1151
- 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 -65
- package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +0 -187
- 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 -165
- package/templates/apps/mcp/__tests__/lib/public-workspace.test.ts +0 -124
- package/templates/apps/mcp/__tests__/list_pages.test.ts +0 -228
- package/templates/apps/mcp/__tests__/locale.test.ts +0 -135
- 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__/read_content.test.ts +0 -474
- package/templates/apps/mcp/__tests__/request_callback.test.ts +0 -225
- package/templates/apps/mcp/__tests__/search_content.test.ts +0 -256
- 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 -307
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +0 -223
- 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 -342
- 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 -526
- 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 -142
- package/templates/apps/mcp/src/lib/empty-content-adapter.ts +0 -139
- 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/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 -64
- 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 -137
- package/templates/apps/mcp/src/tools/list_pages.ts +0 -74
- 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 -75
- package/templates/apps/mcp/src/tools/request_callback.ts +0 -59
- package/templates/apps/mcp/src/tools/search_content.ts +0 -67
- package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +0 -57
- package/templates/apps/mcp/src/workspace-server.ts +0 -224
- package/templates/database/CHANGELOG.md +0 -961
- 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 -240
- package/templates/database/__tests__/spoke-registry.db.test.ts +0 -191
- package/templates/database/__tests__/tenancy.test.ts +0 -141
- 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/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
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP tool registry — re-exports every tool module.
|
|
3
|
-
*
|
|
4
|
-
* Add new tool modules here as they land in Phase 3+.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export {
|
|
8
|
-
purchaseInputSchema,
|
|
9
|
-
purchaseOutputSchema,
|
|
10
|
-
ailkPurchase,
|
|
11
|
-
type PurchaseInput,
|
|
12
|
-
type PurchaseOutput,
|
|
13
|
-
} from "./purchase.js";
|
|
14
|
-
|
|
15
|
-
export {
|
|
16
|
-
listPagesInputSchema,
|
|
17
|
-
listPagesOutputSchema,
|
|
18
|
-
ailkListPages,
|
|
19
|
-
type ListPagesInput,
|
|
20
|
-
type ListPagesOutput,
|
|
21
|
-
} from "./list_pages.js";
|
|
22
|
-
|
|
23
|
-
export {
|
|
24
|
-
readContentInputSchema,
|
|
25
|
-
readContentOutputSchema,
|
|
26
|
-
ailkReadContent,
|
|
27
|
-
type ReadContentInput,
|
|
28
|
-
type ReadContentOutput,
|
|
29
|
-
} from "./read_content.js";
|
|
30
|
-
|
|
31
|
-
export {
|
|
32
|
-
searchContentInputSchema,
|
|
33
|
-
searchContentOutputSchema,
|
|
34
|
-
ailkSearchContent,
|
|
35
|
-
type SearchContentInput,
|
|
36
|
-
type SearchContentOutput,
|
|
37
|
-
} from "./search_content.js";
|
|
38
|
-
|
|
39
|
-
export {
|
|
40
|
-
getSiteInfoInputSchema,
|
|
41
|
-
getSiteInfoOutputSchema,
|
|
42
|
-
ailkGetSiteInfo,
|
|
43
|
-
type GetSiteInfoInput,
|
|
44
|
-
type GetSiteInfoOutput,
|
|
45
|
-
} from "./get_site_info.js";
|
|
46
|
-
|
|
47
|
-
export {
|
|
48
|
-
getBusinessHoursInputSchema,
|
|
49
|
-
getBusinessHoursOutputSchema,
|
|
50
|
-
ailkGetBusinessHours,
|
|
51
|
-
type GetBusinessHoursInput,
|
|
52
|
-
type GetBusinessHoursOutput,
|
|
53
|
-
} from "./get_business_hours.js";
|
|
54
|
-
|
|
55
|
-
export {
|
|
56
|
-
getLocationsInputSchema,
|
|
57
|
-
getLocationsOutputSchema,
|
|
58
|
-
ailkGetLocations,
|
|
59
|
-
type GetLocationsInput,
|
|
60
|
-
type GetLocationsOutput,
|
|
61
|
-
} from "./get_locations.js";
|
|
62
|
-
|
|
63
|
-
export {
|
|
64
|
-
getOfferingsInputSchema,
|
|
65
|
-
getOfferingsOutputSchema,
|
|
66
|
-
ailkGetOfferings,
|
|
67
|
-
type GetOfferingsInput,
|
|
68
|
-
type GetOfferingsOutput,
|
|
69
|
-
} from "./get_offerings.js";
|
|
70
|
-
|
|
71
|
-
export {
|
|
72
|
-
getPricingInputSchema,
|
|
73
|
-
getPricingOutputSchema,
|
|
74
|
-
ailkGetPricing,
|
|
75
|
-
type GetPricingInput,
|
|
76
|
-
type GetPricingOutput,
|
|
77
|
-
} from "./get_pricing.js";
|
|
78
|
-
|
|
79
|
-
export {
|
|
80
|
-
getFaqInputSchema,
|
|
81
|
-
getFaqOutputSchema,
|
|
82
|
-
ailkGetFaq,
|
|
83
|
-
type GetFaqInput,
|
|
84
|
-
type GetFaqOutput,
|
|
85
|
-
} from "./get_faq.js";
|
|
86
|
-
|
|
87
|
-
export {
|
|
88
|
-
auditInputSchema,
|
|
89
|
-
auditOutputSchema,
|
|
90
|
-
ailkAudit,
|
|
91
|
-
type AuditInput,
|
|
92
|
-
type AuditOutput,
|
|
93
|
-
} from "./audit.js";
|
|
94
|
-
|
|
95
|
-
export {
|
|
96
|
-
submitLeadInputSchema,
|
|
97
|
-
submitLeadOutputSchema,
|
|
98
|
-
ailkCaptureLead,
|
|
99
|
-
type SubmitLeadInput,
|
|
100
|
-
type SubmitLeadOutput,
|
|
101
|
-
} from "./capture_lead.js";
|
|
102
|
-
|
|
103
|
-
export {
|
|
104
|
-
subscribeNewsletterInputSchema,
|
|
105
|
-
subscribeNewsletterOutputSchema,
|
|
106
|
-
ailkSubscribeNewsletter,
|
|
107
|
-
type SubscribeNewsletterInput,
|
|
108
|
-
type SubscribeNewsletterOutput,
|
|
109
|
-
} from "./subscribe_newsletter.js";
|
|
110
|
-
|
|
111
|
-
export {
|
|
112
|
-
requestCallbackInputSchema,
|
|
113
|
-
requestCallbackOutputSchema,
|
|
114
|
-
ailkRequestCallback,
|
|
115
|
-
type RequestCallbackInput,
|
|
116
|
-
type RequestCallbackOutput,
|
|
117
|
-
} from "./request_callback.js";
|
|
118
|
-
|
|
119
|
-
export {
|
|
120
|
-
scaffoldInputSchema,
|
|
121
|
-
scaffoldOutputSchema,
|
|
122
|
-
ailkCreateProject,
|
|
123
|
-
type ScaffoldInput,
|
|
124
|
-
type ScaffoldOutput,
|
|
125
|
-
} from "./create_project.js";
|
|
126
|
-
|
|
127
|
-
// The scheduling tools (list_availability, get_event_meta, create_booking)
|
|
128
|
-
// and the signal-collectors flow tools (get_flow, submit_flow_step) are
|
|
129
|
-
// deliberately NOT re-exported here. (The content-write tools that used to sit
|
|
130
|
-
// in this list — create_page, update_page, delete_page — no longer exist at
|
|
131
|
-
// all: #5853 retired them with their HTTP twins.)
|
|
132
|
-
// Both remaining groups are module-conditional slice files
|
|
133
|
-
// (#5182): a re-export from this barrel is a static path into a file the OSS
|
|
134
|
-
// strip removes, which reds the public tree's type-check. They are reached
|
|
135
|
-
// only through `createMcpServer`'s per-module loader in ../server.ts.
|
|
136
|
-
// The rule this barrel now follows: it re-exports exactly the tools no module
|
|
137
|
-
// gate can remove.
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* list_pages — returns published content pages, optionally filtered by type.
|
|
3
|
-
*
|
|
4
|
-
* Pure read: resolves its adapter through `getMcpContentAdapter()` — the one
|
|
5
|
-
* resolver seam (#5805, ADR 0011), MDX by default.
|
|
6
|
-
* No auth, no side effects, no network. The adapter reads from the filesystem.
|
|
7
|
-
*
|
|
8
|
-
* Phase 3 S3: optional `locale` parameter. Validated against `readLocales()`
|
|
9
|
-
* allowlist; invalid or unknown values silently fall back to the project's
|
|
10
|
-
* default locale (AC-i18n-07). Lists are locale-scoped — pages must exist in
|
|
11
|
-
* the requested locale's directory to be enumerated.
|
|
12
|
-
*
|
|
13
|
-
* Input: { type?: SchemaOrgType, locale?: string }
|
|
14
|
-
* Output: { pages: Array<{ slug, type, title, description? }> }
|
|
15
|
-
* Session/scope: none — read-only public content.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
SCHEMA_ORG_TYPES,
|
|
20
|
-
type SchemaOrgType,
|
|
21
|
-
} from "@working-theory/content-adapters";
|
|
22
|
-
import {
|
|
23
|
-
listPagesInputSchema,
|
|
24
|
-
listPagesOutputSchema,
|
|
25
|
-
type ListPagesInput,
|
|
26
|
-
type ListPagesOutput,
|
|
27
|
-
} from "@working-theory/validation";
|
|
28
|
-
|
|
29
|
-
import {
|
|
30
|
-
getMcpContentAdapter,
|
|
31
|
-
mcpContentRoot,
|
|
32
|
-
} from "../lib/content-adapter.js";
|
|
33
|
-
import { resolveLocale } from "../lib/resolve-locale.js";
|
|
34
|
-
|
|
35
|
-
export { listPagesInputSchema, listPagesOutputSchema };
|
|
36
|
-
export type { ListPagesInput, ListPagesOutput };
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* list_pages handler.
|
|
40
|
-
*
|
|
41
|
-
* Accepts an optional `contentRoot` override for testing (avoids coupling
|
|
42
|
-
* unit tests to the deployed filesystem layout). When omitted, resolves it
|
|
43
|
-
* through `mcpContentRoot()` (#8070 D3).
|
|
44
|
-
*/
|
|
45
|
-
export async function ailkListPages(
|
|
46
|
-
input: ListPagesInput,
|
|
47
|
-
contentRoot?: string,
|
|
48
|
-
): Promise<ListPagesOutput> {
|
|
49
|
-
listPagesInputSchema.parse(input);
|
|
50
|
-
|
|
51
|
-
// Default: the one content-root resolver (#8070 D3).
|
|
52
|
-
const root = contentRoot ?? mcpContentRoot();
|
|
53
|
-
const locale = resolveLocale(input.locale);
|
|
54
|
-
const adapter = getMcpContentAdapter({ contentRoot: root, locale });
|
|
55
|
-
|
|
56
|
-
const types: readonly SchemaOrgType[] = input.type
|
|
57
|
-
? [input.type]
|
|
58
|
-
: SCHEMA_ORG_TYPES;
|
|
59
|
-
|
|
60
|
-
const perType = await Promise.all(
|
|
61
|
-
types.map((type) => adapter.listPages(type, locale)),
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
const pages: ListPagesOutput["pages"] = perType.flatMap((results) =>
|
|
65
|
-
results.map((page) => ({
|
|
66
|
-
slug: page.slug,
|
|
67
|
-
type: page.type,
|
|
68
|
-
title: page.title,
|
|
69
|
-
...(page.description !== undefined && { description: page.description }),
|
|
70
|
-
})),
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
return listPagesOutputSchema.parse({ pages });
|
|
74
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// oss: false
|
|
2
|
-
/**
|
|
3
|
-
* The signed-in workspace surface's People notes tools (#8514 D8) — the twins
|
|
4
|
-
* of `apps/api/src/routes/workspaces/people.ts`'s notes pair:
|
|
5
|
-
*
|
|
6
|
-
* get_person_notes GET /v1/workspaces/:workspaceId/people/:personId/notes
|
|
7
|
-
* set_person_notes PUT /v1/workspaces/:workspaceId/people/:personId/notes
|
|
8
|
-
*
|
|
9
|
-
* Each takes the route's params and body (the SDK has already parsed them
|
|
10
|
-
* against the catalog's input shape, which is the route's own schemas),
|
|
11
|
-
* forwards the caller's agent key through `@working-theory/api-client`, and
|
|
12
|
-
* returns the route's answer untouched. apps/api checks the key, the grant and
|
|
13
|
-
* the workspace; this file only carries the key, and never logs or returns it.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { people, type PersonRef } from "@working-theory/api-client";
|
|
17
|
-
import type { PersonNotesPutInput } from "@working-theory/validation";
|
|
18
|
-
|
|
19
|
-
export function ailkGetPersonNotes(key: string, input: PersonRef) {
|
|
20
|
-
return people.notes(key, input);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function ailkSetPersonNotes(key: string, input: PersonRef & PersonNotesPutInput) {
|
|
24
|
-
return people.setNotes(key, input);
|
|
25
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// oss: false
|
|
2
|
-
/**
|
|
3
|
-
* The signed-in workspace surface's proposals tools (#8516 D7) — the twins of
|
|
4
|
-
* `apps/api/src/routes/workspaces/pieces.ts`'s proposals pair:
|
|
5
|
-
*
|
|
6
|
-
* list_proposals GET /v1/workspaces/:workspaceId/people/:personId/proposals
|
|
7
|
-
* create_proposal POST /v1/workspaces/:workspaceId/people/:personId/proposals
|
|
8
|
-
*
|
|
9
|
-
* Each takes the route's params and body (the SDK has already parsed them
|
|
10
|
-
* against the catalog's input shape, which is the route's own schemas),
|
|
11
|
-
* forwards the caller's agent key through `@working-theory/api-client`, and
|
|
12
|
-
* returns the route's answer untouched. apps/api checks the key, the grant,
|
|
13
|
-
* the workspace and the money gate (an agent's price is `403
|
|
14
|
-
* proposal_needs_person`); this file only carries the key, and never logs or
|
|
15
|
-
* returns it.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import { people, type PersonRef } from "@working-theory/api-client";
|
|
19
|
-
import type { ProposalCreateBody } from "@working-theory/validation";
|
|
20
|
-
|
|
21
|
-
export function ailkListProposals(key: string, input: PersonRef) {
|
|
22
|
-
return people.proposals(key, input);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function ailkCreateProposal(key: string, input: PersonRef & ProposalCreateBody) {
|
|
26
|
-
return people.createProposal(key, input);
|
|
27
|
-
}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AGENT TOOL — purchase (`start_purchase`)
|
|
3
|
-
*
|
|
4
|
-
* Starts a purchase for a named offering and returns a **Stripe-hosted
|
|
5
|
-
* Checkout URL**. Nothing is charged here: the tool builds the payload the
|
|
6
|
-
* HTTP twin `POST /v1/checkout/sessions` validates, and the buyer completes
|
|
7
|
-
* payment on Stripe's own page. That hosted handoff is the money boundary
|
|
8
|
-
* `.claude/rules/vocabulary.md` § Commerce requires — no card data reaches
|
|
9
|
-
* us, and we are not a Stripe Connect platform.
|
|
10
|
-
*
|
|
11
|
-
* VISIBILITY — the commerce add-on claim (#5971, superseding S15a/#610).
|
|
12
|
-
* This tool carries `addon: "commerce"` in the catalog, and since #5971 that
|
|
13
|
-
* marker is its visibility gate: it reaches neither the discovery manifest
|
|
14
|
-
* nor the running server's tool list unless the deployment positively holds
|
|
15
|
-
* the `commerce` licence claim. Two gates enforce that, deliberately:
|
|
16
|
-
*
|
|
17
|
-
* 1. REGISTRATION — `shouldRegister()` in `../server.js` drops the entry.
|
|
18
|
-
* 2. CALL TIME — the first statement below re-reads the claim.
|
|
19
|
-
*
|
|
20
|
-
* Gate 2 is not redundant. The HTTP transport's stateless mode builds a fresh
|
|
21
|
-
* `McpServer` per request, so the gate must be re-read rather than captured;
|
|
22
|
-
* `ailkPurchase` is an exported function a scaffold or a test can call
|
|
23
|
-
* directly, bypassing registration entirely; and it gives "calling it by name
|
|
24
|
-
* on a keyless site" a deterministic, asserted body rather than whatever the
|
|
25
|
-
* SDK emits for an unregistered name. That body is `notFoundError("Not
|
|
26
|
-
* found")` — the MCP twin of the checkout route's own
|
|
27
|
-
* `commerceDisabledResponse()`, same code, same message, no hint that a
|
|
28
|
-
* licence exists.
|
|
29
|
-
*
|
|
30
|
-
* REDIRECTS — never caller-supplied on this surface (#6001). An anonymous
|
|
31
|
-
* caller has no way to prove it controls a redirect target, so
|
|
32
|
-
* `successUrl` / `cancelUrl` are ALWAYS derived from `AILK_BASE_URL` below,
|
|
33
|
-
* never accepted from the input, and `allowPromotionCodes` is never accepted
|
|
34
|
-
* either. This function's own gate is `purchaseMcpInputSchema` — a
|
|
35
|
-
* `.strict()` `.pick()` of the shared `purchaseInputSchema` exposing exactly
|
|
36
|
-
* `productCode` + `quantity` — so a DIRECT call to `ailkPurchase` (the
|
|
37
|
-
* surface this file's own tests exercise, per the note above) carrying any
|
|
38
|
-
* of the three fails validation outright. A call through the registered SDK
|
|
39
|
-
* transport has them stripped one layer earlier, by the SDK's own arg parse
|
|
40
|
-
* against the registered shape, before this function ever runs — they are
|
|
41
|
-
* simply not part of that shape. Either path is safe: the payload built
|
|
42
|
-
* below can never carry a caller-supplied redirect. The shared
|
|
43
|
-
* `purchaseInputSchema` (and the Server Action / API route that use it) is
|
|
44
|
-
* unaffected: both keep accepting a caller-supplied redirect. The route's own
|
|
45
|
-
* anonymous exposure is gated only when `OSS_API_INTERNAL_SECRET` is set
|
|
46
|
-
* (`passesInternalAuthGate()` in `apps/api/src/routes/checkout/sessions.ts`);
|
|
47
|
-
* unset — the OSS standalone default — the route accepts anonymous callers.
|
|
48
|
-
*
|
|
49
|
-
* The file stays in the BASE tree and is never added to
|
|
50
|
-
* `MODULE_SLICES.commerce.ownedFiles`: `../server.js` statically imports
|
|
51
|
-
* `ailkPurchase`, so a slice that deleted it from a keyless scaffold would
|
|
52
|
-
* produce `ERR_MODULE_NOT_FOUND` inside the server bootstrap. A keyless
|
|
53
|
-
* scaffold carries the file and registers nothing — exactly how it already
|
|
54
|
-
* carries `apps/api/src/routes/checkout/sessions.ts`.
|
|
55
|
-
*
|
|
56
|
-
* Schemas live in `@working-theory/validation` per ADR 0013. Network calls go
|
|
57
|
-
* through `@working-theory/api-client` per the architecture invariants (apps
|
|
58
|
-
* may not import each other; the shared HTTP surface lives in packages/).
|
|
59
|
-
*
|
|
60
|
-
* THE KEY — the full Offerings lookup_key (#8935). `productCode` is a price's
|
|
61
|
-
* full lookup_key (contract §3.7), the `lookupKey` `get_pricing` and
|
|
62
|
-
* `get_offerings` return. After the claim and the strict schema, the one
|
|
63
|
-
* §3.7 parser, `parseLookupKey`, refuses an ungrammatical key before any HTTP
|
|
64
|
-
* call, with the same not-found body every route 404 maps to (A3, A5). The
|
|
65
|
-
* workspace stays the server's (A1): the api-client attaches the
|
|
66
|
-
* deployment's own spoke key, and the route alone decides whether the key is
|
|
67
|
-
* shown and org-enabled. A spoke whose Organization has no Stripe connection
|
|
68
|
-
* gets the route's same 404, never a session on the hub's own env key, so
|
|
69
|
-
* this tool refuses it as the web buy route does (#9126).
|
|
70
|
-
*
|
|
71
|
-
* Spec: `docs/specs/5971-start-purchase-hosted-checkout-spec.md`,
|
|
72
|
-
* `docs/specs/8935-start-purchase-sells-a-named-spec.md`.
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
import { checkout } from "@working-theory/api-client";
|
|
76
|
-
import {
|
|
77
|
-
parseLookupKey,
|
|
78
|
-
purchaseMcpInputSchema,
|
|
79
|
-
type PurchaseMcpInput,
|
|
80
|
-
type PurchaseOutput,
|
|
81
|
-
} from "@working-theory/validation";
|
|
82
|
-
|
|
83
|
-
import { mcpCommerceClaim } from "../lib/commerce-claim.js";
|
|
84
|
-
import {
|
|
85
|
-
notFoundError,
|
|
86
|
-
validationError,
|
|
87
|
-
type ErrorBody,
|
|
88
|
-
} from "../lib/errors.js";
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* The module-disabled body. Identical to what a build without commerce
|
|
92
|
-
* produces and to the checkout route's own `commerceDisabledResponse()` —
|
|
93
|
-
* it must not leak that a licence gate is what answered.
|
|
94
|
-
*/
|
|
95
|
-
function commerceDisabledBody(): ErrorBody {
|
|
96
|
-
return notFoundError("Not found");
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* The one not-found body for an offering (#8935 D2, A5): an ungrammatical key
|
|
101
|
-
* refused before the call and every route 404 answer this same value, and
|
|
102
|
-
* neither echoes the caller's key.
|
|
103
|
-
*/
|
|
104
|
-
function offeringNotFoundBody(): ErrorBody {
|
|
105
|
-
return notFoundError("No offering matches that product code.");
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Export name `ailkPurchase` satisfies the parity-test naming convention
|
|
110
|
-
* (ailk<PascalVerb>) so the harness can discover it.
|
|
111
|
-
*
|
|
112
|
-
* Paired with `purchaseAction` Server Action in
|
|
113
|
-
* apps/web/app/[locale]/dev/purchase/.
|
|
114
|
-
*
|
|
115
|
-
* Returns a typed error BODY rather than throwing on every failure an agent
|
|
116
|
-
* can act on (FR-2) — MCP tools surface errors as their result body, the
|
|
117
|
-
* pattern `lib/errors.ts`'s error bodies establish.
|
|
118
|
-
*/
|
|
119
|
-
export async function ailkPurchase(
|
|
120
|
-
input: PurchaseMcpInput,
|
|
121
|
-
): Promise<PurchaseOutput | ErrorBody> {
|
|
122
|
-
// Gate 2 — call time. Before validation, before any side effect.
|
|
123
|
-
if (mcpCommerceClaim() !== "claimed") {
|
|
124
|
-
return commerceDisabledBody();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Validate input before any side effect (security requirement). Strict
|
|
128
|
-
// (#6001): a DIRECT call carrying successUrl, cancelUrl or
|
|
129
|
-
// allowPromotionCodes fails here — this function never accepts a
|
|
130
|
-
// caller-supplied redirect. (A call through the registered SDK transport
|
|
131
|
-
// never reaches this line with those fields present at all — see the
|
|
132
|
-
// REDIRECTS note above.) Every field this schema DOES accept mirrors the
|
|
133
|
-
// route's own validation (spec D5), so an input this accepts is an input
|
|
134
|
-
// the route accepts.
|
|
135
|
-
const parsed = purchaseMcpInputSchema.safeParse(input);
|
|
136
|
-
if (!parsed.success) {
|
|
137
|
-
return validationError("Invalid start_purchase input", {
|
|
138
|
-
issues: parsed.error.issues.map((issue) => ({
|
|
139
|
-
path: issue.path as (string | number)[],
|
|
140
|
-
message: issue.message,
|
|
141
|
-
})),
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const baseUrl =
|
|
146
|
-
process.env.AILK_BASE_URL ||
|
|
147
|
-
process.env.NEXT_PUBLIC_BASE_URL ||
|
|
148
|
-
"http://localhost:3000";
|
|
149
|
-
|
|
150
|
-
const { productCode, quantity } = parsed.data;
|
|
151
|
-
|
|
152
|
-
// #8935 D2 — a key outside the §3.7 grammar can never sell, so it is
|
|
153
|
-
// refused here, before the route spends a rate-limit token on it.
|
|
154
|
-
if (parseLookupKey(productCode) === null) {
|
|
155
|
-
return offeringNotFoundBody();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// successUrl/cancelUrl are ALWAYS derived from baseUrl (#6001) — never
|
|
159
|
-
// accepted from the caller. allowPromotionCodes is never forwarded: it is
|
|
160
|
-
// not part of purchaseMcpInputSchema, so it can never be present here.
|
|
161
|
-
//
|
|
162
|
-
// #6084 D1 — `successUrl` carries Stripe's own `{CHECKOUT_SESSION_ID}`
|
|
163
|
-
// template token, substituted into the redirect at completion time. This
|
|
164
|
-
// is what lets `/purchase/success` read the session back (D1). `cancelUrl`
|
|
165
|
-
// deliberately carries NO template: that page reads nothing (D4), and
|
|
166
|
-
// Stripe's substitution contract is documented for `success_url` only.
|
|
167
|
-
const result = await checkout.createSession({
|
|
168
|
-
productCode,
|
|
169
|
-
...(quantity !== undefined && { quantity }),
|
|
170
|
-
successUrl: `${baseUrl}/purchase/success?session_id={CHECKOUT_SESSION_ID}`,
|
|
171
|
-
cancelUrl: `${baseUrl}/purchase/cancel`,
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
if (!result.ok) {
|
|
175
|
-
// An unknown offering is the route's 404 `unknown-product-code`, and
|
|
176
|
-
// `packages/stripe-client` throws it BEFORE `stripe.checkout.sessions
|
|
177
|
-
// .create` — so no Checkout Session exists (FR-2).
|
|
178
|
-
if (result.status === 404) {
|
|
179
|
-
// Deliberately does NOT echo the caller's productCode. The HTTP twin
|
|
180
|
-
// states and tests that invariant ("Error responses never echo user
|
|
181
|
-
// input", apps/api/src/routes/checkout/sessions.ts), and parity means
|
|
182
|
-
// the pair answers alike.
|
|
183
|
-
return offeringNotFoundBody();
|
|
184
|
-
}
|
|
185
|
-
return validationError(
|
|
186
|
-
`checkout-unavailable: POST /v1/checkout/sessions returned ${result.status}`,
|
|
187
|
-
{ status: result.status },
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Only `url` is surfaced. The route's `sessionId` is deliberately withheld:
|
|
192
|
-
// an anonymous agent has no use for it and it is the one field that
|
|
193
|
-
// identifies a specific buyer's session (spec D5).
|
|
194
|
-
return { url: result.body.url };
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// Re-export schemas/types from @working-theory/validation for barrel consumers.
|
|
198
|
-
export {
|
|
199
|
-
purchaseInputSchema,
|
|
200
|
-
purchaseMcpInputSchema,
|
|
201
|
-
purchaseOutputSchema,
|
|
202
|
-
type PurchaseInput,
|
|
203
|
-
type PurchaseMcpInput,
|
|
204
|
-
type PurchaseOutput,
|
|
205
|
-
} from "@working-theory/validation";
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* read_content — returns a single page's frontmatter + raw MDX body.
|
|
3
|
-
*
|
|
4
|
-
* Pure read: resolves its adapter through `getMcpMdxContentAdapter()` — the
|
|
5
|
-
* MDX-narrowed twin of the one resolver seam (#5805, ADR 0011; needed here
|
|
6
|
-
* for `getPageSource()`'s raw body, which the base `ContentAdapter` contract
|
|
7
|
-
* doesn't carry), MDX by default.
|
|
8
|
-
* Composes getPageBySlug (frontmatter) + getPageSource (body) into a single
|
|
9
|
-
* output shape. Returns null when the slug is not found — never throws for
|
|
10
|
-
* a missing page.
|
|
11
|
-
*
|
|
12
|
-
* Phase 3 S3: optional `locale` parameter. Validated against `readLocales()`
|
|
13
|
-
* allowlist; invalid or unknown values silently fall back to the project's
|
|
14
|
-
* default locale (AC-i18n-07). The adapter applies its own fallback chain.
|
|
15
|
-
*
|
|
16
|
-
* Input: { type: SchemaOrgType, slug: string, locale?: string } — `type`
|
|
17
|
-
* admits the full SchemaOrgType set (#6030 D1), mirrored in
|
|
18
|
-
* @working-theory/validation's MCP_SCHEMA_ORG_TYPES.
|
|
19
|
-
* Output: { slug, type, frontmatter, body } | null
|
|
20
|
-
* Session/scope: none — read-only public content.
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
import {
|
|
24
|
-
readContentInputSchema,
|
|
25
|
-
readContentOutputSchema,
|
|
26
|
-
type ReadContentInput,
|
|
27
|
-
type ReadContentOutput,
|
|
28
|
-
} from "@working-theory/validation";
|
|
29
|
-
|
|
30
|
-
import {
|
|
31
|
-
getMcpMdxContentAdapter,
|
|
32
|
-
mcpContentRoot,
|
|
33
|
-
} from "../lib/content-adapter.js";
|
|
34
|
-
import { resolveLocale } from "../lib/resolve-locale.js";
|
|
35
|
-
|
|
36
|
-
export { readContentInputSchema, readContentOutputSchema };
|
|
37
|
-
export type { ReadContentInput, ReadContentOutput };
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* read_content handler.
|
|
41
|
-
*
|
|
42
|
-
* Accepts an optional `contentRoot` override for testing. When omitted,
|
|
43
|
-
* resolves it through `mcpContentRoot()` (#8070 D3).
|
|
44
|
-
*/
|
|
45
|
-
export async function ailkReadContent(
|
|
46
|
-
input: ReadContentInput,
|
|
47
|
-
contentRoot?: string,
|
|
48
|
-
): Promise<ReadContentOutput> {
|
|
49
|
-
readContentInputSchema.parse(input);
|
|
50
|
-
|
|
51
|
-
// Default: the one content-root resolver (#8070 D3).
|
|
52
|
-
const root = contentRoot ?? mcpContentRoot();
|
|
53
|
-
const locale = resolveLocale(input.locale);
|
|
54
|
-
|
|
55
|
-
const adapter = getMcpMdxContentAdapter({ contentRoot: root, locale });
|
|
56
|
-
|
|
57
|
-
const source = await adapter.getPageSource(input.type, input.slug, locale);
|
|
58
|
-
if (source === null) return null;
|
|
59
|
-
|
|
60
|
-
return readContentOutputSchema.parse({
|
|
61
|
-
// Prefer the stored frontmatter's slug/type; fall back to the
|
|
62
|
-
// request-validated input (#5876 spec D9). On the MDX path the
|
|
63
|
-
// frontmatter always carries both — required, non-optional fields of
|
|
64
|
-
// FrontmatterSchema — so this is inert there and the mdx payload stays
|
|
65
|
-
// byte-identical. The fallback matters for cross-adapter identity: the
|
|
66
|
-
// Epic #5324 AC-WCE-04 comparison needs `read_content`'s payload to be
|
|
67
|
-
// identical across adapters, which a request-validated value guarantees
|
|
68
|
-
// and a stored-bookkeeping value only guarantees if the write path
|
|
69
|
-
// agrees.
|
|
70
|
-
slug: source.frontmatter.slug ?? input.slug,
|
|
71
|
-
type: source.frontmatter.type ?? input.type,
|
|
72
|
-
frontmatter: source.frontmatter as Record<string, unknown>,
|
|
73
|
-
body: source.body,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* request_callback — schedule a callback request.
|
|
3
|
-
*
|
|
4
|
-
* Validates input via Zod, forwards to POST /api/leads/callback via
|
|
5
|
-
* @working-theory/api-client, and shapes the response into the MCP output schema.
|
|
6
|
-
* No business logic — orchestration lives in apps/api B6.
|
|
7
|
-
*
|
|
8
|
-
* Input: { name, phone, preferredTime? }
|
|
9
|
-
* Output: { ok: true, id, persisted } | { ok: false, error: { kind, ... } }
|
|
10
|
-
* Session/scope: none — anonymous write, no auth required.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { apiClient } from "@working-theory/api-client";
|
|
14
|
-
import {
|
|
15
|
-
requestCallbackInputSchema,
|
|
16
|
-
requestCallbackOutputSchema,
|
|
17
|
-
type RequestCallbackInput,
|
|
18
|
-
type RequestCallbackOutput,
|
|
19
|
-
} from "@working-theory/validation";
|
|
20
|
-
|
|
21
|
-
import { visitorForwardHeadersForThisCall } from "../request-context.js";
|
|
22
|
-
|
|
23
|
-
export { requestCallbackInputSchema, requestCallbackOutputSchema };
|
|
24
|
-
export type { RequestCallbackInput, RequestCallbackOutput };
|
|
25
|
-
|
|
26
|
-
export async function ailkRequestCallback(
|
|
27
|
-
input: RequestCallbackInput,
|
|
28
|
-
): Promise<RequestCallbackOutput> {
|
|
29
|
-
const parsed = requestCallbackInputSchema.safeParse(input);
|
|
30
|
-
if (!parsed.success) {
|
|
31
|
-
return {
|
|
32
|
-
ok: false,
|
|
33
|
-
error: { kind: "invalid_input", issues: parsed.error.issues },
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const { name, phone, preferredTime } = parsed.data;
|
|
38
|
-
const siteId = process.env.AILK_SITE_ID ?? "default";
|
|
39
|
-
const body = {
|
|
40
|
-
siteId,
|
|
41
|
-
name,
|
|
42
|
-
phone,
|
|
43
|
-
...(preferredTime !== undefined && { preferredTime }),
|
|
44
|
-
payload: {},
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
// #8073 — forward the address the transport trusted (never an identity
|
|
48
|
-
// argument on this tool's own schema) so the hub counts the write in that
|
|
49
|
-
// visitor's own rate-limit bucket rather than this MCP host's.
|
|
50
|
-
const headers = visitorForwardHeadersForThisCall();
|
|
51
|
-
const res = headers
|
|
52
|
-
? await apiClient.leads.callback(body, { headers })
|
|
53
|
-
: await apiClient.leads.callback(body);
|
|
54
|
-
if (!res.ok) {
|
|
55
|
-
return { ok: false, error: { kind: "api_error", status: res.status } };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return { ok: true, id: res.body.id, persisted: res.body.persisted };
|
|
59
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* search_content — full-text search across published content pages.
|
|
3
|
-
*
|
|
4
|
-
* Pure read: resolves its adapter through `getMcpContentAdapter()` — the one
|
|
5
|
-
* resolver seam (#5805, ADR 0011), MDX by default.
|
|
6
|
-
* Delegates to adapter.searchPages which scores by title/description/body match.
|
|
7
|
-
* Limit defaults to 10; max 50. Query capped at 200 chars (enforced by Zod).
|
|
8
|
-
*
|
|
9
|
-
* Phase 3 S3: optional `locale` parameter. Search is locale-scoped — only the
|
|
10
|
-
* requested locale's content directory is searched. Invalid or unknown values
|
|
11
|
-
* silently fall back to the project's default locale (AC-i18n-07).
|
|
12
|
-
*
|
|
13
|
-
* #5831: optional `category` parameter — a leaf slug from the site-category
|
|
14
|
-
* registry. Unlike `locale`, an unrecognised value is a validation error, not
|
|
15
|
-
* a silent fallback: the registry is closed, so a bad slug is a caller mistake.
|
|
16
|
-
*
|
|
17
|
-
* Input: { query: string, type?: SchemaOrgType, category?: CategorySlug,
|
|
18
|
-
* limit?: number, locale?: string }
|
|
19
|
-
* Output: { results: Array<{ slug, type, title, snippet, score }> }
|
|
20
|
-
* Session/scope: none — read-only public content.
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
import {
|
|
24
|
-
searchContentInputSchema,
|
|
25
|
-
searchContentOutputSchema,
|
|
26
|
-
type SearchContentInput,
|
|
27
|
-
type SearchContentOutput,
|
|
28
|
-
} from "@working-theory/validation";
|
|
29
|
-
|
|
30
|
-
import {
|
|
31
|
-
getMcpContentAdapter,
|
|
32
|
-
mcpContentRoot,
|
|
33
|
-
} from "../lib/content-adapter.js";
|
|
34
|
-
import { resolveLocale } from "../lib/resolve-locale.js";
|
|
35
|
-
|
|
36
|
-
export { searchContentInputSchema, searchContentOutputSchema };
|
|
37
|
-
export type { SearchContentInput, SearchContentOutput };
|
|
38
|
-
|
|
39
|
-
const DEFAULT_LIMIT = 10;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* search_content handler.
|
|
43
|
-
*
|
|
44
|
-
* Accepts an optional `contentRoot` override for testing. When omitted,
|
|
45
|
-
* resolves it through `mcpContentRoot()` (#8070 D3).
|
|
46
|
-
*/
|
|
47
|
-
export async function ailkSearchContent(
|
|
48
|
-
input: SearchContentInput,
|
|
49
|
-
contentRoot?: string,
|
|
50
|
-
): Promise<SearchContentOutput> {
|
|
51
|
-
searchContentInputSchema.parse(input);
|
|
52
|
-
|
|
53
|
-
const root = contentRoot ?? mcpContentRoot();
|
|
54
|
-
const locale = resolveLocale(input.locale);
|
|
55
|
-
const adapter = getMcpContentAdapter({ contentRoot: root, locale });
|
|
56
|
-
|
|
57
|
-
const options = {
|
|
58
|
-
limit: input.limit ?? DEFAULT_LIMIT,
|
|
59
|
-
...(input.type !== undefined && { type: input.type }),
|
|
60
|
-
...(input.category !== undefined && { category: input.category }),
|
|
61
|
-
locale,
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const rawResults = await adapter.searchPages(input.query, options);
|
|
65
|
-
|
|
66
|
-
return searchContentOutputSchema.parse({ results: rawResults });
|
|
67
|
-
}
|