@codyswann/lisa 2.195.4 → 2.195.6

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 (808) hide show
  1. package/README.md +17 -3
  2. package/all/copy-contents/gitignore +10 -4
  3. package/dist/cli/print-update-warning.d.ts +1 -1
  4. package/dist/cli/print-update-warning.js +2 -2
  5. package/dist/cli/print-update-warning.js.map +1 -1
  6. package/dist/cli/update-check.d.ts +6 -0
  7. package/dist/cli/update-check.d.ts.map +1 -1
  8. package/dist/cli/update-check.js +3 -3
  9. package/dist/cli/update-check.js.map +1 -1
  10. package/dist/cli/update-cmd.d.ts +1 -1
  11. package/dist/cli/update-cmd.d.ts.map +1 -1
  12. package/dist/cli/update-cmd.js +8 -7
  13. package/dist/cli/update-cmd.js.map +1 -1
  14. package/dist/codex/hooks-installer.d.ts +4 -1
  15. package/dist/codex/hooks-installer.d.ts.map +1 -1
  16. package/dist/codex/hooks-installer.js +109 -30
  17. package/dist/codex/hooks-installer.js.map +1 -1
  18. package/dist/codex/mcp-installer.d.ts +22 -0
  19. package/dist/codex/mcp-installer.d.ts.map +1 -0
  20. package/dist/codex/mcp-installer.js +135 -0
  21. package/dist/codex/mcp-installer.js.map +1 -0
  22. package/dist/codex/plugin-marketplace-installer.d.ts +19 -13
  23. package/dist/codex/plugin-marketplace-installer.d.ts.map +1 -1
  24. package/dist/codex/plugin-marketplace-installer.js +69 -72
  25. package/dist/codex/plugin-marketplace-installer.js.map +1 -1
  26. package/dist/codex/project-hooks-cleanup.d.ts +12 -0
  27. package/dist/codex/project-hooks-cleanup.d.ts.map +1 -0
  28. package/dist/codex/project-hooks-cleanup.js +31 -0
  29. package/dist/codex/project-hooks-cleanup.js.map +1 -0
  30. package/dist/codex/project-overlay.d.ts +23 -0
  31. package/dist/codex/project-overlay.d.ts.map +1 -0
  32. package/dist/codex/project-overlay.js +64 -0
  33. package/dist/codex/project-overlay.js.map +1 -0
  34. package/dist/codex/scripts/inject-rules.sh +4 -0
  35. package/dist/codex/scripts/install-pkgs.sh +4 -0
  36. package/dist/codex/scripts/setup-jira-cli.sh +5 -1
  37. package/dist/codex/settings-installer.d.ts.map +1 -1
  38. package/dist/codex/settings-installer.js +16 -3
  39. package/dist/codex/settings-installer.js.map +1 -1
  40. package/dist/codex/skills-installer.d.ts +15 -19
  41. package/dist/codex/skills-installer.d.ts.map +1 -1
  42. package/dist/codex/skills-installer.js +47 -140
  43. package/dist/codex/skills-installer.js.map +1 -1
  44. package/dist/core/lisa-plugin-selection.d.ts +16 -0
  45. package/dist/core/lisa-plugin-selection.d.ts.map +1 -0
  46. package/dist/core/lisa-plugin-selection.js +59 -0
  47. package/dist/core/lisa-plugin-selection.js.map +1 -0
  48. package/dist/core/lisa-rules-mirror.d.ts +2 -1
  49. package/dist/core/lisa-rules-mirror.d.ts.map +1 -1
  50. package/dist/core/lisa-rules-mirror.js +19 -3
  51. package/dist/core/lisa-rules-mirror.js.map +1 -1
  52. package/dist/core/lisa-skill-sources.d.ts.map +1 -1
  53. package/dist/core/lisa-skill-sources.js +16 -1
  54. package/dist/core/lisa-skill-sources.js.map +1 -1
  55. package/dist/core/lisa.d.ts +4 -6
  56. package/dist/core/lisa.d.ts.map +1 -1
  57. package/dist/core/lisa.js +12 -38
  58. package/dist/core/lisa.js.map +1 -1
  59. package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
  60. package/dist/migrations/ensure-lisa-postinstall.js +4 -3
  61. package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
  62. package/dist/opencode/plugin-templates/lisa-session-bootstrap.ts +2 -3
  63. package/npm-package/create-only/.github/workflows/publish-to-npm.yml +2 -1
  64. package/package.json +2 -3
  65. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa/.codex-plugin/plugin.json +2 -2
  67. package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/SKILL.md +71 -0
  68. package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/agents/openai.yaml +4 -0
  69. package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/SKILL.md +219 -0
  70. package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/agents/openai.yaml +4 -0
  71. package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/SKILL.md +429 -0
  72. package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/agents/openai.yaml +4 -0
  73. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +361 -0
  74. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/agents/openai.yaml +4 -0
  75. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +214 -0
  76. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +111 -0
  77. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/agents/openai.yaml +4 -0
  78. package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/SKILL.md +23 -0
  79. package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/agents/openai.yaml +4 -0
  80. package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/SKILL.md +87 -0
  81. package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/agents/openai.yaml +4 -0
  82. package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +162 -0
  83. package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/agents/openai.yaml +4 -0
  84. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
  85. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/agents/openai.yaml +4 -0
  86. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +356 -0
  87. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/agents/openai.yaml +4 -0
  88. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +109 -0
  89. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/agents/openai.yaml +4 -0
  90. package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/SKILL.md +175 -0
  91. package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/agents/openai.yaml +4 -0
  92. package/plugins/lisa/.codex-plugin/skills/lisa-debrief/SKILL.md +94 -0
  93. package/plugins/lisa/.codex-plugin/skills/lisa-debrief/agents/openai.yaml +4 -0
  94. package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +63 -0
  95. package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/agents/openai.yaml +4 -0
  96. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +336 -0
  97. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/agents/openai.yaml +4 -0
  98. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +179 -0
  99. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/agents/openai.yaml +4 -0
  100. package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/SKILL.md +28 -0
  101. package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/agents/openai.yaml +4 -0
  102. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +91 -0
  103. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/agents/openai.yaml +4 -0
  104. package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/SKILL.md +45 -0
  105. package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/agents/openai.yaml +4 -0
  106. package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/SKILL.md +224 -0
  107. package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/agents/openai.yaml +4 -0
  108. package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +48 -0
  109. package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/agents/openai.yaml +4 -0
  110. package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/SKILL.md +35 -0
  111. package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/agents/openai.yaml +4 -0
  112. package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +113 -0
  113. package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/agents/openai.yaml +4 -0
  114. package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +115 -0
  115. package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/agents/openai.yaml +4 -0
  116. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +446 -0
  117. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/agents/openai.yaml +4 -0
  118. package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +101 -0
  119. package/plugins/lisa/.codex-plugin/skills/lisa-github-create/agents/openai.yaml +4 -0
  120. package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/SKILL.md +110 -0
  121. package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/agents/openai.yaml +4 -0
  122. package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +121 -0
  123. package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/agents/openai.yaml +4 -0
  124. package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +432 -0
  125. package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/agents/openai.yaml +4 -0
  126. package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/SKILL.md +227 -0
  127. package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/agents/openai.yaml +4 -0
  128. package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +248 -0
  129. package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/agents/openai.yaml +4 -0
  130. package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +132 -0
  131. package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/agents/openai.yaml +4 -0
  132. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +339 -0
  133. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/agents/openai.yaml +4 -0
  134. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +330 -0
  135. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/agents/openai.yaml +4 -0
  136. package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/SKILL.md +29 -0
  137. package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/agents/openai.yaml +4 -0
  138. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +339 -0
  139. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/agents/openai.yaml +4 -0
  140. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +157 -0
  141. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/agents/openai.yaml +4 -0
  142. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +202 -0
  143. package/plugins/lisa/.codex-plugin/skills/lisa-implement/agents/openai.yaml +4 -0
  144. package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
  145. package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/agents/openai.yaml +4 -0
  146. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/SKILL.md +45 -0
  147. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/agents/openai.yaml +4 -0
  148. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
  149. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/agents/openai.yaml +4 -0
  150. package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/SKILL.md +44 -0
  151. package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/agents/openai.yaml +4 -0
  152. package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/SKILL.md +47 -0
  153. package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/agents/openai.yaml +4 -0
  154. package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +133 -0
  155. package/plugins/lisa/.codex-plugin/skills/lisa-intake/agents/openai.yaml +4 -0
  156. package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +279 -0
  157. package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/agents/openai.yaml +4 -0
  158. package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +52 -0
  159. package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/agents/openai.yaml +4 -0
  160. package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +121 -0
  161. package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/agents/openai.yaml +4 -0
  162. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +368 -0
  163. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/agents/openai.yaml +4 -0
  164. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +154 -0
  165. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/agents/openai.yaml +4 -0
  166. package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/SKILL.md +90 -0
  167. package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/agents/openai.yaml +4 -0
  168. package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/scripts/post-evidence.sh +180 -0
  169. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +127 -0
  170. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/agents/openai.yaml +4 -0
  171. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/generate-templates.py +233 -0
  172. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +368 -0
  173. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +198 -0
  174. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/agents/openai.yaml +4 -0
  175. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +110 -0
  176. package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +108 -0
  177. package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/agents/openai.yaml +4 -0
  178. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +317 -0
  179. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/agents/openai.yaml +4 -0
  180. package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/SKILL.md +30 -0
  181. package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/agents/openai.yaml +4 -0
  182. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +267 -0
  183. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/agents/openai.yaml +4 -0
  184. package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/SKILL.md +432 -0
  185. package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/agents/openai.yaml +4 -0
  186. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +90 -0
  187. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/agents/openai.yaml +4 -0
  188. package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +105 -0
  189. package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/agents/openai.yaml +4 -0
  190. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +346 -0
  191. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/agents/openai.yaml +4 -0
  192. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +146 -0
  193. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/agents/openai.yaml +4 -0
  194. package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/SKILL.md +103 -0
  195. package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/agents/openai.yaml +4 -0
  196. package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +134 -0
  197. package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/agents/openai.yaml +4 -0
  198. package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +383 -0
  199. package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/agents/openai.yaml +4 -0
  200. package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +200 -0
  201. package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/agents/openai.yaml +4 -0
  202. package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +127 -0
  203. package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/agents/openai.yaml +4 -0
  204. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +339 -0
  205. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/agents/openai.yaml +4 -0
  206. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +314 -0
  207. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/agents/openai.yaml +4 -0
  208. package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +51 -0
  209. package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/agents/openai.yaml +4 -0
  210. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +292 -0
  211. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/agents/openai.yaml +4 -0
  212. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +96 -0
  213. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/agents/openai.yaml +4 -0
  214. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +69 -0
  215. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/agents/openai.yaml +4 -0
  216. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
  217. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/agents/openai.yaml +4 -0
  218. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
  219. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/agents/openai.yaml +4 -0
  220. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +28 -0
  221. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/agents/openai.yaml +4 -0
  222. package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +226 -0
  223. package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/agents/openai.yaml +4 -0
  224. package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
  225. package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/agents/openai.yaml +4 -0
  226. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +353 -0
  227. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/agents/openai.yaml +4 -0
  228. package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +109 -0
  229. package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/agents/openai.yaml +4 -0
  230. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/SKILL.md +83 -0
  231. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/agents/openai.yaml +4 -0
  232. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
  233. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/agents/openai.yaml +4 -0
  234. package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +77 -0
  235. package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/agents/openai.yaml +4 -0
  236. package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +144 -0
  237. package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/agents/openai.yaml +4 -0
  238. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +211 -0
  239. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/agents/openai.yaml +4 -0
  240. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/SKILL.md +135 -0
  241. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/agents/openai.yaml +4 -0
  242. package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/SKILL.md +151 -0
  243. package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/agents/openai.yaml +4 -0
  244. package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/SKILL.md +94 -0
  245. package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/agents/openai.yaml +4 -0
  246. package/plugins/lisa/.codex-plugin/skills/lisa-plan/SKILL.md +60 -0
  247. package/plugins/lisa/.codex-plugin/skills/lisa-plan/agents/openai.yaml +4 -0
  248. package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
  249. package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/agents/openai.yaml +4 -0
  250. package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +60 -0
  251. package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/agents/openai.yaml +4 -0
  252. package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/SKILL.md +265 -0
  253. package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/agents/openai.yaml +4 -0
  254. package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +101 -0
  255. package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/agents/openai.yaml +4 -0
  256. package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +170 -0
  257. package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/agents/openai.yaml +4 -0
  258. package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +104 -0
  259. package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/agents/openai.yaml +4 -0
  260. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +315 -0
  261. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/agents/openai.yaml +4 -0
  262. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
  263. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
  264. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
  265. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
  266. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
  267. package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/SKILL.md +84 -0
  268. package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/agents/openai.yaml +4 -0
  269. package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +54 -0
  270. package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/agents/openai.yaml +4 -0
  271. package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +133 -0
  272. package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/agents/openai.yaml +4 -0
  273. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +1030 -0
  274. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/agents/openai.yaml +4 -0
  275. package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/SKILL.md +96 -0
  276. package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/agents/openai.yaml +4 -0
  277. package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +68 -0
  278. package/plugins/lisa/.codex-plugin/skills/lisa-research/agents/openai.yaml +4 -0
  279. package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/SKILL.md +209 -0
  280. package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/agents/openai.yaml +4 -0
  281. package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +88 -0
  282. package/plugins/lisa/.codex-plugin/skills/lisa-review-local/agents/openai.yaml +4 -0
  283. package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/SKILL.md +155 -0
  284. package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/agents/openai.yaml +4 -0
  285. package/plugins/lisa/.codex-plugin/skills/lisa-security-review/SKILL.md +57 -0
  286. package/plugins/lisa/.codex-plugin/skills/lisa-security-review/agents/openai.yaml +4 -0
  287. package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/SKILL.md +33 -0
  288. package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/agents/openai.yaml +4 -0
  289. package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +56 -0
  290. package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/agents/openai.yaml +4 -0
  291. package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/SKILL.md +347 -0
  292. package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/agents/openai.yaml +4 -0
  293. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +103 -0
  294. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/agents/openai.yaml +4 -0
  295. package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/SKILL.md +254 -0
  296. package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/agents/openai.yaml +4 -0
  297. package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/SKILL.md +268 -0
  298. package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/agents/openai.yaml +4 -0
  299. package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/SKILL.md +198 -0
  300. package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/agents/openai.yaml +4 -0
  301. package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +251 -0
  302. package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/agents/openai.yaml +4 -0
  303. package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/SKILL.md +316 -0
  304. package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/agents/openai.yaml +4 -0
  305. package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +71 -0
  306. package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/agents/openai.yaml +4 -0
  307. package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/SKILL.md +159 -0
  308. package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/agents/openai.yaml +4 -0
  309. package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +171 -0
  310. package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/agents/openai.yaml +4 -0
  311. package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/SKILL.md +127 -0
  312. package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/agents/openai.yaml +4 -0
  313. package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/SKILL.md +23 -0
  314. package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/agents/openai.yaml +4 -0
  315. package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +86 -0
  316. package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/agents/openai.yaml +4 -0
  317. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +34 -0
  318. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/agents/openai.yaml +4 -0
  319. package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/SKILL.md +63 -0
  320. package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/agents/openai.yaml +4 -0
  321. package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +186 -0
  322. package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/agents/openai.yaml +4 -0
  323. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +27 -0
  324. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/agents/openai.yaml +4 -0
  325. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +86 -0
  326. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/agents/openai.yaml +4 -0
  327. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/SKILL.md +27 -0
  328. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/agents/openai.yaml +4 -0
  329. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +53 -0
  330. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/agents/openai.yaml +4 -0
  331. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/SKILL.md +27 -0
  332. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/agents/openai.yaml +4 -0
  333. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/SKILL.md +28 -0
  334. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/agents/openai.yaml +4 -0
  335. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +107 -0
  336. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/agents/openai.yaml +4 -0
  337. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +65 -0
  338. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/agents/openai.yaml +4 -0
  339. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/SKILL.md +37 -0
  340. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/agents/openai.yaml +4 -0
  341. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/SKILL.md +29 -0
  342. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/agents/openai.yaml +4 -0
  343. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/SKILL.md +54 -0
  344. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/agents/openai.yaml +4 -0
  345. package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/SKILL.md +170 -0
  346. package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/agents/openai.yaml +4 -0
  347. package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +86 -0
  348. package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/agents/openai.yaml +4 -0
  349. package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +195 -0
  350. package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/agents/openai.yaml +4 -0
  351. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +365 -0
  352. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/agents/openai.yaml +4 -0
  353. package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +52 -0
  354. package/plugins/lisa/.codex-plugin/skills/lisa-verify/agents/openai.yaml +4 -0
  355. package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/SKILL.md +392 -0
  356. package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/agents/openai.yaml +4 -0
  357. package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/SKILL.md +101 -0
  358. package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/agents/openai.yaml +4 -0
  359. package/plugins/lisa/hooks/inject-rules.sh +3 -2
  360. package/plugins/lisa/hooks/install-pkgs.sh +4 -45
  361. package/plugins/lisa/hooks/setup-jira-cli.sh +4 -12
  362. package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +1 -1
  363. package/plugins/lisa-agy/plugin.json +1 -1
  364. package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +1 -1
  365. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  366. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  367. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  368. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  369. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  370. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  371. package/plugins/lisa-copilot/hooks/inject-rules.sh +3 -2
  372. package/plugins/lisa-copilot/hooks/install-pkgs.sh +4 -45
  373. package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +4 -12
  374. package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +1 -1
  375. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  376. package/plugins/lisa-cursor/hooks/install-pkgs.sh +4 -45
  377. package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +4 -12
  378. package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +1 -1
  379. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  380. package/plugins/lisa-expo/.codex-plugin/plugin.json +2 -2
  381. package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/SKILL.md +280 -0
  382. package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/agents/openai.yaml +4 -0
  383. package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/references/native-module.md +96 -0
  384. package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/SKILL.md +238 -0
  385. package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/agents/openai.yaml +4 -0
  386. package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/references/mutation-patterns.md +360 -0
  387. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/SKILL.md +367 -0
  388. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/agents/openai.yaml +4 -0
  389. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  390. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  391. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  392. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
  393. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
  394. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/SKILL.md +321 -0
  395. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/agents/openai.yaml +4 -0
  396. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/animations.md +220 -0
  397. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/controls.md +272 -0
  398. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/form-sheet.md +253 -0
  399. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/gradients.md +106 -0
  400. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/icons.md +213 -0
  401. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/media.md +198 -0
  402. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/route-structure.md +229 -0
  403. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/search.md +248 -0
  404. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/storage.md +121 -0
  405. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/tabs.md +433 -0
  406. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  407. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/visual-effects.md +197 -0
  408. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/webgpu-three.md +605 -0
  409. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/zoom-transitions.md +158 -0
  410. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +299 -0
  411. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/agents/openai.yaml +4 -0
  412. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/examples.md +749 -0
  413. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/patterns.md +318 -0
  414. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/create_component.py +200 -0
  415. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +209 -0
  416. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/SKILL.md +268 -0
  417. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/agents/openai.yaml +4 -0
  418. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  419. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  420. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  421. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
  422. package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/SKILL.md +214 -0
  423. package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/agents/openai.yaml +4 -0
  424. package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/scripts/validate_structure.py +454 -0
  425. package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
  426. package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
  427. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/SKILL.md +228 -0
  428. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/agents/openai.yaml +4 -0
  429. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  430. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  431. package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/SKILL.md +369 -0
  432. package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/agents/openai.yaml +4 -0
  433. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/SKILL.md +54 -0
  434. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/agents/openai.yaml +4 -0
  435. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  436. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  437. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/comparison.md +63 -0
  438. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/troubleshooting.md +88 -0
  439. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/SKILL.md +92 -0
  440. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/agents/openai.yaml +4 -0
  441. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
  442. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/package.json +11 -0
  443. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
  444. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/SKILL.md +193 -0
  445. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/agents/openai.yaml +4 -0
  446. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/app-store-metadata.md +479 -0
  447. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/ios-app-store.md +355 -0
  448. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/play-store.md +264 -0
  449. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/testflight.md +58 -0
  450. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/workflows.md +200 -0
  451. package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/SKILL.md +164 -0
  452. package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/agents/openai.yaml +4 -0
  453. package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/SKILL.md +309 -0
  454. package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/agents/openai.yaml +4 -0
  455. package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/references/validation-patterns.md +417 -0
  456. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/SKILL.md +141 -0
  457. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/agents/openai.yaml +4 -0
  458. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/config-plugin.md +90 -0
  459. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/create-expo-module.md +206 -0
  460. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/lifecycle.md +127 -0
  461. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/module-config.md +48 -0
  462. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-module.md +286 -0
  463. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-view.md +171 -0
  464. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/SKILL.md +431 -0
  465. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/agents/openai.yaml +4 -0
  466. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/references/official-docs.md +290 -0
  467. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
  468. package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/SKILL.md +480 -0
  469. package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
  470. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
  471. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/agents/openai.yaml +4 -0
  472. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/SKILL.md +39 -0
  473. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/agents/openai.yaml +4 -0
  474. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/SKILL.md +419 -0
  475. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/agents/openai.yaml +4 -0
  476. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  477. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  478. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  479. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
  480. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
  481. package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/SKILL.md +126 -0
  482. package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
  483. package/plugins/lisa-expo/.codex-plugin/skills/jira-create/SKILL.md +161 -0
  484. package/plugins/lisa-expo/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
  485. package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/SKILL.md +78 -0
  486. package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
  487. package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
  488. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/SKILL.md +190 -0
  489. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
  490. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/generate-templates.py +281 -0
  491. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/parse-plan.py +368 -0
  492. package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/SKILL.md +27 -0
  493. package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
  494. package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
  495. package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
  496. package/plugins/lisa-expo/.codex-plugin/skills/local-state/SKILL.md +362 -0
  497. package/plugins/lisa-expo/.codex-plugin/skills/local-state/agents/openai.yaml +4 -0
  498. package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/async-storage.md +505 -0
  499. package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/persistence-patterns.md +711 -0
  500. package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/reactive-variables.md +446 -0
  501. package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/SKILL.md +507 -0
  502. package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/agents/openai.yaml +4 -0
  503. package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
  504. package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/SKILL.md +124 -0
  505. package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/agents/openai.yaml +4 -0
  506. package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/SKILL.md +217 -0
  507. package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
  508. package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/SKILL.md +123 -0
  509. package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/agents/openai.yaml +4 -0
  510. package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/SKILL.md +123 -0
  511. package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
  512. package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/SKILL.md +99 -0
  513. package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/agents/openai.yaml +4 -0
  514. package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/SKILL.md +165 -0
  515. package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/agents/openai.yaml +4 -0
  516. package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
  517. package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
  518. package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/SKILL.md +101 -0
  519. package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/agents/openai.yaml +4 -0
  520. package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/SKILL.md +61 -0
  521. package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/agents/openai.yaml +4 -0
  522. package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/SKILL.md +226 -0
  523. package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/agents/openai.yaml +4 -0
  524. package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/SKILL.md +140 -0
  525. package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/agents/openai.yaml +4 -0
  526. package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/SKILL.md +455 -0
  527. package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/agents/openai.yaml +4 -0
  528. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/SKILL.md +251 -0
  529. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/agents/openai.yaml +4 -0
  530. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
  531. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
  532. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/SKILL.md +314 -0
  533. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/agents/openai.yaml +4 -0
  534. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/async-patterns.md +420 -0
  535. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/expo-router-testing.md +556 -0
  536. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/mocking-patterns.md +590 -0
  537. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/query-priority.md +291 -0
  538. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/SKILL.md +134 -0
  539. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/agents/openai.yaml +4 -0
  540. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  541. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  542. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/native-tabs.md +124 -0
  543. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/new-architecture.md +79 -0
  544. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-19.md +79 -0
  545. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-compiler.md +59 -0
  546. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  547. package/plugins/lisa-expo/.codex-plugin/skills/use-dom/SKILL.md +417 -0
  548. package/plugins/lisa-expo/.codex-plugin/skills/use-dom/agents/openai.yaml +4 -0
  549. package/plugins/lisa-expo/skills/building-native-ui/SKILL.md +1 -1
  550. package/plugins/lisa-expo-agy/plugin.json +1 -1
  551. package/plugins/lisa-expo-agy/skills/building-native-ui/SKILL.md +1 -1
  552. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  553. package/plugins/lisa-expo-copilot/skills/building-native-ui/SKILL.md +1 -1
  554. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  555. package/plugins/lisa-expo-cursor/skills/building-native-ui/SKILL.md +1 -1
  556. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  557. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -2
  558. package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
  559. package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
  560. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/SKILL.md +368 -0
  561. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/agents/openai.yaml +4 -0
  562. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/SKILL.md +198 -0
  563. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/agents/openai.yaml +4 -0
  564. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/SKILL.md +265 -0
  565. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/agents/openai.yaml +4 -0
  566. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/SKILL.md +87 -0
  567. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/agents/openai.yaml +4 -0
  568. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/SKILL.md +283 -0
  569. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/agents/openai.yaml +4 -0
  570. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/SKILL.md +239 -0
  571. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/agents/openai.yaml +4 -0
  572. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/SKILL.md +187 -0
  573. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/agents/openai.yaml +4 -0
  574. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/SKILL.md +142 -0
  575. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/agents/openai.yaml +4 -0
  576. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/SKILL.md +403 -0
  577. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/agents/openai.yaml +4 -0
  578. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/SKILL.md +123 -0
  579. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/agents/openai.yaml +4 -0
  580. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/SKILL.md +254 -0
  581. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/agents/openai.yaml +4 -0
  582. package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
  583. package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
  584. package/plugins/lisa-harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
  585. package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
  586. package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.sh +30 -3
  587. package/plugins/lisa-harper-fabric/hooks/inject-rules.sh +1 -1
  588. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  589. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  590. package/plugins/lisa-harper-fabric-copilot/hooks/block-generated-artifact-edits.sh +42 -24
  591. package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.mjs +12 -14
  592. package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.sh +30 -3
  593. package/plugins/lisa-harper-fabric-copilot/hooks/inject-rules.sh +1 -1
  594. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  595. package/plugins/lisa-harper-fabric-cursor/hooks/block-generated-artifact-edits.sh +42 -24
  596. package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.mjs +12 -14
  597. package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.sh +30 -3
  598. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  599. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -2
  600. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/SKILL.md +176 -0
  601. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/agents/openai.yaml +4 -0
  602. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/advanced-features.md +527 -0
  603. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/project-patterns.md +531 -0
  604. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/quick-start.md +257 -0
  605. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  606. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/types-scalars.md +513 -0
  607. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/SKILL.md +565 -0
  608. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/agents/openai.yaml +4 -0
  609. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/SKILL.md +275 -0
  610. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/agents/openai.yaml +4 -0
  611. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  612. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  613. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  614. package/plugins/lisa-nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  615. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  616. package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  617. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  618. package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  619. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  620. package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  621. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  622. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +2 -2
  623. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/SKILL.md +13 -0
  624. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/agents/openai.yaml +4 -0
  625. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/SKILL.md +13 -0
  626. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/agents/openai.yaml +4 -0
  627. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/SKILL.md +13 -0
  628. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/agents/openai.yaml +4 -0
  629. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
  630. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/agents/openai.yaml +4 -0
  631. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
  632. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
  633. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/agents/openai.yaml +4 -0
  634. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
  635. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
  636. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/SKILL.md +141 -0
  637. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/agents/openai.yaml +4 -0
  638. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/SKILL.md +13 -0
  639. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/agents/openai.yaml +4 -0
  640. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  641. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  642. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  643. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  644. package/plugins/lisa-phaser/.codex-plugin/plugin.json +2 -2
  645. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/SKILL.md +135 -0
  646. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/agents/openai.yaml +4 -0
  647. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/SKILL.md +222 -0
  648. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/agents/openai.yaml +4 -0
  649. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/SKILL.md +151 -0
  650. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/agents/openai.yaml +4 -0
  651. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/SKILL.md +153 -0
  652. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/agents/openai.yaml +4 -0
  653. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/SKILL.md +122 -0
  654. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/agents/openai.yaml +4 -0
  655. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/SKILL.md +89 -0
  656. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/agents/openai.yaml +4 -0
  657. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/SKILL.md +208 -0
  658. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/agents/openai.yaml +4 -0
  659. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/SKILL.md +192 -0
  660. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/agents/openai.yaml +4 -0
  661. package/plugins/lisa-phaser/hooks/inject-rules.sh +1 -1
  662. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  663. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  664. package/plugins/lisa-phaser-copilot/hooks/inject-rules.sh +1 -1
  665. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  666. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  667. package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -2
  668. package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/SKILL.md +374 -0
  669. package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/agents/openai.yaml +4 -0
  670. package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/SKILL.md +335 -0
  671. package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/agents/openai.yaml +4 -0
  672. package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/SKILL.md +166 -0
  673. package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/agents/openai.yaml +4 -0
  674. package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
  675. package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
  676. package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/SKILL.md +45 -0
  677. package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/agents/openai.yaml +4 -0
  678. package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/SKILL.md +48 -0
  679. package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/agents/openai.yaml +4 -0
  680. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/SKILL.md +46 -0
  681. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/agents/openai.yaml +4 -0
  682. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/SKILL.md +46 -0
  683. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/agents/openai.yaml +4 -0
  684. package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/SKILL.md +45 -0
  685. package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/agents/openai.yaml +4 -0
  686. package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/SKILL.md +65 -0
  687. package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
  688. package/plugins/lisa-rails/.codex-plugin/skills/jira-create/SKILL.md +100 -0
  689. package/plugins/lisa-rails/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
  690. package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/SKILL.md +70 -0
  691. package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
  692. package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
  693. package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/SKILL.md +64 -0
  694. package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
  695. package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/SKILL.md +26 -0
  696. package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
  697. package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
  698. package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
  699. package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/SKILL.md +191 -0
  700. package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
  701. package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/SKILL.md +153 -0
  702. package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
  703. package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
  704. package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
  705. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/SKILL.md +157 -0
  706. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/agents/openai.yaml +4 -0
  707. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/SKILL.md +197 -0
  708. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/agents/openai.yaml +4 -0
  709. package/plugins/lisa-rails/hooks/inject-rules.sh +2 -1
  710. package/plugins/lisa-rails-agy/plugin.json +1 -1
  711. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  712. package/plugins/lisa-rails-copilot/hooks/inject-rules.sh +2 -1
  713. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  714. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  715. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  716. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  717. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  718. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  719. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  720. package/plugins/lisa-wiki/.codex-plugin/plugin.json +2 -2
  721. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/SKILL.md +12 -0
  722. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/agents/openai.yaml +4 -0
  723. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/SKILL.md +12 -0
  724. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/agents/openai.yaml +4 -0
  725. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/SKILL.md +12 -0
  726. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/agents/openai.yaml +4 -0
  727. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/SKILL.md +11 -0
  728. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/agents/openai.yaml +4 -0
  729. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/SKILL.md +12 -0
  730. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/agents/openai.yaml +4 -0
  731. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/SKILL.md +12 -0
  732. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/agents/openai.yaml +4 -0
  733. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/SKILL.md +12 -0
  734. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/agents/openai.yaml +4 -0
  735. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/SKILL.md +12 -0
  736. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/agents/openai.yaml +4 -0
  737. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/SKILL.md +12 -0
  738. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/agents/openai.yaml +4 -0
  739. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/SKILL.md +12 -0
  740. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/agents/openai.yaml +4 -0
  741. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  742. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/agents/openai.yaml +4 -0
  743. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/SKILL.md +30 -0
  744. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/agents/openai.yaml +4 -0
  745. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  746. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/agents/openai.yaml +4 -0
  747. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  748. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/agents/openai.yaml +4 -0
  749. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  750. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/agents/openai.yaml +4 -0
  751. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  752. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/agents/openai.yaml +4 -0
  753. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  754. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/agents/openai.yaml +4 -0
  755. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  756. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/agents/openai.yaml +4 -0
  757. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  758. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/agents/openai.yaml +4 -0
  759. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  760. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/agents/openai.yaml +4 -0
  761. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  762. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/agents/openai.yaml +4 -0
  763. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/SKILL.md +47 -0
  764. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/agents/openai.yaml +4 -0
  765. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/SKILL.md +99 -0
  766. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/agents/openai.yaml +4 -0
  767. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/SKILL.md +32 -0
  768. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/agents/openai.yaml +4 -0
  769. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/SKILL.md +43 -0
  770. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/agents/openai.yaml +4 -0
  771. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  772. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/agents/openai.yaml +4 -0
  773. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/SKILL.md +36 -0
  774. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/agents/openai.yaml +4 -0
  775. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/SKILL.md +75 -0
  776. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/agents/openai.yaml +4 -0
  777. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
  778. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/agents/openai.yaml +4 -0
  779. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/SKILL.md +47 -0
  780. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/agents/openai.yaml +4 -0
  781. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
  782. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/agents/openai.yaml +4 -0
  783. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/SKILL.md +50 -0
  784. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/agents/openai.yaml +4 -0
  785. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  786. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  787. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  788. package/plugins/src/base/hooks/inject-rules.sh +3 -2
  789. package/plugins/src/base/hooks/install-pkgs.sh +4 -45
  790. package/plugins/src/base/hooks/setup-jira-cli.sh +4 -12
  791. package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +1 -1
  792. package/plugins/src/expo/skills/building-native-ui/SKILL.md +1 -1
  793. package/plugins/src/harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
  794. package/plugins/src/harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
  795. package/plugins/src/harper-fabric/hooks/enforce-config-extensions.sh +30 -3
  796. package/plugins/src/harper-fabric/hooks/inject-rules.sh +1 -1
  797. package/plugins/src/nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  798. package/plugins/src/phaser/hooks/inject-rules.sh +1 -1
  799. package/plugins/src/rails/hooks/inject-rules.sh +2 -1
  800. package/scripts/clean-dist.mjs +7 -0
  801. package/scripts/generate-codex-plugin-artifacts.mjs +311 -20
  802. package/scripts/install-claude-plugins.sh +53 -40
  803. package/typescript/package-lisa/package.lisa.json +1 -1
  804. package/.agents/plugins/marketplace.json +0 -128
  805. package/dist/codex/lisa-plugin-detection.d.ts +0 -68
  806. package/dist/codex/lisa-plugin-detection.d.ts.map +0 -1
  807. package/dist/codex/lisa-plugin-detection.js +0 -139
  808. package/dist/codex/lisa-plugin-detection.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ display_name: "Analyze Claude Remote"
