@actuate-media/cli 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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @actuate-media/cli@0.10.0 build /home/runner/work/actuatecms/actuatecms/packages/cli
2
+ > @actuate-media/cli@0.11.1 build /home/runner/work/actuatecms/actuatecms/packages/cli
3
3
  > tsc
4
4
 
@@ -1,64 +1,324 @@
1
1
 
2
- > @actuate-media/cli@0.10.0 test /home/runner/work/actuatecms/actuatecms/packages/cli
2
+ > @actuate-media/cli@0.11.1 test /home/runner/work/actuatecms/actuatecms/packages/cli
3
3
  > vitest run
4
4
 
5
5
 
6
6
   RUN  v4.1.8 /home/runner/work/actuatecms/actuatecms/packages/cli
7
7
 
8
- ✓ dist/__tests__/db-sync.test.js (10 tests) 324ms
9
- ✓ dist/__tests__/seed.test.js (10 tests) 241ms
10
- ✓ src/__tests__/db-sync.test.ts (10 tests) 300ms
11
- ✓ src/__tests__/seed.test.ts (10 tests) 141ms
12
- ✓ dist/__tests__/deployment-diagnostics.test.js (8 tests) 68ms
13
- ✓ src/__tests__/deployment-diagnostics.test.ts (8 tests) 58ms
8
+ ✓ dist/__tests__/db-sync.test.js (10 tests) 301ms
9
+ ✓ dist/__tests__/seed.test.js (10 tests) 92ms
10
+ ✓ src/__tests__/db-sync.test.ts (10 tests) 320ms
11
+ ✓ src/__tests__/seed.test.ts (10 tests) 107ms
12
+ ✓ dist/__tests__/deployment-diagnostics.test.js (8 tests) 43ms
13
+ ✓ src/__tests__/deployment-diagnostics.test.ts (8 tests) 55ms
14
14
  - Reading canonical Actuate schema...
15
+ ✔ Actuate CMS models added to schema.
16
+ - Running prisma generate...
15
17
  stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > injects canonical models with @@map and no duplicate datasource/generator
16
18
  ✔ Prisma client generated.
17
19
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
18
20
 
19
- ✔ Actuate CMS models added to schema.
20
- - Running prisma generate...
21
+ - Reading canonical Actuate schema...
22
+ ✖ Could not locate @actuate-media/cms-core.
21
23
  stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > fails clearly when cms-core cannot be located
22
24
  ℹ Install it first: `npm install @actuate-media/cms-core`.
23
- - Reading canonical Actuate schema...
24
25
 
25
- ✖ Could not locate @actuate-media/cms-core.
26
26
  - Reading canonical Actuate schema...
27
+ ✔ Actuate CMS models added to schema.
28
+ - Running prisma generate...
27
29
  stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > is idempotent without --force
28
30
  ✔ Prisma client generated.
29
31
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
30
32
 
31
- ✔ Actuate CMS models added to schema.
32
- - Running prisma generate...
33
33
  - Reading canonical Actuate schema...
34
34
  ℹ Actuate CMS models already present in schema. Use --force to overwrite.
35
- ✓ dist/__tests__/db-init.test.js (4 tests) 285ms
35
+ ✓ dist/__tests__/db-init.test.js (4 tests) 228ms
36
36
  - Reading canonical Actuate schema...
37
- ✔ Actuate CMS models added to schema.
38
- - Running prisma generate...
39
37
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > injects canonical models with @@map and no duplicate datasource/generator
40
38
  ✔ Prisma client generated.
41
39
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
42
40
 
43
- stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > fails clearly when cms-core cannot be located
41
+ ✔ Actuate CMS models added to schema.
42
+ - Running prisma generate...
44
43
  - Reading canonical Actuate schema...
44
+ ✖ Could not locate @actuate-media/cms-core.
45
+ stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > fails clearly when cms-core cannot be located
45
46
  ℹ Install it first: `npm install @actuate-media/cms-core`.
46
47
 
47
- ✖ Could not locate @actuate-media/cms-core.
48
48
  - Reading canonical Actuate schema...
