@codyswann/lisa 1.56.0 → 1.56.2

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 (469) hide show
  1. package/.claude-plugin/marketplace.json +11 -5
  2. package/all/merge/.claude/settings.json +7 -0
  3. package/package.json +1 -1
  4. package/plugins/lisa/.claude-plugin/plugin.json +148 -0
  5. package/plugins/lisa-cdk/.claude-plugin/plugin.json +3 -159
  6. package/plugins/lisa-expo/.claude-plugin/plugin.json +2 -146
  7. package/plugins/lisa-expo/commands/jira/add-journey.md +1 -1
  8. package/plugins/lisa-expo/commands/jira/create.md +1 -1
  9. package/plugins/lisa-expo/commands/jira/evidence.md +1 -1
  10. package/plugins/lisa-expo/commands/jira/journey.md +1 -1
  11. package/plugins/lisa-expo/commands/jira/verify.md +1 -1
  12. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +3 -159
  13. package/plugins/lisa-rails/.claude-plugin/plugin.json +2 -120
  14. package/plugins/lisa-rails/commands/jira/add-journey.md +1 -1
  15. package/plugins/lisa-rails/commands/jira/create.md +1 -1
  16. package/plugins/lisa-rails/commands/jira/evidence.md +1 -1
  17. package/plugins/lisa-rails/commands/jira/journey.md +1 -1
  18. package/plugins/lisa-rails/commands/jira/verify.md +1 -1
  19. package/plugins/lisa-rails/commands/plan/add-test-coverage.md +1 -1
  20. package/plugins/lisa-rails/commands/plan/fix-linter-error.md +1 -1
  21. package/plugins/lisa-rails/commands/plan/lower-code-complexity.md +1 -1
  22. package/plugins/lisa-rails/commands/plan/reduce-max-lines-per-function.md +1 -1
  23. package/plugins/lisa-rails/commands/plan/reduce-max-lines.md +1 -1
  24. package/plugins/lisa-typescript/.claude-plugin/plugin.json +2 -127
  25. package/plugins/src/base/.claude-plugin/plugin.json +78 -0
  26. package/plugins/src/cdk/.claude-plugin/plugin.json +2 -81
  27. package/plugins/src/expo/.claude-plugin/plugin.json +1 -68
  28. package/plugins/{lisa-typescript → src/expo}/commands/jira/add-journey.md +1 -1
  29. package/plugins/{lisa-nestjs → src/expo}/commands/jira/create.md +1 -1
  30. package/plugins/{lisa-nestjs → src/expo}/commands/jira/evidence.md +1 -1
  31. package/plugins/{lisa-nestjs → src/expo}/commands/jira/journey.md +1 -1
  32. package/plugins/{lisa-nestjs → src/expo}/commands/jira/verify.md +1 -1
  33. package/plugins/src/nestjs/.claude-plugin/plugin.json +2 -81
  34. package/plugins/src/rails/.claude-plugin/plugin.json +1 -59
  35. package/plugins/{lisa-nestjs → src/rails}/commands/jira/add-journey.md +1 -1
  36. package/plugins/{lisa-typescript → src/rails}/commands/jira/create.md +1 -1
  37. package/plugins/{lisa-typescript → src/rails}/commands/jira/evidence.md +1 -1
  38. package/plugins/{lisa-typescript → src/rails}/commands/jira/journey.md +1 -1
  39. package/plugins/{lisa-typescript → src/rails}/commands/jira/verify.md +1 -1
  40. package/plugins/{lisa-expo → src/rails}/commands/plan/add-test-coverage.md +1 -1
  41. package/plugins/{lisa-expo → src/rails}/commands/plan/fix-linter-error.md +1 -1
  42. package/plugins/{lisa-expo → src/rails}/commands/plan/lower-code-complexity.md +1 -1
  43. package/plugins/{lisa-expo → src/rails}/commands/plan/reduce-max-lines-per-function.md +1 -1
  44. package/plugins/{lisa-expo → src/rails}/commands/plan/reduce-max-lines.md +1 -1
  45. package/plugins/src/typescript/.claude-plugin/plugin.json +1 -58
  46. package/scripts/build-plugins.sh +30 -17
  47. package/scripts/install-claude-plugins.sh +28 -11
  48. package/typescript/merge/.claude/settings.json +2 -2
  49. package/typescript/package-lisa/package.lisa.json +2 -1
  50. package/plugins/lisa-expo/agents/agent-architect.md +0 -310
  51. package/plugins/lisa-expo/agents/architecture-specialist.md +0 -53
  52. package/plugins/lisa-expo/agents/debug-specialist.md +0 -204
  53. package/plugins/lisa-expo/agents/git-history-analyzer.md +0 -183
  54. package/plugins/lisa-expo/agents/hooks-expert.md +0 -74
  55. package/plugins/lisa-expo/agents/implementer.md +0 -54
  56. package/plugins/lisa-expo/agents/learner.md +0 -44
  57. package/plugins/lisa-expo/agents/performance-specialist.md +0 -95
  58. package/plugins/lisa-expo/agents/product-specialist.md +0 -72
  59. package/plugins/lisa-expo/agents/quality-specialist.md +0 -55
  60. package/plugins/lisa-expo/agents/security-specialist.md +0 -58
  61. package/plugins/lisa-expo/agents/skill-evaluator.md +0 -246
  62. package/plugins/lisa-expo/agents/slash-command-architect.md +0 -87
  63. package/plugins/lisa-expo/agents/test-specialist.md +0 -64
  64. package/plugins/lisa-expo/agents/verification-specialist.md +0 -189
  65. package/plugins/lisa-expo/agents/web-search-researcher.md +0 -112
  66. package/plugins/lisa-expo/commands/git/commit-and-submit-pr.md +0 -7
  67. package/plugins/lisa-expo/commands/git/commit-submit-pr-and-verify.md +0 -7
  68. package/plugins/lisa-expo/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  69. package/plugins/lisa-expo/commands/git/commit.md +0 -7
  70. package/plugins/lisa-expo/commands/git/prune.md +0 -6
  71. package/plugins/lisa-expo/commands/git/submit-pr.md +0 -7
  72. package/plugins/lisa-expo/commands/jira/fix.md +0 -7
  73. package/plugins/lisa-expo/commands/jira/implement.md +0 -7
  74. package/plugins/lisa-expo/commands/jira/sync.md +0 -7
  75. package/plugins/lisa-expo/commands/plan/create.md +0 -6
  76. package/plugins/lisa-expo/commands/plan/execute.md +0 -7
  77. package/plugins/lisa-expo/commands/plan/local-code-review.md +0 -6
  78. package/plugins/lisa-expo/commands/pull-request/review.md +0 -7
  79. package/plugins/lisa-expo/commands/review/implementation.md +0 -7
  80. package/plugins/lisa-expo/commands/security/zap-scan.md +0 -6
  81. package/plugins/lisa-expo/commands/sonarqube/check.md +0 -6
  82. package/plugins/lisa-expo/commands/sonarqube/fix.md +0 -6
  83. package/plugins/lisa-expo/commands/tasks/load.md +0 -7
  84. package/plugins/lisa-expo/commands/tasks/sync.md +0 -7
  85. package/plugins/lisa-expo/hooks/debug-hook.sh +0 -47
  86. package/plugins/lisa-expo/hooks/enforce-plan-rules.sh +0 -15
  87. package/plugins/lisa-expo/hooks/format-on-edit.sh +0 -76
  88. package/plugins/lisa-expo/hooks/install-pkgs.sh +0 -64
  89. package/plugins/lisa-expo/hooks/lint-on-edit.sh +0 -81
  90. package/plugins/lisa-expo/hooks/notify-ntfy.sh +0 -183
  91. package/plugins/lisa-expo/hooks/setup-jira-cli.sh +0 -52
  92. package/plugins/lisa-expo/hooks/sg-scan-on-edit.sh +0 -68
  93. package/plugins/lisa-expo/hooks/sync-tasks.sh +0 -107
  94. package/plugins/lisa-expo/hooks/ticket-sync-reminder.sh +0 -23
  95. package/plugins/lisa-expo/hooks/track-plan-sessions.sh +0 -164
  96. package/plugins/lisa-expo/hooks/verify-completion.sh +0 -77
  97. package/plugins/lisa-expo/rules/README.md +0 -240
  98. package/plugins/lisa-expo/rules/coding-philosophy.md +0 -428
  99. package/plugins/lisa-expo/rules/lisa.md +0 -37
  100. package/plugins/lisa-expo/rules/verfication.md +0 -596
  101. package/plugins/lisa-expo/skills/agent-design-best-practices/SKILL.md +0 -219
  102. package/plugins/lisa-expo/skills/git-commit/SKILL.md +0 -48
  103. package/plugins/lisa-expo/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  104. package/plugins/lisa-expo/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  105. package/plugins/lisa-expo/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  106. package/plugins/lisa-expo/skills/git-prune/SKILL.md +0 -35
  107. package/plugins/lisa-expo/skills/git-submit-pr/SKILL.md +0 -44
  108. package/plugins/lisa-expo/skills/jira-fix/SKILL.md +0 -16
  109. package/plugins/lisa-expo/skills/jira-implement/SKILL.md +0 -18
  110. package/plugins/lisa-expo/skills/jira-sync/SKILL.md +0 -63
  111. package/plugins/lisa-expo/skills/jsdoc-best-practices/SKILL.md +0 -432
  112. package/plugins/lisa-expo/skills/lisa-review-implementation/SKILL.md +0 -209
  113. package/plugins/lisa-expo/skills/plan-add-test-coverage/SKILL.md +0 -44
  114. package/plugins/lisa-expo/skills/plan-execute/SKILL.md +0 -89
  115. package/plugins/lisa-expo/skills/plan-fix-linter-error/SKILL.md +0 -45
  116. package/plugins/lisa-expo/skills/plan-local-code-review/SKILL.md +0 -88
  117. package/plugins/lisa-expo/skills/plan-lower-code-complexity/SKILL.md +0 -44
  118. package/plugins/lisa-expo/skills/plan-reduce-max-lines/SKILL.md +0 -45
  119. package/plugins/lisa-expo/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  120. package/plugins/lisa-expo/skills/pull-request-review/SKILL.md +0 -68
  121. package/plugins/lisa-expo/skills/security-zap-scan/SKILL.md +0 -33
  122. package/plugins/lisa-expo/skills/sonarqube-check/SKILL.md +0 -11
  123. package/plugins/lisa-expo/skills/sonarqube-fix/SKILL.md +0 -8
  124. package/plugins/lisa-expo/skills/tasks-load/SKILL.md +0 -88
  125. package/plugins/lisa-expo/skills/tasks-sync/SKILL.md +0 -108
  126. package/plugins/lisa-nestjs/agents/agent-architect.md +0 -310
  127. package/plugins/lisa-nestjs/agents/architecture-specialist.md +0 -53
  128. package/plugins/lisa-nestjs/agents/debug-specialist.md +0 -204
  129. package/plugins/lisa-nestjs/agents/git-history-analyzer.md +0 -183
  130. package/plugins/lisa-nestjs/agents/hooks-expert.md +0 -74
  131. package/plugins/lisa-nestjs/agents/implementer.md +0 -54
  132. package/plugins/lisa-nestjs/agents/learner.md +0 -44
  133. package/plugins/lisa-nestjs/agents/performance-specialist.md +0 -95
  134. package/plugins/lisa-nestjs/agents/product-specialist.md +0 -72
  135. package/plugins/lisa-nestjs/agents/quality-specialist.md +0 -55
  136. package/plugins/lisa-nestjs/agents/security-specialist.md +0 -58
  137. package/plugins/lisa-nestjs/agents/skill-evaluator.md +0 -246
  138. package/plugins/lisa-nestjs/agents/slash-command-architect.md +0 -87
  139. package/plugins/lisa-nestjs/agents/test-specialist.md +0 -64
  140. package/plugins/lisa-nestjs/agents/verification-specialist.md +0 -189
  141. package/plugins/lisa-nestjs/agents/web-search-researcher.md +0 -112
  142. package/plugins/lisa-nestjs/commands/git/commit-and-submit-pr.md +0 -7
  143. package/plugins/lisa-nestjs/commands/git/commit-submit-pr-and-verify.md +0 -7
  144. package/plugins/lisa-nestjs/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  145. package/plugins/lisa-nestjs/commands/git/commit.md +0 -7
  146. package/plugins/lisa-nestjs/commands/git/prune.md +0 -6
  147. package/plugins/lisa-nestjs/commands/git/submit-pr.md +0 -7
  148. package/plugins/lisa-nestjs/commands/jira/fix.md +0 -7
  149. package/plugins/lisa-nestjs/commands/jira/implement.md +0 -7
  150. package/plugins/lisa-nestjs/commands/jira/sync.md +0 -7
  151. package/plugins/lisa-nestjs/commands/plan/add-test-coverage.md +0 -7
  152. package/plugins/lisa-nestjs/commands/plan/create.md +0 -6
  153. package/plugins/lisa-nestjs/commands/plan/execute.md +0 -7
  154. package/plugins/lisa-nestjs/commands/plan/fix-linter-error.md +0 -7
  155. package/plugins/lisa-nestjs/commands/plan/local-code-review.md +0 -6
  156. package/plugins/lisa-nestjs/commands/plan/lower-code-complexity.md +0 -6
  157. package/plugins/lisa-nestjs/commands/plan/reduce-max-lines-per-function.md +0 -7
  158. package/plugins/lisa-nestjs/commands/plan/reduce-max-lines.md +0 -7
  159. package/plugins/lisa-nestjs/commands/pull-request/review.md +0 -7
  160. package/plugins/lisa-nestjs/commands/review/implementation.md +0 -7
  161. package/plugins/lisa-nestjs/commands/security/zap-scan.md +0 -6
  162. package/plugins/lisa-nestjs/commands/sonarqube/check.md +0 -6
  163. package/plugins/lisa-nestjs/commands/sonarqube/fix.md +0 -6
  164. package/plugins/lisa-nestjs/commands/tasks/load.md +0 -7
  165. package/plugins/lisa-nestjs/commands/tasks/sync.md +0 -7
  166. package/plugins/lisa-nestjs/hooks/debug-hook.sh +0 -47
  167. package/plugins/lisa-nestjs/hooks/enforce-plan-rules.sh +0 -15
  168. package/plugins/lisa-nestjs/hooks/format-on-edit.sh +0 -76
  169. package/plugins/lisa-nestjs/hooks/install-pkgs.sh +0 -64
  170. package/plugins/lisa-nestjs/hooks/lint-on-edit.sh +0 -81
  171. package/plugins/lisa-nestjs/hooks/notify-ntfy.sh +0 -183
  172. package/plugins/lisa-nestjs/hooks/setup-jira-cli.sh +0 -52
  173. package/plugins/lisa-nestjs/hooks/sg-scan-on-edit.sh +0 -68
  174. package/plugins/lisa-nestjs/hooks/sync-tasks.sh +0 -107
  175. package/plugins/lisa-nestjs/hooks/ticket-sync-reminder.sh +0 -23
  176. package/plugins/lisa-nestjs/hooks/track-plan-sessions.sh +0 -164
  177. package/plugins/lisa-nestjs/hooks/verify-completion.sh +0 -77
  178. package/plugins/lisa-nestjs/rules/README.md +0 -240
  179. package/plugins/lisa-nestjs/rules/coding-philosophy.md +0 -428
  180. package/plugins/lisa-nestjs/rules/lisa.md +0 -37
  181. package/plugins/lisa-nestjs/rules/verfication.md +0 -596
  182. package/plugins/lisa-nestjs/skills/agent-design-best-practices/SKILL.md +0 -219
  183. package/plugins/lisa-nestjs/skills/git-commit/SKILL.md +0 -48
  184. package/plugins/lisa-nestjs/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  185. package/plugins/lisa-nestjs/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  186. package/plugins/lisa-nestjs/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  187. package/plugins/lisa-nestjs/skills/git-prune/SKILL.md +0 -35
  188. package/plugins/lisa-nestjs/skills/git-submit-pr/SKILL.md +0 -44
  189. package/plugins/lisa-nestjs/skills/jira-add-journey/SKILL.md +0 -120
  190. package/plugins/lisa-nestjs/skills/jira-create/SKILL.md +0 -95
  191. package/plugins/lisa-nestjs/skills/jira-evidence/SKILL.md +0 -73
  192. package/plugins/lisa-nestjs/skills/jira-evidence/scripts/post-evidence.sh +0 -163
  193. package/plugins/lisa-nestjs/skills/jira-fix/SKILL.md +0 -16
  194. package/plugins/lisa-nestjs/skills/jira-implement/SKILL.md +0 -18
  195. package/plugins/lisa-nestjs/skills/jira-journey/SKILL.md +0 -125
  196. package/plugins/lisa-nestjs/skills/jira-journey/scripts/generate-templates.py +0 -233
  197. package/plugins/lisa-nestjs/skills/jira-journey/scripts/parse-plan.py +0 -368
  198. package/plugins/lisa-nestjs/skills/jira-sync/SKILL.md +0 -63
  199. package/plugins/lisa-nestjs/skills/jira-verify/SKILL.md +0 -48
  200. package/plugins/lisa-nestjs/skills/jsdoc-best-practices/SKILL.md +0 -432
  201. package/plugins/lisa-nestjs/skills/lisa-review-implementation/SKILL.md +0 -209
  202. package/plugins/lisa-nestjs/skills/plan-add-test-coverage/SKILL.md +0 -44
  203. package/plugins/lisa-nestjs/skills/plan-execute/SKILL.md +0 -89
  204. package/plugins/lisa-nestjs/skills/plan-fix-linter-error/SKILL.md +0 -45
  205. package/plugins/lisa-nestjs/skills/plan-local-code-review/SKILL.md +0 -88
  206. package/plugins/lisa-nestjs/skills/plan-lower-code-complexity/SKILL.md +0 -44
  207. package/plugins/lisa-nestjs/skills/plan-reduce-max-lines/SKILL.md +0 -45
  208. package/plugins/lisa-nestjs/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  209. package/plugins/lisa-nestjs/skills/pull-request-review/SKILL.md +0 -68
  210. package/plugins/lisa-nestjs/skills/security-zap-scan/SKILL.md +0 -33
  211. package/plugins/lisa-nestjs/skills/sonarqube-check/SKILL.md +0 -11
  212. package/plugins/lisa-nestjs/skills/sonarqube-fix/SKILL.md +0 -8
  213. package/plugins/lisa-nestjs/skills/tasks-load/SKILL.md +0 -88
  214. package/plugins/lisa-nestjs/skills/tasks-sync/SKILL.md +0 -108
  215. package/plugins/lisa-rails/agents/agent-architect.md +0 -310
  216. package/plugins/lisa-rails/agents/architecture-specialist.md +0 -53
  217. package/plugins/lisa-rails/agents/debug-specialist.md +0 -204
  218. package/plugins/lisa-rails/agents/git-history-analyzer.md +0 -183
  219. package/plugins/lisa-rails/agents/hooks-expert.md +0 -74
  220. package/plugins/lisa-rails/agents/implementer.md +0 -54
  221. package/plugins/lisa-rails/agents/learner.md +0 -44
  222. package/plugins/lisa-rails/agents/performance-specialist.md +0 -95
  223. package/plugins/lisa-rails/agents/product-specialist.md +0 -72
  224. package/plugins/lisa-rails/agents/quality-specialist.md +0 -55
  225. package/plugins/lisa-rails/agents/security-specialist.md +0 -58
  226. package/plugins/lisa-rails/agents/skill-evaluator.md +0 -246
  227. package/plugins/lisa-rails/agents/slash-command-architect.md +0 -87
  228. package/plugins/lisa-rails/agents/test-specialist.md +0 -64
  229. package/plugins/lisa-rails/agents/verification-specialist.md +0 -189
  230. package/plugins/lisa-rails/agents/web-search-researcher.md +0 -112
  231. package/plugins/lisa-rails/commands/git/commit-and-submit-pr.md +0 -7
  232. package/plugins/lisa-rails/commands/git/commit-submit-pr-and-verify.md +0 -7
  233. package/plugins/lisa-rails/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  234. package/plugins/lisa-rails/commands/git/commit.md +0 -7
  235. package/plugins/lisa-rails/commands/git/prune.md +0 -6
  236. package/plugins/lisa-rails/commands/git/submit-pr.md +0 -7
  237. package/plugins/lisa-rails/commands/jira/fix.md +0 -7
  238. package/plugins/lisa-rails/commands/jira/implement.md +0 -7
  239. package/plugins/lisa-rails/commands/jira/sync.md +0 -7
  240. package/plugins/lisa-rails/commands/plan/create.md +0 -6
  241. package/plugins/lisa-rails/commands/plan/execute.md +0 -7
  242. package/plugins/lisa-rails/commands/plan/local-code-review.md +0 -6
  243. package/plugins/lisa-rails/commands/pull-request/review.md +0 -7
  244. package/plugins/lisa-rails/commands/review/implementation.md +0 -7
  245. package/plugins/lisa-rails/commands/security/zap-scan.md +0 -6
  246. package/plugins/lisa-rails/commands/sonarqube/check.md +0 -6
  247. package/plugins/lisa-rails/commands/sonarqube/fix.md +0 -6
  248. package/plugins/lisa-rails/commands/tasks/load.md +0 -7
  249. package/plugins/lisa-rails/commands/tasks/sync.md +0 -7
  250. package/plugins/lisa-rails/hooks/debug-hook.sh +0 -47
  251. package/plugins/lisa-rails/hooks/enforce-plan-rules.sh +0 -15
  252. package/plugins/lisa-rails/hooks/format-on-edit.sh +0 -76
  253. package/plugins/lisa-rails/hooks/install-pkgs.sh +0 -64
  254. package/plugins/lisa-rails/hooks/lint-on-edit.sh +0 -81
  255. package/plugins/lisa-rails/hooks/notify-ntfy.sh +0 -183
  256. package/plugins/lisa-rails/hooks/setup-jira-cli.sh +0 -52
  257. package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +0 -68
  258. package/plugins/lisa-rails/hooks/sync-tasks.sh +0 -107
  259. package/plugins/lisa-rails/hooks/ticket-sync-reminder.sh +0 -23
  260. package/plugins/lisa-rails/hooks/track-plan-sessions.sh +0 -164
  261. package/plugins/lisa-rails/hooks/verify-completion.sh +0 -77
  262. package/plugins/lisa-rails/rules/README.md +0 -240
  263. package/plugins/lisa-rails/rules/coding-philosophy.md +0 -428
  264. package/plugins/lisa-rails/rules/verfication.md +0 -596
  265. package/plugins/lisa-rails/skills/agent-design-best-practices/SKILL.md +0 -219
  266. package/plugins/lisa-rails/skills/git-commit/SKILL.md +0 -48
  267. package/plugins/lisa-rails/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  268. package/plugins/lisa-rails/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  269. package/plugins/lisa-rails/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  270. package/plugins/lisa-rails/skills/git-prune/SKILL.md +0 -35
  271. package/plugins/lisa-rails/skills/git-submit-pr/SKILL.md +0 -44
  272. package/plugins/lisa-rails/skills/jira-fix/SKILL.md +0 -16
  273. package/plugins/lisa-rails/skills/jira-implement/SKILL.md +0 -18
  274. package/plugins/lisa-rails/skills/jira-journey/scripts/generate-templates.py +0 -233
  275. package/plugins/lisa-rails/skills/jira-journey/scripts/parse-plan.py +0 -368
  276. package/plugins/lisa-rails/skills/jira-sync/SKILL.md +0 -63
  277. package/plugins/lisa-rails/skills/jsdoc-best-practices/SKILL.md +0 -432
  278. package/plugins/lisa-rails/skills/lisa-review-implementation/SKILL.md +0 -209
  279. package/plugins/lisa-rails/skills/plan-execute/SKILL.md +0 -89
  280. package/plugins/lisa-rails/skills/plan-local-code-review/SKILL.md +0 -88
  281. package/plugins/lisa-rails/skills/pull-request-review/SKILL.md +0 -68
  282. package/plugins/lisa-rails/skills/security-zap-scan/SKILL.md +0 -33
  283. package/plugins/lisa-rails/skills/sonarqube-check/SKILL.md +0 -11
  284. package/plugins/lisa-rails/skills/sonarqube-fix/SKILL.md +0 -8
  285. package/plugins/lisa-rails/skills/tasks-load/SKILL.md +0 -88
  286. package/plugins/lisa-rails/skills/tasks-sync/SKILL.md +0 -108
  287. package/plugins/lisa-typescript/agents/agent-architect.md +0 -310
  288. package/plugins/lisa-typescript/agents/architecture-specialist.md +0 -53
  289. package/plugins/lisa-typescript/agents/debug-specialist.md +0 -204
  290. package/plugins/lisa-typescript/agents/git-history-analyzer.md +0 -183
  291. package/plugins/lisa-typescript/agents/hooks-expert.md +0 -74
  292. package/plugins/lisa-typescript/agents/implementer.md +0 -54
  293. package/plugins/lisa-typescript/agents/learner.md +0 -44
  294. package/plugins/lisa-typescript/agents/performance-specialist.md +0 -95
  295. package/plugins/lisa-typescript/agents/product-specialist.md +0 -72
  296. package/plugins/lisa-typescript/agents/quality-specialist.md +0 -55
  297. package/plugins/lisa-typescript/agents/security-specialist.md +0 -58
  298. package/plugins/lisa-typescript/agents/skill-evaluator.md +0 -246
  299. package/plugins/lisa-typescript/agents/slash-command-architect.md +0 -87
  300. package/plugins/lisa-typescript/agents/test-specialist.md +0 -64
  301. package/plugins/lisa-typescript/agents/verification-specialist.md +0 -189
  302. package/plugins/lisa-typescript/agents/web-search-researcher.md +0 -112
  303. package/plugins/lisa-typescript/commands/git/commit-and-submit-pr.md +0 -7
  304. package/plugins/lisa-typescript/commands/git/commit-submit-pr-and-verify.md +0 -7
  305. package/plugins/lisa-typescript/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  306. package/plugins/lisa-typescript/commands/git/commit.md +0 -7
  307. package/plugins/lisa-typescript/commands/git/prune.md +0 -6
  308. package/plugins/lisa-typescript/commands/git/submit-pr.md +0 -7
  309. package/plugins/lisa-typescript/commands/jira/fix.md +0 -7
  310. package/plugins/lisa-typescript/commands/jira/implement.md +0 -7
  311. package/plugins/lisa-typescript/commands/jira/sync.md +0 -7
  312. package/plugins/lisa-typescript/commands/plan/add-test-coverage.md +0 -7
  313. package/plugins/lisa-typescript/commands/plan/create.md +0 -6
  314. package/plugins/lisa-typescript/commands/plan/execute.md +0 -7
  315. package/plugins/lisa-typescript/commands/plan/fix-linter-error.md +0 -7
  316. package/plugins/lisa-typescript/commands/plan/local-code-review.md +0 -6
  317. package/plugins/lisa-typescript/commands/plan/lower-code-complexity.md +0 -6
  318. package/plugins/lisa-typescript/commands/plan/reduce-max-lines-per-function.md +0 -7
  319. package/plugins/lisa-typescript/commands/plan/reduce-max-lines.md +0 -7
  320. package/plugins/lisa-typescript/commands/pull-request/review.md +0 -7
  321. package/plugins/lisa-typescript/commands/review/implementation.md +0 -7
  322. package/plugins/lisa-typescript/commands/security/zap-scan.md +0 -6
  323. package/plugins/lisa-typescript/commands/sonarqube/check.md +0 -6
  324. package/plugins/lisa-typescript/commands/sonarqube/fix.md +0 -6
  325. package/plugins/lisa-typescript/commands/tasks/load.md +0 -7
  326. package/plugins/lisa-typescript/commands/tasks/sync.md +0 -7
  327. package/plugins/lisa-typescript/hooks/debug-hook.sh +0 -47
  328. package/plugins/lisa-typescript/hooks/enforce-plan-rules.sh +0 -15
  329. package/plugins/lisa-typescript/hooks/install-pkgs.sh +0 -64
  330. package/plugins/lisa-typescript/hooks/notify-ntfy.sh +0 -183
  331. package/plugins/lisa-typescript/hooks/setup-jira-cli.sh +0 -52
  332. package/plugins/lisa-typescript/hooks/sync-tasks.sh +0 -107
  333. package/plugins/lisa-typescript/hooks/ticket-sync-reminder.sh +0 -23
  334. package/plugins/lisa-typescript/hooks/track-plan-sessions.sh +0 -164
  335. package/plugins/lisa-typescript/hooks/verify-completion.sh +0 -77
  336. package/plugins/lisa-typescript/rules/README.md +0 -240
  337. package/plugins/lisa-typescript/rules/coding-philosophy.md +0 -428
  338. package/plugins/lisa-typescript/rules/verfication.md +0 -596
  339. package/plugins/lisa-typescript/skills/agent-design-best-practices/SKILL.md +0 -219
  340. package/plugins/lisa-typescript/skills/git-commit/SKILL.md +0 -48
  341. package/plugins/lisa-typescript/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  342. package/plugins/lisa-typescript/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  343. package/plugins/lisa-typescript/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  344. package/plugins/lisa-typescript/skills/git-prune/SKILL.md +0 -35
  345. package/plugins/lisa-typescript/skills/git-submit-pr/SKILL.md +0 -44
  346. package/plugins/lisa-typescript/skills/jira-add-journey/SKILL.md +0 -120
  347. package/plugins/lisa-typescript/skills/jira-create/SKILL.md +0 -95
  348. package/plugins/lisa-typescript/skills/jira-evidence/SKILL.md +0 -73
  349. package/plugins/lisa-typescript/skills/jira-evidence/scripts/post-evidence.sh +0 -163
  350. package/plugins/lisa-typescript/skills/jira-fix/SKILL.md +0 -16
  351. package/plugins/lisa-typescript/skills/jira-implement/SKILL.md +0 -18
  352. package/plugins/lisa-typescript/skills/jira-journey/SKILL.md +0 -125
  353. package/plugins/lisa-typescript/skills/jira-journey/scripts/generate-templates.py +0 -233
  354. package/plugins/lisa-typescript/skills/jira-journey/scripts/parse-plan.py +0 -368
  355. package/plugins/lisa-typescript/skills/jira-sync/SKILL.md +0 -63
  356. package/plugins/lisa-typescript/skills/jira-verify/SKILL.md +0 -48
  357. package/plugins/lisa-typescript/skills/jsdoc-best-practices/SKILL.md +0 -432
  358. package/plugins/lisa-typescript/skills/lisa-review-implementation/SKILL.md +0 -209
  359. package/plugins/lisa-typescript/skills/plan-add-test-coverage/SKILL.md +0 -44
  360. package/plugins/lisa-typescript/skills/plan-execute/SKILL.md +0 -89
  361. package/plugins/lisa-typescript/skills/plan-fix-linter-error/SKILL.md +0 -45
  362. package/plugins/lisa-typescript/skills/plan-local-code-review/SKILL.md +0 -88
  363. package/plugins/lisa-typescript/skills/plan-lower-code-complexity/SKILL.md +0 -44
  364. package/plugins/lisa-typescript/skills/plan-reduce-max-lines/SKILL.md +0 -45
  365. package/plugins/lisa-typescript/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  366. package/plugins/lisa-typescript/skills/pull-request-review/SKILL.md +0 -68
  367. package/plugins/lisa-typescript/skills/security-zap-scan/SKILL.md +0 -33
  368. package/plugins/lisa-typescript/skills/sonarqube-check/SKILL.md +0 -11
  369. package/plugins/lisa-typescript/skills/sonarqube-fix/SKILL.md +0 -8
  370. package/plugins/lisa-typescript/skills/tasks-load/SKILL.md +0 -88
  371. package/plugins/lisa-typescript/skills/tasks-sync/SKILL.md +0 -108
  372. package/plugins/src/base/hooks/format-on-edit.sh +0 -76
  373. package/plugins/src/base/hooks/lint-on-edit.sh +0 -81
  374. package/plugins/src/base/hooks/sg-scan-on-edit.sh +0 -68
  375. package/plugins/src/base/rules/lisa.md +0 -37
  376. /package/plugins/{lisa-cdk → lisa}/agents/agent-architect.md +0 -0
  377. /package/plugins/{lisa-cdk → lisa}/agents/architecture-specialist.md +0 -0
  378. /package/plugins/{lisa-cdk → lisa}/agents/debug-specialist.md +0 -0
  379. /package/plugins/{lisa-cdk → lisa}/agents/git-history-analyzer.md +0 -0
  380. /package/plugins/{lisa-cdk → lisa}/agents/hooks-expert.md +0 -0
  381. /package/plugins/{lisa-cdk → lisa}/agents/implementer.md +0 -0
  382. /package/plugins/{lisa-cdk → lisa}/agents/learner.md +0 -0
  383. /package/plugins/{lisa-cdk → lisa}/agents/performance-specialist.md +0 -0
  384. /package/plugins/{lisa-cdk → lisa}/agents/product-specialist.md +0 -0
  385. /package/plugins/{lisa-cdk → lisa}/agents/quality-specialist.md +0 -0
  386. /package/plugins/{lisa-cdk → lisa}/agents/security-specialist.md +0 -0
  387. /package/plugins/{lisa-cdk → lisa}/agents/skill-evaluator.md +0 -0
  388. /package/plugins/{lisa-cdk → lisa}/agents/slash-command-architect.md +0 -0
  389. /package/plugins/{lisa-cdk → lisa}/agents/test-specialist.md +0 -0
  390. /package/plugins/{lisa-cdk → lisa}/agents/verification-specialist.md +0 -0
  391. /package/plugins/{lisa-cdk → lisa}/agents/web-search-researcher.md +0 -0
  392. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-and-submit-pr.md +0 -0
  393. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-and-verify.md +0 -0
  394. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-deploy-and-verify.md +0 -0
  395. /package/plugins/{lisa-cdk → lisa}/commands/git/commit.md +0 -0
  396. /package/plugins/{lisa-cdk → lisa}/commands/git/prune.md +0 -0
  397. /package/plugins/{lisa-cdk → lisa}/commands/git/submit-pr.md +0 -0
  398. /package/plugins/{lisa-cdk → lisa}/commands/jira/add-journey.md +0 -0
  399. /package/plugins/{lisa-cdk → lisa}/commands/jira/create.md +0 -0
  400. /package/plugins/{lisa-cdk → lisa}/commands/jira/evidence.md +0 -0
  401. /package/plugins/{lisa-cdk → lisa}/commands/jira/fix.md +0 -0
  402. /package/plugins/{lisa-cdk → lisa}/commands/jira/implement.md +0 -0
  403. /package/plugins/{lisa-cdk → lisa}/commands/jira/journey.md +0 -0
  404. /package/plugins/{lisa-cdk → lisa}/commands/jira/sync.md +0 -0
  405. /package/plugins/{lisa-cdk → lisa}/commands/jira/verify.md +0 -0
  406. /package/plugins/{lisa-cdk → lisa}/commands/plan/add-test-coverage.md +0 -0
  407. /package/plugins/{lisa-cdk → lisa}/commands/plan/create.md +0 -0
  408. /package/plugins/{lisa-cdk → lisa}/commands/plan/execute.md +0 -0
  409. /package/plugins/{lisa-cdk → lisa}/commands/plan/fix-linter-error.md +0 -0
  410. /package/plugins/{lisa-cdk → lisa}/commands/plan/local-code-review.md +0 -0
  411. /package/plugins/{lisa-cdk → lisa}/commands/plan/lower-code-complexity.md +0 -0
  412. /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines-per-function.md +0 -0
  413. /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines.md +0 -0
  414. /package/plugins/{lisa-cdk → lisa}/commands/pull-request/review.md +0 -0
  415. /package/plugins/{lisa-cdk → lisa}/commands/review/implementation.md +0 -0
  416. /package/plugins/{lisa-cdk → lisa}/commands/security/zap-scan.md +0 -0
  417. /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/check.md +0 -0
  418. /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/fix.md +0 -0
  419. /package/plugins/{lisa-cdk → lisa}/commands/tasks/load.md +0 -0
  420. /package/plugins/{lisa-cdk → lisa}/commands/tasks/sync.md +0 -0
  421. /package/plugins/{lisa-cdk → lisa}/hooks/debug-hook.sh +0 -0
  422. /package/plugins/{lisa-cdk → lisa}/hooks/enforce-plan-rules.sh +0 -0
  423. /package/plugins/{lisa-cdk → lisa}/hooks/install-pkgs.sh +0 -0
  424. /package/plugins/{lisa-cdk → lisa}/hooks/notify-ntfy.sh +0 -0
  425. /package/plugins/{lisa-cdk → lisa}/hooks/setup-jira-cli.sh +0 -0
  426. /package/plugins/{lisa-cdk → lisa}/hooks/sync-tasks.sh +0 -0
  427. /package/plugins/{lisa-cdk → lisa}/hooks/ticket-sync-reminder.sh +0 -0
  428. /package/plugins/{lisa-cdk → lisa}/hooks/track-plan-sessions.sh +0 -0
  429. /package/plugins/{lisa-cdk → lisa}/hooks/verify-completion.sh +0 -0
  430. /package/plugins/{lisa-cdk → lisa}/rules/README.md +0 -0
  431. /package/plugins/{lisa-cdk → lisa}/rules/coding-philosophy.md +0 -0
  432. /package/plugins/{lisa-cdk → lisa}/rules/verfication.md +0 -0
  433. /package/plugins/{lisa-cdk → lisa}/skills/agent-design-best-practices/SKILL.md +0 -0
  434. /package/plugins/{lisa-cdk → lisa}/skills/git-commit/SKILL.md +0 -0
  435. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-and-submit-pr/SKILL.md +0 -0
  436. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -0
  437. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -0
  438. /package/plugins/{lisa-cdk → lisa}/skills/git-prune/SKILL.md +0 -0
  439. /package/plugins/{lisa-cdk → lisa}/skills/git-submit-pr/SKILL.md +0 -0
  440. /package/plugins/{lisa-cdk → lisa}/skills/jira-add-journey/SKILL.md +0 -0
  441. /package/plugins/{lisa-cdk → lisa}/skills/jira-create/SKILL.md +0 -0
  442. /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/SKILL.md +0 -0
  443. /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/scripts/post-evidence.sh +0 -0
  444. /package/plugins/{lisa-cdk → lisa}/skills/jira-fix/SKILL.md +0 -0
  445. /package/plugins/{lisa-cdk → lisa}/skills/jira-implement/SKILL.md +0 -0
  446. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/SKILL.md +0 -0
  447. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/generate-templates.py +0 -0
  448. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/parse-plan.py +0 -0
  449. /package/plugins/{lisa-cdk → lisa}/skills/jira-sync/SKILL.md +0 -0
  450. /package/plugins/{lisa-cdk → lisa}/skills/jira-verify/SKILL.md +0 -0
  451. /package/plugins/{lisa-cdk → lisa}/skills/jsdoc-best-practices/SKILL.md +0 -0
  452. /package/plugins/{lisa-cdk → lisa}/skills/lisa-review-implementation/SKILL.md +0 -0
  453. /package/plugins/{lisa-cdk → lisa}/skills/plan-add-test-coverage/SKILL.md +0 -0
  454. /package/plugins/{lisa-cdk → lisa}/skills/plan-execute/SKILL.md +0 -0
  455. /package/plugins/{lisa-cdk → lisa}/skills/plan-fix-linter-error/SKILL.md +0 -0
  456. /package/plugins/{lisa-cdk → lisa}/skills/plan-local-code-review/SKILL.md +0 -0
  457. /package/plugins/{lisa-cdk → lisa}/skills/plan-lower-code-complexity/SKILL.md +0 -0
  458. /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines/SKILL.md +0 -0
  459. /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -0
  460. /package/plugins/{lisa-cdk → lisa}/skills/pull-request-review/SKILL.md +0 -0
  461. /package/plugins/{lisa-cdk → lisa}/skills/security-zap-scan/SKILL.md +0 -0
  462. /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-check/SKILL.md +0 -0
  463. /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-fix/SKILL.md +0 -0
  464. /package/plugins/{lisa-cdk → lisa}/skills/tasks-load/SKILL.md +0 -0
  465. /package/plugins/{lisa-cdk → lisa}/skills/tasks-sync/SKILL.md +0 -0
  466. /package/plugins/{lisa-cdk → src/typescript}/hooks/format-on-edit.sh +0 -0
  467. /package/plugins/{lisa-cdk → src/typescript}/hooks/lint-on-edit.sh +0 -0
  468. /package/plugins/{lisa-cdk → src/typescript}/hooks/sg-scan-on-edit.sh +0 -0
  469. /package/plugins/{lisa-cdk → src/typescript}/rules/lisa.md +0 -0
