@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.
- package/.claude-plugin/marketplace.json +11 -5
- package/all/merge/.claude/settings.json +7 -0
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +148 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +3 -159
- package/plugins/lisa-expo/.claude-plugin/plugin.json +2 -146
- package/plugins/lisa-expo/commands/jira/add-journey.md +1 -1
- package/plugins/lisa-expo/commands/jira/create.md +1 -1
- package/plugins/lisa-expo/commands/jira/evidence.md +1 -1
- package/plugins/lisa-expo/commands/jira/journey.md +1 -1
- package/plugins/lisa-expo/commands/jira/verify.md +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +3 -159
- package/plugins/lisa-rails/.claude-plugin/plugin.json +2 -120
- package/plugins/lisa-rails/commands/jira/add-journey.md +1 -1
- package/plugins/lisa-rails/commands/jira/create.md +1 -1
- package/plugins/lisa-rails/commands/jira/evidence.md +1 -1
- package/plugins/lisa-rails/commands/jira/journey.md +1 -1
- package/plugins/lisa-rails/commands/jira/verify.md +1 -1
- package/plugins/lisa-rails/commands/plan/add-test-coverage.md +1 -1
- package/plugins/lisa-rails/commands/plan/fix-linter-error.md +1 -1
- package/plugins/lisa-rails/commands/plan/lower-code-complexity.md +1 -1
- package/plugins/lisa-rails/commands/plan/reduce-max-lines-per-function.md +1 -1
- package/plugins/lisa-rails/commands/plan/reduce-max-lines.md +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +2 -127
- package/plugins/src/base/.claude-plugin/plugin.json +78 -0
- package/plugins/src/cdk/.claude-plugin/plugin.json +2 -81
- package/plugins/src/expo/.claude-plugin/plugin.json +1 -68
- package/plugins/{lisa-typescript → src/expo}/commands/jira/add-journey.md +1 -1
- package/plugins/{lisa-nestjs → src/expo}/commands/jira/create.md +1 -1
- package/plugins/{lisa-nestjs → src/expo}/commands/jira/evidence.md +1 -1
- package/plugins/{lisa-nestjs → src/expo}/commands/jira/journey.md +1 -1
- package/plugins/{lisa-nestjs → src/expo}/commands/jira/verify.md +1 -1
- package/plugins/src/nestjs/.claude-plugin/plugin.json +2 -81
- package/plugins/src/rails/.claude-plugin/plugin.json +1 -59
- package/plugins/{lisa-nestjs → src/rails}/commands/jira/add-journey.md +1 -1
- package/plugins/{lisa-typescript → src/rails}/commands/jira/create.md +1 -1
- package/plugins/{lisa-typescript → src/rails}/commands/jira/evidence.md +1 -1
- package/plugins/{lisa-typescript → src/rails}/commands/jira/journey.md +1 -1
- package/plugins/{lisa-typescript → src/rails}/commands/jira/verify.md +1 -1
- package/plugins/{lisa-expo → src/rails}/commands/plan/add-test-coverage.md +1 -1
- package/plugins/{lisa-expo → src/rails}/commands/plan/fix-linter-error.md +1 -1
- package/plugins/{lisa-expo → src/rails}/commands/plan/lower-code-complexity.md +1 -1
- package/plugins/{lisa-expo → src/rails}/commands/plan/reduce-max-lines-per-function.md +1 -1
- package/plugins/{lisa-expo → src/rails}/commands/plan/reduce-max-lines.md +1 -1
- package/plugins/src/typescript/.claude-plugin/plugin.json +1 -58
- package/scripts/build-plugins.sh +30 -17
- package/scripts/install-claude-plugins.sh +28 -11
- package/typescript/merge/.claude/settings.json +2 -2
- package/typescript/package-lisa/package.lisa.json +2 -1
- package/plugins/lisa-expo/agents/agent-architect.md +0 -310
- package/plugins/lisa-expo/agents/architecture-specialist.md +0 -53
- package/plugins/lisa-expo/agents/debug-specialist.md +0 -204
- package/plugins/lisa-expo/agents/git-history-analyzer.md +0 -183
- package/plugins/lisa-expo/agents/hooks-expert.md +0 -74
- package/plugins/lisa-expo/agents/implementer.md +0 -54
- package/plugins/lisa-expo/agents/learner.md +0 -44
- package/plugins/lisa-expo/agents/performance-specialist.md +0 -95
- package/plugins/lisa-expo/agents/product-specialist.md +0 -72
- package/plugins/lisa-expo/agents/quality-specialist.md +0 -55
- package/plugins/lisa-expo/agents/security-specialist.md +0 -58
- package/plugins/lisa-expo/agents/skill-evaluator.md +0 -246
- package/plugins/lisa-expo/agents/slash-command-architect.md +0 -87
- package/plugins/lisa-expo/agents/test-specialist.md +0 -64
- package/plugins/lisa-expo/agents/verification-specialist.md +0 -189
- package/plugins/lisa-expo/agents/web-search-researcher.md +0 -112
- package/plugins/lisa-expo/commands/git/commit-and-submit-pr.md +0 -7
- package/plugins/lisa-expo/commands/git/commit-submit-pr-and-verify.md +0 -7
- package/plugins/lisa-expo/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
- package/plugins/lisa-expo/commands/git/commit.md +0 -7
- package/plugins/lisa-expo/commands/git/prune.md +0 -6
- package/plugins/lisa-expo/commands/git/submit-pr.md +0 -7
- package/plugins/lisa-expo/commands/jira/fix.md +0 -7
- package/plugins/lisa-expo/commands/jira/implement.md +0 -7
- package/plugins/lisa-expo/commands/jira/sync.md +0 -7
- package/plugins/lisa-expo/commands/plan/create.md +0 -6
- package/plugins/lisa-expo/commands/plan/execute.md +0 -7
- package/plugins/lisa-expo/commands/plan/local-code-review.md +0 -6
- package/plugins/lisa-expo/commands/pull-request/review.md +0 -7
- package/plugins/lisa-expo/commands/review/implementation.md +0 -7
- package/plugins/lisa-expo/commands/security/zap-scan.md +0 -6
- package/plugins/lisa-expo/commands/sonarqube/check.md +0 -6
- package/plugins/lisa-expo/commands/sonarqube/fix.md +0 -6
- package/plugins/lisa-expo/commands/tasks/load.md +0 -7
- package/plugins/lisa-expo/commands/tasks/sync.md +0 -7
- package/plugins/lisa-expo/hooks/debug-hook.sh +0 -47
- package/plugins/lisa-expo/hooks/enforce-plan-rules.sh +0 -15
- package/plugins/lisa-expo/hooks/format-on-edit.sh +0 -76
- package/plugins/lisa-expo/hooks/install-pkgs.sh +0 -64
- package/plugins/lisa-expo/hooks/lint-on-edit.sh +0 -81
- package/plugins/lisa-expo/hooks/notify-ntfy.sh +0 -183
- package/plugins/lisa-expo/hooks/setup-jira-cli.sh +0 -52
- package/plugins/lisa-expo/hooks/sg-scan-on-edit.sh +0 -68
- package/plugins/lisa-expo/hooks/sync-tasks.sh +0 -107
- package/plugins/lisa-expo/hooks/ticket-sync-reminder.sh +0 -23
- package/plugins/lisa-expo/hooks/track-plan-sessions.sh +0 -164
- package/plugins/lisa-expo/hooks/verify-completion.sh +0 -77
- package/plugins/lisa-expo/rules/README.md +0 -240
- package/plugins/lisa-expo/rules/coding-philosophy.md +0 -428
- package/plugins/lisa-expo/rules/lisa.md +0 -37
- package/plugins/lisa-expo/rules/verfication.md +0 -596
- package/plugins/lisa-expo/skills/agent-design-best-practices/SKILL.md +0 -219
- package/plugins/lisa-expo/skills/git-commit/SKILL.md +0 -48
- package/plugins/lisa-expo/skills/git-commit-and-submit-pr/SKILL.md +0 -8
- package/plugins/lisa-expo/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
- package/plugins/lisa-expo/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
- package/plugins/lisa-expo/skills/git-prune/SKILL.md +0 -35
- package/plugins/lisa-expo/skills/git-submit-pr/SKILL.md +0 -44
- package/plugins/lisa-expo/skills/jira-fix/SKILL.md +0 -16
- package/plugins/lisa-expo/skills/jira-implement/SKILL.md +0 -18
- package/plugins/lisa-expo/skills/jira-sync/SKILL.md +0 -63
- package/plugins/lisa-expo/skills/jsdoc-best-practices/SKILL.md +0 -432
- package/plugins/lisa-expo/skills/lisa-review-implementation/SKILL.md +0 -209
- package/plugins/lisa-expo/skills/plan-add-test-coverage/SKILL.md +0 -44
- package/plugins/lisa-expo/skills/plan-execute/SKILL.md +0 -89
- package/plugins/lisa-expo/skills/plan-fix-linter-error/SKILL.md +0 -45
- package/plugins/lisa-expo/skills/plan-local-code-review/SKILL.md +0 -88
- package/plugins/lisa-expo/skills/plan-lower-code-complexity/SKILL.md +0 -44
- package/plugins/lisa-expo/skills/plan-reduce-max-lines/SKILL.md +0 -45
- package/plugins/lisa-expo/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
- package/plugins/lisa-expo/skills/pull-request-review/SKILL.md +0 -68
- package/plugins/lisa-expo/skills/security-zap-scan/SKILL.md +0 -33
- package/plugins/lisa-expo/skills/sonarqube-check/SKILL.md +0 -11
- package/plugins/lisa-expo/skills/sonarqube-fix/SKILL.md +0 -8
- package/plugins/lisa-expo/skills/tasks-load/SKILL.md +0 -88
- package/plugins/lisa-expo/skills/tasks-sync/SKILL.md +0 -108
- package/plugins/lisa-nestjs/agents/agent-architect.md +0 -310
- package/plugins/lisa-nestjs/agents/architecture-specialist.md +0 -53
- package/plugins/lisa-nestjs/agents/debug-specialist.md +0 -204
- package/plugins/lisa-nestjs/agents/git-history-analyzer.md +0 -183
- package/plugins/lisa-nestjs/agents/hooks-expert.md +0 -74
- package/plugins/lisa-nestjs/agents/implementer.md +0 -54
- package/plugins/lisa-nestjs/agents/learner.md +0 -44
- package/plugins/lisa-nestjs/agents/performance-specialist.md +0 -95
- package/plugins/lisa-nestjs/agents/product-specialist.md +0 -72
- package/plugins/lisa-nestjs/agents/quality-specialist.md +0 -55
- package/plugins/lisa-nestjs/agents/security-specialist.md +0 -58
- package/plugins/lisa-nestjs/agents/skill-evaluator.md +0 -246
- package/plugins/lisa-nestjs/agents/slash-command-architect.md +0 -87
- package/plugins/lisa-nestjs/agents/test-specialist.md +0 -64
- package/plugins/lisa-nestjs/agents/verification-specialist.md +0 -189
- package/plugins/lisa-nestjs/agents/web-search-researcher.md +0 -112
- package/plugins/lisa-nestjs/commands/git/commit-and-submit-pr.md +0 -7
- package/plugins/lisa-nestjs/commands/git/commit-submit-pr-and-verify.md +0 -7
- package/plugins/lisa-nestjs/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
- package/plugins/lisa-nestjs/commands/git/commit.md +0 -7
- package/plugins/lisa-nestjs/commands/git/prune.md +0 -6
- package/plugins/lisa-nestjs/commands/git/submit-pr.md +0 -7
- package/plugins/lisa-nestjs/commands/jira/fix.md +0 -7
- package/plugins/lisa-nestjs/commands/jira/implement.md +0 -7
- package/plugins/lisa-nestjs/commands/jira/sync.md +0 -7
- package/plugins/lisa-nestjs/commands/plan/add-test-coverage.md +0 -7
- package/plugins/lisa-nestjs/commands/plan/create.md +0 -6
- package/plugins/lisa-nestjs/commands/plan/execute.md +0 -7
- package/plugins/lisa-nestjs/commands/plan/fix-linter-error.md +0 -7
- package/plugins/lisa-nestjs/commands/plan/local-code-review.md +0 -6
- package/plugins/lisa-nestjs/commands/plan/lower-code-complexity.md +0 -6
- package/plugins/lisa-nestjs/commands/plan/reduce-max-lines-per-function.md +0 -7
- package/plugins/lisa-nestjs/commands/plan/reduce-max-lines.md +0 -7
- package/plugins/lisa-nestjs/commands/pull-request/review.md +0 -7
- package/plugins/lisa-nestjs/commands/review/implementation.md +0 -7
- package/plugins/lisa-nestjs/commands/security/zap-scan.md +0 -6
- package/plugins/lisa-nestjs/commands/sonarqube/check.md +0 -6
- package/plugins/lisa-nestjs/commands/sonarqube/fix.md +0 -6
- package/plugins/lisa-nestjs/commands/tasks/load.md +0 -7
- package/plugins/lisa-nestjs/commands/tasks/sync.md +0 -7
- package/plugins/lisa-nestjs/hooks/debug-hook.sh +0 -47
- package/plugins/lisa-nestjs/hooks/enforce-plan-rules.sh +0 -15
- package/plugins/lisa-nestjs/hooks/format-on-edit.sh +0 -76
- package/plugins/lisa-nestjs/hooks/install-pkgs.sh +0 -64
- package/plugins/lisa-nestjs/hooks/lint-on-edit.sh +0 -81
- package/plugins/lisa-nestjs/hooks/notify-ntfy.sh +0 -183
- package/plugins/lisa-nestjs/hooks/setup-jira-cli.sh +0 -52
- package/plugins/lisa-nestjs/hooks/sg-scan-on-edit.sh +0 -68
- package/plugins/lisa-nestjs/hooks/sync-tasks.sh +0 -107
- package/plugins/lisa-nestjs/hooks/ticket-sync-reminder.sh +0 -23
- package/plugins/lisa-nestjs/hooks/track-plan-sessions.sh +0 -164
- package/plugins/lisa-nestjs/hooks/verify-completion.sh +0 -77
- package/plugins/lisa-nestjs/rules/README.md +0 -240
- package/plugins/lisa-nestjs/rules/coding-philosophy.md +0 -428
- package/plugins/lisa-nestjs/rules/lisa.md +0 -37
- package/plugins/lisa-nestjs/rules/verfication.md +0 -596
- package/plugins/lisa-nestjs/skills/agent-design-best-practices/SKILL.md +0 -219
- package/plugins/lisa-nestjs/skills/git-commit/SKILL.md +0 -48
- package/plugins/lisa-nestjs/skills/git-commit-and-submit-pr/SKILL.md +0 -8
- package/plugins/lisa-nestjs/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
- package/plugins/lisa-nestjs/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
- package/plugins/lisa-nestjs/skills/git-prune/SKILL.md +0 -35
- package/plugins/lisa-nestjs/skills/git-submit-pr/SKILL.md +0 -44
- package/plugins/lisa-nestjs/skills/jira-add-journey/SKILL.md +0 -120
- package/plugins/lisa-nestjs/skills/jira-create/SKILL.md +0 -95
- package/plugins/lisa-nestjs/skills/jira-evidence/SKILL.md +0 -73
- package/plugins/lisa-nestjs/skills/jira-evidence/scripts/post-evidence.sh +0 -163
- package/plugins/lisa-nestjs/skills/jira-fix/SKILL.md +0 -16
- package/plugins/lisa-nestjs/skills/jira-implement/SKILL.md +0 -18
- package/plugins/lisa-nestjs/skills/jira-journey/SKILL.md +0 -125
- package/plugins/lisa-nestjs/skills/jira-journey/scripts/generate-templates.py +0 -233
- package/plugins/lisa-nestjs/skills/jira-journey/scripts/parse-plan.py +0 -368
- package/plugins/lisa-nestjs/skills/jira-sync/SKILL.md +0 -63
- package/plugins/lisa-nestjs/skills/jira-verify/SKILL.md +0 -48
- package/plugins/lisa-nestjs/skills/jsdoc-best-practices/SKILL.md +0 -432
- package/plugins/lisa-nestjs/skills/lisa-review-implementation/SKILL.md +0 -209
- package/plugins/lisa-nestjs/skills/plan-add-test-coverage/SKILL.md +0 -44
- package/plugins/lisa-nestjs/skills/plan-execute/SKILL.md +0 -89
- package/plugins/lisa-nestjs/skills/plan-fix-linter-error/SKILL.md +0 -45
- package/plugins/lisa-nestjs/skills/plan-local-code-review/SKILL.md +0 -88
- package/plugins/lisa-nestjs/skills/plan-lower-code-complexity/SKILL.md +0 -44
- package/plugins/lisa-nestjs/skills/plan-reduce-max-lines/SKILL.md +0 -45
- package/plugins/lisa-nestjs/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
- package/plugins/lisa-nestjs/skills/pull-request-review/SKILL.md +0 -68
- package/plugins/lisa-nestjs/skills/security-zap-scan/SKILL.md +0 -33
- package/plugins/lisa-nestjs/skills/sonarqube-check/SKILL.md +0 -11
- package/plugins/lisa-nestjs/skills/sonarqube-fix/SKILL.md +0 -8
- package/plugins/lisa-nestjs/skills/tasks-load/SKILL.md +0 -88
- package/plugins/lisa-nestjs/skills/tasks-sync/SKILL.md +0 -108
- package/plugins/lisa-rails/agents/agent-architect.md +0 -310
- package/plugins/lisa-rails/agents/architecture-specialist.md +0 -53
- package/plugins/lisa-rails/agents/debug-specialist.md +0 -204
- package/plugins/lisa-rails/agents/git-history-analyzer.md +0 -183
- package/plugins/lisa-rails/agents/hooks-expert.md +0 -74
- package/plugins/lisa-rails/agents/implementer.md +0 -54
- package/plugins/lisa-rails/agents/learner.md +0 -44
- package/plugins/lisa-rails/agents/performance-specialist.md +0 -95
- package/plugins/lisa-rails/agents/product-specialist.md +0 -72
- package/plugins/lisa-rails/agents/quality-specialist.md +0 -55
- package/plugins/lisa-rails/agents/security-specialist.md +0 -58
- package/plugins/lisa-rails/agents/skill-evaluator.md +0 -246
- package/plugins/lisa-rails/agents/slash-command-architect.md +0 -87
- package/plugins/lisa-rails/agents/test-specialist.md +0 -64
- package/plugins/lisa-rails/agents/verification-specialist.md +0 -189
- package/plugins/lisa-rails/agents/web-search-researcher.md +0 -112
- package/plugins/lisa-rails/commands/git/commit-and-submit-pr.md +0 -7
- package/plugins/lisa-rails/commands/git/commit-submit-pr-and-verify.md +0 -7
- package/plugins/lisa-rails/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
- package/plugins/lisa-rails/commands/git/commit.md +0 -7
- package/plugins/lisa-rails/commands/git/prune.md +0 -6
- package/plugins/lisa-rails/commands/git/submit-pr.md +0 -7
- package/plugins/lisa-rails/commands/jira/fix.md +0 -7
- package/plugins/lisa-rails/commands/jira/implement.md +0 -7
- package/plugins/lisa-rails/commands/jira/sync.md +0 -7
- package/plugins/lisa-rails/commands/plan/create.md +0 -6
- package/plugins/lisa-rails/commands/plan/execute.md +0 -7
- package/plugins/lisa-rails/commands/plan/local-code-review.md +0 -6
- package/plugins/lisa-rails/commands/pull-request/review.md +0 -7
- package/plugins/lisa-rails/commands/review/implementation.md +0 -7
- package/plugins/lisa-rails/commands/security/zap-scan.md +0 -6
- package/plugins/lisa-rails/commands/sonarqube/check.md +0 -6
- package/plugins/lisa-rails/commands/sonarqube/fix.md +0 -6
- package/plugins/lisa-rails/commands/tasks/load.md +0 -7
- package/plugins/lisa-rails/commands/tasks/sync.md +0 -7
- package/plugins/lisa-rails/hooks/debug-hook.sh +0 -47
- package/plugins/lisa-rails/hooks/enforce-plan-rules.sh +0 -15
- package/plugins/lisa-rails/hooks/format-on-edit.sh +0 -76
- package/plugins/lisa-rails/hooks/install-pkgs.sh +0 -64
- package/plugins/lisa-rails/hooks/lint-on-edit.sh +0 -81
- package/plugins/lisa-rails/hooks/notify-ntfy.sh +0 -183
- package/plugins/lisa-rails/hooks/setup-jira-cli.sh +0 -52
- package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +0 -68
- package/plugins/lisa-rails/hooks/sync-tasks.sh +0 -107
- package/plugins/lisa-rails/hooks/ticket-sync-reminder.sh +0 -23
- package/plugins/lisa-rails/hooks/track-plan-sessions.sh +0 -164
- package/plugins/lisa-rails/hooks/verify-completion.sh +0 -77
- package/plugins/lisa-rails/rules/README.md +0 -240
- package/plugins/lisa-rails/rules/coding-philosophy.md +0 -428
- package/plugins/lisa-rails/rules/verfication.md +0 -596
- package/plugins/lisa-rails/skills/agent-design-best-practices/SKILL.md +0 -219
- package/plugins/lisa-rails/skills/git-commit/SKILL.md +0 -48
- package/plugins/lisa-rails/skills/git-commit-and-submit-pr/SKILL.md +0 -8
- package/plugins/lisa-rails/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
- package/plugins/lisa-rails/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
- package/plugins/lisa-rails/skills/git-prune/SKILL.md +0 -35
- package/plugins/lisa-rails/skills/git-submit-pr/SKILL.md +0 -44
- package/plugins/lisa-rails/skills/jira-fix/SKILL.md +0 -16
- package/plugins/lisa-rails/skills/jira-implement/SKILL.md +0 -18
- package/plugins/lisa-rails/skills/jira-journey/scripts/generate-templates.py +0 -233
- package/plugins/lisa-rails/skills/jira-journey/scripts/parse-plan.py +0 -368
- package/plugins/lisa-rails/skills/jira-sync/SKILL.md +0 -63
- package/plugins/lisa-rails/skills/jsdoc-best-practices/SKILL.md +0 -432
- package/plugins/lisa-rails/skills/lisa-review-implementation/SKILL.md +0 -209
- package/plugins/lisa-rails/skills/plan-execute/SKILL.md +0 -89
- package/plugins/lisa-rails/skills/plan-local-code-review/SKILL.md +0 -88
- package/plugins/lisa-rails/skills/pull-request-review/SKILL.md +0 -68
- package/plugins/lisa-rails/skills/security-zap-scan/SKILL.md +0 -33
- package/plugins/lisa-rails/skills/sonarqube-check/SKILL.md +0 -11
- package/plugins/lisa-rails/skills/sonarqube-fix/SKILL.md +0 -8
- package/plugins/lisa-rails/skills/tasks-load/SKILL.md +0 -88
- package/plugins/lisa-rails/skills/tasks-sync/SKILL.md +0 -108
- package/plugins/lisa-typescript/agents/agent-architect.md +0 -310
- package/plugins/lisa-typescript/agents/architecture-specialist.md +0 -53
- package/plugins/lisa-typescript/agents/debug-specialist.md +0 -204
- package/plugins/lisa-typescript/agents/git-history-analyzer.md +0 -183
- package/plugins/lisa-typescript/agents/hooks-expert.md +0 -74
- package/plugins/lisa-typescript/agents/implementer.md +0 -54
- package/plugins/lisa-typescript/agents/learner.md +0 -44
- package/plugins/lisa-typescript/agents/performance-specialist.md +0 -95
- package/plugins/lisa-typescript/agents/product-specialist.md +0 -72
- package/plugins/lisa-typescript/agents/quality-specialist.md +0 -55
- package/plugins/lisa-typescript/agents/security-specialist.md +0 -58
- package/plugins/lisa-typescript/agents/skill-evaluator.md +0 -246
- package/plugins/lisa-typescript/agents/slash-command-architect.md +0 -87
- package/plugins/lisa-typescript/agents/test-specialist.md +0 -64
- package/plugins/lisa-typescript/agents/verification-specialist.md +0 -189
- package/plugins/lisa-typescript/agents/web-search-researcher.md +0 -112
- package/plugins/lisa-typescript/commands/git/commit-and-submit-pr.md +0 -7
- package/plugins/lisa-typescript/commands/git/commit-submit-pr-and-verify.md +0 -7
- package/plugins/lisa-typescript/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
- package/plugins/lisa-typescript/commands/git/commit.md +0 -7
- package/plugins/lisa-typescript/commands/git/prune.md +0 -6
- package/plugins/lisa-typescript/commands/git/submit-pr.md +0 -7
- package/plugins/lisa-typescript/commands/jira/fix.md +0 -7
- package/plugins/lisa-typescript/commands/jira/implement.md +0 -7
- package/plugins/lisa-typescript/commands/jira/sync.md +0 -7
- package/plugins/lisa-typescript/commands/plan/add-test-coverage.md +0 -7
- package/plugins/lisa-typescript/commands/plan/create.md +0 -6
- package/plugins/lisa-typescript/commands/plan/execute.md +0 -7
- package/plugins/lisa-typescript/commands/plan/fix-linter-error.md +0 -7
- package/plugins/lisa-typescript/commands/plan/local-code-review.md +0 -6
- package/plugins/lisa-typescript/commands/plan/lower-code-complexity.md +0 -6
- package/plugins/lisa-typescript/commands/plan/reduce-max-lines-per-function.md +0 -7
- package/plugins/lisa-typescript/commands/plan/reduce-max-lines.md +0 -7
- package/plugins/lisa-typescript/commands/pull-request/review.md +0 -7
- package/plugins/lisa-typescript/commands/review/implementation.md +0 -7
- package/plugins/lisa-typescript/commands/security/zap-scan.md +0 -6
- package/plugins/lisa-typescript/commands/sonarqube/check.md +0 -6
- package/plugins/lisa-typescript/commands/sonarqube/fix.md +0 -6
- package/plugins/lisa-typescript/commands/tasks/load.md +0 -7
- package/plugins/lisa-typescript/commands/tasks/sync.md +0 -7
- package/plugins/lisa-typescript/hooks/debug-hook.sh +0 -47
- package/plugins/lisa-typescript/hooks/enforce-plan-rules.sh +0 -15
- package/plugins/lisa-typescript/hooks/install-pkgs.sh +0 -64
- package/plugins/lisa-typescript/hooks/notify-ntfy.sh +0 -183
- package/plugins/lisa-typescript/hooks/setup-jira-cli.sh +0 -52
- package/plugins/lisa-typescript/hooks/sync-tasks.sh +0 -107
- package/plugins/lisa-typescript/hooks/ticket-sync-reminder.sh +0 -23
- package/plugins/lisa-typescript/hooks/track-plan-sessions.sh +0 -164
- package/plugins/lisa-typescript/hooks/verify-completion.sh +0 -77
- package/plugins/lisa-typescript/rules/README.md +0 -240
- package/plugins/lisa-typescript/rules/coding-philosophy.md +0 -428
- package/plugins/lisa-typescript/rules/verfication.md +0 -596
- package/plugins/lisa-typescript/skills/agent-design-best-practices/SKILL.md +0 -219
- package/plugins/lisa-typescript/skills/git-commit/SKILL.md +0 -48
- package/plugins/lisa-typescript/skills/git-commit-and-submit-pr/SKILL.md +0 -8
- package/plugins/lisa-typescript/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
- package/plugins/lisa-typescript/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
- package/plugins/lisa-typescript/skills/git-prune/SKILL.md +0 -35
- package/plugins/lisa-typescript/skills/git-submit-pr/SKILL.md +0 -44
- package/plugins/lisa-typescript/skills/jira-add-journey/SKILL.md +0 -120
- package/plugins/lisa-typescript/skills/jira-create/SKILL.md +0 -95
- package/plugins/lisa-typescript/skills/jira-evidence/SKILL.md +0 -73
- package/plugins/lisa-typescript/skills/jira-evidence/scripts/post-evidence.sh +0 -163
- package/plugins/lisa-typescript/skills/jira-fix/SKILL.md +0 -16
- package/plugins/lisa-typescript/skills/jira-implement/SKILL.md +0 -18
- package/plugins/lisa-typescript/skills/jira-journey/SKILL.md +0 -125
- package/plugins/lisa-typescript/skills/jira-journey/scripts/generate-templates.py +0 -233
- package/plugins/lisa-typescript/skills/jira-journey/scripts/parse-plan.py +0 -368
- package/plugins/lisa-typescript/skills/jira-sync/SKILL.md +0 -63
- package/plugins/lisa-typescript/skills/jira-verify/SKILL.md +0 -48
- package/plugins/lisa-typescript/skills/jsdoc-best-practices/SKILL.md +0 -432
- package/plugins/lisa-typescript/skills/lisa-review-implementation/SKILL.md +0 -209
- package/plugins/lisa-typescript/skills/plan-add-test-coverage/SKILL.md +0 -44
- package/plugins/lisa-typescript/skills/plan-execute/SKILL.md +0 -89
- package/plugins/lisa-typescript/skills/plan-fix-linter-error/SKILL.md +0 -45
- package/plugins/lisa-typescript/skills/plan-local-code-review/SKILL.md +0 -88
- package/plugins/lisa-typescript/skills/plan-lower-code-complexity/SKILL.md +0 -44
- package/plugins/lisa-typescript/skills/plan-reduce-max-lines/SKILL.md +0 -45
- package/plugins/lisa-typescript/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
- package/plugins/lisa-typescript/skills/pull-request-review/SKILL.md +0 -68
- package/plugins/lisa-typescript/skills/security-zap-scan/SKILL.md +0 -33
- package/plugins/lisa-typescript/skills/sonarqube-check/SKILL.md +0 -11
- package/plugins/lisa-typescript/skills/sonarqube-fix/SKILL.md +0 -8
- package/plugins/lisa-typescript/skills/tasks-load/SKILL.md +0 -88
- package/plugins/lisa-typescript/skills/tasks-sync/SKILL.md +0 -108
- package/plugins/src/base/hooks/format-on-edit.sh +0 -76
- package/plugins/src/base/hooks/lint-on-edit.sh +0 -81
- package/plugins/src/base/hooks/sg-scan-on-edit.sh +0 -68
- package/plugins/src/base/rules/lisa.md +0 -37
- /package/plugins/{lisa-cdk → lisa}/agents/agent-architect.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/architecture-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/debug-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/git-history-analyzer.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/hooks-expert.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/implementer.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/learner.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/performance-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/product-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/quality-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/security-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/skill-evaluator.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/slash-command-architect.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/test-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/verification-specialist.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/agents/web-search-researcher.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/git/commit-and-submit-pr.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-and-verify.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-deploy-and-verify.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/git/commit.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/git/prune.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/git/submit-pr.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/add-journey.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/create.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/evidence.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/fix.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/implement.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/journey.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/sync.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/jira/verify.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/add-test-coverage.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/create.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/execute.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/fix-linter-error.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/local-code-review.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/lower-code-complexity.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines-per-function.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/pull-request/review.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/review/implementation.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/security/zap-scan.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/check.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/fix.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/tasks/load.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/commands/tasks/sync.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/debug-hook.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/enforce-plan-rules.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/install-pkgs.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/notify-ntfy.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/setup-jira-cli.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/sync-tasks.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/ticket-sync-reminder.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/track-plan-sessions.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/hooks/verify-completion.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/rules/README.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/rules/coding-philosophy.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/rules/verfication.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/agent-design-best-practices/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/git-commit/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/git-commit-and-submit-pr/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/git-prune/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/git-submit-pr/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-add-journey/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-create/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/scripts/post-evidence.sh +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-fix/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-implement/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/generate-templates.py +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/parse-plan.py +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-sync/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jira-verify/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/jsdoc-best-practices/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/lisa-review-implementation/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-add-test-coverage/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-execute/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-fix-linter-error/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-local-code-review/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-lower-code-complexity/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/pull-request-review/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/security-zap-scan/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-check/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-fix/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/tasks-load/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → lisa}/skills/tasks-sync/SKILL.md +0 -0
- /package/plugins/{lisa-cdk → src/typescript}/hooks/format-on-edit.sh +0 -0
- /package/plugins/{lisa-cdk → src/typescript}/hooks/lint-on-edit.sh +0 -0
- /package/plugins/{lisa-cdk → src/typescript}/hooks/sg-scan-on-edit.sh +0 -0
- /package/plugins/{lisa-cdk → src/typescript}/rules/lisa.md +0 -0
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: agent-design-best-practices
|
|
3
|
-
description: Best practices for designing Claude Code agent files (.claude/agents/*.md). This skill should be used when writing or reviewing agent markdown files to ensure proper design with focused domains, correct tool access, reusable definitions, and separation of capabilities from lifecycle. Combines Anthropic's official guidance with battle-tested patterns from agent team usage.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Agent Design Best Practices
|
|
7
|
-
|
|
8
|
-
## Overview
|
|
9
|
-
|
|
10
|
-
This skill defines best practices for designing Claude Code agent files (`.claude/agents/*.md`). Agent files define reusable roles that can be spawned as subagents or teammates. The core principle is that **agent files define capabilities, not lifecycle** -- the team lead's spawn prompt controls when and how the agent runs.
|
|
11
|
-
|
|
12
|
-
## Principles
|
|
13
|
-
|
|
14
|
-
### 1. Define Capabilities, Not Lifecycle
|
|
15
|
-
|
|
16
|
-
Agent files describe *what* an agent can do. The spawn prompt from the team lead controls *when* it runs and *what to focus on*.
|
|
17
|
-
|
|
18
|
-
```markdown
|
|
19
|
-
<!-- Wrong: Hardcodes workflow phase and interaction pattern -->
|
|
20
|
-
# Security Planner Agent
|
|
21
|
-
|
|
22
|
-
You are a security specialist in a plan-create Agent Team.
|
|
23
|
-
Given a Research Brief from the team lead, identify security
|
|
24
|
-
considerations for the planned changes.
|
|
25
|
-
|
|
26
|
-
## Output Format
|
|
27
|
-
|
|
28
|
-
Send your sub-plan to the team lead via `SendMessage` with this structure:
|
|
29
|
-
...
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
```markdown
|
|
33
|
-
<!-- Correct: Defines domain expertise, team lead controls usage -->
|
|
34
|
-
# Security Specialist Agent
|
|
35
|
-
|
|
36
|
-
You are a security specialist who identifies vulnerabilities,
|
|
37
|
-
evaluates threats, and recommends mitigations for code changes.
|
|
38
|
-
|
|
39
|
-
## Analysis Process
|
|
40
|
-
1. Read affected files
|
|
41
|
-
2. STRIDE analysis
|
|
42
|
-
3. Check input validation
|
|
43
|
-
...
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
The wrong version is coupled to one workflow ("plan-create Agent Team", "Given a Research Brief", "Send via SendMessage"). The correct version works in any context -- planning, review, ad-hoc analysis -- because the team lead's spawn prompt provides the specific instructions.
|
|
47
|
-
|
|
48
|
-
### 2. One Agent Per Domain, Not Per Phase
|
|
49
|
-
|
|
50
|
-
Prefer a single agent that covers a domain over multiple agents split by workflow phase. The team lead specializes the agent per phase via the spawn prompt.
|
|
51
|
-
|
|
52
|
-
| Wrong | Right |
|
|
53
|
-
|-------|-------|
|
|
54
|
-
| `security-planner` + `security-reviewer` | `security-specialist` |
|
|
55
|
-
| `test-strategist` + `test-coverage-agent` | `test-specialist` |
|
|
56
|
-
| `architecture-planner` + `architecture-reviewer` | `architecture-specialist` |
|
|
57
|
-
|
|
58
|
-
The same agent type can be spawned multiple times with different prompts for different phases. A `security-specialist` spawned during planning gets "evaluate this plan for security risks" while the same type spawned during review gets "review these code changes for vulnerabilities."
|
|
59
|
-
|
|
60
|
-
### 3. Design Focused Domains
|
|
61
|
-
|
|
62
|
-
Each agent should excel at one specific domain. The domain should be broad enough to avoid workflow coupling but narrow enough to provide real expertise.
|
|
63
|
-
|
|
64
|
-
```yaml
|
|
65
|
-
# Too narrow (coupled to one workflow step)
|
|
66
|
-
description: Performs STRIDE analysis on Research Briefs during plan-create Phase 2
|
|
67
|
-
|
|
68
|
-
# Too broad (no clear expertise)
|
|
69
|
-
description: General-purpose agent that can do anything
|
|
70
|
-
|
|
71
|
-
# Just right (focused domain, reusable across workflows)
|
|
72
|
-
description: Security specialist. Performs threat modeling (STRIDE), reviews code for OWASP Top 10 vulnerabilities, checks auth/validation/secrets handling.
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### 4. Write Detailed Descriptions
|
|
76
|
-
|
|
77
|
-
Claude uses the `description` field in YAML frontmatter to decide when to delegate tasks. Be specific about what the agent does and when it adds value.
|
|
78
|
-
|
|
79
|
-
```yaml
|
|
80
|
-
# Bad: Vague, Claude can't decide when to use it
|
|
81
|
-
description: Reviews code
|
|
82
|
-
|
|
83
|
-
# Good: Specific domain, clear trigger conditions
|
|
84
|
-
description: Security specialist. Performs threat modeling (STRIDE), reviews code for OWASP Top 10 vulnerabilities, checks auth/validation/secrets handling, and recommends mitigations.
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### 5. Limit Tool Access
|
|
88
|
-
|
|
89
|
-
Grant only the tools necessary for the agent's domain. This enforces focus and prevents agents from exceeding their intended scope.
|
|
90
|
-
|
|
91
|
-
| Agent Type | Appropriate Tools | Rationale |
|
|
92
|
-
|-----------|-------------------|-----------|
|
|
93
|
-
| Researcher / Reviewer | `Read, Grep, Glob, Bash` | Read-only analysis, no file modifications |
|
|
94
|
-
| Implementer | `Read, Write, Edit, Bash, Grep, Glob` | Needs to modify code |
|
|
95
|
-
| Planner | `Read, Grep, Glob` | Research only, no execution |
|
|
96
|
-
|
|
97
|
-
Read-only agents cannot implement code. Do not assign implementation tasks to agents without `Write` and `Edit` tools.
|
|
98
|
-
|
|
99
|
-
### 6. No Hardcoded Interaction Patterns
|
|
100
|
-
|
|
101
|
-
Do not prescribe how the agent communicates or what input format it expects. The team lead's spawn prompt handles interaction patterns.
|
|
102
|
-
|
|
103
|
-
```markdown
|
|
104
|
-
<!-- Wrong: Hardcodes communication protocol -->
|
|
105
|
-
## Input
|
|
106
|
-
You receive a **Research Brief** from the team lead containing...
|
|
107
|
-
|
|
108
|
-
## Output Format
|
|
109
|
-
Send your sub-plan to the team lead via `SendMessage` with this structure:
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
```markdown
|
|
113
|
-
<!-- Correct: Defines output structure without prescribing delivery mechanism -->
|
|
114
|
-
## Output Format
|
|
115
|
-
Structure your findings as:
|
|
116
|
-
|
|
117
|
-
### Threat Model (STRIDE)
|
|
118
|
-
| Threat | Applies? | Description | Mitigation |
|
|
119
|
-
...
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
The output format itself is fine to define -- it provides structure. But how the agent receives input and delivers output should be left to the team lead.
|
|
123
|
-
|
|
124
|
-
### 7. Context Window Isolation
|
|
125
|
-
|
|
126
|
-
Each teammate has its own context window. Teammates do not share context and cannot see what other teammates have done. Account for this in agent design:
|
|
127
|
-
|
|
128
|
-
- Do not assume the agent has seen previous analysis from other agents
|
|
129
|
-
- Include enough domain knowledge in the agent file for independent operation
|
|
130
|
-
- The team lead bridges context between agents via spawn prompts and messages
|
|
131
|
-
|
|
132
|
-
### 8. File Ownership in Teams
|
|
133
|
-
|
|
134
|
-
When agents work in teams, each teammate should own distinct files or directories. Two teammates editing the same file leads to conflicts and lost work.
|
|
135
|
-
|
|
136
|
-
Design agent domains so their file ownership naturally separates:
|
|
137
|
-
|
|
138
|
-
| Agent | Owns |
|
|
139
|
-
|-------|------|
|
|
140
|
-
| `implementer` | Source files (`src/`) |
|
|
141
|
-
| `test-specialist` | Test files (`tests/`) |
|
|
142
|
-
| `quality-specialist` | No files (read-only) |
|
|
143
|
-
|
|
144
|
-
## Agent File Structure
|
|
145
|
-
|
|
146
|
-
### Required Frontmatter
|
|
147
|
-
|
|
148
|
-
```yaml
|
|
149
|
-
---
|
|
150
|
-
name: agent-name # lowercase with hyphens
|
|
151
|
-
description: When and why to use this agent. Be specific.
|
|
152
|
-
tools: Read, Grep, Glob # comma-separated, minimal set
|
|
153
|
-
---
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### Optional Frontmatter
|
|
157
|
-
|
|
158
|
-
```yaml
|
|
159
|
-
model: sonnet # sonnet, opus, haiku, or inherit (default)
|
|
160
|
-
permissionMode: default # default, acceptEdits, plan, bypassPermissions, etc.
|
|
161
|
-
maxTurns: 50 # limit agentic turns
|
|
162
|
-
skills: # skills to preload
|
|
163
|
-
- skill-name
|
|
164
|
-
memory: user # persistent memory: user, project, or local
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Body Structure
|
|
168
|
-
|
|
169
|
-
The markdown body becomes the agent's system prompt. Structure it as:
|
|
170
|
-
|
|
171
|
-
1. **Role statement** -- one sentence describing what the agent is
|
|
172
|
-
2. **Analysis/workflow process** -- numbered steps for the agent's approach
|
|
173
|
-
3. **Output format** -- structure for findings (without prescribing delivery mechanism)
|
|
174
|
-
4. **Rules/constraints** -- guardrails for the agent's behavior
|
|
175
|
-
|
|
176
|
-
## Anti-Patterns
|
|
177
|
-
|
|
178
|
-
### Don't Create Phase-Specific Agents
|
|
179
|
-
|
|
180
|
-
```markdown
|
|
181
|
-
<!-- Wrong: Two agents for the same domain, split by phase -->
|
|
182
|
-
# Pre-Implementation Security Planner
|
|
183
|
-
...
|
|
184
|
-
# Post-Implementation Security Reviewer
|
|
185
|
-
...
|
|
186
|
-
|
|
187
|
-
<!-- Correct: One agent, team lead controls timing -->
|
|
188
|
-
# Security Specialist
|
|
189
|
-
...
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### Don't Hardcode Workflow Dependencies
|
|
193
|
-
|
|
194
|
-
```markdown
|
|
195
|
-
<!-- Wrong: Agent assumes specific workflow context -->
|
|
196
|
-
You are part of the plan-create Phase 2 team.
|
|
197
|
-
Wait for the Research Brief from Phase 1.
|
|
198
|
-
After your analysis, the Consistency Checker will validate your output.
|
|
199
|
-
|
|
200
|
-
<!-- Correct: Agent is self-contained -->
|
|
201
|
-
You are a security specialist who identifies vulnerabilities
|
|
202
|
-
and recommends mitigations for code changes.
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### Don't Over-Specify the Model
|
|
206
|
-
|
|
207
|
-
Only set `model` when there's a clear reason. Most agents work well with `inherit` (the default), which uses the same model as the parent session. Use `haiku` for fast, simple tasks (exploration, search). Use `sonnet` or `opus` only when the domain requires stronger reasoning.
|
|
208
|
-
|
|
209
|
-
## Verification Checklist
|
|
210
|
-
|
|
211
|
-
Before committing an agent file, verify:
|
|
212
|
-
|
|
213
|
-
1. **Description is specific** -- Claude can determine when to delegate from the description alone
|
|
214
|
-
2. **Tools are minimal** -- only the tools the agent actually needs
|
|
215
|
-
3. **No workflow coupling** -- no references to specific team structures, phases, or input formats
|
|
216
|
-
4. **No hardcoded communication** -- no "send via SendMessage" or "given a Research Brief"
|
|
217
|
-
5. **Domain is reusable** -- the agent works in planning, review, and ad-hoc contexts
|
|
218
|
-
6. **Role statement is clear** -- first line of body explains what the agent is
|
|
219
|
-
7. **Output format is defined** -- structured output without prescribing delivery
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-commit
|
|
3
|
-
description: This skill should be used when creating conventional commits for current changes. It groups related changes into logical commits, ensures all files are committed, and verifies the working directory is clean afterward.
|
|
4
|
-
allowed-tools: ["Bash"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Git Commit Workflow
|
|
8
|
-
|
|
9
|
-
Create conventional commits for current changes. Optional hint: $ARGUMENTS
|
|
10
|
-
|
|
11
|
-
## Workflow
|
|
12
|
-
|
|
13
|
-
### See what has changed
|
|
14
|
-
|
|
15
|
-
!git status
|
|
16
|
-
!git diff --stat
|
|
17
|
-
|
|
18
|
-
### Apply these requirements
|
|
19
|
-
|
|
20
|
-
1. **Branch Check**: If on `dev`, `staging`, or `main`, create a feature branch named after the changes
|
|
21
|
-
2. **Commit Strategy**: Group related changes into logical conventional commits (feat, fix, chore, docs, etc.)
|
|
22
|
-
3. **Commit ALL Files**: Every file must be assigned to a commit group - no file gets left out or unstaged
|
|
23
|
-
4. **Commit Creation**: Stage and commit each group with clear messages
|
|
24
|
-
5. **Verification**: Run `git status` to confirm working directory is clean - must show "nothing to commit"
|
|
25
|
-
|
|
26
|
-
### Use conventional commit format
|
|
27
|
-
|
|
28
|
-
- `feat:` for new features
|
|
29
|
-
- `fix:` for bug fixes
|
|
30
|
-
- `docs:` for documentation
|
|
31
|
-
- `chore:` for maintenance
|
|
32
|
-
- `style:` for formatting
|
|
33
|
-
- `refactor:` for code restructuring
|
|
34
|
-
- `test:` for test additions
|
|
35
|
-
|
|
36
|
-
### Never
|
|
37
|
-
|
|
38
|
-
- use `--no-verify` flag
|
|
39
|
-
- attempt to bypass tests or quality checks
|
|
40
|
-
- skip tests or quality checks
|
|
41
|
-
- stash changes - ALL changes must be committed
|
|
42
|
-
- skip or exclude any files from the commit - even if they're unrelated
|
|
43
|
-
- leave uncommitted changes in the working directory
|
|
44
|
-
- ask the user which files to commit - commit everything
|
|
45
|
-
|
|
46
|
-
## Execute
|
|
47
|
-
|
|
48
|
-
Execute the workflow now.
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-commit-and-submit-pr
|
|
3
|
-
description: This skill should be used when creating conventional commits for current changes and then submitting the current branch as a pull request for code review. It combines the git:commit and git:submit-pr skills into a single workflow.
|
|
4
|
-
allowed-tools: ["Bash"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
1. Run /git-commit $ARGUMENTS
|
|
8
|
-
2. Run /git-submit-pr $ARGUMENTS
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-commit-submit-pr-and-verify
|
|
3
|
-
description: This skill should be used when creating conventional commits for current changes and then submitting the current branch as a pull request for code review. And then verifying the pull request was approved.
|
|
4
|
-
allowed-tools: ["Bash"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Run the /git-commit-and-submit-pr with $ARGUMENTS and set the PR to auto-merge. Fix any pre-commit or pre-push issues and then follow the pr, make sure all checks pass and comments are resolved or addressed. Fix anything that is broken and repeat.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-commit-submit-pr-deploy-and-verify
|
|
3
|
-
description: This skill should be used when creating conventional commits for current changes and then submitting the current branch as a pull request for code review. And then verifying the pull request was approved. As well as making sure the resutling deploy succeeds.
|
|
4
|
-
allowed-tools: ["Bash"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Run the /git-commit-submit-pr-and-verify with $ARGUMENTS. Once the merge is complete, follow the resulting deploy and fix anything that breaks with the deploy and then follow this process again with a new PR until the deploy succeeds.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-prune
|
|
3
|
-
description: This skill should be used when pruning local branches that have been deleted on the remote. It fetches remote changes, identifies stale local branches, and safely deletes them.
|
|
4
|
-
allowed-tools: ["Bash"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Git Prune Local Branches
|
|
8
|
-
|
|
9
|
-
Remove local branches whose upstream tracking branches have been deleted on remote.
|
|
10
|
-
|
|
11
|
-
## Workflow
|
|
12
|
-
|
|
13
|
-
### Fetch and prune remote-tracking references
|
|
14
|
-
|
|
15
|
-
!git fetch --prune
|
|
16
|
-
|
|
17
|
-
### Find and delete stale local branches
|
|
18
|
-
|
|
19
|
-
!git branch -vv | grep ': gone]' | awk '{print $1}'
|
|
20
|
-
|
|
21
|
-
### Apply these requirements
|
|
22
|
-
|
|
23
|
-
1. **Preview**: Show which branches will be deleted before deleting
|
|
24
|
-
2. **Safe Delete**: Use `-d` (safe delete) which refuses to delete unmerged branches
|
|
25
|
-
3. **Report**: Show summary of deleted branches
|
|
26
|
-
|
|
27
|
-
### Never
|
|
28
|
-
|
|
29
|
-
- Force delete (`-D`) without user confirmation
|
|
30
|
-
- Delete the current branch
|
|
31
|
-
- Delete protected branches (dev, staging, main)
|
|
32
|
-
|
|
33
|
-
## Execute
|
|
34
|
-
|
|
35
|
-
Execute the workflow now.
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-submit-pr
|
|
3
|
-
description: This skill should be used when pushing changes and creating or updating a pull request. It verifies the branch state, pushes to remote, creates or updates a PR with a comprehensive description, and enables auto-merge.
|
|
4
|
-
allowed-tools: ["Bash", "mcp__github__create_pull_request", "mcp__github__get_pull_request", "mcp__github__update_pull_request"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Submit Pull Request Workflow
|
|
8
|
-
|
|
9
|
-
Push current branch and create or update a pull request. Optional hint: $ARGUMENTS
|
|
10
|
-
|
|
11
|
-
## Workflow
|
|
12
|
-
|
|
13
|
-
### Check current state
|
|
14
|
-
|
|
15
|
-
!git status
|
|
16
|
-
!git log --oneline -10
|
|
17
|
-
|
|
18
|
-
### Apply these requirements
|
|
19
|
-
|
|
20
|
-
1. **Branch Check**: Verify not on `dev`, `staging`, or `main` (cannot create PR from protected branches)
|
|
21
|
-
2. **Commit Check**: Ensure all changes are committed before pushing
|
|
22
|
-
3. **Push**: Push current branch to remote with `-u` flag and the following environment variable - GIT_SSH_COMMAND="ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=5"
|
|
23
|
-
4. **PR Management**:
|
|
24
|
-
- Check for existing PR on this branch
|
|
25
|
-
- If exists: Update description with latest changes
|
|
26
|
-
- If not: Create PR with comprehensive description (not a draft)
|
|
27
|
-
5. **Auto-merge**: Enable auto-merge on the PR using `gh pr merge --auto --merge`
|
|
28
|
-
|
|
29
|
-
### PR Description Format
|
|
30
|
-
|
|
31
|
-
Include in the PR description:
|
|
32
|
-
|
|
33
|
-
- **Summary**: Brief overview of changes (1-3 bullet points)
|
|
34
|
-
- **Test plan**: How to verify the changes work correctly
|
|
35
|
-
|
|
36
|
-
### Never
|
|
37
|
-
|
|
38
|
-
- use `--force` push without explicit user request
|
|
39
|
-
- create PR from protected branches (dev, staging, main)
|
|
40
|
-
- skip pushing before PR creation
|
|
41
|
-
|
|
42
|
-
## Execute
|
|
43
|
-
|
|
44
|
-
Execute the workflow now.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: jira-fix
|
|
3
|
-
description: This skill should be used when fixing a bug ticket in JIRA
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
1. Use the JIRA/Atlassian MCP or CLI to fully read this issue, including comments and attachments: $ARGUMENTS
|
|
7
|
-
2. Extract sign-in information if available from the ticket (e.g., test credentials, OTP codes)
|
|
8
|
-
3. Use the project's verification method to attempt to reproduce the bug:
|
|
9
|
-
- For UI projects: Use Playwright MCP browser tools to record a replication
|
|
10
|
-
- For API projects: Use curl or test commands to reproduce the error
|
|
11
|
-
- For library projects: Write a minimal reproduction test
|
|
12
|
-
4. If you cannot reproduce the issue, upload the evidence to the JIRA ticket explaining that you can't replicate it and skip the remaining steps
|
|
13
|
-
5. If there have already been attempts to fix this bug, understand the previous attempts by looking for pull requests and git commits related to it
|
|
14
|
-
6. Fix the bug
|
|
15
|
-
7. Verify the fix using the same verification method used in step 3
|
|
16
|
-
8. Upload the evidence to the JIRA ticket and explain the fix
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: jira-implement
|
|
3
|
-
description: This skill should be used when implementing the requirements in a JIRA ticket.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Use either the Atlassian MCP or CLI to examine the contents of the JIRA ticket: $ARGUMENTS
|
|
7
|
-
|
|
8
|
-
If neither is available, stop and report that you cannot access the ticket.
|
|
9
|
-
|
|
10
|
-
Read all the details in the ticket, including any URLs and attachments.
|
|
11
|
-
|
|
12
|
-
Make a plan to fulfill the requirements of the ticket.
|
|
13
|
-
|
|
14
|
-
Important: If this involves UI changes, use Playwright MCP browser tools to access the app and get a better understanding of what needs to be done. Create a verification task using browser tools to confirm the implementation.
|
|
15
|
-
|
|
16
|
-
Important: If this involves API or backend changes, use curl or test commands to understand current behavior. Create a verification task to confirm the implementation.
|
|
17
|
-
|
|
18
|
-
If you don't know how to access the app or service, clarify when making the plan.
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Generate evidence comment templates from captured text evidence.
|
|
3
|
-
|
|
4
|
-
Scans an evidence directory for text/JSON evidence files, reads the journey JSON,
|
|
5
|
-
and produces comment.txt (JIRA wiki markup) and comment.md (GitHub markdown).
|
|
6
|
-
|
|
7
|
-
Usage:
|
|
8
|
-
python3 generate-templates.py <TICKET_ID> <PR_NUMBER> <BRANCH_NAME> <EVIDENCE_DIR> [JOURNEY_JSON]
|
|
9
|
-
|
|
10
|
-
Example:
|
|
11
|
-
python3 generate-templates.py PROJ-123 42 fix/PROJ-123-api ./evidence journey.json
|
|
12
|
-
|
|
13
|
-
If JOURNEY_JSON is not provided, reads from stdin.
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
import json
|
|
17
|
-
import os
|
|
18
|
-
import re
|
|
19
|
-
import subprocess
|
|
20
|
-
import sys
|
|
21
|
-
from pathlib import Path
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def get_jira_server():
|
|
25
|
-
"""Read JIRA server URL from jira-cli config."""
|
|
26
|
-
config_path = Path.home() / ".config" / ".jira" / ".config.yml"
|
|
27
|
-
if not config_path.exists():
|
|
28
|
-
return ""
|
|
29
|
-
with open(config_path) as f:
|
|
30
|
-
for line in f:
|
|
31
|
-
if line.startswith("server:"):
|
|
32
|
-
return line.split(":", 1)[1].strip()
|
|
33
|
-
return ""
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def get_github_repo():
|
|
37
|
-
"""Detect GitHub repo from gh CLI."""
|
|
38
|
-
try:
|
|
39
|
-
result = subprocess.run(
|
|
40
|
-
["gh", "repo", "view", "--json", "nameWithOwner", "--jq", ".nameWithOwner"],
|
|
41
|
-
capture_output=True, text=True, timeout=10,
|
|
42
|
-
)
|
|
43
|
-
return result.stdout.strip()
|
|
44
|
-
except (subprocess.SubprocessError, FileNotFoundError):
|
|
45
|
-
return ""
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def collect_evidence(evidence_dir):
|
|
49
|
-
"""Collect evidence files (text, JSON, and images) sorted by name."""
|
|
50
|
-
evidence_path = Path(evidence_dir)
|
|
51
|
-
files = []
|
|
52
|
-
for pattern in ("[0-9][0-9]-*.txt", "[0-9][0-9]-*.json", "[0-9][0-9]-*.png"):
|
|
53
|
-
files.extend(evidence_path.glob(pattern))
|
|
54
|
-
# Exclude comment.txt
|
|
55
|
-
files = [f for f in files if f.name != "comment.txt"]
|
|
56
|
-
return sorted(files, key=lambda p: p.name)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def detect_language(filename, content):
|
|
60
|
-
"""Detect code block language from filename extension and content."""
|
|
61
|
-
if filename.endswith(".json"):
|
|
62
|
-
return "json"
|
|
63
|
-
if "HTTP/" in content or "curl" in content.lower():
|
|
64
|
-
return "http"
|
|
65
|
-
if "CREATE TABLE" in content or "ALTER TABLE" in content or "\\d " in content:
|
|
66
|
-
return "sql"
|
|
67
|
-
return "text"
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def generate_jira_wiki(ticket_id, pr_number, branch, evidence_files, journey, gh_repo):
|
|
71
|
-
"""Generate JIRA wiki markup comment with code block evidence."""
|
|
72
|
-
lines = []
|
|
73
|
-
lines.append(f"h2. Evidence — PR #{pr_number}")
|
|
74
|
-
lines.append("")
|
|
75
|
-
lines.append(f"*Branch:* {{{{{branch}}}}}")
|
|
76
|
-
lines.append(f"*PR:* [PR #{pr_number}|https://github.com/{gh_repo}/pull/{pr_number}]")
|
|
77
|
-
lines.append("")
|
|
78
|
-
|
|
79
|
-
# Verification Results from assertions
|
|
80
|
-
if journey.get("assertions"):
|
|
81
|
-
lines.append("h3. Verification Results")
|
|
82
|
-
lines.append("")
|
|
83
|
-
for assertion in journey["assertions"]:
|
|
84
|
-
lines.append(f"* {assertion}")
|
|
85
|
-
lines.append("")
|
|
86
|
-
|
|
87
|
-
# Evidence
|
|
88
|
-
lines.append("h3. Evidence")
|
|
89
|
-
lines.append("")
|
|
90
|
-
|
|
91
|
-
for evidence_path in evidence_files:
|
|
92
|
-
filename = evidence_path.name
|
|
93
|
-
stem = evidence_path.stem
|
|
94
|
-
# Extract readable label: remove NN- prefix
|
|
95
|
-
label_parts = stem.split("-")[1:]
|
|
96
|
-
label = " ".join(label_parts).title() if label_parts else stem
|
|
97
|
-
|
|
98
|
-
if filename.endswith(".png"):
|
|
99
|
-
display_width = 700
|
|
100
|
-
lines.append(f"*{label}:*")
|
|
101
|
-
lines.append(f"!{filename}|width={display_width}!")
|
|
102
|
-
lines.append("")
|
|
103
|
-
else:
|
|
104
|
-
content = evidence_path.read_text().strip()
|
|
105
|
-
lang = detect_language(filename, content)
|
|
106
|
-
lines.append(f"*{label}:*")
|
|
107
|
-
lines.append(f"{{code:{lang}}}")
|
|
108
|
-
lines.append(content)
|
|
109
|
-
lines.append("{code}")
|
|
110
|
-
lines.append("")
|
|
111
|
-
|
|
112
|
-
# Verification Journey steps
|
|
113
|
-
if journey.get("steps"):
|
|
114
|
-
lines.append("h3. Verification Journey")
|
|
115
|
-
lines.append("")
|
|
116
|
-
for step in journey["steps"]:
|
|
117
|
-
text = step["text"]
|
|
118
|
-
clean_text = re.sub(r'\s*\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]', '', text).strip()
|
|
119
|
-
lines.append(f"# {clean_text}")
|
|
120
|
-
lines.append("")
|
|
121
|
-
|
|
122
|
-
return "\n".join(lines)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
def generate_github_md(ticket_id, pr_number, branch, evidence_files, journey, gh_repo, jira_server):
|
|
126
|
-
"""Generate GitHub markdown comment with code block evidence."""
|
|
127
|
-
release_base = f"https://github.com/{gh_repo}/releases/download/pr-assets"
|
|
128
|
-
|
|
129
|
-
lines = []
|
|
130
|
-
lines.append(f"## Evidence — PR #{pr_number}")
|
|
131
|
-
lines.append("")
|
|
132
|
-
lines.append(f"**Branch:** `{branch}`")
|
|
133
|
-
if jira_server:
|
|
134
|
-
lines.append(f"**Ticket:** [{ticket_id}]({jira_server}/browse/{ticket_id})")
|
|
135
|
-
else:
|
|
136
|
-
lines.append(f"**Ticket:** {ticket_id}")
|
|
137
|
-
lines.append("")
|
|
138
|
-
|
|
139
|
-
# Verification Results
|
|
140
|
-
if journey.get("assertions"):
|
|
141
|
-
lines.append("### Verification Results")
|
|
142
|
-
lines.append("")
|
|
143
|
-
for assertion in journey["assertions"]:
|
|
144
|
-
lines.append(f"- {assertion}")
|
|
145
|
-
lines.append("")
|
|
146
|
-
|
|
147
|
-
# Evidence
|
|
148
|
-
lines.append("### Evidence")
|
|
149
|
-
lines.append("")
|
|
150
|
-
|
|
151
|
-
for evidence_path in evidence_files:
|
|
152
|
-
filename = evidence_path.name
|
|
153
|
-
stem = evidence_path.stem
|
|
154
|
-
label_parts = stem.split("-")[1:]
|
|
155
|
-
label = " ".join(label_parts).title() if label_parts else stem
|
|
156
|
-
|
|
157
|
-
if filename.endswith(".png"):
|
|
158
|
-
lines.append(f"**{label}:**")
|
|
159
|
-
lines.append("")
|
|
160
|
-
lines.append(f"")
|
|
161
|
-
lines.append("")
|
|
162
|
-
else:
|
|
163
|
-
content = evidence_path.read_text().strip()
|
|
164
|
-
lang = detect_language(filename, content)
|
|
165
|
-
lines.append(f"**{label}:**")
|
|
166
|
-
lines.append("")
|
|
167
|
-
lines.append(f"```{lang}")
|
|
168
|
-
lines.append(content)
|
|
169
|
-
lines.append("```")
|
|
170
|
-
lines.append("")
|
|
171
|
-
|
|
172
|
-
# Verification Journey
|
|
173
|
-
if journey.get("steps"):
|
|
174
|
-
lines.append("### Verification Journey")
|
|
175
|
-
lines.append("")
|
|
176
|
-
for step in journey["steps"]:
|
|
177
|
-
text = step["text"]
|
|
178
|
-
clean_text = re.sub(r'\s*\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]', '', text).strip()
|
|
179
|
-
lines.append(f"{step['number']}. {clean_text}")
|
|
180
|
-
lines.append("")
|
|
181
|
-
|
|
182
|
-
return "\n".join(lines)
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
def main():
|
|
186
|
-
if len(sys.argv) < 5:
|
|
187
|
-
print(
|
|
188
|
-
"Usage: generate-templates.py <TICKET_ID> <PR_NUMBER> <BRANCH_NAME> <EVIDENCE_DIR> [JOURNEY_JSON]",
|
|
189
|
-
file=sys.stderr,
|
|
190
|
-
)
|
|
191
|
-
sys.exit(1)
|
|
192
|
-
|
|
193
|
-
ticket_id = sys.argv[1]
|
|
194
|
-
pr_number = sys.argv[2]
|
|
195
|
-
branch = sys.argv[3]
|
|
196
|
-
evidence_dir = sys.argv[4]
|
|
197
|
-
journey_file = sys.argv[5] if len(sys.argv) > 5 else None
|
|
198
|
-
|
|
199
|
-
# Read journey JSON
|
|
200
|
-
if journey_file:
|
|
201
|
-
with open(journey_file) as f:
|
|
202
|
-
journey = json.load(f)
|
|
203
|
-
else:
|
|
204
|
-
journey = json.load(sys.stdin)
|
|
205
|
-
|
|
206
|
-
gh_repo = get_github_repo()
|
|
207
|
-
if not gh_repo:
|
|
208
|
-
print("ERROR: Could not detect GitHub repo — ensure gh CLI is authenticated", file=sys.stderr)
|
|
209
|
-
sys.exit(1)
|
|
210
|
-
|
|
211
|
-
jira_server = get_jira_server()
|
|
212
|
-
|
|
213
|
-
evidence_files = collect_evidence(evidence_dir)
|
|
214
|
-
if not evidence_files:
|
|
215
|
-
print(f"ERROR: No evidence files found in {evidence_dir}", file=sys.stderr)
|
|
216
|
-
sys.exit(1)
|
|
217
|
-
|
|
218
|
-
# Generate templates
|
|
219
|
-
jira_wiki = generate_jira_wiki(ticket_id, pr_number, branch, evidence_files, journey, gh_repo)
|
|
220
|
-
github_md = generate_github_md(ticket_id, pr_number, branch, evidence_files, journey, gh_repo, jira_server)
|
|
221
|
-
|
|
222
|
-
# Write templates
|
|
223
|
-
evidence_path = Path(evidence_dir)
|
|
224
|
-
(evidence_path / "comment.txt").write_text(jira_wiki)
|
|
225
|
-
(evidence_path / "comment.md").write_text(github_md)
|
|
226
|
-
|
|
227
|
-
print(f"Generated {evidence_path / 'comment.txt'} ({len(jira_wiki)} bytes)")
|
|
228
|
-
print(f"Generated {evidence_path / 'comment.md'} ({len(github_md)} bytes)")
|
|
229
|
-
print(f"Evidence files: {len(evidence_files)}")
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
if __name__ == "__main__":
|
|
233
|
-
main()
|