@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.
- package/LICENSE +21 -0
- package/dist/chunk-YCJH2PCK.js +15 -0
- package/dist/create.js +4 -4
- package/dist/index.js +4 -1
- package/package.json +1 -1
- package/templates/advanced-theme/.ai/ONBOARDING.md +44 -0
- package/templates/advanced-theme/.ai/PROJECT_RULES.md +58 -0
- package/templates/advanced-theme/.ai/SKILLS.md +20 -0
- package/templates/advanced-theme/.ai/agent-state.md +21 -0
- package/templates/advanced-theme/.ai/developer-directions.md +41 -0
- package/templates/advanced-theme/.ai/plans/SPEC-TEMPLATE.md +37 -0
- package/templates/advanced-theme/.ai/skills/architecture/SKILL.md +43 -0
- package/templates/advanced-theme/.ai/skills/deployment/SKILL.md +34 -0
- package/templates/advanced-theme/.ai/skills/gutenberg-blocks/SKILL.md +34 -0
- package/templates/advanced-theme/.aiignore +42 -0
- package/templates/advanced-theme/AGENTS.md +42 -0
- package/templates/advanced-theme/package.json +3 -1
- package/templates/advanced-theme/scripts/ai-setup.mjs +143 -0
- package/templates/basic-theme/.ai/ONBOARDING.md +44 -0
- package/templates/basic-theme/.ai/PROJECT_RULES.md +58 -0
- package/templates/basic-theme/.ai/SKILLS.md +20 -0
- package/templates/basic-theme/.ai/agent-state.md +21 -0
- package/templates/basic-theme/.ai/developer-directions.md +41 -0
- package/templates/basic-theme/.ai/plans/SPEC-TEMPLATE.md +37 -0
- package/templates/basic-theme/.ai/skills/architecture/SKILL.md +43 -0
- package/templates/basic-theme/.ai/skills/deployment/SKILL.md +34 -0
- package/templates/basic-theme/.ai/skills/gutenberg-blocks/SKILL.md +34 -0
- package/templates/basic-theme/.aiignore +42 -0
- package/templates/basic-theme/AGENTS.md +42 -0
- package/templates/basic-theme/package.json +3 -1
- package/templates/basic-theme/scripts/ai-setup.mjs +143 -0
- package/templates/store-theme/.ai/ONBOARDING.md +44 -0
- package/templates/store-theme/.ai/PROJECT_RULES.md +58 -0
- package/templates/store-theme/.ai/SKILLS.md +20 -0
- package/templates/store-theme/.ai/agent-state.md +21 -0
- package/templates/store-theme/.ai/developer-directions.md +41 -0
- package/templates/store-theme/.ai/plans/SPEC-TEMPLATE.md +37 -0
- package/templates/store-theme/.ai/skills/architecture/SKILL.md +43 -0
- package/templates/store-theme/.ai/skills/deployment/SKILL.md +34 -0
- package/templates/store-theme/.ai/skills/gutenberg-blocks/SKILL.md +34 -0
- package/templates/store-theme/.aiignore +42 -0
- package/templates/store-theme/AGENTS.md +42 -0
- package/templates/store-theme/package.json +3 -1
- package/templates/store-theme/scripts/ai-setup.mjs +143 -0
- package/templates/advanced-theme/vendor/autoload.php +0 -25
- package/templates/advanced-theme/vendor/composer/ClassLoader.php +0 -579
- package/templates/advanced-theme/vendor/composer/InstalledVersions.php +0 -359
- package/templates/advanced-theme/vendor/composer/LICENSE +0 -21
- package/templates/advanced-theme/vendor/composer/autoload_classmap.php +0 -10
- package/templates/advanced-theme/vendor/composer/autoload_namespaces.php +0 -9
- package/templates/advanced-theme/vendor/composer/autoload_psr4.php +0 -11
- package/templates/advanced-theme/vendor/composer/autoload_real.php +0 -38
- package/templates/advanced-theme/vendor/composer/autoload_static.php +0 -41
- package/templates/advanced-theme/vendor/composer/installed.json +0 -61
- package/templates/advanced-theme/vendor/composer/installed.php +0 -32
- package/templates/advanced-theme/vendor/composer/platform_check.php +0 -26
- package/templates/basic-theme/vendor/autoload.php +0 -25
- package/templates/basic-theme/vendor/composer/ClassLoader.php +0 -579
- package/templates/basic-theme/vendor/composer/InstalledVersions.php +0 -359
- package/templates/basic-theme/vendor/composer/LICENSE +0 -21
- package/templates/basic-theme/vendor/composer/autoload_classmap.php +0 -10
- package/templates/basic-theme/vendor/composer/autoload_namespaces.php +0 -9
- package/templates/basic-theme/vendor/composer/autoload_psr4.php +0 -11
- package/templates/basic-theme/vendor/composer/autoload_real.php +0 -38
- package/templates/basic-theme/vendor/composer/autoload_static.php +0 -41
- package/templates/basic-theme/vendor/composer/installed.json +0 -61
- package/templates/basic-theme/vendor/composer/installed.php +0 -32
- package/templates/basic-theme/vendor/composer/platform_check.php +0 -26
- package/templates/store-theme/vendor/autoload.php +0 -25
- package/templates/store-theme/vendor/composer/ClassLoader.php +0 -579
- package/templates/store-theme/vendor/composer/InstalledVersions.php +0 -359
- package/templates/store-theme/vendor/composer/LICENSE +0 -21
- package/templates/store-theme/vendor/composer/autoload_classmap.php +0 -10
- package/templates/store-theme/vendor/composer/autoload_namespaces.php +0 -9
- package/templates/store-theme/vendor/composer/autoload_psr4.php +0 -11
- package/templates/store-theme/vendor/composer/autoload_real.php +0 -38
- package/templates/store-theme/vendor/composer/autoload_static.php +0 -41
- package/templates/store-theme/vendor/composer/installed.json +0 -61
- package/templates/store-theme/vendor/composer/installed.php +0 -32
- 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();
|