@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,559 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-ui-extension
|
|
3
|
+
description: Conventions and patterns for building Jahia OSGi UI extensions — modules that extend the jcontent back-office (actions, panels, dialogs) using React 18, Webpack/Module Federation, and the @jahia/ui-extender registry. Distinct from JS template sets (React 19, Vite).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SKILL — Jahia OSGi UI Extension
|
|
7
|
+
|
|
8
|
+
## When this skill applies
|
|
9
|
+
|
|
10
|
+
You are extending the **jcontent back-office** — adding toolbar actions, admin panels, dialogs, or sidebar panels that editors see inside jcontent / Page Builder. This is **not** about rendering the public-facing site (that is the JS template set track).
|
|
11
|
+
|
|
12
|
+
Key indicators:
|
|
13
|
+
- `@jahia/ui-extender` in `package.json`
|
|
14
|
+
- `@jahia/webpack-config` / `webpack.config.js` (not Vite)
|
|
15
|
+
- Output to `src/main/resources/javascript/apps/`
|
|
16
|
+
- React 18, not React 19
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## React version distinction — critical
|
|
21
|
+
|
|
22
|
+
| Module type | React version | Build tool | Library |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| **JS template set** (public site) | React **19** | Vite | `@jahia/javascript-modules-library` |
|
|
25
|
+
| **OSGi UI extension** (back-office) | React **18** | Webpack + Module Federation | `@jahia/ui-extender` |
|
|
26
|
+
|
|
27
|
+
Never mix them. A UI extension that imports React 19 APIs will silently break in jcontent. A template set that uses `@jahia/ui-extender` won't work in the page renderer.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Scaffold a new UI extension module
|
|
32
|
+
|
|
33
|
+
Use archetype **4** (`jahia-reactjs-admin-module-archetype`) which scaffolds the Webpack/Module Federation wiring automatically.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
mvn archetype:generate -Dfilter=org.jahia.archetypes:
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
At the prompts:
|
|
40
|
+
1. Enter `4` → `jahia-reactjs-admin-module-archetype` (Jahia DXP >= 8)
|
|
41
|
+
2. Enter the latest version
|
|
42
|
+
3. Fill in the properties, then confirm with `Y`
|
|
43
|
+
|
|
44
|
+
| Property | Example | Notes |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `artifactId` | `my-ui-extension` | Maven artifact ID and folder name |
|
|
47
|
+
| `moduleName` | `My UI Extension` | Human-readable name shown in Jahia UI |
|
|
48
|
+
| `groupId` | `org.example.modules` | Java package root |
|
|
49
|
+
| `jahiaVersion` | `8.2.0.0` | **Always `8.2.0.0`** — the archetype default is outdated |
|
|
50
|
+
| `version` | `1.0.0-SNAPSHOT` | Module version |
|
|
51
|
+
| `package` | `org.example.modules` | Java package |
|
|
52
|
+
|
|
53
|
+
> ⚠️ After generation, update `react` and `react-dom` in `package.json` to `^18.3.1`. The archetype may scaffold an older React 18 minor — always pin to the latest React 18.x.
|
|
54
|
+
|
|
55
|
+
Build to verify:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd <artifactId>
|
|
59
|
+
mvn clean install # runs yarn build:production via frontend-maven-plugin
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Module structure
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
<module>/
|
|
68
|
+
├── pom.xml # Maven OSGi bundle
|
|
69
|
+
├── package.json # Webpack/JS config
|
|
70
|
+
├── webpack.config.js
|
|
71
|
+
├── babel.config.js
|
|
72
|
+
├── src/
|
|
73
|
+
│ ├── javascript/ # React / JS sources
|
|
74
|
+
│ │ ├── index.js # Entry point — registers jahiaApp-init callback
|
|
75
|
+
│ │ ├── init.js # Async init — loads i18n, calls register functions
|
|
76
|
+
│ │ ├── <Feature>/
|
|
77
|
+
│ │ │ ├── <Feature>.jsx # React component
|
|
78
|
+
│ │ │ ├── register<Feature>.js # registry.add() call
|
|
79
|
+
│ │ │ ├── dialogManager.js # Portal pattern (if feature has a dialog)
|
|
80
|
+
│ │ │ └── gql/
|
|
81
|
+
│ │ │ └── <Feature>.mutations.js # Apollo mutations
|
|
82
|
+
│ │ └── AdminPanel/ # Optional admin panel
|
|
83
|
+
│ │ ├── AdminPanel.jsx
|
|
84
|
+
│ │ └── AdminPanel.routes.jsx
|
|
85
|
+
│ └── main/
|
|
86
|
+
│ ├── java/org/jahia/<org>/<module>/
|
|
87
|
+
│ │ ├── actions/ # Java Actions (@Component service = Action.class)
|
|
88
|
+
│ │ └── services/ # OSGi services (@Component)
|
|
89
|
+
│ └── resources/
|
|
90
|
+
│ ├── META-INF/configurations/ # OSGi .cfg files
|
|
91
|
+
│ └── javascript/
|
|
92
|
+
│ ├── apps/ # Webpack output (do not edit)
|
|
93
|
+
│ └── locales/ # i18n JSON files
|
|
94
|
+
│ ├── en.json
|
|
95
|
+
│ └── fr.json
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Build stack
|
|
101
|
+
|
|
102
|
+
### package.json key fields
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"jahia": {
|
|
107
|
+
"remotes": {
|
|
108
|
+
"jahia": "javascript/apps/remoteEntry.js"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"dependencies": {
|
|
112
|
+
"react": "^18.3.1",
|
|
113
|
+
"react-dom": "^18.3.1",
|
|
114
|
+
"@jahia/ui-extender": "^1.x",
|
|
115
|
+
"@jahia/moonstone": "^2.x",
|
|
116
|
+
"@jahia/data-helper": "^1.x",
|
|
117
|
+
"@apollo/client": "^3.x"
|
|
118
|
+
},
|
|
119
|
+
"devDependencies": {
|
|
120
|
+
"@jahia/webpack-config": "^1.x"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### webpack.config.js
|
|
126
|
+
|
|
127
|
+
```javascript
|
|
128
|
+
const { getModuleFederationConfig } = require('@jahia/webpack-config');
|
|
129
|
+
const packageJson = require('./package.json');
|
|
130
|
+
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
|
|
131
|
+
|
|
132
|
+
module.exports = (env, argv) => ({
|
|
133
|
+
entry: { main: './src/javascript/index' },
|
|
134
|
+
output: {
|
|
135
|
+
path: path.join(__dirname, 'src/main/resources/javascript/apps/'),
|
|
136
|
+
publicPath: 'auto',
|
|
137
|
+
filename: 'jahia.bundle.js',
|
|
138
|
+
chunkFilename: '[name].jahia.[chunkhash:6].js',
|
|
139
|
+
},
|
|
140
|
+
module: {
|
|
141
|
+
rules: [
|
|
142
|
+
{ test: /\.(js|jsx)$/, use: 'babel-loader', exclude: /node_modules/ },
|
|
143
|
+
{ test: /\.module\.css$/, use: ['style-loader', { loader: 'css-loader', options: { modules: true } }] },
|
|
144
|
+
{ test: /\.css$/, exclude: /\.module\.css$/, use: ['style-loader', 'css-loader'] },
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
plugins: [
|
|
148
|
+
new ModuleFederationPlugin(getModuleFederationConfig(packageJson)),
|
|
149
|
+
],
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`@jahia/webpack-config/getModuleFederationConfig` reads the `jahia.remotes` field from `package.json` and configures shared dependencies (React, MUI, Apollo) as singletons — this is what prevents version conflicts with jcontent's own React 18 instance.
|
|
154
|
+
|
|
155
|
+
### Maven — frontend-maven-plugin
|
|
156
|
+
|
|
157
|
+
```xml
|
|
158
|
+
<plugin>
|
|
159
|
+
<groupId>com.github.eirslett</groupId>
|
|
160
|
+
<artifactId>frontend-maven-plugin</artifactId>
|
|
161
|
+
<executions>
|
|
162
|
+
<execution>
|
|
163
|
+
<id>install-node-and-yarn</id>
|
|
164
|
+
<goals><goal>install-node-and-yarn</goal></goals>
|
|
165
|
+
<configuration>
|
|
166
|
+
<nodeVersion>v20.x.x</nodeVersion>
|
|
167
|
+
<yarnVersion>v1.22.x</yarnVersion>
|
|
168
|
+
</configuration>
|
|
169
|
+
</execution>
|
|
170
|
+
<execution>
|
|
171
|
+
<id>yarn-install</id>
|
|
172
|
+
<goals><goal>yarn</goal></goals>
|
|
173
|
+
</execution>
|
|
174
|
+
<execution>
|
|
175
|
+
<id>yarn-build</id>
|
|
176
|
+
<goals><goal>yarn</goal></goals>
|
|
177
|
+
<configuration>
|
|
178
|
+
<arguments>build:production</arguments>
|
|
179
|
+
</configuration>
|
|
180
|
+
</execution>
|
|
181
|
+
</executions>
|
|
182
|
+
</plugin>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Build scripts in `package.json`:
|
|
186
|
+
- `build`: `yarn lint && webpack` (dev — fast, no minification)
|
|
187
|
+
- `build:production`: `webpack --mode=production` (for Maven/CI)
|
|
188
|
+
- `dev`: `webpack --watch` (interactive dev only — never run from an agent)
|
|
189
|
+
|
|
190
|
+
### Deploy
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Always use this for agentic builds
|
|
194
|
+
mvn clean install -pl .
|
|
195
|
+
|
|
196
|
+
# Or if a deployer script is configured:
|
|
197
|
+
yarn build && mvn install -DskipTests
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Registering UI extensions (JavaScript side)
|
|
203
|
+
|
|
204
|
+
### Entry point pattern
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
// src/javascript/index.js
|
|
208
|
+
import { registry } from '@jahia/ui-extender';
|
|
209
|
+
|
|
210
|
+
export default function () {
|
|
211
|
+
registry.add('callback', 'my-module', {
|
|
212
|
+
targets: ['jahiaApp-init:50'], // runs early in jcontent lifecycle
|
|
213
|
+
callback: async () => {
|
|
214
|
+
const { default: register } = await import('./init');
|
|
215
|
+
register();
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
```javascript
|
|
222
|
+
// src/javascript/init.js
|
|
223
|
+
import i18next from 'i18next';
|
|
224
|
+
import { registerMyAction } from './MyAction';
|
|
225
|
+
|
|
226
|
+
export default async function () {
|
|
227
|
+
await i18next.loadNamespaces('my-module'); // load translations before registering UI
|
|
228
|
+
registerMyAction();
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The `jahiaApp-init:N` priority controls load order. Use 50 for normal modules; use lower numbers only if another module must see your registry entries at init time.
|
|
233
|
+
|
|
234
|
+
> **SelectorType registration** uses the same `registry.add` mechanism — `registry.add('selectorType', 'MyKey', { cmp, dataType, adaptValue, initValue })` — wired to a CND property via a JSON fieldset override in `settings/content-editor-forms/fieldsets/`.
|
|
235
|
+
|
|
236
|
+
### Action registration
|
|
237
|
+
|
|
238
|
+
```javascript
|
|
239
|
+
// src/javascript/MyAction/registerMyAction.js
|
|
240
|
+
import React from 'react';
|
|
241
|
+
import { registry } from '@jahia/ui-extender';
|
|
242
|
+
import { Download } from '@jahia/moonstone';
|
|
243
|
+
import { MyAction } from './MyAction';
|
|
244
|
+
|
|
245
|
+
export const registerMyAction = () => {
|
|
246
|
+
registry.addOrReplace('action', 'myActionName', {
|
|
247
|
+
targets: ['contentActions:900'], // toolbar position (higher number = lower priority)
|
|
248
|
+
buttonIcon: <Download />,
|
|
249
|
+
buttonLabel: 'my-module:action.myAction.label',
|
|
250
|
+
showOnNodeTypes: ['jnt:page'], // visibility filter
|
|
251
|
+
component: MyAction,
|
|
252
|
+
});
|
|
253
|
+
};
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Common targets:
|
|
257
|
+
- `contentActions:N` — jcontent content toolbar
|
|
258
|
+
- `headerPrimaryActions:N` — jcontent header
|
|
259
|
+
- `publishMenu:N` — publish menu
|
|
260
|
+
- `contextualMenu:N` — right-click menu
|
|
261
|
+
|
|
262
|
+
### Action component pattern
|
|
263
|
+
|
|
264
|
+
```jsx
|
|
265
|
+
// src/javascript/MyAction/MyAction.jsx
|
|
266
|
+
import React from 'react';
|
|
267
|
+
import { Language } from '@jahia/moonstone';
|
|
268
|
+
import { useNodeChecks } from '@jahia/data-helper';
|
|
269
|
+
|
|
270
|
+
export const MyAction = ({ path, render: Render, ...otherProps }) => {
|
|
271
|
+
const { checksResult } = useNodeChecks({ path, Language }, {
|
|
272
|
+
showOnNodeTypes: ['jnt:page'],
|
|
273
|
+
hideOnNodeTypes: ['jmix:someExcludedMixin'],
|
|
274
|
+
hideForPaths: ['^/sites/((?!/).)+/SomeFolder/?$'], // regex supported
|
|
275
|
+
requiredPermission: ['myPermission'], // always an array
|
|
276
|
+
requireModuleInstalledOnSite: ['my-module'],
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
if (Render && checksResult) {
|
|
280
|
+
return <Render {...otherProps} onClick={handleClick} />;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return null;
|
|
284
|
+
};
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
`useNodeChecks` returns `checksResult: true` only when all declared conditions pass. When `false`, the action is hidden from the UI.
|
|
288
|
+
|
|
289
|
+
> ⚠️ **Always include `requireModuleInstalledOnSite`** — without it, the action appears on every Jahia site regardless of whether the module is installed there. This is the primary guard that scopes a UI extension to sites where it is relevant.
|
|
290
|
+
|
|
291
|
+
### `useNodeChecks` — full options
|
|
292
|
+
|
|
293
|
+
All options are optional. An action is visible only when all provided conditions pass.
|
|
294
|
+
|
|
295
|
+
```jsx
|
|
296
|
+
const { checksResult } = useNodeChecks({ path, Language }, {
|
|
297
|
+
showOnNodeTypes: ['jnt:page', 'jnt:file'],
|
|
298
|
+
hideOnNodeTypes: ['jmix:externalLink'],
|
|
299
|
+
requiredPermission: ['jcr:write'], // always use arrays
|
|
300
|
+
requiredSitePermission: 'adminTemplates',
|
|
301
|
+
requireModuleInstalledOnSite: ['my-module'], // always include — scopes to active sites
|
|
302
|
+
showForPaths: ['/sites/mySite/home'],
|
|
303
|
+
hideForPaths: ['^/sites/((?!/).)+/Drafts/?$'], // regex supported
|
|
304
|
+
hideOnExternal: true,
|
|
305
|
+
});
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Dialog pattern
|
|
311
|
+
|
|
312
|
+
When an action opens a dialog, use a portal manager — the dialog must be rendered outside the jcontent component tree to avoid focus-trap and z-index issues.
|
|
313
|
+
|
|
314
|
+
```javascript
|
|
315
|
+
// dialogManager.js
|
|
316
|
+
import React from 'react';
|
|
317
|
+
import ReactDOM from 'react-dom/client';
|
|
318
|
+
import { ApolloProvider } from '@apollo/client';
|
|
319
|
+
import { I18nextProvider } from 'react-i18next';
|
|
320
|
+
import i18next from 'i18next';
|
|
321
|
+
import { MyDialog } from './MyDialog';
|
|
322
|
+
|
|
323
|
+
class DialogManager {
|
|
324
|
+
_init() {
|
|
325
|
+
if (!this.root) {
|
|
326
|
+
const container = document.createElement('div');
|
|
327
|
+
container.id = 'my-module-dialog-root';
|
|
328
|
+
document.body.appendChild(container);
|
|
329
|
+
this.root = ReactDOM.createRoot(container);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
open({ path, language, apolloClient }) {
|
|
334
|
+
this._init();
|
|
335
|
+
this.root.render(
|
|
336
|
+
<ApolloProvider client={apolloClient}>
|
|
337
|
+
<I18nextProvider i18n={i18next}>
|
|
338
|
+
<MyDialog path={path} language={language} onClose={() => this.close()} />
|
|
339
|
+
</I18nextProvider>
|
|
340
|
+
</ApolloProvider>
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
close() {
|
|
345
|
+
this.root?.render(null);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export default new DialogManager();
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
> ⚠️ **Always use `<Dialog disableEnforceFocus>`** when rendering in a portal. Without it, MUI's FocusTrap fights with jcontent's own focus management and causes an infinite loop.
|
|
353
|
+
|
|
354
|
+
```jsx
|
|
355
|
+
// MyDialog.jsx
|
|
356
|
+
import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@mui/material';
|
|
357
|
+
|
|
358
|
+
export const MyDialog = ({ path, language, onClose }) => (
|
|
359
|
+
<Dialog open fullWidth maxWidth="sm" disableEnforceFocus onClose={onClose}>
|
|
360
|
+
<DialogTitle>...</DialogTitle>
|
|
361
|
+
<DialogContent>...</DialogContent>
|
|
362
|
+
<DialogActions>
|
|
363
|
+
<Button onClick={onClose}>Cancel</Button>
|
|
364
|
+
<Button variant="contained" onClick={handleAction}>Confirm</Button>
|
|
365
|
+
</DialogActions>
|
|
366
|
+
</Dialog>
|
|
367
|
+
);
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Runtime APIs (window.jahia.*)
|
|
373
|
+
|
|
374
|
+
These are injected by jcontent at runtime. Always check for existence before calling.
|
|
375
|
+
|
|
376
|
+
```javascript
|
|
377
|
+
// Toast notification
|
|
378
|
+
if (window.jahia?.toastDispatcher) {
|
|
379
|
+
window.jahia.toastDispatcher.add({
|
|
380
|
+
message: t('myMessage'),
|
|
381
|
+
variant: 'success' // 'success' | 'error' | 'warning' | 'info'
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// JCR node/folder picker
|
|
386
|
+
if (window.CE_API?.openPicker) {
|
|
387
|
+
window.CE_API.openPicker({
|
|
388
|
+
type: 'folder', // 'folder' | 'image' | 'file' | 'page' | 'content'
|
|
389
|
+
isMultiple: false,
|
|
390
|
+
site: window.contextJsParameters?.siteKey,
|
|
391
|
+
lang: window.contextJsParameters?.uilang,
|
|
392
|
+
initialSelectedItem: [],
|
|
393
|
+
setValue: ([selected]) => {
|
|
394
|
+
if (selected?.path) setPath(selected.path);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Runtime context
|
|
400
|
+
const { siteKey, uilang, currentUser } = window.contextJsParameters ?? {};
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## i18n conventions
|
|
406
|
+
|
|
407
|
+
Locale files live at `src/main/resources/javascript/locales/<lang>.json`. The top-level key is the module namespace. Always load the namespace before registering UI:
|
|
408
|
+
|
|
409
|
+
```json
|
|
410
|
+
{
|
|
411
|
+
"my-module": { "label": "My Module" },
|
|
412
|
+
"action": { "myAction": { "label": "Do Something" } },
|
|
413
|
+
"dialog": {
|
|
414
|
+
"title": "...",
|
|
415
|
+
"button": { "cancel": "Cancel", "confirm": "Confirm" }
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Use `useTranslation('my-module')` in components.
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Java Action pattern
|
|
425
|
+
|
|
426
|
+
```java
|
|
427
|
+
@Component(service = Action.class)
|
|
428
|
+
public class MyAction extends Action {
|
|
429
|
+
|
|
430
|
+
@Override
|
|
431
|
+
public String getName() {
|
|
432
|
+
return "myActionName"; // matches CSRF whitelist key
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
@Override
|
|
436
|
+
public ActionResult doExecute(
|
|
437
|
+
HttpServletRequest request,
|
|
438
|
+
RenderContext renderContext,
|
|
439
|
+
Resource resource,
|
|
440
|
+
JCRSessionWrapper session,
|
|
441
|
+
Map<String, List<String>> parameters,
|
|
442
|
+
URLResolver urlResolver) throws Exception {
|
|
443
|
+
|
|
444
|
+
String param = readParameter(parameters, "paramName", null);
|
|
445
|
+
|
|
446
|
+
// Return binary response
|
|
447
|
+
HttpServletResponse response = renderContext.getResponse();
|
|
448
|
+
response.setStatus(HttpServletResponse.SC_OK);
|
|
449
|
+
response.setContentType("application/pdf");
|
|
450
|
+
response.getOutputStream().write(bytes);
|
|
451
|
+
return ActionResult.OK;
|
|
452
|
+
|
|
453
|
+
// OR return JSON:
|
|
454
|
+
// JSONObject result = new JSONObject();
|
|
455
|
+
// result.put("key", "value");
|
|
456
|
+
// return new ActionResult(HttpServletResponse.SC_OK, null, result);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Action endpoint URL: `POST /cms/render/default/{language}{nodePath}.{actionName}.do`
|
|
462
|
+
|
|
463
|
+
### CSRF guard configuration
|
|
464
|
+
|
|
465
|
+
```properties
|
|
466
|
+
# src/main/resources/META-INF/configurations/org.jahia.modules.jahiacsrfguard-<moduleName>.cfg
|
|
467
|
+
whitelist = *.myActionName.do
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## RenderContext setup
|
|
473
|
+
|
|
474
|
+
When an Action needs to render a page to HTML, the `RenderContext` fields must be set in this exact order:
|
|
475
|
+
|
|
476
|
+
```java
|
|
477
|
+
Resource htmlResource = new Resource(node, "html", null, Resource.CONFIGURATION_PAGE);
|
|
478
|
+
RenderContext ctx = new RenderContext(request, response, renderContext.getUser());
|
|
479
|
+
ctx.setSite(renderContext.getSite()); // 1. site first
|
|
480
|
+
ctx.setWorkspace("live"); // 2. then workspace
|
|
481
|
+
ctx.setServletPath("/live"); // 3. then servlet path (must match workspace)
|
|
482
|
+
ctx.setMainResource(htmlResource); // 4. main resource last
|
|
483
|
+
String html = renderService.render(htmlResource, ctx);
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
> ⚠️ Order matters. Setting workspace before site or mainResource before workspace causes silent rendering errors.
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
## Embedding third-party libraries in the bundle
|
|
491
|
+
|
|
492
|
+
When a library is not provided by Jahia at runtime:
|
|
493
|
+
|
|
494
|
+
```xml
|
|
495
|
+
<dependency>
|
|
496
|
+
<groupId>org.jsoup</groupId>
|
|
497
|
+
<artifactId>jsoup</artifactId>
|
|
498
|
+
<version>1.17.2</version>
|
|
499
|
+
</dependency>
|
|
500
|
+
|
|
501
|
+
<plugin>
|
|
502
|
+
<groupId>org.apache.felix</groupId>
|
|
503
|
+
<artifactId>maven-bundle-plugin</artifactId>
|
|
504
|
+
<configuration>
|
|
505
|
+
<instructions>
|
|
506
|
+
<Embed-Dependency>jsoup;inline=false</Embed-Dependency>
|
|
507
|
+
<DynamicImport-Package>*</DynamicImport-Package>
|
|
508
|
+
</instructions>
|
|
509
|
+
</configuration>
|
|
510
|
+
</plugin>
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
For libraries using the Java `ServiceLoader` SPI, instantiate their classes directly using the **bundle's own classloader** — not via global registries that become stale after bundle refresh.
|
|
514
|
+
|
|
515
|
+
Switch the Thread Context ClassLoader (TCCL) for any library that uses `Thread.currentThread().getContextClassLoader()` internally:
|
|
516
|
+
|
|
517
|
+
```java
|
|
518
|
+
ClassLoader original = Thread.currentThread().getContextClassLoader();
|
|
519
|
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
|
|
520
|
+
try {
|
|
521
|
+
// ... call to embedded library
|
|
522
|
+
} finally {
|
|
523
|
+
Thread.currentThread().setContextClassLoader(original);
|
|
524
|
+
}
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
## Validation checklist
|
|
530
|
+
|
|
531
|
+
### JavaScript side
|
|
532
|
+
- [ ] `package.json` lists React 18, not 19
|
|
533
|
+
- [ ] `@jahia/webpack-config` used for Module Federation
|
|
534
|
+
- [ ] Entry point registers at `jahiaApp-init:N` via `registry.add('callback', ...)`
|
|
535
|
+
- [ ] i18n namespace loaded (awaited) before registering UI
|
|
536
|
+
- [ ] Action component uses `useNodeChecks` for visibility
|
|
537
|
+
- [ ] `requireModuleInstalledOnSite` included in all `useNodeChecks` calls
|
|
538
|
+
- [ ] Dialog rendered via portal manager (outside jcontent tree)
|
|
539
|
+
- [ ] `<Dialog disableEnforceFocus>` on all MUI dialogs in portals
|
|
540
|
+
- [ ] `window.jahia.*` APIs guarded with optional chaining (`?.`)
|
|
541
|
+
- [ ] Webpack output goes to `src/main/resources/javascript/apps/`
|
|
542
|
+
|
|
543
|
+
### Java side
|
|
544
|
+
- [ ] Action class: `@Component(service = Action.class)`, `getName()` matches CSRF whitelist key
|
|
545
|
+
- [ ] CSRF Guard config file present and correctly named
|
|
546
|
+
- [ ] RenderContext set in order: site → workspace → servletPath → mainResource
|
|
547
|
+
- [ ] All JCR access runs as the calling user (no system session escalation)
|
|
548
|
+
- [ ] OSGi config `.cfg` file present for every configurable service
|
|
549
|
+
- [ ] `Embed-Dependency` declared in BND config for every embedded lib
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## References
|
|
554
|
+
|
|
555
|
+
- jcontent UI extension API: https://academy.jahia.com/documentation/developer/jahia/8
|
|
556
|
+
- @jahia/ui-extender: https://github.com/Jahia/ui-extender
|
|
557
|
+
- @jahia/moonstone component library: https://moonstone.jahia.com
|
|
558
|
+
- @jahia/data-helper: https://github.com/Jahia/data-helper
|
|
559
|
+
- Module Federation docs: https://webpack.js.org/concepts/module-federation/
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
<!-- Generated by APM CLI from distributed .apm/ primitives -->
|
|
3
|
+
<!-- Build ID: c847df74747b -->
|
|
4
|
+
<!-- APM Version: 0.14.1 -->
|
|
5
|
+
<!-- Source: local -->
|
|
6
|
+
|
|
7
|
+
## Global Instructions
|
|
8
|
+
|
|
9
|
+
<!-- Source: local .apm/instructions/jahia.instructions.md -->
|
|
10
|
+
# Jahia JavaScript Module Development
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
You are helping develop a **Jahia JavaScript Module** — a React-based template set for Jahia 8+. The module renders content from Jahia's JCR (Java Content Repository) using server-side React components (`.server.tsx`) and optional client-side islands (`.client.tsx`). Content is modelled in CND files, managed via Page Builder or jContent, and queried with JCR-SQL2 or GraphQL.
|
|
15
|
+
|
|
16
|
+
## Agent Principles
|
|
17
|
+
|
|
18
|
+
1. **Always invoke a skill before any Jahia task** — skills are the canonical source of patterns, gotchas, and API syntax. Never operate from memory alone.
|
|
19
|
+
2. **Never use `yarn dev` from an agent** — it is an interactive file watcher for human developers only. Always deploy with `yarn build && yarn jahia-deploy` (one-shot, non-interactive).
|
|
20
|
+
3. **Never hardcode URLs** — all navigable links must come from contributed content (JCR nodes, `j:linkType`, `buildNodeUrl`). This is a CMS: content owns the URLs.
|
|
21
|
+
4. **Never use `j:linkType: "external"` for internal pages** — use `"internal"` + `j:linknode`. External URLs break on environment changes, language switches, and vanity URL rewrites.
|
|
22
|
+
5. **Always verify before creating** — check that content types are deployed, site keys are correct, and area structures exist before attempting GraphQL mutations.
|
|
23
|
+
6. **All props are optional at runtime** — even mandatory CND fields. Always guard against `undefined` in views.
|
|
24
|
+
7. **Always include `-H "Origin: http://localhost:8080"` in every GraphQL curl** — omitting it returns `Permission denied` even with correct credentials.
|
|
25
|
+
8. **Accessibility is mandatory** — every component must pass WCAG 2.1 AA. After building any component or completing a task, invoke `/jahia-dev-accessibility` to run an axe-core audit and fix all `critical` and `serious` violations before declaring work done.
|
|
26
|
+
|
|
27
|
+
## Skill Map
|
|
28
|
+
|
|
29
|
+
Start with `/jahia` if unsure where to begin.
|
|
30
|
+
|
|
31
|
+
### Development
|
|
32
|
+
|
|
33
|
+
| Skill | Purpose |
|
|
34
|
+
|-------|---------|
|
|
35
|
+
| `/jahia-dev` | Entry point — detect project state, guide to next step |
|
|
36
|
+
| `/jahia-dev-create-template-set` | Scaffold a new Jahia JS module |
|
|
37
|
+
| `/jahia-dev-start-local` | Start Jahia locally (Docker or bare metal) |
|
|
38
|
+
| `/jahia-dev-build-component` | Build a complete component (CND + view) — start here |
|
|
39
|
+
| `/jahia-dev-define-content-type` | Define a CND content type + types.ts |
|
|
40
|
+
| `/jahia-dev-create-view` | Implement a React view (.server.tsx + CSS Module) |
|
|
41
|
+
| `/jahia-dev-create-page-template` | Create a page template with Areas |
|
|
42
|
+
| `/jahia-dev-query-content` | Write JCR-SQL2 queries and useJCRQuery |
|
|
43
|
+
| `/jahia-dev-review` | Code review: 8 critical checks, 9 warnings, 11 suggestions |
|
|
44
|
+
| `/jahia-dev-accessibility` | Audit live pages with axe-core, fix WCAG 2.1 AA violations |
|
|
45
|
+
| `/jahia-dev-screenshot` | Screenshot reference + local render for visual comparison |
|
|
46
|
+
| `/jahia-dev-debug` | Debug build/deploy/runtime errors end-to-end |
|
|
47
|
+
|
|
48
|
+
### Content Management
|
|
49
|
+
|
|
50
|
+
| Skill | Purpose |
|
|
51
|
+
|-------|---------|
|
|
52
|
+
| `/jahia-content` | Entry point — detect site state, route to content operations |
|
|
53
|
+
| `/jahia-content-explore-structure` | Map content types, properties, enums on an unknown site |
|
|
54
|
+
| `/jahia-content-query-content` | List and inspect content via GraphQL |
|
|
55
|
+
| `/jahia-content-create-content` | Create nodes, folders, articles, bulk-populate |
|
|
56
|
+
| `/jahia-content-move-content` | Restructure the content tree |
|
|
57
|
+
| `/jahia-content-translate-content` | Translate existing nodes to a new language and publish |
|
|
58
|
+
|
|
59
|
+
## Canonical References
|
|
60
|
+
|
|
61
|
+
Always fetch these when uncertain about version-sensitive topics:
|
|
62
|
+
|
|
63
|
+
| Topic | URL |
|
|
64
|
+
|-------|-----|
|
|
65
|
+
| Getting started / dev environment | https://academy.jahia.com/tutorials-get-started/front-end-developer/setting-up-your-dev-environment |
|
|
66
|
+
| Hero section tutorial | https://academy.jahia.com/tutorials-get-started/front-end-developer/making-a-hero-section |
|
|
67
|
+
| Blog / content listing | https://academy.jahia.com/tutorials-get-started/front-end-developer/making-a-blog |
|
|
68
|
+
| Page templates | https://academy.jahia.com/tutorials-get-started/front-end-developer/the-about-us-page |
|
|
69
|
+
| i18n (CND attribute, useTranslation, language switcher) | https://academy.jahia.com/documentation/jahia-cms/jahia-8-2/developer/javascript-module-development/preparing-for-internationalization-i18n |
|
|
70
|
+
| GraphQL API | https://academy.jahia.com/documentation/developer/jahia/8/api-documentation/graphql-api |
|
|
71
|
+
| Native Jahia mixins & node types | https://github.com/Jahia/jahia/tree/master/war/src/main/webapp/WEB-INF/etc/repository/nodetypes |
|
|
72
|
+
| JavaScript modules monorepo | https://github.com/Jahia/javascript-modules |
|
|
73
|
+
| Developer training | https://github.com/Jahia/developer-training/blob/main/js-training/slides.md |
|
|
74
|
+
| Integration best practices | https://github.com/Jahia/gautier-braindump/blob/main/articles/integration-best-practices/README.md |
|
|
75
|
+
|
|
76
|
+
## Local Development URLs
|
|
77
|
+
|
|
78
|
+
When Jahia is running at `http://localhost:8080` (default credentials: `root` / `root1234`):
|
|
79
|
+
|
|
80
|
+
- **Login**: http://localhost:8080/cms/login
|
|
81
|
+
- **Page Builder**: http://localhost:8080/jahia/page-builder
|
|
82
|
+
- **jContent**: http://localhost:8080/jahia/jcontent
|
|
83
|
+
- **GraphQL playground**: http://localhost:8080/modules/graphql
|
|
84
|
+
- **JCR browser**: http://localhost:8080/modules/tools/jcrBrowser.jsp
|
|
85
|
+
- **Definitions browser**: http://localhost:8080/modules/tools/definitionsBrowser.jsp
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
*This file was generated by APM CLI. Do not edit manually.*
|
|
89
|
+
*To regenerate: `apm compile`*
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jahia/agentic",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"files": [
|
|
5
|
+
"dist"
|
|
6
|
+
],
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": "./dist/index.js",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"benchmark": "node src/benchmark/index.ts",
|
|
11
|
+
"build": "node src/build/index.ts",
|
|
12
|
+
"build:website": "node src/benchmark/build-website.ts",
|
|
13
|
+
"format": "oxfmt",
|
|
14
|
+
"lint": "tsc --noEmit && oxlint"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@axe-core/playwright": "^4.11.3",
|
|
18
|
+
"@chachalog/types": "^0.5.1",
|
|
19
|
+
"@clack/prompts": "^1.4.0",
|
|
20
|
+
"@types/node": "^25.9.1",
|
|
21
|
+
"lighthouse": "^13.3.0",
|
|
22
|
+
"oxfmt": "^0.51.0",
|
|
23
|
+
"oxlint": "^1.66.0",
|
|
24
|
+
"playwright": "^1.60.0",
|
|
25
|
+
"rolldown": "^1.0.1",
|
|
26
|
+
"typescript": "^6.0.3"
|
|
27
|
+
}
|
|
28
|
+
}
|