bsmnt 0.2.9 → 0.2.11

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 (197) hide show
  1. package/README.md +84 -146
  2. package/dist/configs/skills.d.ts +27 -0
  3. package/dist/configs/skills.d.ts.map +1 -0
  4. package/dist/configs/skills.js +18 -0
  5. package/dist/configs/skills.js.map +1 -0
  6. package/dist/configs/skills.json +26 -0
  7. package/dist/helpers/add/hooks-config.d.ts.map +1 -1
  8. package/dist/helpers/add/hooks-config.js +0 -6
  9. package/dist/helpers/add/hooks-config.js.map +1 -1
  10. package/dist/helpers/create/setup-agent.d.ts.map +1 -1
  11. package/dist/helpers/create/setup-agent.js +15 -5
  12. package/dist/helpers/create/setup-agent.js.map +1 -1
  13. package/dist/helpers/integrate/merge-config.d.ts.map +1 -1
  14. package/dist/helpers/integrate/merge-config.js +1 -0
  15. package/dist/helpers/integrate/merge-config.js.map +1 -1
  16. package/dist/helpers/integrate/sanity/config.d.ts.map +1 -1
  17. package/dist/helpers/integrate/sanity/config.js +8 -2
  18. package/dist/helpers/integrate/sanity/config.js.map +1 -1
  19. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +1 -1
  20. package/dist/helpers/integrate/sanity/mergers/layout-merger.js +13 -12
  21. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +1 -1
  22. package/dist/helpers/skills/index.d.ts +10 -0
  23. package/dist/helpers/skills/index.d.ts.map +1 -0
  24. package/dist/helpers/skills/index.js +136 -0
  25. package/dist/helpers/skills/index.js.map +1 -0
  26. package/dist/index.js +18 -0
  27. package/dist/index.js.map +1 -1
  28. package/package.json +4 -3
  29. package/src/helpers/integrate/sanity/files/app/api/blog/[slug]/route.ts +2 -1
  30. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/confirm-publish-action.ts +31 -0
  31. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/sanity.config.ts +17 -0
  32. package/src/helpers/integrate/sanity/files/lib/utils/json-ld.tsx +249 -0
  33. package/src/template-hooks/config.js +0 -6
  34. package/src/templates/next-default/README.md +28 -199
  35. package/src/templates/next-default/app/layout.tsx +20 -3
  36. package/src/templates/next-default/biome.json +1 -14
  37. package/src/templates/next-default/components/layout/theme/index.tsx +2 -5
  38. package/src/templates/next-default/components/layout/wrapper/index.tsx +1 -2
  39. package/src/templates/next-default/components/ui/README.md +2 -3
  40. package/src/templates/next-default/components/ui/image/index.tsx +3 -3
  41. package/src/templates/next-default/lib/README.md +3 -3
  42. package/src/templates/next-default/lib/hooks/use-device-detection.ts +4 -3
  43. package/src/templates/next-default/lib/hooks/use-media-breakpoint.ts +11 -4
  44. package/src/templates/next-default/lib/hooks/use-media.ts +29 -0
  45. package/src/templates/next-default/lib/scripts/dev.ts +9 -29
  46. package/src/templates/next-default/lib/styles/README.md +7 -58
  47. package/src/templates/next-default/lib/styles/fonts.ts +7 -15
  48. package/src/templates/next-default/lib/styles/global.css +198 -0
  49. package/src/templates/next-default/lib/styles/index.css +3 -0
  50. package/src/templates/next-default/lib/styles/tokens.css +179 -0
  51. package/src/templates/next-default/lib/utils/global-css.d.ts +1 -0
  52. package/src/templates/next-default/lib/utils/json-ld.tsx +199 -0
  53. package/src/templates/next-default/lib/utils/viewport.ts +11 -5
  54. package/src/templates/next-default/next.config.ts +0 -1
  55. package/src/templates/next-default/package.json +11 -18
  56. package/src/templates/next-default/postcss.config.mjs +0 -14
  57. package/src/templates/next-default/tsconfig.json +1 -0
  58. package/src/templates/next-default/tsconfig.tsbuildinfo +1 -0
  59. package/src/templates/next-experiments/README.md +29 -200
  60. package/src/templates/next-experiments/app/layout.tsx +20 -3
  61. package/src/templates/next-experiments/app/page.tsx +46 -39
  62. package/src/templates/next-experiments/biome.json +1 -14
  63. package/src/templates/next-experiments/components/layout/theme/index.tsx +2 -5
  64. package/src/templates/next-experiments/components/layout/wrapper/index.tsx +1 -2
  65. package/src/templates/next-experiments/components/ui/README.md +2 -3
  66. package/src/templates/next-experiments/components/ui/image/index.tsx +3 -2
  67. package/src/templates/next-experiments/lib/README.md +3 -3
  68. package/src/templates/next-experiments/lib/hooks/use-device-detection.ts +4 -3
  69. package/src/templates/next-experiments/lib/hooks/use-media-breakpoint.ts +11 -4
  70. package/src/templates/next-experiments/lib/hooks/use-media.ts +29 -0
  71. package/src/templates/next-experiments/lib/scripts/dev.ts +9 -29
  72. package/src/templates/next-experiments/lib/styles/README.md +7 -58
  73. package/src/templates/next-experiments/lib/styles/fonts.ts +7 -15
  74. package/src/templates/next-experiments/lib/styles/global.css +198 -0
  75. package/src/templates/next-experiments/lib/styles/index.css +3 -0
  76. package/src/templates/next-experiments/lib/styles/tokens.css +179 -0
  77. package/src/templates/next-experiments/lib/utils/global-css.d.ts +1 -0
  78. package/src/templates/next-experiments/lib/utils/json-ld.tsx +199 -0
  79. package/src/templates/next-experiments/lib/utils/viewport.ts +11 -5
  80. package/src/templates/next-experiments/next.config.ts +0 -1
  81. package/src/templates/next-experiments/package.json +11 -22
  82. package/src/templates/next-experiments/postcss.config.mjs +0 -14
  83. package/src/templates/next-experiments/tsconfig.json +1 -0
  84. package/src/templates/next-experiments/tsconfig.tsbuildinfo +1 -0
  85. package/src/templates/next-webgl/README.md +30 -200
  86. package/src/templates/next-webgl/app/layout.tsx +20 -3
  87. package/src/templates/next-webgl/biome.json +1 -14
  88. package/src/templates/next-webgl/components/layout/theme/index.tsx +2 -5
  89. package/src/templates/next-webgl/components/layout/wrapper/index.tsx +1 -2
  90. package/src/templates/next-webgl/components/ui/README.md +2 -3
  91. package/src/templates/next-webgl/components/ui/image/index.tsx +3 -3
  92. package/src/templates/next-webgl/lib/README.md +3 -3
  93. package/src/templates/next-webgl/lib/hooks/use-device-detection.ts +4 -3
  94. package/src/templates/next-webgl/lib/hooks/use-media-breakpoint.ts +11 -4
  95. package/src/templates/next-webgl/lib/hooks/use-media.ts +29 -0
  96. package/src/templates/next-webgl/lib/scripts/dev.ts +9 -29
  97. package/src/templates/next-webgl/lib/styles/README.md +7 -58
  98. package/src/templates/next-webgl/lib/styles/fonts.ts +7 -15
  99. package/src/templates/next-webgl/lib/styles/global.css +198 -0
  100. package/src/templates/next-webgl/lib/styles/index.css +3 -0
  101. package/src/templates/next-webgl/lib/styles/tokens.css +179 -0
  102. package/src/templates/next-webgl/lib/utils/global-css.d.ts +1 -0
  103. package/src/templates/next-webgl/lib/utils/json-ld.tsx +199 -0
  104. package/src/templates/next-webgl/lib/utils/viewport.ts +11 -5
  105. package/src/templates/next-webgl/next.config.ts +0 -1
  106. package/src/templates/next-webgl/package.json +11 -20
  107. package/src/templates/next-webgl/postcss.config.mjs +0 -14
  108. package/src/templates/next-webgl/tsconfig.json +1 -0
  109. package/src/templates/next-webgl/tsconfig.tsbuildinfo +1 -0
  110. package/plugins/no-anchor-element.grit +0 -11
  111. package/plugins/no-relative-parent-imports.grit +0 -6
  112. package/plugins/no-unnecessary-forwardref.grit +0 -5
  113. package/src/template-hooks/use-media.ts +0 -33
  114. package/src/templates/next-default/components/ui/image/image.module.css +0 -5
  115. package/src/templates/next-default/lib/scripts/generate-component.ts +0 -322
  116. package/src/templates/next-default/lib/scripts/generate-page.ts +0 -193
  117. package/src/templates/next-default/lib/scripts/generate.ts +0 -79
  118. package/src/templates/next-default/lib/store/app.ts +0 -11
  119. package/src/templates/next-default/lib/store/index.ts +0 -11
  120. package/src/templates/next-default/lib/styles/colors.ts +0 -63
  121. package/src/templates/next-default/lib/styles/config.ts +0 -34
  122. package/src/templates/next-default/lib/styles/css/global.css +0 -85
  123. package/src/templates/next-default/lib/styles/css/index.css +0 -6
  124. package/src/templates/next-default/lib/styles/css/reset.css +0 -166
  125. package/src/templates/next-default/lib/styles/css/root.css +0 -68
  126. package/src/templates/next-default/lib/styles/css/tailwind.css +0 -132
  127. package/src/templates/next-default/lib/styles/easings.ts +0 -21
  128. package/src/templates/next-default/lib/styles/index.ts +0 -12
  129. package/src/templates/next-default/lib/styles/layout.mjs +0 -27
  130. package/src/templates/next-default/lib/styles/scripts/README.md +0 -29
  131. package/src/templates/next-default/lib/styles/scripts/generate-root.ts +0 -57
  132. package/src/templates/next-default/lib/styles/scripts/generate-tailwind.ts +0 -162
  133. package/src/templates/next-default/lib/styles/scripts/postcss-functions.mjs +0 -168
  134. package/src/templates/next-default/lib/styles/scripts/setup-styles.ts +0 -24
  135. package/src/templates/next-default/lib/styles/scripts/utils.ts +0 -20
  136. package/src/templates/next-default/lib/styles/typography.ts +0 -36
  137. package/src/templates/next-default/lib/utils/css.d.ts +0 -21
  138. package/src/templates/next-default/lib/utils/math.test.ts +0 -221
  139. package/src/templates/next-default/lib/utils/strings.test.ts +0 -166
  140. package/src/templates/next-default/lib/utils/viewport.test.ts +0 -256
  141. package/src/templates/next-default/public/fonts/geist/Geist-Mono.woff2 +0 -0
  142. package/src/templates/next-experiments/components/ui/image/image.module.css +0 -5
  143. package/src/templates/next-experiments/lib/scripts/generate-component.ts +0 -322
  144. package/src/templates/next-experiments/lib/scripts/generate-page.ts +0 -193
  145. package/src/templates/next-experiments/lib/scripts/generate.ts +0 -79
  146. package/src/templates/next-experiments/lib/store/app.ts +0 -11
  147. package/src/templates/next-experiments/lib/store/index.ts +0 -11
  148. package/src/templates/next-experiments/lib/styles/colors.ts +0 -63
  149. package/src/templates/next-experiments/lib/styles/config.ts +0 -34
  150. package/src/templates/next-experiments/lib/styles/css/global.css +0 -85
  151. package/src/templates/next-experiments/lib/styles/css/index.css +0 -6
  152. package/src/templates/next-experiments/lib/styles/css/reset.css +0 -166
  153. package/src/templates/next-experiments/lib/styles/css/root.css +0 -68
  154. package/src/templates/next-experiments/lib/styles/css/tailwind.css +0 -132
  155. package/src/templates/next-experiments/lib/styles/easings.ts +0 -21
  156. package/src/templates/next-experiments/lib/styles/index.ts +0 -12
  157. package/src/templates/next-experiments/lib/styles/layout.mjs +0 -27
  158. package/src/templates/next-experiments/lib/styles/scripts/README.md +0 -29
  159. package/src/templates/next-experiments/lib/styles/scripts/generate-root.ts +0 -57
  160. package/src/templates/next-experiments/lib/styles/scripts/generate-tailwind.ts +0 -162
  161. package/src/templates/next-experiments/lib/styles/scripts/postcss-functions.mjs +0 -168
  162. package/src/templates/next-experiments/lib/styles/scripts/setup-styles.ts +0 -24
  163. package/src/templates/next-experiments/lib/styles/scripts/utils.ts +0 -20
  164. package/src/templates/next-experiments/lib/styles/typography.ts +0 -36
  165. package/src/templates/next-experiments/lib/utils/css.d.ts +0 -21
  166. package/src/templates/next-experiments/lib/utils/math.test.ts +0 -221
  167. package/src/templates/next-experiments/lib/utils/strings.test.ts +0 -166
  168. package/src/templates/next-experiments/lib/utils/viewport.test.ts +0 -256
  169. package/src/templates/next-experiments/public/fonts/geist/Geist-Mono.woff2 +0 -0
  170. package/src/templates/next-webgl/components/ui/image/image.module.css +0 -5
  171. package/src/templates/next-webgl/lib/scripts/generate-component.ts +0 -322
  172. package/src/templates/next-webgl/lib/scripts/generate-page.ts +0 -193
  173. package/src/templates/next-webgl/lib/scripts/generate.ts +0 -79
  174. package/src/templates/next-webgl/lib/store/app.ts +0 -11
  175. package/src/templates/next-webgl/lib/store/index.ts +0 -11
  176. package/src/templates/next-webgl/lib/styles/colors.ts +0 -63
  177. package/src/templates/next-webgl/lib/styles/config.ts +0 -34
  178. package/src/templates/next-webgl/lib/styles/css/global.css +0 -85
  179. package/src/templates/next-webgl/lib/styles/css/index.css +0 -6
  180. package/src/templates/next-webgl/lib/styles/css/reset.css +0 -166
  181. package/src/templates/next-webgl/lib/styles/css/root.css +0 -68
  182. package/src/templates/next-webgl/lib/styles/css/tailwind.css +0 -132
  183. package/src/templates/next-webgl/lib/styles/easings.ts +0 -21
  184. package/src/templates/next-webgl/lib/styles/index.ts +0 -12
  185. package/src/templates/next-webgl/lib/styles/layout.mjs +0 -27
  186. package/src/templates/next-webgl/lib/styles/scripts/README.md +0 -29
  187. package/src/templates/next-webgl/lib/styles/scripts/generate-root.ts +0 -57
  188. package/src/templates/next-webgl/lib/styles/scripts/generate-tailwind.ts +0 -162
  189. package/src/templates/next-webgl/lib/styles/scripts/postcss-functions.mjs +0 -168
  190. package/src/templates/next-webgl/lib/styles/scripts/setup-styles.ts +0 -24
  191. package/src/templates/next-webgl/lib/styles/scripts/utils.ts +0 -20
  192. package/src/templates/next-webgl/lib/styles/typography.ts +0 -36
  193. package/src/templates/next-webgl/lib/utils/css.d.ts +0 -21
  194. package/src/templates/next-webgl/lib/utils/math.test.ts +0 -221
  195. package/src/templates/next-webgl/lib/utils/strings.test.ts +0 -166
  196. package/src/templates/next-webgl/lib/utils/viewport.test.ts +0 -256
  197. package/src/templates/next-webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