49
- ✔ Actuate CMS models added to schema.
50
- - Running prisma generate...
51
49
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > is idempotent without --force
52
50
  ✔ Prisma client generated.
53
51
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
54
52
 
53
+ ✔ Actuate CMS models added to schema.
54
+ - Running prisma generate...
55
55
  - Reading canonical Actuate schema...
56
56
  ℹ Actuate CMS models already present in schema. Use --force to overwrite.
57
- ✓ src/__tests__/db-init.test.ts (4 tests) 289ms
58
- ✓ dist/__tests__/form-seed.test.js (10 tests) 57ms
59
- ✓ src/__tests__/form-seed.test.ts (10 tests) 59ms
60
- ✓ dist/__tests__/vercel-env-matrix.test.js (5 tests) 34ms
61
- ✓ src/__tests__/vercel-env-matrix.test.ts (5 tests) 43ms
57
+ ✓ src/__tests__/db-init.test.ts (4 tests) 226ms
58
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > creates both editor configs with placeholder key and git-ignores them
59
+ ✔ Created .cursor/mcp.json
60
+
61
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > creates both editor configs with placeholder key and git-ignores them
62
+ ✔ Created .vscode/mcp.json
63
+
64
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > creates both editor configs with placeholder key and git-ignores them
65
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
66
+
67
+ Next steps
68
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
69
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
70
+ 3. Restart Cursor / VS Code so the MCP server is picked up
71
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
72
+
73
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > applies --url and --key to both configs
74
+ ✔ Created .cursor/mcp.json
75
+
76
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > applies --url and --key to both configs
77
+ ✔ Created .vscode/mcp.json
78
+
79
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > applies --url and --key to both configs
80
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
81
+
82
+ Next steps
83
+ 1. Restart Cursor / VS Code so the MCP server is picked up
84
+
85
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > merges into an existing config without clobbering other servers
86
+ ✔ Updated .cursor/mcp.json
87
+
88
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > merges into an existing config without clobbering other servers
89
+ ✔ Created .vscode/mcp.json
90
+
91
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > merges into an existing config without clobbering other servers
92
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
93
+
94
+ Next steps
95
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
96
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
97
+ 3. Restart Cursor / VS Code so the MCP server is picked up
98
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
99
+
100
+ stderr | dist/__tests__/mcp-init.test.js > mcp:init > leaves an existing actuate entry alone unless --force is passed
101
+ ⚠ .cursor/mcp.json already has an "actuate" server — use --force to replace it.
102
+
103
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > leaves an existing actuate entry alone unless --force is passed
104
+ ✔ Created .vscode/mcp.json
105
+
106
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > leaves an existing actuate entry alone unless --force is passed
107
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
108
+
109
+ Next steps
110
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
111
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
112
+ 3. Restart Cursor / VS Code so the MCP server is picked up
113
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
114
+
115
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > leaves an existing actuate entry alone unless --force is passed
116
+ ✔ Updated .cursor/mcp.json
117
+
118
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > leaves an existing actuate entry alone unless --force is passed
119
+ ✔ Updated .vscode/mcp.json
120
+
121
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > leaves an existing actuate entry alone unless --force is passed
122
+ 
123
+ Next steps
124
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
125
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
126
+ 3. Restart Cursor / VS Code so the MCP server is picked up
127
+
128
+ stderr | dist/__tests__/mcp-init.test.js > mcp:init > fails on invalid JSON without --force, overwrites with --force
129
+ ✖ .cursor/mcp.json contains invalid JSON — fix it or re-run with --force.
130
+
131
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > fails on invalid JSON without --force, overwrites with --force
132
+ ✔ Created .vscode/mcp.json
133
+
134
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > fails on invalid JSON without --force, overwrites with --force
135
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
136
+
137
+ Next steps
138
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
139
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
140
+ 3. Restart Cursor / VS Code so the MCP server is picked up
141
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
142
+
143
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > fails on invalid JSON without --force, overwrites with --force
144
+ ✔ Updated .cursor/mcp.json
145
+
146
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > fails on invalid JSON without --force, overwrites with --force
147
+ ✔ Updated .vscode/mcp.json
148
+
149
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > fails on invalid JSON without --force, overwrites with --force
150
+ 
151
+ Next steps
152
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
153
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
154
+ 3. Restart Cursor / VS Code so the MCP server is picked up
155
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
156
+
157
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > does not duplicate gitignore entries on re-runs
158
+ ✔ Created .cursor/mcp.json
159
+
160
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > does not duplicate gitignore entries on re-runs
161
+ ✔ Created .vscode/mcp.json
162
+
163
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > does not duplicate gitignore entries on re-runs
164
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
165
+
166
+ Next steps
167
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
168
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
169
+ 3. Restart Cursor / VS Code so the MCP server is picked up
170
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
171
+
172
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > does not duplicate gitignore entries on re-runs
173
+ ✔ Updated .cursor/mcp.json
174
+
175
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > does not duplicate gitignore entries on re-runs
176
+ ✔ Updated .vscode/mcp.json
177
+
178
+ stdout | dist/__tests__/mcp-init.test.js > mcp:init > does not duplicate gitignore entries on re-runs
179
+ 
180
+ Next steps
181
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
182
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
183
+ 3. Restart Cursor / VS Code so the MCP server is picked up
184
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
185
+
186
+ ✓ dist/__tests__/mcp-init.test.js (6 tests) 420ms
187
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > creates both editor configs with placeholder key and git-ignores them
188
+ ✔ Created .cursor/mcp.json
189
+
190
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > creates both editor configs with placeholder key and git-ignores them
191
+ ✔ Created .vscode/mcp.json
192
+
193
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > creates both editor configs with placeholder key and git-ignores them
194
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
195
+
196
+ Next steps
197
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
198
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
199
+ 3. Restart Cursor / VS Code so the MCP server is picked up
200
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
201
+
202
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > applies --url and --key to both configs
203
+ ✔ Created .cursor/mcp.json
204
+
205
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > applies --url and --key to both configs
206
+ ✔ Created .vscode/mcp.json
207
+
208
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > applies --url and --key to both configs
209
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
210
+
211
+ Next steps
212
+ 1. Restart Cursor / VS Code so the MCP server is picked up
213
+
214
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > merges into an existing config without clobbering other servers
215
+ ✔ Updated .cursor/mcp.json
216
+
217
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > merges into an existing config without clobbering other servers
218
+ ✔ Created .vscode/mcp.json
219
+
220
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > merges into an existing config without clobbering other servers
221
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
222
+
223
+ Next steps
224
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
225
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
226
+ 3. Restart Cursor / VS Code so the MCP server is picked up
227
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
228
+
229
+ stderr | src/__tests__/mcp-init.test.ts > mcp:init > leaves an existing actuate entry alone unless --force is passed
230
+ ⚠ .cursor/mcp.json already has an "actuate" server — use --force to replace it.
231
+
232
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > leaves an existing actuate entry alone unless --force is passed
233
+ ✔ Created .vscode/mcp.json
234
+
235
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > leaves an existing actuate entry alone unless --force is passed
236
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
237
+
238
+ Next steps
239
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
240
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
241
+ 3. Restart Cursor / VS Code so the MCP server is picked up
242
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
243
+
244
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > leaves an existing actuate entry alone unless --force is passed
245
+ ✔ Updated .cursor/mcp.json
246
+
247
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > leaves an existing actuate entry alone unless --force is passed
248
+ ✔ Updated .vscode/mcp.json
249
+
250
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > leaves an existing actuate entry alone unless --force is passed
251
+ 
252
+ Next steps
253
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
254
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
255
+ 3. Restart Cursor / VS Code so the MCP server is picked up
256
+
257
+ stderr | src/__tests__/mcp-init.test.ts > mcp:init > fails on invalid JSON without --force, overwrites with --force
258
+ ✖ .cursor/mcp.json contains invalid JSON — fix it or re-run with --force.
259
+
260
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > fails on invalid JSON without --force, overwrites with --force
261
+ ✔ Created .vscode/mcp.json
262
+
263
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > fails on invalid JSON without --force, overwrites with --force
264
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
265
+
266
+ Next steps
267
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
268
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
269
+ 3. Restart Cursor / VS Code so the MCP server is picked up
270
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
271
+
272
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > fails on invalid JSON without --force, overwrites with --force
273
+ ✔ Updated .cursor/mcp.json
274
+
275
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > fails on invalid JSON without --force, overwrites with --force
276
+ ✔ Updated .vscode/mcp.json
277
+
278
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > fails on invalid JSON without --force, overwrites with --force
279
+ 
280
+ Next steps
281
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
282
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
283
+ 3. Restart Cursor / VS Code so the MCP server is picked up
284
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
285
+
286
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > does not duplicate gitignore entries on re-runs
287
+ ✔ Created .cursor/mcp.json
288
+
289
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > does not duplicate gitignore entries on re-runs
290
+ ✔ Created .vscode/mcp.json
291
+
292
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > does not duplicate gitignore entries on re-runs
293
+ ✔ Added to .gitignore: .cursor/mcp.json, .vscode/mcp.json
294
+
295
+ Next steps
296
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
297
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
298
+ 3. Restart Cursor / VS Code so the MCP server is picked up
299
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
300
+
301
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > does not duplicate gitignore entries on re-runs
302
+ ✔ Updated .cursor/mcp.json
303
+
304
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > does not duplicate gitignore entries on re-runs
305
+ ✔ Updated .vscode/mcp.json
306
+
307
+ stdout | src/__tests__/mcp-init.test.ts > mcp:init > does not duplicate gitignore entries on re-runs
308
+ 
309
+ Next steps
310
+ 1. Mint an API key in Admin → Settings → API Keys (act_sk_...)
311
+ 2. Replace act_sk_REPLACE_WITH_YOUR_KEY in both config files with the real key
312
+ 3. Restart Cursor / VS Code so the MCP server is picked up
313
+ Tip: pass --url https://your-site.com to target a deployed CMS instead.
314
+
315
+ ✓ src/__tests__/mcp-init.test.ts (6 tests) 407ms
316
+ ✓ dist/__tests__/form-seed.test.js (10 tests) 59ms
317
+ ✓ src/__tests__/form-seed.test.ts (10 tests) 75ms
318
+ ✓ dist/__tests__/vercel-env-matrix.test.js (5 tests) 66ms
319
+ ✓ src/__tests__/vercel-env-matrix.test.ts (5 tests) 56ms
320
+ ✓ dist/__tests__/load-dotenv.test.js (3 tests) 65ms
321
+ ✓ src/__tests__/load-dotenv.test.ts (3 tests) 54ms
62
322
  - Reading canonical Actuate schema...
