Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
2775803
exclude ideas folder from js lint
bradvin Feb 21, 2026
6d694d6
test(boot): enforce wordpress api contracts for plugin/admin paths
foo-bender Feb 21, 2026
2f9ea2e
feat(runtime): add DB-backed agent session/run store with locking
foo-bender Feb 21, 2026
5fd6138
feat(policy): add trigger-based runtime policy helper and tool gates
foo-bender Feb 21, 2026
57a1938
do not JS lint /build folder
bradvin Feb 22, 2026
6ba3b2b
Update AGENTS.md with JS coding rules
bradvin Feb 22, 2026
daa04e3
Fix JS lint issues
bradvin Feb 22, 2026
d0ec5ed
also ignore vendor folder
bradvin Feb 22, 2026
52af401
chore(eslint): treat @wordpress packages as core modules
bradvin Feb 22, 2026
97ffc19
fix(panel): declare browser globals for lint
bradvin Feb 22, 2026
fedb052
refactor(panel): remove nested ternaries in UI render paths
bradvin Feb 22, 2026
95a947b
fix(panel): satisfy a11y and active-element lint rules
bradvin Feb 22, 2026
65ad866
fix(panel): resolve remaining react-hooks lint warnings
bradvin Feb 22, 2026
9f02bc6
standardized translator comments for the duplicated strings
bradvin Feb 22, 2026
2047cd1
new build
bradvin Feb 22, 2026
e06b3b5
updated CI to do full JS lint
bradvin Feb 22, 2026
f8392a4
cleanup and updated AGENTS.md to not make this mistake again
bradvin Feb 22, 2026
db3b369
Merge pull request #21 from bradvin/feat/issue-7-wp-stub-contracts
bradvin Feb 22, 2026
7125293
added agent loop specs
bradvin Feb 23, 2026
a62c88f
added doc for policy helper
bradvin Feb 23, 2026
cd9a132
Merge branch 'develop' into feat/issue-14-policy-helper
bradvin Feb 23, 2026
448ac64
Merge pull request #23 from bradvin/feat/issue-14-policy-helper
bradvin Feb 23, 2026
224738a
fix(runtime): make run completion transactional
bradvin Feb 23, 2026
6af9223
fix(runtime): make session failure updates atomic
bradvin Feb 23, 2026
95596dd
fix(runtime): reject non-terminal completion statuses
bradvin Feb 23, 2026
6d19f8a
refactor(action-log): extract db persistence into Action_Log_Store
bradvin Feb 23, 2026
e6c4a79
refactor(agent-run): rename helper and extract run store
bradvin Feb 23, 2026
7558c3b
refactor(agent-session): rename helper and extract session store
bradvin Feb 23, 2026
34d9729
refactor(helpers): remove schema APIs and activate stores directly
bradvin Feb 23, 2026
1c3dd89
added docs for the store helpers
bradvin Feb 23, 2026
8a58b99
Merge branch 'develop' into feat/issue-13-agent-session-store
bradvin Feb 23, 2026
712f899
create final spec from original and edit
bradvin Feb 23, 2026
1a03780
Add agent event store/helper and route tool-call logging to events
bradvin Feb 23, 2026
4d831fe
Consolidate agent loop spec and document helper/store boundaries
bradvin Feb 23, 2026
92bd9eb
Merge branch 'develop' into feat/issue-13-agent-session-store
bradvin Feb 23, 2026
769847c
Resolve abilities merge and clean helper/store lint issues
bradvin Feb 23, 2026
cc58254
Merge pull request #22 from bradvin/feat/issue-13-agent-session-store
bradvin Feb 23, 2026
e0f36e6
Add shared agent loop runtime and transport abstraction
bradvin Feb 24, 2026
b8b29c9
Add agent run/session orchestration, runner, and REST endpoints
bradvin Feb 24, 2026
64a7930
Remove duplicated legacy loop logic from Chat helper
bradvin Feb 24, 2026
b94dcbd
Add comprehensive agent runtime regression test harness
bradvin Feb 24, 2026
fd8868b
Fix agent runtime state-machine regressions and retry safety
bradvin Feb 24, 2026
1f10de7
Document agent loop runtime architecture and state transitions
bradvin Feb 24, 2026
7a3bc46
Expand agent-loop spec coverage tests for positive and negative flows
bradvin Feb 24, 2026
089f2d9
Implement spawn/idempotency flows and chat in-progress handoff
bradvin Feb 24, 2026
fa813b2
added doc for streaming support (future)
bradvin Feb 24, 2026
c0e4082
documented agent loop findings
bradvin Feb 24, 2026
c65a80f
Phase 1: harden stale-run recovery and idempotency races
bradvin Feb 24, 2026
b6327d6
Phase 2: separate retry accounting and release run locks on pause
bradvin Feb 24, 2026
4094ff2
Phase 3: enforce wall-time limits and policy violation modes
bradvin Feb 24, 2026
307fa01
Phase 4: unify chat first-slice persistence and execution identity
bradvin Feb 24, 2026
271e568
Phase 5: consolidate enqueue and runtime utility paths
bradvin Feb 24, 2026
603bab6
Phase 5: refresh runtime and policy docs
bradvin Feb 24, 2026
9e0b1ed
Panel: poll agent runs after in_progress chat responses
bradvin Feb 24, 2026
add4826
Runtime: extend chat wall-time and reset per-slice step budget
bradvin Feb 24, 2026
befeae7
new build
bradvin Feb 24, 2026
d11851c
Runner: preserve pause state and answer all tool calls
bradvin Feb 24, 2026
0ac1617
Panel: use events cursor and dedupe polled tool calls
bradvin Feb 24, 2026
d31b5b1
Loop: defer over-limit tool calls without chat errors
bradvin Feb 24, 2026
ec92b6d
new build
bradvin Feb 24, 2026
477df8a
Panel: show in-progress reply as thinking-style status
bradvin Feb 24, 2026
0e9ec51
Panel: cycle thinking dots as ., .., ...
bradvin Feb 24, 2026
b337c65
Fix tool-call dedup across polling and terminal results
bradvin Feb 24, 2026
4056eb3
Persist terminal chat run result into history
bradvin Feb 24, 2026
d12a9e5
Refocus chat textarea after stream completes
bradvin Feb 24, 2026
17bb739
Hide stale in-progress status after new response
bradvin Feb 24, 2026
c8acd61
Reduce in-progress continuation latency
bradvin Feb 24, 2026
3076391
Rotate in-progress polling messages during long runs
bradvin Feb 24, 2026
65c0fcc
Fix model history to start from first user message
bradvin Feb 24, 2026
b94c14a
Slow in-progress polling and message rotation cadence
bradvin Feb 24, 2026
4915aa7
Tune run polling cadence to midpoint latency
bradvin Feb 24, 2026
d0f6301
Increase chat tool budget and improve empty terminal replies
bradvin Feb 24, 2026
c911aa8
Keep in-progress status visible during tool event bursts
bradvin Feb 24, 2026
84ac3cb
Use requesting user identity for resumed tool permissions
bradvin Feb 24, 2026
6f6cf25
Update clawpress.pot
bradvin Feb 24, 2026
0e7f66d
Add WP plugin check for main CI and local dev
foo-bender Feb 25, 2026
1145fe5
removed old docs
bradvin Feb 26, 2026
35de27e
Update agent-loop-findings.md
bradvin Feb 26, 2026
c626136
Fix run attempt semantics for paused continuation claims
bradvin Feb 26, 2026
c2c3a4b
Remove resolved agent loop findings document
bradvin Feb 26, 2026
04366c0
ci: install composer deps before plugin check
foo-bender Feb 27, 2026
80d7b2d
Merge pull request #24 from bradvin/feat/plugin-check-ci-main-local
bradvin Feb 27, 2026
0566d67
Merge branch 'develop' into codex/agent-loop-runtime
bradvin Feb 27, 2026
db7705f
Fix terminal card fallback and resolve run-store WPCS issues
bradvin Feb 27, 2026
ad73795
Switch plugin-check to dist flow and update plugin metadata
bradvin Feb 27, 2026
4bbbf7b
Fix remaining dist plugin-check packaging issues
bradvin Feb 27, 2026
f04d0c0
Ignore trademark false-positive in dist plugin check
bradvin Feb 27, 2026
66b9ce2
Fix direct DB parameter warnings in agent stores
bradvin Feb 27, 2026
41e39cd
Merge pull request #25 from bradvin/codex/agent-loop-runtime
bradvin Feb 27, 2026
c7132de
cleaned up tool command response
bradvin Mar 1, 2026
783ac99
updated TODO list
bradvin Mar 1, 2026
6dfad57
Add abilities management tab and settings API (issue #26)
bradvin Mar 1, 2026
e08fa8e
simplified the abilties cards
bradvin Mar 1, 2026
b2d910e
Allow enabling any registered ability from Abilities settings
bradvin Mar 1, 2026
a8a4f78
Show enabled external abilities in /tools list output
bradvin Mar 1, 2026
dcc5443
Regenerate translation template
bradvin Mar 1, 2026
34d3c19
safe loading of WP AI Client
bradvin Mar 1, 2026
808384e
fixes for max_output_tokens param
bradvin Mar 1, 2026
c33a89b
refactor of abilities logic
bradvin Mar 4, 2026
38bdb3a
hardening
bradvin Mar 4, 2026
0ab39da
update to latest wp-ai-client
bradvin Mar 4, 2026
85e600f
new abilities tests
bradvin Mar 4, 2026
5aec29a
new build
bradvin Mar 4, 2026
7b8ae1b
version bump 0.0.3
bradvin Mar 4, 2026
b3bcc11
Update README.md
bradvin Mar 4, 2026
d496fc7
Harden AI bridge init and run plugin-check standalone
bradvin Mar 4, 2026
9c9427b
Refactor provider rules and guard unsupported model settings
bradvin Mar 4, 2026
416d163
Update README.md
bradvin Mar 4, 2026
64b308c
Settings: load provider models on demand with cache + refresh UI
bradvin Mar 4, 2026
150142a
Provider rules: disable temperature/top_p for gpt-5.3-chat-latest
bradvin Mar 4, 2026
cfda164
Test command: report tool-call support from model metadata
bradvin Mar 4, 2026
2764b11
Provider rules: mark gpt-5.3-chat-latest as temperature unsupported
bradvin Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ideas/**
build/**
vendor/**
30 changes: 30 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const defaultConfig = require( '@wordpress/scripts/config/.eslintrc.js' );

const coreModules = new Set( [
...( defaultConfig.settings?.[ 'import/core-modules' ] || [] ),
'@wordpress/components',
'@wordpress/core-data',
'@wordpress/data',
'@wordpress/dataviews',
'@wordpress/dom-ready',
'@wordpress/element',
'@wordpress/i18n',
'@wordpress/icons',
] );

module.exports = {
...defaultConfig,
settings: {
...( defaultConfig.settings || {} ),
'import/core-modules': [ ...coreModules ],
},
rules: {
...( defaultConfig.rules || {} ),
'import/no-unresolved': [
'error',
{
ignore: [ '^@wordpress/' ],
},
],
},
};
34 changes: 28 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ name: CI
on:
pull_request:
branches: [develop, main]
push:
branches: [main]

jobs:
php:
Expand All @@ -21,8 +23,8 @@ jobs:
- name: Run PHP CodeSniffer
run: composer lint

lint-changed-js:
name: JS Lint (changed files)
lint-js:
name: JS Lint (full, conditional)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -45,11 +47,31 @@ jobs:
- name: Install dependencies
if: steps.changed-js.outputs.js == 'true'
run: npm ci
- name: Lint changed JS files only
- name: Run full JS lint
if: steps.changed-js.outputs.js == 'true'
env:
BASE_REF: origin/${{ github.base_ref }}
run: npm run lint:changed:js
run: npm run lint:js
- name: Skip JS lint (no JS changes)
if: steps.changed-js.outputs.js != 'true'
run: echo "No JS changes; skipping JS lint."

plugin-check:
name: WordPress Plugin Check
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || github.base_ref == 'main'
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: npm
- name: Install dependencies
run: npm ci
- uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
tools: composer:v2
- name: Install Composer dependencies
run: composer install --no-interaction --prefer-dist --no-progress
- name: Run dist plugin standards check
run: npm run plugin:check
5 changes: 5 additions & 0 deletions .wp-env.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"plugins": [
"."
]
}
26 changes: 21 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,19 @@ The plugin includes:
- **Hooks**: `src/js/admin/hooks/` - Custom hooks (data fetching, state)
- **Config**: `src/js/admin/config/` - Field definitions, actions, settings

### JavaScript Formatting Rules

Apply these rules consistently to avoid large lint/fix churn:

- Use tabs for indentation in JS/JSX files.
- Use single quotes for JS strings/imports (unless escaping/template use makes that inappropriate).
- Let Prettier collapse JSX/expressions to single-line when short; do not force manual multi-line wrapping.
- Do not manually align tokens/spaces for visual columns; keep standard Prettier spacing.
- Keep object/array/function formatting Prettier-first; avoid hand-formatted stylistic layouts.
- Avoid nested ternaries; expand to clear `if`/`else` when logic branches.
- Keep `ideas/` out of JS lint scope (ignored via `.eslintignore` and changed-file lint script).
- Before committing JS changes, run `npm run lint:js -- --fix` (or scoped equivalent) and then `npm run lint:js`.

### REST API Pattern

Located in `includes/class-rest-api.php`:
Expand Down Expand Up @@ -172,18 +185,21 @@ All user-facing strings must be translatable.

When writing or refactoring PHPUnit tests:

- Keep production code aligned with real WordPress runtime expectations.
- Do not add test-only `function_exists()` guards for core WordPress APIs just to satisfy PHPUnit.
- If a test environment is missing a WordPress function, add a deterministic stub in `tests/Support/WordPressStubs.php`.
- Never add test-only logic, boot contracts, or test-oriented exceptions/messages to plugin runtime code in `includes/` or `clawpress.php`.
- Do not introduce production `assert_*` helpers, runtime throws, or `function_exists()` guards solely to make tests pass.
- If PHPUnit needs a missing WordPress API, add a deterministic stub in `tests/Support/WordPressStubs.php` instead of changing plugin behavior.
- When a stub needs state, store it in `WordPress_Stubs` and reset it in `WordPress_Stubs::reset()` so tests remain isolated.
- Keep stubs minimal and behavior-focused: enough for assertions without recreating WordPress internals.
- If behavior is truly optional in production (version-gated or feature-detected APIs), keep runtime guards and prefer covering both paths in tests.
- Tests must validate real plugin behavior and observable outcomes, not internal test scaffolding.
- Prefer exercising registered hooks with `do_action()`/`apply_filters()` and asserting side effects (registered menus/routes, enqueued assets, persisted meta/options, scheduler calls).
- Avoid low-value tests that only assert stub presence (for example `function_exists()` contract lists) or only test helper assertions without behavior coverage.
- If behavior is truly optional in production (version-gated or feature-detected APIs), keep runtime guards and cover both paths in tests.

### Verification Expectations

- Run targeted PHPUnit tests for the changed module first.
- Run the full PHPUnit suite when shared test support files (like `WordPressStubs.php`) are changed.
- Prefer assertions that verify integration calls happened (for example submenu registration/removal and metadata checks).
- Prefer assertions that verify integration calls and state transitions happened (for example submenu registration/removal and metadata checks).

## Important Notes

Expand Down
3 changes: 3 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,11 @@ npm run lint:css
npm run lint:php
npm run lint:php:fix
npm run lint:changed
npm run plugin:check
```

`npm run plugin:check` builds a distribution zip, starts a disposable local WordPress environment via `wp-env`, installs the official Plugin Check plugin, installs the dist zip under a temporary slug, and runs `wp plugin check` against that packaged artifact.

## Tests

Run PHP unit tests:
Expand Down
47 changes: 33 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
# ClawPress
=== ClawPress ===
Contributors: bradvin
Tags: ai, assistant, admin
Requires at least: 6.9
Tested up to: 6.9
Requires PHP: 8.1
Stable tag: 0.0.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

AI assistant for WordPress admins.

== Description ==

![ClawPress Logo](img/clawpress-logo-500x500.png)

The AI for WordPress that actually does things
ClawPress is the AI for WordPress that actually does things.

[Preview in WordPress Playground](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/bradvin/clawpress/refs/heads/main/blueprint.json)

Expand All @@ -19,6 +31,7 @@ npm run build
make test
make lint
make lint-changed
npm run plugin:check
```

## Key Features
Expand All @@ -32,6 +45,7 @@ Current MVP features implemented in this plugin:
- Offline mode which still allows slash commands to be used.
- Setup Wizard built into chat to guide users through plugin setup process.
- Admin settings page to set which provider, model, and other settings to use.
- Admin abilities settings page to enable which abilities can be used by the agent.
- Registers WP Abilities to and loads them as tools into the AI client.
- Creates an action log database table to track actions taken by the AI assistant.
- Context & system prompt built up using chat history, tools (abilities), agent files & memory.
Expand Down Expand Up @@ -102,6 +116,7 @@ Custom endpoints with permission callbacks and parameter validation.

### Development (npm)
- `@wordpress/scripts` - Build tooling
- `@wordpress/env` - Local disposable WordPress environment for plugin checks

### Development (Composer)
- `wp-coding-standards/wpcs` - WordPress Coding Standards for PHP_CodeSniffer
Expand All @@ -128,25 +143,29 @@ Custom endpoints with permission callbacks and parameter validation.

## TODO

- Fix context usage info / limit / tooltip.
- Add current admin screen to context.
- Persist tool calls to chat history
- Define actual scope of agent user. (should the user only be used for heartbeat tasks?)
- Agent skills!
### Approved

- Add more agent abilities for reading general WordPress content (posts, pages, etc.)
- Add abilities to read memory files (long and short term).
- Add abilities for bulk file_reads and bulk memory_reads.
- Add ability to send emails to administrator using built-in WP mail functions.
- Chat threads - have multiple conversation threads at once, per user.
- Improve agent loop for multi-step messages
- Add heartbeat wizard for setting up useful nightly site health email report.
- Implement working heartbeat tasks.
- Use WP_Filesystem to read/write files
- Add abilities to read memory files (long and short term)
- Implement a working heartbeat task. Start small and test how it works. Create a built in nightly healthcheck that checks site health and emails admin. Add wizard for setting up useful nightly site health email report.
- Agent skills! Create abilities to read, create, update, execute a skill. Consider limitations and security.

### Backlog

- Add current site context, when doing direct chat messages. Consider an ability to pull this info, including all active plugins.
- Improve context usage info / limit / tooltip. (right now its not useful and not accurate. Also need to decide on a suitable max context size - maybe 200K)
- Define actual scope of agent user. (should the user only be used for heartbeat tasks?)
- Fix boostrap agent file setup and writing (doesnt always run)
- /reset command should clear everything (like uninstall + activation)
- Add more agent abilities for general WordPress content (posts, pages, etc.)
- /reset command should clear everything (like uninstall + activation). All history will be wiped and Welcome card should show. Even after page refreshes.
- Consider how browser search and use will work within WordPress.
- Mulit agent support. (can configure multiple agents)
- Multi-user support. (each user has their own agents)
- Channels for agent interaction.
- Streaming responses.
- Add ability to read DB, or generate a query to read from the DB. Might need an ability to get DB schema, which can then be used to generate a query. Need to consider destructive queries, or make all queries require confirmation just to be safe.

## Decision Log

Expand Down
4 changes: 4 additions & 0 deletions bin/lint-changed
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ fi
declare -a JS_FILES=()

while IFS= read -r -d '' file; do
if [[ "$file" == ideas/* || "$file" == build/* || "$file" == vendor/* ]]; then
continue
fi

case "$file" in
*.js|*.jsx|*.mjs|*.cjs)
JS_FILES+=("$file")
Expand Down
29 changes: 29 additions & 0 deletions bin/plugin-check
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"

cd "$REPO_ROOT"

DIST_SLUG="clawpress-dist-check"
EXPECTED_SLUG="clawpress"
DIST_ZIP_PATH="/var/www/html/wp-content/plugins/clawpress/dist/clawpress.zip"
PLUGIN_CHECK_VERSION="${PLUGIN_CHECK_VERSION:-1.8.0}"
PLUGIN_CHECK_ENGINE_ZIP_URL="https://downloads.wordpress.org/plugin/plugin-check.${PLUGIN_CHECK_VERSION}.zip"
PLUGIN_CHECK_BOOTSTRAP_PATH="/var/www/html/wp-content/plugins/clawpress/bin/plugin-check-bootstrap.php"

echo "Building plugin zip for dist plugin check..."
npm run plugin-zip

echo "Starting wp-env for dist plugin check..."
npx wp-env start

echo "Installing dist zip into temporary plugin slug..."
npx wp-env run tests-cli -- bash -lc "set -euo pipefail; rm -rf /tmp/plugin-check-dist /var/www/html/wp-content/plugins/${DIST_SLUG}; mkdir -p /tmp/plugin-check-dist; unzip -q ${DIST_ZIP_PATH} -d /tmp/plugin-check-dist; DIST_SOURCE=\$(find /tmp/plugin-check-dist -mindepth 1 -maxdepth 1 -type d | head -n 1); if [[ -z \"\${DIST_SOURCE}\" ]]; then echo 'Unable to locate extracted plugin directory from dist zip.' >&2; exit 1; fi; cp -R \"\${DIST_SOURCE}\" /var/www/html/wp-content/plugins/${DIST_SLUG};"

echo "Ensuring site plugin-check plugin is not installed..."
npx wp-env run tests-cli -- bash -lc "set -euo pipefail; if wp plugin is-installed plugin-check >/dev/null 2>&1; then wp plugin deactivate plugin-check --quiet || true; wp plugin delete plugin-check --quiet; fi"

echo "Running standalone Plugin Check engine against dist plugin contents..."
npx wp-env run tests-cli -- bash -lc "set -euo pipefail; ENGINE_ROOT=/tmp/plugin-check-engine; ENGINE_ZIP=/tmp/plugin-check-engine.zip; rm -rf \"\${ENGINE_ROOT}\" \"\${ENGINE_ZIP}\"; mkdir -p \"\${ENGINE_ROOT}\"; if command -v curl >/dev/null 2>&1; then curl -fsSL \"${PLUGIN_CHECK_ENGINE_ZIP_URL}\" -o \"\${ENGINE_ZIP}\"; else wget -q \"${PLUGIN_CHECK_ENGINE_ZIP_URL}\" -O \"\${ENGINE_ZIP}\"; fi; unzip -q \"\${ENGINE_ZIP}\" -d \"\${ENGINE_ROOT}\"; ENGINE_DIR=\"\${ENGINE_ROOT}/plugin-check\"; if [[ ! -f \"\${ENGINE_DIR}/vendor/autoload.php\" ]]; then echo 'Standalone plugin-check engine autoload.php missing after extraction.' >&2; exit 1; fi; if [[ ! -f \"${PLUGIN_CHECK_BOOTSTRAP_PATH}\" ]]; then echo 'Standalone plugin-check bootstrap file is missing in plugin repo.' >&2; exit 1; fi; WP_PLUGIN_CHECK_ENGINE_DIR=\"\${ENGINE_DIR}\" wp --path=/var/www/html --require=\"${PLUGIN_CHECK_BOOTSTRAP_PATH}\" plugin check \"${DIST_SLUG}\" --slug=\"${EXPECTED_SLUG}\" --ignore-codes=trademarked_term"
Loading