Skip to content

Commit f89e97a

Browse files
committed
[ADD] demo verification script and update project configuration
1 parent f069108 commit f89e97a

12 files changed

Lines changed: 340 additions & 56 deletions

File tree

DOCS.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ Implementation order is mandatory:
3232
- Gate A: web transport + manager route + manager ACL (`emcp`) + `initialize` + `tools/list` + `GET=405`
3333
- Gate B: API access layer (scope engine, basic rate limit, `sApi` provider)
3434
- Gate C: async (`sTask` worker, payload contract, failover, idempotency)
35-
- Gate D: optional Passport compatibility
36-
- Gate E: security hardening + DX commands
35+
- Gate D: security hardening + DX commands
3736

3837
Minimal first release is Gate A only.
3938

@@ -81,11 +80,8 @@ Mandatory:
8180
- Evolution CMS 3.5.2+
8281
- PHP 8.4+
8382
- Composer 2.2+
84-
85-
Optional:
86-
- `seiger/sapi` for external API access
87-
- `seiger/stask` for async execution
88-
- `laravel/passport` for OAuth-compatible mode
83+
- `seiger/sapi` 1.x
84+
- `seiger/stask` 1.x
8985

9086
## 4) Install
9187
From Evo `core` directory:
@@ -375,12 +371,10 @@ Rules:
375371
## 9) Auth Modes
376372
Supported modes:
377373
- `sapi_jwt` (default): uses `sApi` JWT middleware attributes
378-
- `passport` (optional): OAuth-compatible mode (`mcp:use`)
379374
- `none` (restricted/internal scenarios only)
380375

381376
Behavior contract:
382-
- Passport mode is optional and must degrade safely if Passport is absent.
383-
- Missing optional auth dependencies must not break package boot.
377+
- Missing auth configuration must not break package boot.
384378

385379
## 10) Routes and Transports
386380

DOCS.uk.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ Status marker:
3232
- Gate A: web transport + manager route + manager ACL (`emcp`) + `initialize` + `tools/list` + `GET=405`
3333
- Gate B: API access layer (scope engine, basic rate limit, `sApi` provider)
3434
- Gate C: async (`sTask` worker, payload contract, failover, idempotency)
35-
- Gate D: optional Passport compatibility
36-
- Gate E: security hardening + DX commands
35+
- Gate D: security hardening + DX commands
3736

3837
Перший реліз — тільки Gate A.
3938

@@ -81,11 +80,8 @@ php artisan make:mcp-tool HealthTool
8180
- Evolution CMS 3.5.2+
8281
- PHP 8.4+
8382
- Composer 2.2+
84-
85-
Опційно:
86-
- `seiger/sapi` для зовнішнього API доступу
87-
- `seiger/stask` для async виконання
88-
- `laravel/passport` для OAuth-compatible режиму
83+
- `seiger/sapi` 1.x
84+
- `seiger/stask` 1.x
8985

9086
## 4) Встановлення
9187
З директорії `core` Evo:
@@ -375,12 +371,10 @@ Default allowlist моделей:
375371
## 9) Режими аутентифікації
376372
Підтримувані режими:
377373
- `sapi_jwt` (default): використовує JWT атрибути `sApi`
378-
- `passport` (optional): OAuth-compatible режим (`mcp:use`)
379374
- `none` (лише для обмежених внутрішніх сценаріїв)
380375

381376
Контракт:
382-
- Passport режим опційний і має безпечно деградувати, якщо Passport не встановлено
383-
- відсутність optional залежностей не повинна ламати boot пакета
377+
- відсутність auth-конфігурації не повинна ламати boot пакета
384378

385379
## 10) Routes і transports
386380

Makefile

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: check test demo demo-seed demo-clean
1+
.PHONY: check test demo demo-seed demo-clean demo-verify demo-all
22

33
check:
44
composer run check
@@ -8,7 +8,14 @@ test:
88

99
DEMO_DIR ?= demo
1010
DEMO_CORE_DIR := $(DEMO_DIR)/core
11-
DEMO_CUSTOM_DIR := $(DEMO_CORE_DIR)/custom
11+
DEMO_HOST ?= 127.0.0.1
12+
DEMO_PORT ?= 8787
13+
DEMO_BASE_URL ?= http://$(DEMO_HOST):$(DEMO_PORT)
14+
DEMO_SERVER_HANDLE ?= content
15+
DEMO_DISPATCH_CHECK ?= 1
16+
DEMO_JWT_SECRET ?= emcp-demo-secret
17+
SAPI_BASE_PATH ?= api
18+
SAPI_VERSION ?= v1
1219

