@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,183 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# This file is managed by Lisa.
|
|
3
|
-
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
4
|
-
# =============================================================================
|
|
5
|
-
# ntfy.sh Notification Hook for Claude Code
|
|
6
|
-
# =============================================================================
|
|
7
|
-
# Sends desktop and mobile notifications via ntfy.sh when Claude needs
|
|
8
|
-
# attention or finishes a task.
|
|
9
|
-
#
|
|
10
|
-
# Setup:
|
|
11
|
-
# 1. Install ntfy app on mobile (iOS App Store / Android Play Store)
|
|
12
|
-
# 2. Subscribe to your unique topic in the app
|
|
13
|
-
# 3. Set NTFY_TOPIC environment variable (e.g., in ~/.bashrc or ~/.zshrc):
|
|
14
|
-
# export NTFY_TOPIC="my-claude-alerts-xyz123"
|
|
15
|
-
#
|
|
16
|
-
# @see https://ntfy.sh
|
|
17
|
-
# =============================================================================
|
|
18
|
-
|
|
19
|
-
# Read JSON input from stdin
|
|
20
|
-
INPUT=$(cat)
|
|
21
|
-
|
|
22
|
-
# Extract hook event name
|
|
23
|
-
HOOK_EVENT=$(echo "$INPUT" | grep -o '"hook_event_name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
24
|
-
|
|
25
|
-
# Extract notification type (for Notification hooks)
|
|
26
|
-
NOTIFICATION_TYPE=$(echo "$INPUT" | grep -o '"notification_type"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
27
|
-
|
|
28
|
-
# Extract message if available
|
|
29
|
-
MESSAGE=$(echo "$INPUT" | grep -o '"message"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
30
|
-
|
|
31
|
-
# Extract session ID (first 8 chars for brevity)
|
|
32
|
-
FULL_SESSION_ID=$(echo "$INPUT" | grep -o '"session_id"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
33
|
-
SESSION_ID="${FULL_SESSION_ID:0:8}"
|
|
34
|
-
|
|
35
|
-
# Extract transcript path for task summary
|
|
36
|
-
TRANSCRIPT_PATH=$(echo "$INPUT" | grep -o '"transcript_path"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
37
|
-
|
|
38
|
-
# Determine source (Web vs Local)
|
|
39
|
-
if [ "$CLAUDE_CODE_REMOTE" = "true" ]; then
|
|
40
|
-
SOURCE="Web"
|
|
41
|
-
else
|
|
42
|
-
SOURCE="Local"
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# Get project name from current directory
|
|
46
|
-
PROJECT_NAME=$(basename "$CLAUDE_PROJECT_DIR" 2>/dev/null || basename "$(pwd)")
|
|
47
|
-
|
|
48
|
-
# Load NTFY_TOPIC from local config if not already set
|
|
49
|
-
if [ -z "$NTFY_TOPIC" ]; then
|
|
50
|
-
# Check for project-local config (gitignored)
|
|
51
|
-
if [ -f "$CLAUDE_PROJECT_DIR/.claude/env.local" ]; then
|
|
52
|
-
# shellcheck source=/dev/null
|
|
53
|
-
source "$CLAUDE_PROJECT_DIR/.claude/env.local"
|
|
54
|
-
fi
|
|
55
|
-
# Check for user-global config
|
|
56
|
-
if [ -z "$NTFY_TOPIC" ] && [ -f "$HOME/.claude/env.local" ]; then
|
|
57
|
-
# shellcheck source=/dev/null
|
|
58
|
-
source "$HOME/.claude/env.local"
|
|
59
|
-
fi
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# Exit silently if still not configured
|
|
63
|
-
if [ -z "$NTFY_TOPIC" ]; then
|
|
64
|
-
exit 0
|
|
65
|
-
fi
|
|
66
|
-
|
|
67
|
-
# Extract task summary from transcript (last assistant message, truncated)
|
|
68
|
-
TASK_SUMMARY=""
|
|
69
|
-
if [ -n "$TRANSCRIPT_PATH" ] && [ -f "$TRANSCRIPT_PATH" ]; then
|
|
70
|
-
# Get the last assistant message from the JSONL transcript
|
|
71
|
-
# The transcript contains lines with "type":"assistant" and "message" content
|
|
72
|
-
# Use awk for cross-platform compatibility (tac is not available on macOS)
|
|
73
|
-
LAST_ASSISTANT=$(awk '/"type"[[:space:]]*:[[:space:]]*"assistant"/{line=$0} END{if(line) print line}' "$TRANSCRIPT_PATH" 2>/dev/null)
|
|
74
|
-
if [ -n "$LAST_ASSISTANT" ]; then
|
|
75
|
-
# Extract the message content - look for text content in the message
|
|
76
|
-
# Format: {"message":{"content":[{"type":"text","text":"..."}]}}
|
|
77
|
-
# Use jq for robust JSON parsing when available, fallback to grep/sed
|
|
78
|
-
if command -v jq >/dev/null 2>&1; then
|
|
79
|
-
RAW_SUMMARY=$(echo "$LAST_ASSISTANT" | jq -r '.message.content[] | select(.type == "text") | .text' 2>/dev/null | head -1)
|
|
80
|
-
else
|
|
81
|
-
# Fallback: simple regex extraction (may fail on escaped quotes)
|
|
82
|
-
RAW_SUMMARY=$(echo "$LAST_ASSISTANT" | grep -o '"text"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*: *"//' | sed 's/"$//')
|
|
83
|
-
fi
|
|
84
|
-
if [ -n "$RAW_SUMMARY" ]; then
|
|
85
|
-
# Truncate to 100 chars and clean up newlines
|
|
86
|
-
TASK_SUMMARY=$(echo "$RAW_SUMMARY" | tr '\n' ' ' | cut -c1-100)
|
|
87
|
-
# Add ellipsis if truncated
|
|
88
|
-
if [ ${#RAW_SUMMARY} -gt 100 ]; then
|
|
89
|
-
TASK_SUMMARY="${TASK_SUMMARY}..."
|
|
90
|
-
fi
|
|
91
|
-
fi
|
|
92
|
-
fi
|
|
93
|
-
fi
|
|
94
|
-
|
|
95
|
-
# Build session info string (shown in body)
|
|
96
|
-
SESSION_INFO=""
|
|
97
|
-
if [ -n "$SESSION_ID" ]; then
|
|
98
|
-
SESSION_INFO="Session: $SESSION_ID"
|
|
99
|
-
fi
|
|
100
|
-
|
|
101
|
-
# Determine notification title and body based on hook type
|
|
102
|
-
case "$HOOK_EVENT" in
|
|
103
|
-
"Notification")
|
|
104
|
-
case "$NOTIFICATION_TYPE" in
|
|
105
|
-
"permission_prompt")
|
|
106
|
-
TITLE="Claude [$SOURCE] - Permission Required"
|
|
107
|
-
BODY="${MESSAGE:-Claude needs your permission to continue}"
|
|
108
|
-
if [ -n "$SESSION_INFO" ]; then
|
|
109
|
-
BODY="$SESSION_INFO
|
|
110
|
-
$BODY"
|
|
111
|
-
fi
|
|
112
|
-
PRIORITY="high"
|
|
113
|
-
TAGS="warning"
|
|
114
|
-
;;
|
|
115
|
-
"idle_prompt")
|
|
116
|
-
TITLE="Claude [$SOURCE] - Waiting"
|
|
117
|
-
BODY="${MESSAGE:-Claude is waiting for your input}"
|
|
118
|
-
if [ -n "$SESSION_INFO" ]; then
|
|
119
|
-
BODY="$SESSION_INFO
|
|
120
|
-
$BODY"
|
|
121
|
-
fi
|
|
122
|
-
PRIORITY="default"
|
|
123
|
-
TAGS="hourglass"
|
|
124
|
-
;;
|
|
125
|
-
*)
|
|
126
|
-
TITLE="Claude [$SOURCE] - Attention"
|
|
127
|
-
BODY="${MESSAGE:-Claude needs your attention}"
|
|
128
|
-
if [ -n "$SESSION_INFO" ]; then
|
|
129
|
-
BODY="$SESSION_INFO
|
|
130
|
-
$BODY"
|
|
131
|
-
fi
|
|
132
|
-
PRIORITY="default"
|
|
133
|
-
TAGS="bell"
|
|
134
|
-
;;
|
|
135
|
-
esac
|
|
136
|
-
;;
|
|
137
|
-
"Stop")
|
|
138
|
-
TITLE="Claude [$SOURCE] - Finished"
|
|
139
|
-
BODY="$PROJECT_NAME"
|
|
140
|
-
if [ -n "$SESSION_INFO" ]; then
|
|
141
|
-
BODY="$SESSION_INFO | $BODY"
|
|
142
|
-
fi
|
|
143
|
-
if [ -n "$TASK_SUMMARY" ]; then
|
|
144
|
-
BODY="$BODY
|
|
145
|
-
$TASK_SUMMARY"
|
|
146
|
-
fi
|
|
147
|
-
PRIORITY="default"
|
|
148
|
-
TAGS="white_check_mark"
|
|
149
|
-
;;
|
|
150
|
-
"SubagentStop")
|
|
151
|
-
TITLE="Claude [$SOURCE] - Subagent Done"
|
|
152
|
-
BODY="$PROJECT_NAME"
|
|
153
|
-
if [ -n "$SESSION_INFO" ]; then
|
|
154
|
-
BODY="$SESSION_INFO | $BODY"
|
|
155
|
-
fi
|
|
156
|
-
if [ -n "$TASK_SUMMARY" ]; then
|
|
157
|
-
BODY="$BODY
|
|
158
|
-
$TASK_SUMMARY"
|
|
159
|
-
fi
|
|
160
|
-
PRIORITY="low"
|
|
161
|
-
TAGS="checkered_flag"
|
|
162
|
-
;;
|
|
163
|
-
*)
|
|
164
|
-
TITLE="Claude [$SOURCE]"
|
|
165
|
-
BODY="${MESSAGE:-Event: $HOOK_EVENT}"
|
|
166
|
-
if [ -n "$SESSION_INFO" ]; then
|
|
167
|
-
BODY="$SESSION_INFO
|
|
168
|
-
$BODY"
|
|
169
|
-
fi
|
|
170
|
-
PRIORITY="default"
|
|
171
|
-
TAGS="robot"
|
|
172
|
-
;;
|
|
173
|
-
esac
|
|
174
|
-
|
|
175
|
-
# Send notification via ntfy.sh
|
|
176
|
-
curl -s \
|
|
177
|
-
-H "Title: $TITLE" \
|
|
178
|
-
-H "Priority: $PRIORITY" \
|
|
179
|
-
-H "Tags: $TAGS" \
|
|
180
|
-
-d "$BODY" \
|
|
181
|
-
"https://ntfy.sh/$NTFY_TOPIC" > /dev/null 2>&1
|
|
182
|
-
|
|
183
|
-
exit 0
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
##
|
|
3
|
-
# Writes the JIRA CLI config file from environment variables.
|
|
4
|
-
# Runs on SessionStart so the config is available for every session.
|
|
5
|
-
#
|
|
6
|
-
# Required env vars (must be created in your Claude Code Web environment):
|
|
7
|
-
# JIRA_INSTALLATION - cloud or local
|
|
8
|
-
# JIRA_SERVER - Atlassian instance URL
|
|
9
|
-
# JIRA_LOGIN - login email
|
|
10
|
-
# JIRA_PROJECT - default project key
|
|
11
|
-
# JIRA_API_TOKEN - already expected by jira-cli natively
|
|
12
|
-
#
|
|
13
|
-
# Optional env vars:
|
|
14
|
-
# JIRA_BOARD - default board name
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
set -euo pipefail
|
|
18
|
-
|
|
19
|
-
# Fix jira-cli installation if install-pkgs.sh failed to extract correctly.
|
|
20
|
-
# The tarball nests the binary at jira_VERSION_linux_x86_64/bin/jira,
|
|
21
|
-
# but install-pkgs.sh expects a top-level "jira" file.
|
|
22
|
-
if ! command -v jira &>/dev/null; then
|
|
23
|
-
JIRA_CLI_VERSION="1.7.0"
|
|
24
|
-
TMPDIR=$(mktemp -d)
|
|
25
|
-
curl -sSfL "https://github.com/ankitpokhrel/jira-cli/releases/download/v${JIRA_CLI_VERSION}/jira_${JIRA_CLI_VERSION}_linux_x86_64.tar.gz" \
|
|
26
|
-
| tar -xz -C "${TMPDIR}"
|
|
27
|
-
cp "${TMPDIR}/jira_${JIRA_CLI_VERSION}_linux_x86_64/bin/jira" /usr/local/bin/jira
|
|
28
|
-
chmod +x /usr/local/bin/jira
|
|
29
|
-
rm -rf "${TMPDIR}"
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
CONFIG_DIR="${HOME}/.config/.jira"
|
|
33
|
-
CONFIG_FILE="${CONFIG_DIR}/.config.yml"
|
|
34
|
-
|
|
35
|
-
# Skip config write if required vars are missing
|
|
36
|
-
if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
|
|
37
|
-
exit 0
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
mkdir -p "${CONFIG_DIR}"
|
|
41
|
-
|
|
42
|
-
cat > "${CONFIG_FILE}" << EOF
|
|
43
|
-
installation: ${JIRA_INSTALLATION:-cloud}
|
|
44
|
-
server: ${JIRA_SERVER}
|
|
45
|
-
login: ${JIRA_LOGIN}
|
|
46
|
-
project: ${JIRA_PROJECT:-}
|
|
47
|
-
board: "${JIRA_BOARD:-}"
|
|
48
|
-
auth_type: basic
|
|
49
|
-
epic:
|
|
50
|
-
name: Epic Name
|
|
51
|
-
link: Epic Link
|
|
52
|
-
EOF
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# This file is managed by Lisa.
|
|
3
|
-
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
4
|
-
|
|
5
|
-
# Hook script to run ast-grep scan after Claude edits files
|
|
6
|
-
# This script receives JSON input via stdin with tool information
|
|
7
|
-
# Reference: https://docs.claude.com/en/docs/claude-code/hooks
|
|
8
|
-
# Note: This hook is BLOCKING - it returns non-zero exit codes so Claude must fix issues
|
|
9
|
-
|
|
10
|
-
# Extract file path from JSON input
|
|
11
|
-
FILE_PATH=$(cat | grep -o '"file_path":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
12
|
-
|
|
13
|
-
if [ -z "$FILE_PATH" ] || [ ! -f "$FILE_PATH" ]; then
|
|
14
|
-
exit 0
|
|
15
|
-
fi
|
|
16
|
-
|
|
17
|
-
# Check if file type is supported (TypeScript, JavaScript)
|
|
18
|
-
case "${FILE_PATH##*.}" in
|
|
19
|
-
ts|tsx|js|jsx|mjs|cjs) ;;
|
|
20
|
-
*) exit 0 ;;
|
|
21
|
-
esac
|
|
22
|
-
|
|
23
|
-
# Validate project directory
|
|
24
|
-
if [ -z "${CLAUDE_PROJECT_DIR:-}" ]; then
|
|
25
|
-
exit 0
|
|
26
|
-
fi
|
|
27
|
-
|
|
28
|
-
# Check if file is in a source directory
|
|
29
|
-
RELATIVE_PATH="${FILE_PATH#$CLAUDE_PROJECT_DIR/}"
|
|
30
|
-
case "$RELATIVE_PATH" in
|
|
31
|
-
src/*|apps/*|libs/*|test/*|tests/*|features/*|components/*|hooks/*|screens/*|app/*|constants/*|utils/*|providers/*|stores/*) ;;
|
|
32
|
-
*) exit 0 ;;
|
|
33
|
-
esac
|
|
34
|
-
|
|
35
|
-
cd "$CLAUDE_PROJECT_DIR" || exit 0
|
|
36
|
-
|
|
37
|
-
# Verify ast-grep configuration exists
|
|
38
|
-
if [ ! -f "sgconfig.yml" ]; then
|
|
39
|
-
exit 0
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
# Verify rules are defined
|
|
43
|
-
RULE_COUNT=$(find ast-grep/rules -name "*.yml" -o -name "*.yaml" 2>/dev/null | grep -v ".gitkeep" | wc -l | tr -d ' ')
|
|
44
|
-
if [ "$RULE_COUNT" -eq 0 ]; then
|
|
45
|
-
exit 0
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
# Detect package manager
|
|
49
|
-
if [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
|
|
50
|
-
PKG_MANAGER="bun"
|
|
51
|
-
elif [ -f "pnpm-lock.yaml" ]; then
|
|
52
|
-
PKG_MANAGER="pnpm"
|
|
53
|
-
elif [ -f "yarn.lock" ]; then
|
|
54
|
-
PKG_MANAGER="yarn"
|
|
55
|
-
else
|
|
56
|
-
PKG_MANAGER="npm"
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
|
-
# Run ast-grep scan
|
|
60
|
-
echo "Running ast-grep scan on: $FILE_PATH"
|
|
61
|
-
if OUTPUT=$($PKG_MANAGER run sg:scan "$FILE_PATH" 2>&1); then
|
|
62
|
-
echo "ast-grep: No issues found in $(basename "$FILE_PATH")"
|
|
63
|
-
exit 0
|
|
64
|
-
else
|
|
65
|
-
echo "ast-grep found issues in: $FILE_PATH" >&2
|
|
66
|
-
echo "$OUTPUT" >&2
|
|
67
|
-
exit 1
|
|
68
|
-
fi
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# sync-tasks.sh - Syncs Claude Code tasks to project directories
|
|
4
|
-
#
|
|
5
|
-
# This hook is triggered on PostToolUse for TaskCreate and TaskUpdate.
|
|
6
|
-
# It reads the task metadata to determine the project and syncs
|
|
7
|
-
# task JSON files to ./projects/{project}/tasks/{session-id}/
|
|
8
|
-
#
|
|
9
|
-
# This session-based structure preserves task history across /clear commands,
|
|
10
|
-
# preventing overwrites when new sessions create tasks with the same IDs.
|
|
11
|
-
#
|
|
12
|
-
# Input (via stdin): JSON with tool_name, tool_input, tool_response
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
# Temporarily disable this hook
|
|
16
|
-
exit 0
|
|
17
|
-
|
|
18
|
-
set -euo pipefail
|
|
19
|
-
|
|
20
|
-
# Read JSON input from stdin
|
|
21
|
-
INPUT=$(cat)
|
|
22
|
-
|
|
23
|
-
# Extract tool name
|
|
24
|
-
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // empty')
|
|
25
|
-
|
|
26
|
-
# Only process TaskCreate and TaskUpdate
|
|
27
|
-
if [[ "$TOOL_NAME" != "TaskCreate" && "$TOOL_NAME" != "TaskUpdate" ]]; then
|
|
28
|
-
exit 0
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
# Try to get project from multiple sources:
|
|
32
|
-
# 1. Task metadata (passed in tool_input)
|
|
33
|
-
# 2. .claude-active-project marker file
|
|
34
|
-
|
|
35
|
-
PROJECT=""
|
|
36
|
-
|
|
37
|
-
# Check tool_input metadata for project
|
|
38
|
-
PROJECT=$(echo "$INPUT" | jq -r '.tool_input.metadata.project // empty')
|
|
39
|
-
|
|
40
|
-
# If no project in metadata, check marker file
|
|
41
|
-
if [[ -z "$PROJECT" && -f ".claude-active-project" ]]; then
|
|
42
|
-
PROJECT=$(cat .claude-active-project | tr -d '[:space:]')
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# If still no project, skip syncing
|
|
46
|
-
if [[ -z "$PROJECT" ]]; then
|
|
47
|
-
exit 0
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
# Validate project name (kebab-case, no path traversal)
|
|
51
|
-
if [[ ! "$PROJECT" =~ ^[a-z0-9-]+$ ]]; then
|
|
52
|
-
echo "Warning: Invalid project name '$PROJECT', skipping sync" >&2
|
|
53
|
-
exit 0
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# Get task ID
|
|
57
|
-
TASK_ID=""
|
|
58
|
-
if [[ "$TOOL_NAME" == "TaskCreate" ]]; then
|
|
59
|
-
# For TaskCreate, ID is in tool_response.task.id
|
|
60
|
-
TASK_ID=$(echo "$INPUT" | jq -r '.tool_response.task.id // empty')
|
|
61
|
-
elif [[ "$TOOL_NAME" == "TaskUpdate" ]]; then
|
|
62
|
-
# For TaskUpdate, ID is in tool_input
|
|
63
|
-
TASK_ID=$(echo "$INPUT" | jq -r '.tool_input.taskId // empty')
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
if [[ -z "$TASK_ID" ]]; then
|
|
67
|
-
exit 0
|
|
68
|
-
fi
|
|
69
|
-
|
|
70
|
-
# Find the task file in ~/.claude/tasks/
|
|
71
|
-
# Tasks are stored in ~/.claude/tasks/{session-uuid}/{id}.json
|
|
72
|
-
CLAUDE_TASKS_DIR="${HOME}/.claude/tasks"
|
|
73
|
-
TASK_FILE=""
|
|
74
|
-
|
|
75
|
-
# Get session ID from hook input (preferred - 100% accurate)
|
|
76
|
-
SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty')
|
|
77
|
-
|
|
78
|
-
if [[ -n "$SESSION_ID" && -f "${CLAUDE_TASKS_DIR}/${SESSION_ID}/${TASK_ID}.json" ]]; then
|
|
79
|
-
# Use session ID directly - guaranteed correct session
|
|
80
|
-
TASK_FILE="${CLAUDE_TASKS_DIR}/${SESSION_ID}/${TASK_ID}.json"
|
|
81
|
-
else
|
|
82
|
-
# Fallback: find most recently modified task file with this ID
|
|
83
|
-
# This handles edge cases where session_id isn't available
|
|
84
|
-
TASK_FILE=$(find "$CLAUDE_TASKS_DIR" -name "${TASK_ID}.json" -exec stat -f '%m %N' {} \; 2>/dev/null | sort -rn | head -1 | cut -d' ' -f2-)
|
|
85
|
-
fi
|
|
86
|
-
|
|
87
|
-
if [[ -z "$TASK_FILE" || ! -f "$TASK_FILE" ]]; then
|
|
88
|
-
exit 0
|
|
89
|
-
fi
|
|
90
|
-
|
|
91
|
-
# Require session ID for proper history tracking
|
|
92
|
-
if [[ -z "$SESSION_ID" ]]; then
|
|
93
|
-
echo "Warning: No session_id available, skipping sync" >&2
|
|
94
|
-
exit 0
|
|
95
|
-
fi
|
|
96
|
-
|
|
97
|
-
# Ensure project tasks directory exists (includes session ID for history preservation)
|
|
98
|
-
PROJECT_TASKS_DIR="./projects/${PROJECT}/tasks/${SESSION_ID}"
|
|
99
|
-
mkdir -p "$PROJECT_TASKS_DIR"
|
|
100
|
-
|
|
101
|
-
# Copy task file to project directory
|
|
102
|
-
cp "$TASK_FILE" "${PROJECT_TASKS_DIR}/${TASK_ID}.json"
|
|
103
|
-
|
|
104
|
-
# Optionally stage the file for git (non-blocking)
|
|
105
|
-
git add "${PROJECT_TASKS_DIR}/${TASK_ID}.json" 2>/dev/null || true
|
|
106
|
-
|
|
107
|
-
exit 0
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Ticket sync reminder hook
|
|
3
|
-
# Runs on TaskUpdate to remind about updating linked tickets
|
|
4
|
-
# Non-blocking (exit 0) - this is a reminder, not enforcement
|
|
5
|
-
|
|
6
|
-
# Temporarily disable this hook
|
|
7
|
-
exit 0
|
|
8
|
-
|
|
9
|
-
PLANS_DIR="${CLAUDE_PROJECT_DIR}/plans"
|
|
10
|
-
|
|
11
|
-
# Find the active plan file (most recently modified .md in plans/)
|
|
12
|
-
ACTIVE_PLAN=$(find "$PLANS_DIR" -maxdepth 1 -name "*.md" -type f 2>/dev/null | head -1)
|
|
13
|
-
|
|
14
|
-
if [ -z "$ACTIVE_PLAN" ]; then
|
|
15
|
-
exit 0
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
# Check if the plan contains a ticket URL (JIRA, Linear, GitHub Issues)
|
|
19
|
-
if grep -qiE "(https?://.*(atlassian|jira|linear|github\.com/.*/issues))" "$ACTIVE_PLAN" 2>/dev/null; then
|
|
20
|
-
echo "REMINDER: This plan is linked to a ticket. Consider running /jira:sync to update the ticket with current progress."
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
exit 0
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# track-plan-sessions.sh - Tracks which sessions work on each plan file
|
|
4
|
-
#
|
|
5
|
-
# Triggered by two hooks:
|
|
6
|
-
# 1. PostToolUse (Write|Edit) - Detects plan file writes via absolute path comparison,
|
|
7
|
-
# stamps session ID into the plan's ## Sessions table, and saves a session-specific
|
|
8
|
-
# marker file so subsequent UserPromptSubmit events can reliably find the active plan.
|
|
9
|
-
# 2. UserPromptSubmit - Finds the active plan file by checking for a session-specific
|
|
10
|
-
# marker file first (set by PostToolUse), falling back to the most recently CREATED
|
|
11
|
-
# .md file in plans/ (ls -tU on macOS sorts by birth time). This avoids the mtime bug
|
|
12
|
-
# where another plan file's modification time (e.g., from a hook writing a session ID
|
|
13
|
-
# to it, or format-on-edit touching it) could cause the wrong file to appear "newest."
|
|
14
|
-
#
|
|
15
|
-
# Marker files: $PLANS_DIR/.active-plan-<session-id> contain the absolute path to the
|
|
16
|
-
# active plan file. Stale markers (>24h) are cleaned up on each invocation.
|
|
17
|
-
#
|
|
18
|
-
# Dedup: Session ID dedup is scoped to the ## Sessions section only, not the entire
|
|
19
|
-
# file. This prevents false positives when session IDs appear elsewhere in plan content
|
|
20
|
-
# (e.g., scratchpad directory paths like /private/tmp/claude-501/.../SESSION_ID/...).
|
|
21
|
-
#
|
|
22
|
-
# Debug logging: All key decisions are logged to $PLANS_DIR/.track-plan-debug.log for
|
|
23
|
-
# diagnostics if session IDs land in the wrong plan file.
|
|
24
|
-
#
|
|
25
|
-
# Input (via stdin): JSON with session_id, permission_mode, hook_event_name, etc.
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
set -euo pipefail
|
|
29
|
-
|
|
30
|
-
INPUT=$(cat)
|
|
31
|
-
|
|
32
|
-
SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty')
|
|
33
|
-
PERMISSION_MODE=$(echo "$INPUT" | jq -r '.permission_mode // "default"')
|
|
34
|
-
HOOK_EVENT=$(echo "$INPUT" | jq -r '.hook_event_name // empty')
|
|
35
|
-
|
|
36
|
-
# Temporarily disable this hook
|
|
37
|
-
exit 0
|
|
38
|
-
|
|
39
|
-
# Session ID is required
|
|
40
|
-
if [[ -z "$SESSION_ID" ]]; then
|
|
41
|
-
exit 0
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
# Resolve plans directory from settings (default ./plans)
|
|
45
|
-
PLANS_DIR="./plans"
|
|
46
|
-
SETTINGS_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/settings.json"
|
|
47
|
-
if [[ -f "$SETTINGS_FILE" ]]; then
|
|
48
|
-
CONFIGURED_DIR=$(jq -r '.plansDirectory // empty' "$SETTINGS_FILE")
|
|
49
|
-
if [[ -n "$CONFIGURED_DIR" ]]; then
|
|
50
|
-
PLANS_DIR="$CONFIGURED_DIR"
|
|
51
|
-
fi
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
# Debug logging
|
|
55
|
-
DEBUG_LOG="$PLANS_DIR/.track-plan-debug.log"
|
|
56
|
-
|
|
57
|
-
log_debug() {
|
|
58
|
-
printf '[%s] [%s] [%s] %s\n' \
|
|
59
|
-
"$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
|
|
60
|
-
"$SESSION_ID" \
|
|
61
|
-
"$HOOK_EVENT" \
|
|
62
|
-
"$1" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
# Session-specific marker file for reliable active-plan detection
|
|
66
|
-
MARKER_FILE="$PLANS_DIR/.active-plan-${SESSION_ID}"
|
|
67
|
-
|
|
68
|
-
# Clean stale marker files older than 24h
|
|
69
|
-
find "$PLANS_DIR" -name ".active-plan-*" -mmin +1440 -delete 2>/dev/null || true
|
|
70
|
-
|
|
71
|
-
PLAN_FILE=""
|
|
72
|
-
RESOLUTION_METHOD=""
|
|
73
|
-
|
|
74
|
-
if [[ "$HOOK_EVENT" == "PostToolUse" ]]; then
|
|
75
|
-
# Trigger A: Plan file was written/edited
|
|
76
|
-
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
|
|
77
|
-
|
|
78
|
-
if [[ -z "$FILE_PATH" ]]; then
|
|
79
|
-
log_debug "PostToolUse: no file_path in tool_input, exiting"
|
|
80
|
-
exit 0
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
# Resolve PLANS_DIR to absolute path for comparison
|
|
84
|
-
ABS_PLANS_DIR=$(cd "$PLANS_DIR" 2>/dev/null && pwd)
|
|
85
|
-
|
|
86
|
-
if [[ -z "$ABS_PLANS_DIR" ]]; then
|
|
87
|
-
log_debug "PostToolUse: could not resolve PLANS_DIR=$PLANS_DIR to absolute path, exiting"
|
|
88
|
-
exit 0
|
|
89
|
-
fi
|
|
90
|
-
|
|
91
|
-
# Check if the written file is in the plans directory
|
|
92
|
-
if [[ "$FILE_PATH" == "$ABS_PLANS_DIR"/* ]]; then
|
|
93
|
-
PLAN_FILE="$FILE_PATH"
|
|
94
|
-
RESOLUTION_METHOD="PostToolUse-direct"
|
|
95
|
-
log_debug "PostToolUse: matched plan file=$PLAN_FILE"
|
|
96
|
-
|
|
97
|
-
# Save marker so UserPromptSubmit can find this plan reliably
|
|
98
|
-
echo "$PLAN_FILE" > "$MARKER_FILE"
|
|
99
|
-
log_debug "PostToolUse: saved marker file=$MARKER_FILE"
|
|
100
|
-
else
|
|
101
|
-
log_debug "PostToolUse: file_path=$FILE_PATH not in plans dir=$ABS_PLANS_DIR, exiting"
|
|
102
|
-
exit 0
|
|
103
|
-
fi
|
|
104
|
-
|
|
105
|
-
elif [[ "$HOOK_EVENT" == "UserPromptSubmit" ]]; then
|
|
106
|
-
# Trigger B: Find the active plan file
|
|
107
|
-
# Priority 1: Session-specific marker file (reliable — set by PostToolUse when plan was written)
|
|
108
|
-
if [[ -f "$MARKER_FILE" ]]; then
|
|
109
|
-
PLAN_FILE=$(cat "$MARKER_FILE")
|
|
110
|
-
RESOLUTION_METHOD="marker-file"
|
|
111
|
-
log_debug "UserPromptSubmit: resolved via marker file=$PLAN_FILE"
|
|
112
|
-
else
|
|
113
|
-
# Priority 2: Most recently CREATED file (ls -tU on macOS sorts by birth time)
|
|
114
|
-
PLAN_FILE=$(ls -tU "$PLANS_DIR"/*.md 2>/dev/null | head -1)
|
|
115
|
-
RESOLUTION_METHOD="fallback-ls-tU"
|
|
116
|
-
log_debug "UserPromptSubmit: no marker file, fallback ls -tU resolved=$PLAN_FILE"
|
|
117
|
-
fi
|
|
118
|
-
|
|
119
|
-
if [[ -z "$PLAN_FILE" || ! -f "$PLAN_FILE" ]]; then
|
|
120
|
-
log_debug "UserPromptSubmit: no valid plan file found, exiting"
|
|
121
|
-
exit 0
|
|
122
|
-
fi
|
|
123
|
-
else
|
|
124
|
-
exit 0
|
|
125
|
-
fi
|
|
126
|
-
|
|
127
|
-
# Verify the plan file exists
|
|
128
|
-
if [[ ! -f "$PLAN_FILE" ]]; then
|
|
129
|
-
log_debug "plan file=$PLAN_FILE does not exist, exiting"
|
|
130
|
-
exit 0
|
|
131
|
-
fi
|
|
132
|
-
|
|
133
|
-
# Check if session ID already exists in the ## Sessions section (dedup)
|
|
134
|
-
# Only search within the Sessions section to avoid false positives from session IDs
|
|
135
|
-
# appearing in plan content (e.g., scratchpad paths contain session IDs)
|
|
136
|
-
if sed -n '/^## Sessions$/,$p' "$PLAN_FILE" 2>/dev/null | grep -qF "$SESSION_ID"; then
|
|
137
|
-
log_debug "dedup: session ID already in $PLAN_FILE sessions section (resolved via $RESOLUTION_METHOD), skipping write"
|
|
138
|
-
exit 0
|
|
139
|
-
fi
|
|
140
|
-
|
|
141
|
-
# Determine phase from permission_mode
|
|
142
|
-
PHASE=$( [[ "$PERMISSION_MODE" == "plan" ]] && echo "plan" || echo "implement" )
|
|
143
|
-
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
144
|
-
|
|
145
|
-
# Check if ## Sessions section exists
|
|
146
|
-
if grep -q "^## Sessions" "$PLAN_FILE" 2>/dev/null; then
|
|
147
|
-
# Append row to existing table
|
|
148
|
-
printf '| %s | %s | %s |\n' "$SESSION_ID" "$TIMESTAMP" "$PHASE" >> "$PLAN_FILE"
|
|
149
|
-
else
|
|
150
|
-
# Create ## Sessions section at end of file
|
|
151
|
-
{
|
|
152
|
-
echo ""
|
|
153
|
-
echo "## Sessions"
|
|
154
|
-
echo ""
|
|
155
|
-
echo "<!-- Auto-maintained by track-plan-sessions.sh -->"
|
|
156
|
-
echo "| Session ID | First Seen | Phase |"
|
|
157
|
-
echo "|------------|------------|-------|"
|
|
158
|
-
printf '| %s | %s | %s |\n' "$SESSION_ID" "$TIMESTAMP" "$PHASE"
|
|
159
|
-
} >> "$PLAN_FILE"
|
|
160
|
-
fi
|
|
161
|
-
|
|
162
|
-
log_debug "wrote session to $PLAN_FILE (resolved via $RESOLUTION_METHOD, phase=$PHASE)"
|
|
163
|
-
|
|
164
|
-
exit 0
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# This file is managed by Lisa.
|
|
3
|
-
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
4
|
-
# =============================================================================
|
|
5
|
-
# Verification Level Enforcement Hook (Stop)
|
|
6
|
-
# =============================================================================
|
|
7
|
-
# Checks whether the agent declared a verification level when the session
|
|
8
|
-
# involved code changes. Does NOT re-run lint/typecheck/tests (husky does that).
|
|
9
|
-
#
|
|
10
|
-
# Logic:
|
|
11
|
-
# 1. If no Write/Edit tools were used → exit 0 (research/conversation only)
|
|
12
|
-
# 2. If code was written → check last assistant message for verification level
|
|
13
|
-
# 3. If verification level found → exit 0
|
|
14
|
-
# 4. If missing and stop_hook_active is false → block with instructions
|
|
15
|
-
# 5. If missing and stop_hook_active is true → exit 0 (avoid infinite loops)
|
|
16
|
-
#
|
|
17
|
-
# @see .claude/rules/verfication.md "Self-Correction Loop" section
|
|
18
|
-
# =============================================================================
|
|
19
|
-
|
|
20
|
-
# Read JSON input from stdin
|
|
21
|
-
INPUT=$(cat)
|
|
22
|
-
|
|
23
|
-
# Extract transcript path
|
|
24
|
-
TRANSCRIPT_PATH=$(echo "$INPUT" | grep -o '"transcript_path"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
25
|
-
|
|
26
|
-
# Exit silently if no transcript available
|
|
27
|
-
if [ -z "$TRANSCRIPT_PATH" ] || [ ! -f "$TRANSCRIPT_PATH" ]; then
|
|
28
|
-
exit 0
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
# Check if Write or Edit tools were used during the session
|
|
32
|
-
# Look for tool_use entries with Write or Edit tool names
|
|
33
|
-
if ! grep -q '"tool_name"[[:space:]]*:[[:space:]]*"\(Write\|Edit\|NotebookEdit\)"' "$TRANSCRIPT_PATH" 2>/dev/null; then
|
|
34
|
-
# No code changes — this was research/conversation, allow stop
|
|
35
|
-
exit 0
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Code was written — check if a verification level was declared
|
|
39
|
-
# Extract the last assistant message
|
|
40
|
-
LAST_ASSISTANT=$(awk '/"type"[[:space:]]*:[[:space:]]*"assistant"/{line=$0} END{if(line) print line}' "$TRANSCRIPT_PATH" 2>/dev/null)
|
|
41
|
-
|
|
42
|
-
if [ -z "$LAST_ASSISTANT" ]; then
|
|
43
|
-
exit 0
|
|
44
|
-
fi
|
|
45
|
-
|
|
46
|
-
# Extract the text content from the assistant message
|
|
47
|
-
RESPONSE_TEXT=""
|
|
48
|
-
if command -v jq >/dev/null 2>&1; then
|
|
49
|
-
RESPONSE_TEXT=$(echo "$LAST_ASSISTANT" | jq -r '.message.content[] | select(.type == "text") | .text' 2>/dev/null)
|
|
50
|
-
else
|
|
51
|
-
RESPONSE_TEXT=$(echo "$LAST_ASSISTANT" | grep -o '"text"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
if [ -z "$RESPONSE_TEXT" ]; then
|
|
55
|
-
exit 0
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# Check for verification level keywords (case-insensitive)
|
|
59
|
-
if echo "$RESPONSE_TEXT" | grep -qi "FULLY VERIFIED\|PARTIALLY VERIFIED\|UNVERIFIED"; then
|
|
60
|
-
exit 0
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
# Check if this is a retry (stop_hook_active flag)
|
|
64
|
-
# The stop_hook_active field is set to true when a Stop hook has already blocked once
|
|
65
|
-
STOP_HOOK_ACTIVE=$(echo "$INPUT" | grep -o '"stop_hook_active"[[:space:]]*:[[:space:]]*true' || echo "")
|
|
66
|
-
|
|
67
|
-
if [ -n "$STOP_HOOK_ACTIVE" ]; then
|
|
68
|
-
# Already blocked once — allow stop to prevent infinite loop
|
|
69
|
-
exit 0
|
|
70
|
-
fi
|
|
71
|
-
|
|
72
|
-
# No verification level declared after code changes — block
|
|
73
|
-
cat << 'EOF'
|
|
74
|
-
{"decision":"block","reason":"You changed code but didn't declare a verification level. Run your verification, then declare FULLY VERIFIED, PARTIALLY VERIFIED, or UNVERIFIED with evidence. See .claude/rules/verfication.md for requirements."}
|
|
75
|
-
EOF
|
|
76
|
-
|
|
77
|
-
exit 0
|