63
323
  ✔ Actuate CMS models added to schema.
64
324
  - Running prisma generate...
@@ -66,20 +326,20 @@
66
326
  ✔ Prisma client generated.
67
327
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
68
328
 
69
- ✓ dist/__tests__/schema-fragment.test.js (1 test) 96ms
329
+ ✓ dist/__tests__/schema-fragment.test.js (1 test) 146ms
70
330
  - Reading canonical Actuate schema...
71
- stdout | src/__tests__/schema-fragment.test.ts > db:init schema fragment > injects all deploy-critical Actuate models
72
331
  ✔ Actuate CMS models added to schema.
332
+ - Running prisma generate...
333
+ stdout | src/__tests__/schema-fragment.test.ts > db:init schema fragment > injects all deploy-critical Actuate models
73
334
  ✔ Prisma client generated.
74
335
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
75
336
 
76
- - Running prisma generate...
77
- ✓ src/__tests__/schema-fragment.test.ts (1 test) 116ms
78
- ✓ dist/__tests__/init.test.js (2 tests) 54ms
79
- ✓ src/__tests__/init.test.ts (2 tests) 32ms
80
-
81
-  Test Files  16 passed (16)
82
-  Tests  100 passed (100)
83
-  Start at  15:53:52
84
-  Duration  23.79s (transform 2.27s, setup 0ms, import 6.86s, tests 2.20s, environment 2ms)
337
+ ✓ src/__tests__/schema-fragment.test.ts (1 test) 130ms
338
+ ✓ dist/__tests__/init.test.js (2 tests) 16ms
339
+ ✓ src/__tests__/init.test.ts (2 tests) 31ms
340
+
341
+  Test Files  20 passed (20)
342
+  Tests  118 passed (118)
343
+  Start at  01:58:55
344
+  Duration  27.03s (transform 2.41s, setup 0ms, import 6.84s, tests 2.90s, environment 16ms)
85
345
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @actuate-media/cli
2
2
 