package/README.md CHANGED
@@ -1,137 +1,65 @@
1
- # bsmnt `0.2.9`
1
+ # bsmnt
2
2
 
3
- Your project starts here. One command to go from zero to a fully configured Next.js project with our stack, CMS, agent skills, and everything wired up.
3
+ <a href="https://basement.studio"><img alt="basement.studio logo" src="https://img.shields.io/badge/MADE%20BY%20basement.studio-000000.svg?style=for-the-badge&labelColor=000"></a>
4
+ <a href="https://www.npmjs.com/package/bsmnt"><img alt="NPM version" src="https://img.shields.io/npm/v/bsmnt.svg?style=for-the-badge&labelColor=000000"></a>
5
+ <a href="https://github.com/basementstudio/basement-cli"><img alt="License" src="https://img.shields.io/npm/l/bsmnt.svg?style=for-the-badge&labelColor=000000"></a>
4
6
 
5
- ```bash
6
- bsmnt
7
- ```
8
-
9
- ## What's in 1.0
10
-
11
- ### Instant project scaffolding from templates
12
-
13
- Spin up a new project based on the stack we actually use. Pick a template, answer a few prompts, and you're running.
14
-
15
- | Template | What you get |
16
- |----------|-------------|
17
- | **Default** | Next.js 16 + React 19 + Tailwind v4 + Biome + Zustand |
18
- | **WebGL** | + React Three Fiber + Three.js + optional WebGPU renderer toggle |
19
- | **Experiment** | + Creative coding setup with navigation UI |
7
+ `bsmnt` is a CLI for scaffolding basement projects, adding integrations, and installing optional hooks and agent setup.
20
8
 
