@codyswann/lisa 1.56.1 → 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 (468) 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/plugins/lisa-expo/agents/agent-architect.md +0 -310
  50. package/plugins/lisa-expo/agents/architecture-specialist.md +0 -53
  51. package/plugins/lisa-expo/agents/debug-specialist.md +0 -204
  52. package/plugins/lisa-expo/agents/git-history-analyzer.md +0 -183
  53. package/plugins/lisa-expo/agents/hooks-expert.md +0 -74
  54. package/plugins/lisa-expo/agents/implementer.md +0 -54
  55. package/plugins/lisa-expo/agents/learner.md +0 -44
  56. package/plugins/lisa-expo/agents/performance-specialist.md +0 -95
  57. package/plugins/lisa-expo/agents/product-specialist.md +0 -72
  58. package/plugins/lisa-expo/agents/quality-specialist.md +0 -55
  59. package/plugins/lisa-expo/agents/security-specialist.md +0 -58
  60. package/plugins/lisa-expo/agents/skill-evaluator.md +0 -246
  61. package/plugins/lisa-expo/agents/slash-command-architect.md +0 -87
  62. package/plugins/lisa-expo/agents/test-specialist.md +0 -64
  63. package/plugins/lisa-expo/agents/verification-specialist.md +0 -189
  64. package/plugins/lisa-expo/agents/web-search-researcher.md +0 -112
  65. package/plugins/lisa-expo/commands/git/commit-and-submit-pr.md +0 -7
  66. package/plugins/lisa-expo/commands/git/commit-submit-pr-and-verify.md +0 -7
  67. package/plugins/lisa-expo/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  68. package/plugins/lisa-expo/commands/git/commit.md +0 -7
  69. package/plugins/lisa-expo/commands/git/prune.md +0 -6
  70. package/plugins/lisa-expo/commands/git/submit-pr.md +0 -7
  71. package/plugins/lisa-expo/commands/jira/fix.md +0 -7
  72. package/plugins/lisa-expo/commands/jira/implement.md +0 -7
  73. package/plugins/lisa-expo/commands/jira/sync.md +0 -7
  74. package/plugins/lisa-expo/commands/plan/create.md +0 -6
  75. package/plugins/lisa-expo/commands/plan/execute.md +0 -7
  76. package/plugins/lisa-expo/commands/plan/local-code-review.md +0 -6
  77. package/plugins/lisa-expo/commands/pull-request/review.md +0 -7
  78. package/plugins/lisa-expo/commands/review/implementation.md +0 -7
  79. package/plugins/lisa-expo/commands/security/zap-scan.md +0 -6
  80. package/plugins/lisa-expo/commands/sonarqube/check.md +0 -6
  81. package/plugins/lisa-expo/commands/sonarqube/fix.md +0 -6
  82. package/plugins/lisa-expo/commands/tasks/load.md +0 -7
  83. package/plugins/lisa-expo/commands/tasks/sync.md +0 -7
  84. package/plugins/lisa-expo/hooks/debug-hook.sh +0 -47
  85. package/plugins/lisa-expo/hooks/enforce-plan-rules.sh +0 -15
  86. package/plugins/lisa-expo/hooks/format-on-edit.sh +0 -76
  87. package/plugins/lisa-expo/hooks/install-pkgs.sh +0 -64
  88. package/plugins/lisa-expo/hooks/lint-on-edit.sh +0 -81
  89. package/plugins/lisa-expo/hooks/notify-ntfy.sh +0 -183
  90. package/plugins/lisa-expo/hooks/setup-jira-cli.sh +0 -52
  91. package/plugins/lisa-expo/hooks/sg-scan-on-edit.sh +0 -68
  92. package/plugins/lisa-expo/hooks/sync-tasks.sh +0 -107
  93. package/plugins/lisa-expo/hooks/ticket-sync-reminder.sh +0 -23
  94. package/plugins/lisa-expo/hooks/track-plan-sessions.sh +0 -164
  95. package/plugins/lisa-expo/hooks/verify-completion.sh +0 -77
  96. package/plugins/lisa-expo/rules/README.md +0 -240
  97. package/plugins/lisa-expo/rules/coding-philosophy.md +0 -428
  98. package/plugins/lisa-expo/rules/lisa.md +0 -37
  99. package/plugins/lisa-expo/rules/verfication.md +0 -596
  100. package/plugins/lisa-expo/skills/agent-design-best-practices/SKILL.md +0 -219
  101. package/plugins/lisa-expo/skills/git-commit/SKILL.md +0 -48
  102. package/plugins/lisa-expo/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  103. package/plugins/lisa-expo/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  104. package/plugins/lisa-expo/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  105. package/plugins/lisa-expo/skills/git-prune/SKILL.md +0 -35
  106. package/plugins/lisa-expo/skills/git-submit-pr/SKILL.md +0 -44
  107. package/plugins/lisa-expo/skills/jira-fix/SKILL.md +0 -16
  108. package/plugins/lisa-expo/skills/jira-implement/SKILL.md +0 -18
  109. package/plugins/lisa-expo/skills/jira-sync/SKILL.md +0 -63
  110. package/plugins/lisa-expo/skills/jsdoc-best-practices/SKILL.md +0 -432
  111. package/plugins/lisa-expo/skills/lisa-review-implementation/SKILL.md +0 -209
  112. package/plugins/lisa-expo/skills/plan-add-test-coverage/SKILL.md +0 -44
  113. package/plugins/lisa-expo/skills/plan-execute/SKILL.md +0 -89
  114. package/plugins/lisa-expo/skills/plan-fix-linter-error/SKILL.md +0 -45
  115. package/plugins/lisa-expo/skills/plan-local-code-review/SKILL.md +0 -88
  116. package/plugins/lisa-expo/skills/plan-lower-code-complexity/SKILL.md +0 -44
  117. package/plugins/lisa-expo/skills/plan-reduce-max-lines/SKILL.md +0 -45
  118. package/plugins/lisa-expo/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  119. package/plugins/lisa-expo/skills/pull-request-review/SKILL.md +0 -68
  120. package/plugins/lisa-expo/skills/security-zap-scan/SKILL.md +0 -33
  121. package/plugins/lisa-expo/skills/sonarqube-check/SKILL.md +0 -11
  122. package/plugins/lisa-expo/skills/sonarqube-fix/SKILL.md +0 -8
  123. package/plugins/lisa-expo/skills/tasks-load/SKILL.md +0 -88
  124. package/plugins/lisa-expo/skills/tasks-sync/SKILL.md +0 -108
  125. package/plugins/lisa-nestjs/agents/agent-architect.md +0 -310
  126. package/plugins/lisa-nestjs/agents/architecture-specialist.md +0 -53
  127. package/plugins/lisa-nestjs/agents/debug-specialist.md +0 -204
  128. package/plugins/lisa-nestjs/agents/git-history-analyzer.md +0 -183
  129. package/plugins/lisa-nestjs/agents/hooks-expert.md +0 -74
  130. package/plugins/lisa-nestjs/agents/implementer.md +0 -54
  131. package/plugins/lisa-nestjs/agents/learner.md +0 -44
  132. package/plugins/lisa-nestjs/agents/performance-specialist.md +0 -95
  133. package/plugins/lisa-nestjs/agents/product-specialist.md +0 -72
  134. package/plugins/lisa-nestjs/agents/quality-specialist.md +0 -55
  135. package/plugins/lisa-nestjs/agents/security-specialist.md +0 -58
  136. package/plugins/lisa-nestjs/agents/skill-evaluator.md +0 -246
  137. package/plugins/lisa-nestjs/agents/slash-command-architect.md +0 -87
  138. package/plugins/lisa-nestjs/agents/test-specialist.md +0 -64
  139. package/plugins/lisa-nestjs/agents/verification-specialist.md +0 -189
  140. package/plugins/lisa-nestjs/agents/web-search-researcher.md +0 -112
  141. package/plugins/lisa-nestjs/commands/git/commit-and-submit-pr.md +0 -7
  142. package/plugins/lisa-nestjs/commands/git/commit-submit-pr-and-verify.md +0 -7
  143. package/plugins/lisa-nestjs/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  144. package/plugins/lisa-nestjs/commands/git/commit.md +0 -7
  145. package/plugins/lisa-nestjs/commands/git/prune.md +0 -6
  146. package/plugins/lisa-nestjs/commands/git/submit-pr.md +0 -7
  147. package/plugins/lisa-nestjs/commands/jira/fix.md +0 -7
  148. package/plugins/lisa-nestjs/commands/jira/implement.md +0 -7
  149. package/plugins/lisa-nestjs/commands/jira/sync.md +0 -7
  150. package/plugins/lisa-nestjs/commands/plan/add-test-coverage.md +0 -7
  151. package/plugins/lisa-nestjs/commands/plan/create.md +0 -6
  152. package/plugins/lisa-nestjs/commands/plan/execute.md +0 -7
  153. package/plugins/lisa-nestjs/commands/plan/fix-linter-error.md +0 -7
  154. package/plugins/lisa-nestjs/commands/plan/local-code-review.md +0 -6
  155. package/plugins/lisa-nestjs/commands/plan/lower-code-complexity.md +0 -6
  156. package/plugins/lisa-nestjs/commands/plan/reduce-max-lines-per-function.md +0 -7
  157. package/plugins/lisa-nestjs/commands/plan/reduce-max-lines.md +0 -7
  158. package/plugins/lisa-nestjs/commands/pull-request/review.md +0 -7
  159. package/plugins/lisa-nestjs/commands/review/implementation.md +0 -7
  160. package/plugins/lisa-nestjs/commands/security/zap-scan.md +0 -6
  161. package/plugins/lisa-nestjs/commands/sonarqube/check.md +0 -6
  162. package/plugins/lisa-nestjs/commands/sonarqube/fix.md +0 -6
  163. package/plugins/lisa-nestjs/commands/tasks/load.md +0 -7
  164. package/plugins/lisa-nestjs/commands/tasks/sync.md +0 -7
  165. package/plugins/lisa-nestjs/hooks/debug-hook.sh +0 -47
  166. package/plugins/lisa-nestjs/hooks/enforce-plan-rules.sh +0 -15
  167. package/plugins/lisa-nestjs/hooks/format-on-edit.sh +0 -76
  168. package/plugins/lisa-nestjs/hooks/install-pkgs.sh +0 -64
  169. package/plugins/lisa-nestjs/hooks/lint-on-edit.sh +0 -81
  170. package/plugins/lisa-nestjs/hooks/notify-ntfy.sh +0 -183
  171. package/plugins/lisa-nestjs/hooks/setup-jira-cli.sh +0 -52
  172. package/plugins/lisa-nestjs/hooks/sg-scan-on-edit.sh +0 -68
  173. package/plugins/lisa-nestjs/hooks/sync-tasks.sh +0 -107
  174. package/plugins/lisa-nestjs/hooks/ticket-sync-reminder.sh +0 -23
  175. package/plugins/lisa-nestjs/hooks/track-plan-sessions.sh +0 -164
  176. package/plugins/lisa-nestjs/hooks/verify-completion.sh +0 -77
  177. package/plugins/lisa-nestjs/rules/README.md +0 -240
  178. package/plugins/lisa-nestjs/rules/coding-philosophy.md +0 -428
  179. package/plugins/lisa-nestjs/rules/lisa.md +0 -37
  180. package/plugins/lisa-nestjs/rules/verfication.md +0 -596
  181. package/plugins/lisa-nestjs/skills/agent-design-best-practices/SKILL.md +0 -219
  182. package/plugins/lisa-nestjs/skills/git-commit/SKILL.md +0 -48
  183. package/plugins/lisa-nestjs/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  184. package/plugins/lisa-nestjs/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  185. package/plugins/lisa-nestjs/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  186. package/plugins/lisa-nestjs/skills/git-prune/SKILL.md +0 -35
  187. package/plugins/lisa-nestjs/skills/git-submit-pr/SKILL.md +0 -44
  188. package/plugins/lisa-nestjs/skills/jira-add-journey/SKILL.md +0 -120
  189. package/plugins/lisa-nestjs/skills/jira-create/SKILL.md +0 -95
  190. package/plugins/lisa-nestjs/skills/jira-evidence/SKILL.md +0 -73
  191. package/plugins/lisa-nestjs/skills/jira-evidence/scripts/post-evidence.sh +0 -163
  192. package/plugins/lisa-nestjs/skills/jira-fix/SKILL.md +0 -16
  193. package/plugins/lisa-nestjs/skills/jira-implement/SKILL.md +0 -18
  194. package/plugins/lisa-nestjs/skills/jira-journey/SKILL.md +0 -125
  195. package/plugins/lisa-nestjs/skills/jira-journey/scripts/generate-templates.py +0 -233
  196. package/plugins/lisa-nestjs/skills/jira-journey/scripts/parse-plan.py +0 -368
  197. package/plugins/lisa-nestjs/skills/jira-sync/SKILL.md +0 -63
  198. package/plugins/lisa-nestjs/skills/jira-verify/SKILL.md +0 -48
  199. package/plugins/lisa-nestjs/skills/jsdoc-best-practices/SKILL.md +0 -432
  200. package/plugins/lisa-nestjs/skills/lisa-review-implementation/SKILL.md +0 -209
  201. package/plugins/lisa-nestjs/skills/plan-add-test-coverage/SKILL.md +0 -44
  202. package/plugins/lisa-nestjs/skills/plan-execute/SKILL.md +0 -89
  203. package/plugins/lisa-nestjs/skills/plan-fix-linter-error/SKILL.md +0 -45
  204. package/plugins/lisa-nestjs/skills/plan-local-code-review/SKILL.md +0 -88
  205. package/plugins/lisa-nestjs/skills/plan-lower-code-complexity/SKILL.md +0 -44
  206. package/plugins/lisa-nestjs/skills/plan-reduce-max-lines/SKILL.md +0 -45
  207. package/plugins/lisa-nestjs/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  208. package/plugins/lisa-nestjs/skills/pull-request-review/SKILL.md +0 -68
  209. package/plugins/lisa-nestjs/skills/security-zap-scan/SKILL.md +0 -33
  210. package/plugins/lisa-nestjs/skills/sonarqube-check/SKILL.md +0 -11
  211. package/plugins/lisa-nestjs/skills/sonarqube-fix/SKILL.md +0 -8
  212. package/plugins/lisa-nestjs/skills/tasks-load/SKILL.md +0 -88
  213. package/plugins/lisa-nestjs/skills/tasks-sync/SKILL.md +0 -108
  214. package/plugins/lisa-rails/agents/agent-architect.md +0 -310
  215. package/plugins/lisa-rails/agents/architecture-specialist.md +0 -53
  216. package/plugins/lisa-rails/agents/debug-specialist.md +0 -204
  217. package/plugins/lisa-rails/agents/git-history-analyzer.md +0 -183
  218. package/plugins/lisa-rails/agents/hooks-expert.md +0 -74
  219. package/plugins/lisa-rails/agents/implementer.md +0 -54
  220. package/plugins/lisa-rails/agents/learner.md +0 -44
  221. package/plugins/lisa-rails/agents/performance-specialist.md +0 -95
  222. package/plugins/lisa-rails/agents/product-specialist.md +0 -72
  223. package/plugins/lisa-rails/agents/quality-specialist.md +0 -55
  224. package/plugins/lisa-rails/agents/security-specialist.md +0 -58
  225. package/plugins/lisa-rails/agents/skill-evaluator.md +0 -246
  226. package/plugins/lisa-rails/agents/slash-command-architect.md +0 -87
  227. package/plugins/lisa-rails/agents/test-specialist.md +0 -64
  228. package/plugins/lisa-rails/agents/verification-specialist.md +0 -189
  229. package/plugins/lisa-rails/agents/web-search-researcher.md +0 -112
  230. package/plugins/lisa-rails/commands/git/commit-and-submit-pr.md +0 -7
  231. package/plugins/lisa-rails/commands/git/commit-submit-pr-and-verify.md +0 -7
  232. package/plugins/lisa-rails/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  233. package/plugins/lisa-rails/commands/git/commit.md +0 -7
  234. package/plugins/lisa-rails/commands/git/prune.md +0 -6
  235. package/plugins/lisa-rails/commands/git/submit-pr.md +0 -7
  236. package/plugins/lisa-rails/commands/jira/fix.md +0 -7
  237. package/plugins/lisa-rails/commands/jira/implement.md +0 -7
  238. package/plugins/lisa-rails/commands/jira/sync.md +0 -7
  239. package/plugins/lisa-rails/commands/plan/create.md +0 -6
  240. package/plugins/lisa-rails/commands/plan/execute.md +0 -7
  241. package/plugins/lisa-rails/commands/plan/local-code-review.md +0 -6
  242. package/plugins/lisa-rails/commands/pull-request/review.md +0 -7
  243. package/plugins/lisa-rails/commands/review/implementation.md +0 -7
  244. package/plugins/lisa-rails/commands/security/zap-scan.md +0 -6
  245. package/plugins/lisa-rails/commands/sonarqube/check.md +0 -6
  246. package/plugins/lisa-rails/commands/sonarqube/fix.md +0 -6
  247. package/plugins/lisa-rails/commands/tasks/load.md +0 -7
  248. package/plugins/lisa-rails/commands/tasks/sync.md +0 -7
  249. package/plugins/lisa-rails/hooks/debug-hook.sh +0 -47
  250. package/plugins/lisa-rails/hooks/enforce-plan-rules.sh +0 -15
  251. package/plugins/lisa-rails/hooks/format-on-edit.sh +0 -76
  252. package/plugins/lisa-rails/hooks/install-pkgs.sh +0 -64
  253. package/plugins/lisa-rails/hooks/lint-on-edit.sh +0 -81
  254. package/plugins/lisa-rails/hooks/notify-ntfy.sh +0 -183
  255. package/plugins/lisa-rails/hooks/setup-jira-cli.sh +0 -52
  256. package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +0 -68
  257. package/plugins/lisa-rails/hooks/sync-tasks.sh +0 -107
  258. package/plugins/lisa-rails/hooks/ticket-sync-reminder.sh +0 -23
  259. package/plugins/lisa-rails/hooks/track-plan-sessions.sh +0 -164
  260. package/plugins/lisa-rails/hooks/verify-completion.sh +0 -77
  261. package/plugins/lisa-rails/rules/README.md +0 -240
  262. package/plugins/lisa-rails/rules/coding-philosophy.md +0 -428
  263. package/plugins/lisa-rails/rules/verfication.md +0 -596
  264. package/plugins/lisa-rails/skills/agent-design-best-practices/SKILL.md +0 -219
  265. package/plugins/lisa-rails/skills/git-commit/SKILL.md +0 -48
  266. package/plugins/lisa-rails/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  267. package/plugins/lisa-rails/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  268. package/plugins/lisa-rails/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  269. package/plugins/lisa-rails/skills/git-prune/SKILL.md +0 -35
  270. package/plugins/lisa-rails/skills/git-submit-pr/SKILL.md +0 -44
  271. package/plugins/lisa-rails/skills/jira-fix/SKILL.md +0 -16
  272. package/plugins/lisa-rails/skills/jira-implement/SKILL.md +0 -18
  273. package/plugins/lisa-rails/skills/jira-journey/scripts/generate-templates.py +0 -233
  274. package/plugins/lisa-rails/skills/jira-journey/scripts/parse-plan.py +0 -368
  275. package/plugins/lisa-rails/skills/jira-sync/SKILL.md +0 -63
  276. package/plugins/lisa-rails/skills/jsdoc-best-practices/SKILL.md +0 -432
  277. package/plugins/lisa-rails/skills/lisa-review-implementation/SKILL.md +0 -209
  278. package/plugins/lisa-rails/skills/plan-execute/SKILL.md +0 -89
  279. package/plugins/lisa-rails/skills/plan-local-code-review/SKILL.md +0 -88
  280. package/plugins/lisa-rails/skills/pull-request-review/SKILL.md +0 -68
  281. package/plugins/lisa-rails/skills/security-zap-scan/SKILL.md +0 -33
  282. package/plugins/lisa-rails/skills/sonarqube-check/SKILL.md +0 -11
  283. package/plugins/lisa-rails/skills/sonarqube-fix/SKILL.md +0 -8
  284. package/plugins/lisa-rails/skills/tasks-load/SKILL.md +0 -88
  285. package/plugins/lisa-rails/skills/tasks-sync/SKILL.md +0 -108
  286. package/plugins/lisa-typescript/agents/agent-architect.md +0 -310
  287. package/plugins/lisa-typescript/agents/architecture-specialist.md +0 -53
  288. package/plugins/lisa-typescript/agents/debug-specialist.md +0 -204
  289. package/plugins/lisa-typescript/agents/git-history-analyzer.md +0 -183
  290. package/plugins/lisa-typescript/agents/hooks-expert.md +0 -74
  291. package/plugins/lisa-typescript/agents/implementer.md +0 -54
  292. package/plugins/lisa-typescript/agents/learner.md +0 -44
  293. package/plugins/lisa-typescript/agents/performance-specialist.md +0 -95
  294. package/plugins/lisa-typescript/agents/product-specialist.md +0 -72
  295. package/plugins/lisa-typescript/agents/quality-specialist.md +0 -55
  296. package/plugins/lisa-typescript/agents/security-specialist.md +0 -58
  297. package/plugins/lisa-typescript/agents/skill-evaluator.md +0 -246
  298. package/plugins/lisa-typescript/agents/slash-command-architect.md +0 -87
  299. package/plugins/lisa-typescript/agents/test-specialist.md +0 -64
  300. package/plugins/lisa-typescript/agents/verification-specialist.md +0 -189
  301. package/plugins/lisa-typescript/agents/web-search-researcher.md +0 -112
  302. package/plugins/lisa-typescript/commands/git/commit-and-submit-pr.md +0 -7
  303. package/plugins/lisa-typescript/commands/git/commit-submit-pr-and-verify.md +0 -7
  304. package/plugins/lisa-typescript/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  305. package/plugins/lisa-typescript/commands/git/commit.md +0 -7
  306. package/plugins/lisa-typescript/commands/git/prune.md +0 -6
  307. package/plugins/lisa-typescript/commands/git/submit-pr.md +0 -7
  308. package/plugins/lisa-typescript/commands/jira/fix.md +0 -7
  309. package/plugins/lisa-typescript/commands/jira/implement.md +0 -7
  310. package/plugins/lisa-typescript/commands/jira/sync.md +0 -7
  311. package/plugins/lisa-typescript/commands/plan/add-test-coverage.md +0 -7
  312. package/plugins/lisa-typescript/commands/plan/create.md +0 -6
  313. package/plugins/lisa-typescript/commands/plan/execute.md +0 -7
  314. package/plugins/lisa-typescript/commands/plan/fix-linter-error.md +0 -7
  315. package/plugins/lisa-typescript/commands/plan/local-code-review.md +0 -6
  316. package/plugins/lisa-typescript/commands/plan/lower-code-complexity.md +0 -6
  317. package/plugins/lisa-typescript/commands/plan/reduce-max-lines-per-function.md +0 -7
  318. package/plugins/lisa-typescript/commands/plan/reduce-max-lines.md +0 -7
  319. package/plugins/lisa-typescript/commands/pull-request/review.md +0 -7
  320. package/plugins/lisa-typescript/commands/review/implementation.md +0 -7
  321. package/plugins/lisa-typescript/commands/security/zap-scan.md +0 -6
  322. package/plugins/lisa-typescript/commands/sonarqube/check.md +0 -6
  323. package/plugins/lisa-typescript/commands/sonarqube/fix.md +0 -6
  324. package/plugins/lisa-typescript/commands/tasks/load.md +0 -7
  325. package/plugins/lisa-typescript/commands/tasks/sync.md +0 -7
  326. package/plugins/lisa-typescript/hooks/debug-hook.sh +0 -47
  327. package/plugins/lisa-typescript/hooks/enforce-plan-rules.sh +0 -15
  328. package/plugins/lisa-typescript/hooks/install-pkgs.sh +0 -64
  329. package/plugins/lisa-typescript/hooks/notify-ntfy.sh +0 -183
  330. package/plugins/lisa-typescript/hooks/setup-jira-cli.sh +0 -52
  331. package/plugins/lisa-typescript/hooks/sync-tasks.sh +0 -107
  332. package/plugins/lisa-typescript/hooks/ticket-sync-reminder.sh +0 -23
  333. package/plugins/lisa-typescript/hooks/track-plan-sessions.sh +0 -164
  334. package/plugins/lisa-typescript/hooks/verify-completion.sh +0 -77
  335. package/plugins/lisa-typescript/rules/README.md +0 -240
  336. package/plugins/lisa-typescript/rules/coding-philosophy.md +0 -428
  337. package/plugins/lisa-typescript/rules/verfication.md +0 -596
  338. package/plugins/lisa-typescript/skills/agent-design-best-practices/SKILL.md +0 -219
  339. package/plugins/lisa-typescript/skills/git-commit/SKILL.md +0 -48
  340. package/plugins/lisa-typescript/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  341. package/plugins/lisa-typescript/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  342. package/plugins/lisa-typescript/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  343. package/plugins/lisa-typescript/skills/git-prune/SKILL.md +0 -35
  344. package/plugins/lisa-typescript/skills/git-submit-pr/SKILL.md +0 -44
  345. package/plugins/lisa-typescript/skills/jira-add-journey/SKILL.md +0 -120
  346. package/plugins/lisa-typescript/skills/jira-create/SKILL.md +0 -95
  347. package/plugins/lisa-typescript/skills/jira-evidence/SKILL.md +0 -73
  348. package/plugins/lisa-typescript/skills/jira-evidence/scripts/post-evidence.sh +0 -163
  349. package/plugins/lisa-typescript/skills/jira-fix/SKILL.md +0 -16
  350. package/plugins/lisa-typescript/skills/jira-implement/SKILL.md +0 -18
  351. package/plugins/lisa-typescript/skills/jira-journey/SKILL.md +0 -125
  352. package/plugins/lisa-typescript/skills/jira-journey/scripts/generate-templates.py +0 -233
  353. package/plugins/lisa-typescript/skills/jira-journey/scripts/parse-plan.py +0 -368
  354. package/plugins/lisa-typescript/skills/jira-sync/SKILL.md +0 -63
  355. package/plugins/lisa-typescript/skills/jira-verify/SKILL.md +0 -48
  356. package/plugins/lisa-typescript/skills/jsdoc-best-practices/SKILL.md +0 -432
  357. package/plugins/lisa-typescript/skills/lisa-review-implementation/SKILL.md +0 -209
  358. package/plugins/lisa-typescript/skills/plan-add-test-coverage/SKILL.md +0 -44
  359. package/plugins/lisa-typescript/skills/plan-execute/SKILL.md +0 -89
  360. package/plugins/lisa-typescript/skills/plan-fix-linter-error/SKILL.md +0 -45
  361. package/plugins/lisa-typescript/skills/plan-local-code-review/SKILL.md +0 -88
  362. package/plugins/lisa-typescript/skills/plan-lower-code-complexity/SKILL.md +0 -44
  363. package/plugins/lisa-typescript/skills/plan-reduce-max-lines/SKILL.md +0 -45
  364. package/plugins/lisa-typescript/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  365. package/plugins/lisa-typescript/skills/pull-request-review/SKILL.md +0 -68
  366. package/plugins/lisa-typescript/skills/security-zap-scan/SKILL.md +0 -33
  367. package/plugins/lisa-typescript/skills/sonarqube-check/SKILL.md +0 -11
  368. package/plugins/lisa-typescript/skills/sonarqube-fix/SKILL.md +0 -8
  369. package/plugins/lisa-typescript/skills/tasks-load/SKILL.md +0 -88
  370. package/plugins/lisa-typescript/skills/tasks-sync/SKILL.md +0 -108
  371. package/plugins/src/base/hooks/format-on-edit.sh +0 -76
  372. package/plugins/src/base/hooks/lint-on-edit.sh +0 -81
  373. package/plugins/src/base/hooks/sg-scan-on-edit.sh +0 -68
  374. package/plugins/src/base/rules/lisa.md +0 -37
  375. /package/plugins/{lisa-cdk → lisa}/agents/agent-architect.md +0 -0
  376. /package/plugins/{lisa-cdk → lisa}/agents/architecture-specialist.md +0 -0
  377. /package/plugins/{lisa-cdk → lisa}/agents/debug-specialist.md +0 -0
  378. /package/plugins/{lisa-cdk → lisa}/agents/git-history-analyzer.md +0 -0
  379. /package/plugins/{lisa-cdk → lisa}/agents/hooks-expert.md +0 -0
  380. /package/plugins/{lisa-cdk → lisa}/agents/implementer.md +0 -0
  381. /package/plugins/{lisa-cdk → lisa}/agents/learner.md +0 -0
  382. /package/plugins/{lisa-cdk → lisa}/agents/performance-specialist.md +0 -0
  383. /package/plugins/{lisa-cdk → lisa}/agents/product-specialist.md +0 -0
  384. /package/plugins/{lisa-cdk → lisa}/agents/quality-specialist.md +0 -0
  385. /package/plugins/{lisa-cdk → lisa}/agents/security-specialist.md +0 -0
  386. /package/plugins/{lisa-cdk → lisa}/agents/skill-evaluator.md +0 -0
  387. /package/plugins/{lisa-cdk → lisa}/agents/slash-command-architect.md +0 -0
  388. /package/plugins/{lisa-cdk → lisa}/agents/test-specialist.md +0 -0
  389. /package/plugins/{lisa-cdk → lisa}/agents/verification-specialist.md +0 -0
  390. /package/plugins/{lisa-cdk → lisa}/agents/web-search-researcher.md +0 -0
  391. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-and-submit-pr.md +0 -0
  392. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-and-verify.md +0 -0
  393. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-deploy-and-verify.md +0 -0
  394. /package/plugins/{lisa-cdk → lisa}/commands/git/commit.md +0 -0
  395. /package/plugins/{lisa-cdk → lisa}/commands/git/prune.md +0 -0
  396. /package/plugins/{lisa-cdk → lisa}/commands/git/submit-pr.md +0 -0
  397. /package/plugins/{lisa-cdk → lisa}/commands/jira/add-journey.md +0 -0
  398. /package/plugins/{lisa-cdk → lisa}/commands/jira/create.md +0 -0
  399. /package/plugins/{lisa-cdk → lisa}/commands/jira/evidence.md +0 -0
  400. /package/plugins/{lisa-cdk → lisa}/commands/jira/fix.md +0 -0
  401. /package/plugins/{lisa-cdk → lisa}/commands/jira/implement.md +0 -0
  402. /package/plugins/{lisa-cdk → lisa}/commands/jira/journey.md +0 -0
  403. /package/plugins/{lisa-cdk → lisa}/commands/jira/sync.md +0 -0
  404. /package/plugins/{lisa-cdk → lisa}/commands/jira/verify.md +0 -0
  405. /package/plugins/{lisa-cdk → lisa}/commands/plan/add-test-coverage.md +0 -0
  406. /package/plugins/{lisa-cdk → lisa}/commands/plan/create.md +0 -0
  407. /package/plugins/{lisa-cdk → lisa}/commands/plan/execute.md +0 -0
  408. /package/plugins/{lisa-cdk → lisa}/commands/plan/fix-linter-error.md +0 -0
  409. /package/plugins/{lisa-cdk → lisa}/commands/plan/local-code-review.md +0 -0
  410. /package/plugins/{lisa-cdk → lisa}/commands/plan/lower-code-complexity.md +0 -0
  411. /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines-per-function.md +0 -0
  412. /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines.md +0 -0
  413. /package/plugins/{lisa-cdk → lisa}/commands/pull-request/review.md +0 -0
  414. /package/plugins/{lisa-cdk → lisa}/commands/review/implementation.md +0 -0
  415. /package/plugins/{lisa-cdk → lisa}/commands/security/zap-scan.md +0 -0
  416. /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/check.md +0 -0
  417. /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/fix.md +0 -0
  418. /package/plugins/{lisa-cdk → lisa}/commands/tasks/load.md +0 -0
  419. /package/plugins/{lisa-cdk → lisa}/commands/tasks/sync.md +0 -0
  420. /package/plugins/{lisa-cdk → lisa}/hooks/debug-hook.sh +0 -0
  421. /package/plugins/{lisa-cdk → lisa}/hooks/enforce-plan-rules.sh +0 -0
  422. /package/plugins/{lisa-cdk → lisa}/hooks/install-pkgs.sh +0 -0
  423. /package/plugins/{lisa-cdk → lisa}/hooks/notify-ntfy.sh +0 -0
  424. /package/plugins/{lisa-cdk → lisa}/hooks/setup-jira-cli.sh +0 -0
  425. /package/plugins/{lisa-cdk → lisa}/hooks/sync-tasks.sh +0 -0
  426. /package/plugins/{lisa-cdk → lisa}/hooks/ticket-sync-reminder.sh +0 -0
  427. /package/plugins/{lisa-cdk → lisa}/hooks/track-plan-sessions.sh +0 -0
  428. /package/plugins/{lisa-cdk → lisa}/hooks/verify-completion.sh +0 -0
  429. /package/plugins/{lisa-cdk → lisa}/rules/README.md +0 -0
  430. /package/plugins/{lisa-cdk → lisa}/rules/coding-philosophy.md +0 -0
  431. /package/plugins/{lisa-cdk → lisa}/rules/verfication.md +0 -0
  432. /package/plugins/{lisa-cdk → lisa}/skills/agent-design-best-practices/SKILL.md +0 -0
  433. /package/plugins/{lisa-cdk → lisa}/skills/git-commit/SKILL.md +0 -0
  434. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-and-submit-pr/SKILL.md +0 -0
  435. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -0
  436. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -0
  437. /package/plugins/{lisa-cdk → lisa}/skills/git-prune/SKILL.md +0 -0
  438. /package/plugins/{lisa-cdk → lisa}/skills/git-submit-pr/SKILL.md +0 -0
  439. /package/plugins/{lisa-cdk → lisa}/skills/jira-add-journey/SKILL.md +0 -0
  440. /package/plugins/{lisa-cdk → lisa}/skills/jira-create/SKILL.md +0 -0
  441. /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/SKILL.md +0 -0
  442. /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/scripts/post-evidence.sh +0 -0
  443. /package/plugins/{lisa-cdk → lisa}/skills/jira-fix/SKILL.md +0 -0
  444. /package/plugins/{lisa-cdk → lisa}/skills/jira-implement/SKILL.md +0 -0
  445. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/SKILL.md +0 -0
  446. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/generate-templates.py +0 -0
  447. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/parse-plan.py +0 -0
  448. /package/plugins/{lisa-cdk → lisa}/skills/jira-sync/SKILL.md +0 -0
  449. /package/plugins/{lisa-cdk → lisa}/skills/jira-verify/SKILL.md +0 -0
  450. /package/plugins/{lisa-cdk → lisa}/skills/jsdoc-best-practices/SKILL.md +0 -0
  451. /package/plugins/{lisa-cdk → lisa}/skills/lisa-review-implementation/SKILL.md +0 -0
  452. /package/plugins/{lisa-cdk → lisa}/skills/plan-add-test-coverage/SKILL.md +0 -0
  453. /package/plugins/{lisa-cdk → lisa}/skills/plan-execute/SKILL.md +0 -0
  454. /package/plugins/{lisa-cdk → lisa}/skills/plan-fix-linter-error/SKILL.md +0 -0
  455. /package/plugins/{lisa-cdk → lisa}/skills/plan-local-code-review/SKILL.md +0 -0
  456. /package/plugins/{lisa-cdk → lisa}/skills/plan-lower-code-complexity/SKILL.md +0 -0
  457. /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines/SKILL.md +0 -0
  458. /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -0
  459. /package/plugins/{lisa-cdk → lisa}/skills/pull-request-review/SKILL.md +0 -0
  460. /package/plugins/{lisa-cdk → lisa}/skills/security-zap-scan/SKILL.md +0 -0
  461. /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-check/SKILL.md +0 -0
  462. /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-fix/SKILL.md +0 -0
  463. /package/plugins/{lisa-cdk → lisa}/skills/tasks-load/SKILL.md +0 -0
  464. /package/plugins/{lisa-cdk → lisa}/skills/tasks-sync/SKILL.md +0 -0
  465. /package/plugins/{lisa-cdk → src/typescript}/hooks/format-on-edit.sh +0 -0
  466. /package/plugins/{lisa-cdk → src/typescript}/hooks/lint-on-edit.sh +0 -0
  467. /package/plugins/{lisa-cdk → src/typescript}/hooks/sg-scan-on-edit.sh +0 -0
  468. /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.