3
+ ## 0.11.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 4899af9: Fix consumer production builds on Next.js 16 by not injecting a no-op webpack hook in `withActuateCMS`. Add `CRON_SECRET` to scaffold `.env.example`. Remove obsolete `earlyAccess` from scaffolded `prisma.config.ts`. Load project `.env` files in `actuate doctor` and `actuate deploy:check`.
8
+
9
+ ## 0.11.0
10
+
11
+ ### Minor Changes
12
+
13
+ - eb998e5: New `actuate mcp:init` command — retrofit the Actuate MCP server onto existing projects.
14
+
15
+ Writes `.cursor/mcp.json` (Cursor / Claude Desktop shape) and `.vscode/mcp.json` (VS Code shape) wiring `@actuate-media/mcp-server`, with `--url` / `--key` options. Merges into existing configs without clobbering other MCP servers; an existing `actuate` entry is only replaced with `--force`. Both paths are appended to `.gitignore` so a real `act_sk_...` key is never committed. New scaffolds already get these files from `create-actuate-cms` — this closes the gap for projects created before that.
16
+
3
17
  ## 0.10.0
4
18
 
5
19
  ### Minor Changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=load-dotenv.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-dotenv.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/load-dotenv.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { mkdtemp, writeFile } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { loadProjectEnv, parseDotenv } from '../utils/load-dotenv.js';