21
- Every template ships with TypeScript strict mode, React Compiler, Turbopack, PostCSS functions (`tovw`, `torem`, `columns`), component generation scripts, and the full `lib/` architecture.
9
+ ## Overview
22
10
 
23
- ### Full Sanity integration code and infrastructure
11
+ - Scaffold new projects from basement starter templates
12
+ - Add Sanity to an existing project
13
+ - Copy optional hooks into an existing codebase
14
+ - Set up supported agent tooling
24
15
 
25
- Not just boilerplate files. The CLI sets up your entire Sanity stack:
16
+ ## Templates
26
17
 
27
- - Embedded Studio at `/studio` with schemas, structure builder, and live preview
28
- - GROQ queries with TypeScript type generation
29
- - Draft mode with visual editing
30
- - API routes for revalidation webhooks
31
- - `.env.local` with all credentials
18
+ | Template | Includes |
19
+ | --- | --- |
20
+ | Default | Next.js, React, TypeScript, Tailwind, Biome, and Zustand |
21
+ | WebGPU | Default stack plus React Three Fiber, Three.js, and 3D/WebGPU-ready setup |
22
+ | Experiment | Default stack plus creative coding utilities and navigation UI |
32
23
 
33
- **Automated project creation** — The CLI creates a Sanity project on your dashboard, generates API tokens, and wires everything into your repo. If you're not logged in, it opens `sanity login` inline — you never leave the terminal.
24
+ ## Install
34
25
 
