@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.
Files changed (307) hide show
  1. package/README.md +48 -0
  2. package/dist/claude/.claude/rules/jahia.md +76 -0
  3. package/dist/claude/.claude/skills/jahia/SKILL.md +136 -0
  4. package/dist/claude/.claude/skills/jahia-content/SKILL.md +139 -0
  5. package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +384 -0
  6. package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +164 -0
  7. package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +236 -0
  8. package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +144 -0
  9. package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +297 -0
  10. package/dist/claude/.claude/skills/jahia-dev/SKILL.md +124 -0
  11. package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +271 -0
  12. package/dist/claude/.claude/skills/jahia-dev-apis/SKILL.md +52 -0
  13. package/dist/claude/.claude/skills/jahia-dev-apis/references/authentication.md +484 -0
  14. package/dist/claude/.claude/skills/jahia-dev-apis/references/graphql.md +657 -0
  15. package/dist/claude/.claude/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  16. package/dist/claude/.claude/skills/jahia-dev-apis/references/security.md +541 -0
  17. package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +140 -0
  18. package/dist/claude/.claude/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  19. package/dist/claude/.claude/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  20. package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +838 -0
  21. package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +445 -0
  22. package/dist/claude/.claude/skills/jahia-dev-debug/SKILL.md +176 -0
  23. package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  24. package/dist/claude/.claude/skills/jahia-dev-import-from/SKILL.md +244 -0
  25. package/dist/claude/.claude/skills/jahia-dev-java/SKILL.md +105 -0
  26. package/dist/claude/.claude/skills/jahia-dev-java/references/backend.md +331 -0
  27. package/dist/claude/.claude/skills/jahia-dev-java/references/content-types.md +273 -0
  28. package/dist/claude/.claude/skills/jahia-dev-java/references/modules.md +218 -0
  29. package/dist/claude/.claude/skills/jahia-dev-java/references/osgi.md +208 -0
  30. package/dist/claude/.claude/skills/jahia-dev-java/references/rendering.md +191 -0
  31. package/dist/claude/.claude/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  32. package/dist/claude/.claude/skills/jahia-dev-jexperience/SKILL.md +269 -0
  33. package/dist/claude/.claude/skills/jahia-dev-ops/SKILL.md +50 -0
  34. package/dist/claude/.claude/skills/jahia-dev-ops/references/docker.md +151 -0
  35. package/dist/claude/.claude/skills/jahia-dev-ops/references/monitoring.md +195 -0
  36. package/dist/claude/.claude/skills/jahia-dev-ops/references/provisioning.md +269 -0
  37. package/dist/claude/.claude/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  38. package/dist/claude/.claude/skills/jahia-dev-properties/SKILL.md +147 -0
  39. package/dist/claude/.claude/skills/jahia-dev-properties/references/all-properties.md +231 -0
  40. package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +407 -0
  41. package/dist/claude/.claude/skills/jahia-dev-review/SKILL.md +228 -0
  42. package/dist/claude/.claude/skills/jahia-dev-screenshot/SKILL.md +177 -0
  43. package/dist/claude/.claude/skills/jahia-dev-start-local/SKILL.md +129 -0
  44. package/dist/claude/.claude/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  45. package/dist/claude/CLAUDE.md +90 -0
  46. package/dist/codex/.agents/skills/jahia/SKILL.md +136 -0
  47. package/dist/codex/.agents/skills/jahia-content/SKILL.md +139 -0
  48. package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  49. package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  50. package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  51. package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  52. package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  53. package/dist/codex/.agents/skills/jahia-dev/SKILL.md +124 -0
  54. package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  55. package/dist/codex/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  56. package/dist/codex/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  57. package/dist/codex/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  58. package/dist/codex/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  59. package/dist/codex/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  60. package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  61. package/dist/codex/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  62. package/dist/codex/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  63. package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  64. package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  65. package/dist/codex/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  66. package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  67. package/dist/codex/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  68. package/dist/codex/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  69. package/dist/codex/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  70. package/dist/codex/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  71. package/dist/codex/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  72. package/dist/codex/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  73. package/dist/codex/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  74. package/dist/codex/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  75. package/dist/codex/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  76. package/dist/codex/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  77. package/dist/codex/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  78. package/dist/codex/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  79. package/dist/codex/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  80. package/dist/codex/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  81. package/dist/codex/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  82. package/dist/codex/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  83. package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  84. package/dist/codex/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  85. package/dist/codex/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  86. package/dist/codex/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  87. package/dist/codex/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  88. package/dist/codex/AGENTS.md +89 -0
  89. package/dist/copilot/.agents/skills/jahia/SKILL.md +136 -0
  90. package/dist/copilot/.agents/skills/jahia-content/SKILL.md +139 -0
  91. package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  92. package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  93. package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  94. package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  95. package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  96. package/dist/copilot/.agents/skills/jahia-dev/SKILL.md +124 -0
  97. package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  98. package/dist/copilot/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  99. package/dist/copilot/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  100. package/dist/copilot/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  101. package/dist/copilot/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  102. package/dist/copilot/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  103. package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  104. package/dist/copilot/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  105. package/dist/copilot/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  106. package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  107. package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  108. package/dist/copilot/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  109. package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  110. package/dist/copilot/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  111. package/dist/copilot/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  112. package/dist/copilot/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  113. package/dist/copilot/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  114. package/dist/copilot/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  115. package/dist/copilot/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  116. package/dist/copilot/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  117. package/dist/copilot/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  118. package/dist/copilot/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  119. package/dist/copilot/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  120. package/dist/copilot/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  121. package/dist/copilot/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  122. package/dist/copilot/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  123. package/dist/copilot/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  124. package/dist/copilot/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  125. package/dist/copilot/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  126. package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  127. package/dist/copilot/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  128. package/dist/copilot/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  129. package/dist/copilot/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  130. package/dist/copilot/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  131. package/dist/copilot/AGENTS.md +89 -0
  132. package/dist/cursor/.agents/skills/jahia/SKILL.md +136 -0
  133. package/dist/cursor/.agents/skills/jahia-content/SKILL.md +139 -0
  134. package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  135. package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  136. package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  137. package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  138. package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  139. package/dist/cursor/.agents/skills/jahia-dev/SKILL.md +124 -0
  140. package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  141. package/dist/cursor/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  142. package/dist/cursor/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  143. package/dist/cursor/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  144. package/dist/cursor/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  145. package/dist/cursor/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  146. package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  147. package/dist/cursor/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  148. package/dist/cursor/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  149. package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  150. package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  151. package/dist/cursor/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  152. package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  153. package/dist/cursor/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  154. package/dist/cursor/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  155. package/dist/cursor/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  156. package/dist/cursor/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  157. package/dist/cursor/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  158. package/dist/cursor/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  159. package/dist/cursor/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  160. package/dist/cursor/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  161. package/dist/cursor/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  162. package/dist/cursor/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  163. package/dist/cursor/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  164. package/dist/cursor/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  165. package/dist/cursor/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  166. package/dist/cursor/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  167. package/dist/cursor/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  168. package/dist/cursor/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  169. package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  170. package/dist/cursor/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  171. package/dist/cursor/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  172. package/dist/cursor/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  173. package/dist/cursor/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  174. package/dist/cursor/.cursor/rules/jahia.mdc +80 -0
  175. package/dist/gemini/.agents/skills/jahia/SKILL.md +136 -0
  176. package/dist/gemini/.agents/skills/jahia-content/SKILL.md +139 -0
  177. package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  178. package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  179. package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  180. package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  181. package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  182. package/dist/gemini/.agents/skills/jahia-dev/SKILL.md +124 -0
  183. package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  184. package/dist/gemini/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  185. package/dist/gemini/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  186. package/dist/gemini/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  187. package/dist/gemini/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  188. package/dist/gemini/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  189. package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  190. package/dist/gemini/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  191. package/dist/gemini/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  192. package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  193. package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  194. package/dist/gemini/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  195. package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  196. package/dist/gemini/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  197. package/dist/gemini/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  198. package/dist/gemini/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  199. package/dist/gemini/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  200. package/dist/gemini/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  201. package/dist/gemini/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  202. package/dist/gemini/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  203. package/dist/gemini/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  204. package/dist/gemini/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  205. package/dist/gemini/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  206. package/dist/gemini/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  207. package/dist/gemini/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  208. package/dist/gemini/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  209. package/dist/gemini/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  210. package/dist/gemini/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  211. package/dist/gemini/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  212. package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  213. package/dist/gemini/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  214. package/dist/gemini/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  215. package/dist/gemini/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  216. package/dist/gemini/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  217. package/dist/gemini/AGENTS.md +89 -0
  218. package/dist/gemini/GEMINI.md +6 -0
  219. package/dist/index.js +975 -0
  220. package/dist/opencode/.agents/skills/jahia/SKILL.md +136 -0
  221. package/dist/opencode/.agents/skills/jahia-content/SKILL.md +139 -0
  222. package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
  223. package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
  224. package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
  225. package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
  226. package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
  227. package/dist/opencode/.agents/skills/jahia-dev/SKILL.md +124 -0
  228. package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
  229. package/dist/opencode/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
  230. package/dist/opencode/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
  231. package/dist/opencode/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
  232. package/dist/opencode/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  233. package/dist/opencode/.agents/skills/jahia-dev-apis/references/security.md +541 -0
  234. package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
  235. package/dist/opencode/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  236. package/dist/opencode/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  237. package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
  238. package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
  239. package/dist/opencode/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  240. package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  241. package/dist/opencode/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  242. package/dist/opencode/.agents/skills/jahia-dev-java/SKILL.md +105 -0
  243. package/dist/opencode/.agents/skills/jahia-dev-java/references/backend.md +331 -0
  244. package/dist/opencode/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
  245. package/dist/opencode/.agents/skills/jahia-dev-java/references/modules.md +218 -0
  246. package/dist/opencode/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
  247. package/dist/opencode/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
  248. package/dist/opencode/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  249. package/dist/opencode/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  250. package/dist/opencode/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  251. package/dist/opencode/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  252. package/dist/opencode/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  253. package/dist/opencode/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  254. package/dist/opencode/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  255. package/dist/opencode/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  256. package/dist/opencode/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  257. package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
  258. package/dist/opencode/.agents/skills/jahia-dev-review/SKILL.md +228 -0
  259. package/dist/opencode/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  260. package/dist/opencode/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
  261. package/dist/opencode/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  262. package/dist/opencode/AGENTS.md +89 -0
  263. package/dist/windsurf/.windsurf/rules/jahia.md +80 -0
  264. package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +136 -0
  265. package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +139 -0
  266. package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +384 -0
  267. package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +164 -0
  268. package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +236 -0
  269. package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +144 -0
  270. package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +297 -0
  271. package/dist/windsurf/.windsurf/skills/jahia-dev/SKILL.md +124 -0
  272. package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +271 -0
  273. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/SKILL.md +52 -0
  274. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/authentication.md +484 -0
  275. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/graphql.md +657 -0
  276. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/jcr-api.md +465 -0
  277. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/security.md +541 -0
  278. package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +140 -0
  279. package/dist/windsurf/.windsurf/skills/jahia-dev-create-page-template/SKILL.md +303 -0
  280. package/dist/windsurf/.windsurf/skills/jahia-dev-create-template-set/SKILL.md +232 -0
  281. package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +838 -0
  282. package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +445 -0
  283. package/dist/windsurf/.windsurf/skills/jahia-dev-debug/SKILL.md +176 -0
  284. package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +536 -0
  285. package/dist/windsurf/.windsurf/skills/jahia-dev-import-from/SKILL.md +244 -0
  286. package/dist/windsurf/.windsurf/skills/jahia-dev-java/SKILL.md +105 -0
  287. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/backend.md +331 -0
  288. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/content-types.md +273 -0
  289. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/modules.md +218 -0
  290. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/osgi.md +208 -0
  291. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/rendering.md +191 -0
  292. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/ui-extensions.md +344 -0
  293. package/dist/windsurf/.windsurf/skills/jahia-dev-jexperience/SKILL.md +269 -0
  294. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/SKILL.md +50 -0
  295. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/docker.md +151 -0
  296. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/monitoring.md +195 -0
  297. package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/provisioning.md +269 -0
  298. package/dist/windsurf/.windsurf/skills/jahia-dev-osgi-module/SKILL.md +297 -0
  299. package/dist/windsurf/.windsurf/skills/jahia-dev-properties/SKILL.md +147 -0
  300. package/dist/windsurf/.windsurf/skills/jahia-dev-properties/references/all-properties.md +231 -0
  301. package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +407 -0
  302. package/dist/windsurf/.windsurf/skills/jahia-dev-review/SKILL.md +228 -0
  303. package/dist/windsurf/.windsurf/skills/jahia-dev-screenshot/SKILL.md +177 -0
  304. package/dist/windsurf/.windsurf/skills/jahia-dev-start-local/SKILL.md +129 -0
  305. package/dist/windsurf/.windsurf/skills/jahia-dev-ui-extension/SKILL.md +559 -0
  306. package/dist/windsurf/AGENTS.md +89 -0
  307. package/package.json +28 -0