2
+ short_description: "Audit whether the current…"
3
+ default_prompt:
4
+ - "Use $lisa-analyze-claude-remote: Audit whether the current…."
@@ -0,0 +1,361 @@
1
+ ---
2
+ name: lisa-atlassian-access
3
+ description: "Vendor-neutral access layer for…"
4
+ allowed-tools: ["Bash", "Read", "Skill"]
5
+ ---
6
+
7
+ # Atlassian Access: $ARGUMENTS
8
+
9
+ Single chokepoint for all Atlassian operations. Routes each op to a substrate, enforces connection match, returns structured result. Caller skills (`jira-*`, `confluence-*`) MUST go through this — they MUST NOT invoke `acli` directly, call Atlassian MCP tools directly, or curl the Atlassian REST API themselves.
10
+
11
+ ## Invocation contract
12
+
13
+ The caller passes one operation plus its arguments. Operations are listed in the dispatch table below. The skill returns either the structured operation result (JSON when the substrate provides it) or a clear error.
14
+
15
+ ```text
16
+ operation: read-ticket key: PROJ-123
17
+ operation: write-ticket payload: {...}
18
+ operation: transition key: PROJ-123 to: "In Review"
19
+ operation: comment key: PROJ-123 body: "..."
20
+ operation: search-issues jql: "project = SE AND status = Open"
21
+ operation: read-page id: 12345
22
+ operation: write-page payload: {...}
23
+ ```
24
+
25
+ ## Workflow
26
+
27
+ ### Step 1 — Substrate selection (per operation)
28
+
29
+ Read config:
30
+
31
+ ```bash
32
+ SITE=$(jq -r '.atlassian.site // empty' .lisa.config.json)
33
+ CLOUDID=$(jq -r '.atlassian.cloudId // empty' .lisa.config.json)
34
+ EMAIL=$(jq -r '.atlassian.email // empty' .lisa.config.local.json 2>/dev/null)
35
+ [ -z "$CLOUDID" ] && { echo "Error: atlassian.cloudId not set. Run /lisa:setup:atlassian." >&2; exit 1; }
36
+ ```
37
+
38
+ Probe each tier in order; the first that's ready AND identity-matches is the substrate for this operation. Identity-match is verified before any operation; substrates authenticated as a different Atlassian account are switched to the configured profile when one exists, then skipped only if the switch fails or re-verification still mismatches.
39
+
40
+ ```bash
41
+ substrate=""
42
+
43
+ # Tier 1: acli for reads and non-write operations only.
44
+ #
45
+ # Do not choose acli for JIRA writes when curl/token auth is available. acli stores
46
+ # one machine-global active account and workitem writes cannot pin a cloudId per
47
+ # invocation, so switch-then-write is a TOCTOU risk in multi-account or concurrent
48
+ # sessions. Write operations prefer the cloudId-scoped REST URL below.
49
+ if [ "$OP_KIND" != "jira-write" ] && command -v acli >/dev/null 2>&1 && acli auth status >/dev/null 2>&1; then
50
+ current_site=$(acli auth status 2>/dev/null | awk '/^ Site:/{print $2}')
51
+ if [ "$current_site" != "$SITE" ]; then
52
+ # acli installed but pointing at a different site. Try switching profiles.
53
+ acli auth switch --site "$SITE" ${EMAIL:+--email "$EMAIL"} >/dev/null 2>&1 || true
54
+ current_site=$(acli auth status 2>/dev/null | awk '/^ Site:/{print $2}')
55
+ fi
56
+ if [ "$current_site" = "$SITE" ]; then
57
+ substrate="acli"
58
+ fi
59
+ fi
60
+
61
+ # Tier 2: Atlassian MCP (if acli not ready OR the operation isn't acli-covered)
62
+ # $OP_REQUIRES is a conceptual variable set by the dispatch table to "non-acli" for
63
+ # operations that have no acli adapter (e.g. read-page-descendants). It is not a real
64
+ # shell variable initialized here — the condition is illustrative pseudo-code.
65
+ if [ -z "$substrate" ] || [ "$OP_REQUIRES" = "non-acli" ]; then
66
+ # Probe via mcp__plugin_atlassian_atlassian__getAccessibleAtlassianResources.
67
+ # (Pseudo-code; actual call is the MCP tool invocation, not a bash command.)
68
+ # If the MCP returns a list and $CLOUDID is in it, MCP is identity-matched.
69
+ # If the MCP is unauthenticated or $CLOUDID is NOT in the list, MCP is skipped.
70
+ if mcp_atlassian_authenticated_and_matches_cloudid "$CLOUDID"; then
71
+ : ${substrate:=mcp}
72
+ # Mark MCP as available even if acli already won tier 1 — used for ops acli can't do.
73
+ mcp_available=true
74
+ fi
75
+ fi
76
+
77
+ # Tier 3: curl + API token (headless / multi-account / scoped-token path)
78
+ read_atlassian_token() {
79
+ local email="$1"
80
+ [ -n "$ATLASSIAN_API_TOKEN" ] && { echo "$ATLASSIAN_API_TOKEN"; return; }
81
+ local slug=$(echo "$email" | tr '[:upper:]@.' '[:lower:]__')
82
+ local varname="ATLASSIAN_API_TOKEN_${slug}"
83
+ [ -n "${!varname}" ] && { echo "${!varname}"; return; }
84
+ case "$(uname -s)" in
85
+ Darwin) security find-generic-password -s lisa-atlassian -a "$email" -w 2>/dev/null ;;
86
+ Linux) command -v secret-tool >/dev/null && secret-tool lookup service lisa-atlassian account "$email" 2>/dev/null ;;
87
+ MINGW*|MSYS*|CYGWIN*)
88
+ # `cmdkey /generic ... /pass:` stores the secret in Windows Credential Manager, but
89
+ # `cmdkey /list` never prints stored passwords (by design). Read the CredentialBlob
90
+ # back via the Win32 CredRead API through PowerShell; pass the target name via an env
91
+ # var to dodge nested quoting, and strip the CRLF powershell.exe appends.
92
+ LISA_CRED_TARGET="lisa-atlassian-${email}" powershell.exe -NoProfile -NonInteractive -Command '
93
+ Add-Type -TypeDefinition @"
94
+ using System;
95
+ using System.Runtime.InteropServices;
96
+ public static class LisaCred {
97
+ [StructLayout(LayoutKind.Sequential)]
98
+ private struct CREDENTIAL {
99
+ public int Flags; public int Type; public IntPtr TargetName; public IntPtr Comment;
100
+ public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
101
+ public int CredentialBlobSize; public IntPtr CredentialBlob; public int Persist;
102
+ public int AttributeCount; public IntPtr Attributes; public IntPtr TargetAlias; public IntPtr UserName;
103
+ }
104
+ [DllImport("advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
105
+ private static extern bool CredRead(string target, int type, int flags, out IntPtr credential);
106
+ [DllImport("advapi32.dll")] private static extern void CredFree(IntPtr cred);
107
+ public static string Read(string target) {
108
+ IntPtr p;
109
+ if (!CredRead(target, 1, 0, out p)) { return null; }
110
+ try {
111
+ CREDENTIAL c = (CREDENTIAL)Marshal.PtrToStructure(p, typeof(CREDENTIAL));
112
+ if (c.CredentialBlobSize == 0) { return String.Empty; }
113
+ return Marshal.PtrToStringUni(c.CredentialBlob, c.CredentialBlobSize / 2);
114
+ } finally { CredFree(p); }
115
+ }
116
+ }
117
+ "@
118
+ [LisaCred]::Read($env:LISA_CRED_TARGET)' 2>/dev/null | tr -d '\r' ;;
119
+ esac
120
+ }
121
+ TOKEN=$(read_atlassian_token "$EMAIL")
122
+ [ -n "$TOKEN" ] && curl_available=true && {
123
+ if [ "$OP_KIND" = "jira-write" ]; then
124
+ substrate="curl"
125
+ else
126
+ : ${substrate:=curl}
127
+ fi
128
+ }
129
+
130
+ # Fail loudly with actionable remediation if nothing works.
131
+ if [ -z "$substrate" ]; then
132
+ # Detect plugin enablement state for the suggestion.
133
+ plugin_enabled_global=$(jq -r '.enabledPlugins["atlassian@claude-plugins-official"] // false' ~/.claude/settings.json 2>/dev/null || echo "false")
134
+ plugin_enabled_project=$(jq -r '.enabledPlugins["atlassian@claude-plugins-official"] // false' .claude/settings.json 2>/dev/null || echo "false")
135
+ plugin_enabled_local=$(jq -r '.enabledPlugins["atlassian@claude-plugins-official"] // false' .claude/settings.local.json 2>/dev/null || echo "false")
136
+
137
+ cat >&2 <<EOF
138
+ Error: no Atlassian access substrate available for site $SITE.
139
+
140
+ Attempted:
141
+ acli — $(command -v acli >/dev/null && echo "installed but identity mismatch or unauthenticated" || echo "not installed")
142
+ MCP — $([ "$plugin_enabled_global" = "true" ] || [ "$plugin_enabled_project" = "true" ] || [ "$plugin_enabled_local" = "true" ] && echo "plugin enabled but not authenticated or cloudId $CLOUDID not in accessible resources" || echo "plugin not enabled in any settings.json scope")
143
+ curl — no ATLASSIAN_API_TOKEN found for $EMAIL (env, slug-suffixed env, or keychain)
144
+
145
+ Remediation paths (pick one):
146
+
147
+ 1. Install the Atlassian MCP plugin (local scope — per-developer, gitignored).
148
+ This is the simplest path for single-account developers.
149
+
150
+ Run in your terminal:
151
+
152
+ jq '.enabledPlugins["atlassian@claude-plugins-official"] = true' \\
153
+ .claude/settings.local.json 2>/dev/null > /tmp/s && \\
154
+ mv /tmp/s .claude/settings.local.json || \\
155
+ echo '{"enabledPlugins":{"atlassian@claude-plugins-official":true}}' > .claude/settings.local.json
156
+
157
+ Then restart Claude Code (or run /restart-mcp) to load the plugin, and
158
+ invoke 'mcp__plugin_atlassian_atlassian__authenticate' to complete OAuth.
159
+
160
+ 2. Install acli and authenticate (best for multi-account developers).
161
+
162
+ brew tap atlassian/homebrew-acli && brew install acli
163
+ acli auth login # OAuth as the account matching $EMAIL
164
+
165
+ 3. Provision an API token (headless / CI / scoped-token environments).
166
+
167
+ Run /lisa:setup:atlassian — guided flow with clipboard-piped keychain store.
168
+
169
+ EOF
170
+ exit 1
171
+ fi
172
+ ```
173
+
174
+ Operation dispatch then uses `$substrate` for the primary route. If the operation has no `acli` adapter and `$substrate=acli`, fall through to `$mcp_available` then `$curl_available` for the actual call. The fall-through stops at the first available tier that can perform the operation.
175
+
176
+ ### Step 2 — Connection-match check
177
+
178
+ The active connection MUST point at the cloudId/site declared in `.lisa.config.json`. Step 1's substrate selection already tries to switch mismatched acli profiles and verifies the result before selection. This step repeats the assertion before any operation runs — defensive in case the substrate state changed since selection.
179
+
180
+ Read configured site:
181
+
182
+ ```bash
183
+ cloudid=$(jq -r '.atlassian.cloudId // empty' .lisa.config.json)
184
+ site=$(jq -r '.atlassian.site // empty' .lisa.config.json) # optional human-readable site URL
185
+ email=$(jq -r '.atlassian.email // empty' .lisa.config.json) # optional, for multi-account disambiguation
186
+
187
+ if [ -z "$cloudid" ]; then
188
+ echo "Error: atlassian.cloudId not set in .lisa.config.json. Run /lisa:setup:atlassian." >&2
189
+ exit 1
190
+ fi
191
+ ```
192
+
193
+ **CLI mode check**:
194
+
195
+ ```bash
196
+ # Compare active acli profile against config.
197
+ current=$(acli auth status --json 2>/dev/null)
198
+ current_site=$(echo "$current" | jq -r '.site // empty')
199
+ current_email=$(echo "$current" | jq -r '.email // empty')
200
+
201
+ if [ -n "$site" ] && [ "$current_site" != "$site" ]; then
202
+ # Profile mismatch — switch, then re-verify. Do not trust the switch exit
203
+ # status alone because acli's active account is machine-global state.
204
+ acli auth switch --site "$site" ${email:+--email "$email"}
205
+ current=$(acli auth status --json 2>/dev/null)
206
+ current_site=$(echo "$current" | jq -r '.site // empty')
207
+ current_email=$(echo "$current" | jq -r '.email // empty')
208
+ fi
209
+
210
+ if [ -n "$site" ] && [ "$current_site" != "$site" ]; then
211
+ echo "Error: acli active site is '$current_site', but .lisa.config.json requires '$site'. Run /lisa:setup:atlassian to add or repair the matching profile." >&2
212
+ exit 1
213
+ fi
214
+
215
+ if [ -n "$email" ] && [ -n "$current_email" ] && [ "$current_email" != "$email" ]; then
216
+ echo "Error: acli active account is '$current_email', but .lisa.config.json requires '$email'. Run /lisa:setup:atlassian to add or repair the matching profile." >&2
217
+ exit 1
218
+ fi
219
+ ```
220
+
221
+ If `acli auth switch` fails because no matching profile exists, surface the error verbatim and instruct the caller to run `/lisa:setup:atlassian` to add the profile.
222
+
223
+ **curl mode check** (when the chosen op routes to curl):
224
+
225
+ ```bash
226
+ # Validate the active ATLASSIAN_API_TOKEN points at the configured account by
227
+ # hitting /rest/api/3/myself and comparing emailAddress.
228
+ AUTH=$(printf '%s:%s' "$email" "$ATLASSIAN_API_TOKEN" | base64)
229
+ myself=$(curl -s -H "Authorization: Basic $AUTH" \
230
+ "https://${site}/rest/api/3/myself")
231
+ me_email=$(echo "$myself" | jq -r '.emailAddress // empty')
232
+
233
+ if [ -z "$me_email" ]; then
234
+ echo "Error: ATLASSIAN_API_TOKEN failed authentication against $site. Run /lisa:setup:atlassian to re-issue." >&2
235
+ exit 1
236
+ fi
237
+ if [ "$me_email" != "$email" ]; then
238
+ echo "Error: ATLASSIAN_API_TOKEN belongs to '$me_email', but .lisa.config.local.json declares '$email'. Multi-account misconfiguration." >&2
239
+ exit 1
240
+ fi
241
+ ```
242
+
243
+ If validation fails, never silently proceed — abort and instruct the user to fix env.
244
+
245
+ ### Step 2.5 — JIRA description normalization
246
+
247
+ For `write-ticket` create/edit operations, normalize any Lisa-authored JIRA description before dispatching to a substrate. JIRA Cloud stores descriptions as Atlassian Document Format (ADF). `acli` does not convert Markdown or JIRA wiki markup to ADF; if plain text is passed to `--description` / `--description-file`, JIRA stores one literal paragraph containing strings like `## Repository` or `h2. Repository`. That breaks `jira-validate-ticket` heading checks and renders poorly for humans.
248
+
249
+ Use the shared converter at `scripts/markdown-to-adf.mjs` from this skill for every write path that carries a string description:
250
+
251
+ ```bash
252
+ normalize_jira_description_payload() {
253
+ local payload_file="$1"
254
+ local converter="$(dirname "$0")/scripts/markdown-to-adf.mjs"
255
+
256
+ jq -e '.fields.description | type == "string"' "$payload_file" >/dev/null 2>&1 || return 0
257
+
258
+ local markdown_file adf_file
259
+ markdown_file=$(mktemp)
260
+ adf_file=$(mktemp)
261
+ jq -r '.fields.description' "$payload_file" > "$markdown_file"
262
+ node "$converter" < "$markdown_file" > "$adf_file"
263
+ jq --slurpfile adf "$adf_file" '.fields.description = $adf[0]' "$payload_file" > "$payload_file.tmp"
264
+ mv "$payload_file.tmp" "$payload_file"
265
+ }
266
+ ```
267
+
268
+ Rules:
269
+
270
+ - Convert Markdown headings (`#` / `##` / `###`) and JIRA wiki headings (`h1.` / `h2.` / `h3.`) to ADF `heading` nodes.
271
+ - Convert fenced code blocks, bullet lists, numbered lists, paragraphs, inline code, and bold text to their ADF equivalents.
272
+ - Run this for acli, curl, and MCP writes unless the caller already supplied an ADF object (`description.type == "doc"`). Do not double-convert existing ADF.
273
+ - For acli, pass the normalized JSON through `--from-json`; do not use `--description` or `--description-file` with raw Markdown/wiki text.
274
+
275
+ ### Step 3 — Operation dispatch
276
+
277
+ Substrate column meanings:
278
+
279
+ - **`acli`**: routes through `acli`. Preferred when available and identity-matched.
280
+ - **`MCP`**: routes through the Atlassian MCP. Preferred when acli can't do the op and the MCP is identity-matched (cloudId in `getAccessibleAtlassianResources`).
281
+ - **`curl`**: routes through curl + Basic auth + `ATLASSIAN_API_TOKEN`. Used when neither acli nor MCP is available.
282
+ - Multiple cells filled means tier ordering applies — try acli, then MCP, then curl, taking the first that has an adapter for the op AND is identity-matched.
283
+ - One cell means only that substrate can perform the op.
284
+
285
+ `<SITE>` = `.atlassian.site` (e.g. `acme.atlassian.net`). `<CLOUDID>` = `.atlassian.cloudId`. `<AUTH>` = `Basic $(printf '%s:%s' "$email" "$ATLASSIAN_API_TOKEN" | base64)`. JIRA curl writes use the cloudId-bound Atlassian gateway `https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/...`; JIRA curl reads may use either that gateway or `https://<SITE>/rest/api/3/...` after the token account check. Confluence uses `/wiki/rest/api/...` (v1) or `/api/v2/...` (v2).
286
+
287
+ | Operation | acli adapter | MCP adapter | curl adapter |
288
+ |---|---|---|---|
289
+ | **JIRA ops** | | | |
290
+ | `read-ticket key:<K>` | `acli jira workitem view <K> --fields '*all' --json` | `mcp__plugin_atlassian_atlassian__getJiraIssue` | `GET https://<SITE>/rest/api/3/issue/<K>?fields=*all` |
291
+ | `write-ticket payload:<P>` (create) | guarded fallback only: `acli jira workitem create --from-json <P>` + response tenant assertion | `mcp__plugin_atlassian_atlassian__createJiraIssue` | `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue` body=`<P>` |
292
+ | `write-ticket payload:<P>` (edit) | guarded fallback only: `acli jira workitem edit <K> --from-json <P>` + response tenant assertion | `mcp__plugin_atlassian_atlassian__editJiraIssue` | `PUT https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue/<K>` body=`<P>` |
293
+ | `transition key:<K> to:<S>` | guarded fallback only: `acli jira workitem transition --key <K> --status "<S>" --yes` + post-read tenant assertion | `mcp__plugin_atlassian_atlassian__transitionJiraIssue` | resolve transition id then `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue/<K>/transitions` |
294
+ | `transitions key:<K>` | (not exposed) | `mcp__plugin_atlassian_atlassian__getTransitionsForJiraIssue` | `GET https://<SITE>/rest/api/3/issue/<K>/transitions` |
295
+ | `comment key:<K> body:<B>` | guarded fallback only: `acli jira workitem comment add --key <K> --body "<B>"` + post-read tenant assertion | `mcp__plugin_atlassian_atlassian__addCommentToJiraIssue` | `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue/<K>/comment` |
296
+ | `link from:<K> to:<K2> type:<T>` | guarded fallback only: `acli jira workitem link create --in <K> --out <K2> --type "<T>" --yes` + direction and tenant assertion (see direction note) | `mcp__plugin_atlassian_atlassian__createJiraIssueLink` | `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issueLink` |
297
+ | `remote-links key:<K>` | (not exposed) | `mcp__plugin_atlassian_atlassian__getJiraIssueRemoteIssueLinks` | `GET https://<SITE>/rest/api/3/issue/<K>/remotelink` |
298
+ | `search-issues jql:<J>` | `acli jira workitem search --jql "<J>" --json` | `mcp__plugin_atlassian_atlassian__searchJiraIssuesUsingJql` | `POST https://<SITE>/rest/api/3/search/jql` |
299
+ | `list-projects` | `acli jira project list --paginate --json` | `mcp__plugin_atlassian_atlassian__getVisibleJiraProjects` | `GET https://<SITE>/rest/api/3/project/search` |
300
+ | `issue-type-metadata project:<K>` | `acli jira project view --key <K> --include-all --json` | `mcp__plugin_atlassian_atlassian__getJiraProjectIssueTypesMetadata` | `GET https://<SITE>/rest/api/3/issuetype/project?projectId=<id>` |
301
+ | **Confluence ops** | | | |
302
+ | `read-page id:<I>` | `acli confluence page view --id <I> --json` | `mcp__plugin_atlassian_atlassian__getConfluencePage` | `GET https://api.atlassian.com/ex/confluence/<CLOUDID>/wiki/rest/api/content/<I>` |
303
+ | `read-page-descendants id:<I>` | — | `mcp__plugin_atlassian_atlassian__getConfluencePageDescendants` | `GET .../content/<I>/descendant/page` |
304
+ | `read-page-comments id:<I> kind:<footer\|inline>` | — | `mcp__plugin_atlassian_atlassian__getConfluencePageFooterComments` / `getConfluencePageInlineComments` | `GET .../content/<I>/child/comment?location=<kind>` |
305
+ | `read-comment-children id:<C>` | — | `mcp__plugin_atlassian_atlassian__getConfluenceCommentChildren` | `GET .../content/<C>/child/comment` |
306
+ | `write-page payload:<P>` (create) | — | `mcp__plugin_atlassian_atlassian__createConfluencePage` | `POST .../wiki/rest/api/content` body=`<P>` |
307
+ | `write-page payload:<P>` (edit) | — | `mcp__plugin_atlassian_atlassian__updateConfluencePage` | `PUT .../content/<I>` body must include `version.number` bumped |
308
+ | `label-page id:<I> add:<L1,L2> remove:<L3,L4>` | — | (no v2 label-write endpoint on MCP) | (Atlassian gap; not used by lisa — see "Confluence PRD lifecycle" rule) |
309
+ | `comment-page id:<I> kind:<footer\|inline> body:<B>` | — | `mcp__plugin_atlassian_atlassian__createConfluenceFooterComment` / `createConfluenceInlineComment` | `POST .../content` body has `type=comment` |
310
+ | `search-pages cql:<Q>` | — | `mcp__plugin_atlassian_atlassian__searchConfluenceUsingCql` | `GET .../content/search?cql=<Q>` |
311
+ | `list-spaces` | `acli confluence space list --type global --json` | `mcp__plugin_atlassian_atlassian__getConfluenceSpaces` | `GET .../wiki/rest/api/space` |
312
+ | **Common ops** | | | |
313
+ | `list-sites` | `acli auth status --json` | `mcp__plugin_atlassian_atlassian__getAccessibleAtlassianResources` | `GET https://api.atlassian.com/oauth/token/accessible-resources` |
314
+
315
+ **Confluence v1 vs v2:** every Confluence curl path above uses **v1** (`/wiki/rest/api/...`). v1 is deprecated by Atlassian but as of writing remains functional for API-token Basic auth. The v2 API (`/api/v2/...`) requires *granular* OAuth scopes that aren't issued to Basic-auth API tokens consistently — so v1 is the safer path for now. When Atlassian fully retires v1, this table must move to v2 (the dispatch is the only thing that changes; the substrate-selection logic is unaffected).
316
+
317
+ **acli flag note:** acli's `--output` flag does not exist; the correct flag is `--json`. List commands require `--paginate` or `--limit` (no implicit fetch-all). `acli jira workitem view` defaults to a restricted field set (`key,issuetype,summary,status,assignee,description`), so `read-ticket` MUST pass `--fields '*all'` or an explicit equivalent that includes every downstream dependency: parent, subtasks, issue links, components, labels, priority, status, issue type, summary, description, fix versions, affected versions, attachments, comments, estimates, sprint/story-point fields, and project-required custom fields. Never rely on the default view fields; they hide parent/components/labels and corrupt leaf-only, relationship-search, build-ready, and required-custom-field gates. Several documented adapters are nominal — verify against `acli <subcmd> --help` before relying on them. When acli's adapter is broken or missing for a specific op, fall through to MCP (if identity-matched) then curl per the tier ordering.
318
+
319
+ **JIRA write tenant-safety rule:** create, edit, transition, comment, and link are write operations. They MUST prefer the curl adapter whenever token auth is available because the URL includes `<CLOUDID>` and cannot be redirected by the user-global acli active account. If the flow must fall back to acli for a write, it is a guarded fallback, not the normal path:
320
+
321
+ 1. Switch and assert the active `acli auth status` site/email matches config immediately before the write.
322
+ 2. Execute the write.
323
+ 3. Read the affected issue(s) immediately after the write.
324
+ 4. Assert each response belongs to the configured tenant by checking one of: response `self` URL host equals `<SITE>`, response `self` URL path includes `/ex/jira/<CLOUDID>/`, or response metadata reports `<CLOUDID>`.
325
+ 5. If the assertion fails, stop, report a cross-tenant write hazard, and best-effort roll back the write when there is a safe reversal: delete a newly created issue, remove a newly created comment/link, or revert a reversible field edit. Never continue as if the write succeeded.
326
+
327
+ Do not treat a successful `acli auth switch` or pre-write `auth status` as sufficient for tenant safety. Another process can mutate the global acli active account between the check and the write.
328
+
329
+ **acli link-create direction is invertible — flags and verification:** acli has no `--inward`/`--outward` flags; the real flags are `--in` and `--out` (confirm with `acli jira workitem link create --help`). For a `Blocks` link, **`--in` is the blocker and `--out` is the blocked** issue, i.e. `--in <X> --out <Y> --type Blocks` resolves to "X blocks Y" (Y `is blocked by` X). The lisa op `link from:<K> to:<K2> type:<T>` means "K ⟨T⟩ K2", so the blocker `from` maps to `--in` and the blocked `to` maps to `--out` (as in the adapter above). The acli success banner only echoes the `--in`/`--out` values you passed — it does NOT confirm the resolved semantic direction, so a reversed link reports success and looks fine. **After every `link` write, re-read the affected issues via `read-ticket` (which already requests `--fields '*all'`) and confirm `issuelinks[].type` + `inwardIssue`/`outwardIssue` resolve to the intended `blocks` / `is blocked by` direction.** Skipping this can silently reverse an entire epic's dependency graph — e.g. cutover tickets recorded as *blocking* the prerequisites that should block them.
330
+
331
+ **JIRA terminal-resolution note:** when a caller marks a transition as terminal per `leaf-only-lifecycle`, the substrate must not treat a Done-named status as sufficient by name alone. After `transition key:<K> to:<S>`, re-read the issue and verify `statusCategory = Done`; if the workflow requires a resolution, verify `resolution` is set. If the transition screen requires a resolution value, pass the configured default resolution when available; otherwise return a setup error so the build-intake skill can report the workflow gap instead of silently leaving an unresolved ticket in a Done-looking status.
332
+
333
+ Operations not in this table are unsupported — add an adapter row before using them. Adapters MUST return a structured response (parse `acli`'s `--json`; jq-process curl's raw JSON).
334
+
335
+ ### Payload conventions
336
+
337
+ - `write-ticket` payload: full JSON spec when creating; partial JSON (only changed fields, with `key` to identify) when editing. Adapters detect create vs edit by presence of `key`.
338
+ - `write-page` payload: supports a label-only mutation form — `{ "id": "<I>", "labels": { "add": [...], "remove": [...] } }` — so callers transitioning PRD lifecycle labels do not need to resend the page body. Full create/update payloads also accepted.
339
+ - `comment-page` `kind: inline` requires `anchor` (the highlighted text the comment attaches to). `kind: footer` ignores `anchor`.
340
+
341
+ ### Step 4 — Return result
342
+
343
+ Emit either:
344
+
345
+ - The structured operation result (JSON object), wrapped in a `<result>` block for caller parsing, OR
346
+ - An error message prefixed with `Error:` and a remediation hint. Exit non-zero. Include the HTTP status code (curl) or acli exit code so callers can route on it.
347
+
348
+ Do not paraphrase substrate output beyond JSON normalization.
349
+
350
+ ## Invariants
351
+
352
+ - Caller skills never invoke `acli` or `curl` against Atlassian directly. They only invoke this skill.
353
+ - Substrate is decided once per skill invocation and never switches mid-operation.
354
+ - Connection match is mandatory. Operations that bypass it (because "the user obviously meant the configured site") are forbidden.
355
+ - Profile mutations (`acli auth switch`) are allowed when acli is the active substrate. The curl substrate never mutates the token — if `ATLASSIAN_API_TOKEN` doesn't match the configured account, fail loud rather than silently substituting.
356
+ - JIRA writes are cloudId-bound by default. `acli` write adapters are fallback-only and must perform post-write tenant assertions plus safe rollback on mismatch.
357
+ - `.lisa.config.local.json` overrides `.lisa.config.json` per-key — the same precedence rule as every other consumer of project config.
358
+
359
+ ## Headless behavior
360
+
361
+ In a headless / non-interactive context (no TTY, `CI=true`, or `-p` mode), the MCP tier is unavailable (its OAuth flow needs a browser). The substrate ladder collapses to: acli (if pre-authenticated, e.g., a CI image baked with a service-account token) → curl + `ATLASSIAN_API_TOKEN`. Never block on interactive prompts. If both fail readiness checks, exit non-zero with a deterministic error.
@@ -0,0 +1,4 @@
1
+ display_name: "Atlassian Access"
2
+ short_description: "Vendor-neutral access layer for…"
3
+ default_prompt:
4
+ - "Use $lisa-atlassian-access: Vendor-neutral access layer for…."
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Convert the Markdown subset Lisa writes for JIRA descriptions into ADF.
4
+ *
5
+ * This intentionally supports the description shapes produced by Lisa skills:
6
+ * headings, paragraphs, fenced code blocks, bullet lists, numbered lists,
7
+ * inline code, and bold text. Unsupported Markdown stays as paragraph text
8
+ * instead of being dropped.
9
+ */
10
+
11
+ const ADF_VERSION = 1;
12
+
13
+ /**
14
+ * Convert a Markdown string into an Atlassian Document Format document.
15
+ * @param {string} markdown Markdown or wiki-heading text.
16
+ * @returns {{version: 1, type: "doc", content: Array<Record<string, unknown>>}}
17
+ */
18
+ export function markdownToAdf(markdown) {
19
+ const lines = String(markdown ?? "")
20
+ .replace(/\r\n?/g, "\n")
21
+ .split("\n");
22
+ const content = [];
23
+ let paragraph = [];
24
+ let list = null;
25
+ let fence = null;
26
+
27
+ const flushParagraph = () => {
28
+ if (paragraph.length === 0) {
29
+ return;
30
+ }
31
+ content.push(paragraphNode(paragraph.join(" ")));
32
+ paragraph = [];
33
+ };
34
+
35
+ const flushList = () => {
36
+ if (!list) {
37
+ return;
38
+ }
39
+ content.push({
40
+ type: list.ordered ? "orderedList" : "bulletList",
41
+ content: list.items.map(item => ({
42
+ type: "listItem",
43
+ content: [paragraphNode(item)],
44
+ })),
45
+ });
46
+ list = null;
47
+ };
48
+
49
+ const flushFence = () => {
50
+ if (!fence) {
51
+ return;
52
+ }
53
+ const attrs = fence.language ? { language: fence.language } : {};
54
+ content.push({
55
+ type: "codeBlock",
56
+ attrs,
57
+ content: [{ type: "text", text: fence.lines.join("\n") }],
58
+ });
59
+ fence = null;
60
+ };
61
+
62
+ for (const line of lines) {
63
+ const fenceMatch = line.match(/^```([A-Za-z0-9_-]+)?\s*$/);
64
+ if (fenceMatch) {
65
+ if (fence) {
66
+ flushFence();
67
+ } else {
68
+ flushParagraph();
69
+ flushList();
70
+ fence = { language: fenceMatch[1] ?? "", lines: [] };
71
+ }
72
+ continue;
73
+ }
74
+
75
+ if (fence) {
76
+ fence.lines.push(line);
77
+ continue;
78
+ }
79
+
80
+ const heading = parseHeading(line);
81
+ if (heading) {
82
+ flushParagraph();
83
+ flushList();
84
+ content.push({
85
+ type: "heading",
86
+ attrs: { level: heading.level },
87
+ content: parseInline(heading.text),
88
+ });
89
+ continue;
90
+ }
91
+
92
+ const unordered = line.match(/^\s*[-*]\s+(.+)$/);
93
+ if (unordered) {
94
+ flushParagraph();
95
+ if (!list || list.ordered) {
96
+ flushList();
97
+ list = { ordered: false, items: [] };
98
+ }
99
+ list.items.push(unordered[1]);
100
+ continue;
101
+ }
102
+
103
+ const ordered = line.match(/^\s*\d+[.)]\s+(.+)$/);
104
+ if (ordered) {
105
+ flushParagraph();
106
+ if (!list || !list.ordered) {
107
+ flushList();
108
+ list = { ordered: true, items: [] };
109
+ }
110
+ list.items.push(ordered[1]);
111
+ continue;
112
+ }
113
+
114
+ if (line.trim() === "") {
115
+ flushParagraph();
116
+ flushList();
117
+ continue;
118
+ }
119
+
120
+ flushList();
121
+ paragraph.push(line.trim());
122
+ }
123
+
124
+ flushFence();
125
+ flushParagraph();
126
+ flushList();
127
+
128
+ return {
129
+ version: ADF_VERSION,
130
+ type: "doc",
131
+ content,
132
+ };
133
+ }
134
+
135
+ /**
136
+ * Parse Markdown and common JIRA wiki-style headings.
137
+ * @param {string} line A single input line.
138
+ * @returns {{level: number, text: string} | null}
139
+ */
140
+ function parseHeading(line) {
141
+ const markdown = line.match(/^(#{1,6})\s+(.+)$/);
142
+ if (markdown) {
143
+ return { level: markdown[1].length, text: markdown[2].trim() };
144
+ }
145
+
146
+ const wiki = line.match(/^h([1-6])\.\s+(.+)$/i);
147
+ if (wiki) {
148
+ return { level: Number(wiki[1]), text: wiki[2].trim() };
149
+ }
150
+
151
+ return null;
152
+ }
153
+
154
+ /**
155
+ * Create an ADF paragraph node.
156
+ * @param {string} text Text content.
157
+ * @returns {{type: "paragraph", content: Array<Record<string, unknown>>}}
158
+ */
159
+ function paragraphNode(text) {
160
+ return {
161
+ type: "paragraph",
162
+ content: parseInline(text),
163
+ };
164
+ }
165
+
166
+ /**
167
+ * Parse Lisa's inline formatting subset.
168
+ * @param {string} text Text with optional `code` and **strong** spans.
169
+ * @returns {Array<Record<string, unknown>>}
170
+ */
171
+ function parseInline(text) {
172
+ const nodes = [];
173
+ const pattern = /(`([^`]+)`|\*\*([^*]+)\*\*)/g;
174
+ let lastIndex = 0;
175
+ let match;
176
+
177
+ while ((match = pattern.exec(text)) !== null) {
178
+ if (match.index > lastIndex) {
179
+ nodes.push({ type: "text", text: text.slice(lastIndex, match.index) });
180
+ }
181
+
182
+ if (match[2]) {
183
+ nodes.push({
184
+ type: "text",
185
+ text: match[2],
186
+ marks: [{ type: "code" }],
187
+ });
188
+ } else {
189
+ nodes.push({
190
+ type: "text",
191
+ text: match[3],
192
+ marks: [{ type: "strong" }],
193
+ });
194
+ }
195
+ lastIndex = pattern.lastIndex;
196
+ }
197
+
198
+ if (lastIndex < text.length) {
199
+ nodes.push({ type: "text", text: text.slice(lastIndex) });
200
+ }
201
+
202
+ return nodes.length > 0 ? nodes : [{ type: "text", text: "" }];
203
+ }
204
+
205
+ if (import.meta.url === `file://${process.argv[1]}`) {
206
+ let input = "";
207
+ process.stdin.setEncoding("utf8");
208
+ process.stdin.on("data", chunk => {
209
+ input += chunk;
210
+ });
211
+ process.stdin.on("end", () => {
212
+ process.stdout.write(`${JSON.stringify(markdownToAdf(input), null, 2)}\n`);
213
+ });
214
+ }