35
- ### Add Sanity to existing projects
36
-
37
- Already have a project running? The `integrate` command injects Sanity into it. It detects your project structure (`app/` or `src/app/`) and smart-merges layout, sitemap, and integration files without overwriting your code.
38
-
39
- Real-world validated — this is how we integrated Sanity into the ROX project.
26
+ Run without installing:
40
27
 
41
28
  ```bash
42
- bsmnt integrate --sanity
43
- ```
44
-
45
- ### Agent skills out of the box
46
-
47
- Pick your agent (Claude Code or OpenCode) and the CLI installs curated skills so it understands our stack from the start:
48
-
49
- - React + Next.js performance patterns
50
- - Web design and accessibility guidelines
51
- - Frontend design standards
52
- - WebGPU/TSL guides (for WebGL and Experiment templates)
53
- - Sanity agent toolkit (when Sanity is selected)
54
-
55
- For Claude Code + Sanity, it also registers the Sanity MCP server automatically.
56
-
57
- ## Project Structure
58
-
59
- Single TypeScript package published as `bsmnt` on npm:
60
-
61
- ```
62
- src/
63
- ├── index.ts # Commander program, prompts, routing
64
- ├── paths.ts # Centralized path resolution
65
- ├── configs/animations.ts # GSAP / Motion dependency configs
66
- ├── helpers/
67
- │ ├── create/ # Project creation pipeline
68
- │ ├── integrate/ # CMS integration injection
69
- │ │ └── sanity/ # Sanity files, config, mergers
70
- │ └── add/ # Hook injection
71
- └── utils/ # detect-project, format-results
72
- templates/ # Standalone project templates
73
- template-hooks/ # Reusable React hooks
74
- plugins/ # Biome linting rules (Grit patterns)
29
+ npx bsmnt
30
+ bunx bsmnt
75
31
  ```
76
32
 
77
- ## (SOON) Installation
33
+ Install globally:
78
34
 
79
35
  ```bash
80
36
  npm install -g bsmnt
81
37
  ```
82
38
 
83
- For local development -- clone the repo and run:
84
-
85
- ```bash
86
- bun install
87
- npm link .
88
- ```
89
-
90
- ## Release Channels
91
-
92
- This repo follows a two-channel release model similar to the Next.js stable/canary approach, while keeping Changesets as the version source of truth.
93
-
94
- - `latest` (stable): production releases from the Changesets release PR flow.
95
- - `canary`: snapshot prereleases from `main` under npm dist-tag `canary` triggered manually.
96
-
97
- Install stable:
98
-
99
- ```bash
100
- npm install -g bsmnt@latest
101
- ```
39
+ ## Usage
102
40
 
103
- Install canary:
41
+ Create a new project:
104
42
 
105
43
  ```bash
106
- npm install -g bsmnt@canary
44
+ bsmnt
45
+ npx bsmnt
46
+ bunx bsmnt
107
47
  ```
108
48
 
109
- Verify dist-tags:
49
+ Add Sanity to an existing project:
110
50
 
111
51
  ```bash
112
- npm view bsmnt dist-tags
52
+ bsmnt integrate --sanity
53
+ npx bsmnt integrate --sanity
54
+ bunx bsmnt integrate --sanity
113
55
  ```
114
56
 
115
- How to trigger stable releases:
116
-
117
- 1. Add a changeset in your feature PR (`bun run changeset`).
118
- 2. Merge PR(s) into `main`.
119
- 3. GitHub Actions updates/opens the release PR with version/changelog changes.
120
- 4. Merge that release PR to publish to npm `latest`.
121
-
122
- How to trigger canary releases:
123
-
124
- 1. Add a changeset in your feature PR (`bun run changeset`).
125
- 2. Merge the PR into `main`.
126
- 3. In GitHub Actions, run `Canary Release` with `workflow_dispatch` on the `main` branch.
127
- 4. The workflow publishes snapshot builds to npm tag `canary` when pending changesets exist.
128
-
129
- ## Usage
130
-
131
- Interactive mode — answer prompts step by step:
57
+ Add hooks to an existing project:
132
58
 
133
59
  ```bash
134
- bsmnt
60
+ bsmnt add
61
+ npx bsmnt add
62
+ bunx bsmnt add
135
63
  ```
136
64
 
137
65
  Skip prompts with flags:
@@ -140,64 +68,74 @@ Skip prompts with flags:
140
68
  bsmnt create my-app --webgpu --sanity --gsap --claude --no-hooks
141
69
  ```
142
70
 
143
- Add Sanity to an existing project:
71
+ ## Command Summary
144
72
 
145
73
  ```bash
