@stratawp/cli 2.0.4 → 2.1.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.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-YCJH2PCK.js +15 -0
  3. package/dist/create.js +4 -4
  4. package/dist/index.js +4 -1
  5. package/package.json +1 -1
  6. package/templates/advanced-theme/.ai/ONBOARDING.md +44 -0
  7. package/templates/advanced-theme/.ai/PROJECT_RULES.md +58 -0
  8. package/templates/advanced-theme/.ai/SKILLS.md +20 -0
  9. package/templates/advanced-theme/.ai/agent-state.md +21 -0
  10. package/templates/advanced-theme/.ai/developer-directions.md +41 -0
  11. package/templates/advanced-theme/.ai/plans/SPEC-TEMPLATE.md +37 -0
  12. package/templates/advanced-theme/.ai/skills/architecture/SKILL.md +43 -0
  13. package/templates/advanced-theme/.ai/skills/deployment/SKILL.md +34 -0
  14. package/templates/advanced-theme/.ai/skills/gutenberg-blocks/SKILL.md +34 -0
  15. package/templates/advanced-theme/.aiignore +42 -0
  16. package/templates/advanced-theme/AGENTS.md +42 -0
  17. package/templates/advanced-theme/package.json +3 -1
  18. package/templates/advanced-theme/scripts/ai-setup.mjs +143 -0
  19. package/templates/basic-theme/.ai/ONBOARDING.md +44 -0
  20. package/templates/basic-theme/.ai/PROJECT_RULES.md +58 -0
  21. package/templates/basic-theme/.ai/SKILLS.md +20 -0
  22. package/templates/basic-theme/.ai/agent-state.md +21 -0
  23. package/templates/basic-theme/.ai/developer-directions.md +41 -0
  24. package/templates/basic-theme/.ai/plans/SPEC-TEMPLATE.md +37 -0
  25. package/templates/basic-theme/.ai/skills/architecture/SKILL.md +43 -0
  26. package/templates/basic-theme/.ai/skills/deployment/SKILL.md +34 -0
  27. package/templates/basic-theme/.ai/skills/gutenberg-blocks/SKILL.md +34 -0
  28. package/templates/basic-theme/.aiignore +42 -0
  29. package/templates/basic-theme/AGENTS.md +42 -0
  30. package/templates/basic-theme/package.json +3 -1
  31. package/templates/basic-theme/scripts/ai-setup.mjs +143 -0
  32. package/templates/store-theme/.ai/ONBOARDING.md +44 -0
  33. package/templates/store-theme/.ai/PROJECT_RULES.md +58 -0
  34. package/templates/store-theme/.ai/SKILLS.md +20 -0
  35. package/templates/store-theme/.ai/agent-state.md +21 -0
  36. package/templates/store-theme/.ai/developer-directions.md +41 -0
  37. package/templates/store-theme/.ai/plans/SPEC-TEMPLATE.md +37 -0
  38. package/templates/store-theme/.ai/skills/architecture/SKILL.md +43 -0
  39. package/templates/store-theme/.ai/skills/deployment/SKILL.md +34 -0
  40. package/templates/store-theme/.ai/skills/gutenberg-blocks/SKILL.md +34 -0
  41. package/templates/store-theme/.aiignore +42 -0
  42. package/templates/store-theme/AGENTS.md +42 -0
  43. package/templates/store-theme/package.json +3 -1
  44. package/templates/store-theme/scripts/ai-setup.mjs +143 -0
  45. package/templates/advanced-theme/vendor/autoload.php +0 -25
  46. package/templates/advanced-theme/vendor/composer/ClassLoader.php +0 -579
  47. package/templates/advanced-theme/vendor/composer/InstalledVersions.php +0 -359
  48. package/templates/advanced-theme/vendor/composer/LICENSE +0 -21
  49. package/templates/advanced-theme/vendor/composer/autoload_classmap.php +0 -10
  50. package/templates/advanced-theme/vendor/composer/autoload_namespaces.php +0 -9
  51. package/templates/advanced-theme/vendor/composer/autoload_psr4.php +0 -11
  52. package/templates/advanced-theme/vendor/composer/autoload_real.php +0 -38
  53. package/templates/advanced-theme/vendor/composer/autoload_static.php +0 -41
  54. package/templates/advanced-theme/vendor/composer/installed.json +0 -61
  55. package/templates/advanced-theme/vendor/composer/installed.php +0 -32
  56. package/templates/advanced-theme/vendor/composer/platform_check.php +0 -26
  57. package/templates/basic-theme/vendor/autoload.php +0 -25
  58. package/templates/basic-theme/vendor/composer/ClassLoader.php +0 -579
  59. package/templates/basic-theme/vendor/composer/InstalledVersions.php +0 -359
  60. package/templates/basic-theme/vendor/composer/LICENSE +0 -21
  61. package/templates/basic-theme/vendor/composer/autoload_classmap.php +0 -10
  62. package/templates/basic-theme/vendor/composer/autoload_namespaces.php +0 -9
  63. package/templates/basic-theme/vendor/composer/autoload_psr4.php +0 -11
  64. package/templates/basic-theme/vendor/composer/autoload_real.php +0 -38
  65. package/templates/basic-theme/vendor/composer/autoload_static.php +0 -41
  66. package/templates/basic-theme/vendor/composer/installed.json +0 -61
  67. package/templates/basic-theme/vendor/composer/installed.php +0 -32
  68. package/templates/basic-theme/vendor/composer/platform_check.php +0 -26
  69. package/templates/store-theme/vendor/autoload.php +0 -25
  70. package/templates/store-theme/vendor/composer/ClassLoader.php +0 -579
  71. package/templates/store-theme/vendor/composer/InstalledVersions.php +0 -359
  72. package/templates/store-theme/vendor/composer/LICENSE +0 -21
  73. package/templates/store-theme/vendor/composer/autoload_classmap.php +0 -10
  74. package/templates/store-theme/vendor/composer/autoload_namespaces.php +0 -9
  75. package/templates/store-theme/vendor/composer/autoload_psr4.php +0 -11
  76. package/templates/store-theme/vendor/composer/autoload_real.php +0 -38
  77. package/templates/store-theme/vendor/composer/autoload_static.php +0 -41
  78. package/templates/store-theme/vendor/composer/installed.json +0 -61
  79. package/templates/store-theme/vendor/composer/installed.php +0 -32
  80. package/templates/store-theme/vendor/composer/platform_check.php +0 -26
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env node
2
+ // Generates instruction files for AI coding agents so they discover and
3
+ // follow this theme's agent protocol (AGENTS.md + .ai/). Zero dependencies.
4
+ //
5
+ // Usage:
6
+ // pnpm ai:setup # interactive agent selection
7
+ // pnpm ai:setup --all # generate for every supported agent
8
+ // pnpm ai:setup --agents=claude,cursor
9
+ // pnpm ai:setup --force # overwrite existing files
10
+
11
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
12
+ import { dirname, resolve } from 'node:path'
13
+ import { fileURLToPath } from 'node:url'
14
+ import { createInterface } from 'node:readline/promises'
15
+
16
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..')
17
+
18
+ const CORE_INSTRUCTIONS = `# AI Agent Instructions
19
+
20
+ This WordPress theme is built on the StrataWP framework and uses a structured AI-assisted development workflow.
21
+
22
+ **Read \`AGENTS.md\` at the theme root and follow its protocol before making any changes.**
23
+
24
+ Core rules (full detail in AGENTS.md):
25
+
26
+ 1. **Onboarding & state:** Check \`.ai/agent-state.md\`. If onboarding is pending, follow \`.ai/ONBOARDING.md\`. Always read \`.ai/PROJECT_RULES.md\` for learned theme conventions.
27
+ 2. **pnpm only.** Never use npm or yarn.
28
+ 3. **Source files only.** Never edit \`dist/\`, \`inc/blocks-generated.php\`, or \`vendor/stratawp/core/\` (the vendored framework — replaced wholesale on updates).
29
+ 4. **Contract-first.** Non-trivial features require an approved spec in \`.ai/plans/\` (copy \`SPEC-TEMPLATE.md\`).
30
+ 5. **Pre-flight check.** Run \`pnpm ai:check\` before submitting work.
31
+
32
+ Skill recipes live in \`.ai/skills/\` (see \`.ai/SKILLS.md\`).
33
+ `
34
+
35
+ const AGENTS = {
36
+ claude: {
37
+ label: 'Claude Code',
38
+ file: 'CLAUDE.md',
39
+ content: CORE_INSTRUCTIONS,
40
+ },
41
+ cursor: {
42
+ label: 'Cursor',
43
+ file: '.cursor/rules/theme.mdc',
44
+ content: `---
45
+ description: Theme rules for AI-assisted development
46
+ alwaysApply: true
47
+ ---
48
+
49
+ ${CORE_INSTRUCTIONS}`,
50
+ },
51
+ copilot: {
52
+ label: 'GitHub Copilot',
53
+ file: '.github/copilot-instructions.md',
54
+ content: CORE_INSTRUCTIONS,
55
+ },
56
+ gemini: {
57
+ label: 'Gemini CLI',
58
+ file: 'GEMINI.md',
59
+ content: CORE_INSTRUCTIONS,
60
+ },
61
+ windsurf: {
62
+ label: 'Windsurf',
63
+ file: '.windsurf/rules/theme.md',
64
+ content: CORE_INSTRUCTIONS,
65
+ },
66
+ }
67
+
68
+ // Agents that read AGENTS.md natively and need no generated file.
69
+ const NATIVE = [{ label: 'Codex / OpenCode / Jules', note: 'read AGENTS.md natively' }]
70
+
71
+ function parseArgs(argv) {
72
+ const opts = { all: false, force: false, agents: [] }
73
+ for (const arg of argv) {
74
+ if (arg === '--all' || arg === '-a') opts.all = true
75
+ else if (arg === '--force' || arg === '-f') opts.force = true
76
+ else if (arg.startsWith('--agents=')) {
77
+ opts.agents = arg
78
+ .slice('--agents='.length)
79
+ .split(',')
80
+ .map((a) => a.trim().toLowerCase())
81
+ .filter(Boolean)
82
+ }
83
+ }
84
+ return opts
85
+ }
86
+
87
+ async function selectInteractive() {
88
+ const keys = Object.keys(AGENTS)
89
+ console.log('\nWhich AI coding agents should be configured?\n')
90
+ keys.forEach((key, i) => {
91
+ const configured = existsSync(resolve(root, AGENTS[key].file)) ? ' (already configured)' : ''
92
+ console.log(` ${i + 1}. ${AGENTS[key].label}${configured}`)
93
+ })
94
+ console.log(` ${keys.length + 1}. All of the above\n`)
95
+ for (const n of NATIVE) console.log(` — ${n.label}: ${n.note}, no setup needed`)
96
+
97
+ const rl = createInterface({ input: process.stdin, output: process.stdout })
98
+ const answer = await rl.question('\nEnter numbers separated by commas (or press Enter to cancel): ')
99
+ rl.close()
100
+
101
+ const picks = answer
102
+ .split(',')
103
+ .map((s) => Number.parseInt(s.trim(), 10))
104
+ .filter((n) => Number.isInteger(n) && n >= 1 && n <= keys.length + 1)
105
+ if (picks.includes(keys.length + 1)) return keys
106
+ return picks.map((n) => keys[n - 1])
107
+ }
108
+
109
+ function writeAgentFile(key, force) {
110
+ const agent = AGENTS[key]
111
+ const target = resolve(root, agent.file)
112
+ if (existsSync(target) && !force) {
113
+ console.log(` • ${agent.label}: ${agent.file} already exists — skipped (use --force to overwrite)`)
114
+ return
115
+ }
116
+ mkdirSync(dirname(target), { recursive: true })
117
+ writeFileSync(target, agent.content)
118
+ console.log(` ✓ ${agent.label}: wrote ${agent.file}`)
119
+ }
120
+
121
+ const opts = parseArgs(process.argv.slice(2))
122
+ let selected = []
123
+ if (opts.all) selected = Object.keys(AGENTS)
124
+ else if (opts.agents.length) {
125
+ selected = opts.agents.filter((a) => {
126
+ if (!AGENTS[a]) {
127
+ console.error(` ! Unknown agent "${a}". Supported: ${Object.keys(AGENTS).join(', ')}`)
128
+ return false
129
+ }
130
+ return true
131
+ })
132
+ } else {
133
+ selected = await selectInteractive()
134
+ }
135
+
136
+ if (!selected.length) {
137
+ console.log('Nothing selected — no files written.')
138
+ process.exit(0)
139
+ }
140
+
141
+ console.log('')
142
+ for (const key of selected) writeAgentFile(key, opts.force)
143
+ console.log('\nDone. Agents should now read AGENTS.md and follow the onboarding protocol in .ai/ONBOARDING.md.')
@@ -1,25 +0,0 @@
1
- <?php
2
-
3
- // autoload.php @generated by Composer
4
-
5
- if (PHP_VERSION_ID < 50600) {
6
- if (!headers_sent()) {
7
- header('HTTP/1.1 500 Internal Server Error');
8
- }
9
- $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
10
- if (!ini_get('display_errors')) {
11
- if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
12
- fwrite(STDERR, $err);
13
- } elseif (!headers_sent()) {
14
- echo $err;
15
- }
16
- }
17
- trigger_error(
18
- $err,
19
- E_USER_ERROR
20
- );
21
- }
22
-
23
- require_once __DIR__ . '/composer/autoload_real.php';
24
-
25
- return ComposerAutoloaderInitf4ffa8ff84a82f7686c0e759723f648c::getLoader();