@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,269 @@
|
|
|
1
|
+
# Jahia Provisioning Reference
|
|
2
|
+
|
|
3
|
+
## Provisioning API overview
|
|
4
|
+
|
|
5
|
+
The Jahia Provisioning API (introduced in DX 8.x) executes YAML scripts that
|
|
6
|
+
install modules, create sites, configure OSGi services, and seed JCR content.
|
|
7
|
+
Scripts can be:
|
|
8
|
+
|
|
9
|
+
- Placed in `/var/jahia/patches/` — executed automatically at startup.
|
|
10
|
+
- POSTed to the REST endpoint: `POST /modules/api/provisioning`.
|
|
11
|
+
|
|
12
|
+
## REST endpoint
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
POST /modules/api/provisioning
|
|
16
|
+
Authorization: Basic <base64(root:password)>
|
|
17
|
+
Content-Type: application/yaml (or multipart/form-data)
|
|
18
|
+
|
|
19
|
+
<provisioning script body>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Upload via curl
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
curl -u root:changeme \
|
|
26
|
+
-X POST \
|
|
27
|
+
-H "Content-Type: application/yaml" \
|
|
28
|
+
--data-binary @my-script.yaml \
|
|
29
|
+
http://localhost:8080/modules/api/provisioning
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Upload via multipart (with file)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
curl -u root:changeme \
|
|
36
|
+
-F "script=@my-script.yaml" \
|
|
37
|
+
http://localhost:8080/modules/api/provisioning
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Script structure
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
# provisioning-script.yaml
|
|
44
|
+
- installOrUpgradeModules:
|
|
45
|
+
- url: "mvn:org.jahia.modules/article/3.5.0"
|
|
46
|
+
- url: "file:///var/jahia/modules/my-custom-module-1.0.jar"
|
|
47
|
+
|
|
48
|
+
- createSite: ""
|
|
49
|
+
siteKey: mySite
|
|
50
|
+
title: "My Site"
|
|
51
|
+
defaultLanguage: en
|
|
52
|
+
serverName: localhost
|
|
53
|
+
templateSet: my-template-set
|
|
54
|
+
|
|
55
|
+
- importSite:
|
|
56
|
+
siteKey: mySite
|
|
57
|
+
uri: "file:///var/jahia/imports/mySite-export.zip"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Common provisioning operations
|
|
61
|
+
|
|
62
|
+
### Install / upgrade a module from Maven
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
- installOrUpgradeModules:
|
|
66
|
+
- url: "mvn:org.jahia.modules/bootstrap4-core/4.0.0"
|
|
67
|
+
- url: "mvn:org.jahia.modules/bootstrap4-components/4.0.0"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Install from a local file
|
|
71
|
+
|
|
72
|
+
```yaml
|
|
73
|
+
- installOrUpgradeModules:
|
|
74
|
+
- url: "file:///var/jahia/modules/my-module-1.0.jar"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Enable / start a module
|
|
78
|
+
|
|
79
|
+
```yaml
|
|
80
|
+
- startModules:
|
|
81
|
+
- name: my-module
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Disable / stop a module
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
- stopModules:
|
|
88
|
+
- name: my-module
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Uninstall a module
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
- uninstallModules:
|
|
95
|
+
- name: my-module
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Create a virtual site
|
|
99
|
+
|
|
100
|
+
> ⚠️ **CRITICAL — Jahia 8.2 syntax**: use `- createSite: ""` with properties at the **same indentation level**. There are **two common mistakes that both silently return HTTP 200 but create nothing**:
|
|
101
|
+
> - ❌ `- createSite:` with nested properties (missing `""`)
|
|
102
|
+
> - ❌ `- createVirtualSite:` (old name, no longer valid)
|
|
103
|
+
>
|
|
104
|
+
> **Always use a file-based approach** to avoid shell quoting issues:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
cat > /tmp/create-site.yaml <<'EOF'
|
|
108
|
+
- createSite: ""
|
|
109
|
+
siteKey: acme
|
|
110
|
+
title: "ACME Corp"
|
|
111
|
+
defaultLanguage: en
|
|
112
|
+
serverName: localhost
|
|
113
|
+
templateSet: acme-template-set
|
|
114
|
+
EOF
|
|
115
|
+
|
|
116
|
+
curl -u root:root1234 -X POST -H "Content-Type: application/yaml" \
|
|
117
|
+
--data-binary @/tmp/create-site.yaml \
|
|
118
|
+
http://localhost:8080/modules/api/provisioning
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The API returns `HTTP 200` with an empty body. **Always verify** the site was created — HTTP 200 is not sufficient confirmation:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
curl -s -u root:root1234 \
|
|
125
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
126
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
127
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites/acme\") { name } } }"}'
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
If the response contains `"name": "acme"`, the site exists. If it returns `null`, the site was not created — recheck the YAML format.
|
|
131
|
+
|
|
132
|
+
### Delete a virtual site
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
curl -u root:root1234 \
|
|
136
|
+
-X POST \
|
|
137
|
+
-H "Content-Type: application/yaml" \
|
|
138
|
+
--data-binary '- deleteSite: ""
|
|
139
|
+
siteKey: acme' \
|
|
140
|
+
http://localhost:8080/modules/api/provisioning
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Import a site export ZIP
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
- importSite:
|
|
147
|
+
siteKey: acme
|
|
148
|
+
uri: "file:///var/jahia/imports/acme-export.zip"
|
|
149
|
+
rootUsersGroup: site-admins
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Execute a Groovy script
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
- executeScript:
|
|
156
|
+
script: "file:///var/jahia/patches/migrate-content.groovy"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Or inline:
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
- executeScript:
|
|
163
|
+
scriptContent: |
|
|
164
|
+
import org.jahia.services.content.*
|
|
165
|
+
def session = JCRSessionFactory.getInstance().getCurrentSystemSession("default", null, null)
|
|
166
|
+
// ... do work ...
|
|
167
|
+
session.save()
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Set a system property / OSGi configuration
|
|
171
|
+
|
|
172
|
+
```yaml
|
|
173
|
+
- setSystemProperty:
|
|
174
|
+
name: my.custom.property
|
|
175
|
+
value: "my-value"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```yaml
|
|
179
|
+
- setOsgiConfiguration:
|
|
180
|
+
pid: "org.jahia.services.content.nodetypes.NodeTypeRegistry"
|
|
181
|
+
properties:
|
|
182
|
+
autoDeployBundles: "true"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Add a user
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
- addUser:
|
|
189
|
+
username: john.doe
|
|
190
|
+
password: secret123
|
|
191
|
+
email: john.doe@example.com
|
|
192
|
+
firstName: John
|
|
193
|
+
lastName: Doe
|
|
194
|
+
roles:
|
|
195
|
+
- site-administrator:acme
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Grant a role on a node
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
- grantRoles:
|
|
202
|
+
path: /sites/acme
|
|
203
|
+
principal: "u:john.doe"
|
|
204
|
+
roles:
|
|
205
|
+
- site-administrator
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Patches directory
|
|
209
|
+
|
|
210
|
+
Files placed in `/var/jahia/patches/` are executed **once** at startup
|
|
211
|
+
(Jahia records which files have already been applied):
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
/var/jahia/patches/
|
|
215
|
+
cfg/ ← OSGi .cfg files
|
|
216
|
+
spring/ ← Spring XML context overrides
|
|
217
|
+
groovy/ ← Groovy scripts (executed once)
|
|
218
|
+
yaml/ ← Provisioning YAML scripts (executed once)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Mount a host directory here to inject patches without rebuilding the image:
|
|
222
|
+
|
|
223
|
+
```yaml
|
|
224
|
+
volumes:
|
|
225
|
+
- ./patches:/var/jahia/patches
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Execution order and idempotency
|
|
229
|
+
|
|
230
|
+
- Provisioning YAML scripts in `patches/yaml/` are sorted alphabetically.
|
|
231
|
+
Prefix filenames with a two-digit index (`01-modules.yaml`, `02-sites.yaml`)
|
|
232
|
+
to control order.
|
|
233
|
+
- Most operations are idempotent: `installOrUpgradeModules` skips if the exact
|
|
234
|
+
version is already installed; `createVirtualSite` skips if the site key exists.
|
|
235
|
+
- Groovy scripts in `patches/groovy/` run exactly once; rename the file to
|
|
236
|
+
force re-execution.
|
|
237
|
+
|
|
238
|
+
## Checking provisioning status
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# View provisioning log output (appears in jahia.log)
|
|
242
|
+
docker compose exec jahia grep -i "provisioning\|install.*module\|createVirtualSite" /var/log/jahia/jahia.log
|
|
243
|
+
|
|
244
|
+
# List applied patches via Karaf
|
|
245
|
+
ssh -p 7770 karaf@localhost
|
|
246
|
+
# In Karaf:
|
|
247
|
+
jahia:patches-list
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## jCustomer (Unomi) provisioning
|
|
251
|
+
|
|
252
|
+
Unomi uses its own REST API and YAML/JSON rules. Key endpoints:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Import a scope
|
|
256
|
+
curl -u karaf:karaf -X POST \
|
|
257
|
+
-H "Content-Type: application/json" \
|
|
258
|
+
-d '{"itemId":"mySite","itemType":"scope"}' \
|
|
259
|
+
http://localhost:8181/cxs/scopes
|
|
260
|
+
|
|
261
|
+
# Import a rule
|
|
262
|
+
curl -u karaf:karaf -X POST \
|
|
263
|
+
-H "Content-Type: application/json" \
|
|
264
|
+
-d @my-rule.json \
|
|
265
|
+
http://localhost:8181/cxs/rules
|
|
266
|
+
|
|
267
|
+
# Reload rules from classpath
|
|
268
|
+
curl -u karaf:karaf -X POST http://localhost:8181/cxs/rules/resetQueries
|
|
269
|
+
```
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-osgi-module
|
|
3
|
+
description: Conventions and invariants for building any Jahia OSGi/Java bundle module (Jahia 8.2). Use when working on Maven bundle structure, OSGi Declarative Services, JCR integration, or Java package design.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SKILL — Jahia OSGi Module Development (8.2)
|
|
7
|
+
|
|
8
|
+
## When this skill applies
|
|
9
|
+
|
|
10
|
+
You are working on anything that touches the OSGi bundle structure, Maven build, JCR node-type definitions, or Jahia service integration. That is, almost every Java change in a Jahia module.
|
|
11
|
+
|
|
12
|
+
## Scaffold a new module
|
|
13
|
+
|
|
14
|
+
Use the official Maven archetype. Always pick archetype **2** (`jahia-module-archetype`) and the latest version.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
mvn archetype:generate -Dfilter=org.jahia.archetypes:
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
At the interactive prompts:
|
|
21
|
+
1. Enter `2` → `jahia-module-archetype` (Jahia DXP >=8)
|
|
22
|
+
2. Enter the latest version number (currently `4.8`)
|
|
23
|
+
3. Fill in the properties below, then confirm with `Y`
|
|
24
|
+
|
|
25
|
+
| Property | Example | Notes |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| `artifactId` | `my-module` | Maven artifact ID and folder name |
|
|
28
|
+
| `moduleName` | `My Module` | Human-readable name shown in Jahia UI |
|
|
29
|
+
| `groupId` | `org.example.modules` | Java package root |
|
|
30
|
+
| `jahiaVersion` | `8.2.0.0` | Target Jahia version — use `8.2.0.0`, not the archetype default |
|
|
31
|
+
| `version` | `1.0.0-SNAPSHOT` | Module version |
|
|
32
|
+
| `package` | `org.example.modules` | Java package (usually matches `groupId`) |
|
|
33
|
+
|
|
34
|
+
> ⚠️ **Always set `jahiaVersion` to `8.2.0.0`** — the archetype default (`8.0.0.0`) is outdated. The parent POM version in the generated `pom.xml` should be `org.jahia.modules:jahia-modules:8.2.0.0`. If the archetype sets a different version, update it before your first build.
|
|
35
|
+
|
|
36
|
+
After generation, the scaffolded structure contains:
|
|
37
|
+
```
|
|
38
|
+
<artifactId>/
|
|
39
|
+
├── pom.xml
|
|
40
|
+
└── src/
|
|
41
|
+
├── main/
|
|
42
|
+
│ ├── java/<package>/ # Java sources
|
|
43
|
+
│ └── resources/
|
|
44
|
+
│ └── META-INF/
|
|
45
|
+
│ └── definitions.cnd # Empty — add your node types here
|
|
46
|
+
└── test/
|
|
47
|
+
└── java/<package>/
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Build immediately to verify the scaffold compiles:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cd <artifactId>
|
|
54
|
+
mvn clean install
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Hard invariants
|
|
60
|
+
|
|
61
|
+
1. **Parent POM is `org.jahia.modules:jahia-modules:8.2.0.0`.** Do not bump without a documented decision. This version constrains the Java baseline (Java 17 max), the OSGi spec level (R6 / `osgi.cmpn` 6.0.0), and the available platform APIs.
|
|
62
|
+
|
|
63
|
+
2. **Packaging is `bundle`.** The manifest is generated by `maven-bundle-plugin` (BND) configured in the parent. The parent already sets `Jahia-Module-Type`, `Bundle-Category`, signature, SCM headers, and default JDK target — **do not redeclare them**. Use `<jahia-depends>` and `<jahia-module-signature>` properties to drive the inherited config.
|
|
64
|
+
|
|
65
|
+
3. **Dependencies on Jahia APIs go through `org.jahia.server:jahia-impl` and `jahia-api`** (both `provided`). On `jahia-impl`, exclude transitives:
|
|
66
|
+
```xml
|
|
67
|
+
<exclusions>
|
|
68
|
+
<exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion>
|
|
69
|
+
</exclusions>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
4. **OSGi services use Declarative Services (DS) annotations** (`@Component`, `@Reference`, `@Activate`). Enable BND processing with `<_dsannotations>*</_dsannotations>` (already set in the parent pom). Never use Blueprint; never use the `BundleActivator` pattern for new code.
|
|
73
|
+
|
|
74
|
+
5. **`@Component` services that are part of the public SPI must declare a `service` attribute** (e.g. `@Component(service = MyInterface.class)`) so the registry can look them up by interface.
|
|
75
|
+
|
|
76
|
+
6. **Public packages must be declared in `Export-Package`.** Internal implementation lives in `*.internal.*` packages and is *not* exported.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Directory conventions
|
|
81
|
+
|
|
82
|
+
| Path | Purpose |
|
|
83
|
+
|---|---|
|
|
84
|
+
| `src/main/java/org/jahia/modules/<name>/` | Java sources |
|
|
85
|
+
| `src/main/resources/META-INF/definitions.cnd` | JCR node type definitions |
|
|
86
|
+
| `src/main/resources/javascript/apps/` | jContent UI extension entry point |
|
|
87
|
+
| `src/main/resources/resources/` | i18n bundles (`.properties` files) |
|
|
88
|
+
| `src/main/import/repository.xml` | Initial JCR content imported on first install |
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Java baseline
|
|
93
|
+
|
|
94
|
+
- Java 17. Records, sealed types, pattern matching, `var`, `switch` expressions are all fine.
|
|
95
|
+
- Do **not** use Java 21-only features (virtual threads at the API surface, primitive pattern matching, etc.).
|
|
96
|
+
- Prefer `java.util.Optional`, `java.time.*`, `java.util.concurrent.*` over Guava/Apache Commons unless an existing dependency already provides them.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## JCR access patterns
|
|
101
|
+
|
|
102
|
+
- Always run JCR mutations as the calling Jahia user:
|
|
103
|
+
```java
|
|
104
|
+
JCRTemplate.getInstance().doExecuteWithUserSession(username, workspace, locale, callback)
|
|
105
|
+
```
|
|
106
|
+
Never escalate to a system session for content the user authored or requested.
|
|
107
|
+
- For reads where the user has implicit access, prefer receiving the `JCRSessionWrapper` from the controller layer rather than obtaining one yourself — this keeps the audit trail clean.
|
|
108
|
+
- Save changes explicitly (`session.save()`); do not rely on auto-commit.
|
|
109
|
+
- `JCRSessionWrapper` is per-user, per-workspace, per-locale, **and not thread-safe**. Never hold a reference across threads.
|
|
110
|
+
- Wrap user-visible errors in domain-specific exceptions; let infrastructure exceptions (`RepositoryException`) bubble up to the caller, which converts them to the appropriate response format.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## OSGi service pattern
|
|
115
|
+
|
|
116
|
+
```java
|
|
117
|
+
@Component(service = MyService.class, immediate = true)
|
|
118
|
+
public class MyServiceImpl implements MyService {
|
|
119
|
+
|
|
120
|
+
@Reference
|
|
121
|
+
private JahiaSitesService sitesService;
|
|
122
|
+
|
|
123
|
+
@Activate
|
|
124
|
+
protected void activate(Map<String, Object> config) {
|
|
125
|
+
// initialization logic
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- `immediate = true` is needed for services that must activate on bundle start (e.g. servlet registrations, JCR event listeners).
|
|
131
|
+
- Use `@Reference(cardinality = ReferenceCardinality.OPTIONAL)` for optional dependencies.
|
|
132
|
+
- Constructor injection is preferred over field injection for testability.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## OSGi configuration (CFG files) — avoids redeployment
|
|
137
|
+
|
|
138
|
+
**Always use a `.cfg` file for any runtime-configurable property** (API keys, URLs, feature flags, timeouts, rate limits). OSGi Config Admin reloads the file at runtime without requiring a module redeploy — changes take effect immediately via the `@Modified` callback.
|
|
139
|
+
|
|
140
|
+
### File location and naming
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
src/main/resources/META-INF/configurations/<service.pid>.cfg
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
The filename **must match the `service.pid`** declared on the `@Component`. Convention:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
org.<org>.<module-name>.cfg # main service config
|
|
150
|
+
org.jahia.modules.jahiacsrfguard-<module>.cfg # CSRF whitelist (one per module with Actions)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Main config pattern — DS `@Activate` + `@Modified` (preferred)
|
|
154
|
+
|
|
155
|
+
Use the **snapshot pattern** with Declarative Services annotations. This is cleaner than implementing `ManagedService` — no need for the extra service declaration, and `@Modified` fires automatically on `.cfg` changes without a full component restart.
|
|
156
|
+
|
|
157
|
+
```java
|
|
158
|
+
@Component(
|
|
159
|
+
service = MyService.class,
|
|
160
|
+
configurationPid = "org.example.mymodule", // links to the .cfg filename
|
|
161
|
+
immediate = true
|
|
162
|
+
)
|
|
163
|
+
public class MyServiceImpl implements MyService {
|
|
164
|
+
|
|
165
|
+
private volatile Snapshot config = Snapshot.empty();
|
|
166
|
+
|
|
167
|
+
@Activate
|
|
168
|
+
@Modified // ← same method handles both initial activation and runtime config changes
|
|
169
|
+
protected void activate(Map<String, Object> properties) {
|
|
170
|
+
this.config = Snapshot.from(properties);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@Override
|
|
174
|
+
public String process(String input) {
|
|
175
|
+
Snapshot cfg = this.config; // single volatile read — consistent snapshot
|
|
176
|
+
if (!cfg.isConfigured()) throw new IllegalStateException("Service not configured");
|
|
177
|
+
// use cfg.apiKey, cfg.baseUrl, cfg.timeoutMs ...
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Immutable snapshot — readers always see a complete, consistent config
|
|
181
|
+
private static final class Snapshot {
|
|
182
|
+
final String apiKey;
|
|
183
|
+
final String baseUrl;
|
|
184
|
+
final int timeoutMs;
|
|
185
|
+
|
|
186
|
+
private Snapshot(String apiKey, String baseUrl, int timeoutMs) {
|
|
187
|
+
this.apiKey = apiKey;
|
|
188
|
+
this.baseUrl = baseUrl;
|
|
189
|
+
this.timeoutMs = timeoutMs;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
static Snapshot empty() { return new Snapshot("", "https://api.example.com", 30_000); }
|
|
193
|
+
|
|
194
|
+
static Snapshot from(Map<String, Object> p) {
|
|
195
|
+
return new Snapshot(
|
|
196
|
+
str(p, "API_KEY", ""),
|
|
197
|
+
str(p, "API_BASE_URL", "https://api.example.com"),
|
|
198
|
+
intVal(p, "TIMEOUT_MS", 30_000)
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
boolean isConfigured() { return !apiKey.isBlank() && !baseUrl.isBlank(); }
|
|
203
|
+
|
|
204
|
+
private static String str(Map<String, Object> m, String k, String def) {
|
|
205
|
+
Object v = m.get(k);
|
|
206
|
+
return (v instanceof String s && !s.isBlank()) ? s.trim() : def;
|
|
207
|
+
}
|
|
208
|
+
private static int intVal(Map<String, Object> m, String k, int def) {
|
|
209
|
+
try { return Integer.parseInt(String.valueOf(m.get(k))); }
|
|
210
|
+
catch (Exception e) { return def; }
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
> **Why snapshot?** The `volatile Snapshot` field is replaced atomically. Callers that read `this.config` in a method always see a fully-initialized, internally consistent configuration — never a mix of old key + new URL. This is thread-safe without synchronization.
|
|
217
|
+
|
|
218
|
+
> **Why `@Activate` + `@Modified` together?** OSGi DS calls `@Activate` on first start and `@Modified` when the `.cfg` file changes without stopping the component. Pointing both to the same method means a single code path handles both cases. If only `@Activate` is annotated, a config change triggers a full stop/start cycle instead of a lightweight update.
|
|
219
|
+
|
|
220
|
+
### The `.cfg` file
|
|
221
|
+
|
|
222
|
+
```properties
|
|
223
|
+
# src/main/resources/META-INF/configurations/org.example.mymodule.cfg
|
|
224
|
+
#
|
|
225
|
+
# Deployed to: digital-factory-data/karaf/etc/
|
|
226
|
+
# Edit that file at runtime — changes take effect without redeployment.
|
|
227
|
+
#
|
|
228
|
+
API_KEY=
|
|
229
|
+
API_BASE_URL=https://api.example.com
|
|
230
|
+
TIMEOUT_MS=30000
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
> The `.cfg` file ships with safe defaults. Operators override it in `digital-factory-data/karaf/etc/` on each environment (dev / staging / prod) — secrets never live in the source repository.
|
|
234
|
+
|
|
235
|
+
### CSRF guard config (required for every module with Java Actions)
|
|
236
|
+
|
|
237
|
+
```properties
|
|
238
|
+
# src/main/resources/META-INF/configurations/org.jahia.modules.jahiacsrfguard-mymodule.cfg
|
|
239
|
+
whitelist = *.myFirstAction.do, *.mySecondAction.do
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
One entry per Action name. Missing this file means every POST to those endpoints is rejected with 403.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## GraphQL extensions
|
|
247
|
+
|
|
248
|
+
- Provided by the `graphql-dxm-provider` module (declare as `<jahia-depends>`).
|
|
249
|
+
- Extend by registering classes annotated with `@GraphQLTypeExtension`, `@GraphQLField`, etc.
|
|
250
|
+
- Authentication is inherited from the HTTP request; resolvers run as the authenticated user.
|
|
251
|
+
- Register as a `@Component(service = DXGraphQLExtensionsProvider.class)`.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Adding a dependency
|
|
256
|
+
|
|
257
|
+
1. Check if Jahia already provides it via `jahia-impl` exports before adding.
|
|
258
|
+
2. If available at runtime: `<scope>provided</scope>`.
|
|
259
|
+
3. If it must be bundled: `Embed-Dependency` in the BND config (last resort — adds to bundle size and risks classpath conflicts).
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Testing
|
|
264
|
+
|
|
265
|
+
- **Unit tests:** JUnit 5 + Mockito. Place under `src/test/java`.
|
|
266
|
+
- **Integration tests:** Use the `jahia-test-utils` framework against a running Jahia instance. Tag with `@Tag("integration")` and isolate from the unit test run.
|
|
267
|
+
- Do not mock core Jahia services in integration tests — load them from the real OSGi registry. The registry is the contract.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Common pitfalls
|
|
272
|
+
|
|
273
|
+
- ❌ Adding a dependency without checking if Jahia already provides it → check `jahia-impl` exports first.
|
|
274
|
+
- ❌ `LoggerFactory.getLogger(getClass())` in a `static` context → use `LoggerFactory.getLogger(MyClass.class)`.
|
|
275
|
+
- ❌ Holding `JCRSessionWrapper` references across threads → sessions are not thread-safe.
|
|
276
|
+
- ❌ Forgetting to export public packages → consumers won't see the service.
|
|
277
|
+
- ❌ Using `jmix:studioOnly` in CND definitions → it can silently break area rendering. Use `jmix:hiddenType`.
|
|
278
|
+
- ❌ Declaring `j:linknode` or `j:url` in a CND alongside `choicelist[linkTypeInitializer]` → they are injected automatically by Jahia's mixins at runtime.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Useful Jahia service entry points
|
|
283
|
+
|
|
284
|
+
```java
|
|
285
|
+
JCRTemplate.getInstance().doExecuteWithUserSession(...) // primary JCR access pattern
|
|
286
|
+
JahiaSitesService.getInstance().getSiteByKey(siteKey) // resolve a site
|
|
287
|
+
JCRSessionFactory.getInstance().getCurrentUser() // current Jahia user
|
|
288
|
+
NodeTypeRegistry.getInstance().getNodeType(name) // node type metadata
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## References
|
|
294
|
+
|
|
295
|
+
- Jahia 8 developer documentation: https://academy.jahia.com
|
|
296
|
+
- Native Jahia node types (CND source): https://github.com/Jahia/jahia/tree/master/war/src/main/webapp/WEB-INF/etc/repository/nodetypes
|
|
297
|
+
- Jahia GraphQL API: https://academy.jahia.com/documentation/developer/jahia/8/api-documentation/graphql-api
|