6
+ describe('parseDotenv', () => {
7
+ it('parses KEY=VALUE lines and strips quotes', () => {
8
+ expect(parseDotenv(`
9
+ # comment
10
+ CMS_SECRET=abc123456789012345678901234567890
11
+ DATABASE_URL="postgresql://x"
12
+ EMPTY=
13
+ `)).toEqual({
14
+ CMS_SECRET: 'abc123456789012345678901234567890',
15
+ DATABASE_URL: 'postgresql://x',
16
+ EMPTY: '',
17
+ });
18
+ });
19
+ });
20
+ describe('loadProjectEnv', () => {
21
+ it('loads .env and lets .env.local override empty base values', async () => {
22
+ const dir = await mkdtemp(join(tmpdir(), 'actuate-doctor-env-'));
23
+ await writeFile(join(dir, '.env'), 'CMS_SECRET=from-dotenv\nCMS_ENCRYPTION_KEY=enc\n', 'utf-8');
24
+ await writeFile(join(dir, '.env.local'), 'NEXT_PUBLIC_SITE_URL=http://localhost:3000\n', 'utf-8');
25
+ const env = await loadProjectEnv(dir, {
26
+ DATABASE_URL: 'postgresql://preset',
27
+ });
28
+ expect(env.DATABASE_URL).toBe('postgresql://preset');
29
+ expect(env.CMS_SECRET).toBe('from-dotenv');
30
+ expect(env.CMS_ENCRYPTION_KEY).toBe('enc');
31
+ expect(env.NEXT_PUBLIC_SITE_URL).toBe('http://localhost:3000');
32
+ });
33
+ it('does not override non-empty values already in the parent env', async () => {
34
+ const dir = await mkdtemp(join(tmpdir(), 'actuate-doctor-env-'));
35
+ await writeFile(join(dir, '.env'), 'CMS_SECRET=from-file\n', 'utf-8');
36
+ const env = await loadProjectEnv(dir, { CMS_SECRET: 'from-shell' });
37
+ expect(env.CMS_SECRET).toBe('from-shell');
38
+ });
39
+ });
40
+ //# sourceMappingURL=load-dotenv.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-dotenv.test.js","sourceRoot":"","sources":["../../src/__tests__/load-dotenv.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CACJ,WAAW,CAAC;;;;;CAKjB,CAAC,CACG,CAAC,OAAO,CAAC;YACR,UAAU,EAAE,mCAAmC;YAC/C,YAAY,EAAE,gBAAgB;YAC9B,KAAK,EAAE,EAAE;SACV,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAChE,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,kDAAkD,EAAE,OAAO,CAAC,CAAA;QAC/F,MAAM,SAAS,CACb,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EACvB,8CAA8C,EAC9C,OAAO,CACR,CAAA;QAED,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE;YACpC,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAA;QAEF,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QACpD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAChE,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAAA;QAErE,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;QAEnE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-init.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-init.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mcp-init.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import path from 'node:path';
4
+ import { Command } from 'commander';
5
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
6
+ import { registerMcpCommand } from '../commands/mcp.js';
7
+ /**
8
+ * `actuate mcp:init` retrofits MCP editor configs onto existing projects.
9
+ * Pins the merge contract: other configured servers are never clobbered, an
10
+ * existing `actuate` entry needs `--force`, and both config paths end up
11
+ * git-ignored (they hold a real API key once configured).
12
+ */
13
+ let projectDir;
14
+ let originalCwd;
15
+ async function run(args = []) {
16
+ const program = new Command();
17
+ program.exitOverride();
18
+ registerMcpCommand(program);
19
+ await program.parseAsync(['mcp:init', ...args], { from: 'user' });
20
+ }
21
+ async function readJson(relPath) {
22
+ return JSON.parse(await readFile(path.join(projectDir, relPath), 'utf8'));
23
+ }
24
+ beforeEach(async () => {
25
+ originalCwd = process.cwd();
26
+ projectDir = await mkdtemp(path.join(tmpdir(), 'actuate-mcp-init-'));
27
+ process.chdir(projectDir);
28
+ });
29
+ afterEach(async () => {
30
+ process.chdir(originalCwd);
31
+ process.exitCode = 0;
32
+ await rm(projectDir, { recursive: true, force: true });
33
+ });
34
+ describe('mcp:init', () => {
35
+ it('creates both editor configs with placeholder key and git-ignores them', async () => {
36
+ await writeFile(path.join(projectDir, '.gitignore'), 'node_modules\n', 'utf8');
37
+ await run();
38
+ const cursor = await readJson('.cursor/mcp.json');
39
+ expect(cursor.mcpServers.actuate.command).toBe('npx');
40
+ expect(cursor.mcpServers.actuate.args).toEqual(['-y', '@actuate-media/mcp-server']);
41
+ expect(cursor.mcpServers.actuate.env.ACTUATE_BASE_URL).toBe('http://localhost:3000');
42
+ expect(cursor.mcpServers.actuate.env.ACTUATE_API_KEY).toBe('act_sk_REPLACE_WITH_YOUR_KEY');
43
+ const vscode = await readJson('.vscode/mcp.json');
44
+ expect(vscode.servers.actuate.type).toBe('stdio');
45
+ const gitignore = await readFile(path.join(projectDir, '.gitignore'), 'utf8');
46
+ expect(gitignore).toContain('node_modules');
47
+ expect(gitignore).toContain('.cursor/mcp.json');
48
+ expect(gitignore).toContain('.vscode/mcp.json');
49
+ });
50
+ it('applies --url and --key to both configs', async () => {
51
+ await run(['--url', 'https://example.com', '--key', 'act_sk_real123']);
52
+ const cursor = await readJson('.cursor/mcp.json');
53
+ expect(cursor.mcpServers.actuate.env).toEqual({
54
+ ACTUATE_BASE_URL: 'https://example.com',
55
+ ACTUATE_API_KEY: 'act_sk_real123',
56
+ });
57
+ const vscode = await readJson('.vscode/mcp.json');
58
+ expect(vscode.servers.actuate.env.ACTUATE_BASE_URL).toBe('https://example.com');
59
+ });
60
+ it('merges into an existing config without clobbering other servers', async () => {
61
+ await mkdir(path.join(projectDir, '.cursor'), { recursive: true });
62
+ await writeFile(path.join(projectDir, '.cursor', 'mcp.json'), JSON.stringify({ mcpServers: { sentry: { command: 'sentry-mcp' } } }), 'utf8');
63
+ await run();
64
+ const cursor = await readJson('.cursor/mcp.json');
65
+ expect(cursor.mcpServers.sentry).toEqual({ command: 'sentry-mcp' });
66
+ expect(cursor.mcpServers.actuate).toBeDefined();
67
+ });
68
+ it('leaves an existing actuate entry alone unless --force is passed', async () => {
69
+ await mkdir(path.join(projectDir, '.cursor'), { recursive: true });
70
+ const existing = {
71
+ mcpServers: { actuate: { command: 'custom', env: { ACTUATE_BASE_URL: 'https://keep.me' } } },
72
+ };
73
+ await writeFile(path.join(projectDir, '.cursor', 'mcp.json'), JSON.stringify(existing), 'utf8');
74
+ await run();
75
+ let cursor = await readJson('.cursor/mcp.json');
76
+ expect(cursor.mcpServers.actuate.command).toBe('custom');
77
+ await run(['--force', '--url', 'https://new.example.com']);
78
+ cursor = await readJson('.cursor/mcp.json');
79
+ expect(cursor.mcpServers.actuate.command).toBe('npx');
80
+ expect(cursor.mcpServers.actuate.env.ACTUATE_BASE_URL).toBe('https://new.example.com');
81
+ });
82
+ it('fails on invalid JSON without --force, overwrites with --force', async () => {
83
+ await mkdir(path.join(projectDir, '.cursor'), { recursive: true });
84
+ await writeFile(path.join(projectDir, '.cursor', 'mcp.json'), '{ not json', 'utf8');
85
+ await run();
86
+ expect(process.exitCode).toBe(1);
87
+ process.exitCode = 0;
88
+ await run(['--force']);
89
+ const cursor = await readJson('.cursor/mcp.json');
90
+ expect(cursor.mcpServers.actuate).toBeDefined();
91
+ });
92
+ it('does not duplicate gitignore entries on re-runs', async () => {
93
+ await run();
94
+ await run(['--force']);
95
+ const gitignore = await readFile(path.join(projectDir, '.gitignore'), 'utf8');
96
+ const count = gitignore.split('\n').filter((l) => l.trim() === '.cursor/mcp.json').length;
97
+ expect(count).toBe(1);
98
+ });
99
+ });
100
+ //# sourceMappingURL=mcp-init.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-init.test.js","sourceRoot":"","sources":["../../src/__tests__/mcp-init.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAuGnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB5D;AAsED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8CjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqD5D"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0GnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB5D;AAsED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8CjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqD5D"}
@@ -4,6 +4,7 @@ import chalk from 'chalk';
4
4
  import { buildDeploymentManifest, createDiagnosticReport, detectPackageManager, VERCEL_MATRIX_OPTIONAL, VERCEL_MATRIX_REQUIRED, } from '../deployment/diagnostics.js';
5
5
  import { createVercelClient, readVercelLink, resolveVercelToken, VercelApiError, VERCEL_TARGETS, } from '../vercel/client.js';
6
6
  import { buildEnvMatrix } from '../vercel/env-matrix.js';
7
+ import { loadProjectEnv } from '../utils/load-dotenv.js';
7
8
  import { logger } from '../utils/logger.js';
8
9
  async function fileExists(path) {
9
10
  try {
@@ -69,11 +70,12 @@ async function buildReport(schemaPath, configPath, mode = 'doctor') {
69
70
  readOptionalFile(resolvedConfig),
70
71
  detectProjectPackageManager(),
71
72
  ]);
73
+ const env = await loadProjectEnv(process.cwd());
72
74
  return createDiagnosticReport({
73
75
  schemaModels,
74
76
  schemaContent,
75
77
  configContent,
76
- env: process.env,
78
+ env,
77
79
  packageManager,
78
80
  schemaPath,
79
81
  mode,