1320
EVO_BIN ?= evo
1421
EVO_BRANCH ?= 3.5.x
@@ -20,7 +27,7 @@ EVO_ADMIN_PASSWORD ?= 123456
2027
EVO_ADMIN_DIRECTORY ?= manager
2128
EVO_LANGUAGE ?= uk
2229
EMCP_CONSTRAINT ?= *@dev
23-
EMCP_PATH_REPO ?= ../../../
30+
EMCP_PATH_REPO ?= $(CURDIR)
2431

2532
demo:
2633
@set -eu; \
@@ -43,17 +50,23 @@ demo:
4350
--admin-directory="$(EVO_ADMIN_DIRECTORY)" \
4451
--language="$(EVO_LANGUAGE)" \
4552
--composer-clear-cache; \
46-
cd "$(DEMO_CUSTOM_DIR)"; \
53+
cd "$(DEMO_CORE_DIR)"; \
54+
composer config repositories.stask '{"type":"vcs","url":"https://github.com/Seiger/sTask"}'; \
55+
composer config repositories.sapi '{"type":"vcs","url":"https://github.com/Seiger/sApi"}'; \
4756
composer config repositories.emcp '{"type":"path","url":"$(EMCP_PATH_REPO)","options":{"symlink":true}}'; \
48-
cd ..; \
4957
php artisan package:installrequire evolution-cms/emcp "$(EMCP_CONSTRAINT)"; \
5058
php artisan vendor:publish --provider="EvolutionCMS\\eMCP\\eMCPServiceProvider" --tag=emcp-config --force; \
5159
php artisan vendor:publish --provider="EvolutionCMS\\eMCP\\eMCPServiceProvider" --tag=emcp-mcp-config --force; \
5260
php artisan vendor:publish --provider="EvolutionCMS\\eMCP\\eMCPServiceProvider" --tag=emcp-stubs --force; \
5361
php artisan migrate --force; \
54-
php artisan db:seed --force; \
62+
if php -r "require 'vendor/autoload.php'; exit(class_exists('DatabaseSeeder') ? 0 : 1);" >/dev/null 2>&1; then \
63+
php artisan db:seed --force; \
64+
else \
65+
echo "Skipping db:seed: DatabaseSeeder is not defined in this EVO install."; \
66+
fi; \
5567
php artisan cache:clear-full; \
56-
echo "Demo environment is ready in '$(DEMO_DIR)'."
68+
echo "Demo environment is ready in '$(DEMO_DIR)'."; \
69+
echo "Run 'make demo-verify' to start php -S and run all tests automatically."
5770

5871
demo-seed:
5972
@set -eu; \
@@ -62,9 +75,35 @@ demo-seed:
6275
exit 1; \
6376
}; \
6477
cd "$(DEMO_CORE_DIR)"; \
65-
php artisan db:seed --force; \
78+
if php -r "require 'vendor/autoload.php'; exit(class_exists('DatabaseSeeder') ? 0 : 1);" >/dev/null 2>&1; then \
79+
php artisan db:seed --force; \
80+
else \
81+
echo "Skipping db:seed: DatabaseSeeder is not defined in this EVO install."; \
82+
fi; \
6683
php artisan cache:clear-full
6784

6885
demo-clean:
6986
@set -eu; \
7087
rm -rf "$(DEMO_DIR)"
88+
89+
demo-verify:
90+
@set -eu; \
91+
test -f "$(DEMO_CORE_DIR)/artisan" || { \
92+
echo "Error: demo is not installed. Run 'make demo' first."; \
93+
exit 1; \
94+
}; \
95+
DEMO_DIR="$(DEMO_DIR)" \
96+
DEMO_CORE_DIR="$(DEMO_CORE_DIR)" \
97+
DEMO_HOST="$(DEMO_HOST)" \
98+
DEMO_PORT="$(DEMO_PORT)" \
99+
DEMO_BASE_URL="$(DEMO_BASE_URL)" \
100+
DEMO_ADMIN_USERNAME="$(EVO_ADMIN_USERNAME)" \
101+
DEMO_ADMIN_PASSWORD="$(EVO_ADMIN_PASSWORD)" \
102+
EMCP_SERVER_HANDLE="$(DEMO_SERVER_HANDLE)" \
103+
EMCP_DISPATCH_CHECK="$(DEMO_DISPATCH_CHECK)" \
104+
SAPI_JWT_SECRET="$(DEMO_JWT_SECRET)" \
105+
SAPI_BASE_PATH="$(SAPI_BASE_PATH)" \
106+
SAPI_VERSION="$(SAPI_VERSION)" \
107+
sh scripts/demo_verify.sh
108+
109+
demo-all: demo demo-verify

