create-ailk 0.10.0 → 0.11.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 +7 -2
- package/dist/cli.js +5 -1
- package/dist/content-payloads.d.ts +37 -0
- package/dist/content-payloads.js +64 -0
- package/dist/lib/fetch-module.d.ts +3 -3
- package/dist/lib/fetch-module.js +11 -5
- package/dist/lib/fetch-template.d.ts +1 -1
- package/dist/lib/fetch-template.js +7 -4
- package/dist/lib/scaffold-render-sweep.d.ts +16 -0
- package/dist/lib/scaffold-render-sweep.js +52 -3
- package/dist/module-architecture.d.ts +9 -0
- package/dist/module-architecture.js +43 -12
- package/dist/parse-args.d.ts +2 -0
- package/dist/parse-args.js +7 -0
- package/dist/surfaces.js +2 -3
- package/package.json +3 -3
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +4 -3
- package/site-templates/shapes/local-business-service/content/en/Service/first-job.mdx +8 -8
- package/site-templates/shapes/local-business-service/content/en/Service/second-job.mdx +8 -8
- package/site-templates/shapes/local-business-service/content/en/Service/third-job.mdx +8 -8
- package/site-templates/shapes/organization-service/content/en/Service/first-engagement.mdx +8 -8
- package/site-templates/shapes/organization-service/content/en/Service/second-engagement.mdx +8 -8
- package/site-templates/shapes/organization-service/content/en/Service/third-engagement.mdx +8 -8
- package/site-templates/shapes/person-service/content/en/Service/first-engagement.mdx +8 -8
- package/site-templates/shapes/person-service/content/en/Service/second-engagement.mdx +8 -8
- package/site-templates/shapes/person-service/content/en/Service/third-engagement.mdx +8 -8
- package/templates/.claude/settings.json +12 -0
- package/templates/.env.example +1 -5
- package/templates/CLAUDE.md +38 -22
- package/templates/README.md +12 -12
- package/templates/apps/api/jest.config.cjs +1 -0
- package/templates/apps/api/package.json +2 -1
- package/templates/apps/mcp/CLAUDE.md +23 -10
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +160 -17
- package/templates/apps/mcp/__tests__/index.test.ts +118 -1
- package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +425 -5
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +67 -3
- package/templates/apps/mcp/__tests__/server.test.ts +162 -1
- package/templates/apps/mcp/package.json +1 -1
- package/templates/apps/mcp/src/index.ts +35 -3
- package/templates/apps/mcp/src/lib/commerce-claim.ts +193 -24
- package/templates/apps/mcp/src/server.ts +77 -5
- package/templates/apps/mcp/src/tools/purchase.ts +1 -1
- package/templates/apps/web/CLAUDE.md +1 -1
- package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +15 -0
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +10 -3
- package/templates/apps/web/app/[locale]/careers/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/case-studies/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/courses/[slug]/page.tsx +1 -14
- package/templates/apps/web/app/[locale]/events/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/features/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/for/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/how-to/[slug]/page.tsx +1 -14
- package/templates/apps/web/app/[locale]/integrations/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/partners/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/products/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/projects/[slug]/page.tsx +1 -15
- package/templates/apps/web/app/[locale]/resources/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/services/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/tech-articles/[slug]/page.tsx +1 -14
- package/templates/apps/web/app/[locale]/thanks/[slug]/page.tsx +4 -16
- package/templates/apps/web/app/[locale]/vs/[slug]/__tests__/page.test.tsx +3 -15
- package/templates/apps/web/app/[locale]/vs/[slug]/page.tsx +0 -10
- package/templates/apps/web/app/[locale]/whitepapers/[slug]/page.tsx +1 -14
- package/templates/apps/web/src/lib/commerce-claim.ts +15 -6
- package/templates/content/_site.mdx +23 -4
- package/templates/database/CHANGELOG.md +7 -0
- package/templates/database/package.json +1 -1
- package/versions.json +34 -34
- package/templates/.claude/skills/README.md +0 -37
- package/templates/.claude/skills/add-auth/SKILL.md +0 -313
- package/templates/.claude/skills/add-auth/references/env-vars.md +0 -106
- package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +0 -180
- package/templates/.claude/skills/add-page/SKILL.md +0 -260
- package/templates/.claude/skills/add-page/references/page-types.md +0 -123
- package/templates/.claude/skills/add-page/scripts/site-pages.mjs +0 -87
- package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +0 -99
- package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +0 -18
- package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +0 -43
- package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +0 -52
- package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +0 -38
- package/templates/.claude/skills/check-site/SKILL.md +0 -245
- package/templates/.claude/skills/check-site/references/common-errors.md +0 -116
- package/templates/.claude/skills/check-site/references/findings-glossary.md +0 -140
- package/templates/.claude/skills/check-site/references/severity-levels.md +0 -114
- package/templates/.claude/skills/fill-page/SKILL.md +0 -199
- package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +0 -80
- package/templates/.claude/skills/fill-page/references/section-sources.md +0 -41
- package/templates/.claude/skills/setup-database/SKILL.md +0 -156
- package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +0 -154
- package/templates/.claude/skills/setup-deploy/SKILL.md +0 -312
- package/templates/.claude/skills/setup-deploy/references/runbook-template.md +0 -204
- package/templates/.claude/skills/setup-deploy/references/vercel-json-template.md +0 -98
- package/templates/.claude/skills/update-page/SKILL.md +0 -117
- package/templates/.claude/skills/update-page/scripts/update-page.ts +0 -640
- package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +0 -31
- package/templates/.claude/skills/upgrade-plan/SKILL.md +0 -121
- package/templates/.claude/skills/upgrade-plan/references/options.md +0 -24
- package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +0 -527
- package/templates/apps/mcp/__tests__/lib/require-paid-tier.test.ts +0 -75
- package/templates/apps/mcp/src/lib/require-paid-tier.ts +0 -44
|
@@ -11,29 +11,29 @@ schema:
|
|
|
11
11
|
name: "Your Company"
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
# {Second job}
|
|
14
|
+
# \{Second job}
|
|
15
15
|
|
|
16
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
17
17
|
three sentences, no more — the detail belongs under the headings below.}
|
|
18
18
|
|
|
19
19
|
## What it covers
|
|
20
20
|
|
|
21
|
-
- {The first thing you actually do}
|
|
22
|
-
- {The second thing you actually do}
|
|
23
|
-
- {The third thing you actually do}
|
|
21
|
+
- \{The first thing you actually do}
|
|
22
|
+
- \{The second thing you actually do}
|
|
23
|
+
- \{The third thing you actually do}
|
|
24
24
|
|
|
25
25
|
## How it runs
|
|
26
26
|
|
|
27
|
-
{One paragraph on the shape of the visit: how it is scheduled, how long it
|
|
27
|
+
\{One paragraph on the shape of the visit: how it is scheduled, how long it
|
|
28
28
|
takes, who turns up, and what you need from the customer beforehand.}
|
|
29
29
|
|
|
30
30
|
## What you end up with
|
|
31
31
|
|
|
32
|
-
{One paragraph on the result. Be concrete — describe the property when the
|
|
32
|
+
\{One paragraph on the result. Be concrete — describe the property when the
|
|
33
33
|
crew drives away.}
|
|
34
34
|
|
|
35
35
|
## What it costs
|
|
36
36
|
|
|
37
|
-
{One line on the pricing shape — flat rate, hourly, or by the job — and what it
|
|
37
|
+
\{One line on the pricing shape — flat rate, hourly, or by the job — and what it
|
|
38
38
|
excludes. Replace with your real numbers, or delete this section and let a
|
|
39
39
|
call do it.}
|
|
@@ -11,29 +11,29 @@ schema:
|
|
|
11
11
|
name: "Your Company"
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
# {Third job}
|
|
14
|
+
# \{Third job}
|
|
15
15
|
|
|
16
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
17
17
|
three sentences, no more — the detail belongs under the headings below.}
|
|
18
18
|
|
|
19
19
|
## What it covers
|
|
20
20
|
|
|
21
|
-
- {The first thing you actually do}
|
|
22
|
-
- {The second thing you actually do}
|
|
23
|
-
- {The third thing you actually do}
|
|
21
|
+
- \{The first thing you actually do}
|
|
22
|
+
- \{The second thing you actually do}
|
|
23
|
+
- \{The third thing you actually do}
|
|
24
24
|
|
|
25
25
|
## How it runs
|
|
26
26
|
|
|
27
|
-
{One paragraph on the shape of the visit: how it is scheduled, how long it
|
|
27
|
+
\{One paragraph on the shape of the visit: how it is scheduled, how long it
|
|
28
28
|
takes, who turns up, and what you need from the customer beforehand.}
|
|
29
29
|
|
|
30
30
|
## What you end up with
|
|
31
31
|
|
|
32
|
-
{One paragraph on the result. Be concrete — describe the property when the
|
|
32
|
+
\{One paragraph on the result. Be concrete — describe the property when the
|
|
33
33
|
crew drives away.}
|
|
34
34
|
|
|
35
35
|
## What it costs
|
|
36
36
|
|
|
37
|
-
{One line on the pricing shape — flat rate, hourly, or by the job — and what it
|
|
37
|
+
\{One line on the pricing shape — flat rate, hourly, or by the job — and what it
|
|
38
38
|
excludes. Replace with your real numbers, or delete this section and let a
|
|
39
39
|
call do it.}
|
|
@@ -10,29 +10,29 @@ schema:
|
|
|
10
10
|
name: "Your Company"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# {First engagement}
|
|
13
|
+
# \{First engagement}
|
|
14
14
|
|
|
15
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
15
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
16
|
three sentences, no more — the detail belongs under the headings below.}
|
|
17
17
|
|
|
18
18
|
## What it covers
|
|
19
19
|
|
|
20
|
-
- {The first thing you actually do}
|
|
21
|
-
- {The second thing you actually do}
|
|
22
|
-
- {The third thing you actually do}
|
|
20
|
+
- \{The first thing you actually do}
|
|
21
|
+
- \{The second thing you actually do}
|
|
22
|
+
- \{The third thing you actually do}
|
|
23
23
|
|
|
24
24
|
## How it runs
|
|
25
25
|
|
|
26
|
-
{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
26
|
+
\{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
27
27
|
who is involved on both sides, and what a week looks like.}
|
|
28
28
|
|
|
29
29
|
## What you end up with
|
|
30
30
|
|
|
31
|
-
{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
31
|
+
\{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
32
32
|
feeling.}
|
|
33
33
|
|
|
34
34
|
## What it costs
|
|
35
35
|
|
|
36
|
-
{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
36
|
+
\{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
37
37
|
excludes. Replace with your real numbers, or delete this section and let the
|
|
38
38
|
call do it.}
|
|
@@ -10,29 +10,29 @@ schema:
|
|
|
10
10
|
name: "Your Company"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# {Second engagement}
|
|
13
|
+
# \{Second engagement}
|
|
14
14
|
|
|
15
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
15
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
16
|
three sentences, no more — the detail belongs under the headings below.}
|
|
17
17
|
|
|
18
18
|
## What it covers
|
|
19
19
|
|
|
20
|
-
- {The first thing you actually do}
|
|
21
|
-
- {The second thing you actually do}
|
|
22
|
-
- {The third thing you actually do}
|
|
20
|
+
- \{The first thing you actually do}
|
|
21
|
+
- \{The second thing you actually do}
|
|
22
|
+
- \{The third thing you actually do}
|
|
23
23
|
|
|
24
24
|
## How it runs
|
|
25
25
|
|
|
26
|
-
{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
26
|
+
\{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
27
27
|
who is involved on both sides, and what a week looks like.}
|
|
28
28
|
|
|
29
29
|
## What you end up with
|
|
30
30
|
|
|
31
|
-
{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
31
|
+
\{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
32
32
|
feeling.}
|
|
33
33
|
|
|
34
34
|
## What it costs
|
|
35
35
|
|
|
36
|
-
{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
36
|
+
\{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
37
37
|
excludes. Replace with your real numbers, or delete this section and let the
|
|
38
38
|
call do it.}
|
|
@@ -10,29 +10,29 @@ schema:
|
|
|
10
10
|
name: "Your Company"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# {Third engagement}
|
|
13
|
+
# \{Third engagement}
|
|
14
14
|
|
|
15
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
15
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
16
|
three sentences, no more — the detail belongs under the headings below.}
|
|
17
17
|
|
|
18
18
|
## What it covers
|
|
19
19
|
|
|
20
|
-
- {The first thing you actually do}
|
|
21
|
-
- {The second thing you actually do}
|
|
22
|
-
- {The third thing you actually do}
|
|
20
|
+
- \{The first thing you actually do}
|
|
21
|
+
- \{The second thing you actually do}
|
|
22
|
+
- \{The third thing you actually do}
|
|
23
23
|
|
|
24
24
|
## How it runs
|
|
25
25
|
|
|
26
|
-
{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
26
|
+
\{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
27
27
|
who is involved on both sides, and what a week looks like.}
|
|
28
28
|
|
|
29
29
|
## What you end up with
|
|
30
30
|
|
|
31
|
-
{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
31
|
+
\{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
32
32
|
feeling.}
|
|
33
33
|
|
|
34
34
|
## What it costs
|
|
35
35
|
|
|
36
|
-
{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
36
|
+
\{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
37
37
|
excludes. Replace with your real numbers, or delete this section and let the
|
|
38
38
|
call do it.}
|
|
@@ -10,29 +10,29 @@ schema:
|
|
|
10
10
|
name: "Your Name"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# {First engagement}
|
|
13
|
+
# \{First engagement}
|
|
14
14
|
|
|
15
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
15
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
16
|
three sentences, no more — the detail belongs under the headings below.}
|
|
17
17
|
|
|
18
18
|
## What it covers
|
|
19
19
|
|
|
20
|
-
- {The first thing you actually do}
|
|
21
|
-
- {The second thing you actually do}
|
|
22
|
-
- {The third thing you actually do}
|
|
20
|
+
- \{The first thing you actually do}
|
|
21
|
+
- \{The second thing you actually do}
|
|
22
|
+
- \{The third thing you actually do}
|
|
23
23
|
|
|
24
24
|
## How it runs
|
|
25
25
|
|
|
26
|
-
{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
26
|
+
\{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
27
27
|
who is involved, and what a week looks like.}
|
|
28
28
|
|
|
29
29
|
## What you end up with
|
|
30
30
|
|
|
31
|
-
{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
31
|
+
\{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
32
32
|
feeling.}
|
|
33
33
|
|
|
34
34
|
## What it costs
|
|
35
35
|
|
|
36
|
-
{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
36
|
+
\{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
37
37
|
excludes. Replace with your real numbers, or delete this section and let the
|
|
38
38
|
call do it.}
|
|
@@ -10,29 +10,29 @@ schema:
|
|
|
10
10
|
name: "Your Name"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# {Second engagement}
|
|
13
|
+
# \{Second engagement}
|
|
14
14
|
|
|
15
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
15
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
16
|
three sentences, no more — the detail belongs under the headings below.}
|
|
17
17
|
|
|
18
18
|
## What it covers
|
|
19
19
|
|
|
20
|
-
- {The first thing you actually do}
|
|
21
|
-
- {The second thing you actually do}
|
|
22
|
-
- {The third thing you actually do}
|
|
20
|
+
- \{The first thing you actually do}
|
|
21
|
+
- \{The second thing you actually do}
|
|
22
|
+
- \{The third thing you actually do}
|
|
23
23
|
|
|
24
24
|
## How it runs
|
|
25
25
|
|
|
26
|
-
{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
26
|
+
\{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
27
27
|
who is involved, and what a week looks like.}
|
|
28
28
|
|
|
29
29
|
## What you end up with
|
|
30
30
|
|
|
31
|
-
{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
31
|
+
\{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
32
32
|
feeling.}
|
|
33
33
|
|
|
34
34
|
## What it costs
|
|
35
35
|
|
|
36
|
-
{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
36
|
+
\{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
37
37
|
excludes. Replace with your real numbers, or delete this section and let the
|
|
38
38
|
call do it.}
|
|
@@ -10,29 +10,29 @@ schema:
|
|
|
10
10
|
name: "Your Name"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
# {Third engagement}
|
|
13
|
+
# \{Third engagement}
|
|
14
14
|
|
|
15
|
-
{Open with the situation a reader is in when they come looking for this. Two or
|
|
15
|
+
\{Open with the situation a reader is in when they come looking for this. Two or
|
|
16
16
|
three sentences, no more — the detail belongs under the headings below.}
|
|
17
17
|
|
|
18
18
|
## What it covers
|
|
19
19
|
|
|
20
|
-
- {The first thing you actually do}
|
|
21
|
-
- {The second thing you actually do}
|
|
22
|
-
- {The third thing you actually do}
|
|
20
|
+
- \{The first thing you actually do}
|
|
21
|
+
- \{The second thing you actually do}
|
|
22
|
+
- \{The third thing you actually do}
|
|
23
23
|
|
|
24
24
|
## How it runs
|
|
25
25
|
|
|
26
|
-
{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
26
|
+
\{One paragraph on the shape of the engagement: how it starts, how long it runs,
|
|
27
27
|
who is involved, and what a week looks like.}
|
|
28
28
|
|
|
29
29
|
## What you end up with
|
|
30
30
|
|
|
31
|
-
{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
31
|
+
\{One paragraph on the deliverable. Be concrete — name the artefact, not the
|
|
32
32
|
feeling.}
|
|
33
33
|
|
|
34
34
|
## What it costs
|
|
35
35
|
|
|
36
|
-
{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
36
|
+
\{One line on the pricing shape — fixed fee, retainer, day rate — and what it
|
|
37
37
|
excludes. Replace with your real numbers, or delete this section and let the
|
|
38
38
|
call do it.}
|
|
@@ -11,5 +11,17 @@
|
|
|
11
11
|
]
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
|
+
},
|
|
15
|
+
"extraKnownMarketplaces": {
|
|
16
|
+
"working-theory": {
|
|
17
|
+
"source": {
|
|
18
|
+
"source": "github",
|
|
19
|
+
"repo": "working-theory-labs/claude-plugins"
|
|
20
|
+
},
|
|
21
|
+
"autoUpdate": true
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"enabledPlugins": {
|
|
25
|
+
"ailk@working-theory": true
|
|
14
26
|
}
|
|
15
27
|
}
|
package/templates/.env.example
CHANGED
|
@@ -50,10 +50,6 @@ CONTENT_ADAPTER=mdx
|
|
|
50
50
|
# Developers → Webhooks → <your endpoint> → Signing secret.
|
|
51
51
|
# Format: whsec_*. Server-only — must NOT be prefixed with NEXT_PUBLIC_.
|
|
52
52
|
# STRIPE_WEBHOOK_SECRET=
|
|
53
|
-
# Internal URL of the billing service — used by marketing-api's webhook
|
|
54
|
-
# proxy (POST /v1/webhooks/stripe) to forward verified deliveries. Format:
|
|
55
|
-
# https://<vercel-deployment>.vercel.app (no trailing slash, no path).
|
|
56
|
-
# BILLING_SERVICE_URL=
|
|
57
53
|
|
|
58
54
|
# ── Auth (Better Auth — apps/web only) ───────────────────────────────────────
|
|
59
55
|
# BETTER_AUTH_URL=http://localhost:3000
|
|
@@ -314,7 +310,7 @@ CONTENT_ADAPTER=mdx
|
|
|
314
310
|
# AILK_LICENSE_KEY=
|
|
315
311
|
# Override the daily refresh upstream (self-hosters point at their own server
|
|
316
312
|
# implementing the @working-theory/validation refresh contract).
|
|
317
|
-
# Default: https://ailaunchkit.ai/
|
|
313
|
+
# Default: https://api.ailaunchkit.ai/v1/licenses/refresh
|
|
318
314
|
# AILK_LICENSE_REFRESH_URL=
|
|
319
315
|
# Self-host override — replaces the bundled public key with a PEM-encoded one.
|
|
320
316
|
# Only set this if you operate your own license-signing infrastructure.
|
package/templates/CLAUDE.md
CHANGED
|
@@ -21,7 +21,7 @@ apps/api/ Fastify HTTP API — lead capture, checkout, webhooks
|
|
|
21
21
|
apps/mcp/ MCP server — agent-callable tools
|
|
22
22
|
database/ Prisma schema + migrations
|
|
23
23
|
content/ Site settings (_site.mdx) and MDX pages (en/<TypeName>/)
|
|
24
|
-
.claude/ Rules,
|
|
24
|
+
.claude/ Rules, the agent definition and settings for Claude Code
|
|
25
25
|
tools/ This repo's own checks (architecture, CLAUDE.md drift)
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -67,7 +67,7 @@ your module set; `pnpm architecture` enforces it, and a hook in
|
|
|
67
67
|
| Diff hygiene when editing existing files | `.claude/rules/preserve-existing-style.md` |
|
|
68
68
|
| Code style, testing, security | `CONVENTIONS.md` |
|
|
69
69
|
| Environment variables and what they unlock | `.env.example` |
|
|
70
|
-
| Deploy configuration | `apps/api/vercel.json`; the
|
|
70
|
+
| Deploy configuration | `apps/api/vercel.json`; the `/ailk:setup-deploy` skill |
|
|
71
71
|
| Verification before push | `pnpm preflight` (see § Checks) |
|
|
72
72
|
|
|
73
73
|
<!-- /ailk:template id="resource-map" -->
|
|
@@ -76,18 +76,34 @@ your module set; `pnpm architecture` enforces it, and a hook in
|
|
|
76
76
|
|
|
77
77
|
## Skills
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
The AI Launch Kit skills come from the `ailk` Claude Code plugin, not from
|
|
80
|
+
this repo. `.claude/settings.json` names its marketplace and enables it, so
|
|
81
|
+
Claude Code loads it once you trust this folder. To install it by hand, run
|
|
82
|
+
these two lines in a Claude Code session:
|
|
80
83
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
84
|
+
```
|
|
85
|
+
/plugin marketplace add working-theory-labs/claude-plugins
|
|
86
|
+
/plugin install ailk@working-theory
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
| Skill | Use when |
|
|
90
|
+
| ---------------------- | ----------------------------------------------------------------- |
|
|
91
|
+
| `/ailk:add-page` | You need a new page, or extra JSON-LD on an existing one |
|
|
92
|
+
| `/ailk:update-page` | A page should live at a different URL, or needs a new title |
|
|
93
|
+
| `/ailk:fill-page` | A page still carries `{placeholder}` copy |
|
|
94
|
+
| `/ailk:check-site` | You want the site's citation-readiness score and findings |
|
|
95
|
+
| `/ailk:setup-database` | Leads should land in a database inbox at `/leads` |
|
|
96
|
+
| `/ailk:setup-deploy` | You are ready to deploy to Vercel |
|
|
97
|
+
| `/ailk:add-auth` | Visitors need to sign in (email, Google, GitHub) |
|
|
98
|
+
| `/ailk:upgrade-plan` | You are weighing Free against a paid level or the commerce add-on |
|
|
99
|
+
|
|
100
|
+
A repo scaffolded by an earlier create-ailk also carries its own older
|
|
101
|
+
copies of these skills. Once the plugin is installed, delete those copies;
|
|
102
|
+
keep scaffold-commerce, which the commerce module delivers.
|
|
103
|
+
|
|
104
|
+
For design work, the third-party impeccable plugin is optional:
|
|
105
|
+
`/plugin marketplace add pbakaus/impeccable`, then
|
|
106
|
+
`/plugin install impeccable@impeccable`.
|
|
91
107
|
|
|
92
108
|
<!-- /ailk:template id="skills" -->
|
|
93
109
|
|
|
@@ -95,15 +111,15 @@ In `.claude/skills/`; Claude Code finds them at session start.
|
|
|
95
111
|
|
|
96
112
|
## Checks
|
|
97
113
|
|
|
98
|
-
| Command
|
|
99
|
-
|
|
|
100
|
-
| `pnpm preflight`
|
|
101
|
-
| `pnpm architecture`
|
|
102
|
-
| `pnpm claude-md:check`
|
|
103
|
-
| `pnpm type-check`
|
|
104
|
-
| `pnpm lint`
|
|
105
|
-
| `pnpm test`
|
|
106
|
-
|
|
|
114
|
+
| Command | Catches |
|
|
115
|
+
| ------------------------ | -------------------------------------------------------- |
|
|
116
|
+
| `pnpm preflight` | The next four and `build`, not `test`. Run before a push |
|
|
117
|
+
| `pnpm architecture` | An import that crosses a boundary in `architecture.yaml` |
|
|
118
|
+
| `pnpm claude-md:check` | A hand-edit inside a template-owned section of this file |
|
|
119
|
+
| `pnpm type-check` | Type errors in every workspace |
|
|
120
|
+
| `pnpm lint` | Lint errors in every workspace |
|
|
121
|
+
| `pnpm test` | Failing unit tests |
|
|
122
|
+
| `/ailk:check-site` skill | Missing or invalid JSON-LD, weak citation-readiness |
|
|
107
123
|
|
|
108
124
|
<!-- /ailk:template id="checks" -->
|
|
109
125
|
|
package/templates/README.md
CHANGED
|
@@ -73,7 +73,7 @@ A page marked `--shape organization-product` is in your site when you scaffolded
|
|
|
73
73
|
|
|
74
74
|
To customize the home page, edit [`content/en/HomePage/home.mdx`](./content/en/HomePage/home.mdx). Save and reload the dev server. No build step.
|
|
75
75
|
|
|
76
|
-
To add a new page, ask Claude Code to run the
|
|
76
|
+
To add a new page, ask Claude Code to run the `/ailk:add-page` skill — it writes the page's content file and nav link in one confirm-before-write pass, and adds a missing route with `create-ailk add-route` first. See [Skills](#skills).
|
|
77
77
|
|
|
78
78
|
> `content/_site.mdx` stays at the top level (not under `content/en/`) — site identity is locale-blind.
|
|
79
79
|
|
|
@@ -200,20 +200,20 @@ Change the ranges by hand. Below 1.0 a caret range (`^0.26.0`) never crosses a m
|
|
|
200
200
|
|
|
201
201
|
## Skills
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
The AI Launch Kit skills come from the `ailk` Claude Code plugin; `.claude/settings.json` names it, and CLAUDE.md § Skills has the two install lines.
|
|
204
204
|
|
|
205
205
|
<!-- generated:begin skills -->
|
|
206
206
|
|
|
207
|
-
| Skill
|
|
208
|
-
|
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
|
207
|
+
| Skill | What it does |
|
|
208
|
+
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
209
|
+
| `/ailk:add-auth` | Activate the site's sign-in providers (email-and-password, Google OAuth, GitHub OAuth) and write the env vars for the ones you pick. |
|
|
210
|
+
| `/ailk:add-page` | Add a new page — its content file, its structured data and its nav link — in one confirm-before-write pass. |
|
|
211
|
+
| `/ailk:check-site` | Run `ailk-audit` on the site and explain the score and findings in plain language. It never edits files. |
|
|
212
|
+
| `/ailk:fill-page` | Fill one existing page's section content from a category profile: labelled sample content, or your own first draft from a short intake. |
|
|
213
|
+
| `/ailk:setup-database` | Take the site from no database to a working lead inbox, and prove it with one test message that must appear in the inbox. |
|
|
214
|
+
| `/ailk:setup-deploy` | Emit deploy configuration — `vercel.json` and `RUNBOOK.md`, plus an env checklist read from the site's own `.env.example`. |
|
|
215
|
+
| `/ailk:update-page` | Rename a page — its URL, its title, or both — in one plan-then-confirm pass, with a permanent redirect from the old URL. |
|
|
216
|
+
| `/ailk:upgrade-plan` | Explain the AI Launch Kit options side by side, recommend one option for this site, and link the public pricing page for prices. |
|
|
217
217
|
|
|
218
218
|
<!-- generated:end -->
|
|
219
219
|
|
|
@@ -64,6 +64,7 @@ module.exports = {
|
|
|
64
64
|
'^@working-theory/schema-pack-registry$': '<rootDir>/../../packages/schema-pack-registry/src/index.ts',
|
|
65
65
|
'^@working-theory/schema-validator$': '<rootDir>/../../packages/schema-validator/src/index.ts',
|
|
66
66
|
'^@working-theory/stripe-client$': '<rootDir>/../../packages/stripe-client/src/index.ts',
|
|
67
|
+
'^@working-theory/metadata$': '<rootDir>/../../packages/metadata/src/index.ts',
|
|
67
68
|
'^@working-theory/validation$': '<rootDir>/../../packages/validation/src/index.ts',
|
|
68
69
|
'^(\\.{1,2}/.*)\\.js$': '$1',
|
|
69
70
|
},
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@working-theory/stripe-client": "workspace:*",
|
|
50
50
|
"@working-theory/validation": "workspace:*",
|
|
51
51
|
"dotenv": "^17.4.2",
|
|
52
|
-
"fastify": "^5.12.
|
|
52
|
+
"fastify": "^5.12.5",
|
|
53
53
|
"pdf-lib": "^1.17.1",
|
|
54
54
|
"pg": "^8.22.0",
|
|
55
55
|
"yaml": "^2.9.0",
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"@types/node": "^22.20.0",
|
|
61
61
|
"@types/pg": "^8.20.0",
|
|
62
62
|
"@vercel/node": "^5.8.22",
|
|
63
|
+
"@working-theory/metadata": "workspace:*",
|
|
63
64
|
"jest": "^30.4.2",
|
|
64
65
|
"pdfjs-dist": "^6.3.289",
|
|
65
66
|
"prisma": "^7.8.0",
|
|
@@ -25,8 +25,8 @@ Every tool maps 1:1 to an `apps/api` endpoint. When you change a tool, change th
|
|
|
25
25
|
**Read (9):** `list_pages`, `read_content`, `search_content`, `get_site_info`, `get_business_hours`, `get_locations`, `get_offerings`, `get_pricing`, `get_faq`
|
|
26
26
|
**Conversion-write (3):** `capture_lead`, `subscribe_newsletter`, `request_callback`
|
|
27
27
|
**Maintenance (2):** `audit`, `create_project`
|
|
28
|
-
**Flow (2):** `get_flow`, `submit_flow_step` — module-gated (`module: "signal-collectors"`, D-48, #5366)
|
|
29
|
-
**Booking (3):** `list_availability`, `get_event_meta`, `create_booking` — module-gated (`module: "scheduling"`)
|
|
28
|
+
**Flow (2):** `get_flow`, `submit_flow_step` — module-gated (`module: "signal-collectors"`, D-48, #5366) and licence-feature-tagged (`feature: "flows-deliverables"`, #7136): identity-blind like every tool in this list, registered only when the signal-collectors module is present, and gated on the deployment's `flows-deliverables` licence feature under `MCP_FEATURE_GATE_MODE`, the same shape Booking below has
|
|
29
|
+
**Booking (3):** `list_availability`, `get_event_meta`, `create_booking` — module-gated (`module: "scheduling"`) and licence-feature-tagged (`feature: "scheduling"`, #7136), gated on the deployment's `scheduling` licence feature under `MCP_FEATURE_GATE_MODE`
|
|
30
30
|
|
|
31
31
|
### Why the parity test counts 20 and a keyless server registers 19
|
|
32
32
|
|
|
@@ -41,11 +41,21 @@ Every tool maps 1:1 to an `apps/api` endpoint. When you change a tool, change th
|
|
|
41
41
|
`addon: "commerce"`, so it is the one entry whose presence depends on the
|
|
42
42
|
licence — 19 without the claim, 20 with it.
|
|
43
43
|
- **19 free anonymous tools**: since #5853 retired the three content-write
|
|
44
|
-
tools,
|
|
45
|
-
|
|
44
|
+
tools, every registered tool remains anonymous — call-time gating checks a
|
|
45
|
+
licence claim, never an identity. The five carrying `tier: "pro"`
|
|
46
46
|
(`get_flow`, `submit_flow_step`, `list_availability`, `get_event_meta`,
|
|
47
|
-
`create_booking`) are
|
|
48
|
-
|
|
47
|
+
`create_booking`) are gated at REGISTRATION **and at call time** (#7315):
|
|
48
|
+
each needs its module, and each catalog row names the licence `feature:`
|
|
49
|
+
that entitles it. `start_purchase` is gated at call time by both this
|
|
50
|
+
server-wide gate and its own Gate 2 in `tools/purchase.ts`.
|
|
51
|
+
`MCP_FEATURE_GATE_MODE` (`packages/metadata`) decides what an unheld
|
|
52
|
+
feature does. In `"warn"` mode (this release) the five register on module
|
|
53
|
+
presence alone, and `index.ts` logs one boot warning (stderr) per tool
|
|
54
|
+
served without its feature. In `"refuse"` mode (the next release) they
|
|
55
|
+
also need the deployment's licence to hold the feature, and
|
|
56
|
+
`/.well-known/mcp.json` drops them in step. The claim is resolved at boot
|
|
57
|
+
and re-read every `MCP_CLAIM_REFRESH_MS` through `checkLicense()`
|
|
58
|
+
(`lib/commerce-claim.ts`) and fails closed.
|
|
49
59
|
`index.ts` is the transport entry point and exports no tools — registration
|
|
50
60
|
is entirely via `createMcpServer`.
|
|
51
61
|
|
|
@@ -69,7 +79,8 @@ Every tool maps 1:1 to an `apps/api` endpoint. When you change a tool, change th
|
|
|
69
79
|
`commerce` licence claim, per its `addon: "commerce"` catalog marker. A
|
|
70
80
|
keyless site advertises it in neither the discovery manifest nor the running
|
|
71
81
|
server's tool list, and calling it by name there returns the module-disabled
|
|
72
|
-
`not_found` body. The claim is resolved
|
|
82
|
+
`not_found` body. The claim is resolved at boot and re-read every
|
|
83
|
+
`MCP_CLAIM_REFRESH_MS`
|
|
73
84
|
(`src/lib/commerce-claim.ts`, awaited in `src/index.ts`) and read
|
|
74
85
|
synchronously by both the registration filter and the handler's own
|
|
75
86
|
re-check. Calls are rate-limited per IP by the AbuseGuard
|
|
@@ -111,14 +122,16 @@ Example (lead routing):
|
|
|
111
122
|
## What NOT to do
|
|
112
123
|
|
|
113
124
|
- Don't add identity arguments to OSS tools.
|
|
114
|
-
- Don't
|
|
125
|
+
- Don't add a paid tool without a `feature:` marker on its catalog row — registration and the manifest gate on the deployment's claim, never on a caller-supplied key or argument.
|
|
115
126
|
- Don't import `@working-theory/*` from `apps/mcp`.
|
|
116
127
|
- Don't add a tool without the matching `apps/api` endpoint.
|
|
117
128
|
- Don't put business logic in tool handlers — they're adapters.
|
|
118
129
|
|
|
119
|
-
Last updated: 2026-09-
|
|
130
|
+
Last updated: 2026-09-29 — #7136: the five `tier: "pro"` tools name their licence `feature:` (`scheduling`, `flows-deliverables`) and gate on the deployment's own claim under `MCP_FEATURE_GATE_MODE` — `"warn"` this release (served, one boot warning each), `"refuse"` the next. The unused call-time paid-tier guard is deleted.
|
|
120
131
|
|
|
121
|
-
Prior: 2026-
|
|
132
|
+
Prior: 2026-09-17 — #5971: `start_purchase` re-enabled behind the `commerce` licence claim. `OSS_DISABLED_TOOLS` is now empty; the registered count is 19 on a keyless deployment and 20 on a commerce-claimed one; the tool's input field is `productCode` (was `priceId`), matching its HTTP twin; a per-IP daily cap (`MCP_ABUSE_START_PURCHASE_DAILY_CAP`) covers it.
|
|
133
|
+
|
|
134
|
+
Prior: 2026-07-09 — corrected the tool-count explanation (18 catalog → 17 registered → 14 free anonymous) and the Pro-tool gating (registered + gated by the call-time paid-tier guard, not `OSS_DISABLED_TOOLS`-disabled).
|
|
122
135
|
|
|
123
136
|
Last updated: 2026-09-17 — doc-sync: tool counts "23 catalog → 22 registered → 19 free anonymous" → "20 in TOOLS → 19 registered → 19 free anonymous", and the Pro-tools section rewritten to record that `create_page`/`update_page`/`delete_page` were RETIRED by #5853 rather than disabled (D7) — derived from `packages/metadata/src/mcp-tool-catalog.ts` and verified against `apps/mcp/src/server.ts`.
|
|
124
137
|
|