@@ -0,0 +1,297 @@
1
+ ---
2
+ name: jahia-content-translate-content
3
+ description: Adds language support to a Jahia site and translates existing content nodes. Use when asked to add a new language, fill in missing translations, or audit which content lacks i18n values.
4
+ ---
5
+
6
+ # Skill: jahia-content-translate-content
7
+
8
+ Adds languages to a Jahia site and populates i18n properties on existing content nodes via the GraphQL API.
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
+ **Always include both auth flags:**
19
+ ```bash
20
+ curl -s -u root:root1234 \
21
+ -H "Content-Type: application/json" \
22
+ -H "Origin: http://localhost:8080" \
23
+ -X POST http://localhost:8080/modules/graphql \
24
+ -d '{"query": "..."}'
25
+ ```
26
+
27
+ > ⚠️ The `Origin` header is **required** — omitting it returns `Permission denied`.
28
+
29
+ ---
30
+
31
+ ## Step 1 — Enable the new language on the site
32
+
33
+ Before creating or querying translations, the language must be declared on the site node.
34
+
35
+ ```bash
36
+ # Check currently enabled languages
37
+ curl -s -u root:root1234 \
38
+ -H "Content-Type: application/json" \
39
+ -H "Origin: http://localhost:8080" \
40
+ -X POST http://localhost:8080/modules/graphql \
41
+ -d '{
42
+ "query": "{ jcr { nodeByPath(path: \"/sites/mySite\") { properties(names: [\"j:languages\",\"j:defaultLanguage\"]) { name values } } } }"
43
+ }'
44
+
45
+ # Add a language (e.g. "fr") — use setPropertiesBatch with the full new list
46
+ curl -s -u root:root1234 \
47
+ -H "Content-Type: application/json" \
48
+ -H "Origin: http://localhost:8080" \
49
+ -X POST http://localhost:8080/modules/graphql \
50
+ -d '{
51
+ "query": "mutation { jcr { mutateNode(pathOrId: \"/sites/mySite\") { setPropertiesBatch(properties: [{name: \"j:languages\", values: [\"en\", \"fr\"]}]) { path } } } }"
52
+ }'
53
+ ```
54
+
55
+ > ⚠️ `j:languages` is a multi-valued property — always pass the **complete** list of languages, not just the new one. Passing only `["fr"]` would remove `"en"`.
56
+
57
+ ---
58
+
59
+ ## Step 2 — Audit content missing translations
60
+
61
+ Query all i18n-bearing nodes and inspect which ones have empty values for the target language:
62
+
63
+ ```bash
64
+ # Find all content nodes under /sites/mySite/contents
65
+ curl -s -u root:root1234 \
66
+ -H "Content-Type: application/json" \
67
+ -H "Origin: http://localhost:8080" \
68
+ -X POST http://localhost:8080/modules/graphql \
69
+ -d '{
70
+ "query": "{ jcr { nodesByQuery(query: \"SELECT * FROM [jmix:i18n] WHERE ISDESCENDANTNODE(\u0027/sites/mySite/contents\u0027) ORDER BY [jcr:path] ASC\", queryLanguage: SQL2) { nodes { path primaryNodeType { name } properties(language: \"fr\") { name value } } } } }"
71
+ }'
72
+ ```
73
+
74
+ Or query a specific content type:
75
+
76
+ ```bash
77
+ curl -s -u root:root1234 \
78
+ -H "Content-Type: application/json" \
79
+ -H "Origin: http://localhost:8080" \
80
+ -X POST http://localhost:8080/modules/graphql \
81
+ -d '{
82
+ "query": "{ jcr { nodesByQuery(query: \"SELECT * FROM [namespace:article] WHERE ISDESCENDANTNODE(\u0027/sites/mySite/contents\u0027)\", queryLanguage: SQL2) { nodes { path properties(language: \"fr\") { name value } } } } }"
83
+ }'
84
+ ```
85
+
86
+ Look for nodes where i18n fields (`jcr:title`, `body`, etc.) have empty or null `value`.
87
+
88
+ ---
89
+
90
+ ## Step 3 — Set i18n properties
91
+
92
+ ### Single node
93
+
94
+ ```bash
95
+ curl -s -u root:root1234 \
96
+ -H "Content-Type: application/json" \
97
+ -H "Origin: http://localhost:8080" \
98
+ -X POST http://localhost:8080/modules/graphql \
99
+ -d '{
100
+ "query": "mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles/my-article\") { setPropertiesBatch(properties: [{name: \"jcr:title\", value: \"Mon article\", language: \"fr\"}, {name: \"body\", value: \"<p>Contenu ici</p>\", language: \"fr\"}]) { path } } } }"
101
+ }'
102
+ ```
103
+
104
+ > ⚠️ Use `setPropertiesBatch` (plural), not `setProperty` (singular — does not exist in the Jahia GraphQL API).
105
+
106
+ ### Critical ordering rule
107
+
108
+ When a content type has **mandatory** i18n fields (other than `jcr:title`), set those **before** `jcr:title`. Setting `jcr:title` first can trigger a constraint check before all mandatory fields are present.
109
+
110
+ The safe pattern — set all mandatory i18n fields in a single `setPropertiesBatch` call:
111
+
112
+ ```bash
113
+ curl -s -u root:root1234 \
114
+ -H "Content-Type: application/json" \
115
+ -H "Origin: http://localhost:8080" \
116
+ -X POST http://localhost:8080/modules/graphql \
117
+ -d '{
118
+ "query": "mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles/my-article\") { setPropertiesBatch(properties: [{name: \"body\", value: \"<p>Contenu ici</p>\", language: \"fr\"}, {name: \"jcr:title\", value: \"Mon article\", language: \"fr\"}]) { path } } } }"
119
+ }'
120
+ ```
121
+
122
+ ---
123
+
124
+ ## Step 4 — Bulk translation with Python
125
+
126
+ For translating many nodes at once:
127
+
128
+ ```python
129
+ import json
130
+ from urllib.request import Request, urlopen
131
+
132
+ JAHIA = "http://localhost:8080"
133
+ AUTH = ("root", "root1234")
134
+
135
+ import base64
136
+ token = base64.b64encode(f"{AUTH[0]}:{AUTH[1]}".encode()).decode()
137
+ HEADERS = {
138
+ "Content-Type": "application/json",
139
+ "Origin": JAHIA,
140
+ "Authorization": f"Basic {token}",
141
+ }
142
+
143
+ def gql(query):
144
+ body = json.dumps({"query": query}).encode()
145
+ req = Request(f"{JAHIA}/modules/graphql", data=body, headers=HEADERS, method="POST")
146
+ with urlopen(req) as r:
147
+ d = json.loads(r.read())
148
+ if "errors" in d:
149
+ print("ERR:", d["errors"][0]["message"][:120])
150
+ return d
151
+
152
+ # 1. List all articles missing French title
153
+ result = gql(
154
+ '{ jcr { nodesByQuery(query: "SELECT * FROM [namespace:article] '
155
+ "WHERE ISDESCENDANTNODE('/sites/mySite/contents') "
156
+ 'ORDER BY [jcr:path] ASC", queryLanguage: SQL2) '
157
+ '{ nodes { path properties(language: "fr") { name value } } } } }'
158
+ )
159
+
160
+ nodes = result["data"]["jcr"]["nodesByQuery"]["nodes"]
161
+ missing_fr = [
162
+ n["path"]
163
+ for n in nodes
164
+ if not any(p["name"] == "jcr:title" and p["value"] for p in n["properties"])
165
+ ]
166
+
167
+ # 2. Set French translations (replace with actual translated values)
168
+ translations = {
169
+ "/sites/mySite/contents/articles/article-1": ("Titre FR 1", "<p>Corps FR 1</p>"),
170
+ "/sites/mySite/contents/articles/article-2": ("Titre FR 2", "<p>Corps FR 2</p>"),
171
+ }
172
+
173
+ for path, (title, body) in translations.items():
174
+ r = gql(
175
+ f'mutation {{ jcr {{ mutateNode(pathOrId: "{path}") {{'
176
+ f' setPropertiesBatch(properties: ['
177
+ f' {{name: "body", value: {json.dumps(body)}, language: "fr"}},'
178
+ f' {{name: "jcr:title", value: {json.dumps(title)}, language: "fr"}}'
179
+ f' ]) {{ path }} }} }} }}'
180
+ )
181
+ ok = "errors" not in r
182
+ print(f" {'✓' if ok else '✗'} {path.split('/')[-1]}")
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Step 5 — Choicelist fields and view-level translations
188
+
189
+ ### Choicelist fields should NOT be i18n
190
+
191
+ If a CND property uses a choicelist (e.g. `category`, `status`), its stored values are language-agnostic keys like `"featured"` or `"draft"`. The display label is translated **in the view**, not in the JCR.
192
+
193
+ ```tsx
194
+ // In the view component — translate the stored key to a display label
195
+ const STATUS_LABELS: Record<string, Record<string, string>> = {
196
+ en: { featured: "Featured", draft: "Draft" },
197
+ fr: { featured: "En vedette", draft: "Brouillon" },
198
+ };
199
+
200
+ const lang = renderContext.getMainResourceLocale().getLanguage();
201
+ const statusKey = properties.status as string;
202
+ const statusLabel = STATUS_LABELS[lang]?.[statusKey] ?? statusKey;
203
+ ```
204
+
205
+ Do **not** add `i18n` to the CND property for choicelists — the key should be the same in all languages.
206
+
207
+ ### Hardcoded UI strings
208
+
209
+ View-level strings that are not stored in JCR (button labels, headings, placeholder text) need locale-keyed label maps in the component:
210
+
211
+ ```tsx
212
+ const LABELS = {
213
+ en: { readMore: "Read more", by: "By" },
214
+ fr: { readMore: "Lire la suite", by: "Par" },
215
+ };
216
+
217
+ const t = LABELS[renderContext.getMainResourceLocale().getLanguage()] ?? LABELS.en;
218
+ // Usage: <a>{t.readMore}</a>
219
+ ```
220
+
221
+ ---
222
+
223
+ ## Step 6 — Clean up orphaned translation nodes
224
+
225
+ When you remove the `i18n` flag from a CND property (or delete a language from the site), orphaned `j:translation_XX` child nodes may remain. Inspect and remove them if needed:
226
+
227
+ ```bash
228
+ # Find translation sub-nodes for a content node
229
+ curl -s -u root:root1234 \
230
+ -H "Content-Type: application/json" \
231
+ -H "Origin: http://localhost:8080" \
232
+ -X POST http://localhost:8080/modules/graphql \
233
+ -d '{
234
+ "query": "{ jcr { nodeByPath(path: \"/sites/mySite/contents/articles/my-article\") { children { nodes { name primaryNodeType { name } } } } } }"
235
+ }'
236
+
237
+ # Delete an orphaned translation node
238
+ curl -s -u root:root1234 \
239
+ -H "Content-Type: application/json" \
240
+ -H "Origin: http://localhost:8080" \
241
+ -X POST http://localhost:8080/modules/graphql \
242
+ -d '{
243
+ "query": "mutation { jcr { deleteNode(pathOrId: \"/sites/mySite/contents/articles/my-article/j:translation_fr\") }"
244
+ }'
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Step 7 — Publish translations
250
+
251
+ After setting i18n properties, republish to make them live:
252
+
253
+ ```bash
254
+ # Publish a single node for a specific language
255
+ curl -s -u root:root1234 \
256
+ -H "Content-Type: application/json" \
257
+ -H "Origin: http://localhost:8080" \
258
+ -X POST http://localhost:8080/modules/graphql \
259
+ -d '{
260
+ "query": "mutation { jcr { mutateNode(pathOrId: \"/sites/mySite/contents/articles/my-article\") { publish(languages: [\"fr\"]) } } }"
261
+ }'
262
+
263
+ # Publish all articles in both languages
264
+ curl -s -u root:root1234 \
265
+ -H "Content-Type: application/json" \
266
+ -H "Origin: http://localhost:8080" \
267
+ -X POST http://localhost:8080/modules/graphql \
268
+ -d '{
269
+ "query": "mutation { jcr { mutateNodesByQuery(query: \"SELECT * FROM [namespace:article] WHERE ISDESCENDANTNODE(\u0027/sites/mySite/contents\u0027)\", queryLanguage: SQL2) { publish(languages: [\"en\", \"fr\"]) } } }"
270
+ }'
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Common errors
276
+
277
+ | Error | Cause | Fix |
278
+ |-------|-------|-----|
279
+ | `Permission denied` | Missing `Origin` header | Add `-H "Origin: http://localhost:8080"` |
280
+ | i18n property returned empty after set | Missing `language:` in `properties()` query | Add `language: "fr"` to read call |
281
+ | `ConstraintViolationException` on title set | Mandatory i18n field not set first | Use `setPropertiesBatch` with all mandatory fields in one call |
282
+ | Language not appearing in site | `j:languages` mutation only had the new language | Pass the full list: `["en", "fr"]` |
283
+ | Choicelist key changed per language | Property incorrectly declared `i18n` in CND | Remove `i18n` from the CND property; translate keys in the view |
284
+
285
+ ---
286
+
287
+ ## Workflow summary
288
+
289
+ ```
290
+ 1. Enable language → mutateNode j:languages with full list
291
+ 2. Audit → nodesByQuery with properties(language: "XX") to find gaps
292
+ 3. Translate → setPropertiesBatch with language: "XX" for each i18n field
293
+ 4. View strings → add locale-keyed label maps in .server.tsx
294
+ 5. Choicelists → translate keys in the view, not the JCR
295
+ 6. Publish → publish(languages: ["XX"]) for all affected nodes
296
+ 7. Verify → query back with language: "XX" to confirm values
297
+ ```
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: jahia-dev
3
+ description: Entry point for Jahia JavaScript module development. Detects your project state and tells you what to do next. Start here if you are new to the project or unsure what skill to use.
4
+ ---
5
+
6
+ # Jahia Dev — Project GPS
7
+
8
+ You are the entry point for Jahia JavaScript module development. Your job is to assess the current project state and guide the user to the right next skill.
9
+
10
+ ## Step 1 — Detect project state
11
+
12
+ Run all checks in parallel.
13
+
14
+ ### 1. Module exists?
15
+
16
+ Search for a `package.json` that references `@jahia/javascript-modules-library` in the current directory or subdirectories:
17
+
18
+ ```bash
19
+ find . -name "package.json" -not -path "*/node_modules/*" | xargs grep -l "@jahia/javascript-modules-library" 2>/dev/null | head -5
20
+ ```
21
+
22
+ - Found → record the module name (from the `name` field in that `package.json`)
23
+ - Not found → module does not exist yet
24
+
25
+ ### 2. Jahia running?
26
+
27
+ ```bash
28
+ curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/cms/login
29
+ ```
30
+
31
+ - `200` → Jahia is running at `http://localhost:8080`
32
+ - Anything else → Jahia is not running
33
+
34
+ ### 3. Content types defined?
35
+
36
+ ```bash
37
+ find src/components -name "definition.cnd" 2>/dev/null | wc -l
38
+ ```
39
+
40
+ Record the count of `.cnd` files found under `src/components`.
41
+
42
+ ### 4. Views defined?
43
+
44
+ ```bash
45
+ find src/components -name "*.server.tsx" -o -name "*.client.tsx" 2>/dev/null | wc -l
46
+ ```
47
+
48
+ Record the count of view files found.
49
+
50
+ ### 5. Page templates defined?
51
+
52
+ ```bash
53
+ find src/templates/Page -type f 2>/dev/null | wc -l
54
+ ```
55
+
56
+ Record the count of files in `src/templates/Page/`. More than 1 means custom templates exist (the default `index.server.tsx` is always present).
57
+
58
+ ---
59
+
60
+ ## Step 2 — Report project state to user
61
+
62
+ Print a clear, scannable status summary:
63
+
64
+ ```
65
+ 📦 Module: ✅ <module-name> (found) OR ❌ not found
66
+ 🐳 Jahia: ✅ running at http://localhost:8080 OR ❌ not running
67
+ 📋 Content types: <N> defined
68
+ 🖼 Views: <N> defined
69
+ 📄 Page templates: <N> defined
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Step 3 — Recommend next action
75
+
76
+ Use the matrix below to pick exactly one recommendation to highlight:
77
+
78
+ | Condition | Recommendation |
79
+ |-----------|---------------|
80
+ | No module found | 🚀 **Start here:** invoke `/jahia-dev-create-template-set` to scaffold a new Jahia JavaScript module. |
81
+ | Module found, Jahia not running | 🐳 Your module is ready. Invoke `/jahia-dev-start-local` to start Jahia locally (Docker recommended). |
82
+ | Module + Jahia running, 0 content types | 🎯 Jahia is running! Time to build your first component. Invoke `/jahia-dev-build-component` to create a content type + view. |
83
+ | Module + Jahia running, content types exist, ≤1 page template | 📐 You have components. Invoke `/jahia-dev-create-page-template` to create a page template and start assembling pages. |
84
+ | Module + Jahia running, templates exist (>1) | 🏗 Your module is taking shape! Choose what to do next (see options below). |
85
+
86
+ When the last condition applies, present all options:
87
+
88
+ ```
89
+ 🏗 Your module is taking shape! What would you like to do next?
90
+ - Add a new component → /jahia-dev-build-component
91
+ - Create a content listing → /jahia-dev-query-content
92
+ - Review your code for issues → /jahia-dev-review
93
+ - Screenshot a reference site → /jahia-dev-screenshot
94
+ - Create a new page template → /jahia-dev-create-page-template
95
+ - Clean up boilerplate → run /jahia-dev-review and look for S10
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Step 4 — Print the full skill map
101
+
102
+ Always print this at the end so the user can navigate anywhere:
103
+
104
+ ```
105
+ ## Jahia Development Skills
106
+
107
+ ### Setup
108
+ /jahia-dev-create-template-set Scaffold a new JS/React module
109
+ /jahia-dev-start-local Start Jahia locally (Docker or bare metal)
110
+
111
+ ### Building
112
+ /jahia-dev-build-component Build a complete component (content type + view) ← start here
113
+ /jahia-dev-define-content-type Define a CND content type and types.ts
114
+ /jahia-dev-create-view Implement a React view (.server.tsx or .client.tsx Island)
115
+ /jahia-dev-create-page-template Create a page template with Areas
116
+
117
+ ### Content
118
+ /jahia-dev-query-content Query JCR content with JCR-SQL2 or useJCRQuery
119
+
120
+ ### Quality
121
+ /jahia-dev-review Review code for Jahia and generic best practices
122
+ /jahia-dev-screenshot Screenshot reference URL + Jahia render for visual comparison
123
+ /jahia-dev-debug Debug build/deploy/runtime errors end-to-end
124
+ ```
@@ -0,0 +1,271 @@
1
+ ---
2
+ name: jahia-dev-accessibility
3
+ description: Audits a Jahia JS module for WCAG 2.1 AA accessibility violations using axe-core and Playwright. Runs automated checks against all live pages, reports violations by severity, and fixes them in the React views and CSS. Invoke after building components or before final review.
4
+ allowed-tools: Bash, Read, Write, Edit
5
+ ---
6
+
7
+ # Skill: jahia-dev-accessibility
8
+
9
+ Runs a live accessibility audit against all published pages of the site, reports violations, and fixes them in the source code.
10
+
11
+ ---
12
+
13
+ ## Step 1 — Confirm pages are live
14
+
15
+ You need the list of public page URLs. Look for `pages.json` in the module root first:
16
+
17
+ ```bash
18
+ cat pages.json 2>/dev/null || echo "not found"
19
+ ```
20
+
21
+ If absent, derive URLs from the site structure or ask the user. All pages must be accessible at `http://localhost:8080`.
22
+
23
+ ---
24
+
25
+ ## Step 2 — Install audit tooling
26
+
27
+ Check if `@axe-core/playwright` and `playwright` are available:
28
+
29
+ ```bash
30
+ node -e "require('@axe-core/playwright'); require('playwright'); console.log('ok')" 2>/dev/null || echo "missing"
31
+ ```
32
+
33
+ If missing, install temporarily (project-local, not committed):
34
+
35
+ ```bash
36
+ npm install --no-save @axe-core/playwright playwright
37
+ npx playwright install chromium --with-deps
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Step 3 — Run the audit
43
+
44
+ Save this script as `/tmp/a11y-audit.mjs` and run it:
45
+
46
+ ```js
47
+ import { chromium } from "playwright";
48
+ import { AxeBuilder } from "@axe-core/playwright";
49
+ import { readFileSync } from "fs";
50
+
51
+ const urls = JSON.parse(readFileSync("pages.json", "utf-8"));
52
+
53
+ const browser = await chromium.launch({ args: ["--no-sandbox"] });
54
+ const page = await browser.newPage();
55
+
56
+ for (const url of urls) {
57
+ console.log(`\n${"=".repeat(60)}\nAuditing: ${url}\n${"=".repeat(60)}`);
58
+ await page.goto(url, { waitUntil: "networkidle", timeout: 30_000 });
59
+
60
+ const results = await new AxeBuilder({ page })
61
+ .withTags(["wcag2a", "wcag2aa", "wcag21aa"])
62
+ .analyze();
63
+
64
+ if (results.violations.length === 0) {
65
+ console.log("✅ No violations found.");
66
+ continue;
67
+ }
68
+
69
+ for (const v of results.violations) {
70
+ console.log(`\n[${v.impact?.toUpperCase()}] ${v.id}: ${v.description}`);
71
+ console.log(`Help: ${v.helpUrl}`);
72
+ for (const node of v.nodes) {
73
+ console.log(` Target: ${node.target.join(" > ")}`);
74
+ console.log(` HTML: ${node.html}`);
75
+ if (node.failureSummary) {
76
+ console.log(` Fix: ${node.failureSummary}`);
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ await browser.close();
83
+ ```
84
+
85
+ ```bash
86
+ node /tmp/a11y-audit.mjs 2>&1 | tee /tmp/a11y-report.txt
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Step 4 — Interpret results
92
+
93
+ Group violations by impact. Focus on `critical` and `serious` first — they contribute most to a poor score.
94
+
95
+ Common violations in Jahia JS modules and their fixes:
96
+
97
+ ### 🔴 Critical / Serious
98
+
99
+ **`color-contrast`** — text fails WCAG AA contrast ratio (4.5:1 for normal text, 3:1 for large text)
100
+ ```css
101
+ /* Bad */
102
+ color: #aaa; background: #fff;
103
+
104
+ /* Fix — use a contrast checker: https://webaim.org/resources/contrastchecker/ */
105
+ color: #595959; /* 7:1 ratio on white */
106
+ ```
107
+
108
+ **`image-alt`** — `<img>` missing `alt` attribute
109
+ ```tsx
110
+ /* Bad */
111
+ <img src={buildNodeUrl(props.image)} />
112
+
113
+ /* Fix — use content from CND, fall back to empty string for decorative */
114
+ <img src={buildNodeUrl(props.image)} alt={props.imageAlt ?? ""} />
115
+ ```
116
+ Add `- imageAlt (string) i18n` to the CND and `imageAlt?: string` to `types.ts`.
117
+
118
+ **`button-name`** — `<button>` or `<a>` is empty (icon-only without label)
119
+ ```tsx
120
+ /* Bad */
121
+ <button><svg>...</svg></button>
122
+
123
+ /* Fix */
124
+ <button aria-label="Open menu"><svg aria-hidden="true">...</svg></button>
125
+ ```
126
+
127
+ **`landmark-one-main`** — page has no `<main>` landmark
128
+ ```tsx
129
+ /* Fix — wrap page content in <main> */
130
+ <main id="main-content">
131
+ {/* page content */}
132
+ </main>
133
+ ```
134
+
135
+ **`page-has-heading-one`** — page has no `<h1>` element
136
+ ```tsx
137
+ /* Fix — ensure the hero or first section renders an <h1> */
138
+ <h1>{props.title}</h1>
139
+ ```
140
+
141
+ **`link-name`** — `<a>` with no accessible text
142
+ ```tsx
143
+ /* Bad */
144
+ <a href={url}><img src="..." /></a>
145
+
146
+ /* Fix */
147
+ <a href={url}><img src="..." alt={props.linkLabel ?? "Learn more"} /></a>
148
+ ```
149
+
150
+ ### 🟡 Moderate
151
+
152
+ **`heading-order`** — headings skip levels (e.g. `<h1>` → `<h3>`)
153
+ ```tsx
154
+ /* Review: the first heading in a component should be h2 (after the page h1) */
155
+ /* Section titles: h2, subsections: h3 */
156
+ ```
157
+
158
+ **`region`** — content is outside landmark regions
159
+ Wrap page sections in semantic elements: `<header>`, `<nav>`, `<main>`, `<footer>`, `<section aria-label="...">`.
160
+
161
+ **`list`** — `<ul>` or `<ol>` contains elements other than `<li>`
162
+ ```tsx
163
+ /* Bad */
164
+ <ul>
165
+ <div>item</div>
166
+ </ul>
167
+
168
+ /* Fix */
169
+ <ul>
170
+ <li>item</li>
171
+ </ul>
172
+ ```
173
+
174
+ **`html-has-lang`** — `<html>` element missing `lang` attribute
175
+ This is set at the page template level. Verify the template registered in `src/templates/` includes `lang`:
176
+ ```tsx
177
+ /* In the page template */
178
+ <html lang={currentLanguage ?? "en"}>
179
+ ```
180
+ Jahia provides the language via `useServerContext()`:
181
+ ```tsx
182
+ import { useServerContext } from "@jahia/javascript-modules-library";
183
+ const { currentLanguage } = useServerContext();
184
+ ```
185
+
186
+ **`aria-required-children`** — ARIA role is missing required children
187
+ Avoid misusing ARIA roles. Prefer native HTML elements (`<ul>/<li>`, `<table>/<tr>/<td>`).
188
+
189
+ ---
190
+
191
+ ## Step 5 — Fix in source
192
+
193
+ For each violation:
194
+
195
+ 1. Identify the component: match `node.target` HTML to a `.server.tsx` file
196
+ 2. Edit the view to apply the fix
197
+ 3. If the fix requires a new CND field (e.g. `imageAlt`), update `definition.cnd` and `types.ts`
198
+ 4. Run `yarn build && yarn jahia-deploy`
199
+
200
+ After all fixes:
201
+
202
+ ```bash
203
+ # Re-run the audit to verify violations are resolved
204
+ node /tmp/a11y-audit.mjs 2>&1 | grep -E "(CRITICAL|SERIOUS|MODERATE|No violations)"
205
+ ```
206
+
207
+ Iterate until only `minor` violations remain (or none).
208
+
209
+ ---
210
+
211
+ ## Step 6 — Proactive checks beyond axe-core
212
+
213
+ axe-core catches ~30–40% of WCAG issues automatically. Also check manually:
214
+
215
+ - **Keyboard navigation**: can every interactive element (link, button, form field) be reached with Tab?
216
+ - **Focus indicators**: is `:focus` visible on all interactive elements?
217
+ ```css
218
+ /* Ensure focus ring is never suppressed globally */
219
+ /* Bad */
220
+ * { outline: none; }
221
+ /* Fix — use :focus-visible */
222
+ :focus-visible { outline: 2px solid #0969da; outline-offset: 2px; }
223
+ ```
224
+ - **Skip link**: add a "Skip to main content" link as the first focusable element
225
+ ```tsx
226
+ <a href="#main-content" className={styles.skipLink}>Skip to main content</a>
227
+ ```
228
+ ```css
229
+ .skipLink {
230
+ position: absolute;
231
+ top: -100%;
232
+ left: 0;
233
+ background: #000;
234
+ color: #fff;
235
+ padding: 8px 16px;
236
+ z-index: 999;
237
+ }
238
+ .skipLink:focus { top: 0; }
239
+ ```
240
+ - **Motion**: if any CSS animation exists, wrap it in `@media (prefers-reduced-motion: no-preference)`
241
+ - **Touch targets**: interactive elements should be at least 44×44px
242
+
243
+ ---
244
+
245
+ ## Step 7 — Report summary
246
+
247
+ After fixing, report:
248
+
249
+ ```
250
+ ## Accessibility Audit Summary
251
+
252
+ Pages audited: N
253
+ Violations fixed:
254
+ - [critical] color-contrast: 3 instances → fixed (updated CSS contrast ratios)
255
+ - [serious] image-alt: 2 instances → fixed (added imageAlt CND field)
256
+ - [serious] button-name: 1 instance → fixed (added aria-label to icon button)
257
+ - [moderate] heading-order: 2 instances → fixed (restructured h2/h3 hierarchy)
258
+
259
+ Remaining violations: N (all minor / informational)
260
+
261
+ Axe tags checked: wcag2a, wcag2aa, wcag21aa
262
+ ```
263
+
264
+ ---
265
+
266
+ ## References
267
+
268
+ - WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
269
+ - axe-core rules: https://dequeuniversity.com/rules/axe/
270
+ - WCAG 2.1 Quick Ref: https://www.w3.org/WAI/WCAG21/quickref/
271
+ - MDN ARIA: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA