@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,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia
|
|
3
|
+
description: Top-level entry point for ALL Jahia tasks. Detects whether the request is about building a module (dev) or managing content (CMS), and delegates to the right skill or combination. Start here if unsure which Jahia skill to use.
|
|
4
|
+
allowed-tools: Bash, Read
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Jahia — Universal Entry Point
|
|
8
|
+
|
|
9
|
+
You are the top-level GPS for all Jahia work. Your job is to understand what the user wants to accomplish, then delegate to the right skill(s) — `/jahia-dev`, `/jahia-content`, or both in sequence.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Step 1 — Classify the request
|
|
14
|
+
|
|
15
|
+
Read the user's request and classify it using the table below. A task can span multiple categories.
|
|
16
|
+
|
|
17
|
+
| Category | Keywords / intent | Skill |
|
|
18
|
+
|----------|-------------------|-------|
|
|
19
|
+
| **Module development** | create module, scaffold, content type, CND, view, React, TSX, page template, CSS, build, deploy, compile | `/jahia-dev` |
|
|
20
|
+
| **Personalization / analytics** | jExperience, jCustomer, window.wem, visitor events, Kibana dashboard, personalization, DXP | `/jahia-dev-jexperience` |
|
|
21
|
+
| **Content management** | create content, add article, populate, move, reorganize, publish, query what's in the CMS | `/jahia-content` |
|
|
22
|
+
| **OSGi / back-office** | Java bundle, OSGi service, jcontent action, admin panel, toolbar button, Webpack, Module Federation | `/jahia-dev-osgi-module` or `/jahia-dev-ui-extension` |
|
|
23
|
+
| **E2E testing** | Cypress, test spec, edit mode, component interaction, publish workflow | `/jahia-dev-cypress` |
|
|
24
|
+
| **Java module reference** | OSGi DS, CND definitions, JSP rendering, Drools rules, JCR SQL2, Content Editor JSON, component registry | `/jahia-dev-java` |
|
|
25
|
+
| **API reference** | GraphQL schema, JCR Java/REST API, OAuth/SAML auth, personal tokens, HTML filtering, CSP, security scopes | `/jahia-dev-apis` |
|
|
26
|
+
| **Operations / DevOps** | Docker Compose, Kubernetes, health endpoints, logs, Karaf, provisioning YAML scripts | `/jahia-dev-ops` |
|
|
27
|
+
| **Configuration reference** | jahia.properties keys, cluster setup, operating mode, auth settings, JCR/search tuning | `/jahia-dev-properties` |
|
|
28
|
+
| **Both** | build a component AND fill it with content, design a section AND add pages to it, set up a site end-to-end | Run `/jahia-dev` first, then `/jahia-content` |
|
|
29
|
+
|
|
30
|
+
If the request is ambiguous, ask one clarifying question:
|
|
31
|
+
> "Are you building or changing **code** (module, views, templates) — or managing **content** (articles, pages, folders) inside a running Jahia site?"
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Step 2 — Run the right GPS(es)
|
|
36
|
+
|
|
37
|
+
### Dev only → invoke `/jahia-dev`
|
|
38
|
+
`/jahia-dev` will detect the project state and route to the correct dev sub-skill.
|
|
39
|
+
|
|
40
|
+
### CMS only → invoke `/jahia-content`
|
|
41
|
+
`/jahia-content` will check the live site and route to the right content management sub-skill.
|
|
42
|
+
|
|
43
|
+
### Both → run in order
|
|
44
|
+
|
|
45
|
+
When a task requires code changes **and** content changes, always execute in this order:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
1. /jahia-dev ← build/update the module code
|
|
49
|
+
2. yarn build && yarn jahia-deploy ← push the updated module to Jahia (never use yarn dev)
|
|
50
|
+
3. /jahia-content ← populate or reorganize content
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Rationale: content types must exist in the CMS before you can create nodes of those types.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Step 3 — Common compound workflows
|
|
58
|
+
|
|
59
|
+
Use these recipes as starting points when the task maps to a known pattern.
|
|
60
|
+
|
|
61
|
+
### "Build a new section on the site"
|
|
62
|
+
```
|
|
63
|
+
1. /jahia-dev-build-component → define the content type + create the view
|
|
64
|
+
2. /jahia-dev-create-page-template → (if a new page layout is needed)
|
|
65
|
+
3. /jahia-content-create-content → populate the section with real or dummy content
|
|
66
|
+
4. /jahia-content-move-content → (if existing content needs to be reorganized)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### "Add an article to the site"
|
|
70
|
+
```
|
|
71
|
+
1. Check the CND — does the article content type exist?
|
|
72
|
+
→ Yes: jump to step 2
|
|
73
|
+
→ No: /jahia-dev-define-content-type + /jahia-dev-create-view first
|
|
74
|
+
2. /jahia-content-create-content → create the article node + set properties + publish
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### "Redesign the layout of a page"
|
|
78
|
+
```
|
|
79
|
+
1. /jahia-dev-screenshot → capture current state for before/after comparison
|
|
80
|
+
2. /jahia-dev-create-view → update the view / CSS
|
|
81
|
+
3. yarn build && yarn jahia-deploy → push changes (never use yarn dev)
|
|
82
|
+
4. /jahia-dev-screenshot → validate the result
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### "Set up a new site from scratch"
|
|
86
|
+
```
|
|
87
|
+
1. /jahia-dev-create-template-set → scaffold the module
|
|
88
|
+
2. /jahia-dev-start-local → start Jahia locally
|
|
89
|
+
3. /jahia-dev-build-component → build content types + views (repeat per component)
|
|
90
|
+
4. /jahia-dev-create-page-template → create page templates
|
|
91
|
+
5. /jahia-content-create-content → populate with articles, pages, folders
|
|
92
|
+
6. /jahia-dev-review → catch issues before shipping
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Step 4 — Print the full skill map
|
|
98
|
+
|
|
99
|
+
Always print this at the end so the user can jump anywhere:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
## All Jahia Skills
|
|
103
|
+
|
|
104
|
+
### 🏗 Development (/jahia-dev and sub-skills)
|
|
105
|
+
/jahia-dev Detect project state, guide to next step ← start here
|
|
106
|
+
/jahia-dev-create-template-set Scaffold a new JS/React Jahia module
|
|
107
|
+
/jahia-dev-start-local Start Jahia locally (Docker or bare metal)
|
|
108
|
+
/jahia-dev-build-component Build a complete component (CND + view) ← shortcut
|
|
109
|
+
/jahia-dev-define-content-type Define a CND content type + types.ts
|
|
110
|
+
/jahia-dev-create-view Implement a React view (.server.tsx + CSS Module)
|
|
111
|
+
/jahia-dev-create-page-template Create a page template with Areas
|
|
112
|
+
/jahia-dev-query-content Write JCR-SQL2 / useJCRQuery for content listings
|
|
113
|
+
/jahia-dev-review Code review: 8 critical checks, 9 warnings, 10 suggestions
|
|
114
|
+
/jahia-dev-screenshot Screenshot reference + local render for visual comparison
|
|
115
|
+
/jahia-dev-debug Debug build/deploy/runtime errors end-to-end
|
|
116
|
+
/jahia-dev-cypress Write Cypress E2E tests for Jahia components
|
|
117
|
+
/jahia-dev-import-from Implement a component inspired by one on an external URL
|
|
118
|
+
/jahia-dev-jexperience jExperience + jCustomer: push events, Kibana dashboards, local DXP stack
|
|
119
|
+
|
|
120
|
+
### ⚙️ OSGi / Back-office extensions
|
|
121
|
+
/jahia-dev-osgi-module Build or configure an OSGi Java bundle module
|
|
122
|
+
/jahia-dev-ui-extension Extend jcontent back-office with React 18/Webpack actions or panels
|
|
123
|
+
|
|
124
|
+
### 📝 Content Management (/jahia-content and sub-skills)
|
|
125
|
+
/jahia-content Detect site state, route to content operations ← start here
|
|
126
|
+
/jahia-content-explore-structure Map content types, properties, enums & mixins on an unknown site
|
|
127
|
+
/jahia-content-query-content Query and audit content via GraphQL
|
|
128
|
+
/jahia-content-create-content Create nodes, folders, articles, bulk-populate
|
|
129
|
+
/jahia-content-move-content Restructure the content tree: move, rename, reorder
|
|
130
|
+
### 📚 Knowledge Reference
|
|
131
|
+
/jahia-dev-java OSGi DS, CND definitions, JSP rendering, Drools rules, Content Editor/jContent UI
|
|
132
|
+
/jahia-dev-apis GraphQL, JCR Java/REST API, OAuth/SAML, personal tokens, HTML filtering, CSP
|
|
133
|
+
/jahia-dev-ops Docker Compose, Kubernetes, health monitoring, Karaf, provisioning YAML API
|
|
134
|
+
/jahia-dev-properties jahia.properties and OSGi .cfg configuration keys reference
|
|
135
|
+
```
|
|
136
|
+
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-content
|
|
3
|
+
description: Entry point for managing content on a running Jahia website via the GraphQL API. Detects the current site state and routes to the right sub-skill. Use for any task involving creating, querying, moving, updating, or publishing JCR content.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jahia Content — Content Management GPS
|
|
7
|
+
|
|
8
|
+
You are the entry point for managing content on a live Jahia instance. Your job is to understand what the user needs, assess the current site state, and route to the right sub-skill.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Step 1 — Verify Jahia is reachable
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/cms/login
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- `200` → Jahia is running ✅
|
|
19
|
+
- Anything else → Jahia is not running. Tell the user: **"Please start Jahia first (use `/jahia-dev-start-local` if needed)."**
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 2 — Detect site state
|
|
24
|
+
|
|
25
|
+
Run both checks in parallel to understand what's currently in the CMS:
|
|
26
|
+
|
|
27
|
+
### A. List available sites
|
|
28
|
+
```bash
|
|
29
|
+
curl -s -u root:root1234 \
|
|
30
|
+
-H "Content-Type: application/json" \
|
|
31
|
+
-H "Origin: http://localhost:8080" \
|
|
32
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
33
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites\") { children { nodes { name } } } } }"}'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### B. List top-level content folders
|
|
37
|
+
```bash
|
|
38
|
+
curl -s -u root:root1234 \
|
|
39
|
+
-H "Content-Type: application/json" \
|
|
40
|
+
-H "Origin: http://localhost:8080" \
|
|
41
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
42
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites/mySite/contents\") { children { nodes { name primaryNodeType { name } } } } } }"}'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> Replace `mySite` with the actual site key if different.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Step 3 — Report site state
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
🌐 Jahia: ✅ running at http://localhost:8080
|
|
53
|
+
📁 Sites: <list site keys>
|
|
54
|
+
📂 Content root: <list folder names under /contents>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Step 4 — Route to the right sub-skill
|
|
60
|
+
|
|
61
|
+
Use the task description to pick the right skill(s):
|
|
62
|
+
|
|
63
|
+
| What the user wants to do | Skill |
|
|
64
|
+
|---------------------------|-------|
|
|
65
|
+
| Explore an unknown site's content types, property names, enum values, mixins | **`/jahia-content-explore-structure`** |
|
|
66
|
+
| Find out what content exists, audit the tree, run a search | **`/jahia-content-query-content`** |
|
|
67
|
+
| Create pages, articles, tutorials, folders, populate a site | **`/jahia-content-create-content`** |
|
|
68
|
+
| Move, rename, restructure content into sub-folders | **`/jahia-content-move-content`** |
|
|
69
|
+
| Translate existing content to another language | **`/jahia-content-translate-content`** |
|
|
70
|
+
| Publish content to the live site | Use `publish` mutation (see below) |
|
|
71
|
+
| Delete content | Use `deleteNode` mutation (see below) |
|
|
72
|
+
| Do several of the above in sequence | Run the skills in order — start with **explore-structure** if site is unfamiliar, then create or move |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Step 5 — Direct patterns for one-off operations
|
|
77
|
+
|
|
78
|
+
Use these when the task is simple enough to not need a full sub-skill.
|
|
79
|
+
|
|
80
|
+
### Publish a node (and all its children)
|
|
81
|
+
```bash
|
|
82
|
+
curl -s -u root:root1234 \
|
|
83
|
+
-H "Content-Type: application/json" \
|
|
84
|
+
-H "Origin: http://localhost:8080" \
|
|
85
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
86
|
+
-d '{"query":"mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles\") { publish(languages: [\"en\"]) } } }"}'
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Publish all content at once
|
|
90
|
+
```bash
|
|
91
|
+
curl -s -u root:root1234 \
|
|
92
|
+
-H "Content-Type: application/json" \
|
|
93
|
+
-H "Origin: http://localhost:8080" \
|
|
94
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
95
|
+
-d '{"query":"mutation { jcr { mutateNodesByQuery(query: \"SELECT * FROM [jnt:content] WHERE ISDESCENDANTNODE(\u0027/sites/mySite/contents\u0027)\", queryLanguage: SQL2) { publish(languages: [\"en\"]) } } }"}'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Delete a node
|
|
99
|
+
```bash
|
|
100
|
+
curl -s -u root:root1234 \
|
|
101
|
+
-H "Content-Type: application/json" \
|
|
102
|
+
-H "Origin: http://localhost:8080" \
|
|
103
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
104
|
+
-d '{"query":"mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles/old-article\") { delete } } }"}'
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Update a property on an existing node
|
|
108
|
+
```bash
|
|
109
|
+
curl -s -u root:root1234 \
|
|
110
|
+
-H "Content-Type: application/json" \
|
|
111
|
+
-H "Origin: http://localhost:8080" \
|
|
112
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
113
|
+
-d '{"query":"mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles/my-article\") { mutateProperty(name: \"jcr:title\") { setValue(language: \"en\", value: \"Updated Title\") } } } }"}'
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Step 6 — Print the full CMS skill map
|
|
119
|
+
|
|
120
|
+
Always print this at the end so the user can navigate anywhere:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
## Jahia Content Skills
|
|
124
|
+
|
|
125
|
+
/jahia-content-explore-structure Map content types, properties, enums, mixins on an unknown site ← start here
|
|
126
|
+
/jahia-content-query-content List, inspect, and search content via GraphQL
|
|
127
|
+
/jahia-content-create-content Create nodes, folders, articles, and bulk-populate a site
|
|
128
|
+
/jahia-content-move-content Restructure the content tree: move, rename, reorder nodes
|
|
129
|
+
/jahia-content-translate-content Translate existing nodes to a new language and publish
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Critical rules (always enforce)
|
|
135
|
+
|
|
136
|
+
- Always include `-H "Origin: http://localhost:8080"` in every curl — omitting it causes `Permission denied`
|
|
137
|
+
- Always use `language: "en"` (or the site's language) for `i18n` properties (`jcr:title` on folders with `mix:title`, richtext body, etc.)
|
|
138
|
+
- Always publish after creating or moving content — JCR writes to the **default workspace** only; live visitors see the **live workspace**
|
|
139
|
+
- Mandatory fields (e.g. `body`) must be set **before** other properties on the same node in a new locale
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-content-create-content
|
|
3
|
+
description: Creates and publishes JCR content nodes in a running Jahia instance via the GraphQL API. Use when asked to populate a site with content, create articles, tutorials, or any JCR node programmatically.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: jahia-content-create-content
|
|
7
|
+
|
|
8
|
+
Creates content nodes in a running Jahia instance using the GraphQL JCR mutation API, then publishes them.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Jahia running at `http://localhost:8080`
|
|
15
|
+
- Credentials: `root` / `root1234` (default)
|
|
16
|
+
- GraphQL endpoint: `http://localhost:8080/modules/graphql`
|
|
17
|
+
|
|
18
|
+
**Auth pattern — always use both flags:**
|
|
19
|
+
```bash
|
|
20
|
+
curl -u root:root1234 \
|
|
21
|
+
-H "Content-Type: application/json" \
|
|
22
|
+
-H "Origin: http://localhost:8080" \
|
|
23
|
+
...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
> ⚠️ The `Origin: http://localhost:8080` header is **required**. Requests without it return `Permission denied` even with correct credentials.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## ⚡ Minimum-call workflow
|
|
31
|
+
|
|
32
|
+
Use these patterns to minimise the number of API round-trips:
|
|
33
|
+
|
|
34
|
+
### 1. Batch site exploration — one call instead of four
|
|
35
|
+
|
|
36
|
+
Use GraphQL aliases to retrieve site metadata, page structure, files, and available content types in a **single request**:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
curl -s -u root:root1234 \
|
|
40
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
41
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
42
|
+
-d '{"query":"{ jcr { site: nodeByPath(path: \"/sites/SITE_KEY\") { properties(names: [\"j:templatesSet\",\"j:defaultLanguage\"]) { name value } } home: nodeByPath(path: \"/sites/SITE_KEY/home\") { children { nodes { name primaryNodeType { name } children { nodes { name primaryNodeType { name } } } } } } files: nodeByPath(path: \"/sites/SITE_KEY/files\") { children { nodes { name uuid } } } contentTypes: nodeTypes(filter: {siteKey: \"SITE_KEY\", includeMixins: false, includeAbstract: false}) { nodes { name systemId } } } }"}'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then fetch all needed type definitions in one more call using `nodeTypesByNames` (see `/jahia-content-explore-structure`).
|
|
46
|
+
|
|
47
|
+
### 2. Upload images in parallel
|
|
48
|
+
|
|
49
|
+
Run all uploads simultaneously using background processes:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
for f in /path/to/img1.jpg /path/to/img2.jpg /path/to/img3.jpg; do
|
|
53
|
+
name=$(basename "$f")
|
|
54
|
+
curl -s -u root:root1234 \
|
|
55
|
+
-H "Origin: http://localhost:8080" \
|
|
56
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
57
|
+
-F "operations={\"query\":\"mutation { jcr { addNode(name: \\\"${name}\\\", parentPathOrId: \\\"/sites/SITE_KEY/files\\\", primaryNodeType: \\\"jnt:file\\\", mixins: [\\\"jmix:image\\\"]) { addChild(name: \\\"jcr:content\\\", primaryNodeType: \\\"jnt:resource\\\") { content: mutateProperty(name: \\\"jcr:data\\\") { setValue(type: BINARY, value: \\\"fc\\\") } contentType: mutateProperty(name: \\\"jcr:mimeType\\\") { setValue(value: \\\"image/jpeg\\\") } } uuid } } }\"}" \
|
|
58
|
+
-F 'map={"fc":["variables.f"]}' \
|
|
59
|
+
-F "fc=@${f};type=image/jpeg" &
|
|
60
|
+
done
|
|
61
|
+
wait # all uploads complete in parallel
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> ⚠️ Always include `mixins: ["jmix:image"]` in the upload. Without it, the file node **cannot be used as a WEAKREFERENCE** in image properties.
|
|
65
|
+
|
|
66
|
+
To collect UUIDs after parallel uploads, query them in one batch:
|
|
67
|
+
```bash
|
|
68
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
69
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
70
|
+
-d '{"query":"{ jcr { nodesByQuery(query: \"SELECT * FROM [jnt:file] WHERE ISDESCENDANTNODE(\u0027/sites/SITE_KEY/files/FOLDER\u0027)\", queryLanguage: SQL2) { nodes { name uuid } } } }"}'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 3. Create an entire content tree in one mutation
|
|
74
|
+
|
|
75
|
+
Use nested `addChild` calls inside a single `addNode` mutation to build a complete page hierarchy without sequential round-trips:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
79
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
80
|
+
-d '{"query":"mutation { jcr { addNode(parentPathOrId: \"/sites/SITE_KEY/home\", name: \"my-page\", primaryNodeType: \"jnt:page\", properties: [{name: \"j:templateName\", value: \"TEMPLATE\"}, {name: \"jcr:title\", value: \"Page Title\", language: \"en\"}]) { uuid addChild(name: \"AREA_NAME\", primaryNodeType: \"AREA_TYPE\") { addChild(name: \"section-1\", primaryNodeType: \"NAMESPACE:section\", properties: [{name: \"jcr:title\", value: \"Section 1\", language: \"en\"}]) { uuid addChild(name: \"item-1\", primaryNodeType: \"NAMESPACE:item\", properties: [{name: \"jcr:title\", value: \"Item 1\", language: \"en\"}, {name: \"body\", value: \"<p>Content</p>\", language: \"en\"}]) { uuid } } } } } }"}'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
> This creates the full `page → area → section → item` hierarchy atomically.
|
|
84
|
+
|
|
85
|
+
### 4. Publish the entire page in one call
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
89
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
90
|
+
-d '{"query":"mutation { jcr { mutateNode(pathOrId: \"/sites/SITE_KEY/home/my-page\") { publish(languages: [\"en\"]) } } }"}'
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Uploading image files
|
|
96
|
+
|
|
97
|
+
Use the GraphQL API with a **multipart request** to upload files.
|
|
98
|
+
|
|
99
|
+
> ⚠️ Do **not** use `Content-Type: application/json` for uploads — use multipart form-data.
|
|
100
|
+
> Do **not** use `type: BINARY` inside the `properties: [...]` array of `addNode` or `addChild` — it won't work. Always use the separate `mutateProperty.setValue` step.
|
|
101
|
+
|
|
102
|
+
### Upload a single file
|
|
103
|
+
|
|
104
|
+
> ⚠️ Always include `mixins: ["jmix:image"]` when uploading images. Without this mixin, the file node **cannot be used as a WEAKREFERENCE** in image properties — you will get a constraint error.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
curl -s -u root:root1234 \
|
|
108
|
+
-H "Origin: http://localhost:8080" \
|
|
109
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
110
|
+
-F 'operations={"query":"mutation { jcr { addNode(name: \"image.jpg\", parentPathOrId: \"/sites/SITE_KEY/files\", primaryNodeType: \"jnt:file\", mixins: [\"jmix:image\"]) { addChild(name: \"jcr:content\", primaryNodeType: \"jnt:resource\") { content: mutateProperty(name: \"jcr:data\") { setValue(type: BINARY, value: \"fc\") } contentType: mutateProperty(name: \"jcr:mimeType\") { setValue(value: \"image/jpeg\") } } uuid } } }"}' \
|
|
111
|
+
-F 'map={"fc":["variables.f"]}' \
|
|
112
|
+
-F "fc=@/absolute/path/to/image.jpg;type=image/jpeg"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The response contains the UUID:
|
|
116
|
+
```json
|
|
117
|
+
{"data":{"jcr":{"addNode":{"addChild":{"content":{"setValue":true},"contentType":{"setValue":true}},"uuid":"xxxxxxxx-..."}}}}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Use a file UUID as an image property
|
|
121
|
+
|
|
122
|
+
Image properties in CND have `requiredType: WEAKREFERENCE`. Pass the UUID with `type: WEAKREFERENCE`:
|
|
123
|
+
|
|
124
|
+
```graphql
|
|
125
|
+
properties: [
|
|
126
|
+
{name: "image", value: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", type: WEAKREFERENCE}
|
|
127
|
+
]
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
> After uploading, publish the files folder so images are accessible on the live site:
|
|
131
|
+
> ```bash
|
|
132
|
+
> curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
133
|
+
> -X POST http://localhost:8080/modules/graphql \
|
|
134
|
+
> -d '{"query":"mutation { jcr { mutateNode(pathOrId: \"/sites/SITE_KEY/files\") { publish(languages: [\"en\"]) } } }"}'
|
|
135
|
+
> ```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Creating pages (jnt:page) — Area structure is mandatory
|
|
140
|
+
|
|
141
|
+
> ⚠️ If your task involves creating a **page**, read this section first.
|
|
142
|
+
|
|
143
|
+
In Jahia, a `jnt:page` uses a template that declares named **Areas**. Content added as **direct children of the page node** is silently ignored by the renderer — it will never appear on the page.
|
|
144
|
+
|
|
145
|
+
Content must be created as children of the **Area sub-node** (e.g. `/sites/mySite/home/my-page/AREA_NAME/hero`).
|
|
146
|
+
|
|
147
|
+
### Step A — Discover the correct Area structure from an existing page
|
|
148
|
+
|
|
149
|
+
Pick any working sibling page and inspect its children:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
curl -s -u root:root1234 \
|
|
153
|
+
-H "Content-Type: application/json" \
|
|
154
|
+
-H "Origin: http://localhost:8080" \
|
|
155
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
156
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites/SITE_KEY/home\") { children { nodes { name primaryNodeType { name } children { nodes { name primaryNodeType { name } } } } } } } }"}'
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Look for a child node that is a content list or area type (e.g. `jnt:contentList`, `jnt:area`, or a custom area type). Note its **name** — that is your Area node name.
|
|
160
|
+
|
|
161
|
+
### Step B — Check the page template
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
curl -s -u root:root1234 \
|
|
165
|
+
-H "Content-Type: application/json" \
|
|
166
|
+
-H "Origin: http://localhost:8080" \
|
|
167
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
168
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites/SITE_KEY/home/EXISTING_PAGE\") { properties(names: [\"j:templateName\"]) { name value } } } }"}'
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Use this exact template name for your new page.
|
|
172
|
+
|
|
173
|
+
### Step C — Create the page, then add content inside the Area
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 1. Create the page
|
|
177
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
178
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
179
|
+
-d '{"query":"mutation { jcr { addNode(parentPathOrId: \"/sites/SITE_KEY/home\", name: \"my-page\", primaryNodeType: \"jnt:page\", properties: [{name: \"jcr:title\", value: \"My Page\", language: \"en\"}, {name: \"j:templateName\", value: \"TEMPLATE_NAME\"}]) { uuid node { path } } } }"}'
|
|
180
|
+
|
|
181
|
+
# 2. Create the Area sub-node (same type and name as the sibling page's area)
|
|
182
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
183
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
184
|
+
-d '{"query":"mutation { jcr { addNode(parentPathOrId: \"/sites/SITE_KEY/home/my-page\", name: \"AREA_NAME\", primaryNodeType: \"AREA_TYPE\") { uuid node { path } } } }"}'
|
|
185
|
+
|
|
186
|
+
# 3. Add content INSIDE the area (not on the page directly)
|
|
187
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
188
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
189
|
+
-d '{"query":"mutation { jcr { addNode(parentPathOrId: \"/sites/SITE_KEY/home/my-page/AREA_NAME\", name: \"hero\", primaryNodeType: \"jnt:text\", properties: [{name: \"text\", value: \"<h1>Hello<\\/h1>\", language: \"en\"}]) { uuid node { path } } } }"}'
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Step D — Publish the page
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
196
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
197
|
+
-d '{"query":"mutation { jcr { mutateNode(pathOrId: \"/sites/SITE_KEY/home/my-page\") { publish(languages: [\"en\"]) } } }"}'
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Step 1 — Identify target site and content folder
|
|
203
|
+
|
|
204
|
+
Standard content folder paths:
|
|
205
|
+
- `/sites/<siteKey>/contents/articles/` — for article nodes
|
|
206
|
+
- `/sites/<siteKey>/contents/tutorials/` — for tutorial nodes
|
|
207
|
+
- `/sites/<siteKey>/contents/` — for any other content folder
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Step 2 — Look up the content type's properties
|
|
212
|
+
|
|
213
|
+
> 💡 **If the site is unfamiliar**, use **`/jahia-content-explore-structure`** first.
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
curl -s -u root:root1234 \
|
|
217
|
+
-H "Content-Type: application/json" \
|
|
218
|
+
-H "Origin: http://localhost:8080" \
|
|
219
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
220
|
+
-d '{
|
|
221
|
+
"query": "{ jcr { nodeTypeByName(name: \"NAMESPACE:typeName\") { properties { name requiredType internationalized mandatory constraints } } } }"
|
|
222
|
+
}'
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Step 3 — Create a node
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
curl -s -u root:root1234 \
|
|
231
|
+
-H "Content-Type: application/json" \
|
|
232
|
+
-H "Origin: http://localhost:8080" \
|
|
233
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
234
|
+
-d '{
|
|
235
|
+
"query": "mutation { jcr { addNode(parentPathOrId: \"/sites/mySite/contents/articles\", name: \"my-article\", primaryNodeType: \"namespace:docArticle\", properties: [{name: \"jcr:title\", value: \"My Article\", language: \"en\"}, {name: \"body\", value: \"<p>Content here</p>\", language: \"en\"}]) { uuid node { path } } } }"
|
|
236
|
+
}'
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Property rules
|
|
240
|
+
|
|
241
|
+
| Situation | GraphQL syntax |
|
|
242
|
+
|-----------|---------------|
|
|
243
|
+
| i18n property (declared `i18n` in CND) | `{name: "body", value: "...", language: "en"}` |
|
|
244
|
+
| Non-i18n property | `{name: "product", value: "jahia"}` |
|
|
245
|
+
| Title (from `mix:title`) | `{name: "jcr:title", value: "...", language: "en"}` |
|
|
246
|
+
| Date property | `{name: "updatedAt", value: "2024-01-15T00:00:00.000Z", type: DATE}` |
|
|
247
|
+
| Multiple values | `{name: "tags", values: ["a", "b"]}` |
|
|
248
|
+
|
|
249
|
+
### Node name rules
|
|
250
|
+
- Use lowercase kebab-case: `my-article`, `getting-started`
|
|
251
|
+
- No spaces, no special characters
|
|
252
|
+
- Must be unique within the parent folder
|
|
253
|
+
- Use `useAvailableNodeName: true` to auto-suffix if name is taken
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Step 4 — Publish the node
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
curl -s -u root:root1234 \
|
|
261
|
+
-H "Content-Type: application/json" \
|
|
262
|
+
-H "Origin: http://localhost:8080" \
|
|
263
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
264
|
+
-d '{
|
|
265
|
+
"query": "mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles/my-article\") { publish(languages: [\"en\"]) } } }"
|
|
266
|
+
}'
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Expected response: `{"data": {"jcr": {"mutateNode": {"publish": true}}}}`
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Step 5 — Batch creation
|
|
274
|
+
|
|
275
|
+
To create multiple nodes efficiently, use `addNodesBatch`:
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
curl -s -u root:root1234 \
|
|
279
|
+
-H "Content-Type: application/json" \
|
|
280
|
+
-H "Origin: http://localhost:8080" \
|
|
281
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
282
|
+
-d '{
|
|
283
|
+
"query": "mutation { jcr { addNodesBatch(nodes: [{parentPathOrId: \"/sites/mySite/contents/articles\", name: \"article-1\", primaryNodeType: \"namespace:docArticle\", properties: [{name: \"jcr:title\", value: \"Article One\", language: \"en\"}, {name: \"body\", value: \"<p>Body 1</p>\", language: \"en\"}]}, {parentPathOrId: \"/sites/mySite/contents/articles\", name: \"article-2\", primaryNodeType: \"namespace:docArticle\", properties: [{name: \"jcr:title\", value: \"Article Two\", language: \"en\"}, {name: \"body\", value: \"<p>Body 2</p>\", language: \"en\"}]}]) { uuid node { path } } } }"
|
|
284
|
+
}'
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Then publish all at once using `mutateNodesByQuery`:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
curl -s -u root:root1234 \
|
|
291
|
+
-H "Content-Type: application/json" \
|
|
292
|
+
-H "Origin: http://localhost:8080" \
|
|
293
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
294
|
+
-d '{
|
|
295
|
+
"query": "mutation { jcr { mutateNodesByQuery(query: \"SELECT * FROM [namespace:docArticle] WHERE ISDESCENDANTNODE(\u0027/sites/mySite/contents/articles\u0027)\", queryLanguage: SQL2) { publish(languages: [\"en\"]) } } }"
|
|
296
|
+
}'
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Step 6 — Verify
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
curl -s -u root:root1234 \
|
|
305
|
+
-H "Content-Type: application/json" \
|
|
306
|
+
-H "Origin: http://localhost:8080" \
|
|
307
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
308
|
+
-d '{
|
|
309
|
+
"query": "{ jcr { nodesByQuery(query: \"SELECT * FROM [namespace:docArticle] WHERE ISDESCENDANTNODE(\u0027/sites/mySite/contents/articles\u0027)\", queryLanguage: SQL2) { nodes { name path properties(names: [\"jcr:title\"], language: \"en\") { name value } } } } }"
|
|
310
|
+
}'
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Common errors
|
|
316
|
+
|
|
317
|
+
| Error | Cause | Fix |
|
|
318
|
+
|-------|-------|-----|
|
|
319
|
+
| `Permission denied` | Missing `Origin` header | Add `-H "Origin: http://localhost:8080"` |
|
|
320
|
+
| `Couldn't find definition for property X` | Wrong property name or non-i18n prop given with `language:` | Check CND definition; remove `language:` for non-i18n props |
|
|
321
|
+
| `ConstraintViolationException: mandatory property` | A mandatory CND property was not provided | Provide all mandatory properties |
|
|
322
|
+
| `ItemExistsException` | Node name already taken | Use `useAvailableNodeName: true` or choose a different name |
|
|
323
|
+
| WEAKREFERENCE image constraint error | Uploaded file missing `jmix:image` mixin | Always include `mixins: ["jmix:image"]` in the `addNode` upload mutation |
|
|
324
|
+
| `deletePropertiesBatch fails with missing required fields` | `language` is NON_NULL in `InputJCRDeletedProperty` — required even for non-i18n properties | Always provide `language: "en"` in every `deletePropertiesBatch` entry |
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Setting `j:linkType` links via GraphQL
|
|
329
|
+
|
|
330
|
+
> 🚫 **NEVER use `j:linkType: "external"` to link to an internal Jahia page.** Always use `"internal"` with `j:linknode`. Hardcoding an internal URL as an external link will break on environment changes, language switching, vanity URLs, and live/preview workspace toggling.
|
|
331
|
+
|
|
332
|
+
### Internal link (`j:linkType: "internal"`)
|
|
333
|
+
|
|
334
|
+
`j:linknode` is an **internationalized** weakreference. Add the mixin first, then set the property with `language:`.
|
|
335
|
+
|
|
336
|
+
```graphql
|
|
337
|
+
# Step 1 — add mixin + set j:linkType
|
|
338
|
+
mutation {
|
|
339
|
+
jcr {
|
|
340
|
+
mutateNode(pathOrId: "/sites/mySite/home/features/my-card") {
|
|
341
|
+
addMixins(mixins: ["jmix:internalLink"])
|
|
342
|
+
setPropertiesBatch(properties: [
|
|
343
|
+
{name: "j:linkType", value: "internal"}
|
|
344
|
+
]) { path }
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
# Step 2 — set j:linknode (i18n weakreference — must include language)
|
|
350
|
+
mutation {
|
|
351
|
+
jcr {
|
|
352
|
+
mutateNode(pathOrId: "/sites/mySite/home/features/my-card") {
|
|
353
|
+
mutateProperty(name: "j:linknode") {
|
|
354
|
+
setValue(value: "<target-node-uuid>", language: "en", type: WEAKREFERENCE)
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### External link (`j:linkType: "external"`)
|
|
362
|
+
|
|
363
|
+
```graphql
|
|
364
|
+
mutation {
|
|
365
|
+
jcr {
|
|
366
|
+
mutateNode(pathOrId: "/sites/mySite/home/features/my-card") {
|
|
367
|
+
addMixins(mixins: ["jmix:externalLink"])
|
|
368
|
+
setPropertiesBatch(properties: [
|
|
369
|
+
{name: "j:linkType", value: "external"}
|
|
370
|
+
{name: "j:url", value: "https://example.com", language: "en"}
|
|
371
|
+
{name: "j:linkTitle", value: "Visit Example", language: "en"}
|
|
372
|
+
]) { path }
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## References
|
|
381
|
+
|
|
382
|
+
- Jahia GraphQL API playground: `http://localhost:8080/modules/graphql` (GET in browser, POST for queries)
|
|
383
|
+
- JCR mutation docs: https://academy.jahia.com/documentation/developer/jahia/8/api-documentation/graphql-api
|
|
384
|
+
- Native Jahia node types (CND source): https://github.com/Jahia/jahia/tree/master/war/src/main/webapp/WEB-INF/etc/repository/nodetypes
|