wordpress-agent-kit 0.4.0 → 0.5.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 (132) hide show
  1. package/.agents/skills/blueprint/SKILL.md +418 -0
  2. package/.agents/skills/wordpress-router/SKILL.md +52 -0
  3. package/.agents/skills/wordpress-router/references/decision-tree.md +55 -0
  4. package/.agents/skills/wp-abilities-api/SKILL.md +108 -0
  5. package/.agents/skills/wp-abilities-api/references/delegate-helper-pattern.md +241 -0
  6. package/.agents/skills/wp-abilities-api/references/domain-vs-projection.md +113 -0
  7. package/.agents/skills/wp-abilities-api/references/error-code-vocabulary.md +123 -0
  8. package/.agents/skills/wp-abilities-api/references/grouping-heuristic.md +89 -0
  9. package/.agents/skills/wp-abilities-api/references/input-schema-gotchas.md +265 -0
  10. package/.agents/skills/wp-abilities-api/references/php-registration.md +94 -0
  11. package/.agents/skills/wp-abilities-api/references/plugin-family-patterns.md +233 -0
  12. package/.agents/skills/wp-abilities-api/references/rest-api.md +13 -0
  13. package/.agents/skills/wp-abilities-api/references/shared-core-service.md +184 -0
  14. package/.agents/skills/wp-abilities-audit/SKILL.md +199 -0
  15. package/.agents/skills/wp-abilities-audit/references/audit-schema.md +300 -0
  16. package/.agents/skills/wp-abilities-audit/references/capability-gate-tracing.md +197 -0
  17. package/.agents/skills/wp-abilities-audit/references/controller-enumeration.md +116 -0
  18. package/.agents/skills/wp-abilities-verify/SKILL.md +215 -0
  19. package/.agents/skills/wp-abilities-verify/references/annotation-correctness.md +154 -0
  20. package/.agents/skills/wp-abilities-verify/references/audit-schema-validation.md +131 -0
  21. package/.agents/skills/wp-abilities-verify/references/permission-roundtrip.md +190 -0
  22. package/.agents/skills/wp-abilities-verify/references/runtime-harness.md +462 -0
  23. package/.agents/skills/wp-abilities-verify/references/schema-lints.md +118 -0
  24. package/.agents/skills/wp-abilities-verify/references/static-enumeration.md +126 -0
  25. package/.agents/skills/wp-block-development/SKILL.md +175 -0
  26. package/.agents/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
  27. package/.agents/skills/wp-block-development/references/block-json.md +49 -0
  28. package/.agents/skills/wp-block-development/references/creating-new-blocks.md +46 -0
  29. package/.agents/skills/wp-block-development/references/debugging.md +36 -0
  30. package/.agents/skills/wp-block-development/references/deprecations.md +24 -0
  31. package/.agents/skills/wp-block-development/references/dynamic-rendering.md +23 -0
  32. package/.agents/skills/wp-block-development/references/inner-blocks.md +25 -0
  33. package/.agents/skills/wp-block-development/references/registration.md +30 -0
  34. package/.agents/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
  35. package/.agents/skills/wp-block-development/references/tooling-and-testing.md +21 -0
  36. package/.agents/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
  37. package/.agents/skills/wp-block-themes/SKILL.md +117 -0
  38. package/.agents/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
  39. package/.agents/skills/wp-block-themes/references/debugging.md +24 -0
  40. package/.agents/skills/wp-block-themes/references/patterns.md +18 -0
  41. package/.agents/skills/wp-block-themes/references/style-variations.md +14 -0
  42. package/.agents/skills/wp-block-themes/references/templates-and-parts.md +16 -0
  43. package/.agents/skills/wp-block-themes/references/theme-json.md +59 -0
  44. package/.agents/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
  45. package/.agents/skills/wp-interactivity-api/SKILL.md +180 -0
  46. package/.agents/skills/wp-interactivity-api/references/debugging.md +29 -0
  47. package/.agents/skills/wp-interactivity-api/references/directives-quickref.md +30 -0
  48. package/.agents/skills/wp-interactivity-api/references/server-side-rendering.md +310 -0
  49. package/.agents/skills/wp-performance/SKILL.md +147 -0
  50. package/.agents/skills/wp-performance/references/autoload-options.md +24 -0
  51. package/.agents/skills/wp-performance/references/cron.md +20 -0
  52. package/.agents/skills/wp-performance/references/database.md +20 -0
  53. package/.agents/skills/wp-performance/references/http-api.md +15 -0
  54. package/.agents/skills/wp-performance/references/measurement.md +21 -0
  55. package/.agents/skills/wp-performance/references/object-cache.md +24 -0
  56. package/.agents/skills/wp-performance/references/query-monitor-headless.md +38 -0
  57. package/.agents/skills/wp-performance/references/server-timing.md +22 -0
  58. package/.agents/skills/wp-performance/references/wp-cli-doctor.md +24 -0
  59. package/.agents/skills/wp-performance/references/wp-cli-profile.md +32 -0
  60. package/.agents/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
  61. package/.agents/skills/wp-phpstan/SKILL.md +98 -0
  62. package/.agents/skills/wp-phpstan/references/configuration.md +52 -0
  63. package/.agents/skills/wp-phpstan/references/third-party-classes.md +76 -0
  64. package/.agents/skills/wp-phpstan/references/wordpress-annotations.md +124 -0
  65. package/.agents/skills/wp-phpstan/scripts/phpstan_inspect.mjs +263 -0
  66. package/.agents/skills/wp-playground/SKILL.md +233 -0
  67. package/.agents/skills/wp-playground/references/blueprints.md +36 -0
  68. package/.agents/skills/wp-playground/references/cli-commands.md +39 -0
  69. package/.agents/skills/wp-playground/references/debugging.md +16 -0
  70. package/.agents/skills/wp-playground/references/e2e-playwright.md +115 -0
  71. package/.agents/skills/wp-plugin-development/SKILL.md +113 -0
  72. package/.agents/skills/wp-plugin-development/references/data-and-cron.md +19 -0
  73. package/.agents/skills/wp-plugin-development/references/debugging.md +19 -0
  74. package/.agents/skills/wp-plugin-development/references/lifecycle.md +33 -0
  75. package/.agents/skills/wp-plugin-development/references/security.md +29 -0
  76. package/.agents/skills/wp-plugin-development/references/settings-api.md +22 -0
  77. package/.agents/skills/wp-plugin-development/references/structure.md +16 -0
  78. package/.agents/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
  79. package/.agents/skills/wp-plugin-directory-guidelines/SKILL.md +133 -0
  80. package/.agents/skills/wp-plugin-directory-guidelines/references/gpl-compliance.md +217 -0
  81. package/.agents/skills/wp-plugin-directory-guidelines/references/guideline-review-checklist.md +592 -0
  82. package/.agents/skills/wp-plugin-directory-guidelines/references/naming-rules.md +121 -0
  83. package/.agents/skills/wp-project-triage/SKILL.md +39 -0
  84. package/.agents/skills/wp-project-triage/references/triage.schema.json +143 -0
  85. package/.agents/skills/wp-project-triage/scripts/detect_wp_project.mjs +610 -0
  86. package/.agents/skills/wp-rest-api/SKILL.md +115 -0
  87. package/.agents/skills/wp-rest-api/references/authentication.md +18 -0
  88. package/.agents/skills/wp-rest-api/references/custom-content-types.md +20 -0
  89. package/.agents/skills/wp-rest-api/references/discovery-and-params.md +20 -0
  90. package/.agents/skills/wp-rest-api/references/responses-and-fields.md +30 -0
  91. package/.agents/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
  92. package/.agents/skills/wp-rest-api/references/schema.md +22 -0
  93. package/.agents/skills/wp-wpcli-and-ops/SKILL.md +126 -0
  94. package/.agents/skills/wp-wpcli-and-ops/references/automation.md +30 -0
  95. package/.agents/skills/wp-wpcli-and-ops/references/cron-and-cache.md +23 -0
  96. package/.agents/skills/wp-wpcli-and-ops/references/debugging.md +17 -0
  97. package/.agents/skills/wp-wpcli-and-ops/references/multisite.md +22 -0
  98. package/.agents/skills/wp-wpcli-and-ops/references/packages-and-updates.md +22 -0
  99. package/.agents/skills/wp-wpcli-and-ops/references/safety.md +30 -0
  100. package/.agents/skills/wp-wpcli-and-ops/references/search-replace.md +40 -0
  101. package/.agents/skills/wp-wpcli-and-ops/scripts/wpcli_inspect.mjs +90 -0
  102. package/.agents/skills/wp-wpengine/SKILL.md +398 -0
  103. package/.agents/skills/wp-wpengine/references/ci-gate.md +469 -0
  104. package/.agents/skills/wp-wpengine/references/github-actions-deploy.md +736 -0
  105. package/.agents/skills/wp-wpengine/scripts/ci-gate.sh +118 -0
  106. package/.agents/skills/wp-wpengine/scripts/wpe-check.sh +89 -0
  107. package/.agents/skills/wp-wpengine/scripts/wpe-preflight.sh +104 -0
  108. package/.agents/skills/wpds/SKILL.md +59 -0
  109. package/.github/agents/wp-architect.agent.md +1 -2
  110. package/.github/copilot-instructions.md +1 -1
  111. package/.github/instructions/wordpress-workflow.instructions.md +3 -3
  112. package/AGENTS.md +22 -10
  113. package/AGENTS.template.md +20 -10
  114. package/README.md +89 -85
  115. package/dist/cli.js +5 -1
  116. package/dist/commands/clean-skills.js +64 -0
  117. package/dist/commands/setup.js +6 -2
  118. package/dist/commands/sync-skills.js +3 -0
  119. package/dist/lib/api.js +164 -5
  120. package/dist/lib/installer.js +166 -2
  121. package/extensions/wp-agent-kit/index.ts +185 -10
  122. package/package.json +10 -14
  123. package/skills-custom/wp-wpengine/SKILL.md +299 -28
  124. package/skills-custom/wp-wpengine/references/ci-gate.md +469 -0
  125. package/skills-custom/wp-wpengine/references/github-actions-deploy.md +736 -0
  126. package/skills-custom/wp-wpengine/scripts/ci-gate.sh +118 -0
  127. package/skills-custom/wp-wpengine/scripts/wpe-check.sh +89 -0
  128. package/skills-custom/wp-wpengine/scripts/wpe-preflight.sh +104 -0
  129. package/.github/workflows/ci.yml +0 -44
  130. package/.husky/pre-commit +0 -7
  131. package/CLI_REVIEW.md +0 -250
  132. package/biome.json +0 -39
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env bash
2
+ # ci-gate.sh — run the full CI gate locally before pushing.
3
+ #
4
+ # Mirrors what GitHub Actions ci-gate.yml runs. Use this before any push
5
+ # to a branch that triggers a WP Engine deploy.
6
+ #
7
+ # Usage:
8
+ # bash scripts/ci-gate.sh # run both gates
9
+ # bash scripts/ci-gate.sh --php-only # PHP gate only
10
+ # bash scripts/ci-gate.sh --js-only # JS/TS gate only
11
+ #
12
+ # Exit code: 0 = all passed, 1 = at least one check failed.
13
+
14
+ set -uo pipefail
15
+ root="$(git rev-parse --show-toplevel)"
16
+ cd "$root"
17
+
18
+ PHP_ONLY=false
19
+ JS_ONLY=false
20
+ for arg in "$@"; do
21
+ [[ "$arg" == "--php-only" ]] && PHP_ONLY=true
22
+ [[ "$arg" == "--js-only" ]] && JS_ONLY=true
23
+ done
24
+
25
+ PASS=0
26
+ FAIL=0
27
+
28
+ run() {
29
+ local label="$1"; shift
30
+ echo "▶ $label"
31
+ if "$@" 2>&1; then
32
+ echo " ✓ $label"
33
+ ((PASS++))
34
+ else
35
+ echo " ✗ FAILED: $label"
36
+ ((FAIL++))
37
+ return 1
38
+ fi
39
+ }
40
+
41
+ # ── PHP gate ──────────────────────────────────────────────────────────────────
42
+ if ! $JS_ONLY; then
43
+ echo ""
44
+ echo "── PHP gate ──────────────────────────────────────────────────────────"
45
+ if command -v composer >/dev/null 2>&1 && [ -f composer.json ]; then
46
+ if [ ! -d vendor ]; then
47
+ echo "▶ composer install"
48
+ composer install --no-interaction --quiet
49
+ fi
50
+
51
+ run "php -l (all tracked PHP files)" \
52
+ bash -c 'git ls-files "*.php" | xargs -P4 php -l > /dev/null'
53
+
54
+ if [ -x vendor/bin/phpcs ]; then
55
+ run "phpcs (WordPress coding standards)" composer run phpcs
56
+ else
57
+ echo " ⚠ phpcs not found — run: composer install"
58
+ fi
59
+
60
+ if [ -x vendor/bin/phpstan ]; then
61
+ run "phpstan (static analysis)" composer run phpstan
62
+ else
63
+ echo " ⚠ phpstan not found — run: composer install"
64
+ fi
65
+ else
66
+ echo " ⚠ composer not available or no composer.json — skipping PHP gate"
67
+ fi
68
+ fi
69
+
70
+ # ── JS/TS gate ────────────────────────────────────────────────────────────────
71
+ if ! $PHP_ONLY; then
72
+ echo ""
73
+ echo "── JS/TS gate ────────────────────────────────────────────────────────"
74
+ if [ -f package.json ]; then
75
+ if [ ! -d node_modules ]; then
76
+ echo "▶ npm install"
77
+ npm install --silent
78
+ fi
79
+
80
+ if [ -x node_modules/.bin/biome ]; then
81
+ run "biome check (lint + format)" npx biome check .
82
+ else
83
+ echo " ⚠ biome not installed — run: npm install"
84
+ fi
85
+
86
+ if npm run typecheck --if-present 2>/dev/null; then
87
+ ((PASS++))
88
+ elif command -v tsc >/dev/null 2>&1 || [ -x node_modules/.bin/tsc ]; then
89
+ run "tsc --noEmit (type check)" npx tsc --noEmit
90
+ fi
91
+
92
+ if npm run test --if-present 2>/dev/null; then
93
+ ((PASS++))
94
+ fi
95
+
96
+ if npm run build --if-present 2>/dev/null; then
97
+ ((PASS++))
98
+ fi
99
+ else
100
+ echo " ⚠ No package.json — skipping JS/TS gate"
101
+ fi
102
+ fi
103
+
104
+ # ── Summary ───────────────────────────────────────────────────────────────────
105
+ echo ""
106
+ echo "── CI Gate Result ────────────────────────────────────────────────────"
107
+ echo " Passed : $PASS"
108
+ echo " Failed : $FAIL"
109
+ echo ""
110
+
111
+ if [[ "$FAIL" -eq 0 ]]; then
112
+ echo "✅ Gate green — safe to push."
113
+ exit 0
114
+ else
115
+ echo "❌ Gate failed — fix the issues above before pushing."
116
+ echo " --no-verify is not a valid workaround; CI will catch the same failures."
117
+ exit 1
118
+ fi
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # wpe-check.sh — verify SSH connectivity to all configured WP Engine environments.
3
+ #
4
+ # Reads installs from wp-cli.yml @aliases (ssh: field) or from WPE_INSTALLS env var.
5
+ # Useful after first-time machine setup or when debugging SSH issues.
6
+ #
7
+ # Usage:
8
+ # bash scripts/wpe-check.sh
9
+ # WPE_INSTALLS="mysite mysitestg mysitedev" bash scripts/wpe-check.sh
10
+ #
11
+ # Exit code: 0 = all connected, 1 = at least one failed.
12
+
13
+ set -uo pipefail
14
+ root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
15
+ cd "$root"
16
+
17
+ SSH_OPTS="-o BatchMode=yes -o ConnectTimeout=8 -o StrictHostKeyChecking=accept-new"
18
+
19
+ # ── Discover installs from wp-cli.yml @aliases ────────────────────────────────
20
+ declare -A ALIAS_MAP # install → alias label
21
+ CURRENT_ALIAS=""
22
+
23
+ if [ -f wp-cli.yml ]; then
24
+ while IFS= read -r line; do
25
+ if [[ "$line" =~ ^@([a-zA-Z0-9_-]+): ]]; then
26
+ CURRENT_ALIAS="${BASH_REMATCH[1]}"
27
+ elif [[ "$line" =~ ^[[:space:]]+ssh:[[:space:]]+([^@[:space:]]+)@[^[:space:]]+ && -n "$CURRENT_ALIAS" ]]; then
28
+ INSTALL="${BASH_REMATCH[1]}"
29
+ ALIAS_MAP["$INSTALL"]="@${CURRENT_ALIAS}"
30
+ CURRENT_ALIAS=""
31
+ fi
32
+ done < wp-cli.yml
33
+ fi
34
+
35
+ # Fallback: WPE_INSTALLS env var
36
+ if [ "${#ALIAS_MAP[@]}" -eq 0 ] && [ -n "${WPE_INSTALLS:-}" ]; then
37
+ for slug in $WPE_INSTALLS; do
38
+ ALIAS_MAP["$slug"]="$slug"
39
+ done
40
+ fi
41
+
42
+ if [ "${#ALIAS_MAP[@]}" -eq 0 ]; then
43
+ echo "No WP Engine installs found."
44
+ echo ""
45
+ echo "Options:"
46
+ echo " 1. Add @aliases with 'ssh: <install>@<install>.ssh.wpengine.net' to wp-cli.yml"
47
+ echo " 2. Set WPE_INSTALLS='slug1 slug2 slug3' environment variable"
48
+ exit 1
49
+ fi
50
+
51
+ echo ""
52
+ echo "── WP Engine SSH connectivity ────────────────────────────────────────"
53
+ printf " %-25s %-15s %-12s %s\n" "Install" "Alias" "Status" "WP version"
54
+ echo " ─────────────────────────────────────────────────────────────────"
55
+
56
+ PASS=0
57
+ FAIL=0
58
+
59
+ for INSTALL in "${!ALIAS_MAP[@]}"; do
60
+ ALIAS="${ALIAS_MAP[$INSTALL]}"
61
+ SSH_HOST="${INSTALL}.ssh.wpengine.net"
62
+
63
+ WP_VERSION=$(ssh $SSH_OPTS "${INSTALL}@${SSH_HOST}" \
64
+ wp core version --skip-plugins --skip-themes 2>/dev/null || echo "")
65
+
66
+ if [ -n "$WP_VERSION" ]; then
67
+ printf " %-25s %-15s %-12s %s\n" "$INSTALL" "$ALIAS" "✓ connected" "$WP_VERSION"
68
+ ((PASS++))
69
+ else
70
+ printf " %-25s %-15s %-12s %s\n" "$INSTALL" "$ALIAS" "✗ FAILED" "—"
71
+ ((FAIL++))
72
+ fi
73
+ done
74
+
75
+ echo ""
76
+ echo " $PASS connected | $FAIL failed"
77
+
78
+ if [[ "$FAIL" -gt 0 ]]; then
79
+ echo ""
80
+ echo "Troubleshooting:"
81
+ echo " • Confirm key exists: ls -la ~/.ssh/wpengine_ed25519"
82
+ echo " • Confirm permissions: chmod 600 ~/.ssh/wpengine_ed25519"
83
+ echo " • Trust the host: ssh-keyscan -H ssh.wpengine.net >> ~/.ssh/known_hosts"
84
+ echo " • Check portal: https://my.wpengine.com/ssh_keys"
85
+ echo " • Verify git access: ssh git@git.wpengine.com info"
86
+ fi
87
+
88
+ echo ""
89
+ [[ "$FAIL" -eq 0 ]] && exit 0 || exit 1
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env bash
2
+ # wpe-preflight.sh — pre-deploy sanity checks for a WP Engine environment.
3
+ #
4
+ # Verifies SSH access, WP-CLI, site URL consistency, HTTP health, and
5
+ # active plugin count before any deploy touches production or staging.
6
+ #
7
+ # Usage:
8
+ # INSTALL=mysite bash scripts/wpe-preflight.sh [staging|production]
9
+ # WPE_INSTALL=mysite bash scripts/wpe-preflight.sh production
10
+ #
11
+ # Exit code: 0 = all checks passed (safe to deploy), 1 = at least one failed.
12
+
13
+ set -uo pipefail
14
+
15
+ ENV="${1:-production}"
16
+ INSTALL="${WPE_INSTALL:-${INSTALL:-}}"
17
+
18
+ if [ -z "$INSTALL" ]; then
19
+ echo "❌ Usage: INSTALL=<slug> bash scripts/wpe-preflight.sh [staging|production]"
20
+ echo " The install slug is the WP Engine environment name (e.g., 'mysite', 'mysitestg')."
21
+ exit 1
22
+ fi
23
+
24
+ SSH_HOST="${INSTALL}.ssh.wpengine.net"
25
+ SSH_OPTS="-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=accept-new"
26
+ WP="ssh $SSH_OPTS ${INSTALL}@${SSH_HOST} wp"
27
+
28
+ PASS=0
29
+ FAIL=0
30
+
31
+ check() {
32
+ local label="$1"; shift
33
+ printf " %-50s" "$label"
34
+ local output
35
+ if output=$("$@" 2>&1); then
36
+ echo "✓ $output"
37
+ ((PASS++))
38
+ else
39
+ echo "✗ FAILED"
40
+ echo " $output" >&2
41
+ ((FAIL++))
42
+ fi
43
+ }
44
+
45
+ echo ""
46
+ echo "── WP Engine preflight: ${INSTALL} (${ENV}) ─────────────────────"
47
+ echo ""
48
+
49
+ # ── SSH ───────────────────────────────────────────────────────────────────────
50
+ echo "SSH"
51
+ check "SSH gateway reachable" \
52
+ ssh $SSH_OPTS "${INSTALL}@${SSH_HOST}" echo "connected"
53
+
54
+ check "WP-CLI available" \
55
+ $WP --info --skip-plugins --skip-themes
56
+
57
+ # ── WordPress ─────────────────────────────────────────────────────────────────
58
+ echo ""
59
+ echo "WordPress"
60
+ check "WP core version" \
61
+ $WP core version --skip-plugins --skip-themes
62
+
63
+ check "siteurl option readable" \
64
+ $WP option get siteurl --skip-plugins --skip-themes
65
+
66
+ check "Active plugins present (count > 0)" \
67
+ bash -c "COUNT=\$(${WP} plugin list --status=active --format=count --skip-plugins --skip-themes 2>&1); echo \"\$COUNT active\"; [[ \"\$COUNT\" -gt 0 ]]"
68
+
69
+ check "No pending DB upgrades" \
70
+ $WP core update-db --dry-run --skip-plugins --skip-themes
71
+
72
+ # ── HTTP health ───────────────────────────────────────────────────────────────
73
+ echo ""
74
+ echo "HTTP health"
75
+ SITE_URL=$(ssh $SSH_OPTS "${INSTALL}@${SSH_HOST}" \
76
+ wp option get home --skip-plugins --skip-themes 2>/dev/null || echo "")
77
+
78
+ if [ -n "$SITE_URL" ]; then
79
+ check "Homepage returns 2xx/3xx" \
80
+ bash -c "STATUS=\$(curl -s -o /dev/null -w '%{http_code}' -L --max-time 15 '${SITE_URL}'); echo \"HTTP \$STATUS\"; [[ \"\$STATUS\" -ge 200 && \"\$STATUS\" -lt 400 ]]"
81
+
82
+ check "No PHP errors in homepage body" \
83
+ bash -c "BODY=\$(curl -sL --max-time 15 '${SITE_URL}'); echo \"\${#BODY} chars\"; ! echo \"\$BODY\" | grep -qi 'fatal error\|parse error\|warning: '"
84
+
85
+ check "wp-json REST API responds" \
86
+ bash -c "STATUS=\$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 '${SITE_URL}/wp-json/wp/v2/'); echo \"HTTP \$STATUS\"; [[ \"\$STATUS\" -ge 200 && \"\$STATUS\" -lt 400 ]]"
87
+ else
88
+ echo " ⚠ Could not retrieve site URL — skipping HTTP checks"
89
+ fi
90
+
91
+ # ── Result ────────────────────────────────────────────────────────────────────
92
+ echo ""
93
+ echo "── Preflight result ──────────────────────────────────────────────────"
94
+ echo " Passed : $PASS"
95
+ echo " Failed : $FAIL"
96
+ echo ""
97
+
98
+ if [[ "$FAIL" -eq 0 ]]; then
99
+ echo "✅ All checks passed — safe to deploy to ${ENV}."
100
+ exit 0
101
+ else
102
+ echo "❌ Preflight failed — resolve the issues above before deploying to ${ENV}."
103
+ exit 1
104
+ fi
@@ -1,44 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main, master]
6
- pull_request:
7
- branches: [main, master]
8
-
9
- jobs:
10
- lint-and-test:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - name: Checkout repository
14
- uses: actions/checkout@v4
15
-
16
- - name: Setup pnpm
17
- uses: pnpm/action-setup@v4
18
- with:
19
- version: 9
20
- run_install: false
21
-
22
- - name: Setup Node.js
23
- uses: actions/setup-node@v4
24
- with:
25
- node-version: '22'
26
- cache: 'pnpm'
27
-
28
- - name: Install dependencies
29
- run: pnpm install --frozen-lockfile
30
-
31
- - name: Check formatting
32
- run: pnpm run format:check
33
-
34
- - name: Run lint
35
- run: pnpm run lint:check
36
-
37
- - name: Type check
38
- run: pnpm run check
39
-
40
- - name: Run tests
41
- run: pnpm run test:run
42
-
43
- - name: Build
44
- run: pnpm run build
package/.husky/pre-commit DELETED
@@ -1,7 +0,0 @@
1
- #!/bin/sh
2
- . "$(dirname "$0")/_/husky.sh"
3
-
4
- pnpm exec biome check --write .
5
- git add -A
6
- pnpm run lint:check
7
- pnpm run test:run
package/CLI_REVIEW.md DELETED
@@ -1,250 +0,0 @@
1
- # WordPress Agent Kit CLI - Accessibility & Agent-Friendly Review
2
-
3
- **Date**: 2026-06-08
4
- **Version**: 0.2.1
5
-
6
- ---
7
-
8
- ## Executive Summary
9
-
10
- The current CLI is functional for **human developers** using interactive prompts (`@clack/prompts`), but lacks features for **programmatic/agent usage**:
11
-
12
- - ❌ No JSON output mode
13
- - ❌ No machine-readable result objects
14
- - ❌ No programmatic API (only CLI entrypoint)
15
- - ❌ No non-interactive "headless" mode for all commands
16
- - ❌ No structured logging/event streaming
17
- - ❌ Exit codes not consistently semantic
18
-
19
- ---
20
-
21
- ## Current Architecture
22
-
23
- ```
24
- src/
25
- ├── cli.ts # Entry point, Commander setup
26
- ├── commands/
27
- │ ├── install.ts # Non-interactive (args + flags only) ✓
28
- │ ├── setup.ts # Interactive (prompts only) ✗
29
- │ ├── sync-skills.ts # Non-interactive (args + flags only) ✓
30
- │ └── run-playground.ts # Non-interactive ✓
31
- ├── lib/
32
- │ ├── installer.ts # Core logic (pure functions) ✓
33
- │ └── triage-mapper.ts # Pure mappers ✓
34
- └── utils/
35
- ├── paths.ts # Path resolution
36
- └── run.ts # Command runner
37
- ```
38
-
39
- **Good**: Core logic (`installKit`, mappers) is pure and testable.
40
- **Gap**: `setup.ts` couples interactive prompts with business logic.
41
-
42
- ---
43
-
44
- ## Recommendations
45
-
46
- ### 1. Add JSON Output Mode (--json)
47
-
48
- **Goal**: Every command outputs structured JSON to stdout when requested.
49
-
50
- ```bash
51
- # Success
52
- wp-agent-kit install /path/to/project --platform github --json
53
- # {"success":true,"targetDir":"/path/to/project","platform":"github","filesCopied":["AGENTS.md",".github/..."],"durationMs":142}
54
-
55
- # Failure
56
- wp-agent-kit install /nonexistent --json
57
- # {"success":false,"error":"E_NOT_FOUND","message":"Target directory does not exist","code":"ENOENT"}
58
- ```
59
-
60
- **Implementation**:
61
- - Add `--json` / `--output json` global flag in `cli.ts`
62
- - Create `OutputFormatter` utility: `json`, `human`, `quiet`
63
- - Return structured result objects from all command actions
64
- - Separate stdout (JSON) from stderr (human diagnostics)
65
-
66
- ### 2. Add Machine-Readable Exit Codes
67
-
68
- | Code | Meaning |
69
- |------|---------|
70
- | 0 | Success |
71
- | 1 | General error |
72
- | 2 | Invalid arguments / usage |
73
- | 3 | Target not found / ENOENT |
74
- | 4 | Permission denied / EACCES |
75
- | 5 | Already exists (without --force) |
76
- | 6 | Git/submodule error |
77
- | 7 | Network/fetch error |
78
- | 8 | Validation failed |
79
- | 130 | Cancelled (SIGINT) |
80
-
81
- ### 3. Extract Programmatic API
82
-
83
- Expose core functions for direct import by agents/scripts:
84
-
85
- ```typescript
86
- // src/api.ts (new)
87
- export interface InstallOptions {
88
- targetDir: string;
89
- platform: Platform;
90
- force?: boolean;
91
- dryRun?: boolean;
92
- }
93
-
94
- export interface InstallResult {
95
- success: boolean;
96
- targetDir: string;
97
- platform: Platform;
98
- filesCreated: string[];
99
- filesSkipped: string[];
100
- errors: string[];
101
- durationMs: number;
102
- }
103
-
104
- export async function installKit(options: InstallOptions): Promise<InstallResult>;
105
- export async function syncSkills(options: SyncOptions): Promise<SyncResult>;
106
- export async function runTriage(targetDir: string): Promise<TriageResult>;
107
- export async function configureAgentsMd(options: ConfigureOptions): Promise<ConfigureResult>;
108
- ```
109
-
110
- **Benefits**:
111
- - Agents can import and call directly: `import { installKit } from 'wordpress-agent-kit'`
112
- - No subprocess overhead
113
- - Full TypeScript types
114
- - Testable in isolation
115
-
116
- ### 4. Make `setup` Command Headless-Capable
117
-
118
- Current `setup.ts` is prompt-driven. Add non-interactive mode:
119
-
120
- ```bash
121
- # Full non-interactive (requires all flags)
122
- wp-agent-kit setup /path/to/project \
123
- --project-type plugin \
124
- --tech-stack gutenberg,rest-api,composer \
125
- --platform github \
126
- --yes \
127
- --json
128
-
129
- # Hybrid: run triage, apply detected values, no prompts
130
- wp-agent-kit setup /path/to/project --auto --json
131
- ```
132
-
133
- **Flag Matrix for `setup`**:
134
- | Flag | Description |
135
- |------|-------------|
136
- | `--project-type <type>` | plugin \| theme \| block-theme \| site \| blocks \| other |
137
- | `--tech-stack <list>` | Comma-separated: gutenberg,interactivity,rest-api,wpcli,composer,phpstan,npm,playground |
138
- | `--platform <platform>` | github \| cursor \| claude \| agent \| pi |
139
- | `--package-manager <pm>` | npm \| pnpm \| yarn |
140
- | `--auto` | Run triage, apply detected values, skip prompts |
141
- | `--yes` / `-y` | Accept all confirmations (requires other flags) |
142
- | `--reset` | Overwrite existing |
143
- | `--dry-run` | Show what would be done |
144
-
145
- ### 5. Add Structured Logging / Event Stream
146
-
147
- For long-running operations (sync-skills, playground), emit NDJSON events:
148
-
149
- ```bash
150
- wp-agent-kit sync-skills --json-stream
151
- # {"event":"start","phase":"clone","timestamp":"..."}
152
- # {"event":"progress","phase":"fetch","message":"Fetching tags...","timestamp":"..."}
153
- # {"event":"complete","phase":"install","result":{"skillsSynced":42,"timestamp":"..."}}
154
- ```
155
-
156
- **Events**: `start`, `progress`, `phase-change`, `warning`, `complete`, `error`
157
-
158
- ### 6. Add Dry-Run / Preview Mode
159
-
160
- ```bash
161
- wp-agent-kit install /path --dry-run --json
162
- # {"wouldCopy":[{"src":"AGENTS.template.md","dest":"/path/AGENTS.md"},{"src":".github/...","dest":"/path/.github/..."}],"wouldCreateDirs":[]}
163
-
164
- wp-agent-kit setup /path --dry-run --auto --json
165
- # {"wouldInstall":true,"detectedType":"plugin","detectedTech":["gutenberg","npm"],"wouldModify":["AGENTS.md"]}
166
- ```
167
-
168
- ### 7. Add Shell Completion (Modern CLI Standard)
169
-
170
- ```bash
171
- # Generate completion scripts
172
- wp-agent-kit completion bash > /etc/bash_completion.d/wp-agent-kit
173
- wp-agent-kit completion zsh > ~/.zsh/completions/_wp-agent-kit
174
- wp-agent-kit completion fish > ~/.config/fish/completions/wp-agent-kit.fish
175
- ```
176
-
177
- Commander.js supports this natively: `program.enablePositionalOptions().addHelpCommand().configureOutput({ writeOut: ... })`
178
-
179
- ### 8. Add `--version` JSON Output
180
-
181
- ```bash
182
- wp-agent-kit --version --json
183
- # {"name":"wp-agent-kit","version":"0.2.1","node":"20.18.0","platform":"linux"}
184
- ```
185
-
186
- ---
187
-
188
- ## Priority Matrix
189
-
190
- | Priority | Feature | Effort | Impact |
191
- |----------|---------|--------|--------|
192
- | **P0** | JSON output (`--json`) | Low | High |
193
- | **P0** | Semantic exit codes | Low | High |
194
- | **P0** | Programmatic API export | Medium | High |
195
- | **P1** | Headless `setup` mode | Medium | High |
196
- | **P1** | Dry-run/preview | Low | Medium |
197
- | **P2** | NDJSON event streaming | Medium | Medium |
198
- | **P2** | Shell completions | Low | Medium |
199
- | **P3** | Man page generation | Low | Low |
200
-
201
- ---
202
-
203
- ## Example: Agent-Friendly Workflow
204
-
205
- ```bash
206
- # 1. Agent detects WordPress project
207
- wp-agent-kit setup /workspace/my-plugin --auto --json
208
- # {"success":true,"applied":{"projectType":"plugin","techStack":["gutenberg","npm"]},"filesModified":["AGENTS.md"]}
209
-
210
- # 2. Agent syncs latest skills
211
- wp-agent-kit sync-skills --json
212
- # {"success":true,"skillsSynced":47,"source":"WordPress/agent-skills@trunk"}
213
-
214
- # 3. Agent installs for specific platform (e.g., Cursor)
215
- wp-agent-kit install /workspace/my-plugin --platform cursor --json
216
- # {"success":true,"platform":"cursor","targetDir":"/workspace/my-plugin","filesCreated":[".cursor/...","AGENTS.md"]}
217
- ```
218
-
219
- ---
220
-
221
- ## Implementation Notes
222
-
223
- ### Minimal Changes for P0
224
-
225
- 1. **cli.ts**: Add global `--json` flag, result formatter
226
- 2. **commands/*.ts**: Return structured results instead of `process.exit()`
227
- 3. **lib/installer.ts**: Return `InstallResult` object (already close)
228
- 4. **package.json**: Add `"exports": { ".": "./dist/cli.js", "./api": "./dist/api.js" }`
229
-
230
- ### Testing Strategy
231
-
232
- ```typescript
233
- // tests/api/install.api.test.ts
234
- import { installKit } from '../../src/api.js';
235
-
236
- it('returns structured result on success', async () => {
237
- const result = await installKit({ targetDir: '/tmp/test', platform: 'github' });
238
- expect(result.success).toBe(true);
239
- expect(result.filesCreated).toContain('AGENTS.md');
240
- });
241
- ```
242
-
243
- ---
244
-
245
- ## References
246
-
247
- - [Commander.js JSON output patterns](https://github.com/tj/commander.js/blob/master/Examples/options-json.ts)
248
- - [CLI Guidelines - Output](https://clig.dev/#output)
249
- - [12-factor CLI apps](https://medium.com/@jdxcode/12-factor-cli-apps-dd3c227a0e46)
250
- - [GitHub CLI `gh` JSON patterns](https://cli.github.com/manual/gh_help_formatting)
package/biome.json DELETED
@@ -1,39 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
- "vcs": {
4
- "enabled": true,
5
- "clientKind": "git",
6
- "useIgnoreFile": true
7
- },
8
- "files": {
9
- "include": ["src/**/*.ts", "tests/**/*.ts", "scripts/**/*.ts", "extensions/**/*.ts"],
10
- "ignoreUnknown": true
11
- },
12
- "organizeImports": {
13
- "enabled": true
14
- },
15
- "linter": {
16
- "enabled": true,
17
- "rules": {
18
- "recommended": true,
19
- "suspicious": {
20
- "noExplicitAny": "warn"
21
- },
22
- "correctness": {
23
- "noUnusedVariables": "error"
24
- }
25
- }
26
- },
27
- "formatter": {
28
- "enabled": true,
29
- "indentStyle": "tab",
30
- "lineWidth": 100
31
- },
32
- "javascript": {
33
- "formatter": {
34
- "quoteStyle": "single",
35
- "trailingCommas": "es5",
36
- "semicolons": "always"
37
- }
38
- }
39
- }