74
+ bsmnt
75
+ bsmnt create [project-name]
146
76
  bsmnt integrate --sanity
77
+ bsmnt add
78
+ bsmnt --help
147
79
  ```
148
80
 
149
- ## All Flags
81
+ ## Options
150
82
 
151
- ```
152
- bsmnt [command]
83
+ ### Global
153
84
 
154
- Commands:
155
- create|c [project-name] Create a new project
156
- integrate|i Add CMS integration to existing project
157
- add|a Add hooks to an existing project
85
+ | Option | Description |
86
+ | --- | --- |
87
+ | `-h, --help` | Show help |
88
+ | `-V, --version` | Show the CLI version |
158
89
 
159
- Templates:
160
- -d, --default Next.js starter
161
- --webgpu Three.js/WebGPU starter
162
- --experiment Creative coding
90
+ ### `create`
163
91
 
164
- CMS:
165
- --sanity Sanity CMS
166
- --no-cms No CMS
92
+ | Option | Description |
93
+ | --- | --- |
94
+ | `-d, --default` | Use the default template |
95
+ | `--webgpu` | Use the WebGPU template |
96
+ | `--webgl` | Deprecated alias for `--webgpu` |
97
+ | `--experiment` | Use the experiment template |
98
+ | `--sanity` | Add Sanity |
99
+ | `--no-cms` | Skip CMS setup |
100
+ | `--gsap` | Use GSAP |
101
+ | `--motion` | Use Motion |
102
+ | `--no-animation` | Skip animation setup |
103
+ | `--claude` | Set up Claude Code |
104
+ | `--opencode` | Set up OpenCode |
105
+ | `--cursor` | Set up Cursor |
106
+ | `--codex` | Set up Codex |
107
+ | `--gemini` | Set up Gemini CLI |
108
+ | `--no-agent` | Skip agent setup |
109
+ | `--no-hooks` | Skip hook selection |
167
110
 
168
- Animation:
169
- --gsap GSAP
170
- --motion Framer Motion
171
- --no-animation No animation library
111
+ ### `integrate`
172
112
 
173
- Agent:
174
- --claude Claude Code
175
- --opencode OpenCode
113
+ | Option | Description |
114
+ | --- | --- |
115
+ | `--sanity` | Add Sanity to the current project |
176
116
 
177
- Hooks:
178
- --no-hooks Skip hook selection
117
+ ### `add`
179
118
 
180
- Other:
181
- -h, --help Show help
182
- ```
119
+ No command-specific flags currently.
183
120
 
184
- ## Generated Project Commands
121
+ ## Templates
185
122
 
186
- ```bash
187
- bun dev # Dev server with Turbopack
188
- bun build # Production build
189
- bun lint # Biome linter
190
- bun lint:fix # Auto-fix lint issues
191
- bun typecheck # Type check with tsgo
192
- bun generate # Scaffold components/hooks
193
- bun analyze # Bundle size analysis
194
- ```
123
+ - Default
124
+ - WebGPU
125
+ - Experiment
126
+
127
+ ## Included Features
195
128
 
196
- With Sanity:
129
+ - Starter templates
130
+ - Optional Sanity integration
131
+ - Optional hooks
132
+ - Optional agent setup
133
+
134
+ ## Local Development
197
135
 
198
136
  ```bash
