@jahia/agentic 0.0.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/README.md +48 -0
- package/dist/claude/.claude/rules/jahia.md +76 -0
- package/dist/claude/.claude/skills/jahia/SKILL.md +136 -0
- package/dist/claude/.claude/skills/jahia-content/SKILL.md +139 -0
- package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/claude/.claude/skills/jahia-dev/SKILL.md +124 -0
- package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/claude/.claude/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/claude/.claude/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/claude/.claude/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/claude/.claude/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/claude/.claude/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/claude/.claude/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/claude/.claude/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/claude/.claude/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/claude/.claude/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/claude/.claude/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/claude/.claude/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/claude/.claude/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/claude/.claude/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/claude/CLAUDE.md +90 -0
- package/dist/codex/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/codex/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/codex/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/codex/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/codex/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/codex/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/codex/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/codex/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/codex/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/codex/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/codex/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/codex/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/codex/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/codex/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/codex/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/codex/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/codex/AGENTS.md +89 -0
- package/dist/copilot/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/copilot/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/copilot/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/copilot/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/copilot/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/copilot/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/copilot/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/copilot/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/copilot/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/copilot/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/copilot/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/copilot/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/copilot/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/copilot/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/copilot/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/copilot/AGENTS.md +89 -0
- package/dist/cursor/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/cursor/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/cursor/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/cursor/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/cursor/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/cursor/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/cursor/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/cursor/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/cursor/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/cursor/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/cursor/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/cursor/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/cursor/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/cursor/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/cursor/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/cursor/.cursor/rules/jahia.mdc +80 -0
- package/dist/gemini/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/gemini/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/gemini/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/gemini/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/gemini/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/gemini/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/gemini/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/gemini/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/gemini/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/gemini/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/gemini/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/gemini/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/gemini/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/gemini/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/gemini/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/gemini/AGENTS.md +89 -0
- package/dist/gemini/GEMINI.md +6 -0
- package/dist/index.js +975 -0
- package/dist/opencode/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/opencode/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/opencode/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/opencode/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/opencode/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/opencode/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/opencode/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/opencode/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/opencode/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/opencode/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/opencode/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/opencode/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/opencode/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/opencode/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/opencode/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/opencode/AGENTS.md +89 -0
- package/dist/windsurf/.windsurf/rules/jahia.md +80 -0
- package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +136 -0
- package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +139 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev/SKILL.md +124 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/windsurf/AGENTS.md +89 -0
- package/package.json +28 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-create-page-template
|
|
3
|
+
description: Creates a Jahia page template with Areas and AbsoluteAreas. Use when asked to add a new page layout, create a page template, or set up a shared area like a header or footer.
|
|
4
|
+
allowed-tools: Bash, Read, Write, Edit
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
A **page template** defines the full layout of a page. It is registered with `componentType: "template"` and always targets `jnt:page`. Templates contain **Areas** (per-page content) and **AbsoluteAreas** (shared across all pages, e.g. footer, navbar).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
> ⚠️ **CMS rule — never hardcode links in templates.** Navigation links, logo hrefs, footer links — all must come from contributed content (via props, `buildNodeUrl`, or `j:linkType`). Do not put literal URLs in template code.
|
|
14
|
+
|
|
15
|
+
## Step 1 — Create the template file
|
|
16
|
+
|
|
17
|
+
Page templates live in `src/templates/Page/`. Name the file `<templateName>.server.tsx`.
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
import { Area, AbsoluteArea, jahiaComponent } from "@jahia/javascript-modules-library";
|
|
21
|
+
import { Layout } from "../Layout.jsx";
|
|
22
|
+
|
|
23
|
+
jahiaComponent(
|
|
24
|
+
{
|
|
25
|
+
componentType: "template", // "template" for full pages, not "view"
|
|
26
|
+
nodeType: "jnt:page", // always jnt:page for page templates
|
|
27
|
+
displayName: "Single Column",
|
|
28
|
+
name: "singleColumn", // used in Jahia UI when selecting a template
|
|
29
|
+
},
|
|
30
|
+
({ "jcr:title": title }, { renderContext }) => (
|
|
31
|
+
<Layout title={title}>
|
|
32
|
+
<Area name="header" nodeType="namespace:header" />
|
|
33
|
+
<main style={{ maxWidth: "40rem", margin: "0 auto" }}>
|
|
34
|
+
<Area name="main" />
|
|
35
|
+
</main>
|
|
36
|
+
<AbsoluteArea
|
|
37
|
+
name="footer"
|
|
38
|
+
parent={renderContext.getSite()}
|
|
39
|
+
nodeType="namespace:footer"
|
|
40
|
+
/>
|
|
41
|
+
</Layout>
|
|
42
|
+
),
|
|
43
|
+
);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Step 2 — Choose: Area vs AbsoluteArea
|
|
49
|
+
|
|
50
|
+
| | `<Area>` | `<AbsoluteArea>` |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| Content | Per-page (each page has its own) | Shared across all pages |
|
|
53
|
+
| Use for | Page body, hero, sections | Footer, navbar, sidebar |
|
|
54
|
+
| `parent` prop | Not needed | Set to `renderContext.getSite()` for site-wide |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Step 3 — Use typed area nodes (required for good editorial UX)
|
|
59
|
+
|
|
60
|
+
Instead of a single generic area type, define **one area type per section** with a tight child constraint. This ensures editors only see relevant content types in each area's "New content" menu.
|
|
61
|
+
|
|
62
|
+
```cnd
|
|
63
|
+
// settings/definitions.cnd
|
|
64
|
+
|
|
65
|
+
[namespacemix:pageComponent] > namespacemix:component mixin
|
|
66
|
+
|
|
67
|
+
// ✅ Typed areas — editors only see the right types per area
|
|
68
|
+
// Use jmix:hiddenType (NOT jmix:studioOnly) — hides from picker while keeping rendering intact
|
|
69
|
+
[namespace:heroArea] > jnt:content, jmix:list, jmix:hiddenType orderable
|
|
70
|
+
+ * (namespace:heroSection)
|
|
71
|
+
|
|
72
|
+
[namespace:featuresArea] > jnt:content, jmix:list, jmix:hiddenType orderable
|
|
73
|
+
+ * (namespace:featureCard)
|
|
74
|
+
|
|
75
|
+
// Generic fallback — use only when no tighter constraint makes sense
|
|
76
|
+
[namespace:pageArea] > jnt:content, jmix:list, jmix:hiddenType orderable
|
|
77
|
+
+ * (namespacemix:pageComponent)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then in the template:
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
<Area name="hero" nodeType="namespace:heroArea" />
|
|
84
|
+
<Area name="features" nodeType="namespace:featuresArea" />
|
|
85
|
+
<Area name="footer" nodeType="namespace:pageArea" /> // generic ok for footer
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
> ⚠️ **Never use a generic `pageArea` for every area.** If all areas accept all `pageComponent` types, editors will see "New Hero Section" as an option in a feature card area, which is confusing and error-prone.
|
|
89
|
+
|
|
90
|
+
> **Sections driven by content folders** (e.g. a tutorials listing that queries `/contents/tutorials/`) should NOT use an Area at all — the template renders them via a server-side query component. Exposing an Area there invites editors to manually add duplicates of auto-queried content.
|
|
91
|
+
|
|
92
|
+
> ⚠️ **CSS gotcha — `Area` renders children directly, no wrapper div.** When wrapping an `<Area>` in a container div and styling children with `.container > div { display: grid }`, the grid won't apply because there is no intermediate `div` — the area's child components are rendered as direct children of `.container`. Always apply grid/flex layout **on the container itself** when its only content is an Area:
|
|
93
|
+
> ```css
|
|
94
|
+
> /* ✅ correct — grid on the container that wraps the Area */
|
|
95
|
+
> .featuresSection .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 1.5rem; }
|
|
96
|
+
> /* ❌ wrong — no div is inserted between container and the card articles */
|
|
97
|
+
> .container > div { display: grid; }
|
|
98
|
+
> ```
|
|
99
|
+
|
|
100
|
+
### ⚠️ After defining `pageComponent` — update existing components
|
|
101
|
+
|
|
102
|
+
**This is the most common mistake:** if the module already has content types, they all extend `namespacemix:component`. After introducing the custom area type, **editors will not be able to drop anything** until you update the page-level components to extend `namespacemix:pageComponent` instead.
|
|
103
|
+
|
|
104
|
+
Scan all `definition.cnd` files and update every component that should be droppable in page areas:
|
|
105
|
+
|
|
106
|
+
```cnd
|
|
107
|
+
// Before (editors can't drop in pageArea):
|
|
108
|
+
[namespace:heroSection] > jnt:content, namespacemix:component
|
|
109
|
+
|
|
110
|
+
// After (editors can drop in pageArea):
|
|
111
|
+
[namespace:heroSection] > jnt:content, namespacemix:pageComponent
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Which components need `pageComponent`?**
|
|
115
|
+
- Standalone page sections (hero, feature cards, text blocks, etc.) → `namespacemix:pageComponent`
|
|
116
|
+
- Child-only types (CTA inside hero, card inside list) → keep `namespacemix:component`
|
|
117
|
+
- `jmix:mainResource` types stored in content folders → keep `namespacemix:component`
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Step 4 — Page template vs sectioning component
|
|
122
|
+
|
|
123
|
+
Before creating a new page template, ask:
|
|
124
|
+
|
|
125
|
+
| Is this… | Use a… |
|
|
126
|
+
|---|---|
|
|
127
|
+
| A new top-level page layout (different column structure, hero slot) | **New page template** |
|
|
128
|
+
| A layout variation that could be reused as a section on any page | **Sectioning component** (use the build-component skill) |
|
|
129
|
+
| A minor style difference on an existing template | **Named view** of the existing template |
|
|
130
|
+
|
|
131
|
+
**Guideline**: keep page templates small (1–4). Use sectioning components for compositional differences.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Step 5 — Define structural (non-selectable) container nodes
|
|
136
|
+
|
|
137
|
+
Some nodes are purely structural — they hold child nodes but shouldn't appear in the component picker. Omit `namespacemix:component` and add `jmix:hiddenType`:
|
|
138
|
+
|
|
139
|
+
```cnd
|
|
140
|
+
[namespace:header] > jnt:content, jmix:hiddenType
|
|
141
|
+
+ hero (namespace:heroSection)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Render it with `RenderChild`:
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
// src/components/Header/default.server.tsx
|
|
148
|
+
import { jahiaComponent, RenderChild } from "@jahia/javascript-modules-library";
|
|
149
|
+
|
|
150
|
+
jahiaComponent(
|
|
151
|
+
{ componentType: "view", nodeType: "namespace:header" },
|
|
152
|
+
() => <RenderChild name="hero" />,
|
|
153
|
+
);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Step 6 — Bootstrap site structure with import.xml
|
|
159
|
+
|
|
160
|
+
`import.xml` provisions every new site created from this template set. **Always update it** — editors cannot contribute if there's no page structure to start from.
|
|
161
|
+
|
|
162
|
+
**Minimum required:**
|
|
163
|
+
|
|
164
|
+
```xml
|
|
165
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
166
|
+
<content xmlns:j="http://www.jahia.org/jahia/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0">
|
|
167
|
+
<modules jcr:primaryType="jnt:modules">
|
|
168
|
+
<your-module-name>
|
|
169
|
+
|
|
170
|
+
<!-- Homepage — MUST use your actual template name, not "basic" -->
|
|
171
|
+
<home j:isHomePage="true" j:templateName="homepage" jcr:primaryType="jnt:page">
|
|
172
|
+
<j:translation_en jcr:language="en" jcr:mixinTypes="mix:title"
|
|
173
|
+
jcr:primaryType="jnt:translation" jcr:title="Home"/>
|
|
174
|
+
|
|
175
|
+
<!-- Pre-create area nodes so editors can start dropping content immediately -->
|
|
176
|
+
<hero jcr:primaryType="namespace:pageArea"/>
|
|
177
|
+
<main jcr:primaryType="namespace:pageArea"/>
|
|
178
|
+
</home>
|
|
179
|
+
|
|
180
|
+
<!-- Add sub-pages for each template you created -->
|
|
181
|
+
<documentation j:templateName="documentation" jcr:primaryType="jnt:page">
|
|
182
|
+
<j:translation_en jcr:language="en" jcr:mixinTypes="mix:title"
|
|
183
|
+
jcr:primaryType="jnt:translation" jcr:title="Documentation"/>
|
|
184
|
+
<hero jcr:primaryType="namespace:pageArea"/>
|
|
185
|
+
</documentation>
|
|
186
|
+
|
|
187
|
+
<!-- Offline management pages — never published, system-name locked -->
|
|
188
|
+
<drafts jcr:primaryType="jnt:page" j:templateName="basic"
|
|
189
|
+
jcr:mixinTypes="jmix:systemNameReadonly jmix:nolive">
|
|
190
|
+
<j:translation_en jcr:language="en" jcr:mixinTypes="mix:title"
|
|
191
|
+
jcr:primaryType="jnt:translation" jcr:title="Drafts"/>
|
|
192
|
+
</drafts>
|
|
193
|
+
|
|
194
|
+
<!-- Content folders — store jmix:mainResource content here, not in pages -->
|
|
195
|
+
<contents jcr:primaryType="jnt:contentFolder">
|
|
196
|
+
<articles jcr:primaryType="jnt:contentFolder"
|
|
197
|
+
jcr:mixinTypes="jmix:contributeMode" j:contributeTypes="namespace:docArticle">
|
|
198
|
+
<j:translation_en jcr:language="en" jcr:primaryType="jnt:translation" jcr:title="Articles"/>
|
|
199
|
+
</articles>
|
|
200
|
+
</contents>
|
|
201
|
+
|
|
202
|
+
</your-module-name>
|
|
203
|
+
</modules>
|
|
204
|
+
</content>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Rules:**
|
|
208
|
+
- `j:templateName` must match the `name:` in your `jahiaComponent` call — if it's wrong, editors get a blank page
|
|
209
|
+
- Pre-create area nodes (`jcr:primaryType="namespace:pageArea"`) so editors don't face empty containers on first open
|
|
210
|
+
- Add a starter component in the hero area so the page isn't visually blank (optional but strongly recommended)
|
|
211
|
+
- Content folders with `jmix:contributeMode` + `j:contributeTypes` restrict what editors can create in them
|
|
212
|
+
- `jmix:systemNameReadonly` prevents editors from renaming or moving management pages; `jmix:nolive` prevents accidental publishing
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Step 7 — Build and deploy
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
yarn build && yarn jahia-deploy
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
> ⚠️ **Do not use `yarn dev`** — it is a continuous file watcher that should only be started manually when needed for rapid iteration. For agentic workflows, always use `yarn build && yarn jahia-deploy` for explicit, one-shot deploys.
|
|
223
|
+
|
|
224
|
+
After deploying, the new template will appear in the **template selection** step when creating a new page (right-click on a page in the sidebar → **+ New Page**).
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Common patterns
|
|
229
|
+
|
|
230
|
+
### Single column with shared footer
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
<Layout title={title}>
|
|
234
|
+
<Area name="main" />
|
|
235
|
+
<AbsoluteArea name="footer" parent={renderContext.getSite()} nodeType="namespace:footer" />
|
|
236
|
+
</Layout>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Two-column layout
|
|
240
|
+
|
|
241
|
+
```tsx
|
|
242
|
+
<Layout title={title}>
|
|
243
|
+
<div style={{ display: "grid", gridTemplateColumns: "1fr 2fr", gap: "2rem" }}>
|
|
244
|
+
<Area name="sidebar" />
|
|
245
|
+
<Area name="main" />
|
|
246
|
+
</div>
|
|
247
|
+
</Layout>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Edit mode-aware rendering
|
|
251
|
+
|
|
252
|
+
```tsx
|
|
253
|
+
({ "jcr:title": title }, { renderContext }) => {
|
|
254
|
+
const isEdit = renderContext.isEditMode();
|
|
255
|
+
return (
|
|
256
|
+
<Layout title={title}>
|
|
257
|
+
<Area name="main" />
|
|
258
|
+
<nav style={{ flexDirection: isEdit ? "column" : "row" }}>
|
|
259
|
+
<AbsoluteArea name="footer" parent={renderContext.getSite()} />
|
|
260
|
+
</nav>
|
|
261
|
+
</Layout>
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Validation checklist
|
|
269
|
+
- [ ] File is in `src/templates/Page/`
|
|
270
|
+
- [ ] `componentType: "template"` and `nodeType: "jnt:page"`
|
|
271
|
+
- [ ] `name` is set (used in Jahia UI template picker)
|
|
272
|
+
- [ ] Areas use a custom area node type (not bare `<Area name="..."/>`)
|
|
273
|
+
- [ ] Custom area type has `jmix:list`, `jmix:hiddenType`, and `orderable`
|
|
274
|
+
- [ ] `AbsoluteArea` uses `renderContext.getSite()` as parent
|
|
275
|
+
- [ ] Structural container nodes use `jmix:hiddenType` (hidden from picker)
|
|
276
|
+
- [ ] Decision made: page template vs sectioning component (see Step 4)
|
|
277
|
+
- [ ] `yarn build && yarn jahia-deploy` run and template appears in Jahia UI
|
|
278
|
+
|
|
279
|
+
## Troubleshooting
|
|
280
|
+
|
|
281
|
+
### 🚨 Area renders blank — content invisible
|
|
282
|
+
|
|
283
|
+
**Symptom:** An Area in your template produces no HTML output at all, even though you can see children in jContent.
|
|
284
|
+
|
|
285
|
+
**Root cause:** Jahia's `Area` component auto-creates the JCR area node using its declared `nodeType` on first page load. If that node was subsequently **deleted and recreated manually** (e.g. via GraphQL) with a *different* type, the declared type and the actual JCR type no longer match — and Jahia silently renders nothing.
|
|
286
|
+
|
|
287
|
+
**Fix:** Delete the mistyped node and let Jahia recreate it automatically:
|
|
288
|
+
|
|
289
|
+
```graphql
|
|
290
|
+
mutation {
|
|
291
|
+
jcr {
|
|
292
|
+
mutateNode(pathOrId: "/sites/mySite/home/hero") {
|
|
293
|
+
delete
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Visit the page — Jahia recreates the node with the correct type and children render again.
|
|
300
|
+
|
|
301
|
+
**Prevention:** Never manually create area nodes via GraphQL with a type that differs from the `nodeType` declared in the template. Always let Jahia auto-create area nodes on first render.
|
|
302
|
+
|
|
303
|
+
> https://academy.jahia.com/tutorials-get-started/front-end-developer/the-about-us-page
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-create-template-set
|
|
3
|
+
description: Scaffolds a new Jahia JavaScript template set (React). Use this when asked to create a new Jahia module, website, or project.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## About Jahia JavaScript Modules
|
|
7
|
+
|
|
8
|
+
This skill only covers **JavaScript Modules** — React-based template sets for Jahia 8+. This is the recommended approach for all new Jahia projects.
|
|
9
|
+
|
|
10
|
+
### JS modules vs Java modules vs Next.js
|
|
11
|
+
|
|
12
|
+
| | Java Modules | JS Modules | Next.js (Headless) |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| Availability | All versions | 8.2+ | Depends on setup |
|
|
15
|
+
| Separate runtime | No | No | Yes |
|
|
16
|
+
| GraphQL required | No | No | Yes |
|
|
17
|
+
| CMS navigation/cache/auth | Yes | Yes | No |
|
|
18
|
+
| Packaging | Maven/jar | NPM/tgz | NPM/tgz |
|
|
19
|
+
| Templating | JSP | JSX | JSX |
|
|
20
|
+
| Module descriptor | pom.xml | package.json | Separate module |
|
|
21
|
+
|
|
22
|
+
Jahia recommends JS or Java modules for most projects. Next.js should only be chosen when integrating with an existing Next.js codebase.
|
|
23
|
+
|
|
24
|
+
### How JS modules run: GraalVM + GraalJS
|
|
25
|
+
|
|
26
|
+
Jahia JS modules run inside **GraalJS** (part of GraalVM) — a fully ECMAScript-2019-compliant JS engine on the JVM. GraalVM Native Image is **not** used (incompatible with OSGi). Official Jahia Docker images ship with GraalVM pre-configured.
|
|
27
|
+
|
|
28
|
+
**Build pipeline:** Yarn 4 + Vite. The `npm init @jahia/module@latest` scaffolder generates `vite.config.mjs` handling TypeScript, CSS Modules, and client-side JS bundles.
|
|
29
|
+
|
|
30
|
+
**tgz → OSGi transformation:** On install, Jahia converts the NPM tgz into an OSGi bundle. Key `package.json` → `MANIFEST.MF` mappings:
|
|
31
|
+
|
|
32
|
+
| package.json field | MANIFEST.MF clause |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `jahia.module-dependencies` | `Jahia-Depends` |
|
|
35
|
+
| `jahia.server` | `Jahia-NPM-InitScript` |
|
|
36
|
+
| `jahia.required-version` | `Jahia-Required-Version` |
|
|
37
|
+
| `jahia.module-type` | `Jahia-Module-Type` |
|
|
38
|
+
| `jahia.static-resources` | `Jahia-Static-Resources` |
|
|
39
|
+
|
|
40
|
+
**Request flow:**
|
|
41
|
+
1. Browser request → Jahia servlet
|
|
42
|
+
2. `TemplateNodeFilter` resolves the template identifier
|
|
43
|
+
3. `ViewsRegistrar` resolves the JS script for the template
|
|
44
|
+
4. `GraalVMEngine` pulls a `ContextProvider` from its pool, renders via GraalJS
|
|
45
|
+
5. `<Area>` / `<Render>` components may call `RenderService` to render child views
|
|
46
|
+
6. Final HTML assembled and returned
|
|
47
|
+
|
|
48
|
+
The engine maintains a pool of polyglot contexts (one per thread). Each context runs all init scripts (`dist/server/index.js`) on creation. A version counter invalidates stale contexts when modules are added or removed.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step 1 — Check prerequisites
|
|
53
|
+
|
|
54
|
+
Before scaffolding, verify Node.js and Yarn are available:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node --version # must be 22.14+
|
|
58
|
+
yarn --version # must be 4.9+
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Node 22.14+ is required. Yarn is managed by **Corepack** (bundled with Node) — no global install needed:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
corepack enable yarn
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
If Node is missing or outdated, install it from [nodejs.org/en/download](https://nodejs.org/en/download) — select **for your platform** and **with Yarn**. Alternatively use mise:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
mise use node@lts && corepack enable yarn
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Do not proceed until both `node --version` (22.14+) and `yarn --version` (4.9+) pass.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Step 2 — Scaffold the module
|
|
78
|
+
|
|
79
|
+
Run the interactive CLI and **show the user its full output**:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm init @jahia/module@latest <project-name>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The CLI will prompt interactively for:
|
|
86
|
+
|
|
87
|
+
| Prompt | Guidance |
|
|
88
|
+
|--------|----------|
|
|
89
|
+
| Module name | kebab-case, e.g. `my-site` |
|
|
90
|
+
| Output directory | accept the default (`./<module-name>`) |
|
|
91
|
+
| Module type | see below |
|
|
92
|
+
|
|
93
|
+
**Module type — always choose a template set:**
|
|
94
|
+
- `A minimal Hello World template set` ✅ — best starting point, includes working components
|
|
95
|
+
- `An empty template set` — blank canvas, for experienced developers
|
|
96
|
+
|
|
97
|
+
Once the project is created, the CLI will suggest commands to start it. Run them in order — they start Docker (Jahia) and push the module.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Step 3 — After generation
|
|
102
|
+
|
|
103
|
+
1. `cd <project-name>`
|
|
104
|
+
2. `yarn install` — install dependencies
|
|
105
|
+
|
|
106
|
+
To run the module locally, use the `/jahia-dev-start-local` skill next.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Step 4 — Build and deploy the module
|
|
111
|
+
|
|
112
|
+
Once Jahia is running at `http://localhost:8080`, build and deploy the module:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
yarn build && yarn jahia-deploy
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`yarn jahia-deploy` (from `@jahia/vite-plugin` 1.2.0+) always uses curl and defaults to `http://localhost:8080` / `root:root1234` — no `.env` configuration is required for standard local development.
|
|
119
|
+
|
|
120
|
+
Verify the module is installed:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
curl -s -u root:root1234 -H "Origin: http://localhost:8080" \
|
|
124
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
125
|
+
-H "Content-Type: application/json" \
|
|
126
|
+
-d '{"query":"{ jcr { nodeByPath(path:\"/modules/<module-name>\") { name } } }"}'
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Replace `<module-name>` with the `name` from `package.json`. The response should contain `"name": "<module-name>"`.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Step 5 — Create a new site in Jahia
|
|
134
|
+
|
|
135
|
+
After the module is deployed, create the site via the Provisioning API — **do not use the UI**.
|
|
136
|
+
|
|
137
|
+
> ⚠️ **CRITICAL: syntax is `- createSite: ""`** — the empty string `""` after the colon is **mandatory**. Without it, Jahia returns HTTP 200 but silently creates nothing. Using `- createSite:` with nested properties is **wrong and will fail silently**.
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
MODULE_NAME=<module-name> # value of "name" in package.json
|
|
141
|
+
|
|
142
|
+
curl -u root:root1234 \
|
|
143
|
+
-X POST \
|
|
144
|
+
-H "Content-Type: application/yaml" \
|
|
145
|
+
--data-binary "- createSite: \"\"
|
|
146
|
+
siteKey: ${MODULE_NAME}
|
|
147
|
+
title: \"My Site\"
|
|
148
|
+
defaultLanguage: en
|
|
149
|
+
serverName: localhost
|
|
150
|
+
templateSet: ${MODULE_NAME}" \
|
|
151
|
+
http://localhost:8080/modules/api/provisioning
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Or write the script to a file and POST it:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
MODULE_NAME=<module-name>
|
|
158
|
+
|
|
159
|
+
cat > /tmp/create-site.yaml <<EOF
|
|
160
|
+
- createSite: ""
|
|
161
|
+
siteKey: ${MODULE_NAME}
|
|
162
|
+
title: "My Site"
|
|
163
|
+
defaultLanguage: en
|
|
164
|
+
serverName: localhost
|
|
165
|
+
templateSet: ${MODULE_NAME}
|
|
166
|
+
EOF
|
|
167
|
+
|
|
168
|
+
curl -u root:root1234 -X POST -H "Content-Type: application/yaml" \
|
|
169
|
+
--data-binary @/tmp/create-site.yaml \
|
|
170
|
+
http://localhost:8080/modules/api/provisioning
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Verify the site was created:
|
|
174
|
+
```bash
|
|
175
|
+
curl -s -u root:root1234 \
|
|
176
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
177
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
178
|
+
-d "{\"query\":\"{ jcr { nodeByPath(path:\\\"/sites/${MODULE_NAME}\\\") { name } } }\"}"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
The response must contain `"name": "<module-name>"`. If the path returns `null`, the site was not created — check that `templateSet` exactly matches the deployed module name.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Generated structure (Hello World template set)
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
<module-name>/
|
|
189
|
+
├── .github/ # GitHub Actions (builds on push)
|
|
190
|
+
├── .vscode/ # VSCode config — install recommended extensions!
|
|
191
|
+
├── src/
|
|
192
|
+
│ ├── components/ # React content type components
|
|
193
|
+
│ └── templates/ # Page layouts
|
|
194
|
+
├── settings/
|
|
195
|
+
│ ├── content-types-icons/ # 32×32 PNG icons per content type
|
|
196
|
+
│ ├── definitions.cnd # Module-level CND (mixins, base types)
|
|
197
|
+
│ ├── import.xml # Content/pages provisioned on site creation
|
|
198
|
+
│ ├── locales/ # i18n (en.json, fr.json, ...)
|
|
199
|
+
│ ├── resources/ # Editor UI labels (.properties files)
|
|
200
|
+
│ └── template-thumbnail.png # Shown in the Jahia template picker
|
|
201
|
+
├── static/ # Static files (images, fonts, vendor CSS/JS)
|
|
202
|
+
├── docker-compose.yml # Local Jahia instance
|
|
203
|
+
├── docker/provisioning.yml
|
|
204
|
+
├── .env # Environment variables for build tools
|
|
205
|
+
├── .node-version # Node version pin (used by GitHub Actions)
|
|
206
|
+
├── package.json
|
|
207
|
+
├── vite.config.mjs
|
|
208
|
+
└── tsconfig.json
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
`static/` is served at `/modules/<name>/` — reference files there with `buildModuleFileUrl("image.png")`.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## References
|
|
216
|
+
- https://github.com/Jahia/javascript-modules (monorepo — includes the `create-module` archetype)
|
|
217
|
+
|
|
218
|
+
## Troubleshooting
|
|
219
|
+
|
|
220
|
+
If anything goes wrong during setup or scaffolding, refer to the official Jahia front-end developer setup guide:
|
|
221
|
+
|
|
222
|
+
> https://academy.jahia.com/tutorials-get-started/front-end-developer/setting-up-your-dev-environment
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Validation checklist
|
|
227
|
+
- [ ] `node --version` reports 22.14+
|
|
228
|
+
- [ ] `yarn --version` reports 4.9+ (via Corepack)
|
|
229
|
+
- [ ] Module directory created with expected structure
|
|
230
|
+
- [ ] `yarn install` completes without errors
|
|
231
|
+
- [ ] `yarn build && yarn jahia-deploy` succeeds — module appears at `/modules/<name>` in JCR
|
|
232
|
+
- [ ] Site created with `createSite: ""` — JCR confirms `/sites/<name>` exists
|