@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,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-import-from
|
|
3
|
+
description: Builds a Jahia component inspired by a component on an external URL. Fetches the page, lets the developer target one section, extracts its HTML structure and CSS/JS dependencies, then creates a proper CND + view. Use when asked to "create a component like the one on this page".
|
|
4
|
+
allowed-tools: Bash, Read, Write, Edit, WebFetch
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: jahia-dev-import-from
|
|
8
|
+
|
|
9
|
+
Turns a component on an external website into a Jahia component. This is a developer workflow — the result uses CSS Modules, proper Jahia architecture, and is maintainable code. It is not a wholesale site clone.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Step 1 — Fetch and map the page
|
|
14
|
+
|
|
15
|
+
Fetch the URL with `WebFetch`. If WebFetch fails (403/503), fall back to:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
wget --quiet --user-agent="Mozilla/5.0" -O /tmp/imported-page.html "<URL>"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Scan the HTML for semantic section boundaries (`<section>`, `<article>`, `<header>`, `<footer>`, `<main>`, or `<div>` with class names matching patterns like `hero`, `banner`, `card`, `grid`, `slider`, `features`).
|
|
22
|
+
|
|
23
|
+
Print a numbered text map:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
[1] HEADER — logo + nav + CTA button
|
|
27
|
+
[2] HERO — animated text + background image + scroll indicator
|
|
28
|
+
[3] FEATURES — 3-column icon grid
|
|
29
|
+
[4] CAROUSEL — auto-sliding testimonials (Swiper)
|
|
30
|
+
[5] FOOTER — 4-column links + social icons
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Ask the developer: **"Which section do you want to implement?"**
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Step 2 — Extract the HTML fragment
|
|
38
|
+
|
|
39
|
+
Locate the target section in the fetched HTML. Extract the **complete HTML block** — every element, every attribute, every nesting level. Do not simplify, summarize, or rewrite any part of it.
|
|
40
|
+
|
|
41
|
+
**For repeating patterns** (card grid, carousel), copy the wrapper structure **plus one complete child item** with all its attributes.
|
|
42
|
+
|
|
43
|
+
**Replace only dynamic content** with typed placeholders:
|
|
44
|
+
|
|
45
|
+
| Source HTML | Replacement |
|
|
46
|
+
|---|---|
|
|
47
|
+
| Text inside an element | `{title}`, `{description}`, etc. |
|
|
48
|
+
| Image `src` / `data-bg` / `data-src` URL | `{image}` (will become a `weakreference` field) |
|
|
49
|
+
| Link `href` | `{href}` (will become `j:linkType` / `j:linknode`) |
|
|
50
|
+
|
|
51
|
+
**Keep verbatim:**
|
|
52
|
+
- All CSS classes
|
|
53
|
+
- All `data-*` attributes (animation libraries, carousel config, IDs)
|
|
54
|
+
- `aria-*` and `role` attributes
|
|
55
|
+
- `<noscript>` blocks and `<picture>/<source>` elements
|
|
56
|
+
- Carousel/slider wrapper `id`s — JS libraries use these for initialization
|
|
57
|
+
|
|
58
|
+
> ⚠️ Self-check: count the attributes on 2–3 key elements in the source HTML. If your extraction has fewer, you dropped something — re-extract.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Step 3 — Identify content fields vs structural HTML
|
|
63
|
+
|
|
64
|
+
Show the developer a proposed split:
|
|
65
|
+
|
|
66
|
+
**Will become CND fields (editable in Jahia):**
|
|
67
|
+
- User-facing text: titles, subtitles, descriptions, button labels
|
|
68
|
+
- Images (→ `weakreference, picker[type='image']`)
|
|
69
|
+
- Links (→ `j:linkType / j:linknode / j:url`)
|
|
70
|
+
- Any value that should vary between instances
|
|
71
|
+
|
|
72
|
+
**Will be hardcoded in the view:**
|
|
73
|
+
- Layout wrapper divs
|
|
74
|
+
- Icon SVGs that are decorative / never change
|
|
75
|
+
- Animation class names and `data-*` config attributes
|
|
76
|
+
- ARIA labels that are structural (e.g. `aria-label="Main navigation"`)
|
|
77
|
+
|
|
78
|
+
Ask the developer to confirm or adjust. If they want something to be editable that wasn't identified, add it as a field.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Step 4 — Identify CSS and JS dependencies
|
|
83
|
+
|
|
84
|
+
Scan the page `<head>` for resources that the target component depends on:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# From downloaded HTML, extract stylesheet and script references
|
|
88
|
+
grep -E '<link[^>]+stylesheet|<script[^>]+src' /tmp/imported-page.html | head -30
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Categorize findings:
|
|
92
|
+
|
|
93
|
+
| Type | Examples | Action |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| **Animation library** | AOS, GSAP, ScrollReveal, Animate.css | Likely needed — check npm first |
|
|
96
|
+
| **Carousel/slider** | Swiper, Glide, Owl Carousel, Splide | Likely needed — check npm first |
|
|
97
|
+
| **Utility CSS** | Bootstrap, Tailwind | May already be in the module or can be imported |
|
|
98
|
+
| **Site-specific CSS** | `main.css`, `theme.css` | Targeted import only (see Step 5b) |
|
|
99
|
+
| **Fonts** | Google Fonts, custom woff2 | Import if not already in the module |
|
|
100
|
+
|
|
101
|
+
Report findings, then ask: **"Should I import any of these? (yes / no / specific ones)"**
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Step 5 — Create the Jahia component
|
|
106
|
+
|
|
107
|
+
### Step 5a — CND and view
|
|
108
|
+
|
|
109
|
+
Using the confirmed field split from Step 3, run the `jahia-dev-define-content-type` and `jahia-dev-create-view` patterns to create:
|
|
110
|
+
|
|
111
|
+
- `src/components/<Category>/<Name>/definition.cnd`
|
|
112
|
+
- `src/components/<Category>/<Name>/types.ts`
|
|
113
|
+
- `src/components/<Category>/<Name>/default.server.tsx`
|
|
114
|
+
- `src/components/<Category>/<Name>/component.module.css`
|
|
115
|
+
|
|
116
|
+
**TSX conversion rules** (mechanical, not creative):
|
|
117
|
+
|
|
118
|
+
1. `class="foo bar"` → `className="foo bar"` — keep class strings as-is if vendor CSS is imported, OR map to `classes.fooBar` if authoring new CSS
|
|
119
|
+
2. Void elements: `<img>`, `<input>`, `<br>` → add ` />`
|
|
120
|
+
3. `{placeholder}` → `{propName}` matching `Props`
|
|
121
|
+
4. Every `data-*`, `aria-*`, `id`, `<noscript>`, `<source>` stays in the TSX
|
|
122
|
+
|
|
123
|
+
**CSS Modules:** Write new CSS in `component.module.css` that achieves the same visual result. Rename source class names to semantic camelCase keys (`hero__title` → `.heroTitle`). Exception: if you're importing the original CSS as a static asset, use the original class names as plain strings — CSS Modules would rename them and break the imported CSS.
|
|
124
|
+
|
|
125
|
+
**Interactive components** (animations, carousels, event handlers) → Island architecture:
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
// default.server.tsx — passes config, initializes nothing
|
|
129
|
+
({ title, subtitle }: Props, { renderContext }) => (
|
|
130
|
+
<Island component={MyComponentClient} props={{ title, subtitle }} />
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
// MyComponent.client.tsx — owns the browser-side lifecycle
|
|
134
|
+
import { useEffect } from "react";
|
|
135
|
+
|
|
136
|
+
export default function MyComponentClient({ title, subtitle }: Props) {
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
import("aos").then(({ default: AOS }) => AOS.init({ duration: 800 }));
|
|
139
|
+
}, []);
|
|
140
|
+
|
|
141
|
+
return (
|
|
142
|
+
<div data-aos="fade-up" className="hero">
|
|
143
|
+
<h1>{title}</h1>
|
|
144
|
+
</div>
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Edit mode for carousels/sliders:** Render all items flat so editors can see and reorder them:
|
|
150
|
+
|
|
151
|
+
```tsx
|
|
152
|
+
({ slides }, { renderContext }) =>
|
|
153
|
+
renderContext.isEditMode() ? (
|
|
154
|
+
<div className={classes.editStack}>
|
|
155
|
+
<RenderChildren />
|
|
156
|
+
<p className={classes.hint}>Carousel — add or reorder slides above</p>
|
|
157
|
+
</div>
|
|
158
|
+
) : (
|
|
159
|
+
<Island component={CarouselClient} props={{ count: slides?.length }} />
|
|
160
|
+
)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### Step 5b — Import static assets (if confirmed in Step 4)
|
|
166
|
+
|
|
167
|
+
For each confirmed CSS file:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
mkdir -p static/css
|
|
171
|
+
curl -sL "<css-url>" -o "static/css/<filename>.css"
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
For JS libraries — prefer npm over manual download:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# Check if available on npm
|
|
178
|
+
npm info <library-name> version 2>/dev/null
|
|
179
|
+
|
|
180
|
+
# If available:
|
|
181
|
+
yarn add <library-name>
|
|
182
|
+
# Then import in the .client.tsx: import AOS from "aos";
|
|
183
|
+
|
|
184
|
+
# If not on npm, download to static:
|
|
185
|
+
mkdir -p static/js
|
|
186
|
+
curl -sL "<js-url>" -o "static/js/<filename>.js"
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
For fonts:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
mkdir -p static/fonts
|
|
193
|
+
curl -sL "<font-url>" -o "static/fonts/<filename>.woff2"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Update the module's `Layout` template (`src/templates/Layout.server.tsx` or `src/templates/Layout.jsx`) to include the assets:
|
|
197
|
+
|
|
198
|
+
```tsx
|
|
199
|
+
import { AddResources, buildModuleFileUrl } from "@jahia/javascript-modules-library";
|
|
200
|
+
|
|
201
|
+
// In the <head> section:
|
|
202
|
+
<AddResources type="css" url={buildModuleFileUrl("static/css/vendor.css")} />
|
|
203
|
+
<AddResources type="javascript" url={buildModuleFileUrl("static/js/aos.js")} />
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Update `package.json` → `jahia.static-resources` to expose the static directories:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"jahia": {
|
|
211
|
+
"static-resources": "/dist/client,/dist/assets,/locales,/static/css,/static/js,/static/fonts"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
> **Never hardcode `/modules/<name>/...` paths** — use `buildModuleFileUrl` so the path resolves correctly across environments and module name changes.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Step 6 — Build, deploy, and verify
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
yarn build && yarn jahia-deploy
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Verify the component registered:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
docker logs $(docker ps --format '{{.Names}}' | grep -i jahia | head -1) 2>&1 \
|
|
230
|
+
| grep "Registered Jahia component" | grep "<ComponentName>"
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Expected: one line per view. If absent, check the build output for TypeScript errors in the new view file.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Rules that always apply
|
|
238
|
+
|
|
239
|
+
- **CSS Modules for authored styles** — use `classes.propertyName`, not plain string class names
|
|
240
|
+
- **Vendor class names stay as-is** — when importing external CSS, don't route those classes through CSS Modules
|
|
241
|
+
- **No hardcoded links** — `href` and `src` must come from JCR props or `buildModuleFileUrl`
|
|
242
|
+
- **Island for anything interactive** — animations, browser events, `useState`, third-party JS → `.client.tsx`
|
|
243
|
+
- **All props optional in `types.ts`** — even CND `mandatory` fields
|
|
244
|
+
- **Edit mode awareness** — carousels, sliders, and tabs should render flat in edit mode
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-java
|
|
3
|
+
description: |
|
|
4
|
+
Jahia 8.2 Java module development — creating OSGi modules, defining content types (CND),
|
|
5
|
+
building JSP views, implementing backend logic (rules, actions, queries), and extending
|
|
6
|
+
the Jahia UI (Content Editor, jContent, component registry).
|
|
7
|
+
Trigger when the user is: creating or modifying a Java module, writing CND content type
|
|
8
|
+
definitions, building JSP rendering views, implementing Jahia rules or actions, running
|
|
9
|
+
JCR SQL2 queries, extending Content Editor or jContent UI, configuring OSGi services,
|
|
10
|
+
or troubleshooting module deployment issues.
|
|
11
|
+
allowed-tools: Read
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Jahia 8.2 Java Developer Skill
|
|
15
|
+
|
|
16
|
+
## When to load which reference
|
|
17
|
+
|
|
18
|
+
| Task | Reference file |
|
|
19
|
+
|------|---------------|
|
|
20
|
+
| Creating a new module, Maven pom.xml, deployment, Java 11/17, static assets, deploy-free coding, troubleshooting bundle errors | `references/modules.md` |
|
|
21
|
+
| Writing CND definitions, content type hierarchy, property types, choicelist initializers, modifying existing definitions | `references/content-types.md` |
|
|
22
|
+
| JSP views, view selection, `@cache` tag, caching configuration, navigation menus, rendering filters, AMP | `references/rendering.md` |
|
|
23
|
+
| Drools rules (DRL), JCR event listeners, JCR SQL2 queries, external data provider, permissions and roles | `references/backend.md` |
|
|
24
|
+
| OSGi bundle lifecycle, Declarative Services, Blueprint XML, package Import/Export, service registry, Karaf tooling | `references/osgi.md` |
|
|
25
|
+
| Content Editor JSON overrides, jContent UI extension points, component registry, custom selectors, settings pages, CKEditor | `references/ui-extensions.md` |
|
|
26
|
+
|
|
27
|
+
## Key Concepts Glossary
|
|
28
|
+
|
|
29
|
+
**Bundle / Module**
|
|
30
|
+
An OSGi JAR deployed into Jahia. Every Jahia module is an OSGi bundle. Jahia adds custom MANIFEST attributes (`Jahia-Module-Type`, `Jahia-Depends`, `Jahia-Root-Folder`) on top of standard OSGi headers.
|
|
31
|
+
|
|
32
|
+
**CND (Compact Namespace and Node Type Definition)**
|
|
33
|
+
Apache Jackrabbit standard file format (`definitions.cnd`) that declares content types. Lives at `src/main/resources/META-INF/definitions.cnd`.
|
|
34
|
+
|
|
35
|
+
**JCR (Java Content Repository)**
|
|
36
|
+
The underlying storage model. Content is a tree of nodes, each with a primary type and optional mixin types. Jahia uses Apache Jackrabbit Oak as the JCR implementation.
|
|
37
|
+
|
|
38
|
+
**jnt: prefix**
|
|
39
|
+
Jahia Node Types namespace (`http://www.jahia.org/jahia/nt/1.0`). Used for concrete content types like `jnt:content`, `jnt:page`, `jnt:file`.
|
|
40
|
+
|
|
41
|
+
**jmix: prefix**
|
|
42
|
+
Jahia Mixin namespace (`http://www.jahia.org/jahia/mix/1.0`). Used for abstract mixin types like `jmix:editorialContent`, `jmix:list`, `jmix:cache`.
|
|
43
|
+
|
|
44
|
+
**jmix:editorialContent**
|
|
45
|
+
Key mixin — makes a content type visible in jContent and enables content versioning. Required for any user-editable content type.
|
|
46
|
+
|
|
47
|
+
**jmix:droppableContent**
|
|
48
|
+
Base mixin for component categories. Types that inherit from this mixin create a component folder in the content picker sidebar.
|
|
49
|
+
|
|
50
|
+
**Declarative Services (DS)**
|
|
51
|
+
Preferred OSGi service mechanism in Jahia 8.2. Uses `@Component`, `@Activate`, `@Reference` annotations. Blueprint XML is deprecated as of Jahia 8.2.
|
|
52
|
+
|
|
53
|
+
**jahia-depends**
|
|
54
|
+
MANIFEST / pom.xml property declaring other module artifact IDs that this module requires. OSGi resolves dependencies before starting the bundle. Supports version ranges and optional dependencies.
|
|
55
|
+
|
|
56
|
+
**Embed-Dependency**
|
|
57
|
+
Felix Maven Bundle Plugin instruction to embed non-OSGi JARs inside the module JAR. Default scope: `compile|runtime`. Dependencies scoped `provided` are NOT embedded.
|
|
58
|
+
|
|
59
|
+
**Deploy-free coding**
|
|
60
|
+
Development workflow where source file changes (JSP, CSS, JS, CND) are picked up live without redeployment. Requires initial deploy and `Jahia-Source-Folders` MANIFEST attribute pointing to the project base directory.
|
|
61
|
+
|
|
62
|
+
**jahia:deploy Maven goal**
|
|
63
|
+
Deploys the compiled module JAR to a local Jahia server or Docker container. Usage: `mvn clean install jahia:deploy -P <profile>`.
|
|
64
|
+
|
|
65
|
+
**Content Editor**
|
|
66
|
+
Jahia's React-based form UI for creating/editing content. Forms are generated from CND definitions merged with JSON override files. Override files live in `META-INF/jahia-content-editor-forms/`.
|
|
67
|
+
|
|
68
|
+
**jContent**
|
|
69
|
+
Jahia's React-based content management UI. Extended via the component registry (`window.jahia.uiExtender.registry`). Used by editors to browse, create, and manage content.
|
|
70
|
+
|
|
71
|
+
**Component Registry**
|
|
72
|
+
JavaScript hashmap (`type + key → value`) used to inject UI elements (actions, accordions, nav items, selector types) into jContent and Content Editor at runtime. Access via `import {registry} from '@jahia/ui-extender'`.
|
|
73
|
+
|
|
74
|
+
**DRL (Drools Rule Language)**
|
|
75
|
+
Rule files placed at `META-INF/rules.drl` (all workspaces), `META-INF/default-rules.drl` (edit workspace only), or `META-INF/live-rules.drl` (live workspace only). Jahia provides a built-in DSL that simplifies rule conditions and consequences.
|
|
76
|
+
|
|
77
|
+
**Workspace**
|
|
78
|
+
Jahia has two JCR workspaces: `default` (edit/preview, where authors work) and `live` (what visitors see). Publication copies nodes from default to live.
|
|
79
|
+
|
|
80
|
+
**Felix Web Console**
|
|
81
|
+
OSGi administration UI at `http://localhost:8080/tools`. Shows bundle states, packages, services. Useful for diagnosing dependency issues.
|
|
82
|
+
|
|
83
|
+
**Karaf SSH Shell**
|
|
84
|
+
Command-line OSGi console accessible via `ssh -p 8101 jahia@localhost`. Key commands: `jahia:modules`, `bundle:requirements`, `jcr:query`.
|
|
85
|
+
|
|
86
|
+
**JCR SQL2**
|
|
87
|
+
Query language for the JCR. Syntax: `SELECT * FROM [nodetype] AS alias WHERE condition`. Use `ISDESCENDANTNODE(alias, '/path')` to scope queries. Do NOT query `nt:base` — use `jmix:searchable` instead for broad content queries.
|
|
88
|
+
|
|
89
|
+
**choicelist initializer**
|
|
90
|
+
Java class implementing `ModuleChoiceListInitializer` that populates dropdown values in Content Editor. Registered as an OSGi `@Component` service. Referenced in CND with `choicelist[keyName]` syntax.
|
|
91
|
+
|
|
92
|
+
**Rendering filter**
|
|
93
|
+
OSGi service implementing `RenderFilter`. Wraps every JSP/module render. Priority < 16 runs per-request; priority > 16 runs only on cache miss. Extend `AbstractFilter` to use condition setters.
|
|
94
|
+
|
|
95
|
+
**Migration scripts**
|
|
96
|
+
Groovy scripts in `src/main/resources/META-INF/patches/` that run once on module deployment to migrate JCR content or configuration.
|
|
97
|
+
|
|
98
|
+
**Module types**
|
|
99
|
+
`Jahia-Module-Type` MANIFEST value controls module behavior:
|
|
100
|
+
- `module` — regular content module (default)
|
|
101
|
+
- `system` — loaded early, provides system-level services
|
|
102
|
+
- `templatesSet` — template set module that defines site templates
|
|
103
|
+
|
|
104
|
+
**Static resources**
|
|
105
|
+
JS/CSS/images declared in `Jahia-Static-Resources` MANIFEST header (e.g. `/css,/icons,/javascript`). Served directly from the OSGi bundle JAR under `src/main/resources/`.
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# Jahia Backend Capabilities Reference
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
1. [Drools rule engine](#1-drools-rule-engine)
|
|
5
|
+
2. [JCR event listeners](#2-jcr-event-listeners)
|
|
6
|
+
3. [JCR SQL2 cheat sheet](#3-jcr-sql2-cheat-sheet)
|
|
7
|
+
4. [Queries and search indexing](#4-queries-and-search-indexing)
|
|
8
|
+
5. [External data sources (Provider API)](#5-external-data-sources-provider-api)
|
|
9
|
+
6. [Permissions and roles](#6-permissions-and-roles)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Drools rule engine
|
|
14
|
+
|
|
15
|
+
Jahia uses JBoss Drools 6 for a rules engine that reacts to JCR events.
|
|
16
|
+
|
|
17
|
+
### Rule file locations
|
|
18
|
+
|
|
19
|
+
| File | Scope |
|
|
20
|
+
|------|-------|
|
|
21
|
+
| `META-INF/rules.drl` | All workspaces (default and live) |
|
|
22
|
+
| `META-INF/default-rules.drl` | Edit/preview workspace only |
|
|
23
|
+
| `META-INF/live-rules.drl` | Live workspace only |
|
|
24
|
+
| `META-INF/rules.dsl` | Custom DSL extensions |
|
|
25
|
+
|
|
26
|
+
### Basic rule structure
|
|
27
|
+
|
|
28
|
+
```drools
|
|
29
|
+
package org.example.mymodule.rules
|
|
30
|
+
|
|
31
|
+
import org.jahia.services.content.rules.*
|
|
32
|
+
import org.jahia.services.content.JCRContentUtils
|
|
33
|
+
import org.slf4j.Logger
|
|
34
|
+
|
|
35
|
+
global User user
|
|
36
|
+
global Service service
|
|
37
|
+
global Logger logger
|
|
38
|
+
global MyService myService
|
|
39
|
+
|
|
40
|
+
rule "Log new article creation"
|
|
41
|
+
when
|
|
42
|
+
A new node is created
|
|
43
|
+
- the node has the type jnt:article
|
|
44
|
+
then
|
|
45
|
+
Log "New article created: " + node.getName() at INFO level
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
rule "Notify on page publish"
|
|
49
|
+
salience 100
|
|
50
|
+
when
|
|
51
|
+
A node is published
|
|
52
|
+
- the node has the type jnt:page
|
|
53
|
+
then
|
|
54
|
+
myService.notifyPublish(node)
|
|
55
|
+
end
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Critical rules:** Rule titles are globally unique across the platform — never reuse rule names between modules.
|
|
59
|
+
|
|
60
|
+
**Package names:** Use a unique package per module — do not share package names across modules.
|
|
61
|
+
|
|
62
|
+
### Built-in DSL conditions (excerpt)
|
|
63
|
+
|
|
64
|
+
```drools
|
|
65
|
+
A new node is created # AddedNodeFact
|
|
66
|
+
A node is published # PublishedNodeFact
|
|
67
|
+
A node is deleted # DeletedNodeFact
|
|
68
|
+
A node is modified # ChangedPropertyFact
|
|
69
|
+
- the node has the type {type} # Checks primaryType or mixin
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Built-in global objects
|
|
73
|
+
|
|
74
|
+
| Global | Type | Description |
|
|
75
|
+
|--------|------|-------------|
|
|
76
|
+
| `user` | `org.jahia.services.content.rules.User` | Current user context |
|
|
77
|
+
| `service` | `org.jahia.services.content.rules.Service` | Core JCR service shortcuts |
|
|
78
|
+
| `logger` | `org.slf4j.Logger` | SLF4J logger |
|
|
79
|
+
| `imageService` | `org.jahia.services.content.rules.ImageService` | Image operations |
|
|
80
|
+
| `extractionService` | `org.jahia.services.content.rules.ExtractionService` | Content extraction |
|
|
81
|
+
|
|
82
|
+
### Registering a custom service as a rules global
|
|
83
|
+
|
|
84
|
+
Step 1 — Declare the service component:
|
|
85
|
+
```java
|
|
86
|
+
@Component(service = MyService.class)
|
|
87
|
+
public class MyService {
|
|
88
|
+
public void doSomething(AddedNodeFact node) throws RepositoryException { }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Step 2 — Register as a global rules object:
|
|
93
|
+
```java
|
|
94
|
+
@Component(service = ModuleGlobalObject.class)
|
|
95
|
+
public class MyRulesGlobalObjects extends ModuleGlobalObject {
|
|
96
|
+
@Reference
|
|
97
|
+
public void setMyService(MyService myService) {
|
|
98
|
+
getGlobalRulesObject().put("myService", myService);
|
|
99
|
+
}
|
|
100
|
+
public void unsetMyService(MyService myService) {
|
|
101
|
+
getGlobalRulesObject().remove("myService");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Step 3 — Declare global and import in rules.drl:
|
|
107
|
+
```drools
|
|
108
|
+
import org.example.mymodule.MyService
|
|
109
|
+
global MyService myService
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Important:** Export the package containing `MyService` so other modules can import it in DRL files.
|
|
113
|
+
|
|
114
|
+
### Custom DSL extensions (rules.dsl)
|
|
115
|
+
|
|
116
|
+
```drools
|
|
117
|
+
[condition][]A new article is created=node : AddedNodeFact (types contains "jnt:article")
|
|
118
|
+
[consequence][]Notify publish for {node}=myService.notifyPublish({node});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 2. JCR event listeners
|
|
124
|
+
|
|
125
|
+
Extend `DefaultEventListener` to react to JCR node events:
|
|
126
|
+
|
|
127
|
+
```java
|
|
128
|
+
public class MyJCREventListener extends DefaultEventListener {
|
|
129
|
+
|
|
130
|
+
@Override
|
|
131
|
+
public int getEventTypes() {
|
|
132
|
+
return Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_CHANGED;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@Override
|
|
136
|
+
public String getPath() {
|
|
137
|
+
return "/sites";
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@Override
|
|
141
|
+
public void onEvent(EventIterator events) {
|
|
142
|
+
while (events.hasNext()) {
|
|
143
|
+
Event event = events.nextEvent();
|
|
144
|
+
try {
|
|
145
|
+
String path = event.getPath();
|
|
146
|
+
} catch (RepositoryException e) {
|
|
147
|
+
logger.error("Error processing event", e);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**JCR Event types:** `Event.NODE_ADDED`, `Event.NODE_REMOVED`, `Event.PROPERTY_ADDED`, `Event.PROPERTY_CHANGED`, `Event.PROPERTY_REMOVED`, `Event.NODE_MOVED`
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 3. JCR SQL2 cheat sheet
|
|
159
|
+
|
|
160
|
+
JCR SQL2 syntax: `SELECT * FROM [nodeType] AS alias WHERE conditions ORDER BY alias.[prop]`
|
|
161
|
+
|
|
162
|
+
### Querying node types
|
|
163
|
+
|
|
164
|
+
```sql
|
|
165
|
+
-- Prefer jmix:searchable over nt:base for broad queries
|
|
166
|
+
SELECT * FROM [jmix:searchable] AS node
|
|
167
|
+
|
|
168
|
+
SELECT * FROM [jnt:page] AS page
|
|
169
|
+
SELECT * FROM [jnt:file] AS file
|
|
170
|
+
SELECT * FROM [jnt:article] AS article
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Path constraints (always include for performance)
|
|
174
|
+
|
|
175
|
+
```sql
|
|
176
|
+
SELECT * FROM [jnt:article] AS node
|
|
177
|
+
WHERE ISDESCENDANTNODE(node, '/sites/mySite')
|
|
178
|
+
|
|
179
|
+
SELECT * FROM [jnt:page] AS child
|
|
180
|
+
WHERE ISCHILDNODE(child, '/sites/mySite/home')
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### String matching
|
|
184
|
+
|
|
185
|
+
```sql
|
|
186
|
+
SELECT * FROM [jnt:content] AS node WHERE node.[jcr:title] = 'My Title'
|
|
187
|
+
SELECT * FROM [jnt:content] AS node WHERE node.[jcr:title] LIKE '%news%'
|
|
188
|
+
SELECT * FROM [jnt:page] AS node WHERE LOWER(node.[jcr:title]) = 'home'
|
|
189
|
+
SELECT * FROM [jnt:page] AS page WHERE page.[jcr:title] IS NOT NULL
|
|
190
|
+
SELECT * FROM [jnt:content] AS node WHERE CONTAINS(node.*, 'digital')
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Property and type queries
|
|
194
|
+
|
|
195
|
+
```sql
|
|
196
|
+
SELECT * FROM [jnt:page] AS page WHERE page.[j:published] > CAST('true' AS BOOLEAN)
|
|
197
|
+
SELECT * FROM [jnt:page] AS page
|
|
198
|
+
WHERE page.[j:published] > CAST('2021-01-01T00:00:01.000Z' AS DATE)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Ordering and templates
|
|
202
|
+
|
|
203
|
+
```sql
|
|
204
|
+
SELECT * FROM [jnt:page] AS page ORDER BY page.[j:lastModified] DESC
|
|
205
|
+
SELECT * FROM [jnt:page] AS page WHERE page.[j:templateName] = 'home'
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Non-query lookups (use instead of queries for performance)
|
|
209
|
+
|
|
210
|
+
```java
|
|
211
|
+
// By UUID (preferred over UUID query)
|
|
212
|
+
session.getNodeByIdentifier("the-uuid-string");
|
|
213
|
+
|
|
214
|
+
// Set result limit (no LIMIT keyword in JCR SQL2)
|
|
215
|
+
QueryObjectModelImpl qom = ...;
|
|
216
|
+
qom.setLimit(20);
|
|
217
|
+
qom.setOffset(0);
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 4. Queries and search indexing
|
|
223
|
+
|
|
224
|
+
### Executing a JCR SQL2 query in Java
|
|
225
|
+
|
|
226
|
+
```java
|
|
227
|
+
JCRSessionWrapper session = JCRSessionFactory.getInstance()
|
|
228
|
+
.getCurrentUserSession("default", Locale.ENGLISH);
|
|
229
|
+
|
|
230
|
+
QueryManager queryManager = session.getWorkspace().getQueryManager();
|
|
231
|
+
Query query = queryManager.createQuery(
|
|
232
|
+
"SELECT * FROM [jnt:article] WHERE ISDESCENDANTNODE('/sites/mySite')",
|
|
233
|
+
Query.JCR_SQL2
|
|
234
|
+
);
|
|
235
|
+
QueryResult result = query.execute();
|
|
236
|
+
NodeIterator nodes = result.getNodes();
|
|
237
|
+
while (nodes.hasNext()) {
|
|
238
|
+
JCRNodeWrapper node = (JCRNodeWrapper) nodes.nextNode();
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Index tuning via CND keywords
|
|
243
|
+
|
|
244
|
+
```cnd
|
|
245
|
+
- title (string) i18n boost=3.0 # Higher search relevance
|
|
246
|
+
- code (string) analyzer=keyword # Index as single token
|
|
247
|
+
- internalNotes (string) nofulltext # Indexed but not in full-text search
|
|
248
|
+
- binaryData (binary) indexed=no # Not indexed at all
|
|
249
|
+
- category (string) facetable # Enables faceted search
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 5. External data sources (Provider API)
|
|
255
|
+
|
|
256
|
+
The External Provider API allows exposing non-JCR data as virtual JCR nodes.
|
|
257
|
+
|
|
258
|
+
### Key interfaces
|
|
259
|
+
|
|
260
|
+
| Interface | Purpose |
|
|
261
|
+
|-----------|---------|
|
|
262
|
+
| `ExternalDataSource` | Main interface to implement for external data |
|
|
263
|
+
| `ExternalDataSource.Searchable` | Add search support |
|
|
264
|
+
| `ExternalDataSource.Writable` | Add write support |
|
|
265
|
+
| `ExternalContentStoreProvider` | OSGi service to mount the provider |
|
|
266
|
+
|
|
267
|
+
### Minimal ExternalDataSource implementation
|
|
268
|
+
|
|
269
|
+
```java
|
|
270
|
+
@Component(service = ExternalDataSource.class)
|
|
271
|
+
public class MyExternalDataSource implements ExternalDataSource {
|
|
272
|
+
|
|
273
|
+
@Override
|
|
274
|
+
public List<String> getChildren(String path) throws PathNotFoundException {
|
|
275
|
+
return Arrays.asList("item1", "item2");
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
@Override
|
|
279
|
+
public ExternalData getItemByPath(String path) throws PathNotFoundException {
|
|
280
|
+
ExternalData data = new ExternalData("unique-id", path, "jnt:content",
|
|
281
|
+
new HashMap<String, String[]>());
|
|
282
|
+
data.getProperties().put("jcr:title", new String[]{"My Title"});
|
|
283
|
+
return data;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
@Override
|
|
287
|
+
public ExternalData getItemByIdentifier(String identifier) throws ItemNotFoundException {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
@Override
|
|
292
|
+
public Set<String> getSupportedNodeTypes() {
|
|
293
|
+
return Collections.singleton("jnt:content");
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
@Override public boolean isSupportsUuid() { return false; }
|
|
297
|
+
@Override public boolean isSupportsHierarchicalIdentifiers() { return false; }
|
|
298
|
+
@Override public boolean itemExists(String path) { return true; }
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 6. Permissions and roles
|
|
305
|
+
|
|
306
|
+
### Permission hierarchy
|
|
307
|
+
|
|
308
|
+
| Level | Description |
|
|
309
|
+
|-------|-------------|
|
|
310
|
+
| Server level | Global roles (e.g., Server Administrator) |
|
|
311
|
+
| Site level | Site-specific roles (e.g., Site Administrator, Editor) |
|
|
312
|
+
| Node level | Per-node ACL inheritance |
|
|
313
|
+
|
|
314
|
+
### Checking permissions in code
|
|
315
|
+
|
|
316
|
+
```java
|
|
317
|
+
if (currentNode.hasPermission("jcr:write")) { }
|
|
318
|
+
|
|
319
|
+
// In JSP
|
|
320
|
+
<c:if test="${jcr:hasPermission(currentNode, 'jcr:write')}">...</c:if>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Standard JCR permissions
|
|
324
|
+
|
|
325
|
+
| Permission | Description |
|
|
326
|
+
|------------|-------------|
|
|
327
|
+
| `jcr:read` | Read node and properties |
|
|
328
|
+
| `jcr:write` | Modify properties and children |
|
|
329
|
+
| `jcr:addChildNodes` | Add child nodes |
|
|
330
|
+
| `jcr:removeNode` | Delete the node |
|
|
331
|
+
| `jcr:modifyProperties` | Modify properties |
|