@jahia/agentic 0.2.0 → 0.4.0
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/CHANGELOG.md +8 -0
- package/README.md +28 -0
- package/dist/claude/.claude/agents/cnd-child-nodes.md +74 -0
- package/dist/claude/.claude/agents/cnd-jahia-mixins.md +113 -0
- package/dist/claude/.claude/agents/cnd-numbers-dates.md +61 -0
- package/dist/claude/.claude/agents/cnd-string-selectors.md +94 -0
- package/dist/claude/.claude/agents/jahia-cnd-author.md +130 -0
- package/dist/claude/.claude/agents/jahia-dev-worker.md +264 -0
- package/dist/claude/.claude/agents/jahia-reviewer.md +105 -0
- package/dist/claude/.claude/rules/jahia.md +15 -6
- package/dist/claude/.claude/skills/jahia/SKILL.md +23 -11
- package/dist/claude/.claude/skills/jahia-content/SKILL.md +102 -84
- package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/claude/.claude/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/claude/.claude/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/claude/.claude/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/claude/.claude/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/claude/.claude/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/claude/.claude/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/claude/.claude/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/claude/.claude/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/claude/.claude/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/claude/.claude/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/claude/.claude/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/claude/.claude/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/claude/.claude/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/claude/.claude/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/claude/.claude/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/claude/CLAUDE.md +16 -13
- package/dist/codex/.agents/skills/jahia/SKILL.md +23 -11
- package/dist/codex/.agents/skills/jahia-content/SKILL.md +102 -84
- package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/codex/.agents/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/codex/.agents/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/codex/.agents/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/codex/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/codex/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/codex/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/codex/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/codex/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/codex/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/codex/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/codex/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/codex/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/codex/.agents/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/codex/.agents/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/codex/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/codex/.codex/agents/cnd-child-nodes.toml +3 -0
- package/dist/codex/.codex/agents/cnd-jahia-mixins.toml +3 -0
- package/dist/codex/.codex/agents/cnd-numbers-dates.toml +3 -0
- package/dist/codex/.codex/agents/cnd-string-selectors.toml +3 -0
- package/dist/codex/.codex/agents/jahia-cnd-author.toml +3 -0
- package/dist/codex/.codex/agents/jahia-dev-worker.toml +3 -0
- package/dist/codex/.codex/agents/jahia-reviewer.toml +3 -0
- package/dist/codex/AGENTS.md +17 -10
- package/dist/copilot/.agents/skills/jahia/SKILL.md +23 -11
- package/dist/copilot/.agents/skills/jahia-content/SKILL.md +102 -84
- package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/copilot/.agents/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/copilot/.agents/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/copilot/.agents/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/copilot/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/copilot/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/copilot/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/copilot/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/copilot/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/copilot/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/copilot/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/copilot/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/copilot/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/copilot/.agents/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/copilot/.agents/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/copilot/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/copilot/AGENTS.md +17 -10
- package/dist/cursor/.agents/skills/jahia/SKILL.md +23 -11
- package/dist/cursor/.agents/skills/jahia-content/SKILL.md +102 -84
- package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/cursor/.agents/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/cursor/.agents/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/cursor/.agents/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/cursor/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/cursor/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/cursor/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/cursor/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/cursor/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/cursor/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/cursor/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/cursor/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/cursor/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/cursor/.agents/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/cursor/.agents/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/cursor/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/cursor/.cursor/agents/cnd-child-nodes.md +74 -0
- package/dist/cursor/.cursor/agents/cnd-jahia-mixins.md +113 -0
- package/dist/cursor/.cursor/agents/cnd-numbers-dates.md +61 -0
- package/dist/cursor/.cursor/agents/cnd-string-selectors.md +94 -0
- package/dist/cursor/.cursor/agents/jahia-cnd-author.md +130 -0
- package/dist/cursor/.cursor/agents/jahia-dev-worker.md +264 -0
- package/dist/cursor/.cursor/agents/jahia-reviewer.md +105 -0
- package/dist/cursor/.cursor/rules/jahia.mdc +15 -6
- package/dist/gemini/.agents/skills/jahia/SKILL.md +23 -11
- package/dist/gemini/.agents/skills/jahia-content/SKILL.md +102 -84
- package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/gemini/.agents/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/gemini/.agents/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/gemini/.agents/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/gemini/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/gemini/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/gemini/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/gemini/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/gemini/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/gemini/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/gemini/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/gemini/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/gemini/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/gemini/.agents/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/gemini/.agents/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/gemini/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/gemini/AGENTS.md +17 -10
- package/dist/gemini/GEMINI.md +2 -2
- package/dist/index.js +13 -0
- package/dist/opencode/.agents/skills/jahia/SKILL.md +23 -11
- package/dist/opencode/.agents/skills/jahia-content/SKILL.md +102 -84
- package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/opencode/.agents/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/opencode/.agents/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/opencode/.agents/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/opencode/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/opencode/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/opencode/.agents/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/opencode/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/opencode/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/opencode/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/opencode/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/opencode/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/opencode/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/opencode/.agents/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/opencode/.agents/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/opencode/.agents/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/opencode/.opencode/agents/cnd-child-nodes.md +74 -0
- package/dist/opencode/.opencode/agents/cnd-jahia-mixins.md +113 -0
- package/dist/opencode/.opencode/agents/cnd-numbers-dates.md +61 -0
- package/dist/opencode/.opencode/agents/cnd-string-selectors.md +94 -0
- package/dist/opencode/.opencode/agents/jahia-cnd-author.md +130 -0
- package/dist/opencode/.opencode/agents/jahia-dev-worker.md +264 -0
- package/dist/opencode/.opencode/agents/jahia-reviewer.md +105 -0
- package/dist/opencode/AGENTS.md +17 -10
- package/dist/windsurf/.windsurf/rules/jahia.md +15 -6
- package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +23 -11
- package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +102 -84
- package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +255 -280
- package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +187 -96
- package/dist/windsurf/.windsurf/skills/jahia-content-media-upload/SKILL.md +197 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +160 -165
- package/dist/windsurf/.windsurf/skills/jahia-content-organize/SKILL.md +209 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-publish/SKILL.md +181 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +122 -92
- package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +154 -225
- package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +3 -3
- package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +10 -7
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-page-template/SKILL.md +59 -21
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-template-set/SKILL.md +20 -47
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +3 -3
- package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +150 -330
- package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +43 -486
- package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/references/modeling-decisions.md +52 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +93 -296
- package/dist/windsurf/.windsurf/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/SKILL.md +70 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-start-local/SKILL.md +18 -26
- package/dist/windsurf/.windsurf/skills/jahia-jcr-sql2/SKILL.md +258 -0
- package/dist/windsurf/.windsurf/skills/jahia-orchestrate/SKILL.md +148 -0
- package/dist/windsurf/.windsurf/skills/jahia-orchestrate/scripts/verify-pages.mjs +59 -0
- package/dist/windsurf/AGENTS.md +17 -10
- package/package.json +3 -3
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-worker
|
|
3
|
+
description: Developer worker for Jahia module builds. Reads PLAN.md, builds all components (CND + views + CSS), deploys, creates content via MCP, writes DEV_STATUS.md. Invoked by the orchestrator.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash
|
|
5
|
+
# MCP tools (jahia server) are also required — no tools: block so Claude Code allows all
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the Jahia developer worker. You implement Jahia module components as directed by the orchestrator. Your context window is precious — do not read files you don't need.
|
|
9
|
+
|
|
10
|
+
## Step 0 — Read your plan
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
cat PLAN.md
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Parse the plan carefully. Note:
|
|
17
|
+
- Module path
|
|
18
|
+
- Components to build
|
|
19
|
+
- Efficiency rules (follow them exactly)
|
|
20
|
+
- Round N Fix-Ups section (present from round 2 — fix these and ONLY these before re-deploying)
|
|
21
|
+
|
|
22
|
+
**Fix-cycle guard:** If PLAN.md contains a `## Round N Fix-Ups` section (where N ≥ 2), this is a fix cycle. Skip Steps 5 (create content) and 6 (write pages.json) entirely — content was already created in round 1 and pages.json already exists. Apply only the listed fixes, redeploy (Step 4), and write DEV_STATUS.md (Step 7).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Step 1 — Load CND reference files
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
find . -maxdepth 4 -name "cnd-jahia-mixins*" 2>/dev/null | head -3
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Read the file found. Also read `cnd-string-selectors.md` (links, choices) and `cnd-child-nodes.md` (repeatable children) from the same directory.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Step 2 — Resolve namespace
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
grep "^<" settings/definitions.cnd | head -5
|
|
40
|
+
grep "pageComponent" settings/definitions.cnd || echo "(pageComponent not yet defined)"
|
|
41
|
+
ls src/components/ 2>/dev/null || echo "(no components yet)"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Note the namespace prefix and whether `namespacemix:pageComponent` exists.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Step 3 — Build page template, then all components
|
|
49
|
+
|
|
50
|
+
**Build the page template first.** Every website needs a root layout. Create:
|
|
51
|
+
|
|
52
|
+
`src/templates/<ModuleName>Template/default.server.tsx`
|
|
53
|
+
|
|
54
|
+
> The template file is always `default.server.tsx` inside a named folder — never `basic.server.tsx` or any other name.
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import React from 'react';
|
|
58
|
+
import { Area, AbsoluteArea, getChildNodes, buildNodeUrl, jahiaComponent } from '@jahia/javascript-modules-library';
|
|
59
|
+
import styles from './template.module.css';
|
|
60
|
+
|
|
61
|
+
jahiaComponent(
|
|
62
|
+
{
|
|
63
|
+
componentType: 'template',
|
|
64
|
+
nodeType: 'jnt:page',
|
|
65
|
+
displayName: 'Default Template',
|
|
66
|
+
name: 'default',
|
|
67
|
+
},
|
|
68
|
+
({ 'jcr:title': title }, { renderContext, mainNode }) => {
|
|
69
|
+
// Pages live under /sites/<key>/home — not directly under the site node
|
|
70
|
+
const siteHome = renderContext.getSite().getNode('home');
|
|
71
|
+
const navPages = getChildNodes(siteHome, -1, 0, n => n.isNodeType('jnt:page'));
|
|
72
|
+
const siteName = renderContext.getSite().getPropertyAsString('j:siteTitle') ?? renderContext.getSite().getName();
|
|
73
|
+
return (
|
|
74
|
+
<html lang="en">
|
|
75
|
+
<head>
|
|
76
|
+
<meta charSet="UTF-8" />
|
|
77
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
78
|
+
{/* title = short page name + site name — never set jcr:title to the full "Page | Site" string */}
|
|
79
|
+
<title>{title}{siteName ? ` | ${siteName}` : ''}</title>
|
|
80
|
+
</head>
|
|
81
|
+
<body>
|
|
82
|
+
<a href="#main-content" className={styles.skipLink}>Skip to main content</a>
|
|
83
|
+
<header className={styles.header}>
|
|
84
|
+
<nav aria-label="Main navigation">
|
|
85
|
+
<ul className={styles.navList}>
|
|
86
|
+
<li key={siteHome.getPath()}>
|
|
87
|
+
<a
|
|
88
|
+
href={buildNodeUrl(siteHome)}
|
|
89
|
+
aria-current={siteHome.getPath() === mainNode.getPath() ? 'page' : undefined}
|
|
90
|
+
>
|
|
91
|
+
{siteHome.getPropertyAsString('jcr:title') ?? siteHome.getName()}
|
|
92
|
+
</a>
|
|
93
|
+
</li>
|
|
94
|
+
{navPages.map(page => (
|
|
95
|
+
<li key={page.getPath()}>
|
|
96
|
+
<a
|
|
97
|
+
href={buildNodeUrl(page)}
|
|
98
|
+
aria-current={page.getPath() === mainNode.getPath() ? 'page' : undefined}
|
|
99
|
+
>
|
|
100
|
+
{page.getPropertyAsString('jcr:title') ?? page.getName()}
|
|
101
|
+
</a>
|
|
102
|
+
</li>
|
|
103
|
+
))}
|
|
104
|
+
</ul>
|
|
105
|
+
</nav>
|
|
106
|
+
</header>
|
|
107
|
+
<main id="main-content">
|
|
108
|
+
<h1 className={styles.pageTitle}>{title}</h1>
|
|
109
|
+
<Area name="pagecontent" />
|
|
110
|
+
</main>
|
|
111
|
+
<footer className={styles.footer}>
|
|
112
|
+
<AbsoluteArea name="footer" parent={renderContext.getSite()} />
|
|
113
|
+
<p className={styles.copyright}>{'© '}{renderContext.getSite().getName()}</p>
|
|
114
|
+
</footer>
|
|
115
|
+
</body>
|
|
116
|
+
</html>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Also create `src/templates/<ModuleName>Template/template.module.css` with minimal header/footer styles including `.skipLink` (visually hidden until focused), `.navList` (horizontal flex list), `.pageTitle`, and `.copyright`.
|
|
123
|
+
|
|
124
|
+
**Then, for each component** in the plan:
|
|
125
|
+
|
|
126
|
+
1. Create `src/components/<Category>/<Name>/definition.cnd`
|
|
127
|
+
- **⚠️ This file only. Never add component types to `settings/definitions.cnd` — that file is for namespace declarations and the module base mixin only.**
|
|
128
|
+
- Namespace declarations at top (e.g. `<ns = 'https://example.com/ns/nt/1.0'>`)
|
|
129
|
+
- Extend `namespacemix:pageComponent` (for page-area components) or `namespacemix:component` (for children)
|
|
130
|
+
- Use `mix:title` for titles, NOT `- title (string)`
|
|
131
|
+
- Use `(weakreference, picker[type='image']) < jmix:image` for images
|
|
132
|
+
- Use `j:linkType (string, choicelist[linkTypeInitializer]) mandatory` for links
|
|
133
|
+
- Child items use `+ * (ns:childType) orderable`
|
|
134
|
+
- i18n on ALL user-visible string/textarea/richtext properties
|
|
135
|
+
|
|
136
|
+
**After writing the CND file, immediately run the checker and loop until clean:**
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
CND_SCRIPT=$(find .claude .agents -name "check-cnd.mjs" 2>/dev/null | head -1)
|
|
140
|
+
[ -n "$CND_SCRIPT" ] && node "$CND_SCRIPT" src/components/<Category>/<Name>/definition.cnd
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- If the result is `FAIL`: read each issue, apply the fix, re-run.
|
|
144
|
+
- Repeat until the result is `PASS`.
|
|
145
|
+
- **Do not write the view (`types.ts`, `default.server.tsx`) until the CND is clean.**
|
|
146
|
+
|
|
147
|
+
2. Create `src/components/<Category>/<Name>/types.ts`
|
|
148
|
+
- All props use `?:` (optional) even if mandatory in CND
|
|
149
|
+
- Import `JCRNodeWrapper` from `@jahia/javascript-modules-library` for node refs
|
|
150
|
+
|
|
151
|
+
3. Create `src/components/<Category>/<Name>/default.server.tsx`
|
|
152
|
+
- Import `Props` from `./types.js`
|
|
153
|
+
- Use semantic HTML: `<section>`, `<article>`, `<header>`, `<main>`
|
|
154
|
+
- **Components use `<h2>` for their primary heading, `<h3>` for sub-headings. Never `<h1>` — the page template owns the h1.**
|
|
155
|
+
- Guard all props: `{prop?.value && <span>{prop.value}</span>}`
|
|
156
|
+
- Guard node URLs: `prop["j:linknode"] ? buildNodeUrl(prop["j:linknode"]) : "#"`
|
|
157
|
+
- `alt` on every `<img>`: use `imageAlt || title || 'Image'` — never fall back to empty string
|
|
158
|
+
|
|
159
|
+
4. Create `src/components/<Category>/<Name>/component.module.css`
|
|
160
|
+
- Scoped CSS for the component
|
|
161
|
+
- Mobile-first responsive
|
|
162
|
+
- Colour contrast ≥ 4.5:1 for text on background
|
|
163
|
+
|
|
164
|
+
**After each component, deploy and verify it renders before moving to the next.**
|
|
165
|
+
|
|
166
|
+
**Check TypeScript types before each deploy:**
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
tsc --noEmit 2>&1 | head -30
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Fix every type error before running `yarn build`. Use `mcp__ide__getDiagnostics` on each `.tsx` file for inline feedback — never grep `node_modules` for API signatures.
|
|
173
|
+
|
|
174
|
+
**Validate all CNDs before each deploy (final gate):**
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
CND_SCRIPT=$(find .claude .agents -name "check-cnd.mjs" 2>/dev/null | head -1)
|
|
178
|
+
[ -n "$CND_SCRIPT" ] && node "$CND_SCRIPT" src/
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
If the result is `FAIL`, fix every issue and re-run until `PASS`. Do not run `yarn build` until the checker is clean.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Step 4 — Deploy
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
yarn build && yarn jahia-deploy
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
If it fails, read the error, fix it, and retry. Record the outcome.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Step 5 — Create content (only if deploy succeeded)
|
|
196
|
+
|
|
197
|
+
Use MCP tools (the `jahia` MCP server) to:
|
|
198
|
+
1. Discover the site key
|
|
199
|
+
2. Create all pages as children of the home page (`parentPath: /sites/<key>/home`) — set `jcr:title` to the **short page name only** (e.g. "Car Insurance", not "Car Insurance | Acme Corp"). The template appends the site name to `<title>` automatically.
|
|
200
|
+
3. Before creating content nodes, verify the parent area node exists with `content.get`. If it does not exist, create it first with the correct `jcr:primaryType` (e.g. `namespace:pageArea`).
|
|
201
|
+
4. Create content nodes and populate them with realistic copy
|
|
202
|
+
5. Publish all pages
|
|
203
|
+
|
|
204
|
+
**Verify every page renders real content and passes a11y + SEO checks:**
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
SCRIPT=$(find .claude .agents -name "review-pages.mjs" 2>/dev/null | head -1)
|
|
208
|
+
node "$SCRIPT" 2>&1 | tee /tmp/site-review.txt
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The script checks each URL in `pages.json` for:
|
|
212
|
+
1. HTTP 200 and no Jahia error markers
|
|
213
|
+
2. A11y: no critical/serious WCAG 2.1 AA violations (axe-core)
|
|
214
|
+
3. SEO: `<title>`, `<meta name="description">`, single `<h1>`, all `<img>` have `alt`
|
|
215
|
+
|
|
216
|
+
If the script exits 1, read the violations, fix them in the source, redeploy (`yarn build && yarn jahia-deploy`), and re-run. Do not write `pages.json` until the script exits 0.
|
|
217
|
+
|
|
218
|
+
**Tooling check** — if `review-pages.mjs` reports missing modules:
|
|
219
|
+
```bash
|
|
220
|
+
npm install --no-save @axe-core/playwright playwright && npx playwright install chromium --with-deps
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Step 6 — Write pages.json
|
|
226
|
+
|
|
227
|
+
Only reach this step once every page verified clean in Step 5.
|
|
228
|
+
|
|
229
|
+
Collect the public URLs for all pages — URLs that return the full rendered page without requiring authentication. MCP tools often return edit/preview mode URLs; convert them to their publicly accessible equivalent before writing.
|
|
230
|
+
|
|
231
|
+
Write `pages.json`:
|
|
232
|
+
```json
|
|
233
|
+
["http://localhost:8080/cms/render/live/en/sites/<siteKey>/home.html", "..."]
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Step 7 — Write DEV_STATUS.md
|
|
239
|
+
|
|
240
|
+
Write a `DEV_STATUS.md` file in the project root:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
# Dev Status
|
|
244
|
+
|
|
245
|
+
## Status
|
|
246
|
+
COMPLETE
|
|
247
|
+
|
|
248
|
+
## Components built
|
|
249
|
+
<list each component and whether CND + view + CSS were created>
|
|
250
|
+
|
|
251
|
+
## Deploy
|
|
252
|
+
SUCCESS | FAILED — <error if failed>
|
|
253
|
+
|
|
254
|
+
## Content
|
|
255
|
+
<number> pages created and published | SKIPPED | FAILED — <error>
|
|
256
|
+
|
|
257
|
+
## pages.json written
|
|
258
|
+
YES | NO
|
|
259
|
+
|
|
260
|
+
## Notes
|
|
261
|
+
<any issues, skipped items, or errors>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Set Status to FAILED if deploy or content creation failed and could not be recovered.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-reviewer
|
|
3
|
+
description: Code review agent for Jahia modules. Reads the module source and writes REVIEW.md with findings from the jahia-dev-review criteria. Invoked by the orchestrator after each dev cycle.
|
|
4
|
+
allowed-tools: Read, Bash
|
|
5
|
+
# No tools: block — consistent with other agents; Claude Code allows all by default
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the Jahia code reviewer. Your job is to read the module source and report findings. You do NOT fix anything — you only report. Keep your analysis focused and your output concise.
|
|
9
|
+
|
|
10
|
+
## Step 1 — Collect files to review
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
find src/ -name "definition.cnd" | sort
|
|
14
|
+
find src/ -name "*.server.tsx" | sort
|
|
15
|
+
find src/ -name "types.ts" | sort
|
|
16
|
+
cat settings/definitions.cnd
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Read ALL of the above files before forming any conclusions.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 2 — Run critical checks
|
|
24
|
+
|
|
25
|
+
Scan for each of these. Report only what you actually find — do not guess or infer.
|
|
26
|
+
|
|
27
|
+
### 🔴 CRITICAL (must fix — causes broken pages or editor UX)
|
|
28
|
+
|
|
29
|
+
**C1** — Any concrete CND type (not a mixin) extending `jmix:droppableContent` directly
|
|
30
|
+
```bash
|
|
31
|
+
grep -rn "jmix:droppableContent" src/ --include="*.cnd" | grep -v "mixin"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**C2** — Page template not registered with `nodeType: "jnt:page"`
|
|
35
|
+
```bash
|
|
36
|
+
grep -rn "componentType.*template" src/templates/ --include="*.server.tsx"
|
|
37
|
+
```
|
|
38
|
+
Flag if any template file uses `componentType: 'template'` but does NOT have `nodeType: 'jnt:page'`. Page templates must always target `jnt:page` — a custom namespace type (e.g. `ns:template`) will never match and causes Jahia to render an error page.
|
|
39
|
+
|
|
40
|
+
Also flag: `fullPage` view with `componentType: "template"` (should be `componentType: "view"`).
|
|
41
|
+
|
|
42
|
+
**C3** — CND type explicitly declaring `j:linknode` or `j:url` fields
|
|
43
|
+
```bash
|
|
44
|
+
grep -rn "j:linknode\|j:url" src/ --include="*.cnd"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**C4** — View using `j:linkType` value directly as an `href`
|
|
48
|
+
```bash
|
|
49
|
+
grep -rn 'href=.*j:linkType\|href=.*\["j:linkType"\]' src/ --include="*.server.tsx" --include="*.client.tsx"
|
|
50
|
+
```
|
|
51
|
+
Note: a `switch(props["j:linkType"])` block is CORRECT usage — do NOT flag it. Only flag if the `j:linkType` value appears directly as an `href` attribute.
|
|
52
|
+
|
|
53
|
+
**C8** — All `<Area>` elements using the same generic `nodeType`
|
|
54
|
+
```bash
|
|
55
|
+
grep -rn "nodeType" src/templates/ --include="*.server.tsx"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 🟡 WARNINGS (fix if time allows)
|
|
59
|
+
|
|
60
|
+
**W1** — User-visible CND string/textarea without `i18n`
|
|
61
|
+
```bash
|
|
62
|
+
grep -rn "(string\|textarea\|richtext)" src/ --include="*.cnd" | grep -v "i18n\|j:linkType\|j:url\|j:linknode"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**W4** — Props typed as required (not `?:`) in types.ts
|
|
66
|
+
```bash
|
|
67
|
+
grep -rn ": string\b\|: number\b\|: boolean\b" src/ --include="types.ts" | grep -v "?:"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**W9** — Hardcoded URLs in views
|
|
71
|
+
```bash
|
|
72
|
+
grep -rn 'href="http\|href="/\|href=`/' src/ --include="*.server.tsx" --include="*.client.tsx"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Step 3 — Write REVIEW.md
|
|
78
|
+
|
|
79
|
+
Write `REVIEW.md` in the project root. Be specific: include file path and line content for each finding.
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
# Code Review — Round <N>
|
|
83
|
+
|
|
84
|
+
## Verdict
|
|
85
|
+
PASS | NEEDS_WORK
|
|
86
|
+
|
|
87
|
+
(PASS if zero Critical issues. NEEDS_WORK if any Critical issue found.)
|
|
88
|
+
|
|
89
|
+
## Critical Issues (must fix before next deploy)
|
|
90
|
+
- [C1] src/components/Hero/definition.cnd:5 — extends jmix:droppableContent directly
|
|
91
|
+
Fix: change to extend namespacemix:pageComponent
|
|
92
|
+
|
|
93
|
+
(Write "None" if no critical issues.)
|
|
94
|
+
|
|
95
|
+
## Warnings (fix if time allows, do NOT redeploy just for these)
|
|
96
|
+
...
|
|
97
|
+
|
|
98
|
+
## Suggestions (informational only)
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
## Summary
|
|
102
|
+
- Critical: N | Warnings: N | Suggestions: N
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Set Verdict to PASS only if there are **zero Critical issues**. Warnings and suggestions alone do not block.
|
|
@@ -11,15 +11,22 @@ You are helping develop a **Jahia JavaScript Module** — a React-based template
|
|
|
11
11
|
## Agent Principles
|
|
12
12
|
|
|
13
13
|
1. **Always invoke a skill before any Jahia task** — skills are the canonical source of patterns, gotchas, and API syntax. Never operate from memory alone.
|
|
14
|
+
1a. **Always load CND reference files before writing any CND** — Jahia-specific patterns (`choicelist[linkTypeInitializer]`, `mix:title`, child nodes for CTAs, `jmix:image` weakreferences) are not in your training data. Before writing any CND, read the reference files: `find . -maxdepth 4 -name 'cnd-jahia-mixins*' | head -3`. When working interactively through skill chains, prefer `@jahia-cnd-author` (it loads these files for you).
|
|
14
15
|
2. **Never use `yarn dev` from an agent** — it is an interactive file watcher for human developers only. Always deploy with `yarn build && yarn jahia-deploy` (one-shot, non-interactive).
|
|
16
|
+
2a. **Use the TypeScript LSP for API discovery, never grep.** When you need to know a function's signature or what a module exports, call `mcp__ide__getDiagnostics` on the file after writing it — the LSP reads live type definitions and reports mismatches, wrong argument counts, and missing exports. Never run `grep` on `node_modules` to find a function name or signature.
|
|
15
17
|
3. **Never hardcode URLs** — all navigable links must come from contributed content (JCR nodes, `j:linkType`, `buildNodeUrl`). This is a CMS: content owns the URLs.
|
|
16
18
|
4. **Never use `j:linkType: "external"` for internal pages** — use `"internal"` + `j:linknode`. External URLs break on environment changes, language switches, and vanity URL rewrites.
|
|
17
|
-
5. **Always verify before creating** — check that content types are deployed, site keys are correct, and area
|
|
19
|
+
5. **Always verify before creating** — check that content types are deployed, site keys are correct, and parent area nodes exist before creating content via MCP.
|
|
18
20
|
6. **All props are optional at runtime** — even mandatory CND fields. Always guard against `undefined` in views.
|
|
19
|
-
7. **
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
7. **Use MCP tools for all Jahia operations — never GraphQL curl.** The `jahia` MCP server covers site, page, content, and publication operations. Never fall back to `curl` + GraphQL mutations for anything the MCP server can do. Never write Python scripts — use JavaScript or bash only.
|
|
22
|
+
7a. **`yarn` and `npx` must be run from the module root** — the module is a standalone project, not part of a monorepo. Running `yarn` from a parent directory fails with a workspace boundary error. Always `cd` to the module directory first.
|
|
23
|
+
7b. **Use `grep`, not `ugrep`** — `ugrep` is not available on all systems and does not support the same regex syntax. Use `grep -rn` for plain text, `grep -rn -E` for extended regex, or `grep -rn -P` for Perl-compatible patterns (e.g. lookaheads). Never use `ugrep` or `(?m)` flags.
|
|
24
|
+
8. **Build accessible HTML from the start** — every view must use semantic HTML (`<main>`, `<header>`, `<nav>`, `<footer>`, `<section>`, `<article>`), include exactly one `<h1>` per page (in the template from `jcr:title` — never inside a component), use a strict heading hierarchy (h1 in template → h2 in components → h3 for sub-items), add `alt` text to every `<img>` with a meaningful fallback (`imageAlt || title || 'Image'` — never empty string), ensure sufficient colour contrast (≥ 4.5:1 for body text), include a skip link at the top of the template, and never leave a landmark (`<nav>`, `<footer>`) empty.
|
|
25
|
+
9. **Review quality after each deploy** — after deploying and populating content, run `/jahia-dev-site-review` to get a scored a11y + SEO report. Fix any critical/serious violations before moving on. Do not write `pages.json` until the review passes.
|
|
26
|
+
10. **Deploy iteratively** — deploy after each component with `yarn build && yarn jahia-deploy`, verify it renders, then move to the next. Don't accumulate components before deploying; a broken component is easier to diagnose in isolation.
|
|
27
|
+
11. **Collocate everything per component** — each component lives in `src/components/<Category>/<Name>/` containing its `definition.cnd`, `default.server.tsx`, `component.module.css`, and `types.ts`. Never centralize content types in `settings/definitions.cnd` — that file holds only namespace declarations and the module base mixin.
|
|
28
|
+
12. **Always build a page template first** — every website needs a root template at `src/templates/<ModuleName>Template/default.server.tsx`. It must include: a skip link, a `<nav>` built inline from children of the site's home node using `getChildNodes(renderContext.getSite().getNode('home'), -1, 0, n => n.isNodeType('jnt:page'))` (pages live under `home`, not directly under the site), a `<main id="main-content">` with `<h1>{title}</h1>` and Areas, and a `<footer>` that is never empty. The `<title>` tag must be `{title} | {siteName}` — never set `jcr:title` to the full `Page | Site` string; `jcr:title` is always just the short page name (e.g. "Car Insurance"). Build and deploy before any page-specific components.
|
|
29
|
+
13. **SEO baseline** — every page template must render a `<title>` tag, all `<img>` must have descriptive `alt` text, all links must have visible text (no icon-only links without `aria-label`), and pages must have a single `<h1>` matching the page title.
|
|
23
30
|
|
|
24
31
|
## Skill Map
|
|
25
32
|
|
|
@@ -34,11 +41,13 @@ Start with `/jahia` if unsure where to begin.
|
|
|
34
41
|
| `/jahia-dev-start-local` | Start Jahia locally (Docker or bare metal) |
|
|
35
42
|
| `/jahia-dev-build-component` | Build a complete component (CND + view) — start here |
|
|
36
43
|
| `/jahia-dev-define-content-type` | Define a CND content type + types.ts |
|
|
44
|
+
| `/jahia-dev-review-cnd` | Validate a CND file for antipatterns — run after writing any CND |
|
|
37
45
|
| `/jahia-dev-create-view` | Implement a React view (.server.tsx + CSS Module) |
|
|
38
46
|
| `/jahia-dev-create-page-template` | Create a page template with Areas |
|
|
39
47
|
| `/jahia-dev-query-content` | Write JCR-SQL2 queries and useJCRQuery |
|
|
40
48
|
| `/jahia-dev-review` | Code review: 8 critical checks, 9 warnings, 11 suggestions |
|
|
41
|
-
| `/jahia-dev-
|
|
49
|
+
| `/jahia-dev-site-review` | Scored a11y + SEO report on live pages — use after every deploy |
|
|
50
|
+
| `/jahia-dev-accessibility` | Deep WCAG 2.1 AA audit with fixes — use for targeted a11y work |
|
|
42
51
|
| `/jahia-dev-screenshot` | Screenshot reference + local render for visual comparison |
|
|
43
52
|
| `/jahia-dev-debug` | Debug build/deploy/runtime errors end-to-end |
|
|
44
53
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jahia
|
|
3
|
-
description: Top-level entry point for ALL Jahia tasks. Detects whether the request is about building a module (dev) or managing content (CMS), and delegates to the right skill or combination. Start here if unsure which Jahia skill to use.
|
|
4
|
-
allowed-tools: Bash, Read
|
|
3
|
+
description: Top-level entry point for ALL Jahia tasks. Detects whether the request is about building a module (dev) or managing content (CMS via MCP tools), and delegates to the right skill or combination. Start here if unsure which Jahia skill to use.
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
# Jahia — Universal Entry Point
|
|
8
7
|
|
|
9
8
|
You are the top-level GPS for all Jahia work. Your job is to understand what the user wants to accomplish, then delegate to the right skill(s) — `/jahia-dev`, `/jahia-content`, or both in sequence.
|
|
10
9
|
|
|
10
|
+
> **Content operations use MCP tools** via the `jahia` MCP server. Never call Jahia's GraphQL API directly for content creation, querying, or structure discovery — use the MCP tools instead.
|
|
11
|
+
|
|
11
12
|
---
|
|
12
13
|
|
|
13
14
|
## Step 1 — Classify the request
|
|
@@ -62,8 +63,8 @@ Use these recipes as starting points when the task maps to a known pattern.
|
|
|
62
63
|
```
|
|
63
64
|
1. /jahia-dev-build-component → define the content type + create the view
|
|
64
65
|
2. /jahia-dev-create-page-template → (if a new page layout is needed)
|
|
65
|
-
3. /jahia-content-create-content → populate the section with
|
|
66
|
-
4. /jahia-content-
|
|
66
|
+
3. /jahia-content-create-content → create the site if needed, then populate the section with content
|
|
67
|
+
4. /jahia-content-organize → (if existing content needs to be reorganized)
|
|
67
68
|
```
|
|
68
69
|
|
|
69
70
|
### "Add an article to the site"
|
|
@@ -71,7 +72,8 @@ Use these recipes as starting points when the task maps to a known pattern.
|
|
|
71
72
|
1. Check the CND — does the article content type exist?
|
|
72
73
|
→ Yes: jump to step 2
|
|
73
74
|
→ No: /jahia-dev-define-content-type + /jahia-dev-create-view first
|
|
74
|
-
2. /jahia-content-create-content → create the article node + set properties
|
|
75
|
+
2. /jahia-content-create-content → create the article node + set properties
|
|
76
|
+
3. /jahia-content-publish → publish it to LIVE
|
|
75
77
|
```
|
|
76
78
|
|
|
77
79
|
### "Redesign the layout of a page"
|
|
@@ -86,10 +88,15 @@ Use these recipes as starting points when the task maps to a known pattern.
|
|
|
86
88
|
```
|
|
87
89
|
1. /jahia-dev-create-template-set → scaffold the module
|
|
88
90
|
2. /jahia-dev-start-local → start Jahia locally
|
|
89
|
-
3. /jahia-dev-build-component → build
|
|
91
|
+
3. /jahia-dev-build-component → build ONE component at a time (repeat this step per component):
|
|
92
|
+
- invokes /jahia-dev-define-content-type
|
|
93
|
+
- which invokes @jahia-cnd-author (sub-agent, mandatory)
|
|
94
|
+
- then invokes /jahia-dev-create-view
|
|
95
|
+
⚠ Never batch-write CND — always go through @jahia-cnd-author
|
|
90
96
|
4. /jahia-dev-create-page-template → create page templates
|
|
91
|
-
5. /jahia-content-create-content →
|
|
92
|
-
6. /jahia-
|
|
97
|
+
5. /jahia-content-create-content → use `site.templateSets` + `site.create`, then add pages and content
|
|
98
|
+
6. /jahia-content-publish → publish the site content
|
|
99
|
+
7. /jahia-dev-review → catch issues before shipping
|
|
93
100
|
```
|
|
94
101
|
|
|
95
102
|
---
|
|
@@ -124,11 +131,16 @@ Always print this at the end so the user can jump anywhere:
|
|
|
124
131
|
### 📝 Content Management (/jahia-content and sub-skills)
|
|
125
132
|
/jahia-content Detect site state, route to content operations ← start here
|
|
126
133
|
/jahia-content-explore-structure Map content types, properties, enums & mixins on an unknown site
|
|
127
|
-
/jahia-content-query-content Query and audit content via
|
|
128
|
-
/jahia-content-create-content Create nodes, folders, articles
|
|
129
|
-
/jahia-content-
|
|
134
|
+
/jahia-content-query-content Query and audit content via MCP tools
|
|
135
|
+
/jahia-content-create-content Create sites, pages, nodes, folders, and articles
|
|
136
|
+
/jahia-content-media-upload Upload files and images into Jahia media storage
|
|
137
|
+
/jahia-content-organize Restructure the tree: move, copy, rename, reorder, delete
|
|
138
|
+
/jahia-content-move-content Focused move/reorder/delete workflow for an existing branch
|
|
139
|
+
/jahia-content-translate-content Translate i18n content and page titles
|
|
140
|
+
/jahia-content-publish Publish, unpublish, and inspect publication status
|
|
130
141
|
### 📚 Knowledge Reference
|
|
131
142
|
/jahia-dev-java OSGi DS, CND definitions, JSP rendering, Drools rules, Content Editor/jContent UI
|
|
143
|
+
/jahia-jcr-sql2 JCR-SQL2 syntax, filtering, full-text, joins, and pagination guardrails
|
|
132
144
|
/jahia-dev-apis GraphQL, JCR Java/REST API, OAuth/SAML, personal tokens, HTML filtering, CSP
|
|
133
145
|
/jahia-dev-ops Docker Compose, Kubernetes, health monitoring, Karaf, provisioning YAML API
|
|
134
146
|
/jahia-dev-properties jahia.properties and OSGi .cfg configuration keys reference
|