README.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@ Operations runbook: `OPERATIONS.md`.
3434
- Evolution CMS 3.5.2+
3535
- PHP 8.4+
3636
- Composer 2.2+
37-
38-
Optional:
39-
- `seiger/sapi` for external MCP API access
40-
- `seiger/stask` for async MCP dispatch
41-
- `laravel/passport` for OAuth-compatible mode
37+
- `seiger/sapi` 1.x (installed as dependency)
38+
- `seiger/stask` 1.x (installed as dependency)
4239

4340
## Install
4441
From your Evo `core` directory:
@@ -184,7 +181,6 @@ Notes:
184181
## Access Model
185182
- Manager/internal access: Evo permission `emcp`
186183
- API access (via sApi): JWT scopes (`mcp:read`, `mcp:call`, `mcp:admin`)
187-
- Optional Passport mode: `mcp:use` compatibility when Passport is installed
188184
- Domain reads (`evo.content.*`, `evo.model.*`) are read-only by default
189185

190186
## Ecosystem Interop
@@ -234,6 +230,14 @@ composer run ci:check
234230

235231
These checks validate `composer.json` and run PHP syntax lint across package sources.
236232

233+
One-click demo + full MCP verification:
234+
235+
```bash
236+
make demo-all
237+
```
238+
239+
This target installs demo Evo, starts `php -S`, issues sApi JWT, runs `php artisan emcp:test`, then runs `composer run test` with HTTP runtime integration enabled.
240+
237241
Optional runtime integration check (against deployed environment):
238242

239243
```bash

README.uk.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@ Versioning і BC policy: `PRD.md` (розділ `API Stability Policy`).
3434
- Evolution CMS 3.5.2+
3535
- PHP 8.4+
3636
- Composer 2.2+
37-
38-
Опційно:
39-
- `seiger/sapi` для зовнішнього MCP API
40-
- `seiger/stask` для async dispatch
41-
- `laravel/passport` для OAuth-compatible режиму
37+
- `seiger/sapi` 1.x (встановлюється як залежність)
38+
- `seiger/stask` 1.x (встановлюється як залежність)
4239

4340
## Встановлення
4441
З директорії `core` вашого Evo:
@@ -183,7 +180,6 @@ return [
183180
## Модель доступу
184181
- Внутрішній доступ (manager): permission `emcp`
185182
- API доступ (через sApi): JWT scopes (`mcp:read`, `mcp:call`, `mcp:admin`)
186-
- Optional Passport mode: сумісність з `mcp:use`, якщо Passport встановлено
187183
- Domain read tools (`evo.content.*`, `evo.model.*`) за замовчуванням read-only
188184

189185
## Взаємодія В Екосистемі
@@ -233,6 +229,14 @@ composer run ci:check
233229

234230
Ці перевірки валідовують `composer.json` і виконують PHP syntax lint по всіх файлах пакета.
235231

232+
One-click демо + повна MCP перевірка:
233+
234+
```bash
235+
make demo-all
236+
```
237+
238+
Ця ціль встановлює demo Evo, запускає `php -S`, видає sApi JWT, виконує `php artisan emcp:test`, а потім `composer run test` з увімкненою HTTP runtime integration перевіркою.
239+
236240
Опційна runtime integration перевірка (проти розгорнутого середовища):
237241

238242
```bash

composer.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,9 @@
1313
"require": {
1414
"php": "^8.4",
1515
"evolution-cms/evolution": "^3.5.2",
16-
"laravel/mcp": "^0.5"
17-
},
18-
"suggest": {
19-
"seiger/sapi": "Required for external API mode and scope middleware integration",
20-
"seiger/stask": "Required for async dispatch worker integration",
21-
"laravel/passport": "Optional OAuth-compatible mode"
16+
"laravel/mcp": "^0.5",
17+
"seiger/sapi": "^1.0",
18+
"seiger/stask": "^1.0"
2219
},
2320
"autoload": {
2421
"psr-4": {

0 commit comments

Comments
 (0)