create-cartwright 2.0.7 → 2.0.9
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/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +21 -0
- package/dist/inject.js +128 -1
- package/dist/inject.js.map +1 -1
- package/dist/key-step.js +23 -4
- package/dist/key-step.js.map +1 -1
- package/dist/key-step.test.js +19 -0
- package/dist/key-step.test.js.map +1 -1
- package/dist/llm.js +2 -1
- package/dist/llm.js.map +1 -1
- package/dist/skills.d.ts +43 -0
- package/dist/skills.js +97 -0
- package/dist/skills.js.map +1 -0
- package/dist/skills.test.d.ts +1 -0
- package/dist/skills.test.js +117 -0
- package/dist/skills.test.js.map +1 -0
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* [--ref=stable|next|<tag-or-branch>]
|
|
9
9
|
* [--template=website-corporate|coffee|sunglasses|agent-marketplace|generic]
|
|
10
10
|
* [--pm=pnpm|npm|yarn|bun]
|
|
11
|
-
* [--no-install] [--no-git]
|
|
11
|
+
* [--no-install] [--no-git] [--skip-skills]
|
|
12
12
|
*
|
|
13
13
|
* Channels:
|
|
14
14
|
* --ref stable (default) → latest tagged template release
|
|
@@ -32,12 +32,15 @@ import pc from "picocolors";
|
|
|
32
32
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
33
33
|
import { join, resolve } from "node:path";
|
|
34
34
|
import { parseArgs } from "node:util";
|
|
35
|
+
import { fileURLToPath } from "node:url";
|
|
36
|
+
// Read the real version from package.json so the banner never drifts.
|
|
37
|
+
const CLI_VERSION = JSON.parse(readFileSync(join(fileURLToPath(new URL(".", import.meta.url)), "../package.json"), "utf8")).version;
|
|
35
38
|
const TEMPLATE_REPO = "github:Teloz1870/cartwright-template";
|
|
36
39
|
// Default channel resolves to the latest tag mirrored from cartwright-private.
|
|
37
40
|
// Bump together with a Changeset whenever a new template tag goes out —
|
|
38
41
|
// .github/workflows/bump-template-ref.yml does this automatically by opening
|
|
39
42
|
// a PR when it sees a newer tag on the public mirror.
|
|
40
|
-
const DEFAULT_REF = "v0.
|
|
43
|
+
const DEFAULT_REF = "v0.8.0";
|
|
41
44
|
// Channel aliases the user can pass via --ref.
|
|
42
45
|
// stable → DEFAULT_REF (latest tag — what default `npx create-cartwright` uses)
|
|
43
46
|
// next → bleeding-edge branch on the mirror, updated on every push to
|
|
@@ -50,7 +53,8 @@ import { TEMPLATE_SLUGS, detectPackageManager, generateAuthSecret, patchEnvLocal
|
|
|
50
53
|
import { resolveKeyMode } from "./key-step.js";
|
|
51
54
|
import { runInterview } from "./interview.js";
|
|
52
55
|
import { summarizeBuild } from "./approve.js";
|
|
53
|
-
import { injectBriefFiles } from "./inject.js";
|
|
56
|
+
import { injectBriefFiles, injectModernWebDoc } from "./inject.js";
|
|
57
|
+
import { installModernWebGuidance } from "./skills.js";
|
|
54
58
|
function exitOnCancel(value) {
|
|
55
59
|
if (isCancel(value)) {
|
|
56
60
|
cancel("Cancelled.");
|
|
@@ -95,6 +99,7 @@ async function run() {
|
|
|
95
99
|
template: { type: "string" },
|
|
96
100
|
"no-install": { type: "boolean" },
|
|
97
101
|
"no-git": { type: "boolean" },
|
|
102
|
+
"skip-skills": { type: "boolean" },
|
|
98
103
|
},
|
|
99
104
|
});
|
|
100
105
|
// Validate --template if provided. Default is "generic" (full webshop
|
|
@@ -107,7 +112,7 @@ async function run() {
|
|
|
107
112
|
}
|
|
108
113
|
templateSlug = values.template;
|
|
109
114
|
}
|
|
110
|
-
intro(`${pc.bgYellow(pc.black(" create-cartwright "))} ${pc.dim(
|
|
115
|
+
intro(`${pc.bgYellow(pc.black(" create-cartwright "))} ${pc.dim(`v${CLI_VERSION}`)}`);
|
|
111
116
|
// ── Project name ────────────────────────────────────────────────────────
|
|
112
117
|
const defaultName = positionals[0] ?? "my-cartwright-shop";
|
|
113
118
|
const projectName = values.yes
|
|
@@ -189,6 +194,7 @@ async function run() {
|
|
|
189
194
|
const packageManager = values.pm ?? detected;
|
|
190
195
|
const installDeps = !values["no-install"];
|
|
191
196
|
const initGit = !values["no-git"];
|
|
197
|
+
const skipSkills = values["skip-skills"] === true;
|
|
192
198
|
const requestedRef = values.ref ?? "stable";
|
|
193
199
|
const templateRef = REF_ALIASES[requestedRef] ?? requestedRef;
|
|
194
200
|
// ── Pre-flight ──────────────────────────────────────────────────────────
|
|
@@ -233,6 +239,10 @@ async function run() {
|
|
|
233
239
|
// known shape. Always run — for `--template generic` (the default) the
|
|
234
240
|
// patches are no-ops on a generic-defaulted brand.config.
|
|
235
241
|
applyTemplateDefaults(targetDir, templateSlug);
|
|
242
|
+
// Phase D4 — write a customer-facing MODERN_WEB.md inventory listing every
|
|
243
|
+
// modern web platform feature Cartwright wires up out of the box. Doubles
|
|
244
|
+
// as marketing copy for the customer to lift into their own product page.
|
|
245
|
+
injectModernWebDoc(targetDir);
|
|
236
246
|
if (templateSlug !== "generic") {
|
|
237
247
|
note(`Template: ${pc.bold(templateSlug)} — applied mode + features defaults to brand.config.ts`, "info");
|
|
238
248
|
}
|
|
@@ -255,6 +265,15 @@ async function run() {
|
|
|
255
265
|
installSpinner.stop(pc.yellow(`Install failed — run \`${packageManager} install\` in ${projectName} manually.`));
|
|
256
266
|
}
|
|
257
267
|
}
|
|
268
|
+
// ── AI-agent skills ─────────────────────────────────────────────────────
|
|
269
|
+
// Cartwright's own skill (cartwright-guidance) ships in the template under
|
|
270
|
+
// .claude/skills/. This additional step installs Chrome team's upstream
|
|
271
|
+
// modern-web-guidance skill globally on the customer's machine. Best-effort:
|
|
272
|
+
// declines, timeouts, and errors degrade to a note — never block scaffold.
|
|
273
|
+
await installModernWebGuidance(targetDir, {
|
|
274
|
+
skip: skipSkills,
|
|
275
|
+
assumeYes: values.yes === true,
|
|
276
|
+
});
|
|
258
277
|
// ── Next steps ──────────────────────────────────────────────────────────
|
|
259
278
|
const runCmd = packageManager === "npm" ? "npm run" : packageManager;
|
|
260
279
|
const aiHint = withAi
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/inject.d.ts
CHANGED
|
@@ -1,2 +1,23 @@
|
|
|
1
1
|
import { type ShopBrief } from "./brief.js";
|
|
2
2
|
export declare function injectBriefFiles(targetDir: string, brief: ShopBrief): void;
|
|
3
|
+
/**
|
|
4
|
+
* Phase D4 — write `MODERN_WEB.md` into the scaffolded project listing
|
|
5
|
+
* every modern web platform feature Cartwright wires up out of the box.
|
|
6
|
+
*
|
|
7
|
+
* The doc is meant for two audiences:
|
|
8
|
+
*
|
|
9
|
+
* 1. The customer's AI coding agent (Claude Code / Cursor / Copilot) —
|
|
10
|
+
* so when the agent reads the project, it has a clear inventory of
|
|
11
|
+
* the platform features available without having to grep the source.
|
|
12
|
+
* 2. The customer's own marketing — every entry here is something the
|
|
13
|
+
* customer can claim about their site, lifted straight into a
|
|
14
|
+
* product page, About section, or developer blurb.
|
|
15
|
+
*
|
|
16
|
+
* Unconditional injection: every scaffold gets the file. Feature flags
|
|
17
|
+
* are listed alongside each entry so the customer can see what is on by
|
|
18
|
+
* default vs opt-in for their template (`brand.features.*`).
|
|
19
|
+
*
|
|
20
|
+
* Idempotent: callers can safely re-run; the file is always overwritten
|
|
21
|
+
* with the current snapshot of features the CLI knows about.
|
|
22
|
+
*/
|
|
23
|
+
export declare function injectModernWebDoc(targetDir: string): void;
|
package/dist/inject.js
CHANGED
|
@@ -15,7 +15,134 @@ export function injectBriefFiles(targetDir, brief) {
|
|
|
15
15
|
writeFileSync(join(cssDir, `${brief.slug}.css`), generateThemeCss(brief));
|
|
16
16
|
writeFileSync(join(promptsDir, `${brief.slug}.ts`), generatePromptModule(brief));
|
|
17
17
|
writeFileSync(join(seedsDir, "seed-data.ts"), generateSeedData(brief));
|
|
18
|
-
// TODO: Opdater industry-templates/index.ts for at registrere den nye seed, men
|
|
18
|
+
// TODO: Opdater industry-templates/index.ts for at registrere den nye seed, men
|
|
19
19
|
// det falder måske under advanced M2 scope, eller vi kan lave et simpelt append her:
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Phase D4 — write `MODERN_WEB.md` into the scaffolded project listing
|
|
23
|
+
* every modern web platform feature Cartwright wires up out of the box.
|
|
24
|
+
*
|
|
25
|
+
* The doc is meant for two audiences:
|
|
26
|
+
*
|
|
27
|
+
* 1. The customer's AI coding agent (Claude Code / Cursor / Copilot) —
|
|
28
|
+
* so when the agent reads the project, it has a clear inventory of
|
|
29
|
+
* the platform features available without having to grep the source.
|
|
30
|
+
* 2. The customer's own marketing — every entry here is something the
|
|
31
|
+
* customer can claim about their site, lifted straight into a
|
|
32
|
+
* product page, About section, or developer blurb.
|
|
33
|
+
*
|
|
34
|
+
* Unconditional injection: every scaffold gets the file. Feature flags
|
|
35
|
+
* are listed alongside each entry so the customer can see what is on by
|
|
36
|
+
* default vs opt-in for their template (`brand.features.*`).
|
|
37
|
+
*
|
|
38
|
+
* Idempotent: callers can safely re-run; the file is always overwritten
|
|
39
|
+
* with the current snapshot of features the CLI knows about.
|
|
40
|
+
*/
|
|
41
|
+
export function injectModernWebDoc(targetDir) {
|
|
42
|
+
writeFileSync(join(targetDir, "MODERN_WEB.md"), MODERN_WEB_MD);
|
|
43
|
+
}
|
|
44
|
+
const MODERN_WEB_MD = `# Cartwright Modern Web Baseline
|
|
45
|
+
|
|
46
|
+
Your Cartwright store ships with these modern web platform features wired up out of the box. Each one is built into Cartwright's default code — you don't need to write the boilerplate. Some are on by default; some are opt-in via \`brand.features.*\` in your \`brand.config.ts\`.
|
|
47
|
+
|
|
48
|
+
**For your AI coding agent:** this file is a directory of capabilities. Whenever you're asked to "add a modal", "speed up the cart", "make the page accessible", reach for the listed primitive first, not a third-party library.
|
|
49
|
+
|
|
50
|
+
**For your marketing:** every line here is a real, shipping feature you can list on your product page.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Structured data (the AI-citation lever)
|
|
55
|
+
|
|
56
|
+
| Feature | Status | Where |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| JSON-LD: \`Organization\` | ✅ on root layout | \`components/JsonLd.tsx\` |
|
|
59
|
+
| JSON-LD: \`Product\` + \`Offer\` | ✅ on every PDP | \`app/[locale]/product/[slug]/page.tsx\` |
|
|
60
|
+
| JSON-LD: \`BreadcrumbList\` | ✅ on PLP + PDP | server-side via JsonLd helper |
|
|
61
|
+
| JSON-LD: \`AggregateRating\` | gated by \`brand.features.reviews\` | rendered on PDP when reviews are on |
|
|
62
|
+
|
|
63
|
+
Schema.org markup is what AI search engines (Google AI Overviews, Perplexity, ChatGPT browse) cite. Cartwright ships all structured data server-side — crawlers and LLM-scrapers see it without executing JS.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Accessibility baseline (Phase B1)
|
|
68
|
+
|
|
69
|
+
| Feature | Status | Where |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| \`aria-live\` announcements (cart adds, review submits, errors) | ✅ always on | \`components/a11y/LiveRegion.tsx\` |
|
|
72
|
+
| \`prefers-reduced-motion\` respected | ✅ in globals.css + components | \`app/[locale]/globals.css\`, RevealOnScroll |
|
|
73
|
+
| Focus management on modals | gated by \`brand.features.popoverApi\` | native \`<dialog>\` when on |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Performance baseline (Phase 0 + B2)
|
|
78
|
+
|
|
79
|
+
| Feature | Status | Where |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| Self-hosted Web Vitals (INP/LCP/CLS/FCP/TTFB) | gated by \`brand.features.webVitals\` | \`/api/vitals\` + \`/admin/performance\` |
|
|
82
|
+
| \`fetchpriority="high"\` on LCP candidates | ✅ via next/image \`priority\` prop | PDP hero, PLP first cards |
|
|
83
|
+
| \`loading="lazy"\` below the fold | ✅ next/image default + manual on raw imgs | every \`<Image>\` below-fold |
|
|
84
|
+
| \`decoding="async"\` on raw imgs | ✅ on case studies + tech badges | various |
|
|
85
|
+
| Save-data respect on heavy assets | ✅ in HeroVideo | \`components/HeroVideo.tsx\` |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Modern UI primitives (Phase B3 + B4)
|
|
90
|
+
|
|
91
|
+
| Feature | Status | Where |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| Container queries on ProductCard | gated by \`brand.features.containerQueries\` | \`@sm:\` Tailwind v4 variants |
|
|
94
|
+
| Native \`<dialog>\` + Popover API for modals | gated by \`brand.features.popoverApi\` | \`components/WelcomeGuide.tsx\` |
|
|
95
|
+
| Runtime feature detection (\`<dialog>\`, popover, view transitions) | ✅ always available | \`lib/features.ts\` |
|
|
96
|
+
| CSS \`interpolate-size\` on native \`<details>\` | ✅ Phase 1a | accordion + FAQ sections |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Navigation (Phase B5)
|
|
101
|
+
|
|
102
|
+
| Feature | Status | Where |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| View Transitions on PLP → PDP | gated by \`brand.features.viewTransitions\` | \`app/lib/view-transitions.ts\`, \`TransitionLink\` |
|
|
105
|
+
| Shared \`view-transition-name\` on hero image | ✅ when viewTransitions flag is on | PLP card + PDP hero |
|
|
106
|
+
| Graceful fallback in non-supporting browsers (Firefox) | ✅ automatic | wrapNavigation runs nav directly |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Authentication (Phase 5b)
|
|
111
|
+
|
|
112
|
+
| Feature | Status | Where |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| Passkey UI scaffolding | gated by \`brand.features.passkeys\` | \`/account/security\`, \`/api/auth/passkey/*\` |
|
|
115
|
+
| Magic-link fallback | ✅ always on | NextAuth + Resend |
|
|
116
|
+
|
|
117
|
+
> WebAuthn ceremony wiring is in progress. Check the \`cartwright-guidance\` skill for current status.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## AI-agent integrations
|
|
122
|
+
|
|
123
|
+
| Feature | Status | Where |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| Project-level \`CLAUDE.md\` for Claude Code | ✅ shipped in scaffold | \`.claude/CLAUDE.md\` |
|
|
126
|
+
| Project-level Cursor rules | ✅ shipped in scaffold | \`.cursor/rules/cartwright.mdc\` |
|
|
127
|
+
| GitHub Copilot instructions | ✅ shipped in scaffold | \`.github/copilot-instructions.md\` |
|
|
128
|
+
| \`cartwright-guidance\` agent skill | ✅ shipped in scaffold | \`.claude/skills/cartwright-guidance/SKILL.md\` |
|
|
129
|
+
| \`modern-web-guidance\` (Chrome team) skill | installed during scaffold (optional) | global \`~/.agents/skills/\` |
|
|
130
|
+
| MCP server (\`/api/mcp\`) | gated by \`brand.features.mcpPublic\` | exposes tools to AI agents |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Turning features on
|
|
135
|
+
|
|
136
|
+
Open \`brand.config.ts\`, find the \`features\` object, and flip the flag from \`false\` to \`true\`. Each flag has a JSDoc comment explaining what it switches on and any dependencies.
|
|
137
|
+
|
|
138
|
+
Typical first steps for a fresh shop:
|
|
139
|
+
- \`webshop: true\` — unlock cart, checkout, account routes (set automatically by \`--template coffee\` / \`--template sunglasses\` / \`--template generic\`)
|
|
140
|
+
- \`webVitals: true\` (after \`consentBanner: true\`) — start collecting CWV data on real customer traffic
|
|
141
|
+
- \`reviews: true\` — turn on the moderation flow and \`AggregateRating\` JSON-LD
|
|
142
|
+
- \`containerQueries: true\`, \`popoverApi: true\`, \`viewTransitions: true\` — opt in to the Phase B baseline
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
_Generated by \`create-cartwright\`. Edit freely — Cartwright won't overwrite this file on later runs._
|
|
147
|
+
`;
|
|
21
148
|
//# sourceMappingURL=inject.js.map
|
package/dist/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAgB;IAClE,eAAe;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,cAAc;IACd,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvE,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAgB;IAClE,eAAe;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,cAAc;IACd,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvE,gFAAgF;IAChF,qFAAqF;AACvF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGrB,CAAC"}
|
package/dist/key-step.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { validateKey } from "./llm.js";
|
|
2
|
+
// Returns true (key works), false (key rejected — re-prompt), or "unavailable"
|
|
3
|
+
// (couldn't reach/validate the API, e.g. 404 from a retired model, 5xx, network).
|
|
4
|
+
// "unavailable" must never crash the scaffolder — we fall back to manual (v1).
|
|
5
|
+
async function check(key) {
|
|
6
|
+
try {
|
|
7
|
+
return await validateKey(key);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return "unavailable";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
2
13
|
export async function resolveKeyMode(deps) {
|
|
3
14
|
let currentKey = deps.getEnvKey();
|
|
4
15
|
if (currentKey) {
|
|
5
|
-
|
|
6
|
-
if (isValid)
|
|
16
|
+
if ((await check(currentKey)) === true)
|
|
7
17
|
return { type: "key", key: currentKey };
|
|
8
18
|
}
|
|
9
19
|
while (true) {
|
|
@@ -14,9 +24,18 @@ export async function resolveKeyMode(deps) {
|
|
|
14
24
|
return { type: "manual" };
|
|
15
25
|
throw new Error("abort");
|
|
16
26
|
}
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
27
|
+
const result = await check(currentKey);
|
|
28
|
+
if (result === true)
|
|
19
29
|
return { type: "key", key: currentKey };
|
|
30
|
+
if (result === "unavailable") {
|
|
31
|
+
// Validation infra is down (or the model was retired) — don't loop forever
|
|
32
|
+
// asking for a key we can't check. Offer the v1 manual scaffold instead.
|
|
33
|
+
const isManualOk = await deps.confirmManual();
|
|
34
|
+
if (isManualOk)
|
|
35
|
+
return { type: "manual" };
|
|
36
|
+
throw new Error("abort");
|
|
37
|
+
}
|
|
38
|
+
// result === false → key was actually rejected; loop and re-prompt.
|
|
20
39
|
}
|
|
21
40
|
}
|
|
22
41
|
//# sourceMappingURL=key-step.js.map
|
package/dist/key-step.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-step.js","sourceRoot":"","sources":["../src/key-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAUvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAiB;IACpD,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAElC,IAAI,UAAU,EAAE,CAAC;QACf,
|
|
1
|
+
{"version":3,"file":"key-step.js","sourceRoot":"","sources":["../src/key-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAUvC,+EAA+E;AAC/E,kFAAkF;AAClF,+EAA+E;AAC/E,KAAK,UAAU,KAAK,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAiB;IACpD,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAElC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IAClF,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,UAAU;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;QAC7D,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,2EAA2E;YAC3E,yEAAyE;YACzE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,UAAU;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,oEAAoE;IACtE,CAAC;AACH,CAAC"}
|
package/dist/key-step.test.js
CHANGED
|
@@ -52,5 +52,24 @@ describe("resolveKeyMode", () => {
|
|
|
52
52
|
confirmManual: async () => false,
|
|
53
53
|
})).rejects.toThrow(/abort/i);
|
|
54
54
|
});
|
|
55
|
+
it("falder tilbage til manual hvis validateKey kaster (fx 404 / retired model)", async () => {
|
|
56
|
+
// Regression: en retired Gemini-model gav 404 → validateKey kastede →
|
|
57
|
+
// hele CLI'en crashede med 'Unexpected status 404'. Nu skal den degradere.
|
|
58
|
+
vi.mocked(llm.validateKey).mockRejectedValueOnce(new Error("Unexpected status 404"));
|
|
59
|
+
const res = await resolveKeyMode({
|
|
60
|
+
getEnvKey: () => undefined,
|
|
61
|
+
promptKey: async () => "some-key",
|
|
62
|
+
confirmManual: async () => true,
|
|
63
|
+
});
|
|
64
|
+
expect(res).toEqual({ type: "manual" });
|
|
65
|
+
});
|
|
66
|
+
it("crasher ikke når validateKey kaster — aborts pænt hvis manual afvises", async () => {
|
|
67
|
+
vi.mocked(llm.validateKey).mockRejectedValueOnce(new Error("Unexpected status 500"));
|
|
68
|
+
await expect(resolveKeyMode({
|
|
69
|
+
getEnvKey: () => undefined,
|
|
70
|
+
promptKey: async () => "some-key",
|
|
71
|
+
confirmManual: async () => false,
|
|
72
|
+
})).rejects.toThrow(/abort/i);
|
|
73
|
+
});
|
|
55
74
|
});
|
|
56
75
|
//# sourceMappingURL=key-step.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-step.test.js","sourceRoot":"","sources":["../src/key-step.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"key-step.test.js","sourceRoot":"","sources":["../src/key-step.test.ts"],"names":[],"mappings":"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"}
|
package/dist/llm.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
const
|
|
1
|
+
const GEMINI_MODEL = "gemini-2.0-flash";
|
|
2
|
+
const GEMINI_API_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent`;
|
|
2
3
|
export async function validateKey(key) {
|
|
3
4
|
try {
|
|
4
5
|
const res = await fetch(`${GEMINI_API_URL}?key=${key}`, {
|
package/dist/llm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,cAAc,GAAG,2DAA2D,YAAY,kBAAkB,CAAC;AAEjH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,QAAQ,GAAG,EAAE,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;aACzD,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,MAAc,EAAE,UAAmB;IACjF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,QAAQ,GAAG,EAAE,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACvD,gBAAgB,EAAE;gBAChB,gBAAgB,EAAE,kBAAkB;gBACpC,cAAc,EAAE,UAAU;aAC3B;SACF,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,+BAA+B,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAQ,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pinned version of the upstream skill. modern-web-guidance is pre-1.0
|
|
3
|
+
* (last surveyed: 2026-05-26), so an unpinned `@latest` would risk silent
|
|
4
|
+
* API drift between scaffolds. A scheduled workflow in
|
|
5
|
+
* `.github/workflows/bump-modern-web-guidance.yml` opens a PR when a newer
|
|
6
|
+
* version appears upstream; merge gates on manual review of the changelog.
|
|
7
|
+
*
|
|
8
|
+
* Once upstream hits 1.0, switch this to a semver range like "^1.0.0" and
|
|
9
|
+
* retire the bump workflow.
|
|
10
|
+
*/
|
|
11
|
+
export declare const MODERN_WEB_GUIDANCE_VERSION = "0.0.170";
|
|
12
|
+
/**
|
|
13
|
+
* Generous upper bound. modern-web-guidance is ~36 MB; on a typical
|
|
14
|
+
* connection the install finishes in 10–20s. 30s gives slow networks room
|
|
15
|
+
* without making the customer wait forever on a hung registry call.
|
|
16
|
+
*/
|
|
17
|
+
export declare const SKILL_INSTALL_TIMEOUT_MS = 30000;
|
|
18
|
+
export type InstallSkillOpts = {
|
|
19
|
+
/** Skip the prompt entirely (set by --skip-skills). */
|
|
20
|
+
skip?: boolean;
|
|
21
|
+
/** Bypass the prompt and install unconditionally (set by --yes). */
|
|
22
|
+
assumeYes?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type InstallSkillResult = {
|
|
25
|
+
status: "skipped";
|
|
26
|
+
reason: "flag" | "declined" | "cancelled";
|
|
27
|
+
} | {
|
|
28
|
+
status: "installed";
|
|
29
|
+
version: string;
|
|
30
|
+
} | {
|
|
31
|
+
status: "failed";
|
|
32
|
+
reason: "timeout" | "error";
|
|
33
|
+
error?: Error;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Side-effecting npx install. Separated from the prompt flow so the test
|
|
37
|
+
* suite can stub it directly. Never throws; always returns a result struct.
|
|
38
|
+
*/
|
|
39
|
+
export declare function tryInstallSkill(targetDir: string): InstallSkillResult;
|
|
40
|
+
/**
|
|
41
|
+
* Prompt + install. Best-effort; never blocks scaffold completion.
|
|
42
|
+
*/
|
|
43
|
+
export declare function installModernWebGuidance(targetDir: string, opts?: InstallSkillOpts): Promise<InstallSkillResult>;
|
package/dist/skills.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-agent skills installer.
|
|
3
|
+
*
|
|
4
|
+
* After the template snapshot is downloaded and dependencies installed, the
|
|
5
|
+
* CLI optionally runs Chrome team's `modern-web-guidance` skill installer in
|
|
6
|
+
* the customer's project directory. That places the skill in their machine's
|
|
7
|
+
* agent-skills location (typically `~/.agents/skills/`) so Claude Code,
|
|
8
|
+
* Cursor, and Copilot all see it on first session.
|
|
9
|
+
*
|
|
10
|
+
* The Cartwright-specific skill scaffolding (`.claude/skills/cartwright-guidance/`,
|
|
11
|
+
* `.cursor/rules/`, `.github/copilot-instructions.md`) is part of the template
|
|
12
|
+
* itself and ships unconditionally — this module only handles the upstream
|
|
13
|
+
* Chrome-team install.
|
|
14
|
+
*
|
|
15
|
+
* Best-effort throughout: declines, timeouts, and errors degrade gracefully
|
|
16
|
+
* to a printed note. The scaffold itself never fails because of this step.
|
|
17
|
+
*/
|
|
18
|
+
import { execSync } from "node:child_process";
|
|
19
|
+
import { confirm, isCancel, note, spinner } from "@clack/prompts";
|
|
20
|
+
import pc from "picocolors";
|
|
21
|
+
/**
|
|
22
|
+
* Pinned version of the upstream skill. modern-web-guidance is pre-1.0
|
|
23
|
+
* (last surveyed: 2026-05-26), so an unpinned `@latest` would risk silent
|
|
24
|
+
* API drift between scaffolds. A scheduled workflow in
|
|
25
|
+
* `.github/workflows/bump-modern-web-guidance.yml` opens a PR when a newer
|
|
26
|
+
* version appears upstream; merge gates on manual review of the changelog.
|
|
27
|
+
*
|
|
28
|
+
* Once upstream hits 1.0, switch this to a semver range like "^1.0.0" and
|
|
29
|
+
* retire the bump workflow.
|
|
30
|
+
*/
|
|
31
|
+
export const MODERN_WEB_GUIDANCE_VERSION = "0.0.170";
|
|
32
|
+
/**
|
|
33
|
+
* Generous upper bound. modern-web-guidance is ~36 MB; on a typical
|
|
34
|
+
* connection the install finishes in 10–20s. 30s gives slow networks room
|
|
35
|
+
* without making the customer wait forever on a hung registry call.
|
|
36
|
+
*/
|
|
37
|
+
export const SKILL_INSTALL_TIMEOUT_MS = 30_000;
|
|
38
|
+
/**
|
|
39
|
+
* Side-effecting npx install. Separated from the prompt flow so the test
|
|
40
|
+
* suite can stub it directly. Never throws; always returns a result struct.
|
|
41
|
+
*/
|
|
42
|
+
export function tryInstallSkill(targetDir) {
|
|
43
|
+
try {
|
|
44
|
+
execSync(`npx --yes modern-web-guidance@${MODERN_WEB_GUIDANCE_VERSION} install --yes`, {
|
|
45
|
+
cwd: targetDir,
|
|
46
|
+
stdio: "ignore",
|
|
47
|
+
timeout: SKILL_INSTALL_TIMEOUT_MS,
|
|
48
|
+
});
|
|
49
|
+
return { status: "installed", version: MODERN_WEB_GUIDANCE_VERSION };
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const error = err;
|
|
53
|
+
// execSync kills the child with SIGTERM (default `killSignal`) when the
|
|
54
|
+
// timeout fires; some environments also surface ETIMEDOUT.
|
|
55
|
+
if (error.signal === "SIGTERM" || error.code === "ETIMEDOUT") {
|
|
56
|
+
return { status: "failed", reason: "timeout", error };
|
|
57
|
+
}
|
|
58
|
+
return { status: "failed", reason: "error", error };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Prompt + install. Best-effort; never blocks scaffold completion.
|
|
63
|
+
*/
|
|
64
|
+
export async function installModernWebGuidance(targetDir, opts = {}) {
|
|
65
|
+
if (opts.skip) {
|
|
66
|
+
return { status: "skipped", reason: "flag" };
|
|
67
|
+
}
|
|
68
|
+
let accept = opts.assumeYes === true;
|
|
69
|
+
if (!opts.assumeYes) {
|
|
70
|
+
const answer = await confirm({
|
|
71
|
+
message: "Install Chrome team's Modern Web Guidance skill for your AI coding agent? (recommended)",
|
|
72
|
+
initialValue: true,
|
|
73
|
+
});
|
|
74
|
+
if (isCancel(answer)) {
|
|
75
|
+
return { status: "skipped", reason: "cancelled" };
|
|
76
|
+
}
|
|
77
|
+
accept = answer === true;
|
|
78
|
+
}
|
|
79
|
+
if (!accept) {
|
|
80
|
+
note(pc.dim(`Skipped. Install later with:\n npx modern-web-guidance@${MODERN_WEB_GUIDANCE_VERSION} install`), "info");
|
|
81
|
+
return { status: "skipped", reason: "declined" };
|
|
82
|
+
}
|
|
83
|
+
const sp = spinner();
|
|
84
|
+
sp.start(`Installing modern-web-guidance@${MODERN_WEB_GUIDANCE_VERSION} (Chrome team)…`);
|
|
85
|
+
const result = tryInstallSkill(targetDir);
|
|
86
|
+
if (result.status === "installed") {
|
|
87
|
+
sp.stop(pc.green(`Modern Web Guidance skill installed (v${result.version}).`));
|
|
88
|
+
}
|
|
89
|
+
else if (result.reason === "timeout") {
|
|
90
|
+
sp.stop(pc.yellow(`Modern Web Guidance install timed out after ${SKILL_INSTALL_TIMEOUT_MS / 1000}s — run \`npx modern-web-guidance@${MODERN_WEB_GUIDANCE_VERSION} install\` manually later.`));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
sp.stop(pc.yellow(`Modern Web Guidance install failed — run \`npx modern-web-guidance@${MODERN_WEB_GUIDANCE_VERSION} install\` manually later.`));
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
// Mock child_process so we never actually shell out to npx.
|
|
3
|
+
const execSyncMock = vi.fn();
|
|
4
|
+
vi.mock("node:child_process", () => ({
|
|
5
|
+
execSync: (...args) => execSyncMock(...args),
|
|
6
|
+
}));
|
|
7
|
+
// Mock @clack/prompts so we control confirm() answers + silence spinners/notes.
|
|
8
|
+
const confirmMock = vi.fn();
|
|
9
|
+
vi.mock("@clack/prompts", () => ({
|
|
10
|
+
confirm: (...args) => confirmMock(...args),
|
|
11
|
+
isCancel: (v) => typeof v === "symbol",
|
|
12
|
+
note: () => undefined,
|
|
13
|
+
spinner: () => ({
|
|
14
|
+
start: () => undefined,
|
|
15
|
+
stop: () => undefined,
|
|
16
|
+
}),
|
|
17
|
+
}));
|
|
18
|
+
// Import the module under test AFTER the mocks are registered.
|
|
19
|
+
const { installModernWebGuidance, tryInstallSkill, MODERN_WEB_GUIDANCE_VERSION, SKILL_INSTALL_TIMEOUT_MS, } = await import("./skills");
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
execSyncMock.mockReset();
|
|
22
|
+
confirmMock.mockReset();
|
|
23
|
+
});
|
|
24
|
+
describe("installModernWebGuidance — branches", () => {
|
|
25
|
+
it("--skip-skills flag → no prompt, no install, returns skipped/flag", async () => {
|
|
26
|
+
const result = await installModernWebGuidance("/tmp/x", { skip: true });
|
|
27
|
+
expect(result).toEqual({ status: "skipped", reason: "flag" });
|
|
28
|
+
expect(confirmMock).not.toHaveBeenCalled();
|
|
29
|
+
expect(execSyncMock).not.toHaveBeenCalled();
|
|
30
|
+
});
|
|
31
|
+
it("--yes flag → no prompt, installs unconditionally", async () => {
|
|
32
|
+
execSyncMock.mockReturnValueOnce(Buffer.from(""));
|
|
33
|
+
const result = await installModernWebGuidance("/tmp/x", {
|
|
34
|
+
assumeYes: true,
|
|
35
|
+
});
|
|
36
|
+
expect(confirmMock).not.toHaveBeenCalled();
|
|
37
|
+
expect(execSyncMock).toHaveBeenCalledTimes(1);
|
|
38
|
+
expect(result.status).toBe("installed");
|
|
39
|
+
});
|
|
40
|
+
it("prompt accept → npx invoked with pinned version + cwd=targetDir", async () => {
|
|
41
|
+
confirmMock.mockResolvedValueOnce(true);
|
|
42
|
+
execSyncMock.mockReturnValueOnce(Buffer.from(""));
|
|
43
|
+
const result = await installModernWebGuidance("/tmp/foo");
|
|
44
|
+
expect(confirmMock).toHaveBeenCalledTimes(1);
|
|
45
|
+
expect(execSyncMock).toHaveBeenCalledTimes(1);
|
|
46
|
+
const [cmd, opts] = execSyncMock.mock.calls[0];
|
|
47
|
+
expect(cmd).toContain(`modern-web-guidance@${MODERN_WEB_GUIDANCE_VERSION}`);
|
|
48
|
+
expect(cmd).toContain("install");
|
|
49
|
+
expect(opts).toMatchObject({
|
|
50
|
+
cwd: "/tmp/foo",
|
|
51
|
+
timeout: SKILL_INSTALL_TIMEOUT_MS,
|
|
52
|
+
});
|
|
53
|
+
expect(result).toEqual({
|
|
54
|
+
status: "installed",
|
|
55
|
+
version: MODERN_WEB_GUIDANCE_VERSION,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it("prompt decline → no install, returns skipped/declined", async () => {
|
|
59
|
+
confirmMock.mockResolvedValueOnce(false);
|
|
60
|
+
const result = await installModernWebGuidance("/tmp/foo");
|
|
61
|
+
expect(confirmMock).toHaveBeenCalledTimes(1);
|
|
62
|
+
expect(execSyncMock).not.toHaveBeenCalled();
|
|
63
|
+
expect(result).toEqual({ status: "skipped", reason: "declined" });
|
|
64
|
+
});
|
|
65
|
+
it("prompt cancelled (Ctrl+C) → no install, returns skipped/cancelled", async () => {
|
|
66
|
+
confirmMock.mockResolvedValueOnce(Symbol("cancel"));
|
|
67
|
+
const result = await installModernWebGuidance("/tmp/foo");
|
|
68
|
+
expect(execSyncMock).not.toHaveBeenCalled();
|
|
69
|
+
expect(result).toEqual({ status: "skipped", reason: "cancelled" });
|
|
70
|
+
});
|
|
71
|
+
it("install timeout → failed/timeout, scaffold proceeds (no throw)", async () => {
|
|
72
|
+
confirmMock.mockResolvedValueOnce(true);
|
|
73
|
+
const err = Object.assign(new Error("ETIMEDOUT"), {
|
|
74
|
+
signal: "SIGTERM",
|
|
75
|
+
});
|
|
76
|
+
execSyncMock.mockImplementationOnce(() => {
|
|
77
|
+
throw err;
|
|
78
|
+
});
|
|
79
|
+
const result = await installModernWebGuidance("/tmp/foo");
|
|
80
|
+
expect(result.status).toBe("failed");
|
|
81
|
+
if (result.status === "failed") {
|
|
82
|
+
expect(result.reason).toBe("timeout");
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
it("install error (non-timeout) → failed/error, scaffold proceeds", async () => {
|
|
86
|
+
confirmMock.mockResolvedValueOnce(true);
|
|
87
|
+
execSyncMock.mockImplementationOnce(() => {
|
|
88
|
+
throw new Error("network down");
|
|
89
|
+
});
|
|
90
|
+
const result = await installModernWebGuidance("/tmp/foo");
|
|
91
|
+
expect(result.status).toBe("failed");
|
|
92
|
+
if (result.status === "failed") {
|
|
93
|
+
expect(result.reason).toBe("error");
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("tryInstallSkill — pure invocation", () => {
|
|
98
|
+
it("pins to MODERN_WEB_GUIDANCE_VERSION", () => {
|
|
99
|
+
execSyncMock.mockReturnValueOnce(Buffer.from(""));
|
|
100
|
+
tryInstallSkill("/tmp/x");
|
|
101
|
+
const [cmd] = execSyncMock.mock.calls[0];
|
|
102
|
+
expect(cmd).toContain(`@${MODERN_WEB_GUIDANCE_VERSION}`);
|
|
103
|
+
expect(cmd).not.toContain("@latest");
|
|
104
|
+
});
|
|
105
|
+
it("ETIMEDOUT code surfaces as timeout reason", () => {
|
|
106
|
+
const err = Object.assign(new Error("timed out"), { code: "ETIMEDOUT" });
|
|
107
|
+
execSyncMock.mockImplementationOnce(() => {
|
|
108
|
+
throw err;
|
|
109
|
+
});
|
|
110
|
+
const result = tryInstallSkill("/tmp/x");
|
|
111
|
+
expect(result.status).toBe("failed");
|
|
112
|
+
if (result.status === "failed") {
|
|
113
|
+
expect(result.reason).toBe("timeout");
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=skills.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../src/skills.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-cartwright",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.9",
|
|
4
4
|
"description": "Scaffolder for AI-first webshops powered by Cartwright",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cartwright",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"eslint": "^9.0.0",
|
|
33
33
|
"tsx": "^4.19.0",
|
|
34
34
|
"typescript": "^5.7.0",
|
|
35
|
+
"typescript-eslint": "^8.0.0",
|
|
35
36
|
"vitest": "^4.1.7"
|
|
36
37
|
},
|
|
37
38
|
"engines": {
|