@@ -1,368 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Parse the Validation Journey section from a JIRA ticket description.
3
-
4
- Fetches the ticket via REST API, extracts the Validation Journey section
5
- (ADF or wiki markup), and outputs structured JSON to stdout.
6
-
7
- Usage:
8
- python3 parse-plan.py <TICKET_ID>
9
-
10
- Example:
11
- python3 parse-plan.py SE-3820
12
-
13
- Output (JSON):
14
- {
15
- "ticket": "SE-3820",
16
- "prerequisites": ["Backend running", "Admin user"],
17
- "steps": [
18
- {"number": 1, "text": "Navigate to page", "screenshot": null},
19
- {"number": 2, "text": "Click button [EVIDENCE: btn]", "screenshot": "btn"}
20
- ],
21
- "viewports": [
22
- {"name": "Desktop", "width": 1512, "height": 768}
23
- ],
24
- "assertions": ["Modal fills screen"]
25
- }
26
- """
27
-
28
- import json
29
- import os
30
- import re
31
- import subprocess
32
- import sys
33
- import urllib.request
34
- from base64 import b64encode
35
- from pathlib import Path
36
-
37
-
38
- def get_jira_config():
39
- """Read JIRA server and login from jira-cli config."""
40
- config_path = Path.home() / ".config" / ".jira" / ".config.yml"
41
- if not config_path.exists():
42
- print(f"ERROR: jira-cli config not found at {config_path}", file=sys.stderr)
43
- sys.exit(1)
44
-
45
- server = ""
46
- login = ""
47
- with open(config_path) as f:
48
- for line in f:
49
- if line.startswith("server:"):
50
- server = line.split(":", 1)[1].strip()
51
- elif line.startswith("login:"):
52
- login = line.split(":", 1)[1].strip()
53
-
54
- token = os.environ.get("JIRA_API_TOKEN", "")
55
- if not token:
56
- print("ERROR: JIRA_API_TOKEN env var not set", file=sys.stderr)
57
- sys.exit(1)
58
-
59
- return server, login, token
60
-
61
-
62
- def fetch_ticket(server, login, token, ticket_id):
63
- """Fetch JIRA ticket via REST API v3 (returns ADF description)."""
64
- url = f"{server}/rest/api/3/issue/{ticket_id}?fields=description"
65
- auth = b64encode(f"{login}:{token}".encode()).decode()
66
-
67
- req = urllib.request.Request(url, headers={
68
- "Authorization": f"Basic {auth}",
69
- "Accept": "application/json",
70
- })
71
-
72
- try:
73
- with urllib.request.urlopen(req) as resp:
74
- return json.loads(resp.read().decode())
75
- except urllib.error.HTTPError as e:
76
- print(f"ERROR: JIRA API returned {e.code} for {ticket_id}", file=sys.stderr)
77
- sys.exit(1)
78
-
79
-
80
- def extract_text_from_adf(node):
81
- """Recursively extract plain text from an ADF node."""
82
- if isinstance(node, str):
83
- return node
84
-
85
- if isinstance(node, dict):
86
- node_type = node.get("type", "")
87
-
88
- if node_type == "text":
89
- return node.get("text", "")
90
-
91
- if node_type == "hardBreak":
92
- return "\n"
93
-
94
- parts = []
95
- for child in node.get("content", []):
96
- parts.append(extract_text_from_adf(child))
97
- return "".join(parts)
98
-
99
- if isinstance(node, list):
100
- return "".join(extract_text_from_adf(item) for item in node)
101
-
102
- return ""
103
-
104
-
105
- def find_heading_index(content, heading_text, level=None):
106
- """Find the index of a heading node matching the given text."""
107
- for i, node in enumerate(content):
108
- if node.get("type") != "heading":
109
- continue
110
- if level is not None and node.get("attrs", {}).get("level") != level:
111
- continue
112
- text = extract_text_from_adf(node).strip().lower()
113
- if heading_text.lower() in text:
114
- return i
115
- return -1
116
-
117
-
118
- def extract_section_content(content, start_idx, same_level=True):
119
- """Extract all nodes between a heading and the next heading of same or higher level."""
120
- if start_idx < 0 or start_idx >= len(content):
121
- return []
122
-
123
- heading_level = content[start_idx].get("attrs", {}).get("level", 2)
124
- nodes = []
125
-
126
- for i in range(start_idx + 1, len(content)):
127
- node = content[i]
128
- if node.get("type") == "heading":
129
- node_level = node.get("attrs", {}).get("level", 2)
130
- if same_level and node_level <= heading_level:
131
- break
132
- nodes.append(node)
133
-
134
- return nodes
135
-
136
-
137
- def parse_prerequisites(nodes):
138
- """Extract prerequisite strings from ADF nodes (bullet lists or paragraphs)."""
139
- prerequisites = []
140
- for node in nodes:
141
- if node.get("type") == "bulletList":
142
- for item in node.get("content", []):
143
- text = extract_text_from_adf(item).strip()
144
- if text:
145
- prerequisites.append(text)
146
- elif node.get("type") == "paragraph":
147
- text = extract_text_from_adf(node).strip()
148
- if text:
149
- prerequisites.append(text)
150
- return prerequisites
151
-
152
-
153
- def clean_step_text(text, screenshot_name):
154
- """Remove [SCREENSHOT: ...] or [EVIDENCE: ...] marker from step text and deduplicate."""
155
- # Remove the marker itself
156
- cleaned = re.sub(r'\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]\s*', '', text).strip()
157
-
158
- # Deduplicate: if the same phrase appears twice consecutively, keep one
159
- # This handles ADF text node concatenation artifacts
160
- words = cleaned.split()
161
- mid = len(words) // 2
162
- if mid > 2 and words[:mid] == words[mid:2 * mid]:
163
- cleaned = " ".join(words[:mid] + words[2 * mid:])
164
-
165
- return cleaned
166
-
167
-
168
- def parse_steps(nodes):
169
- """Extract ordered steps with optional [SCREENSHOT: name] or [EVIDENCE: name] markers."""
170
- steps = []
171
- step_number = 0
172
-
173
- for node in nodes:
174
- if node.get("type") == "orderedList":
175
- for item in node.get("content", []):
176
- step_number += 1
177
- text = extract_text_from_adf(item).strip()
178
-
179
- screenshot = None
180
- match = re.search(r'\[(SCREENSHOT|EVIDENCE):\s*([^\]]+)\]', text)
181
- if match:
182
- screenshot = match.group(2).strip()
183
-
184
- display_text = clean_step_text(text, screenshot) if screenshot else text
185
-
186
- steps.append({
187
- "number": step_number,
188
- "text": display_text,
189
- "screenshot": screenshot,
190
- })
191
- elif node.get("type") == "paragraph":
192
- text = extract_text_from_adf(node).strip()
193
- if text and re.match(r'^\d+\.?\s', text):
194
- step_number += 1
195
- screenshot = None
196
- match = re.search(r'\[(SCREENSHOT|EVIDENCE):\s*([^\]]+)\]', text)
197
- if match:
198
- screenshot = match.group(2).strip()
199
-
200
- clean_text = re.sub(r'^\d+\.?\s*', '', text)
201
- display_text = clean_step_text(clean_text, screenshot) if screenshot else clean_text
202
- steps.append({
203
- "number": step_number,
204
- "text": display_text,
205
- "screenshot": screenshot,
206
- })
207
-
208
- return steps
209
-
210
-
211
- def parse_viewports(nodes):
212
- """Extract viewport definitions from ADF table nodes.
213
-
214
- Supports two table formats:
215
- - 3 columns: Name | Width | Height
216
- - 2 columns: Name | Resolution (WxH)
217
- """
218
- viewports = []
219
-
220
- for node in nodes:
221
- if node.get("type") == "table":
222
- rows = node.get("content", [])
223
- for row in rows:
224
- if row.get("type") != "tableRow":
225
- continue
226
-
227
- cells = row.get("content", [])
228
- if not cells:
229
- continue
230
-
231
- # Skip header row (tableHeader cells)
232
- if cells[0].get("type") == "tableHeader":
233
- continue
234
-
235
- cell_texts = [extract_text_from_adf(c).strip() for c in cells]
236
-
237
- # 3-column format: Name | Width | Height
238
- if len(cell_texts) >= 3:
239
- name = cell_texts[0]
240
- try:
241
- width = int(cell_texts[1])
242
- height = int(cell_texts[2])
243
- viewports.append({
244
- "name": name,
245
- "width": width,
246
- "height": height,
247
- })
248
- continue
249
- except ValueError:
250
- pass
251
-
252
- # 2-column format: Name | WxH (e.g., "1512x768")
253
- if len(cell_texts) >= 2:
254
- name = cell_texts[0]
255
- resolution = cell_texts[1]
256
- match = re.match(r'(\d+)\s*[xX×]\s*(\d+)', resolution)
257
- if match:
258
- viewports.append({
259
- "name": name,
260
- "width": int(match.group(1)),
261
- "height": int(match.group(2)),
262
- })
263
-
264
- return viewports
265
-
266
-
267
- def parse_assertions(nodes):
268
- """Extract assertion strings from ADF nodes."""
269
- assertions = []
270
- for node in nodes:
271
- if node.get("type") == "bulletList":
272
- for item in node.get("content", []):
273
- text = extract_text_from_adf(item).strip()
274
- if text:
275
- assertions.append(text)
276
- elif node.get("type") == "orderedList":
277
- for item in node.get("content", []):
278
- text = extract_text_from_adf(item).strip()
279
- if text:
280
- assertions.append(text)
281
- elif node.get("type") == "paragraph":
282
- text = extract_text_from_adf(node).strip()
283
- if text and text.startswith("-"):
284
- assertions.append(text.lstrip("- ").strip())
285
- elif text:
286
- assertions.append(text)
287
- return assertions
288
-
289
-
290
- def parse_adf_journey(description_adf):
291
- """Parse the Validation Journey from an ADF description object."""
292
- content = description_adf.get("content", [])
293
-
294
- # Find the "Validation Journey" h2 heading
295
- journey_idx = find_heading_index(content, "validation journey", level=2)
296
- if journey_idx < 0:
297
- # Try without level constraint
298
- journey_idx = find_heading_index(content, "validation journey")
299
-
300
- if journey_idx < 0:
301
- print("ERROR: No 'Validation Journey' section found in ticket description", file=sys.stderr)
302
- sys.exit(1)
303
-
304
- # Extract sub-sections
305
- prereq_idx = find_heading_index(content, "prerequisites", level=3)
306
- steps_idx = find_heading_index(content, "steps", level=3)
307
- viewports_idx = find_heading_index(content, "viewports", level=3)
308
- assertions_idx = find_heading_index(content, "assertions", level=3)
309
-
310
- prerequisites = []
311
- if prereq_idx >= 0:
312
- prereq_nodes = extract_section_content(content, prereq_idx)
313
- prerequisites = parse_prerequisites(prereq_nodes)
314
-
315
- steps = []
316
- if steps_idx >= 0:
317
- steps_nodes = extract_section_content(content, steps_idx)
318
- steps = parse_steps(steps_nodes)
319
-
320
- viewports = []
321
- if viewports_idx >= 0:
322
- viewport_nodes = extract_section_content(content, viewports_idx)
323
- viewports = parse_viewports(viewport_nodes)
324
-
325
- assertions = []
326
- if assertions_idx >= 0:
327
- assertion_nodes = extract_section_content(content, assertions_idx)
328
- assertions = parse_assertions(assertion_nodes)
329
-
330
- # Fallback: if no viewports defined, use Desktop as default
331
- if not viewports:
332
- viewports = [{"name": "Desktop", "width": 1512, "height": 768}]
333
-
334
- return {
335
- "prerequisites": prerequisites,
336
- "steps": steps,
337
- "viewports": viewports,
338
- "assertions": assertions,
339
- }
340
-
341
-
342
- def main():
343
- if len(sys.argv) < 2:
344
- print("Usage: parse-plan.py <TICKET_ID>", file=sys.stderr)
345
- sys.exit(1)
346
-
347
- ticket_id = sys.argv[1]
348
- server, login, token = get_jira_config()
349
- ticket_data = fetch_ticket(server, login, token, ticket_id)
350
-
351
- description = ticket_data.get("fields", {}).get("description")
352
- if not description:
353
- print(f"ERROR: Ticket {ticket_id} has no description", file=sys.stderr)
354
- sys.exit(1)
355
-
356
- # ADF description is a dict, wiki markup is a string
357
- if isinstance(description, dict):
358
- result = parse_adf_journey(description)
359
- else:
360
- print("ERROR: Wiki markup parsing not implemented. Use JIRA API v3 (ADF format).", file=sys.stderr)
361
- sys.exit(1)
362
-
363
- result["ticket"] = ticket_id
364
- print(json.dumps(result, indent=2))
365
-
366
-
367
- if __name__ == "__main__":
368
- main()
@@ -1,63 +0,0 @@
1
- ---
2
- name: jira-sync
3
- description: "Syncs plan progress to a linked JIRA ticket. Posts plan contents, progress updates, branch links, and PR links at key milestones. Use this skill throughout the plan lifecycle to keep tickets in sync."
4
- allowed-tools: ["mcp__atlassian__*", "Bash", "Read", "Glob", "Grep"]
5
- ---
6
-
7
- # JIRA Ticket Sync
8
-
9
- Sync current plan progress to JIRA ticket: $ARGUMENTS
10
-
11
- If no argument provided, search for a ticket URL in the active plan file (most recently modified `.md` in `plans/`).
12
-
13
- ## Workflow
14
-
15
- ### Step 1: Identify Ticket and Context
16
-
17
- 1. **Parse ticket ID** from `$ARGUMENTS` or extract from the active plan file
18
- 2. **Fetch current ticket state** via JIRA MCP (`mcp__atlassian__getJiraIssue`)
19
- 3. **Determine current milestone** by checking:
20
- - Does a plan file exist? → Plan created
21
- - Is there a working branch? → Implementation started
22
- - Are tasks in progress? → Active implementation
23
- - Is there an open PR? → PR ready for review
24
- - Is the PR merged? → Complete
25
-
26
- ### Step 2: Gather Update Content
27
-
28
- Based on the current milestone:
29
-
30
- | Milestone | Content to Post |
31
- |-----------|-----------------|
32
- | **Plan created** | Plan summary, branch name, link to PR (if draft exists) |
33
- | **Implementation in progress** | Task completion summary (X of Y tasks done), any blockers |
34
- | **PR ready** | PR link, summary of changes, test results |
35
- | **PR merged** | Final summary, suggest moving ticket to "Done" |
36
-
37
- ### Step 3: Post Update
38
-
39
- 1. **Add a comment** to the ticket with the gathered content via JIRA MCP
40
- 2. **Update ticket fields** if applicable:
41
- - Add branch name to a custom field or comment
42
- - Add PR link to a custom field or comment
43
- 3. **Report** what was synced to the user
44
-
45
- ### Step 4: Suggest Status Transition
46
-
47
- Based on the milestone, suggest (but don't automatically perform) a status transition:
48
-
49
- | Milestone | Suggested Status |
50
- |-----------|-----------------|
51
- | Plan created | "In Progress" |
52
- | PR ready | "In Review" |
53
- | PR merged | "Done" |
54
-
55
- ## Important Notes
56
-
57
- - **Never auto-transition ticket status** — always suggest and let the user confirm
58
- - **Idempotent updates** — running sync multiple times at the same milestone should not create duplicate comments
59
- - **Comment format** — use JIRA markdown with clear headers and bullet points
60
-
61
- ## Execution
62
-
63
- Sync the ticket now.
@@ -1,48 +0,0 @@
1
- ---
2
- name: jira-verify
3
- description: This skill should be used when verifying that a JIRA ticket meets organizational standards for epic relationships and description quality. It checks epic parent relationships and validates description completeness for coding assistants, developers, and stakeholders.
4
- allowed-tools: ["mcp__atlassian__getJiraIssue", "mcp__atlassian__searchJiraIssuesUsingJql", "mcp__atlassian__getAccessibleAtlassianResources"]
5
- ---
6
-
7
- # Verify JIRA Ticket: $ARGUMENTS
8
-
9
- Fetch ticket $ARGUMENTS and verify it meets organizational standards.
10
-
11
- ## Verification Checks
12
-
13
- ### 1. Epic Parent Relationship
14
-
15
- **Rule**: Non-bug, non-epic tickets MUST have an epic parent
16
-
17
- - If missing: Search filter 10089 (Epic Backlog) and suggest appropriate epics
18
-
19
- ### 2. Description Quality
20
-
21
- Verify description adequately addresses:
22
-
23
- **Coding Assistants**: Acceptance criteria, requirements, constraints, I/O
24
- **Developers**: Technical context, integration points, testing, edge cases
25
- **Stakeholders**: Business value, user impact, success metrics, summary
26
-
27
- ### 3. Validation Journey
28
-
29
- **Rule**: Tickets that change runtime behavior MUST include a Validation Journey section.
30
-
31
- Check by running:
32
-
33
- ```bash
34
- python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID> 2>&1
35
- ```
36
-
37
- - If the parser returns steps: PASS
38
- - If the parser fails with "No 'Validation Journey' section found": FAIL — recommend using `/jira-add-journey <TICKET_ID>` to add one
39
-
40
- This check is skipped for:
41
- - Documentation-only tickets
42
- - Config-only tickets (env vars, CI/CD, feature flags)
43
- - Type-definition-only tickets (no runtime effect)
44
- - Epic-level tickets (journeys belong on child stories/tasks)
45
-
46
- ## Execute Verification
47
-
48
- Retrieve ticket details, run all checks, and provide specific improvement recommendations for any failures.