199
- bun sanity:extract # Extract Sanity schema
200
- bun sanity:typegen # Generate TS types from schema
137
+ bun install
138
+ npm link .
201
139
  ```
202
140
 
203
141
  ## License
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Skills configuration manifest.
3
+ * Defines the curated pack of AI agent skills and supported agent targets.
4
+ */
5
+ interface SkillDefinition {
6
+ /** Human-readable display name. */
7
+ name: string;
8
+ /** The skill identifier used by the `skills` CLI. */
9
+ skillName: string;
10
+ /** The GitHub owner/repo (or registry path) the skill is sourced from. */
11
+ source: string;
12
+ /** Short description shown during selection prompts. */
13
+ description: string;
14
+ }
15
+ /** Curated pack of skills installed by default. */
16
+ export declare const BASEMENT_SKILLS: readonly SkillDefinition[];
17
+ /** An AI coding agent that skills can be installed for. */
18
+ interface AgentOption {
19
+ /** Display title shown in prompts. */
20
+ title: string;
21
+ /** Machine value used in config and CLI flags. */
22
+ value: string;
23
+ }
24
+ /** Agents the CLI supports when installing skills. */
25
+ export declare const SUPPORTED_AGENTS: readonly AgentOption[];
26
+ export {};
27
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/configs/skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,eAAe;IACxB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,mDAAmD;AACnD,eAAO,MAAM,eAAe,EAAE,SAAS,eAAe,EAAyC,CAAC;AAEhG,2DAA2D;AAC3D,UAAU,WAAW;IACpB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;CACd;AAED,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,SAAS,WAAW,EAOzC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Skills configuration manifest.
3
+ * Defines the curated pack of AI agent skills and supported agent targets.
4
+ */
5
+ /** A single skill that can be installed into a project. */
6
+ import skills from "./skills.json" with { type: "json" };
7
+ /** Curated pack of skills installed by default. */
8
+ export const BASEMENT_SKILLS = skills;
9
+ /** Agents the CLI supports when installing skills. */
10
+ export const SUPPORTED_AGENTS = [
11
+ { title: "Claude Code", value: "claude-code" },
12
+ { title: "Cursor", value: "cursor" },
13
+ { title: "OpenCode", value: "opencode" },
14
+ { title: "Gemini CLI", value: "gemini-cli" },
15
+ { title: "Cline", value: "cline" },
16
+ { title: "Codex", value: "codex" },
17
+ ];
18
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/configs/skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2DAA2D;AAC3D,OAAO,MAAM,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAazD,mDAAmD;AACnD,MAAM,CAAC,MAAM,eAAe,GAA+B,MAAoC,CAAC;AAUhG,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACvD,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC9C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IAC5C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;CACzB,CAAC"}
@@ -0,0 +1,26 @@
1
+ [
2
+ {
3
+ "name": "React Best Practices",
4
+ "skillName": "vercel-react-best-practices",
5
+ "source": "vercel-labs/agent-skills",
6
+ "description": "React/Next.js performance patterns from Vercel"
7
+ },
8
+ {
9
+ "name": "Web Design Guidelines",
10
+ "skillName": "web-design-guidelines",
11
+ "source": "vercel-labs/agent-skills",
12
+ "description": "Web design and UI guidelines"
13
+ },
14
+ {
15
+ "name": "Frontend Design",
16
+ "skillName": "frontend-design",
17
+ "source": "anthropics/skills",
18
+ "description": "Production-grade frontend interface patterns"
19
+ },
20
+ {
21
+ "name": "Next.js Best Practices",
22
+ "skillName": "next-best-practices",
23
+ "source": "vercel-labs/next-skills",
24
+ "description": "Next.js-specific best practices"
25
+ }
26
+ ]
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-config.d.ts","sourceRoot":"","sources":["../../../src/helpers/add/hooks-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,UAAU,aAAa;IACtB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IAC1B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,YAAY,EAAE,aAAa,CAAC;IAC5B,uDAAuD;IACvD,eAAe,EAAE,aAAa,CAAC;CAC/B;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,UAAU,EA+BnC,CAAC"}
1
+ {"version":3,"file":"hooks-config.d.ts","sourceRoot":"","sources":["../../../src/helpers/add/hooks-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,UAAU,aAAa;IACtB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IAC1B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,YAAY,EAAE,aAAa,CAAC;IAC5B,uDAAuD;IACvD,eAAe,EAAE,aAAa,CAAC;CAC/B;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,UAAU,EAyBnC,CAAC"}
@@ -27,11 +27,5 @@ export const hooksConfig = [
27
27
  dependencies: {},
28
28
  devDependencies: {},
29
29
  },
30
- {
31
- name: "use-media",
32
- file: "use-media.ts",
33
- dependencies: {},
34
- devDependencies: {},
35
- },
36
30
  ];
37
31
  //# sourceMappingURL=hooks-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../../../src/helpers/add/hooks-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,CAAC,MAAM,WAAW,GAA0B;IACjD;QACC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE;YACb,WAAW,EAAE,UAAU;SACvB;QACD,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE;YACb,YAAY,EAAE,QAAQ;YACtB,qBAAqB,EAAE,QAAQ;YAC/B,OAAO,EAAE,QAAQ;SACjB;QACD,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,2BAA2B;QACjC,IAAI,EAAE,8BAA8B;QACpC,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;KACnB;CACQ,CAAC"}
1
+ {"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../../../src/helpers/add/hooks-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,CAAC,MAAM,WAAW,GAA0B;IACjD;QACC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE;YACb,WAAW,EAAE,UAAU;SACvB;QACD,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE;YACb,YAAY,EAAE,QAAQ;YACtB,qBAAqB,EAAE,QAAQ;YAC/B,OAAO,EAAE,QAAQ;SACjB;QACD,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,2BAA2B;QACjC,IAAI,EAAE,8BAA8B;QACpC,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;KACnB;CACQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup-agent.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/setup-agent.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAClB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAgBZ,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC5B,gEAAgE;IAChE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,sEAAsE;IACtE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
1
+ {"version":3,"file":"setup-agent.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/setup-agent.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAClB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAgBZ,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC5B,gEAAgE;IAChE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,sEAAsE;IACtE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAqFf"}
@@ -1,6 +1,7 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import path from "node:path";
3
3
  import fs from "fs-extra";
4
+ import { BASEMENT_SKILLS } from "../../configs/skills.js";
4
5
  const AGENT_CONFIG = {
5
6
  claude: { agentArg: "claude-code", agentFolder: ".claude" },
6
7
  opencode: { agentArg: "opencode", agentFolder: ".opencode" },
@@ -22,6 +23,7 @@ export async function setupAgent(targetDir, options) {
22
23
  const selectedAgents = [...new Set(options.agents)];
23
24
  if (selectedAgents.length === 0)
24
25
  return;
26
+ // Create skills directories for each agent
25
27
  for (const agent of selectedAgents) {
26
28
  const { agentFolder } = AGENT_CONFIG[agent];
27
29
  const skillsPath = path.join(targetDir, agentFolder, "skills");
@@ -35,13 +37,21 @@ export async function setupAgent(targetDir, options) {
35
37
  "next-experiments",
36
38
  ]).has(options.templateType ?? "");
37
39
  const cms = options.cms && options.cms !== "none" ? options.cms : null;
40
+ // Group curated skills by source for batch installation
41
+ const grouped = new Map();
42
+ for (const skill of BASEMENT_SKILLS) {
43
+ const existing = grouped.get(skill.source) ?? [];
44
+ existing.push(skill.skillName);
45
+ grouped.set(skill.source, existing);
46
+ }
38
47
  for (const agent of selectedAgents) {
39
48
  const { agentArg } = AGENT_CONFIG[agent];
40
- const skillsCommands = [
41
- `bunx skills add vercel-labs/agent-skills --skill vercel-react-best-practices --skill web-design-guidelines -a ${agentArg} -y`,
42
- `bunx skills add anthropics/skills --skill frontend-design -a ${agentArg} -y`,
43
- `bunx skills add vercel-labs/next-skills --skill next-best-practices -a ${agentArg} -y`,
44
- ];
49
+ // Build commands from the shared config
50
+ const skillsCommands = [];
51
+ for (const [source, skills] of grouped) {
52
+ const skillFlags = skills.map((s) => `--skill ${s}`).join(" ");
53
+ skillsCommands.push(`bunx skills add ${source} ${skillFlags} -a ${agentArg} -y`);
54
+ }
45
55
  if (installWebgpuSkill) {
46
56
  skillsCommands.push(`bunx skills add https://github.com/dgreenheck/webgpu-claude-skill --skill webgpu-threejs-tsl -a ${agentArg} -y`);
