@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,269 @@
1
+ # Jahia Provisioning Reference
2
+
3
+ ## Provisioning API overview
4
+
5
+ The Jahia Provisioning API (introduced in DX 8.x) executes YAML scripts that
6
+ install modules, create sites, configure OSGi services, and seed JCR content.
7
+ Scripts can be:
8
+
9
+ - Placed in `/var/jahia/patches/` — executed automatically at startup.
10
+ - POSTed to the REST endpoint: `POST /modules/api/provisioning`.
11
+
12
+ ## REST endpoint
13
+
14
+ ```
15
+ POST /modules/api/provisioning
16
+ Authorization: Basic <base64(root:password)>
17
+ Content-Type: application/yaml (or multipart/form-data)
18
+
19
+ <provisioning script body>
20
+ ```
21
+
22
+ ### Upload via curl
23
+
24
+ ```bash
25
+ curl -u root:changeme \
26
+ -X POST \
27
+ -H "Content-Type: application/yaml" \
28
+ --data-binary @my-script.yaml \
29
+ http://localhost:8080/modules/api/provisioning
30
+ ```
31
+
32
+ ### Upload via multipart (with file)
33
+
34
+ ```bash
35
+ curl -u root:changeme \
36
+ -F "script=@my-script.yaml" \
37
+ http://localhost:8080/modules/api/provisioning
38
+ ```
39
+
40
+ ## Script structure
41
+
42
+ ```yaml
43
+ # provisioning-script.yaml
44
+ - installOrUpgradeModules:
45
+ - url: "mvn:org.jahia.modules/article/3.5.0"
46
+ - url: "file:///var/jahia/modules/my-custom-module-1.0.jar"
47
+
48
+ - createSite: ""
49
+ siteKey: mySite
50
+ title: "My Site"
51
+ defaultLanguage: en
52
+ serverName: localhost
53
+ templateSet: my-template-set
54
+
55
+ - importSite:
56
+ siteKey: mySite
57
+ uri: "file:///var/jahia/imports/mySite-export.zip"
58
+ ```
59
+
60
+ ## Common provisioning operations
61
+
62
+ ### Install / upgrade a module from Maven
63
+
64
+ ```yaml
65
+ - installOrUpgradeModules:
66
+ - url: "mvn:org.jahia.modules/bootstrap4-core/4.0.0"
67
+ - url: "mvn:org.jahia.modules/bootstrap4-components/4.0.0"
68
+ ```
69
+
70
+ ### Install from a local file
71
+
72
+ ```yaml
73
+ - installOrUpgradeModules:
74
+ - url: "file:///var/jahia/modules/my-module-1.0.jar"
75
+ ```
76
+
77
+ ### Enable / start a module
78
+
79
+ ```yaml
80
+ - startModules:
81
+ - name: my-module
82
+ ```
83
+
84
+ ### Disable / stop a module
85
+
86
+ ```yaml
87
+ - stopModules:
88
+ - name: my-module
89
+ ```
90
+
91
+ ### Uninstall a module
92
+
93
+ ```yaml
94
+ - uninstallModules:
95
+ - name: my-module
96
+ ```
97
+
98
+ ### Create a virtual site
99
+
100
+ > ⚠️ **CRITICAL — Jahia 8.2 syntax**: use `- createSite: ""` with properties at the **same indentation level**. There are **two common mistakes that both silently return HTTP 200 but create nothing**:
101
+ > - ❌ `- createSite:` with nested properties (missing `""`)
102
+ > - ❌ `- createVirtualSite:` (old name, no longer valid)
103
+ >
104
+ > **Always use a file-based approach** to avoid shell quoting issues:
105
+
106
+ ```bash
107
+ cat > /tmp/create-site.yaml <<'EOF'
108
+ - createSite: ""
109
+ siteKey: acme
110
+ title: "ACME Corp"
111
+ defaultLanguage: en
112
+ serverName: localhost
113
+ templateSet: acme-template-set
114
+ EOF
115
+
116
+ curl -u root:root1234 -X POST -H "Content-Type: application/yaml" \
117
+ --data-binary @/tmp/create-site.yaml \
118
+ http://localhost:8080/modules/api/provisioning
119
+ ```
120
+
121
+ The API returns `HTTP 200` with an empty body. **Always verify** the site was created — HTTP 200 is not sufficient confirmation:
122
+
123
+ ```bash
124
+ curl -s -u root:root1234 \
125
+ -H "Content-Type: application/json" -H "Origin: http://localhost:8080" \
126
+ -X POST http://localhost:8080/modules/graphql \
127
+ -d '{"query":"{ jcr { nodeByPath(path: \"/sites/acme\") { name } } }"}'
128
+ ```
129
+
130
+ If the response contains `"name": "acme"`, the site exists. If it returns `null`, the site was not created — recheck the YAML format.
131
+
132
+ ### Delete a virtual site
133
+
134
+ ```bash
135
+ curl -u root:root1234 \
136
+ -X POST \
137
+ -H "Content-Type: application/yaml" \
138
+ --data-binary '- deleteSite: ""
139
+ siteKey: acme' \
140
+ http://localhost:8080/modules/api/provisioning
141
+ ```
142
+
143
+ ### Import a site export ZIP
144
+
145
+ ```yaml
146
+ - importSite:
147
+ siteKey: acme
148
+ uri: "file:///var/jahia/imports/acme-export.zip"
149
+ rootUsersGroup: site-admins
150
+ ```
151
+
152
+ ### Execute a Groovy script
153
+
154
+ ```yaml
155
+ - executeScript:
156
+ script: "file:///var/jahia/patches/migrate-content.groovy"
157
+ ```
158
+
159
+ Or inline:
160
+
161
+ ```yaml
162
+ - executeScript:
163
+ scriptContent: |
164
+ import org.jahia.services.content.*
165
+ def session = JCRSessionFactory.getInstance().getCurrentSystemSession("default", null, null)
166
+ // ... do work ...
167
+ session.save()
168
+ ```
169
+
170
+ ### Set a system property / OSGi configuration
171
+
172
+ ```yaml
173
+ - setSystemProperty:
174
+ name: my.custom.property
175
+ value: "my-value"
176
+ ```
177
+
178
+ ```yaml
179
+ - setOsgiConfiguration:
180
+ pid: "org.jahia.services.content.nodetypes.NodeTypeRegistry"
181
+ properties:
182
+ autoDeployBundles: "true"
183
+ ```
184
+
185
+ ### Add a user
186
+
187
+ ```yaml
188
+ - addUser:
189
+ username: john.doe
190
+ password: secret123
191
+ email: john.doe@example.com
192
+ firstName: John
193
+ lastName: Doe
194
+ roles:
195
+ - site-administrator:acme
196
+ ```
197
+
198
+ ### Grant a role on a node
199
+
200
+ ```yaml
201
+ - grantRoles:
202
+ path: /sites/acme
203
+ principal: "u:john.doe"
204
+ roles:
205
+ - site-administrator
206
+ ```
207
+
208
+ ## Patches directory
209
+
210
+ Files placed in `/var/jahia/patches/` are executed **once** at startup
211
+ (Jahia records which files have already been applied):
212
+
213
+ ```
214
+ /var/jahia/patches/
215
+ cfg/ ← OSGi .cfg files
216
+ spring/ ← Spring XML context overrides
217
+ groovy/ ← Groovy scripts (executed once)
218
+ yaml/ ← Provisioning YAML scripts (executed once)
219
+ ```
220
+
221
+ Mount a host directory here to inject patches without rebuilding the image:
222
+
223
+ ```yaml
224
+ volumes:
225
+ - ./patches:/var/jahia/patches
226
+ ```
227
+
228
+ ## Execution order and idempotency
229
+
230
+ - Provisioning YAML scripts in `patches/yaml/` are sorted alphabetically.
231
+ Prefix filenames with a two-digit index (`01-modules.yaml`, `02-sites.yaml`)
232
+ to control order.
233
+ - Most operations are idempotent: `installOrUpgradeModules` skips if the exact
234
+ version is already installed; `createVirtualSite` skips if the site key exists.
235
+ - Groovy scripts in `patches/groovy/` run exactly once; rename the file to
236
+ force re-execution.
237
+
238
+ ## Checking provisioning status
239
+
240
+ ```bash
241
+ # View provisioning log output (appears in jahia.log)
242
+ docker compose exec jahia grep -i "provisioning\|install.*module\|createVirtualSite" /var/log/jahia/jahia.log
243
+
244
+ # List applied patches via Karaf
245
+ ssh -p 7770 karaf@localhost
246
+ # In Karaf:
247
+ jahia:patches-list
248
+ ```
249
+
250
+ ## jCustomer (Unomi) provisioning
251
+
252
+ Unomi uses its own REST API and YAML/JSON rules. Key endpoints:
253
+
254
+ ```bash
255
+ # Import a scope
256
+ curl -u karaf:karaf -X POST \
257
+ -H "Content-Type: application/json" \
258
+ -d '{"itemId":"mySite","itemType":"scope"}' \
259
+ http://localhost:8181/cxs/scopes
260
+
261
+ # Import a rule
262
+ curl -u karaf:karaf -X POST \
263
+ -H "Content-Type: application/json" \
264
+ -d @my-rule.json \
265
+ http://localhost:8181/cxs/rules
266
+
267
+ # Reload rules from classpath
268
+ curl -u karaf:karaf -X POST http://localhost:8181/cxs/rules/resetQueries
269
+ ```
@@ -0,0 +1,297 @@
1
+ ---
2
+ name: jahia-dev-osgi-module
3
+ description: Conventions and invariants for building any Jahia OSGi/Java bundle module (Jahia 8.2). Use when working on Maven bundle structure, OSGi Declarative Services, JCR integration, or Java package design.
4
+ ---
5
+
6
+ # SKILL — Jahia OSGi Module Development (8.2)
7
+
8
+ ## When this skill applies
9
+
10
+ You are working on anything that touches the OSGi bundle structure, Maven build, JCR node-type definitions, or Jahia service integration. That is, almost every Java change in a Jahia module.
11
+
12
+ ## Scaffold a new module
13
+
14
+ Use the official Maven archetype. Always pick archetype **2** (`jahia-module-archetype`) and the latest version.
15
+
16
+ ```bash
17
+ mvn archetype:generate -Dfilter=org.jahia.archetypes:
18
+ ```
19
+
20
+ At the interactive prompts:
21
+ 1. Enter `2` → `jahia-module-archetype` (Jahia DXP >=8)
22
+ 2. Enter the latest version number (currently `4.8`)
23
+ 3. Fill in the properties below, then confirm with `Y`
24
+
25
+ | Property | Example | Notes |
26
+ |---|---|---|
27
+ | `artifactId` | `my-module` | Maven artifact ID and folder name |
28
+ | `moduleName` | `My Module` | Human-readable name shown in Jahia UI |
29
+ | `groupId` | `org.example.modules` | Java package root |
30
+ | `jahiaVersion` | `8.2.0.0` | Target Jahia version — use `8.2.0.0`, not the archetype default |
31
+ | `version` | `1.0.0-SNAPSHOT` | Module version |
32
+ | `package` | `org.example.modules` | Java package (usually matches `groupId`) |
33
+
34
+ > ⚠️ **Always set `jahiaVersion` to `8.2.0.0`** — the archetype default (`8.0.0.0`) is outdated. The parent POM version in the generated `pom.xml` should be `org.jahia.modules:jahia-modules:8.2.0.0`. If the archetype sets a different version, update it before your first build.
35
+
36
+ After generation, the scaffolded structure contains:
37
+ ```
38
+ <artifactId>/
39
+ ├── pom.xml
40
+ └── src/
41
+ ├── main/
42
+ │ ├── java/<package>/ # Java sources
43
+ │ └── resources/
44
+ │ └── META-INF/
45
+ │ └── definitions.cnd # Empty — add your node types here
46
+ └── test/
47
+ └── java/<package>/
48
+ ```
49
+
50
+ Build immediately to verify the scaffold compiles:
51
+
52
+ ```bash
53
+ cd <artifactId>
54
+ mvn clean install
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Hard invariants
60
+
61
+ 1. **Parent POM is `org.jahia.modules:jahia-modules:8.2.0.0`.** Do not bump without a documented decision. This version constrains the Java baseline (Java 17 max), the OSGi spec level (R6 / `osgi.cmpn` 6.0.0), and the available platform APIs.
62
+
63
+ 2. **Packaging is `bundle`.** The manifest is generated by `maven-bundle-plugin` (BND) configured in the parent. The parent already sets `Jahia-Module-Type`, `Bundle-Category`, signature, SCM headers, and default JDK target — **do not redeclare them**. Use `<jahia-depends>` and `<jahia-module-signature>` properties to drive the inherited config.
64
+
65
+ 3. **Dependencies on Jahia APIs go through `org.jahia.server:jahia-impl` and `jahia-api`** (both `provided`). On `jahia-impl`, exclude transitives:
66
+ ```xml
67
+ <exclusions>
68
+ <exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion>
69
+ </exclusions>
70
+ ```
71
+
72
+ 4. **OSGi services use Declarative Services (DS) annotations** (`@Component`, `@Reference`, `@Activate`). Enable BND processing with `<_dsannotations>*</_dsannotations>` (already set in the parent pom). Never use Blueprint; never use the `BundleActivator` pattern for new code.
73
+
74
+ 5. **`@Component` services that are part of the public SPI must declare a `service` attribute** (e.g. `@Component(service = MyInterface.class)`) so the registry can look them up by interface.
75
+
76
+ 6. **Public packages must be declared in `Export-Package`.** Internal implementation lives in `*.internal.*` packages and is *not* exported.
77
+
78
+ ---
79
+
80
+ ## Directory conventions
81
+
82
+ | Path | Purpose |
83
+ |---|---|
84
+ | `src/main/java/org/jahia/modules/<name>/` | Java sources |
85
+ | `src/main/resources/META-INF/definitions.cnd` | JCR node type definitions |
86
+ | `src/main/resources/javascript/apps/` | jContent UI extension entry point |
87
+ | `src/main/resources/resources/` | i18n bundles (`.properties` files) |
88
+ | `src/main/import/repository.xml` | Initial JCR content imported on first install |
89
+
90
+ ---
91
+
92
+ ## Java baseline
93
+
94
+ - Java 17. Records, sealed types, pattern matching, `var`, `switch` expressions are all fine.
95
+ - Do **not** use Java 21-only features (virtual threads at the API surface, primitive pattern matching, etc.).
96
+ - Prefer `java.util.Optional`, `java.time.*`, `java.util.concurrent.*` over Guava/Apache Commons unless an existing dependency already provides them.
97
+
98
+ ---
99
+
100
+ ## JCR access patterns
101
+
102
+ - Always run JCR mutations as the calling Jahia user:
103
+ ```java
104
+ JCRTemplate.getInstance().doExecuteWithUserSession(username, workspace, locale, callback)
105
+ ```
106
+ Never escalate to a system session for content the user authored or requested.
107
+ - For reads where the user has implicit access, prefer receiving the `JCRSessionWrapper` from the controller layer rather than obtaining one yourself — this keeps the audit trail clean.
108
+ - Save changes explicitly (`session.save()`); do not rely on auto-commit.
109
+ - `JCRSessionWrapper` is per-user, per-workspace, per-locale, **and not thread-safe**. Never hold a reference across threads.
110
+ - Wrap user-visible errors in domain-specific exceptions; let infrastructure exceptions (`RepositoryException`) bubble up to the caller, which converts them to the appropriate response format.
111
+
112
+ ---
113
+
114
+ ## OSGi service pattern
115
+
116
+ ```java
117
+ @Component(service = MyService.class, immediate = true)
118
+ public class MyServiceImpl implements MyService {
119
+
120
+ @Reference
121
+ private JahiaSitesService sitesService;
122
+
123
+ @Activate
124
+ protected void activate(Map<String, Object> config) {
125
+ // initialization logic
126
+ }
127
+ }
128
+ ```
129
+
130
+ - `immediate = true` is needed for services that must activate on bundle start (e.g. servlet registrations, JCR event listeners).
131
+ - Use `@Reference(cardinality = ReferenceCardinality.OPTIONAL)` for optional dependencies.
132
+ - Constructor injection is preferred over field injection for testability.
133
+
134
+ ---
135
+
136
+ ## OSGi configuration (CFG files) — avoids redeployment
137
+
138
+ **Always use a `.cfg` file for any runtime-configurable property** (API keys, URLs, feature flags, timeouts, rate limits). OSGi Config Admin reloads the file at runtime without requiring a module redeploy — changes take effect immediately via the `@Modified` callback.
139
+
140
+ ### File location and naming
141
+
142
+ ```
143
+ src/main/resources/META-INF/configurations/<service.pid>.cfg
144
+ ```
145
+
146
+ The filename **must match the `service.pid`** declared on the `@Component`. Convention:
147
+
148
+ ```
149
+ org.<org>.<module-name>.cfg # main service config
150
+ org.jahia.modules.jahiacsrfguard-<module>.cfg # CSRF whitelist (one per module with Actions)
151
+ ```
152
+
153
+ ### Main config pattern — DS `@Activate` + `@Modified` (preferred)
154
+
155
+ Use the **snapshot pattern** with Declarative Services annotations. This is cleaner than implementing `ManagedService` — no need for the extra service declaration, and `@Modified` fires automatically on `.cfg` changes without a full component restart.
156
+
157
+ ```java
158
+ @Component(
159
+ service = MyService.class,
160
+ configurationPid = "org.example.mymodule", // links to the .cfg filename
161
+ immediate = true
162
+ )
163
+ public class MyServiceImpl implements MyService {
164
+
165
+ private volatile Snapshot config = Snapshot.empty();
166
+
167
+ @Activate
168
+ @Modified // ← same method handles both initial activation and runtime config changes
169
+ protected void activate(Map<String, Object> properties) {
170
+ this.config = Snapshot.from(properties);
171
+ }
172
+
173
+ @Override
174
+ public String process(String input) {
175
+ Snapshot cfg = this.config; // single volatile read — consistent snapshot
176
+ if (!cfg.isConfigured()) throw new IllegalStateException("Service not configured");
177
+ // use cfg.apiKey, cfg.baseUrl, cfg.timeoutMs ...
178
+ }
179
+
180
+ // Immutable snapshot — readers always see a complete, consistent config
181
+ private static final class Snapshot {
182
+ final String apiKey;
183
+ final String baseUrl;
184
+ final int timeoutMs;
185
+
186
+ private Snapshot(String apiKey, String baseUrl, int timeoutMs) {
187
+ this.apiKey = apiKey;
188
+ this.baseUrl = baseUrl;
189
+ this.timeoutMs = timeoutMs;
190
+ }
191
+
192
+ static Snapshot empty() { return new Snapshot("", "https://api.example.com", 30_000); }
193
+
194
+ static Snapshot from(Map<String, Object> p) {
195
+ return new Snapshot(
196
+ str(p, "API_KEY", ""),
197
+ str(p, "API_BASE_URL", "https://api.example.com"),
198
+ intVal(p, "TIMEOUT_MS", 30_000)
199
+ );
200
+ }
201
+
202
+ boolean isConfigured() { return !apiKey.isBlank() && !baseUrl.isBlank(); }
203
+
204
+ private static String str(Map<String, Object> m, String k, String def) {
205
+ Object v = m.get(k);
206
+ return (v instanceof String s && !s.isBlank()) ? s.trim() : def;
207
+ }
208
+ private static int intVal(Map<String, Object> m, String k, int def) {
209
+ try { return Integer.parseInt(String.valueOf(m.get(k))); }
210
+ catch (Exception e) { return def; }
211
+ }
212
+ }
213
+ }
214
+ ```
215
+
216
+ > **Why snapshot?** The `volatile Snapshot` field is replaced atomically. Callers that read `this.config` in a method always see a fully-initialized, internally consistent configuration — never a mix of old key + new URL. This is thread-safe without synchronization.
217
+
218
+ > **Why `@Activate` + `@Modified` together?** OSGi DS calls `@Activate` on first start and `@Modified` when the `.cfg` file changes without stopping the component. Pointing both to the same method means a single code path handles both cases. If only `@Activate` is annotated, a config change triggers a full stop/start cycle instead of a lightweight update.
219
+
220
+ ### The `.cfg` file
221
+
222
+ ```properties
223
+ # src/main/resources/META-INF/configurations/org.example.mymodule.cfg
224
+ #
225
+ # Deployed to: digital-factory-data/karaf/etc/
226
+ # Edit that file at runtime — changes take effect without redeployment.
227
+ #
228
+ API_KEY=
229
+ API_BASE_URL=https://api.example.com
230
+ TIMEOUT_MS=30000
231
+ ```
232
+
233
+ > The `.cfg` file ships with safe defaults. Operators override it in `digital-factory-data/karaf/etc/` on each environment (dev / staging / prod) — secrets never live in the source repository.
234
+
235
+ ### CSRF guard config (required for every module with Java Actions)
236
+
237
+ ```properties
238
+ # src/main/resources/META-INF/configurations/org.jahia.modules.jahiacsrfguard-mymodule.cfg
239
+ whitelist = *.myFirstAction.do, *.mySecondAction.do
240
+ ```
241
+
242
+ One entry per Action name. Missing this file means every POST to those endpoints is rejected with 403.
243
+
244
+ ---
245
+
246
+ ## GraphQL extensions
247
+
248
+ - Provided by the `graphql-dxm-provider` module (declare as `<jahia-depends>`).
249
+ - Extend by registering classes annotated with `@GraphQLTypeExtension`, `@GraphQLField`, etc.
250
+ - Authentication is inherited from the HTTP request; resolvers run as the authenticated user.
251
+ - Register as a `@Component(service = DXGraphQLExtensionsProvider.class)`.
252
+
253
+ ---
254
+
255
+ ## Adding a dependency
256
+
257
+ 1. Check if Jahia already provides it via `jahia-impl` exports before adding.
258
+ 2. If available at runtime: `<scope>provided</scope>`.
259
+ 3. If it must be bundled: `Embed-Dependency` in the BND config (last resort — adds to bundle size and risks classpath conflicts).
260
+
261
+ ---
262
+
263
+ ## Testing
264
+
265
+ - **Unit tests:** JUnit 5 + Mockito. Place under `src/test/java`.
266
+ - **Integration tests:** Use the `jahia-test-utils` framework against a running Jahia instance. Tag with `@Tag("integration")` and isolate from the unit test run.
267
+ - Do not mock core Jahia services in integration tests — load them from the real OSGi registry. The registry is the contract.
268
+
269
+ ---
270
+
271
+ ## Common pitfalls
272
+
273
+ - ❌ Adding a dependency without checking if Jahia already provides it → check `jahia-impl` exports first.
274
+ - ❌ `LoggerFactory.getLogger(getClass())` in a `static` context → use `LoggerFactory.getLogger(MyClass.class)`.
275
+ - ❌ Holding `JCRSessionWrapper` references across threads → sessions are not thread-safe.
276
+ - ❌ Forgetting to export public packages → consumers won't see the service.
277
+ - ❌ Using `jmix:studioOnly` in CND definitions → it can silently break area rendering. Use `jmix:hiddenType`.
278
+ - ❌ Declaring `j:linknode` or `j:url` in a CND alongside `choicelist[linkTypeInitializer]` → they are injected automatically by Jahia's mixins at runtime.
279
+
280
+ ---
281
+
282
+ ## Useful Jahia service entry points
283
+
284
+ ```java
285
+ JCRTemplate.getInstance().doExecuteWithUserSession(...) // primary JCR access pattern
286
+ JahiaSitesService.getInstance().getSiteByKey(siteKey) // resolve a site
287
+ JCRSessionFactory.getInstance().getCurrentUser() // current Jahia user
288
+ NodeTypeRegistry.getInstance().getNodeType(name) // node type metadata
289
+ ```
290
+
291
+ ---
292
+
293
+ ## References
294
+
295
+ - Jahia 8 developer documentation: https://academy.jahia.com
296
+ - Native Jahia node types (CND source): https://github.com/Jahia/jahia/tree/master/war/src/main/webapp/WEB-INF/etc/repository/nodetypes
297
+ - Jahia GraphQL API: https://academy.jahia.com/documentation/developer/jahia/8/api-documentation/graphql-api