create-ailk 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +10 -5
  2. package/dist/cli.js +17 -2
  3. package/dist/content-payloads.d.ts +37 -0
  4. package/dist/content-payloads.js +64 -0
  5. package/dist/lib/fetch-module.d.ts +3 -3
  6. package/dist/lib/fetch-module.js +11 -5
  7. package/dist/lib/fetch-template.d.ts +1 -1
  8. package/dist/lib/fetch-template.js +7 -4
  9. package/dist/lib/module-license-gate.d.ts +29 -23
  10. package/dist/lib/module-license-gate.js +98 -0
  11. package/dist/module-architecture.d.ts +9 -0
  12. package/dist/module-architecture.js +46 -14
  13. package/dist/parse-args.d.ts +2 -0
  14. package/dist/parse-args.js +7 -0
  15. package/dist/programmatic.js +12 -4
  16. package/dist/starter-grid.d.ts +4 -67
  17. package/dist/starter-grid.js +6 -84
  18. package/dist/surfaces.js +2 -3
  19. package/dist/template-manifest.d.ts +1 -1
  20. package/dist/template-manifest.js +5 -5
  21. package/package.json +6 -4
  22. package/release-scope.json +25 -0
  23. package/site-templates/designs/minimalism/sample/README.md +2 -2
  24. package/site-templates/designs/minimalism/sample/content/en/HomePage/home.mdx +1 -1
  25. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +4 -3
  26. package/templates/.claude/agents/web.md +10 -8
  27. package/templates/.claude/rules/architecture.md +10 -7
  28. package/templates/.claude/settings.json +12 -0
  29. package/templates/.env.example +24 -3
  30. package/templates/CLAUDE.md +38 -22
  31. package/templates/README.md +12 -12
  32. package/templates/apps/api/jest.config.cjs +1 -0
  33. package/templates/apps/api/package.json +1 -0
  34. package/templates/apps/mcp/CLAUDE.md +23 -10
  35. package/templates/apps/mcp/__tests__/catalog-drift.test.ts +160 -17
  36. package/templates/apps/mcp/__tests__/index.test.ts +118 -1
  37. package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +425 -5
  38. package/templates/apps/mcp/__tests__/module-exclusion.test.ts +67 -3
  39. package/templates/apps/mcp/__tests__/server.test.ts +162 -1
  40. package/templates/apps/mcp/src/index.ts +35 -3
  41. package/templates/apps/mcp/src/lib/commerce-claim.ts +193 -24
  42. package/templates/apps/mcp/src/server.ts +77 -5
  43. package/templates/apps/mcp/src/tools/purchase.ts +1 -1
  44. package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +15 -0
  45. package/templates/apps/web/app/.well-known/mcp.json/route.ts +10 -3
  46. package/templates/apps/web/src/lib/commerce-claim.ts +15 -6
  47. package/templates/content/_site.mdx +23 -4
  48. package/templates/database/CHANGELOG.md +7 -0
  49. package/templates/database/package.json +1 -1
  50. package/templates/package.json +2 -0
  51. package/versions.json +34 -33
  52. package/dist/modules/commerce/0.6.0.tar.gz +0 -0
  53. package/dist/modules/commerce/0.6.1.tar.gz +0 -0
  54. package/dist/modules/docs-blog/0.6.0.tar.gz +0 -0
  55. package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
  56. package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
  57. package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
  58. package/dist/modules/multi-tenant/0.6.0.tar.gz +0 -0
  59. package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
  60. package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
  61. package/dist/modules/scheduling/0.6.0.tar.gz +0 -0
  62. package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
  63. package/dist/modules/signal-collectors/0.6.0.tar.gz +0 -0
  64. package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
  65. package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
  66. package/dist/modules/workspace/0.6.0.tar.gz +0 -0
  67. package/dist/modules/workspace/0.6.1.tar.gz +0 -0
  68. package/site-templates/aliases/minimalism-site.TEMPLATE-MANIFEST.json +0 -538
  69. package/templates/.claude/skills/README.md +0 -37
  70. package/templates/.claude/skills/add-auth/SKILL.md +0 -261
  71. package/templates/.claude/skills/add-auth/references/env-vars.md +0 -98
  72. package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +0 -172
  73. package/templates/.claude/skills/add-page/SKILL.md +0 -260
  74. package/templates/.claude/skills/add-page/references/page-types.md +0 -124
  75. package/templates/.claude/skills/add-page/scripts/site-pages.mjs +0 -87
  76. package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +0 -99
  77. package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +0 -18
  78. package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +0 -43
  79. package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +0 -52
  80. package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +0 -38
  81. package/templates/.claude/skills/check-site/SKILL.md +0 -235
  82. package/templates/.claude/skills/check-site/references/common-errors.md +0 -113
  83. package/templates/.claude/skills/check-site/references/findings-glossary.md +0 -140
  84. package/templates/.claude/skills/check-site/references/severity-levels.md +0 -114
  85. package/templates/.claude/skills/fill-page/SKILL.md +0 -199
  86. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +0 -80
  87. package/templates/.claude/skills/fill-page/references/section-sources.md +0 -41
  88. package/templates/.claude/skills/setup-database/SKILL.md +0 -156
  89. package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +0 -154
  90. package/templates/.claude/skills/setup-deploy/SKILL.md +0 -275
  91. package/templates/.claude/skills/setup-deploy/references/env-vars-template.md +0 -192
  92. package/templates/.claude/skills/setup-deploy/references/runbook-template.md +0 -204
  93. package/templates/.claude/skills/setup-deploy/references/vercel-json-template.md +0 -98
  94. package/templates/.claude/skills/update-page/SKILL.md +0 -117
  95. package/templates/.claude/skills/update-page/scripts/update-page.ts +0 -640
  96. package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +0 -31
  97. package/templates/.claude/skills/upgrade-plan/SKILL.md +0 -121
  98. package/templates/.claude/skills/upgrade-plan/references/options.md +0 -24
  99. package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +0 -527
  100. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-31.552Z-fallback-1789916251590-037e9005.json +0 -8
  101. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.840Z-fallback-1789916253842-b52659e9.json +0 -12
  102. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.844Z-fallback-1789916253845-6b266f8c.json +0 -12
  103. package/templates/apps/mcp/__tests__/lib/require-paid-tier.test.ts +0 -75
  104. package/templates/apps/mcp/src/lib/require-paid-tier.ts +0 -44