47
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup-agent.js","sourceRoot":"","sources":["../../../src/helpers/create/setup-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-agent.js","sourceRoot":"","sources":["../../../src/helpers/create/setup-agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"merge-config.d.ts","sourceRoot":"","sources":["../../../src/helpers/integrate/merge-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACzB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;AA6B/B;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,OAAO,CAE1D"}
1
+ {"version":3,"file":"merge-config.d.ts","sourceRoot":"","sources":["../../../src/helpers/integrate/merge-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACzB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;AA8B/B;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,OAAO,CAE1D"}
@@ -19,6 +19,7 @@ const CMS_CONFIG = {
19
19
  "app/blog",
20
20
  "app/sitemap.md",
21
21
  "lib/utils/metadata.ts",
22
+ "lib/utils/json-ld.tsx",
22
23
  "lib/utils/portable-text-to-markdown.ts",
23
24
  "lib/scripts/generate-page.ts",
24
25
  "lib/scripts/copy-sanity-mcp.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"merge-config.js","sourceRoot":"","sources":["../../../src/helpers/integrate/merge-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,UAAU,GAA+B;IAC9C,MAAM,EAAE;QACP,UAAU,EAAE;YACX,gBAAgB;YAChB,gBAAgB;YAChB,uCAAuC;SACvC;QAED,aAAa,EAAE;YACd,yBAAyB;YACzB,4BAA4B;YAC5B,oBAAoB;YACpB,oBAAoB;YACpB,YAAY;YACZ,cAAc;YACd,UAAU;YACV,gBAAgB;YAChB,uBAAuB;YACvB,wCAAwC;YACxC,8BAA8B;YAC9B,gCAAgC;YAChC,4BAA4B;YAC5B,UAAU;SACV;KACD;CACD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACvC,OAAQ,UAAwC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,OAAO,GAAG,IAAI,UAAU,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"merge-config.js","sourceRoot":"","sources":["../../../src/helpers/integrate/merge-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,UAAU,GAA+B;IAC9C,MAAM,EAAE;QACP,UAAU,EAAE;YACX,gBAAgB;YAChB,gBAAgB;YAChB,uCAAuC;SACvC;QAED,aAAa,EAAE;YACd,yBAAyB;YACzB,4BAA4B;YAC5B,oBAAoB;YACpB,oBAAoB;YACpB,YAAY;YACZ,cAAc;YACd,UAAU;YACV,gBAAgB;YAChB,uBAAuB;YACvB,uBAAuB;YACvB,wCAAwC;YACxC,8BAA8B;YAC9B,gCAAgC;YAChC,4BAA4B;YAC5B,UAAU;SACV;KACD;CACD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACvC,OAAQ,UAAwC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,OAAO,GAAG,IAAI,UAAU,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/helpers/integrate/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,uBAiD1B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/helpers/integrate/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,uBAuD1B,CAAC"}
@@ -5,6 +5,7 @@
5
5
  export const sanityConfig = {
6
6
  name: "sanity",
7
7
  dependencies: {
8
+ "@clack/prompts": "^1.1.0",
8
9
  "@portabletext/markdown": "^1.1.3",
9
10
  "@portabletext/types": "^2.0.13",
10
11
  "@sanity/asset-utils": "^2.3.0",
@@ -13,14 +14,18 @@ export const sanityConfig = {
13
14
  "@sanity/vision": "^5.7.0",
14
15
  "next-sanity": "^12.0.14",
15
16
  sanity: "^5.6.0",
17
+ "sanity-plugin-media": "^2.3.0",
18
+ },
19
+ devDependencies: {
20
+ "@clack/prompts": "^0.11.0",
21
+ "schema-dts": "^2.0.0",
16
22
  },
17
- devDependencies: {},
18
23
  scripts: {
19
24
  "sanity:extract": "cd lib/integrations/sanity && bun --env-file ../../../.env.local sanity schema extract",
20
25
  "sanity:typegen": "cd lib/integrations/sanity && bun --env-file ../../../.env.local sanity schema extract && bun --env-file ../../../.env.local sanity typegen generate && bun biome check --write --unsafe",
21
26
  predev: "bun run sanity:typegen",
22
27
  dev: "bun ./lib/scripts/dev.ts",
23
- prebuild: "bun run sanity:typegen && bun run setup:styles",
28
+ prebuild: "bun run sanity:typegen",
24
29
  build: "next build",
25
30
  },
26
31
  additivePaths: [
@@ -32,6 +37,7 @@ export const sanityConfig = {
32
37
  "app/api/blog",
33
38
  "app/blog",
34
39
  "app/sitemap.md",
40
+ "lib/utils/json-ld.tsx",
35
41
  "lib/utils/metadata.ts",
36
42
  "lib/utils/portable-text-to-markdown.ts",
37
43
  "lib/scripts/generate-page.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/helpers/integrate/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,YAAY,GAA4B;IACpD,IAAI,EAAE,QAAQ;IAEd,YAAY,EAAE;QACb,wBAAwB,EAAE,QAAQ;QAClC,qBAAqB,EAAE,SAAS;QAChC,qBAAqB,EAAE,QAAQ;QAC/B,mBAAmB,EAAE,QAAQ;QAC7B,wBAAwB,EAAE,QAAQ;QAClC,gBAAgB,EAAE,QAAQ;QAC1B,aAAa,EAAE,UAAU;QACzB,MAAM,EAAE,QAAQ;KAChB;IAED,eAAe,EAAE,EAAE;IAEnB,OAAO,EAAE;QACR,gBAAgB,EACf,wFAAwF;QACzF,gBAAgB,EACf,0LAA0L;QAC3L,MAAM,EAAE,wBAAwB;QAChC,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,gDAAgD;QAC1D,KAAK,EAAE,YAAY;KACnB;IAED,aAAa,EAAE;QACd,yBAAyB;QACzB,4BAA4B;QAC5B,oBAAoB;QACpB,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,UAAU;QACV,gBAAgB;QAChB,uBAAuB;QACvB,wCAAwC;QACxC,8BAA8B;QAC9B,gCAAgC;QAChC,4BAA4B;QAC5B,UAAU;KACV;IAED,UAAU,EAAE;QACX,gBAAgB;QAChB,gBAAgB;QAChB,uCAAuC;KACvC;CACD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/helpers/integrate/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,YAAY,GAA4B;IACpD,IAAI,EAAE,QAAQ;IAEd,YAAY,EAAE;QACb,gBAAgB,EAAE,QAAQ;QAC1B,wBAAwB,EAAE,QAAQ;QAClC,qBAAqB,EAAE,SAAS;QAChC,qBAAqB,EAAE,QAAQ;QAC/B,mBAAmB,EAAE,QAAQ;QAC7B,wBAAwB,EAAE,QAAQ;QAClC,gBAAgB,EAAE,QAAQ;QAC1B,aAAa,EAAE,UAAU;QACzB,MAAM,EAAE,QAAQ;QAChB,qBAAqB,EAAE,QAAQ;KAC/B;IAED,eAAe,EAAE;QAChB,gBAAgB,EAAE,SAAS;QAC3B,YAAY,EAAE,QAAQ;KACtB;IAED,OAAO,EAAE;QACR,gBAAgB,EACf,wFAAwF;QACzF,gBAAgB,EACf,0LAA0L;QAC3L,MAAM,EAAE,wBAAwB;QAChC,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,wBAAwB;QAClC,KAAK,EAAE,YAAY;KACnB;IAED,aAAa,EAAE;QACd,yBAAyB;QACzB,4BAA4B;QAC5B,oBAAoB;QACpB,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,UAAU;QACV,gBAAgB;QAChB,uBAAuB;QACvB,uBAAuB;QACvB,wCAAwC;QACxC,8BAA8B;QAC9B,gCAAgC;QAChC,4BAA4B;QAC5B,UAAU;KACV;IAED,UAAU,EAAE;QACX,gBAAgB;QAChB,gBAAgB;QAChB,uCAAuC;KACvC;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout-merger.d.ts","sourceRoot":"","sources":["../../../../../src/helpers/integrate/sanity/mergers/layout-merger.ts"],"names":[],"mappings":"AA2DA,UAAU,kBAAkB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAChC,YAAY,EAAE,MAAM,EACpB,EAAE,SAAS,EAAE,UAAU,EAAE,GAAE,kBAAuB,GAChD,OAAO,CAAC,WAAW,CAAC,CAuJtB"}
1
+ {"version":3,"file":"layout-merger.d.ts","sourceRoot":"","sources":["../../../../../src/helpers/integrate/sanity/mergers/layout-merger.ts"],"names":[],"mappings":"AA2DA,UAAU,kBAAkB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAChC,YAAY,EAAE,MAAM,EACpB,EAAE,SAAS,EAAE,UAAU,EAAE,GAAE,kBAAuB,GAChD,OAAO,CAAC,WAAW,CAAC,CA2JtB"}
@@ -71,18 +71,19 @@ export async function mergeLayout(templatePath, { targetDir, pathPrefix } = {})
71
71
  content.includes("isSanityConfigured")) {
72
72
  return { skipped: true, reason: "Already has Sanity integration" };
73
73
  }
74
- // 1. Add Sanity imports after existing imports
75
- const importMatches = [...content.matchAll(/^import .+$/gm)];
76
- if (importMatches.length > 0) {
77
- const lastImport = importMatches.at(-1);
78
- if (lastImport && lastImport.index !== undefined) {
79
- const insertPos = lastImport.index + lastImport[0].length;
80
- content =
81
- content.slice(0, insertPos) +
82
- "\n" +
83
- SANITY_IMPORTS +
84
- content.slice(insertPos);
85
- }
74
+ // 1. Add Sanity imports after the full top-level import section.
75
+ // This avoids corrupting multiline imports like:
76
+ // import {
77
+ // Foo,
78
+ // Bar,
79
+ // } from "baz";
80
+ const importSectionMatch = content.match(/^(?:import[\s\S]+?;\n)+/m);
81
+ if (importSectionMatch && importSectionMatch.index !== undefined) {
82
+ const insertPos = importSectionMatch.index + importSectionMatch[0].length;
83
+ content =
84
+ content.slice(0, insertPos) +
85
+ `${SANITY_IMPORTS}\n` +
86
+ content.slice(insertPos);
86
87
  }
87
88
  // 2. Ensure Suspense is imported from react
88
89
  if (!content.match(/import\s+.*Suspense.*from\s+["']react["']/)) {
@@ -1 +1 @@
1
- {"version":3,"file":"layout-merger.js","sourceRoot":"","sources":["../../../../../src/helpers/integrate/sanity/mergers/layout-merger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout-merger.js","sourceRoot":"","sources":["../../../../../src/helpers/integrate/sanity/mergers/layout-merger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Interactive flow to install the curated basement skills pack globally.
3
+ *
4
+ * 1. Detects which skills are already installed.
5
+ * 2. Shows a status overview (installed vs missing).
6
+ * 3. Prompts the user to select target agents.
7
+ * 4. Installs missing skills grouped by source repository.
8
+ */
9
+ export declare function installSkills(): Promise<void>;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/skills/index.ts"],"names":[],"mappings":"AAoEA;;;;;;;GAOG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA2FnD"}