@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,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
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-content-explore-structure
|
|
3
|
+
user-invocable: false
|
|
4
|
+
description: Efficiently maps an unknown Jahia website's content structure before creating or editing content. Discovers available content types, their properties (i18n vs non-i18n), valid enum values, mixin requirements, and image assets — in the minimum number of API calls. Works on any Jahia instance including fresh installs with no reference site.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: jahia-content-explore-structure
|
|
8
|
+
|
|
9
|
+
Use this skill **before** creating content on an unfamiliar Jahia site. It produces a reusable property map so that `/jahia-content-create-content` can work without trial-and-error mutations.
|
|
10
|
+
|
|
11
|
+
**No reference site required.** All content type definitions, property names, i18n flags, and enum constraints are retrieved directly from the GraphQL API via the `nodeTypeByName` and `nodeTypes` queries.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
- Jahia running at `http://localhost:8080`
|
|
18
|
+
- Credentials: `root` / `root1234`
|
|
19
|
+
- Always include `-H "Origin: http://localhost:8080"` — omitting it causes `Permission denied`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 1 — Batch site exploration (ONE call)
|
|
24
|
+
|
|
25
|
+
Use GraphQL aliases to retrieve everything you need in a **single HTTP request**: site metadata, page structure, file assets, and available content types.
|
|
26
|
+
|
|
27
|
+
First, find the site key:
|
|
28
|
+
```bash
|
|
29
|
+
curl -s -u root:root1234 -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
30
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
31
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites\") { children { nodes { name } } } } }"}'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Then run the full batch query (replace `SITE_KEY` and `TEMPLATE_MODULE`):
|
|
35
|
+
```bash
|
|
36
|
+
curl -s -u root:root1234 \
|
|
37
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
38
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
39
|
+
-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 } } } }"}'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
From the response:
|
|
43
|
+
- `site.properties` → `j:templatesSet` (the template module name) and `j:defaultLanguage`
|
|
44
|
+
- `home.children` → page area structure; look for area nodes and check their children to see which content types are in use
|
|
45
|
+
- `files.children` → existing file folders and UUIDs
|
|
46
|
+
- `contentTypes.nodes` → all deployed types; filter by `systemId` matching `j:templatesSet` to find the site's own types
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Step 2 — Get ALL type definitions for the template module (ONE call)
|
|
51
|
+
|
|
52
|
+
Once you know `j:templatesSet` (e.g. `mymodule`) from Step 1, fetch **every type with all its properties** in a single call:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
curl -s -u root:root1234 \
|
|
56
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
57
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
58
|
+
-d '{
|
|
59
|
+
"query": "{ jcr { nodeTypes(filter: {modules: [\"TEMPLATE_MODULE\"], includeMixins: false, includeAbstract: false}) { nodes { name mixin supertypes { name } properties { name requiredType internationalized mandatory multiple constraints } nodes { name mandatory requiredPrimaryType { name } } } } } }"
|
|
60
|
+
}'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> ✅ **This is the only type-definition call you need.** The `properties` array already includes **all inherited properties from supertypes and mixins** — the Jahia GraphQL API resolves inheritance automatically. Do **NOT** query supertypes separately, do **NOT** call `nodeTypeByName` for individual types, do **NOT** query mixin definitions.
|
|
64
|
+
|
|
65
|
+
If you also need properties from standard Jahia types (e.g. `jnt:bigText`, `jnt:text`), add them with `nodeTypesByNames`:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
curl -s -u root:root1234 \
|
|
69
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
70
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
71
|
+
-d '{"query":"{ jcr { nodeTypesByNames(names: [\"jnt:bigText\", \"jnt:text\"]) { name properties { name requiredType internationalized mandatory constraints } } } }"}'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Step 3 — Identify image assets
|
|
77
|
+
|
|
78
|
+
File assets are already returned by the Step 1 batch query under `files.children`. No additional call needed unless you need UUIDs of files inside sub-folders:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
curl -s -u root:root1234 \
|
|
82
|
+
-H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
|
|
83
|
+
-X POST http://localhost:8080/modules/graphql \
|
|
84
|
+
-d '{"query":"{ jcr { nodeByPath(path: \"/sites/SITE_KEY/files/SUBFOLDER\") { children { nodes { name uuid } } } } }"}'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
> `image` properties have `requiredType: WEAKREFERENCE`. Set them with `type: WEAKREFERENCE` and the file node UUID. The file must have `jmix:image` mixin — always include `mixins: [\"jmix:image\"]` when uploading (see `/jahia-content-create-content`).
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Step 4 — Build the property map
|
|
92
|
+
|
|
93
|
+
After Step 2, summarise the data before creating content:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Content type: NAMESPACE:typeName
|
|
97
|
+
Supertypes: [from API response — no need to query separately]
|
|
98
|
+
Required mixins (must be in addNode mixins[]): jmix:renderable, jmix:internalLink, etc.
|
|
99
|
+
|
|
100
|
+
Mandatory non-i18n properties (set in addNode, no language needed):
|
|
101
|
+
image WEAKREF UUID of jmix:image file
|
|
102
|
+
|
|
103
|
+
i18n properties (set with language: "en" in mutation):
|
|
104
|
+
jcr:title STRING from mix:title
|
|
105
|
+
body STRING rich HTML text
|
|
106
|
+
|
|
107
|
+
Optional non-i18n:
|
|
108
|
+
[name] STRING value1 | value2 (from constraints array)
|
|
109
|
+
|
|
110
|
+
Mixin properties (set AFTER addNode in a separate mutation):
|
|
111
|
+
j:view STRING (from jmix:renderable)
|
|
112
|
+
j:linknode WEAKREF i18n (from jmix:internalLink)
|
|
113
|
+
j:url STRING i18n (from jmix:externalLink — set with language: "en")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Critical gotchas
|
|
119
|
+
|
|
120
|
+
### 1. `j:view` cannot be set in `addNode` — set it after
|
|
121
|
+
|
|
122
|
+
```graphql
|
|
123
|
+
# Step 1: create node with mixin declared
|
|
124
|
+
addNode(... mixins: ["jmix:renderable"] ...)
|
|
125
|
+
|
|
126
|
+
# Step 2: set j:view in a separate mutation
|
|
127
|
+
mutateNode(...) { mutateProperty(name: "j:view") { setValue(value: "cover") } }
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 2. `j:url` (from `jmix:externalLink`) requires `language: "en"` — it is an i18n property
|
|
131
|
+
|
|
132
|
+
```graphql
|
|
133
|
+
addNode(
|
|
134
|
+
mixins: ["jmix:externalLink"]
|
|
135
|
+
properties: [
|
|
136
|
+
{name: "j:url", type: STRING, value: "https://example.com", language: "en"}
|
|
137
|
+
]
|
|
138
|
+
)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 3. GraphQL `properties()` without `language:` hides i18n property values at query time
|
|
142
|
+
|
|
143
|
+
When **reading** existing nodes: use `properties(language: "en")`. When **writing** i18n properties: add `language: "en"` to the `setValue` call.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Next step — Create content with the property map
|
|
148
|
+
|
|
149
|
+
Once you have the property map from Step 4, hand it off to **`/jahia-content-create-content`**:
|
|
150
|
+
|
|
151
|
+
- Use the mandatory properties list to populate `addNode` / `addChild` mutations correctly the first time
|
|
152
|
+
- Use the i18n flags to know which properties need `language: "en"`
|
|
153
|
+
- Use the enum constraints to pass only valid values
|
|
154
|
+
- Use nested `addChild` calls to create an entire content tree in one mutation (see the `⚡ Minimum-call workflow` section in `/jahia-content-create-content`)
|
|
155
|
+
|
|
156
|
+
> Skipping this skill and guessing property names leads to `ConstraintViolationException` and `Couldn't find definition for property` errors. Always explore first.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## References
|
|
161
|
+
|
|
162
|
+
- GraphQL API playground: `http://localhost:8080/modules/graphql`
|
|
163
|
+
- GraphQL schema introspection for node type fields: `{ __type(name: "JCRNodeType") { fields { name } } }`
|
|
164
|
+
- GraphQL schema introspection for property definition fields: `{ __type(name: "JCRPropertyDefinition") { fields { name } } }`
|