@@ -1,12 +0,0 @@
1
- {
2
- "id": "fallback-1789916253842-b52659e9",
3
- "siteId": "wksp_00000000-0000-7000-8000-000000000001",
4
- "source": "flow:get-a-quote",
5
- "email": "abandoner@example.com",
6
- "payload": {
7
- "email": "abandoner@example.com",
8
- "flowSlug": "get-a-quote",
9
- "locale": "en"
10
- },
11
- "createdAt": "2026-09-20T14:57:33.840Z"
12
- }
@@ -1,12 +0,0 @@
1
- {
2
- "id": "fallback-1789916253845-6b266f8c",
3
- "siteId": "default",
4
- "source": "flow:get-a-quote",
5
- "email": "abandoner@example.com",
6
- "payload": {
7
- "email": "abandoner@example.com",
8
- "flowSlug": "get-a-quote",
9
- "locale": "en"
10
- },
11
- "createdAt": "2026-09-20T14:57:33.844Z"
12
- }
@@ -1,75 +0,0 @@
1
- /**
2
- * Unit tests for the MCP-side require-paid-tier guard.
3
- *
4
- * Mocks @working-theory/license `checkLicense` and asserts:
5
- * - free tier → returns canonical payment_required body
6
- * - pro tier → returns null (caller proceeds)
7
- * - checkLicense throws → safe-by-default, returns payment_required
8
- */
9
-
10
- const mockCheckLicense = jest.fn();
11
-
12
- jest.mock("@working-theory/license", () => ({
13
- checkLicense: (...args: unknown[]) => mockCheckLicense(...args),
14
- }));
15
-
16
- import { requirePaidTier } from "../../src/lib/require-paid-tier.js";
17
-
18
- describe("requirePaidTier (mcp)", () => {
19
- beforeEach(() => {
20
- mockCheckLicense.mockReset();
21
- });
22
-
23
- it("free tier — returns canonical payment_required body", async () => {
24
- mockCheckLicense.mockResolvedValue({
25
- tier: "free",
26
- plan: null,
27
- features: [],
28
- expiresAt: null,
29
- revoked: false,
30
- });
31
-
32
- const guard = await requirePaidTier();
33
-
34
- expect(guard).toEqual({
35
- error: "payment_required",
36
- message: expect.stringContaining("paid license"),
37
- });
38
- });
39
-
40
- it("pro tier — returns null (caller proceeds)", async () => {
41
- mockCheckLicense.mockResolvedValue({
42
- tier: "pro",
43
- plan: "pro",
44
- features: [],
45
- expiresAt: null,
46
- revoked: false,
47
- });
48
-
49
- const guard = await requirePaidTier();
50
- expect(guard).toBeNull();
51
- });
52
-
53
- it("checkLicense throws — degrades to payment_required (safe default)", async () => {
54
- mockCheckLicense.mockRejectedValue(new Error("boom"));
55
-
56
- const guard = await requirePaidTier();
57
- expect(guard).toMatchObject({ error: "payment_required" });
58
- });
59
-
60
- it("revoked paid license — returns payment_required even though tier is pro (issue #398)", async () => {
61
- // After a 403/revoked refresh, checkLicense() returns tier:'pro' until
62
- // the existing JWT exp (up to 24h). The revoked flag is the early
63
- // signal — we must close the gate now, not wait for exp.
64
- mockCheckLicense.mockResolvedValue({
65
- tier: "pro",
66
- plan: "pro",
67
- features: [],
68
- expiresAt: null,
69
- revoked: true,
70
- });
71
-
72
- const guard = await requirePaidTier();
73
- expect(guard).toMatchObject({ error: "payment_required" });
74
- });
75
- });
@@ -1,44 +0,0 @@
1
- /**
2
- * Paid-tier license guard for apps/mcp content-write tools (D14a Stage 0).
3
- *
4
- * Calls `checkLicense()` from @working-theory/license and returns a canonical
5
- * `payment_required` error body for free tier; returns `null` to signal the
6
- * caller may proceed.
7
- *
8
- * Usage in a tool handler:
9
- *
10
- * const guard = await requirePaidTier();
11
- * if (guard) return guard; // free tier — return canonical error body
12
- * // paid tier — proceed
13
- *
14
- * Pattern intentionally returns the error body directly (vs. throwing) — MCP
15
- * tools surface errors as their result body, not via thrown exceptions.
16
- */
17
-
18
- import { checkLicense } from "@working-theory/license";
19
-
20
- import { paymentRequiredError, type ErrorBody } from "./errors.js";
21
-
22
- const FREE_TIER_MESSAGE =
23
- "This tool requires a paid license. Visit https://ailaunchkit.ai to upgrade.";
24
-
25
- export async function requirePaidTier(): Promise<ErrorBody | null> {
26
- let result;
27
- try {
28
- result = await checkLicense();
29
- } catch {
30
- // Per ADR 0014 — local-verify license; an exception is a bug, not a
31
- // network failure. Treat as free for safe-by-default gating.
32
- return paymentRequiredError(FREE_TIER_MESSAGE);
33
- }
34
-
35
- // Revoked paid licenses keep verifying until JWT exp (up to 24h after the
36
- // server reports `revoked`). Closing the gate when `revoked === true`
37
- // shrinks that window to "next request" without waiting for exp. See
38
- // packages/license/src/types.ts § LicenseResult and ADR 0014.
39
- if (result.revoked === true || result.tier === "free") {
40
- return paymentRequiredError(FREE_TIER_MESSAGE);
41
- }
42
-
43
- return null;
44
- }