@jahia/agentic 0.4.1 → 0.5.1
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/CHANGELOG.md +10 -0
- package/dist/antigravity/.agents/rules/jahia.md +51 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
- package/dist/antigravity/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
- package/dist/antigravity/.agents/skills/jahia-dev-accessibility/SKILL.md +11 -0
- package/dist/antigravity/.agents/skills/jahia-dev-build-component/SKILL.md +133 -0
- package/dist/antigravity/.agents/skills/jahia-dev-create-page-template/SKILL.md +341 -0
- package/dist/antigravity/.agents/skills/jahia-dev-create-template-set/SKILL.md +205 -0
- package/dist/antigravity/.agents/skills/jahia-dev-create-view/SKILL.md +896 -0
- package/dist/antigravity/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/antigravity/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/antigravity/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/antigravity/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/antigravity/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/antigravity/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/antigravity/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/antigravity/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/antigravity/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/antigravity/.agents/skills/jahia-dev-query-content/SKILL.md +204 -0
- package/dist/antigravity/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/antigravity/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/antigravity/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/antigravity/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/antigravity/.agents/skills/jahia-dev-start-local/SKILL.md +121 -0
- package/dist/antigravity/.agents/skills/jahia-jcr-sql2/SKILL.md +257 -0
- package/dist/antigravity/.agents/skills/jahia-review/SKILL.md +63 -0
- package/dist/{claude/.claude/skills/jahia-dev-review → antigravity/.agents/skills/jahia-review-code}/SKILL.md +3 -3
- package/dist/antigravity/.agents/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/antigravity/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/antigravity/AGENTS.md +62 -0
- package/dist/claude/.claude/rules/jahia.md +1 -1
- package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/claude/.claude/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/claude/.claude/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/claude/.claude/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/claude/.claude/skills/jahia-review/SKILL.md +63 -0
- package/dist/{copilot/.agents/skills/jahia-dev-review → claude/.claude/skills/jahia-review-code}/SKILL.md +3 -3
- package/dist/claude/.claude/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/claude/.claude/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/claude/.mcp.json +11 -0
- package/dist/claude/CLAUDE.md +2 -2
- package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/codex/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/codex/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/codex/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/codex/.agents/skills/jahia-review/SKILL.md +63 -0
- package/dist/{cursor/.agents/skills/jahia-dev-review → codex/.agents/skills/jahia-review-code}/SKILL.md +3 -3
- package/dist/codex/.agents/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/codex/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/codex/AGENTS.md +2 -2
- package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/copilot/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/copilot/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/copilot/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/copilot/.agents/skills/jahia-review/SKILL.md +63 -0
- package/dist/{codex/.agents/skills/jahia-dev-review → copilot/.agents/skills/jahia-review-code}/SKILL.md +3 -3
- package/dist/copilot/.agents/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/copilot/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/copilot/AGENTS.md +2 -2
- package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/cursor/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/cursor/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/cursor/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/cursor/.agents/skills/jahia-review/SKILL.md +63 -0
- package/dist/cursor/.agents/skills/jahia-review-code/SKILL.md +228 -0
- package/dist/cursor/.agents/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/cursor/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/cursor/.cursor/mcp.json +11 -0
- package/dist/cursor/.cursor/rules/jahia.mdc +1 -1
- package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/gemini/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/gemini/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/gemini/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/gemini/.agents/skills/jahia-review/SKILL.md +63 -0
- package/dist/gemini/.agents/skills/jahia-review-code/SKILL.md +228 -0
- package/dist/gemini/.agents/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/gemini/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/gemini/.gemini/settings.json +10 -0
- package/dist/gemini/AGENTS.md +2 -2
- package/dist/index.js +14 -2
- package/dist/kiro/.kiro/settings/mcp.json +10 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/SKILL.md +94 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
- package/dist/kiro/.kiro/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
- package/dist/kiro/.kiro/skills/jahia-dev-accessibility/SKILL.md +11 -0
- package/dist/kiro/.kiro/skills/jahia-dev-build-component/SKILL.md +133 -0
- package/dist/kiro/.kiro/skills/jahia-dev-create-page-template/SKILL.md +341 -0
- package/dist/kiro/.kiro/skills/jahia-dev-create-template-set/SKILL.md +205 -0
- package/dist/kiro/.kiro/skills/jahia-dev-create-view/SKILL.md +896 -0
- package/dist/kiro/.kiro/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/kiro/.kiro/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/kiro/.kiro/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/kiro/.kiro/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/kiro/.kiro/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/kiro/.kiro/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/kiro/.kiro/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/kiro/.kiro/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/kiro/.kiro/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/kiro/.kiro/skills/jahia-dev-query-content/SKILL.md +204 -0
- package/dist/kiro/.kiro/skills/jahia-dev-review-cnd/SKILL.md +79 -0
- package/dist/kiro/.kiro/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
- package/dist/kiro/.kiro/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
- package/dist/kiro/.kiro/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/kiro/.kiro/skills/jahia-dev-start-local/SKILL.md +121 -0
- package/dist/kiro/.kiro/skills/jahia-jcr-sql2/SKILL.md +257 -0
- package/dist/kiro/.kiro/skills/jahia-review/SKILL.md +63 -0
- package/dist/kiro/.kiro/skills/jahia-review-code/SKILL.md +228 -0
- package/dist/kiro/.kiro/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/kiro/.kiro/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/kiro/.kiro/steering/jahia.md +55 -0
- package/dist/kiro/AGENTS.md +62 -0
- package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/opencode/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/opencode/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/opencode/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/opencode/.agents/skills/jahia-review/SKILL.md +63 -0
- package/dist/opencode/.agents/skills/jahia-review-code/SKILL.md +228 -0
- package/dist/opencode/.agents/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/opencode/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/opencode/AGENTS.md +2 -2
- package/dist/opencode/opencode.json +12 -0
- package/dist/windsurf/.windsurf/rules/jahia.md +1 -1
- package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +2 -2
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +2 -2
- package/dist/windsurf/.windsurf/skills/jahia-dev-import-from/SKILL.md +1 -1
- package/dist/windsurf/.windsurf/skills/jahia-dev-properties/SKILL.md +1 -1
- package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +1 -1
- package/dist/windsurf/.windsurf/skills/jahia-jcr-sql2/SKILL.md +1 -2
- package/dist/windsurf/.windsurf/skills/jahia-review/SKILL.md +63 -0
- package/dist/windsurf/.windsurf/skills/jahia-review-code/SKILL.md +228 -0
- package/dist/windsurf/.windsurf/skills/jahia-review-site/SKILL.md +52 -0
- package/dist/windsurf/.windsurf/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
- package/dist/windsurf/AGENTS.md +2 -2
- package/package.json +1 -1
- package/dist/claude/.claude/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/claude/.claude/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
- package/dist/codex/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/codex/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
- package/dist/copilot/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/copilot/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
- package/dist/cursor/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/cursor/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
- package/dist/gemini/.agents/skills/jahia-dev-review/SKILL.md +0 -228
- package/dist/gemini/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/gemini/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
- package/dist/opencode/.agents/skills/jahia-dev-review/SKILL.md +0 -228
- package/dist/opencode/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/opencode/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
- package/dist/windsurf/.windsurf/skills/jahia-dev-review/SKILL.md +0 -228
- package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/SKILL.md +0 -70
- package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-properties
|
|
3
|
+
description: |
|
|
4
|
+
Reference and guidance for configuring Jahia 8.2 via jahia.properties,
|
|
5
|
+
jahia.node.properties, and OSGi .cfg files. Use when: setting operating mode
|
|
6
|
+
(dev/production), configuring clustering, changing authentication (CAS, SPNEGO,
|
|
7
|
+
cookie), tuning JCR/search index settings, adjusting URL rewriting, changing
|
|
8
|
+
disk paths, or looking up any specific Jahia property key and its default value.
|
|
9
|
+
allowed-tools: Read
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Configuration Files
|
|
13
|
+
|
|
14
|
+
| File | Location | Purpose |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| `jahia.properties` | `digital-factory-config/jahia/` | Main Jahia configuration |
|
|
17
|
+
| `jahia.node.properties` | `digital-factory-config/jahia/` | Cluster / node-specific settings |
|
|
18
|
+
| OSGi `.cfg` files | `digital-factory-data/karaf/etc/` | Module and subsystem settings |
|
|
19
|
+
|
|
20
|
+
`jahia.properties` is read at startup. Changes require a restart unless overridden via OSGi config at runtime.
|
|
21
|
+
|
|
22
|
+
## Variable Interpolation
|
|
23
|
+
|
|
24
|
+
Jahia resolves these variables in property values:
|
|
25
|
+
|
|
26
|
+
| Variable | Resolves to |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `${jahiaWebAppRoot}` | Webapp root (e.g. `.../webapps/ROOT`) |
|
|
29
|
+
| `${jahia.data.dir}` | Same as `jahiaVarDiskPath` once resolved |
|
|
30
|
+
| `${jahia.jackrabbit.home}` | JCR repository home |
|
|
31
|
+
|
|
32
|
+
Default data layout:
|
|
33
|
+
```
|
|
34
|
+
digital-factory-data/ ← jahiaVarDiskPath
|
|
35
|
+
modules/ ← jahiaModulesDiskPath
|
|
36
|
+
imports/ ← jahiaImportsDiskPath
|
|
37
|
+
repository/ ← jahia.jackrabbit.home
|
|
38
|
+
repository/datastore/ ← jahia.jackrabbit.datastore.path
|
|
39
|
+
generated-resources/ ← must be shared in cluster
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Common Production Setup
|
|
43
|
+
|
|
44
|
+
Properties to change when going to production:
|
|
45
|
+
|
|
46
|
+
```properties
|
|
47
|
+
# jahia.properties
|
|
48
|
+
operatingMode = production
|
|
49
|
+
|
|
50
|
+
# Disable development-only endpoints
|
|
51
|
+
jahia.find.disabled = true
|
|
52
|
+
repositoryDirectoryListingDisabled = false
|
|
53
|
+
|
|
54
|
+
# URL rewriting (already on by default)
|
|
55
|
+
urlRewriteSeoRulesEnabled = true
|
|
56
|
+
urlRewriteRemoveCmsPrefix = true
|
|
57
|
+
permanentMoveForVanityURL = true
|
|
58
|
+
|
|
59
|
+
# Protect against semicolon injection
|
|
60
|
+
shiro.blockSemicolon = true
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Cluster Setup (jahia.node.properties)
|
|
64
|
+
|
|
65
|
+
```properties
|
|
66
|
+
cluster.activated = true
|
|
67
|
+
cluster.node.serverId = my-node-1 # unique per node
|
|
68
|
+
processingServer = true # only ONE node should be true
|
|
69
|
+
cluster.tcp.bindAddress = # leave empty to auto-detect, or set IP
|
|
70
|
+
cluster.tcp.bindPort = 7870 # JGroups
|
|
71
|
+
cluster.hazelcast.bindPort = 7860 # Hazelcast
|
|
72
|
+
|
|
73
|
+
# In jahia.properties — must be on shared filesystem
|
|
74
|
+
jahiaGeneratedResourcesDiskPath = /shared-nfs/generated-resources/
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Authentication Quick Reference
|
|
78
|
+
|
|
79
|
+
| Auth method | Enable property |
|
|
80
|
+
|---|---|
|
|
81
|
+
| Cookie (default) | `auth.cookie.enabled = true` |
|
|
82
|
+
| CAS | `auth.cas.enabled = true` + set `auth.cas.serverUrlPrefix` |
|
|
83
|
+
| SPNEGO (Windows) | `auth.spnego.enabled = true` |
|
|
84
|
+
| Container | `auth.container.enabled = true` |
|
|
85
|
+
|
|
86
|
+
CAS minimum config:
|
|
87
|
+
```properties
|
|
88
|
+
auth.cas.enabled = true
|
|
89
|
+
auth.cas.serverUrlPrefix = https://cas.example.com/cas
|
|
90
|
+
auth.cas.loginUrl = ${auth.cas.serverUrlPrefix}/login
|
|
91
|
+
auth.cas.logoutUrl = ${auth.cas.serverUrlPrefix}/logout
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## JCR / Search Tuning
|
|
95
|
+
|
|
96
|
+
```properties
|
|
97
|
+
# Check + auto-repair search index on startup (costly — use for one-time fixes)
|
|
98
|
+
jahia.jackrabbit.searchIndex.enableConsistencyCheck = true
|
|
99
|
+
jahia.jackrabbit.searchIndex.autoRepair = true
|
|
100
|
+
|
|
101
|
+
# Full reindex on startup (very slow on large repos — use only when needed)
|
|
102
|
+
jahia.jackrabbit.reindexOnStartup = true
|
|
103
|
+
|
|
104
|
+
# Workspace consistency check
|
|
105
|
+
jahia.jackrabbit.consistencyCheck = true
|
|
106
|
+
jahia.jackrabbit.consistencyFix = true
|
|
107
|
+
|
|
108
|
+
# Query stats (useful for diagnosing slow queries)
|
|
109
|
+
jahia.jackrabbit.queryStatsEnabled = true
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Performance Tuning
|
|
113
|
+
|
|
114
|
+
```properties
|
|
115
|
+
# Reduce parallel module generation threads if CPU-bound
|
|
116
|
+
maxModulesToGenerateInParallel = 50
|
|
117
|
+
|
|
118
|
+
# Increase LRU caches for large sites
|
|
119
|
+
accessManagerPathPermissionCacheMaxSize = 100
|
|
120
|
+
jahia.jcr.nodesCachePerSessionMaxSize = 100
|
|
121
|
+
|
|
122
|
+
# Limit max request render time (ms); -1 = no limit
|
|
123
|
+
maxRequestRenderTime = 60000
|
|
124
|
+
|
|
125
|
+
# Mass import: expand to disk first for very large imports
|
|
126
|
+
expandImportedFilesOnDisk = true
|
|
127
|
+
expandImportedFilesOnDiskPath = /tmp
|
|
128
|
+
importMaxBatch = 500
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## OSGi / Karaf Shell
|
|
132
|
+
|
|
133
|
+
```properties
|
|
134
|
+
karaf.remoteShell.port = 8101 # SSH into Karaf; set negative to disable
|
|
135
|
+
karaf.remoteShell.host = 127.0.0.1 # bind address; restrict to localhost in prod
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Connect: `ssh -p 8101 karaf@localhost`
|
|
139
|
+
|
|
140
|
+
## Full Property Reference
|
|
141
|
+
|
|
142
|
+
See [references/all-properties.md](references/all-properties.md) for all ~90 properties grouped by category with keys, defaults, and descriptions.
|
|
143
|
+
|
|
144
|
+
Search tip:
|
|
145
|
+
```bash
|
|
146
|
+
grep -i "keyword" $(find .claude .agents -name "all-properties.md" 2>/dev/null | head -1)
|
|
147
|
+
```
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Jahia 8.2 — All Properties Reference
|
|
2
|
+
|
|
3
|
+
## Jahia Modes
|
|
4
|
+
|
|
5
|
+
| Property | Default | Description |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `operatingMode` | `development` | `development`, `production`, or `distantPublicationServer` |
|
|
8
|
+
| `maintenanceMode` | `false` | Serve requests only to `/tools/` |
|
|
9
|
+
| `readOnlyMode` | `false` | Disable Page Composer, Content Editor, Studio |
|
|
10
|
+
| `sessionExpiryTime` | `60` | Session lifetime in minutes |
|
|
11
|
+
|
|
12
|
+
## Disk Paths
|
|
13
|
+
|
|
14
|
+
| Property | Default | Description |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| `jahiaVarDiskPath` | `${jahiaWebAppRoot}/../../../digital-factory-data` | Runtime data root |
|
|
17
|
+
| `tmpContentDiskPath` | `${jahia.data.dir}/content/tmp/` | Temporary files |
|
|
18
|
+
| `jahiaModulesDiskPath` | `${jahia.data.dir}/modules/` | Deployed modules |
|
|
19
|
+
| `jahiaImportsDiskPath` | `${jahia.data.dir}/imports/` | Import files |
|
|
20
|
+
| `modulesSourcesDiskPath` | `${jahia.data.dir}/sources/` | Module sources |
|
|
21
|
+
| `jahiaGeneratedResourcesDiskPath` | `${jahia.data.dir}/generated-resources/` | **Must be shared across cluster nodes** |
|
|
22
|
+
| `jahia.jackrabbit.home` | `${jahia.data.dir}/repository` | JCR repository home |
|
|
23
|
+
| `jahia.jackrabbit.datastore.path` | `${jahia.jackrabbit.home}/datastore` | JCR file datastore |
|
|
24
|
+
|
|
25
|
+
## URL Settings
|
|
26
|
+
|
|
27
|
+
| Property | Default | Description |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `jahiaWebAppsDeployerBaseURL` | `http://127.0.0.1:8080/manager/html/` | WAR deployer URL |
|
|
30
|
+
| `permanentMoveForVanityURL` | `true` | HTTP 301 for vanity URLs |
|
|
31
|
+
| `urlRewriteSeoRulesEnabled` | `true` | Shorten content URLs in live mode |
|
|
32
|
+
| `urlRewriteRemoveCmsPrefix` | `true` | Remove `/cms` prefix when SEO rewriting active |
|
|
33
|
+
| `urlRewriteUseAbsoluteUrls` | `true` | Generate absolute URLs for cross-site links |
|
|
34
|
+
| `siteURLPortOverride` | `0` | Force port in generated URLs (0 = disabled) |
|
|
35
|
+
| `disableJsessionIdParameter` | `true` | Disable jsessionid URL tracking |
|
|
36
|
+
| `shiro.blockSemicolon` | `true` | Block requests with semicolon in URI |
|
|
37
|
+
|
|
38
|
+
## Authentication
|
|
39
|
+
|
|
40
|
+
| Property | Default | Description |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `auth.container.enabled` | `false` | Container authentication valve |
|
|
43
|
+
| `auth.cookie.enabled` | `true` | Cookie-based authentication |
|
|
44
|
+
| `auth.cas.enabled` | `false` | CAS SSO authentication |
|
|
45
|
+
| `auth.cas.serverUrlPrefix` | `https://localhost:8443/cas` | CAS server base URL |
|
|
46
|
+
| `auth.cas.loginUrl` | `${auth.cas.serverUrlPrefix}/login` | CAS login redirect |
|
|
47
|
+
| `auth.cas.logoutUrl` | `${auth.cas.serverUrlPrefix}/logout` | CAS logout redirect |
|
|
48
|
+
| `auth.spnego.enabled` | `false` | SPNEGO (Windows-integrated auth) |
|
|
49
|
+
|
|
50
|
+
## Database
|
|
51
|
+
|
|
52
|
+
| Property | Default | Description |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `db_script` | `derby_embedded.script` | Database initialization script |
|
|
55
|
+
| `hibernate.dialect` | `org.hibernate.dialect.DerbyTenSevenDialect` | Hibernate dialect |
|
|
56
|
+
| `org.quartz.driverDelegateClass` | `org.quartz.impl.jdbcjobstore.StdJDBCDelegate` | Quartz JDBC delegate |
|
|
57
|
+
|
|
58
|
+
## Search Index Consistency
|
|
59
|
+
|
|
60
|
+
| Property | Default | Description |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| `jahia.jackrabbit.searchIndex.enableConsistencyCheck` | `false` | Check index on startup |
|
|
63
|
+
| `jahia.jackrabbit.searchIndex.forceConsistencyCheck` | `false` | Check on every startup |
|
|
64
|
+
| `jahia.jackrabbit.searchIndex.autoRepair` | `true` | Auto-repair index errors |
|
|
65
|
+
| `jahia.jackrabbit.searchIndex.spellChecker.distanceImplementation` | `org.apache.lucene.search.spell.LevensteinDistance` | Spell checker algorithm |
|
|
66
|
+
| `jahia.jackrabbit.searchIndex.spellChecker.minimumScore` | `0.7` | Min similarity for suggestions |
|
|
67
|
+
| `jahia.jackrabbit.reindexOnStartup` | `false` | Full reindex on every startup |
|
|
68
|
+
| `queryApproxCountLimit` | `100` | Results before switching to approximate count |
|
|
69
|
+
| `jahia.jackrabbit.queryStatsEnabled` | `true` | Collect JCR query statistics |
|
|
70
|
+
|
|
71
|
+
## Workspace / JCR
|
|
72
|
+
|
|
73
|
+
| Property | Default | Description |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `jahia.jackrabbit.consistencyCheck` | `false` | JCR workspace consistency check on startup |
|
|
76
|
+
| `jahia.jackrabbit.consistencyFix` | `false` | Auto-fix workspace issues |
|
|
77
|
+
| `repositoryDirectoryListingDisabled` | `false` | Disable `/repository` WebDAV listing |
|
|
78
|
+
| `repositoryAllowedNodeTypes` | `rep:root,jnt:virtualsitesFolder,jnt:virtualsite,jnt:folder,jnt:file` | Node types exposed via WebDAV |
|
|
79
|
+
| `jahia.publication.versionedTypes` | `jmix:editorialContent,jnt:file` | Types versioned on publish |
|
|
80
|
+
| `jahia.publication.excludedVersionedTypes` | _(empty)_ | Types excluded from versioning |
|
|
81
|
+
| `jahia.fileServlet.statisticsEnabled` | `false` | File access statistics |
|
|
82
|
+
| `jahia.jcr.maxNameSize` | `32` | Maximum node name length |
|
|
83
|
+
| `jahia.ui.contentTab.defaultSynchronizeNameWithTitle` | `true` | Auto-sync system name with title |
|
|
84
|
+
| `accessManagerPathPermissionCacheMaxSize` | `100` | JCR ACL cache size (LRU entries) |
|
|
85
|
+
| `jahia.jcr.nodesCachePerSessionMaxSize` | `100` | JCRNodeWrapper instance cache per session |
|
|
86
|
+
|
|
87
|
+
## Concurrent Processing / Performance
|
|
88
|
+
|
|
89
|
+
| Property | Default | Description |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| `maxModulesToGenerateInParallel` | `50` | Max threads for module generation |
|
|
92
|
+
| `moduleGenerationWaitTime` | `10000` | Wait before generation starts (ms) |
|
|
93
|
+
| `moduleGenerationThreadDumpToSystemOut` | `true` | Thread dump to stdout on timeout |
|
|
94
|
+
| `moduleGenerationTthreadDumpToFile` | `true` | Thread dump to file on timeout |
|
|
95
|
+
| `minimumIntervalAfterLastAutoThreadDump` | `60000` | Minimum interval between auto dumps (-1 = disabled) |
|
|
96
|
+
| `maxRequestRenderTime` | `60000` | Max render time per request in ms (-1/0 = no limit) |
|
|
97
|
+
|
|
98
|
+
## Error Handling
|
|
99
|
+
|
|
100
|
+
| Property | Default | Description |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| `dumpErrorsToFiles` | `true` | Write error dumps to files |
|
|
103
|
+
| `fileDumpMaxRegroupingOfPreviousException` | `500` | Max recurrences before new dump file |
|
|
104
|
+
| `useJstackForThreadDumps` | `false` | Use external `jstack` for thread dumps |
|
|
105
|
+
| `mail_maxRegroupingOfPreviousException` | `500` | Max recurrences before sending error email |
|
|
106
|
+
| `site.error.enabled` | `true` | Site-specific error document pages |
|
|
107
|
+
|
|
108
|
+
## Mass Imports
|
|
109
|
+
|
|
110
|
+
| Property | Default | Description |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `expandImportedFilesOnDisk` | `false` | Expand binary files to disk before import |
|
|
113
|
+
| `expandImportedFilesOnDiskPath` | `/tmp` | Expansion target path |
|
|
114
|
+
| `importMaxBatch` | `500` | Node save rate during mass import |
|
|
115
|
+
|
|
116
|
+
## Publication
|
|
117
|
+
|
|
118
|
+
| Property | Default | Description |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `jahia.publication.batchSize` | `100` | Publication batch size |
|
|
121
|
+
| `jahia.publicationManagerNodeTypes` | `jmix:publication,jmix:workflowRulesable,jnt:navMenuText` | Types shown in Publication Manager |
|
|
122
|
+
| `jahia.ui.pickers.suppressPublicationInfo` | `false` | Hide publication status in pickers |
|
|
123
|
+
| `area.auto.activated` | `true` | Auto-activate areas on first Page Composer display |
|
|
124
|
+
|
|
125
|
+
## User & Group Management
|
|
126
|
+
|
|
127
|
+
| Property | Default | Description |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| `userManagementUserNamePattern` | `[0-9a-z_A-Z\\-\\{\\}\\.@]+` | Username validation regex |
|
|
130
|
+
| `userManagementGroupNamePattern` | `[0-9a-z_A-Z\\-\\{\\}]+` | Group name validation regex |
|
|
131
|
+
| `jahiaJCRUserCountLimit` | `100` | Max JCR users loaded on Users page |
|
|
132
|
+
| `jahia.settings.userDisplayLimit` | `100` | Default user display count |
|
|
133
|
+
| `jahia.settings.memberDisplayLimit` | `100` | Default group member display count |
|
|
134
|
+
| `external.users.properties.readonly` | `j:firstName,j:lastName,j:organization,j:email` | Read-only properties for external users |
|
|
135
|
+
| `considerPreferredLanguageAfterLogin` | `false` | Switch to user's preferred language after login |
|
|
136
|
+
|
|
137
|
+
## Multilingual
|
|
138
|
+
|
|
139
|
+
| Property | Default | Description |
|
|
140
|
+
|---|---|---|
|
|
141
|
+
| `characterEncoding` | `UTF-8` | Response and email charset |
|
|
142
|
+
| `org.jahia.multilang.default_language_code` | `en` | Fallback language code |
|
|
143
|
+
|
|
144
|
+
## Image & Video
|
|
145
|
+
|
|
146
|
+
| Property | Default | Description |
|
|
147
|
+
|---|---|---|
|
|
148
|
+
| `imageService` | `ImageJAndJava2DImageService` | `ImageJAndJava2DImageService` or ImageMagick service |
|
|
149
|
+
| `imageMagickPath` | _(empty)_ | Path to ImageMagick and exiftools |
|
|
150
|
+
| `jahia.dm.thumbnails.video.enabled` | `false` | Auto video thumbnail generation |
|
|
151
|
+
| `jahia.dm.thumbnails.video.ffmpeg` | `ffmpeg` | Path to ffmpeg executable |
|
|
152
|
+
|
|
153
|
+
## Source Control & Build Tools
|
|
154
|
+
|
|
155
|
+
| Property | Default | Description |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `gitPath` | `git` | Git executable |
|
|
158
|
+
| `svnPath` | `svn` | SVN executable |
|
|
159
|
+
| `mvnPath` | `mvn` | Maven executable |
|
|
160
|
+
|
|
161
|
+
## REST API
|
|
162
|
+
|
|
163
|
+
| Property | Default | Description |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| `jahia.find.disabled` | `true` | Disable the `/find` JCR REST API |
|
|
166
|
+
| `jahia.find.nodeTypesToSkip` | `jnt:passwordHistory,jnt:passwordHistoryEntry` | Node types excluded from find API |
|
|
167
|
+
|
|
168
|
+
## OSGi / Karaf
|
|
169
|
+
|
|
170
|
+
| Property | Default | Description |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| `karaf.remoteShell.port` | `8101` | Karaf SSH shell port (negative = disabled) |
|
|
173
|
+
| `karaf.remoteShell.host` | `127.0.0.1` | SSH shell bind address |
|
|
174
|
+
|
|
175
|
+
## UI / Contribution
|
|
176
|
+
|
|
177
|
+
| Property | Default | Description |
|
|
178
|
+
|---|---|---|
|
|
179
|
+
| `jahia.ui.dragAndDrop` | `DRAG_ZONE_IN_EDIT_AREA` | `ENABLED`, `DRAG_ZONE_IN_EDIT_AREA`, or `DISABLED` |
|
|
180
|
+
| `jahia.ui.createChildrenDirectButtons.limit` | `5` | Content type button threshold |
|
|
181
|
+
| `jahia.jquery.version` | `3.6.0` | jQuery version (`1.12.4`, `3.4.1`, `3.6.0`) |
|
|
182
|
+
| `jahia.jquery.plugins` | `jquery-migrate-3.0.1.min.js` | jQuery plugin mappings |
|
|
183
|
+
| `wip.checkbox.checked` | `false` | WIP checkbox state on Content Editor open |
|
|
184
|
+
| `loadJahiaContext` | `true` | Inject `initJahiaContext.js` in live mode |
|
|
185
|
+
| `protectedResourceAccessStrategy` | `silent` | `silent` (404) or `authorizationError` (401/403) |
|
|
186
|
+
| `useNewAggregateAndCacheImplementation` | `false` | Render chain V2 (true) vs V1 (false) |
|
|
187
|
+
|
|
188
|
+
## Tagging & Search
|
|
189
|
+
|
|
190
|
+
| Property | Default | Description |
|
|
191
|
+
|---|---|---|
|
|
192
|
+
| `tag.suggester.faceted` | `false` | Use faceted query for tag suggestions |
|
|
193
|
+
|
|
194
|
+
## Misc
|
|
195
|
+
|
|
196
|
+
| Property | Default | Description |
|
|
197
|
+
|---|---|---|
|
|
198
|
+
| `default_templates_set` | `sample-bootstrap-templates` | Default template set module |
|
|
199
|
+
| `jahiaFileUploadMaxSize` | `104857600` | Max file upload size in bytes (100 MB) |
|
|
200
|
+
| `jahia.atmosphere.heartbeat` | `60` | Session validity check interval (seconds) |
|
|
201
|
+
| `jahia.site.import.scanner.interval` | `30000` | Site import file watcher interval (ms) |
|
|
202
|
+
| `documentation.link` | `https://academy.jahia.com/...` | Documentation URL shown in admin UI |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Cluster Settings — jahia.node.properties
|
|
207
|
+
|
|
208
|
+
| Property | Default | Description |
|
|
209
|
+
|---|---|---|
|
|
210
|
+
| `cluster.activated` | `false` | Enable cluster communication |
|
|
211
|
+
| `cluster.node.serverId` | `dx-<uuid>` | Unique node identifier |
|
|
212
|
+
| `processingServer` | `true` | Run background jobs (only ONE node) |
|
|
213
|
+
| `cluster.tcp.bindAddress` | _(empty)_ | JGroups bind address (empty = auto-detect) |
|
|
214
|
+
| `cluster.tcp.bindPort` | `7870` | JGroups communication port |
|
|
215
|
+
| `cluster.hazelcast.bindPort` | `7860` | Hazelcast bundle deployment port |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## OSGi Module Config Files
|
|
220
|
+
|
|
221
|
+
### jContent — `org.jahia.modules.jcontent.cfg`
|
|
222
|
+
|
|
223
|
+
| Property | Default | Description |
|
|
224
|
+
|---|---|---|
|
|
225
|
+
| `showPageComposer` | `false` | Show Page Composer inside jContent |
|
|
226
|
+
|
|
227
|
+
### Content Editor — `org.jahia.modules.contentEditor.cfg`
|
|
228
|
+
|
|
229
|
+
| Property | Default | Description |
|
|
230
|
+
|---|---|---|
|
|
231
|
+
| `createChildrenDirectButtons.limit` | `5` | Content type button threshold |
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-query-content
|
|
3
|
+
description: Designs JCR-SQL2 content queries for Jahia page-builder listings and JS module views. Use when asked to list content from folders, filter items, sort results, or wire `useJCRQuery` into a template-set component.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: jahia-dev-query-content
|
|
7
|
+
|
|
8
|
+
Use this skill when building content listings in Jahia template sets.
|
|
9
|
+
For pure JCR-SQL2 language rules, full-text syntax, joins, pagination, and performance guardrails, also use `/jahia-jcr-sql2`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
Jahia stores editorial content in the JCR. In template sets, you usually query it in one of three ways:
|
|
16
|
+
|
|
17
|
+
1. **Page Builder query component** — no-code listing using a JCR query string
|
|
18
|
+
2. **Server-side view** — `useJCRQuery` inside a `.server.tsx` component
|
|
19
|
+
3. **Client-driven experience** — use a dedicated API strategy only when a server-side query is not enough
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 1 — Understand where content lives
|
|
24
|
+
|
|
25
|
+
Reusable content usually lives under `/sites/<siteKey>/contents/...` instead of directly under pages.
|
|
26
|
+
Create and manage those folders in jContent.
|
|
27
|
+
|
|
28
|
+
If editors need the folder visible in the Page Builder content tree, add `jmix:visibleInContentTree` to the folder type:
|
|
29
|
+
|
|
30
|
+
```cnd
|
|
31
|
+
[namespace:blogFolder] > jnt:contentFolder, jmix:visibleInContentTree
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Step 2 — Start with the right SQL2 shape
|
|
37
|
+
|
|
38
|
+
### List all items of a type under a folder
|
|
39
|
+
|
|
40
|
+
```sql
|
|
41
|
+
SELECT *
|
|
42
|
+
FROM [namespace:typeName] AS item
|
|
43
|
+
WHERE ISDESCENDANTNODE(item, '/sites/<siteKey>/contents/<folderName>')
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Only direct children of a folder
|
|
47
|
+
|
|
48
|
+
```sql
|
|
49
|
+
SELECT *
|
|
50
|
+
FROM [namespace:blogPost] AS post
|
|
51
|
+
WHERE ISCHILDNODE(post, '/sites/<siteKey>/contents/blog')
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Filter drafts and sort newest first
|
|
55
|
+
|
|
56
|
+
```sql
|
|
57
|
+
SELECT *
|
|
58
|
+
FROM [namespace:blogPost] AS post
|
|
59
|
+
WHERE ISDESCENDANTNODE(post, '/sites/<siteKey>/contents/blog')
|
|
60
|
+
AND post.[publicationDate] IS NOT NULL
|
|
61
|
+
ORDER BY post.[publicationDate] DESC
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Step 3 — Use the right SQL2 clauses
|
|
67
|
+
|
|
68
|
+
| Need | Pattern |
|
|
69
|
+
|------|---------|
|
|
70
|
+
| Recursive subtree | `ISDESCENDANTNODE(alias, '/path')` |
|
|
71
|
+
| Direct children only | `ISCHILDNODE(alias, '/path')` |
|
|
72
|
+
| Property equality | `alias.[prop] = 'value'` |
|
|
73
|
+
| Pattern match | `alias.[prop] LIKE '%keyword%'` |
|
|
74
|
+
| Exclude empty values | `alias.[prop] IS NOT NULL` |
|
|
75
|
+
| Sort | `ORDER BY alias.[prop] DESC` |
|
|
76
|
+
| Full-text | `CONTAINS(alias.*, 'term')` |
|
|
77
|
+
| Relevance sort | `ORDER BY SCORE(alias) DESC` |
|
|
78
|
+
|
|
79
|
+
**Performance rule:** always constrain queries by path.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Step 4 — Add full-text and filtering when needed
|
|
84
|
+
|
|
85
|
+
### Phrase search sorted by relevance
|
|
86
|
+
|
|
87
|
+
```sql
|
|
88
|
+
SELECT *
|
|
89
|
+
FROM [namespace:blogPost] AS post
|
|
90
|
+
WHERE ISDESCENDANTNODE(post, '/sites/<siteKey>/contents/blog')
|
|
91
|
+
AND CONTAINS(post.*, '"annual report"')
|
|
92
|
+
ORDER BY SCORE(post) DESC
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Search one property only
|
|
96
|
+
|
|
97
|
+
```sql
|
|
98
|
+
SELECT *
|
|
99
|
+
FROM [namespace:blogPost] AS post
|
|
100
|
+
WHERE ISDESCENDANTNODE(post, '/sites/<siteKey>/contents/blog')
|
|
101
|
+
AND CONTAINS(post.[jcr:title], 'welcome')
|
|
102
|
+
ORDER BY post.[publicationDate] DESC
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Filter by date
|
|
106
|
+
|
|
107
|
+
```sql
|
|
108
|
+
SELECT *
|
|
109
|
+
FROM [namespace:blogPost] AS post
|
|
110
|
+
WHERE ISDESCENDANTNODE(post, '/sites/<siteKey>/contents/blog')
|
|
111
|
+
AND post.[publicationDate] > CAST('2026-01-01T00:00:00.000Z' AS DATE)
|
|
112
|
+
ORDER BY post.[publicationDate] DESC
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Use the millisecond form `yyyy-MM-dd'T'HH:mm:ss.SSSX` for SQL2 date casts.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Step 5 — Use queries in Jahia UI or code
|
|
120
|
+
|
|
121
|
+
### Page Builder query component
|
|
122
|
+
|
|
123
|
+
For a simple listing, use **Jahia - Queries > Content items using JCR Query** and paste the SQL2 query there.
|
|
124
|
+
|
|
125
|
+
### `useJCRQuery` in a `.server.tsx` view
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
import { jahiaComponent, useJCRQuery, Render } from '@jahia/javascript-modules-library';
|
|
129
|
+
import type { JCRNodeWrapper } from 'org.jahia.services.content';
|
|
130
|
+
|
|
131
|
+
jahiaComponent(
|
|
132
|
+
{ componentType: 'view', nodeType: 'namespace:blogListing' },
|
|
133
|
+
(_, { renderContext }) => {
|
|
134
|
+
const siteKey = renderContext.getSite().getName();
|
|
135
|
+
const posts = useJCRQuery({
|
|
136
|
+
query: `SELECT * FROM [namespace:blogPost] AS post
|
|
137
|
+
WHERE ISDESCENDANTNODE(post, '/sites/${siteKey}/contents/blog')
|
|
138
|
+
AND post.[publicationDate] IS NOT NULL
|
|
139
|
+
ORDER BY post.[publicationDate] DESC`,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<section>
|
|
144
|
+
{posts.map((post: JCRNodeWrapper) => (
|
|
145
|
+
<Render key={post.getPath()} node={post} />
|
|
146
|
+
))}
|
|
147
|
+
</section>
|
|
148
|
+
);
|
|
149
|
+
},
|
|
150
|
+
);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Step 6 — Patterns commonly needed in template sets
|
|
156
|
+
|
|
157
|
+
### Make a content type renderable at its own URL
|
|
158
|
+
|
|
159
|
+
Use `jmix:mainResource` only for content that needs both a listing card and a full detail page.
|
|
160
|
+
|
|
161
|
+
```cnd
|
|
162
|
+
[namespace:blogPost] > jnt:content, mix:title, jmix:mainResource, namespacemix:component
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Then add a `fullPage.server.tsx` view and link to the node with `buildNodeUrl(currentNode)`.
|
|
166
|
+
|
|
167
|
+
### Draft gate with `publicationDate`
|
|
168
|
+
|
|
169
|
+
A common pattern is:
|
|
170
|
+
|
|
171
|
+
```cnd
|
|
172
|
+
- publicationDate (date)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
and the query:
|
|
176
|
+
|
|
177
|
+
```sql
|
|
178
|
+
AND post.[publicationDate] IS NOT NULL
|
|
179
|
+
ORDER BY post.[publicationDate] DESC
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Nested content folders
|
|
183
|
+
|
|
184
|
+
Use `ISDESCENDANTNODE` to cover nested folder trees automatically. Switch to `ISCHILDNODE` only when you intentionally want one level.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Query checklist
|
|
189
|
+
|
|
190
|
+
- [ ] Query is constrained to `/sites/<siteKey>/contents/...` or another specific subtree
|
|
191
|
+
- [ ] Node type is specific, not overly broad
|
|
192
|
+
- [ ] Sort order matches the UX need
|
|
193
|
+
- [ ] Draft or publish filtering is explicit
|
|
194
|
+
- [ ] Detail-page types use `jmix:mainResource` only when needed
|
|
195
|
+
- [ ] The query has been validated against `/jahia-jcr-sql2` guardrails
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Related skills
|
|
200
|
+
|
|
201
|
+
- `/jahia-jcr-sql2` — SQL2 syntax, full-text, joins, pagination, and performance
|
|
202
|
+
- `/jahia-dev-build-component` — build the listing component that renders query results
|
|
203
|
+
- `/jahia-cnd-author` — create the queried content type and folder types
|
|
204
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-review-cnd
|
|
3
|
+
description: Use after writing any CND file to validate it against Jahia best practices. Runs the deterministic cnd-checker script and reports PASS / FAIL with file:line citations and fixes. Run /jahia-dev-review-cnd <path> to check a specific file or directory, or without arguments to check all CND files in the current module.
|
|
4
|
+
allowed-tools: Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Step 1 — Run the checker
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
CND_SCRIPT=$(find .claude .agents -name "check-cnd.mjs" 2>/dev/null | head -1)
|
|
11
|
+
node "$CND_SCRIPT" <path-to-file-or-directory>
|
|
12
|
+
# or, to check all CND files in the module:
|
|
13
|
+
node "$CND_SCRIPT" src/
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The script exits with code 0 for PASS and code 1 for FAIL.
|
|
17
|
+
|
|
18
|
+
## Step 2 — Fix and repeat until clean
|
|
19
|
+
|
|
20
|
+
This is a loop. Run the checker, fix every issue reported, run it again. Repeat until the result is `PASS`.
|
|
21
|
+
|
|
22
|
+
- **FAIL** — fix every issue, re-run. Do not proceed until exit code is 0.
|
|
23
|
+
- **PASS** — clean. Continue.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Antipattern reference
|
|
28
|
+
|
|
29
|
+
The checker enforces these patterns. Use this as a guide when interpreting output or fixing issues manually.
|
|
30
|
+
|
|
31
|
+
### `rawStringLink`
|
|
32
|
+
Property whose name contains `link`, `url`, `href`, or `path` declared as `(string)`.
|
|
33
|
+
**Fix**: Use the link picker:
|
|
34
|
+
```cnd
|
|
35
|
+
- j:linkType (string, choicelist[linkTypeInitializer]) mandatory
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### `singleHardcodedCta`
|
|
39
|
+
A type with both a CTA label (`ctaText`, `ctaLabel`, `buttonText`, `buttonLabel`) and a CTA link (`ctaLink`, `ctaUrl`, `ctaHref`, `buttonLink`) as flat properties, with no child node.
|
|
40
|
+
**Fix**: Replace with a child node:
|
|
41
|
+
```cnd
|
|
42
|
+
+ * (ns:cta)
|
|
43
|
+
|
|
44
|
+
[ns:cta] > jnt:content, nsmix:component
|
|
45
|
+
- label (string) i18n mandatory
|
|
46
|
+
- j:linkType (string, choicelist[linkTypeInitializer]) mandatory
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### `directDroppable`
|
|
50
|
+
A concrete type extending `jmix:droppableContent` directly.
|
|
51
|
+
**Fix**: Extend the module mixin: `[ns:hero] > jnt:content, nsmix:component`
|
|
52
|
+
|
|
53
|
+
### `missingRatingConstraint`
|
|
54
|
+
`rating (long)` without a range constraint — unconstrained ratings cause data integrity issues.
|
|
55
|
+
**Fix**: Add `< "[1,5]"`
|
|
56
|
+
|
|
57
|
+
### `redundantImageAlt`
|
|
58
|
+
`imageAlt (string)` alongside an image weakreference. The image node already has `jcr:title`.
|
|
59
|
+
**Fix**: Remove `imageAlt`. In the view: `image.getPropertyAsString("jcr:title") ?? ""`
|
|
60
|
+
|
|
61
|
+
### `rawTitleProp`
|
|
62
|
+
Property named `title`, `heroTitle`, `pageTitle`, or `sectionTitle` typed as `(string)`.
|
|
63
|
+
**Fix**: Remove it, extend `mix:title`. Access as `props["jcr:title"]`.
|
|
64
|
+
|
|
65
|
+
### `weakrefNoConstraint`
|
|
66
|
+
`(weakreference)` with no `< ` type constraint.
|
|
67
|
+
**Fix**: Add constraint — `< jmix:image` for images, `< jnt:file` for files.
|
|
68
|
+
|
|
69
|
+
### `weakrefWrongConstraint`
|
|
70
|
+
`< 'jnt:file'` (quoted form).
|
|
71
|
+
**Fix**: `< jmix:image` (unquoted).
|
|
72
|
+
|
|
73
|
+
### `missingI18n`
|
|
74
|
+
User-visible string (`title`, `text`, `label`, `description`, `subtitle`, `caption`, `alt`, `heading`, `summary`, `excerpt`, `body`) without `i18n`.
|
|
75
|
+
**Fix**: Add `i18n` after the type declaration.
|
|
76
|
+
|
|
77
|
+
### `studioOnly`
|
|
78
|
+
Any use of `jmix:studioOnly`.
|
|
79
|
+
**Fix**: Replace with `jmix:hiddenType`.
|