@codyswann/lisa 2.119.0 → 2.121.0
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 +18 -0
- package/dist/agy/agents-md-installer.d.ts +24 -0
- package/dist/agy/agents-md-installer.d.ts.map +1 -0
- package/dist/agy/agents-md-installer.js +126 -0
- package/dist/agy/agents-md-installer.js.map +1 -0
- package/dist/agy/mcp-installer.d.ts +84 -0
- package/dist/agy/mcp-installer.d.ts.map +1 -0
- package/dist/agy/mcp-installer.js +134 -0
- package/dist/agy/mcp-installer.js.map +1 -0
- package/dist/agy/plugin-installer.d.ts +21 -0
- package/dist/agy/plugin-installer.d.ts.map +1 -0
- package/dist/agy/plugin-installer.js +84 -0
- package/dist/agy/plugin-installer.js.map +1 -0
- package/dist/claude/claude-md-installer.d.ts +18 -0
- package/dist/claude/claude-md-installer.d.ts.map +1 -0
- package/dist/claude/claude-md-installer.js +62 -0
- package/dist/claude/claude-md-installer.js.map +1 -0
- package/dist/codex/lisa-plugin-detection.d.ts +69 -0
- package/dist/codex/lisa-plugin-detection.d.ts.map +1 -0
- package/dist/codex/lisa-plugin-detection.js +135 -0
- package/dist/codex/lisa-plugin-detection.js.map +1 -0
- package/dist/copilot/copilot-instructions-installer.d.ts +18 -0
- package/dist/copilot/copilot-instructions-installer.d.ts.map +1 -0
- package/dist/copilot/copilot-instructions-installer.js +61 -0
- package/dist/copilot/copilot-instructions-installer.js.map +1 -0
- package/dist/copilot/plugin-installer.d.ts +29 -0
- package/dist/copilot/plugin-installer.d.ts.map +1 -0
- package/dist/copilot/plugin-installer.js +140 -0
- package/dist/copilot/plugin-installer.js.map +1 -0
- package/dist/core/config.d.ts +8 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +4 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/lisa.d.ts +35 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +93 -0
- package/dist/core/lisa.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/hooks/block-no-verify.sh +37 -0
- package/plugins/lisa/.codex-plugin/hooks/inject-flow-context.sh +12 -0
- package/plugins/lisa/.codex-plugin/hooks/inject-rules.sh +33 -0
- package/plugins/lisa/.codex-plugin/hooks/install-pkgs.sh +69 -0
- package/plugins/lisa/.codex-plugin/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa/.codex-plugin/hooks/setup-jira-cli.sh +51 -0
- package/plugins/lisa/.codex-plugin/hooks.json +75 -0
- package/plugins/lisa/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-agy/agents/architecture-specialist.md +47 -0
- package/plugins/lisa-agy/agents/bug-fixer.md +39 -0
- package/plugins/lisa-agy/agents/builder.md +40 -0
- package/plugins/lisa-agy/agents/confluence-prd-intake.md +65 -0
- package/plugins/lisa-agy/agents/debug-specialist.md +114 -0
- package/plugins/lisa-agy/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-agy/agents/github-agent.md +148 -0
- package/plugins/lisa-agy/agents/github-build-intake.md +64 -0
- package/plugins/lisa-agy/agents/github-prd-intake.md +66 -0
- package/plugins/lisa-agy/agents/jira-agent.md +129 -0
- package/plugins/lisa-agy/agents/jira-build-intake.md +64 -0
- package/plugins/lisa-agy/agents/learner.md +43 -0
- package/plugins/lisa-agy/agents/learnings-synthesizer.md +135 -0
- package/plugins/lisa-agy/agents/linear-agent.md +134 -0
- package/plugins/lisa-agy/agents/linear-build-intake.md +64 -0
- package/plugins/lisa-agy/agents/linear-prd-intake.md +66 -0
- package/plugins/lisa-agy/agents/notion-prd-intake.md +63 -0
- package/plugins/lisa-agy/agents/performance-specialist.md +85 -0
- package/plugins/lisa-agy/agents/pr-mining-specialist.md +85 -0
- package/plugins/lisa-agy/agents/product-specialist.md +63 -0
- package/plugins/lisa-agy/agents/quality-specialist.md +56 -0
- package/plugins/lisa-agy/agents/security-specialist.md +51 -0
- package/plugins/lisa-agy/agents/skill-evaluator.md +245 -0
- package/plugins/lisa-agy/agents/spec-conformance-specialist.md +49 -0
- package/plugins/lisa-agy/agents/test-specialist.md +49 -0
- package/plugins/lisa-agy/agents/tracker-mining-specialist.md +85 -0
- package/plugins/lisa-agy/agents/verification-specialist.md +135 -0
- package/plugins/lisa-agy/commands/automation-status.md +12 -0
- package/plugins/lisa-agy/commands/codify-verification.md +6 -0
- package/plugins/lisa-agy/commands/debrief/apply.md +6 -0
- package/plugins/lisa-agy/commands/debrief.md +6 -0
- package/plugins/lisa-agy/commands/doctor.md +6 -0
- package/plugins/lisa-agy/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-agy/commands/git/commit.md +7 -0
- package/plugins/lisa-agy/commands/git/prune.md +6 -0
- package/plugins/lisa-agy/commands/git/submit-pr.md +7 -0
- package/plugins/lisa-agy/commands/implement.md +6 -0
- package/plugins/lisa-agy/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-agy/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-agy/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-agy/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-agy/commands/improve/tests.md +7 -0
- package/plugins/lisa-agy/commands/intake-explain.md +31 -0
- package/plugins/lisa-agy/commands/intake.md +6 -0
- package/plugins/lisa-agy/commands/monitor.md +6 -0
- package/plugins/lisa-agy/commands/plan.md +6 -0
- package/plugins/lisa-agy/commands/plugin-sync-explain.md +8 -0
- package/plugins/lisa-agy/commands/product-walkthrough.md +7 -0
- package/plugins/lisa-agy/commands/project-ideation.md +6 -0
- package/plugins/lisa-agy/commands/pull-request/review.md +7 -0
- package/plugins/lisa-agy/commands/queue-status.md +34 -0
- package/plugins/lisa-agy/commands/repair-intake.md +6 -0
- package/plugins/lisa-agy/commands/research.md +6 -0
- package/plugins/lisa-agy/commands/review/local.md +6 -0
- package/plugins/lisa-agy/commands/security/zap-scan.md +6 -0
- package/plugins/lisa-agy/commands/setup/atlassian.md +7 -0
- package/plugins/lisa-agy/commands/setup/confluence.md +7 -0
- package/plugins/lisa-agy/commands/setup/github.md +7 -0
- package/plugins/lisa-agy/commands/setup/jira.md +7 -0
- package/plugins/lisa-agy/commands/setup/linear.md +7 -0
- package/plugins/lisa-agy/commands/setup/notion.md +7 -0
- package/plugins/lisa-agy/commands/setup-automations.md +6 -0
- package/plugins/lisa-agy/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-agy/commands/verify-prd.md +6 -0
- package/plugins/lisa-agy/commands/verify.md +6 -0
- package/plugins/lisa-agy/commands/wiki/install.md +7 -0
- package/plugins/lisa-agy/plugin.json +8 -0
- package/plugins/lisa-agy/scripts/automation-status-claude-adapter.mjs +672 -0
- package/plugins/lisa-agy/scripts/automation-status-codex-adapter.mjs +697 -0
- package/plugins/lisa-agy/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-agy/scripts/automation-status-expected-fleet.mjs +319 -0
- package/plugins/lisa-agy/scripts/automation-status-report.mjs +170 -0
- package/plugins/lisa-agy/scripts/doctor-report.mjs +143 -0
- package/plugins/lisa-agy/scripts/plugin-sync-explain.mjs +512 -0
- package/plugins/lisa-agy/scripts/project-ideation-idempotency-harness.mjs +319 -0
- package/plugins/lisa-agy/scripts/queue-contract-resolution.mjs +453 -0
- package/plugins/lisa-agy/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-agy/scripts/queue-status-build-readers.mjs +509 -0
- package/plugins/lisa-agy/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-agy/skills/acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa-agy/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-agy/skills/atlassian-access/SKILL.md +293 -0
- package/plugins/lisa-agy/skills/automation-status/SKILL.md +111 -0
- package/plugins/lisa-agy/skills/bug-triage/SKILL.md +23 -0
- package/plugins/lisa-agy/skills/codebase-research/SKILL.md +87 -0
- package/plugins/lisa-agy/skills/codify-verification/SKILL.md +152 -0
- package/plugins/lisa-agy/skills/confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-agy/skills/confluence-to-tracker/SKILL.md +360 -0
- package/plugins/lisa-agy/skills/confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa-agy/skills/debrief/SKILL.md +94 -0
- package/plugins/lisa-agy/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa-agy/skills/doctor/SKILL.md +317 -0
- package/plugins/lisa-agy/skills/epic-triage/SKILL.md +28 -0
- package/plugins/lisa-agy/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-agy/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-agy/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-agy/skills/git-submit-pr/SKILL.md +105 -0
- package/plugins/lisa-agy/skills/github-add-journey/SKILL.md +115 -0
- package/plugins/lisa-agy/skills/github-build-intake/SKILL.md +377 -0
- package/plugins/lisa-agy/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa-agy/skills/github-evidence/SKILL.md +110 -0
- package/plugins/lisa-agy/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa-agy/skills/github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa-agy/skills/github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-agy/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa-agy/skills/github-sync/SKILL.md +119 -0
- package/plugins/lisa-agy/skills/github-to-tracker/SKILL.md +345 -0
- package/plugins/lisa-agy/skills/github-validate-issue/SKILL.md +331 -0
- package/plugins/lisa-agy/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa-agy/skills/github-write-issue/SKILL.md +339 -0
- package/plugins/lisa-agy/skills/github-write-prd/SKILL.md +157 -0
- package/plugins/lisa-agy/skills/implement/SKILL.md +145 -0
- package/plugins/lisa-agy/skills/improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-agy/skills/improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-agy/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-agy/skills/improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-agy/skills/improve-tests/SKILL.md +47 -0
- package/plugins/lisa-agy/skills/intake/SKILL.md +132 -0
- package/plugins/lisa-agy/skills/intake-explain/SKILL.md +279 -0
- package/plugins/lisa-agy/skills/jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa-agy/skills/jira-build-intake/SKILL.md +286 -0
- package/plugins/lisa-agy/skills/jira-create/SKILL.md +154 -0
- package/plugins/lisa-agy/skills/jira-evidence/SKILL.md +90 -0
- package/plugins/lisa-agy/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-agy/skills/jira-journey/SKILL.md +127 -0
- package/plugins/lisa-agy/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-agy/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-agy/skills/jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa-agy/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa-agy/skills/jira-sync/SKILL.md +95 -0
- package/plugins/lisa-agy/skills/jira-validate-ticket/SKILL.md +318 -0
- package/plugins/lisa-agy/skills/jira-verify/SKILL.md +30 -0
- package/plugins/lisa-agy/skills/jira-write-ticket/SKILL.md +265 -0
- package/plugins/lisa-agy/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-agy/skills/linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +283 -0
- package/plugins/lisa-agy/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa-agy/skills/linear-evidence/SKILL.md +103 -0
- package/plugins/lisa-agy/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa-agy/skills/linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa-agy/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa-agy/skills/linear-sync/SKILL.md +114 -0
- package/plugins/lisa-agy/skills/linear-to-tracker/SKILL.md +342 -0
- package/plugins/lisa-agy/skills/linear-validate-issue/SKILL.md +313 -0
- package/plugins/lisa-agy/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa-agy/skills/linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa-agy/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-agy/skills/monitor/SKILL.md +48 -0
- package/plugins/lisa-agy/skills/nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-agy/skills/nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-agy/skills/nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa-agy/skills/notion-access/SKILL.md +226 -0
- package/plugins/lisa-agy/skills/notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-agy/skills/notion-to-tracker/SKILL.md +357 -0
- package/plugins/lisa-agy/skills/notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa-agy/skills/performance-review/SKILL.md +94 -0
- package/plugins/lisa-agy/skills/plan/SKILL.md +60 -0
- package/plugins/lisa-agy/skills/plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-agy/skills/prd-backlink/SKILL.md +265 -0
- package/plugins/lisa-agy/skills/prd-source-write/SKILL.md +101 -0
- package/plugins/lisa-agy/skills/prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa-agy/skills/product-walkthrough/SKILL.md +129 -0
- package/plugins/lisa-agy/skills/project-ideation/SKILL.md +315 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-agy/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-agy/skills/quality-review/SKILL.md +54 -0
- package/plugins/lisa-agy/skills/queue-status/SKILL.md +133 -0
- package/plugins/lisa-agy/skills/repair-intake/SKILL.md +584 -0
- package/plugins/lisa-agy/skills/reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa-agy/skills/research/SKILL.md +68 -0
- package/plugins/lisa-agy/skills/review-local/SKILL.md +88 -0
- package/plugins/lisa-agy/skills/root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa-agy/skills/security-review/SKILL.md +57 -0
- package/plugins/lisa-agy/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-agy/skills/setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa-agy/skills/setup-automations/SKILL.md +99 -0
- package/plugins/lisa-agy/skills/setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-agy/skills/setup-github/SKILL.md +268 -0
- package/plugins/lisa-agy/skills/setup-jira/SKILL.md +198 -0
- package/plugins/lisa-agy/skills/setup-linear/SKILL.md +251 -0
- package/plugins/lisa-agy/skills/setup-notion/SKILL.md +316 -0
- package/plugins/lisa-agy/skills/spec-conformance/SKILL.md +159 -0
- package/plugins/lisa-agy/skills/task-decomposition/SKILL.md +127 -0
- package/plugins/lisa-agy/skills/task-triage/SKILL.md +23 -0
- package/plugins/lisa-agy/skills/tdd-implementation/SKILL.md +83 -0
- package/plugins/lisa-agy/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-agy/skills/test-strategy/SKILL.md +63 -0
- package/plugins/lisa-agy/skills/ticket-triage/SKILL.md +182 -0
- package/plugins/lisa-agy/skills/tracker-add-journey/SKILL.md +26 -0
- package/plugins/lisa-agy/skills/tracker-build-intake/SKILL.md +64 -0
- package/plugins/lisa-agy/skills/tracker-create/SKILL.md +26 -0
- package/plugins/lisa-agy/skills/tracker-evidence/SKILL.md +52 -0
- package/plugins/lisa-agy/skills/tracker-journey/SKILL.md +26 -0
- package/plugins/lisa-agy/skills/tracker-read/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa-agy/skills/tracker-sync/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/tracker-validate/SKILL.md +36 -0
- package/plugins/lisa-agy/skills/tracker-verify/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/tracker-write/SKILL.md +53 -0
- package/plugins/lisa-agy/skills/usage-accounting/SKILL.md +170 -0
- package/plugins/lisa-agy/skills/verification-lifecycle/SKILL.md +339 -0
- package/plugins/lisa-agy/skills/verify/SKILL.md +49 -0
- package/plugins/lisa-agy/skills/verify-prd/SKILL.md +392 -0
- package/plugins/lisa-agy/skills/wiki-install/SKILL.md +101 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +72 -0
- package/plugins/lisa-copilot/agents/architecture-specialist.agent.md +47 -0
- package/plugins/lisa-copilot/agents/bug-fixer.agent.md +39 -0
- package/plugins/lisa-copilot/agents/builder.agent.md +40 -0
- package/plugins/lisa-copilot/agents/confluence-prd-intake.agent.md +65 -0
- package/plugins/lisa-copilot/agents/debug-specialist.agent.md +114 -0
- package/plugins/lisa-copilot/agents/git-history-analyzer.agent.md +183 -0
- package/plugins/lisa-copilot/agents/github-agent.agent.md +148 -0
- package/plugins/lisa-copilot/agents/github-build-intake.agent.md +64 -0
- package/plugins/lisa-copilot/agents/github-prd-intake.agent.md +66 -0
- package/plugins/lisa-copilot/agents/jira-agent.agent.md +129 -0
- package/plugins/lisa-copilot/agents/jira-build-intake.agent.md +64 -0
- package/plugins/lisa-copilot/agents/learner.agent.md +43 -0
- package/plugins/lisa-copilot/agents/learnings-synthesizer.agent.md +135 -0
- package/plugins/lisa-copilot/agents/linear-agent.agent.md +134 -0
- package/plugins/lisa-copilot/agents/linear-build-intake.agent.md +64 -0
- package/plugins/lisa-copilot/agents/linear-prd-intake.agent.md +66 -0
- package/plugins/lisa-copilot/agents/notion-prd-intake.agent.md +63 -0
- package/plugins/lisa-copilot/agents/performance-specialist.agent.md +85 -0
- package/plugins/lisa-copilot/agents/pr-mining-specialist.agent.md +85 -0
- package/plugins/lisa-copilot/agents/product-specialist.agent.md +63 -0
- package/plugins/lisa-copilot/agents/quality-specialist.agent.md +56 -0
- package/plugins/lisa-copilot/agents/security-specialist.agent.md +51 -0
- package/plugins/lisa-copilot/agents/skill-evaluator.agent.md +245 -0
- package/plugins/lisa-copilot/agents/spec-conformance-specialist.agent.md +49 -0
- package/plugins/lisa-copilot/agents/test-specialist.agent.md +49 -0
- package/plugins/lisa-copilot/agents/tracker-mining-specialist.agent.md +85 -0
- package/plugins/lisa-copilot/agents/verification-specialist.agent.md +135 -0
- package/plugins/lisa-copilot/commands/automation-status.md +12 -0
- package/plugins/lisa-copilot/commands/codify-verification.md +6 -0
- package/plugins/lisa-copilot/commands/debrief/apply.md +6 -0
- package/plugins/lisa-copilot/commands/debrief.md +6 -0
- package/plugins/lisa-copilot/commands/doctor.md +6 -0
- package/plugins/lisa-copilot/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-copilot/commands/git/commit.md +7 -0
- package/plugins/lisa-copilot/commands/git/prune.md +6 -0
- package/plugins/lisa-copilot/commands/git/submit-pr.md +7 -0
- package/plugins/lisa-copilot/commands/implement.md +6 -0
- package/plugins/lisa-copilot/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-copilot/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-copilot/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-copilot/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-copilot/commands/improve/tests.md +7 -0
- package/plugins/lisa-copilot/commands/intake-explain.md +31 -0
- package/plugins/lisa-copilot/commands/intake.md +6 -0
- package/plugins/lisa-copilot/commands/monitor.md +6 -0
- package/plugins/lisa-copilot/commands/plan.md +6 -0
- package/plugins/lisa-copilot/commands/plugin-sync-explain.md +8 -0
- package/plugins/lisa-copilot/commands/product-walkthrough.md +7 -0
- package/plugins/lisa-copilot/commands/project-ideation.md +6 -0
- package/plugins/lisa-copilot/commands/pull-request/review.md +7 -0
- package/plugins/lisa-copilot/commands/queue-status.md +34 -0
- package/plugins/lisa-copilot/commands/repair-intake.md +6 -0
- package/plugins/lisa-copilot/commands/research.md +6 -0
- package/plugins/lisa-copilot/commands/review/local.md +6 -0
- package/plugins/lisa-copilot/commands/security/zap-scan.md +6 -0
- package/plugins/lisa-copilot/commands/setup/atlassian.md +7 -0
- package/plugins/lisa-copilot/commands/setup/confluence.md +7 -0
- package/plugins/lisa-copilot/commands/setup/github.md +7 -0
- package/plugins/lisa-copilot/commands/setup/jira.md +7 -0
- package/plugins/lisa-copilot/commands/setup/linear.md +7 -0
- package/plugins/lisa-copilot/commands/setup/notion.md +7 -0
- package/plugins/lisa-copilot/commands/setup-automations.md +6 -0
- package/plugins/lisa-copilot/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-copilot/commands/verify-prd.md +6 -0
- package/plugins/lisa-copilot/commands/verify.md +6 -0
- package/plugins/lisa-copilot/commands/wiki/install.md +7 -0
- package/plugins/lisa-copilot/hooks/block-no-verify.sh +37 -0
- package/plugins/lisa-copilot/hooks/inject-rules.sh +33 -0
- package/plugins/lisa-copilot/hooks/install-pkgs.sh +69 -0
- package/plugins/lisa-copilot/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +51 -0
- package/plugins/lisa-copilot/rules/eager/base-rules.md +70 -0
- package/plugins/lisa-copilot/rules/eager/coding-philosophy.md +27 -0
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +28 -0
- package/plugins/lisa-copilot/rules/eager/documentation-source-paths.md +13 -0
- package/plugins/lisa-copilot/rules/eager/empirical-inquiry.md +22 -0
- package/plugins/lisa-copilot/rules/eager/intent-routing.md +18 -0
- package/plugins/lisa-copilot/rules/eager/leaf-only-lifecycle.md +39 -0
- package/plugins/lisa-copilot/rules/eager/prd-lifecycle-rollup.md +31 -0
- package/plugins/lisa-copilot/rules/eager/repo-scope-split.md +39 -0
- package/plugins/lisa-copilot/rules/eager/security-audit-handling.md +29 -0
- package/plugins/lisa-copilot/rules/eager/usage-accounting.md +28 -0
- package/plugins/lisa-copilot/rules/eager/verification.md +21 -0
- package/plugins/lisa-copilot/rules/eager/wiki-knowledge-source.md +16 -0
- package/plugins/lisa-copilot/rules/reference/base-rules.md +133 -0
- package/plugins/lisa-copilot/rules/reference/coding-philosophy.md +428 -0
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +691 -0
- package/plugins/lisa-copilot/rules/reference/documentation-source-paths.md +13 -0
- package/plugins/lisa-copilot/rules/reference/empirical-inquiry.md +27 -0
- package/plugins/lisa-copilot/rules/reference/intent-routing.md +407 -0
- package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +120 -0
- package/plugins/lisa-copilot/rules/reference/prd-lifecycle-rollup.md +156 -0
- package/plugins/lisa-copilot/rules/reference/repo-scope-split.md +58 -0
- package/plugins/lisa-copilot/rules/reference/security-audit-handling.md +30 -0
- package/plugins/lisa-copilot/rules/reference/usage-accounting.md +144 -0
- package/plugins/lisa-copilot/rules/reference/verification.md +124 -0
- package/plugins/lisa-copilot/rules/reference/wiki-knowledge-source.md +14 -0
- package/plugins/lisa-copilot/scripts/automation-status-claude-adapter.mjs +672 -0
- package/plugins/lisa-copilot/scripts/automation-status-codex-adapter.mjs +697 -0
- package/plugins/lisa-copilot/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-copilot/scripts/automation-status-expected-fleet.mjs +319 -0
- package/plugins/lisa-copilot/scripts/automation-status-report.mjs +170 -0
- package/plugins/lisa-copilot/scripts/doctor-report.mjs +143 -0
- package/plugins/lisa-copilot/scripts/plugin-sync-explain.mjs +512 -0
- package/plugins/lisa-copilot/scripts/project-ideation-idempotency-harness.mjs +319 -0
- package/plugins/lisa-copilot/scripts/queue-contract-resolution.mjs +453 -0
- package/plugins/lisa-copilot/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-copilot/scripts/queue-status-build-readers.mjs +509 -0
- package/plugins/lisa-copilot/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-copilot/skills/acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa-copilot/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-copilot/skills/atlassian-access/SKILL.md +293 -0
- package/plugins/lisa-copilot/skills/automation-status/SKILL.md +111 -0
- package/plugins/lisa-copilot/skills/bug-triage/SKILL.md +23 -0
- package/plugins/lisa-copilot/skills/codebase-research/SKILL.md +87 -0
- package/plugins/lisa-copilot/skills/codify-verification/SKILL.md +152 -0
- package/plugins/lisa-copilot/skills/confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-copilot/skills/confluence-to-tracker/SKILL.md +360 -0
- package/plugins/lisa-copilot/skills/confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa-copilot/skills/debrief/SKILL.md +94 -0
- package/plugins/lisa-copilot/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa-copilot/skills/doctor/SKILL.md +317 -0
- package/plugins/lisa-copilot/skills/epic-triage/SKILL.md +28 -0
- package/plugins/lisa-copilot/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-copilot/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-copilot/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-copilot/skills/git-submit-pr/SKILL.md +105 -0
- package/plugins/lisa-copilot/skills/github-add-journey/SKILL.md +115 -0
- package/plugins/lisa-copilot/skills/github-build-intake/SKILL.md +377 -0
- package/plugins/lisa-copilot/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa-copilot/skills/github-evidence/SKILL.md +110 -0
- package/plugins/lisa-copilot/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa-copilot/skills/github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa-copilot/skills/github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-copilot/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa-copilot/skills/github-sync/SKILL.md +119 -0
- package/plugins/lisa-copilot/skills/github-to-tracker/SKILL.md +345 -0
- package/plugins/lisa-copilot/skills/github-validate-issue/SKILL.md +331 -0
- package/plugins/lisa-copilot/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa-copilot/skills/github-write-issue/SKILL.md +339 -0
- package/plugins/lisa-copilot/skills/github-write-prd/SKILL.md +157 -0
- package/plugins/lisa-copilot/skills/implement/SKILL.md +145 -0
- package/plugins/lisa-copilot/skills/improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-copilot/skills/improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-copilot/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-copilot/skills/improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-copilot/skills/improve-tests/SKILL.md +47 -0
- package/plugins/lisa-copilot/skills/intake/SKILL.md +132 -0
- package/plugins/lisa-copilot/skills/intake-explain/SKILL.md +279 -0
- package/plugins/lisa-copilot/skills/jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa-copilot/skills/jira-build-intake/SKILL.md +286 -0
- package/plugins/lisa-copilot/skills/jira-create/SKILL.md +154 -0
- package/plugins/lisa-copilot/skills/jira-evidence/SKILL.md +90 -0
- package/plugins/lisa-copilot/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-copilot/skills/jira-journey/SKILL.md +127 -0
- package/plugins/lisa-copilot/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-copilot/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-copilot/skills/jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa-copilot/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa-copilot/skills/jira-sync/SKILL.md +95 -0
- package/plugins/lisa-copilot/skills/jira-validate-ticket/SKILL.md +318 -0
- package/plugins/lisa-copilot/skills/jira-verify/SKILL.md +30 -0
- package/plugins/lisa-copilot/skills/jira-write-ticket/SKILL.md +265 -0
- package/plugins/lisa-copilot/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-copilot/skills/linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +283 -0
- package/plugins/lisa-copilot/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa-copilot/skills/linear-evidence/SKILL.md +103 -0
- package/plugins/lisa-copilot/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa-copilot/skills/linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa-copilot/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa-copilot/skills/linear-sync/SKILL.md +114 -0
- package/plugins/lisa-copilot/skills/linear-to-tracker/SKILL.md +342 -0
- package/plugins/lisa-copilot/skills/linear-validate-issue/SKILL.md +313 -0
- package/plugins/lisa-copilot/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa-copilot/skills/linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa-copilot/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-copilot/skills/monitor/SKILL.md +48 -0
- package/plugins/lisa-copilot/skills/nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-copilot/skills/nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-copilot/skills/nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa-copilot/skills/notion-access/SKILL.md +226 -0
- package/plugins/lisa-copilot/skills/notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-copilot/skills/notion-to-tracker/SKILL.md +357 -0
- package/plugins/lisa-copilot/skills/notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa-copilot/skills/performance-review/SKILL.md +94 -0
- package/plugins/lisa-copilot/skills/plan/SKILL.md +60 -0
- package/plugins/lisa-copilot/skills/plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-copilot/skills/prd-backlink/SKILL.md +265 -0
- package/plugins/lisa-copilot/skills/prd-source-write/SKILL.md +101 -0
- package/plugins/lisa-copilot/skills/prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa-copilot/skills/product-walkthrough/SKILL.md +129 -0
- package/plugins/lisa-copilot/skills/project-ideation/SKILL.md +315 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-copilot/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-copilot/skills/quality-review/SKILL.md +54 -0
- package/plugins/lisa-copilot/skills/queue-status/SKILL.md +133 -0
- package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +584 -0
- package/plugins/lisa-copilot/skills/reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa-copilot/skills/research/SKILL.md +68 -0
- package/plugins/lisa-copilot/skills/review-local/SKILL.md +88 -0
- package/plugins/lisa-copilot/skills/root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa-copilot/skills/security-review/SKILL.md +57 -0
- package/plugins/lisa-copilot/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-copilot/skills/setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa-copilot/skills/setup-automations/SKILL.md +99 -0
- package/plugins/lisa-copilot/skills/setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-copilot/skills/setup-github/SKILL.md +268 -0
- package/plugins/lisa-copilot/skills/setup-jira/SKILL.md +198 -0
- package/plugins/lisa-copilot/skills/setup-linear/SKILL.md +251 -0
- package/plugins/lisa-copilot/skills/setup-notion/SKILL.md +316 -0
- package/plugins/lisa-copilot/skills/spec-conformance/SKILL.md +159 -0
- package/plugins/lisa-copilot/skills/task-decomposition/SKILL.md +127 -0
- package/plugins/lisa-copilot/skills/task-triage/SKILL.md +23 -0
- package/plugins/lisa-copilot/skills/tdd-implementation/SKILL.md +83 -0
- package/plugins/lisa-copilot/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-copilot/skills/test-strategy/SKILL.md +63 -0
- package/plugins/lisa-copilot/skills/ticket-triage/SKILL.md +182 -0
- package/plugins/lisa-copilot/skills/tracker-add-journey/SKILL.md +26 -0
- package/plugins/lisa-copilot/skills/tracker-build-intake/SKILL.md +64 -0
- package/plugins/lisa-copilot/skills/tracker-create/SKILL.md +26 -0
- package/plugins/lisa-copilot/skills/tracker-evidence/SKILL.md +52 -0
- package/plugins/lisa-copilot/skills/tracker-journey/SKILL.md +26 -0
- package/plugins/lisa-copilot/skills/tracker-read/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa-copilot/skills/tracker-sync/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/tracker-validate/SKILL.md +36 -0
- package/plugins/lisa-copilot/skills/tracker-verify/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/tracker-write/SKILL.md +53 -0
- package/plugins/lisa-copilot/skills/usage-accounting/SKILL.md +170 -0
- package/plugins/lisa-copilot/skills/verification-lifecycle/SKILL.md +339 -0
- package/plugins/lisa-copilot/skills/verify/SKILL.md +49 -0
- package/plugins/lisa-copilot/skills/verify-prd/SKILL.md +392 -0
- package/plugins/lisa-copilot/skills/wiki-install/SKILL.md +101 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +52 -0
- package/plugins/lisa-cursor/agents/architecture-specialist.md +47 -0
- package/plugins/lisa-cursor/agents/bug-fixer.md +39 -0
- package/plugins/lisa-cursor/agents/builder.md +40 -0
- package/plugins/lisa-cursor/agents/confluence-prd-intake.md +65 -0
- package/plugins/lisa-cursor/agents/debug-specialist.md +114 -0
- package/plugins/lisa-cursor/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-cursor/agents/github-agent.md +148 -0
- package/plugins/lisa-cursor/agents/github-build-intake.md +64 -0
- package/plugins/lisa-cursor/agents/github-prd-intake.md +66 -0
- package/plugins/lisa-cursor/agents/jira-agent.md +129 -0
- package/plugins/lisa-cursor/agents/jira-build-intake.md +64 -0
- package/plugins/lisa-cursor/agents/learner.md +43 -0
- package/plugins/lisa-cursor/agents/learnings-synthesizer.md +135 -0
- package/plugins/lisa-cursor/agents/linear-agent.md +134 -0
- package/plugins/lisa-cursor/agents/linear-build-intake.md +64 -0
- package/plugins/lisa-cursor/agents/linear-prd-intake.md +66 -0
- package/plugins/lisa-cursor/agents/notion-prd-intake.md +63 -0
- package/plugins/lisa-cursor/agents/performance-specialist.md +85 -0
- package/plugins/lisa-cursor/agents/pr-mining-specialist.md +85 -0
- package/plugins/lisa-cursor/agents/product-specialist.md +63 -0
- package/plugins/lisa-cursor/agents/quality-specialist.md +56 -0
- package/plugins/lisa-cursor/agents/security-specialist.md +51 -0
- package/plugins/lisa-cursor/agents/skill-evaluator.md +245 -0
- package/plugins/lisa-cursor/agents/spec-conformance-specialist.md +49 -0
- package/plugins/lisa-cursor/agents/test-specialist.md +49 -0
- package/plugins/lisa-cursor/agents/tracker-mining-specialist.md +85 -0
- package/plugins/lisa-cursor/agents/verification-specialist.md +135 -0
- package/plugins/lisa-cursor/commands/automation-status.md +12 -0
- package/plugins/lisa-cursor/commands/codify-verification.md +6 -0
- package/plugins/lisa-cursor/commands/debrief/apply.md +6 -0
- package/plugins/lisa-cursor/commands/debrief.md +6 -0
- package/plugins/lisa-cursor/commands/doctor.md +6 -0
- package/plugins/lisa-cursor/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-cursor/commands/git/commit.md +7 -0
- package/plugins/lisa-cursor/commands/git/prune.md +6 -0
- package/plugins/lisa-cursor/commands/git/submit-pr.md +7 -0
- package/plugins/lisa-cursor/commands/implement.md +6 -0
- package/plugins/lisa-cursor/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-cursor/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-cursor/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-cursor/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-cursor/commands/improve/tests.md +7 -0
- package/plugins/lisa-cursor/commands/intake-explain.md +31 -0
- package/plugins/lisa-cursor/commands/intake.md +6 -0
- package/plugins/lisa-cursor/commands/monitor.md +6 -0
- package/plugins/lisa-cursor/commands/plan.md +6 -0
- package/plugins/lisa-cursor/commands/plugin-sync-explain.md +8 -0
- package/plugins/lisa-cursor/commands/product-walkthrough.md +7 -0
- package/plugins/lisa-cursor/commands/project-ideation.md +6 -0
- package/plugins/lisa-cursor/commands/pull-request/review.md +7 -0
- package/plugins/lisa-cursor/commands/queue-status.md +34 -0
- package/plugins/lisa-cursor/commands/repair-intake.md +6 -0
- package/plugins/lisa-cursor/commands/research.md +6 -0
- package/plugins/lisa-cursor/commands/review/local.md +6 -0
- package/plugins/lisa-cursor/commands/security/zap-scan.md +6 -0
- package/plugins/lisa-cursor/commands/setup/atlassian.md +7 -0
- package/plugins/lisa-cursor/commands/setup/confluence.md +7 -0
- package/plugins/lisa-cursor/commands/setup/github.md +7 -0
- package/plugins/lisa-cursor/commands/setup/jira.md +7 -0
- package/plugins/lisa-cursor/commands/setup/linear.md +7 -0
- package/plugins/lisa-cursor/commands/setup/notion.md +7 -0
- package/plugins/lisa-cursor/commands/setup-automations.md +6 -0
- package/plugins/lisa-cursor/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-cursor/commands/verify-prd.md +6 -0
- package/plugins/lisa-cursor/commands/verify.md +6 -0
- package/plugins/lisa-cursor/commands/wiki/install.md +7 -0
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +37 -0
- package/plugins/lisa-cursor/hooks/install-pkgs.sh +69 -0
- package/plugins/lisa-cursor/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +51 -0
- package/plugins/lisa-cursor/rules/eager/base-rules.md +70 -0
- package/plugins/lisa-cursor/rules/eager/coding-philosophy.md +27 -0
- package/plugins/lisa-cursor/rules/eager/config-resolution.md +28 -0
- package/plugins/lisa-cursor/rules/eager/documentation-source-paths.md +13 -0
- package/plugins/lisa-cursor/rules/eager/empirical-inquiry.md +22 -0
- package/plugins/lisa-cursor/rules/eager/intent-routing.md +18 -0
- package/plugins/lisa-cursor/rules/eager/leaf-only-lifecycle.md +39 -0
- package/plugins/lisa-cursor/rules/eager/prd-lifecycle-rollup.md +31 -0
- package/plugins/lisa-cursor/rules/eager/repo-scope-split.md +39 -0
- package/plugins/lisa-cursor/rules/eager/security-audit-handling.md +29 -0
- package/plugins/lisa-cursor/rules/eager/usage-accounting.md +28 -0
- package/plugins/lisa-cursor/rules/eager/verification.md +21 -0
- package/plugins/lisa-cursor/rules/eager/wiki-knowledge-source.md +16 -0
- package/plugins/lisa-cursor/rules/reference/base-rules.md +133 -0
- package/plugins/lisa-cursor/rules/reference/coding-philosophy.md +428 -0
- package/plugins/lisa-cursor/rules/reference/config-resolution.md +691 -0
- package/plugins/lisa-cursor/rules/reference/documentation-source-paths.md +13 -0
- package/plugins/lisa-cursor/rules/reference/empirical-inquiry.md +27 -0
- package/plugins/lisa-cursor/rules/reference/intent-routing.md +407 -0
- package/plugins/lisa-cursor/rules/reference/leaf-only-lifecycle.md +120 -0
- package/plugins/lisa-cursor/rules/reference/prd-lifecycle-rollup.md +156 -0
- package/plugins/lisa-cursor/rules/reference/repo-scope-split.md +58 -0
- package/plugins/lisa-cursor/rules/reference/security-audit-handling.md +30 -0
- package/plugins/lisa-cursor/rules/reference/usage-accounting.md +144 -0
- package/plugins/lisa-cursor/rules/reference/verification.md +124 -0
- package/plugins/lisa-cursor/rules/reference/wiki-knowledge-source.md +14 -0
- package/plugins/lisa-cursor/scripts/automation-status-claude-adapter.mjs +672 -0
- package/plugins/lisa-cursor/scripts/automation-status-codex-adapter.mjs +697 -0
- package/plugins/lisa-cursor/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-cursor/scripts/automation-status-expected-fleet.mjs +319 -0
- package/plugins/lisa-cursor/scripts/automation-status-report.mjs +170 -0
- package/plugins/lisa-cursor/scripts/doctor-report.mjs +143 -0
- package/plugins/lisa-cursor/scripts/plugin-sync-explain.mjs +512 -0
- package/plugins/lisa-cursor/scripts/project-ideation-idempotency-harness.mjs +319 -0
- package/plugins/lisa-cursor/scripts/queue-contract-resolution.mjs +453 -0
- package/plugins/lisa-cursor/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-cursor/scripts/queue-status-build-readers.mjs +509 -0
- package/plugins/lisa-cursor/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-cursor/skills/acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa-cursor/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-cursor/skills/atlassian-access/SKILL.md +293 -0
- package/plugins/lisa-cursor/skills/automation-status/SKILL.md +111 -0
- package/plugins/lisa-cursor/skills/bug-triage/SKILL.md +23 -0
- package/plugins/lisa-cursor/skills/codebase-research/SKILL.md +87 -0
- package/plugins/lisa-cursor/skills/codify-verification/SKILL.md +152 -0
- package/plugins/lisa-cursor/skills/confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-cursor/skills/confluence-to-tracker/SKILL.md +360 -0
- package/plugins/lisa-cursor/skills/confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa-cursor/skills/debrief/SKILL.md +94 -0
- package/plugins/lisa-cursor/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa-cursor/skills/doctor/SKILL.md +317 -0
- package/plugins/lisa-cursor/skills/epic-triage/SKILL.md +28 -0
- package/plugins/lisa-cursor/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-cursor/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-cursor/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-cursor/skills/git-submit-pr/SKILL.md +105 -0
- package/plugins/lisa-cursor/skills/github-add-journey/SKILL.md +115 -0
- package/plugins/lisa-cursor/skills/github-build-intake/SKILL.md +377 -0
- package/plugins/lisa-cursor/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa-cursor/skills/github-evidence/SKILL.md +110 -0
- package/plugins/lisa-cursor/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa-cursor/skills/github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa-cursor/skills/github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-cursor/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa-cursor/skills/github-sync/SKILL.md +119 -0
- package/plugins/lisa-cursor/skills/github-to-tracker/SKILL.md +345 -0
- package/plugins/lisa-cursor/skills/github-validate-issue/SKILL.md +331 -0
- package/plugins/lisa-cursor/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa-cursor/skills/github-write-issue/SKILL.md +339 -0
- package/plugins/lisa-cursor/skills/github-write-prd/SKILL.md +157 -0
- package/plugins/lisa-cursor/skills/implement/SKILL.md +145 -0
- package/plugins/lisa-cursor/skills/improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-cursor/skills/improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-cursor/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-cursor/skills/improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-cursor/skills/improve-tests/SKILL.md +47 -0
- package/plugins/lisa-cursor/skills/intake/SKILL.md +132 -0
- package/plugins/lisa-cursor/skills/intake-explain/SKILL.md +279 -0
- package/plugins/lisa-cursor/skills/jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa-cursor/skills/jira-build-intake/SKILL.md +286 -0
- package/plugins/lisa-cursor/skills/jira-create/SKILL.md +154 -0
- package/plugins/lisa-cursor/skills/jira-evidence/SKILL.md +90 -0
- package/plugins/lisa-cursor/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-cursor/skills/jira-journey/SKILL.md +127 -0
- package/plugins/lisa-cursor/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-cursor/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-cursor/skills/jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa-cursor/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa-cursor/skills/jira-sync/SKILL.md +95 -0
- package/plugins/lisa-cursor/skills/jira-validate-ticket/SKILL.md +318 -0
- package/plugins/lisa-cursor/skills/jira-verify/SKILL.md +30 -0
- package/plugins/lisa-cursor/skills/jira-write-ticket/SKILL.md +265 -0
- package/plugins/lisa-cursor/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-cursor/skills/linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +283 -0
- package/plugins/lisa-cursor/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa-cursor/skills/linear-evidence/SKILL.md +103 -0
- package/plugins/lisa-cursor/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa-cursor/skills/linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa-cursor/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa-cursor/skills/linear-sync/SKILL.md +114 -0
- package/plugins/lisa-cursor/skills/linear-to-tracker/SKILL.md +342 -0
- package/plugins/lisa-cursor/skills/linear-validate-issue/SKILL.md +313 -0
- package/plugins/lisa-cursor/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa-cursor/skills/linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa-cursor/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-cursor/skills/monitor/SKILL.md +48 -0
- package/plugins/lisa-cursor/skills/nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-cursor/skills/nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-cursor/skills/nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa-cursor/skills/notion-access/SKILL.md +226 -0
- package/plugins/lisa-cursor/skills/notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-cursor/skills/notion-to-tracker/SKILL.md +357 -0
- package/plugins/lisa-cursor/skills/notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa-cursor/skills/performance-review/SKILL.md +94 -0
- package/plugins/lisa-cursor/skills/plan/SKILL.md +60 -0
- package/plugins/lisa-cursor/skills/plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-cursor/skills/prd-backlink/SKILL.md +265 -0
- package/plugins/lisa-cursor/skills/prd-source-write/SKILL.md +101 -0
- package/plugins/lisa-cursor/skills/prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa-cursor/skills/product-walkthrough/SKILL.md +129 -0
- package/plugins/lisa-cursor/skills/project-ideation/SKILL.md +315 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-cursor/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-cursor/skills/quality-review/SKILL.md +54 -0
- package/plugins/lisa-cursor/skills/queue-status/SKILL.md +133 -0
- package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +584 -0
- package/plugins/lisa-cursor/skills/reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa-cursor/skills/research/SKILL.md +68 -0
- package/plugins/lisa-cursor/skills/review-local/SKILL.md +88 -0
- package/plugins/lisa-cursor/skills/root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa-cursor/skills/security-review/SKILL.md +57 -0
- package/plugins/lisa-cursor/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-cursor/skills/setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa-cursor/skills/setup-automations/SKILL.md +99 -0
- package/plugins/lisa-cursor/skills/setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-cursor/skills/setup-github/SKILL.md +268 -0
- package/plugins/lisa-cursor/skills/setup-jira/SKILL.md +198 -0
- package/plugins/lisa-cursor/skills/setup-linear/SKILL.md +251 -0
- package/plugins/lisa-cursor/skills/setup-notion/SKILL.md +316 -0
- package/plugins/lisa-cursor/skills/spec-conformance/SKILL.md +159 -0
- package/plugins/lisa-cursor/skills/task-decomposition/SKILL.md +127 -0
- package/plugins/lisa-cursor/skills/task-triage/SKILL.md +23 -0
- package/plugins/lisa-cursor/skills/tdd-implementation/SKILL.md +83 -0
- package/plugins/lisa-cursor/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-cursor/skills/test-strategy/SKILL.md +63 -0
- package/plugins/lisa-cursor/skills/ticket-triage/SKILL.md +182 -0
- package/plugins/lisa-cursor/skills/tracker-add-journey/SKILL.md +26 -0
- package/plugins/lisa-cursor/skills/tracker-build-intake/SKILL.md +64 -0
- package/plugins/lisa-cursor/skills/tracker-create/SKILL.md +26 -0
- package/plugins/lisa-cursor/skills/tracker-evidence/SKILL.md +52 -0
- package/plugins/lisa-cursor/skills/tracker-journey/SKILL.md +26 -0
- package/plugins/lisa-cursor/skills/tracker-read/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa-cursor/skills/tracker-sync/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/tracker-validate/SKILL.md +36 -0
- package/plugins/lisa-cursor/skills/tracker-verify/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/tracker-write/SKILL.md +53 -0
- package/plugins/lisa-cursor/skills/usage-accounting/SKILL.md +170 -0
- package/plugins/lisa-cursor/skills/verification-lifecycle/SKILL.md +339 -0
- package/plugins/lisa-cursor/skills/verify/SKILL.md +49 -0
- package/plugins/lisa-cursor/skills/verify-prd/SKILL.md +392 -0
- package/plugins/lisa-cursor/skills/wiki-install/SKILL.md +101 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/hooks/inject-rules.sh +16 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/hooks.json +26 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/hooks/block-migration-edits.sh +60 -0
- package/plugins/lisa-nestjs/.codex-plugin/hooks.json +15 -0
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/hooks/inject-rules.sh +22 -0
- package/plugins/lisa-rails/.codex-plugin/hooks/rubocop-on-edit.sh +78 -0
- package/plugins/lisa-rails/.codex-plugin/hooks/sg-scan-on-edit.sh +74 -0
- package/plugins/lisa-rails/.codex-plugin/hooks.json +41 -0
- package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/hooks/block-suppress-directives.sh +73 -0
- package/plugins/lisa-typescript/.codex-plugin/hooks/format-on-edit.sh +79 -0
- package/plugins/lisa-typescript/.codex-plugin/hooks/lint-on-edit.sh +134 -0
- package/plugins/lisa-typescript/.codex-plugin/hooks/sg-scan-on-edit.sh +71 -0
- package/plugins/lisa-typescript/.codex-plugin/hooks.json +34 -0
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-typescript/hooks/format-on-edit.sh +5 -3
- package/plugins/lisa-typescript/hooks/lint-on-edit.sh +5 -2
- package/plugins/lisa-typescript/hooks/sg-scan-on-edit.sh +5 -2
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/src/typescript/hooks/format-on-edit.sh +5 -3
- package/plugins/src/typescript/hooks/lint-on-edit.sh +5 -2
- package/plugins/src/typescript/hooks/sg-scan-on-edit.sh +5 -2
- package/scripts/build-plugins.sh +24 -0
- package/scripts/generate-agy-plugin-artifacts.mjs +168 -0
- package/scripts/generate-codex-plugin-artifacts.mjs +170 -12
- package/scripts/generate-copilot-plugin-artifacts.mjs +230 -0
- package/scripts/generate-cursor-plugin-artifacts.mjs +173 -0
- package/scripts/internal-agy-skill-policy.json +3 -0
- package/scripts/internal-copilot-runtime-probe.json +7 -0
- package/scripts/internal-copilot-skill-policy.json +3 -0
- package/scripts/internal-cursor-skill-policy.json +3 -0
- package/scripts/lib/per-agent-hook-filter.mjs +249 -0
- package/scripts/probes/wave3-verification.sh +106 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate the GitHub Copilot variant of a Lisa plugin from the built Claude
|
|
4
|
+
* artifact.
|
|
5
|
+
*
|
|
6
|
+
* Copilot reads `.claude-plugin/plugin.json` as a documented fallback (per its
|
|
7
|
+
* manifest lookup order: plugin.json → .plugin/ → .github/plugin/ →
|
|
8
|
+
* .claude-plugin/). The Copilot variant keeps the `.claude-plugin/` manifest
|
|
9
|
+
* but rewrites hook event names to Copilot's camelCase convention
|
|
10
|
+
* (`preToolUse`, `agentStop`, etc.) and strips hooks that don't have a Copilot
|
|
11
|
+
* equivalent (SubagentStart entries — Copilot lacks the event).
|
|
12
|
+
*
|
|
13
|
+
* Per the Wave 1 audit, Copilot ships:
|
|
14
|
+
* block-no-verify.sh, inject-rules.sh (conservative default — conditional on
|
|
15
|
+
* the rules-auto-load probe), notify-ntfy.sh, install-pkgs.sh, setup-jira-cli.sh.
|
|
16
|
+
*
|
|
17
|
+
* Per the Wave 2 pattern-b-fan-out-spec.md, this generator runs four pre-flight
|
|
18
|
+
* probes when `copilot` is on PATH and caches the results. When `copilot` is
|
|
19
|
+
* not on PATH (CI builds, contributors without Copilot), the cached values are
|
|
20
|
+
* used; absent cache values fall through to conservative defaults.
|
|
21
|
+
*
|
|
22
|
+
* Usage: node scripts/generate-copilot-plugin-artifacts.mjs <source-plugin-dir> <out-dir> <version>
|
|
23
|
+
*
|
|
24
|
+
* @module scripts/generate-copilot-plugin-artifacts
|
|
25
|
+
*/
|
|
26
|
+
import fs from "node:fs";
|
|
27
|
+
import path from "node:path";
|
|
28
|
+
import { fileURLToPath } from "node:url";
|
|
29
|
+
import {
|
|
30
|
+
filterHooksForAgent,
|
|
31
|
+
filterScriptsForAgent,
|
|
32
|
+
} from "./lib/per-agent-hook-filter.mjs";
|
|
33
|
+
|
|
34
|
+
const REPO_ROOT = path.resolve(
|
|
35
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
36
|
+
".."
|
|
37
|
+
);
|
|
38
|
+
const POLICY_PATH = path.join(
|
|
39
|
+
REPO_ROOT,
|
|
40
|
+
"scripts",
|
|
41
|
+
"internal-copilot-skill-policy.json"
|
|
42
|
+
);
|
|
43
|
+
const PROBE_CACHE_PATH = path.join(
|
|
44
|
+
REPO_ROOT,
|
|
45
|
+
"scripts",
|
|
46
|
+
"internal-copilot-runtime-probe.json"
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @returns {{ denylist?: string[] }}
|
|
51
|
+
*/
|
|
52
|
+
function readPolicy() {
|
|
53
|
+
if (!fs.existsSync(POLICY_PATH)) return {};
|
|
54
|
+
try {
|
|
55
|
+
return JSON.parse(fs.readFileSync(POLICY_PATH, "utf8"));
|
|
56
|
+
} catch {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Read cached Copilot runtime probe results.
|
|
63
|
+
*
|
|
64
|
+
* Fields documented in pattern-b-fan-out-spec.md §Pre-flight probes:
|
|
65
|
+
* - pluginRootEnvVar: e.g. "COPILOT_PLUGIN_ROOT" or null (use absolute paths)
|
|
66
|
+
* - rulesAutoLoads: boolean — Copilot reads plugin's rules/ natively
|
|
67
|
+
* - agentPathOverrideAccepted: boolean — manifest agents:"agents/" accepts non-.agent.md
|
|
68
|
+
* - cliVersion: string for invalidation
|
|
69
|
+
*
|
|
70
|
+
* @returns {{ pluginRootEnvVar?: string|null, rulesAutoLoads?: boolean, agentPathOverrideAccepted?: boolean, cliVersion?: string }}
|
|
71
|
+
*/
|
|
72
|
+
function readProbeCache() {
|
|
73
|
+
if (!fs.existsSync(PROBE_CACHE_PATH)) return {};
|
|
74
|
+
try {
|
|
75
|
+
return JSON.parse(fs.readFileSync(PROBE_CACHE_PATH, "utf8"));
|
|
76
|
+
} catch {
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Recursive directory copy with optional path-level filter.
|
|
83
|
+
*
|
|
84
|
+
* @param {string} src
|
|
85
|
+
* @param {string} dst
|
|
86
|
+
* @param {(relPath: string, stat: fs.Stats) => boolean} keep
|
|
87
|
+
*/
|
|
88
|
+
function copyDir(src, dst, keep = () => true) {
|
|
89
|
+
if (!fs.existsSync(src)) return;
|
|
90
|
+
fs.mkdirSync(dst, { recursive: true });
|
|
91
|
+
const walk = (current, rel) => {
|
|
92
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
93
|
+
const srcPath = path.join(current, entry.name);
|
|
94
|
+
const relPath = path.join(rel, entry.name);
|
|
95
|
+
const dstPath = path.join(dst, relPath);
|
|
96
|
+
const stat = fs.statSync(srcPath);
|
|
97
|
+
if (!keep(relPath, stat)) continue;
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
fs.mkdirSync(dstPath, { recursive: true });
|
|
100
|
+
walk(srcPath, relPath);
|
|
101
|
+
} else if (entry.isFile()) {
|
|
102
|
+
fs.copyFileSync(srcPath, dstPath);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
walk(src, "");
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Generate the Copilot variant.
|
|
111
|
+
*
|
|
112
|
+
* @param {string} srcDir Built Claude plugin directory (input).
|
|
113
|
+
* @param {string} outDir Copilot variant output directory.
|
|
114
|
+
* @param {string} version Version string for the manifest.
|
|
115
|
+
*/
|
|
116
|
+
export function generateCopilotVariant(srcDir, outDir, version) {
|
|
117
|
+
if (!fs.existsSync(path.join(srcDir, ".claude-plugin", "plugin.json"))) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const policy = readPolicy();
|
|
122
|
+
const denylist = new Set(policy.denylist ?? []);
|
|
123
|
+
const probe = readProbeCache();
|
|
124
|
+
|
|
125
|
+
// Conservative defaults for any probe value not in cache:
|
|
126
|
+
// - rulesAutoLoads: false (ship inject-rules.sh, accept potential double-load
|
|
127
|
+
// until empirically refuted by the probe — same as the Wave 1 audit's default)
|
|
128
|
+
// - pluginRootEnvVar: null (use ${CLAUDE_PLUGIN_ROOT} in command strings; Copilot
|
|
129
|
+
// may or may not honor it. Wave 3 verify-by-run resolves this.)
|
|
130
|
+
// - agentPathOverrideAccepted: false (rename agents/*.md to *.agent.md in the variant
|
|
131
|
+
// to be safe; if the override works, this is harmless extra renaming)
|
|
132
|
+
const copilotRulesAutoLoads = probe.rulesAutoLoads === true;
|
|
133
|
+
const renameAgentsToAgentMd = probe.agentPathOverrideAccepted !== true;
|
|
134
|
+
|
|
135
|
+
fs.rmSync(outDir, { recursive: true, force: true });
|
|
136
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
137
|
+
|
|
138
|
+
// 1. Copy source minus .codex-plugin/ and apply skill denylist.
|
|
139
|
+
copyDir(srcDir, outDir, relPath => {
|
|
140
|
+
if (relPath.startsWith(".codex-plugin/") || relPath === ".codex-plugin")
|
|
141
|
+
return false;
|
|
142
|
+
// Drop Codex-specific per-skill openai.yaml artifacts — Copilot does not use them.
|
|
143
|
+
if (/^skills\/[^/]+\/agents\/openai\.ya?ml$/.test(relPath)) return false;
|
|
144
|
+
const skillsPrefix = path.join("skills") + path.sep;
|
|
145
|
+
if (relPath.startsWith(skillsPrefix)) {
|
|
146
|
+
const skillName = relPath.slice(skillsPrefix.length).split(path.sep)[0];
|
|
147
|
+
if (denylist.has(skillName)) return false;
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// 1a. Remove any now-empty `skills/<n>/agents/` directories left by the openai.yaml strip.
|
|
153
|
+
const skillsDirForCleanup = path.join(outDir, "skills");
|
|
154
|
+
if (fs.existsSync(skillsDirForCleanup)) {
|
|
155
|
+
for (const skillName of fs.readdirSync(skillsDirForCleanup)) {
|
|
156
|
+
const agentsDir = path.join(skillsDirForCleanup, skillName, "agents");
|
|
157
|
+
if (fs.existsSync(agentsDir) && fs.readdirSync(agentsDir).length === 0) {
|
|
158
|
+
fs.rmdirSync(agentsDir);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// 2. Rename agents/<n>.md to agents/<n>.agent.md (per Copilot's default convention).
|
|
164
|
+
// This is the safe-default path; if the manifest agents-path override probe
|
|
165
|
+
// returns positive, this rename is unnecessary but harmless.
|
|
166
|
+
if (renameAgentsToAgentMd) {
|
|
167
|
+
const agentsDir = path.join(outDir, "agents");
|
|
168
|
+
if (fs.existsSync(agentsDir)) {
|
|
169
|
+
for (const entry of fs.readdirSync(agentsDir, { withFileTypes: true })) {
|
|
170
|
+
if (
|
|
171
|
+
entry.isFile() &&
|
|
172
|
+
entry.name.endsWith(".md") &&
|
|
173
|
+
!entry.name.endsWith(".agent.md")
|
|
174
|
+
) {
|
|
175
|
+
const oldPath = path.join(agentsDir, entry.name);
|
|
176
|
+
const newName = entry.name.replace(/\.md$/, ".agent.md");
|
|
177
|
+
const newPath = path.join(agentsDir, newName);
|
|
178
|
+
fs.renameSync(oldPath, newPath);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// 3. Read + filter the manifest, translate event names to Copilot camelCase.
|
|
185
|
+
const manifestPath = path.join(outDir, ".claude-plugin", "plugin.json");
|
|
186
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
187
|
+
manifest.version = version;
|
|
188
|
+
const filteredHooks = filterHooksForAgent(manifest.hooks ?? {}, "copilot", {
|
|
189
|
+
copilotRulesAutoLoads,
|
|
190
|
+
});
|
|
191
|
+
if (filteredHooks) {
|
|
192
|
+
manifest.hooks = filteredHooks;
|
|
193
|
+
} else {
|
|
194
|
+
delete manifest.hooks;
|
|
195
|
+
}
|
|
196
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
197
|
+
|
|
198
|
+
// 4. Filter the hooks/ directory.
|
|
199
|
+
const hooksDir = path.join(outDir, "hooks");
|
|
200
|
+
if (fs.existsSync(hooksDir)) {
|
|
201
|
+
const all = fs
|
|
202
|
+
.readdirSync(hooksDir, { withFileTypes: true })
|
|
203
|
+
.filter(e => e.isFile() && e.name.endsWith(".sh"))
|
|
204
|
+
.map(e => e.name);
|
|
205
|
+
// Copilot ships everything Cursor ships, plus inject-rules.sh when
|
|
206
|
+
// copilotRulesAutoLoads is false. The filter helper handles this.
|
|
207
|
+
const keep = new Set(filterScriptsForAgent(all, "copilot"));
|
|
208
|
+
// If the rules-auto-load probe is positive, ALSO strip inject-rules.sh.
|
|
209
|
+
if (copilotRulesAutoLoads) keep.delete("inject-rules.sh");
|
|
210
|
+
for (const name of all) {
|
|
211
|
+
if (!keep.has(name)) fs.rmSync(path.join(hooksDir, name));
|
|
212
|
+
}
|
|
213
|
+
if (fs.readdirSync(hooksDir).length === 0) {
|
|
214
|
+
fs.rmdirSync(hooksDir);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// CLI entrypoint.
|
|
220
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
221
|
+
const [srcDir, outDir, version] = process.argv.slice(2);
|
|
222
|
+
if (!srcDir || !outDir || !version) {
|
|
223
|
+
console.error(
|
|
224
|
+
"Usage: generate-copilot-plugin-artifacts.mjs <src> <out> <version>"
|
|
225
|
+
);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
generateCopilotVariant(srcDir, outDir, version);
|
|
229
|
+
console.log(`Generated Copilot variant at ${outDir} (v${version})`);
|
|
230
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate the Cursor variant of a Lisa plugin from the built Claude artifact.
|
|
4
|
+
*
|
|
5
|
+
* Cursor reads `.claude-plugin/plugin.json` natively via its dual-namespace
|
|
6
|
+
* loader (also accepts `.cursor-plugin/plugin.json`). The Cursor variant
|
|
7
|
+
* therefore keeps the `.claude-plugin/` manifest but filters the hooks block
|
|
8
|
+
* to drop `inject-rules.sh` (Cursor auto-loads `rules/` from plugins natively,
|
|
9
|
+
* so shipping the polyfill would double-inject), `enforce-team-first.sh`
|
|
10
|
+
* (Claude-team-specific), and the `entire hooks claude-code *` analytics calls
|
|
11
|
+
* (Claude-only).
|
|
12
|
+
*
|
|
13
|
+
* The variant's `hooks/` directory mirrors the surviving script ship-list.
|
|
14
|
+
*
|
|
15
|
+
* Usage: node scripts/generate-cursor-plugin-artifacts.mjs <source-plugin-dir> <out-dir> <version>
|
|
16
|
+
*
|
|
17
|
+
* Where:
|
|
18
|
+
* source-plugin-dir: path to the built Claude plugin (e.g. plugins/lisa/)
|
|
19
|
+
* out-dir: path to write the Cursor variant (e.g. plugins/lisa-cursor/)
|
|
20
|
+
* version: version string injected into the manifest
|
|
21
|
+
*
|
|
22
|
+
* @module scripts/generate-cursor-plugin-artifacts
|
|
23
|
+
*/
|
|
24
|
+
import fs from "node:fs";
|
|
25
|
+
import path from "node:path";
|
|
26
|
+
import { fileURLToPath } from "node:url";
|
|
27
|
+
import {
|
|
28
|
+
filterHooksForAgent,
|
|
29
|
+
filterScriptsForAgent,
|
|
30
|
+
} from "./lib/per-agent-hook-filter.mjs";
|
|
31
|
+
|
|
32
|
+
const REPO_ROOT = path.resolve(
|
|
33
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
34
|
+
".."
|
|
35
|
+
);
|
|
36
|
+
const POLICY_PATH = path.join(
|
|
37
|
+
REPO_ROOT,
|
|
38
|
+
"scripts",
|
|
39
|
+
"internal-cursor-skill-policy.json"
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Read the per-agent skill policy file. Missing-policy is treated as
|
|
44
|
+
* "ship all skills" (no denylist).
|
|
45
|
+
*
|
|
46
|
+
* @returns {{ denylist?: string[] }}
|
|
47
|
+
*/
|
|
48
|
+
function readPolicy() {
|
|
49
|
+
if (!fs.existsSync(POLICY_PATH)) return {};
|
|
50
|
+
try {
|
|
51
|
+
return JSON.parse(fs.readFileSync(POLICY_PATH, "utf8"));
|
|
52
|
+
} catch {
|
|
53
|
+
return {};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Recursive directory copy with optional path-level filter.
|
|
59
|
+
*
|
|
60
|
+
* @param {string} src
|
|
61
|
+
* @param {string} dst
|
|
62
|
+
* @param {(relPath: string, stat: fs.Stats) => boolean} keep
|
|
63
|
+
*/
|
|
64
|
+
function copyDir(src, dst, keep = () => true) {
|
|
65
|
+
if (!fs.existsSync(src)) return;
|
|
66
|
+
fs.mkdirSync(dst, { recursive: true });
|
|
67
|
+
const walk = (current, rel) => {
|
|
68
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
69
|
+
const srcPath = path.join(current, entry.name);
|
|
70
|
+
const relPath = path.join(rel, entry.name);
|
|
71
|
+
const dstPath = path.join(dst, relPath);
|
|
72
|
+
const stat = fs.statSync(srcPath);
|
|
73
|
+
if (!keep(relPath, stat)) continue;
|
|
74
|
+
if (entry.isDirectory()) {
|
|
75
|
+
fs.mkdirSync(dstPath, { recursive: true });
|
|
76
|
+
walk(srcPath, relPath);
|
|
77
|
+
} else if (entry.isFile()) {
|
|
78
|
+
fs.copyFileSync(srcPath, dstPath);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
walk(src, "");
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Generate the Cursor variant.
|
|
87
|
+
*
|
|
88
|
+
* @param {string} srcDir Built Claude plugin directory (input).
|
|
89
|
+
* @param {string} outDir Cursor variant output directory.
|
|
90
|
+
* @param {string} version Version string for the manifest.
|
|
91
|
+
*/
|
|
92
|
+
export function generateCursorVariant(srcDir, outDir, version) {
|
|
93
|
+
if (!fs.existsSync(path.join(srcDir, ".claude-plugin", "plugin.json"))) {
|
|
94
|
+
return; // base plugin has no manifest; nothing to do
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const policy = readPolicy();
|
|
98
|
+
const denylist = new Set(policy.denylist ?? []);
|
|
99
|
+
|
|
100
|
+
fs.rmSync(outDir, { recursive: true, force: true });
|
|
101
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
102
|
+
|
|
103
|
+
// 1. Copy the source plugin, applying the skill denylist filter.
|
|
104
|
+
copyDir(srcDir, outDir, relPath => {
|
|
105
|
+
// Drop the `.codex-plugin/` directory — Cursor does not consume it.
|
|
106
|
+
if (relPath.startsWith(".codex-plugin/") || relPath === ".codex-plugin")
|
|
107
|
+
return false;
|
|
108
|
+
// Drop Codex-specific per-skill openai.yaml artifacts — Cursor does not use them.
|
|
109
|
+
// These live at skills/<n>/agents/openai.yaml and are generated by the Codex
|
|
110
|
+
// artifact builder; the per-agent variants ship only the SKILL.md.
|
|
111
|
+
if (/^skills\/[^/]+\/agents\/openai\.ya?ml$/.test(relPath)) return false;
|
|
112
|
+
// Apply the per-agent skill denylist (skills/<name>/).
|
|
113
|
+
const skillsPrefix = path.join("skills") + path.sep;
|
|
114
|
+
if (relPath.startsWith(skillsPrefix)) {
|
|
115
|
+
const skillName = relPath.slice(skillsPrefix.length).split(path.sep)[0];
|
|
116
|
+
if (denylist.has(skillName)) return false;
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// 1a. Remove any now-empty `skills/<n>/agents/` directories left by the openai.yaml strip.
|
|
122
|
+
const skillsDir = path.join(outDir, "skills");
|
|
123
|
+
if (fs.existsSync(skillsDir)) {
|
|
124
|
+
for (const skillName of fs.readdirSync(skillsDir)) {
|
|
125
|
+
const agentsDir = path.join(skillsDir, skillName, "agents");
|
|
126
|
+
if (fs.existsSync(agentsDir) && fs.readdirSync(agentsDir).length === 0) {
|
|
127
|
+
fs.rmdirSync(agentsDir);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// 2. Read + filter the manifest.
|
|
133
|
+
const manifestPath = path.join(outDir, ".claude-plugin", "plugin.json");
|
|
134
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
135
|
+
manifest.version = version;
|
|
136
|
+
const filteredHooks = filterHooksForAgent(manifest.hooks ?? {}, "cursor");
|
|
137
|
+
if (filteredHooks) {
|
|
138
|
+
manifest.hooks = filteredHooks;
|
|
139
|
+
} else {
|
|
140
|
+
delete manifest.hooks;
|
|
141
|
+
}
|
|
142
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
143
|
+
|
|
144
|
+
// 3. Filter the hooks/ directory to match the script ship-list.
|
|
145
|
+
const hooksDir = path.join(outDir, "hooks");
|
|
146
|
+
if (fs.existsSync(hooksDir)) {
|
|
147
|
+
const all = fs
|
|
148
|
+
.readdirSync(hooksDir, { withFileTypes: true })
|
|
149
|
+
.filter(e => e.isFile() && e.name.endsWith(".sh"))
|
|
150
|
+
.map(e => e.name);
|
|
151
|
+
const keep = new Set(filterScriptsForAgent(all, "cursor"));
|
|
152
|
+
for (const name of all) {
|
|
153
|
+
if (!keep.has(name)) fs.rmSync(path.join(hooksDir, name));
|
|
154
|
+
}
|
|
155
|
+
// Remove empty hooks dir.
|
|
156
|
+
if (fs.readdirSync(hooksDir).length === 0) {
|
|
157
|
+
fs.rmdirSync(hooksDir);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// CLI entrypoint.
|
|
163
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
164
|
+
const [srcDir, outDir, version] = process.argv.slice(2);
|
|
165
|
+
if (!srcDir || !outDir || !version) {
|
|
166
|
+
console.error(
|
|
167
|
+
"Usage: generate-cursor-plugin-artifacts.mjs <src> <out> <version>"
|
|
168
|
+
);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
generateCursorVariant(srcDir, outDir, version);
|
|
172
|
+
console.log(`Generated Cursor variant at ${outDir} (v${version})`);
|
|
173
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Cached Copilot runtime probe results. Updated by Wave 3 verification probes (Task #17) and consumed by scripts/generate-copilot-plugin-artifacts.mjs. Missing values fall through to conservative defaults.",
|
|
3
|
+
"cliVersion": null,
|
|
4
|
+
"pluginRootEnvVar": null,
|
|
5
|
+
"rulesAutoLoads": null,
|
|
6
|
+
"agentPathOverrideAccepted": null
|
|
7
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-agent hook ship/strip filter for Pattern B plugin variant generators.
|
|
3
|
+
*
|
|
4
|
+
* Implements the per-agent ship-list from
|
|
5
|
+
* wiki/architecture/lisa-hook-per-agent-ship-list.md (Wave 1 audit).
|
|
6
|
+
*
|
|
7
|
+
* Each Pattern B per-agent plugin variant generator imports `filterHooksForAgent`
|
|
8
|
+
* to walk the source plugin's hook block and the on-disk hook scripts, returning
|
|
9
|
+
* an agent-appropriate filtered set.
|
|
10
|
+
*
|
|
11
|
+
* Agent strategies:
|
|
12
|
+
* - Claude: keep everything (this module is not invoked for the Claude variant)
|
|
13
|
+
* - Codex: ship universal + SubagentStart (handled by the Codex generator's own
|
|
14
|
+
* ship list — this module is not invoked for Codex; Codex uses the existing
|
|
15
|
+
* generate-codex-plugin-artifacts.mjs path)
|
|
16
|
+
* - Cursor: strip inject-rules.sh (Cursor auto-loads rules/ natively), strip
|
|
17
|
+
* Claude-team-specific scripts and `entire hooks claude-code *` calls
|
|
18
|
+
* - agy: ship NOTHING (agy plugin hooks do not fire in -p mode per verified-by-run)
|
|
19
|
+
* - Copilot: strip SubagentStart hooks (event missing), strip Claude-team-specific
|
|
20
|
+
* scripts, conditionally strip inject-rules.sh if the rules-auto-load probe is
|
|
21
|
+
* positive (caller passes copilotRulesAutoLoads via options)
|
|
22
|
+
*
|
|
23
|
+
* @module scripts/lib/per-agent-hook-filter
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/** Per-script applicability rules from the Wave 1 audit. */
|
|
27
|
+
const SCRIPT_RULES = {
|
|
28
|
+
"block-no-verify.sh": {
|
|
29
|
+
claude: true,
|
|
30
|
+
codex: true,
|
|
31
|
+
cursor: true,
|
|
32
|
+
agy: false,
|
|
33
|
+
copilot: true,
|
|
34
|
+
},
|
|
35
|
+
"enforce-team-first.sh": {
|
|
36
|
+
claude: true,
|
|
37
|
+
codex: false,
|
|
38
|
+
cursor: false,
|
|
39
|
+
agy: false,
|
|
40
|
+
copilot: false,
|
|
41
|
+
},
|
|
42
|
+
"inject-rules.sh": {
|
|
43
|
+
claude: true,
|
|
44
|
+
codex: true,
|
|
45
|
+
cursor: false, // collision: Cursor auto-loads rules/ natively
|
|
46
|
+
agy: false, // hooks don't fire in -p
|
|
47
|
+
copilot: true, // conservative default; conditionally stripped if rules-auto-load probe positive
|
|
48
|
+
},
|
|
49
|
+
"inject-flow-context.sh": {
|
|
50
|
+
claude: true,
|
|
51
|
+
codex: true,
|
|
52
|
+
cursor: false, // SubagentStart unverified on Cursor; conservative default
|
|
53
|
+
agy: false,
|
|
54
|
+
copilot: false, // Copilot lacks SubagentStart event
|
|
55
|
+
},
|
|
56
|
+
"install-pkgs.sh": {
|
|
57
|
+
claude: true,
|
|
58
|
+
codex: true,
|
|
59
|
+
cursor: true,
|
|
60
|
+
agy: false,
|
|
61
|
+
copilot: true,
|
|
62
|
+
},
|
|
63
|
+
"notify-ntfy.sh": {
|
|
64
|
+
claude: true,
|
|
65
|
+
codex: true,
|
|
66
|
+
cursor: true,
|
|
67
|
+
agy: false,
|
|
68
|
+
copilot: true,
|
|
69
|
+
},
|
|
70
|
+
"setup-jira-cli.sh": {
|
|
71
|
+
claude: true,
|
|
72
|
+
codex: true,
|
|
73
|
+
cursor: true,
|
|
74
|
+
agy: false,
|
|
75
|
+
copilot: true,
|
|
76
|
+
},
|
|
77
|
+
// Unregistered scripts — exclude by default until classified.
|
|
78
|
+
"ticket-sync-reminder.sh": {
|
|
79
|
+
claude: false,
|
|
80
|
+
codex: false,
|
|
81
|
+
cursor: false,
|
|
82
|
+
agy: false,
|
|
83
|
+
copilot: false,
|
|
84
|
+
},
|
|
85
|
+
"track-plan-sessions.sh": {
|
|
86
|
+
claude: false,
|
|
87
|
+
codex: false,
|
|
88
|
+
cursor: false,
|
|
89
|
+
agy: false,
|
|
90
|
+
copilot: false,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/** Universal exclude pattern: development helpers. */
|
|
95
|
+
const SCRIPT_EXCLUDE_PATTERNS = [/debug/i];
|
|
96
|
+
|
|
97
|
+
/** Hook command shape: { type: "command", command: "..." } */
|
|
98
|
+
const isEntireClaudeCodeCommand = cmd =>
|
|
99
|
+
typeof cmd === "string" &&
|
|
100
|
+
/^command -v entire >\/dev\/null 2>&1 && entire hooks claude-code /.test(cmd);
|
|
101
|
+
|
|
102
|
+
const scriptNameFromCommand = cmd => {
|
|
103
|
+
if (typeof cmd !== "string") return null;
|
|
104
|
+
const match = /\$\{CLAUDE_PLUGIN_ROOT\}\/hooks\/([^/\s]+\.sh)/.exec(cmd);
|
|
105
|
+
return match ? match[1] : null;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Translate Claude PascalCase event names to a target agent's native casing.
|
|
110
|
+
*
|
|
111
|
+
* Per the Wave 1 audit's Wave 3 contract step 4 + step 6:
|
|
112
|
+
* - Cursor: keep PascalCase (loader auto-normalizes)
|
|
113
|
+
* - Codex: keep PascalCase
|
|
114
|
+
* - Copilot: rewrite to lowercase / camelCase per Copilot's docs
|
|
115
|
+
*
|
|
116
|
+
* @param {string} eventName Claude event name (e.g. "PreToolUse")
|
|
117
|
+
* @param {"cursor"|"agy"|"copilot"} agent Target agent slug
|
|
118
|
+
* @returns {string} Translated event name
|
|
119
|
+
*/
|
|
120
|
+
export function translateEventName(eventName, agent) {
|
|
121
|
+
if (agent !== "copilot") return eventName;
|
|
122
|
+
const COPILOT_EVENTS = {
|
|
123
|
+
PreToolUse: "preToolUse",
|
|
124
|
+
PostToolUse: "postToolUse",
|
|
125
|
+
SessionStart: "sessionStart",
|
|
126
|
+
SessionEnd: "sessionEnd",
|
|
127
|
+
UserPromptSubmit: "userPromptSubmitted",
|
|
128
|
+
Stop: "agentStop",
|
|
129
|
+
SubagentStart: "subagentStart", // not supported but include for symmetry
|
|
130
|
+
SubagentStop: "subagentStop",
|
|
131
|
+
};
|
|
132
|
+
return COPILOT_EVENTS[eventName] ?? eventName;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Whether a script ships to the given agent under the Wave 1 audit ship-list.
|
|
137
|
+
*
|
|
138
|
+
* Falls through to true (ship) for scripts not in the rules table — the
|
|
139
|
+
* conservative default for unknown scripts is to include them; explicit
|
|
140
|
+
* exclusions live in SCRIPT_RULES.
|
|
141
|
+
*
|
|
142
|
+
* @param {string} scriptName e.g. "inject-rules.sh"
|
|
143
|
+
* @param {"claude"|"codex"|"cursor"|"agy"|"copilot"} agent
|
|
144
|
+
* @returns {boolean}
|
|
145
|
+
*/
|
|
146
|
+
export function shouldShipScript(scriptName, agent) {
|
|
147
|
+
// Universal exclude (debug helpers etc.)
|
|
148
|
+
if (SCRIPT_EXCLUDE_PATTERNS.some(re => re.test(scriptName))) return false;
|
|
149
|
+
const rules = SCRIPT_RULES[scriptName];
|
|
150
|
+
if (!rules) return true;
|
|
151
|
+
return Boolean(rules[agent]);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Whether a hook command entry ships to the given agent.
|
|
156
|
+
*
|
|
157
|
+
* Three classes of hook commands:
|
|
158
|
+
* 1. `entire hooks claude-code *` — Claude-only, strip for everyone else
|
|
159
|
+
* 2. `${CLAUDE_PLUGIN_ROOT}/hooks/<script>` — ship per script rules
|
|
160
|
+
* 3. Anything else — ship by default (rare; conservative)
|
|
161
|
+
*
|
|
162
|
+
* @param {{ type: string, command: string }} hook
|
|
163
|
+
* @param {string} eventName
|
|
164
|
+
* @param {"cursor"|"agy"|"copilot"|"codex"} agent
|
|
165
|
+
* @param {{ copilotRulesAutoLoads?: boolean }} [opts]
|
|
166
|
+
* @returns {boolean}
|
|
167
|
+
*/
|
|
168
|
+
export function shouldShipHook(hook, _eventName, agent, opts = {}) {
|
|
169
|
+
if (!hook || typeof hook.command !== "string") return false;
|
|
170
|
+
const { command } = hook;
|
|
171
|
+
|
|
172
|
+
// entire calls are Claude-only.
|
|
173
|
+
if (isEntireClaudeCodeCommand(command)) return false;
|
|
174
|
+
|
|
175
|
+
// Script reference: look up per-script rules.
|
|
176
|
+
const scriptName = scriptNameFromCommand(command);
|
|
177
|
+
if (scriptName) {
|
|
178
|
+
// Cursor collision rule for rules + Copilot conditional rules strip
|
|
179
|
+
if (scriptName === "inject-rules.sh") {
|
|
180
|
+
if (agent === "cursor") return false;
|
|
181
|
+
if (agent === "agy") return false;
|
|
182
|
+
if (agent === "copilot" && opts.copilotRulesAutoLoads === true)
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
return shouldShipScript(scriptName, agent);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Anything else (rare) — ship by default
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Filter the plugin's hook block for a target agent and translate event names.
|
|
194
|
+
*
|
|
195
|
+
* Returns the new hook block (or undefined when the block ends up empty after
|
|
196
|
+
* filtering, which means the manifest should omit the hooks field entirely).
|
|
197
|
+
*
|
|
198
|
+
* For agy this function returns undefined regardless of input because agy
|
|
199
|
+
* variants ship no hooks.
|
|
200
|
+
*
|
|
201
|
+
* @param {Record<string, Array<{ matcher?: string, hooks: Array<object> }>>} hookBlock
|
|
202
|
+
* The Claude-format hook block from .claude-plugin/plugin.json.
|
|
203
|
+
* @param {"cursor"|"agy"|"copilot"|"codex"} agent
|
|
204
|
+
* @param {{ copilotRulesAutoLoads?: boolean }} [opts]
|
|
205
|
+
* @returns {Record<string, Array<{ matcher?: string, hooks: Array<object> }>> | undefined}
|
|
206
|
+
*/
|
|
207
|
+
export function filterHooksForAgent(hookBlock, agent, opts = {}) {
|
|
208
|
+
if (agent === "agy") return undefined;
|
|
209
|
+
if (!hookBlock || typeof hookBlock !== "object") return undefined;
|
|
210
|
+
|
|
211
|
+
/** @type {Record<string, Array<{ matcher?: string, hooks: Array<object> }>>} */
|
|
212
|
+
const out = {};
|
|
213
|
+
|
|
214
|
+
for (const [claudeEventName, entries] of Object.entries(hookBlock)) {
|
|
215
|
+
if (!Array.isArray(entries)) continue;
|
|
216
|
+
const filteredEntries = [];
|
|
217
|
+
for (const entry of entries) {
|
|
218
|
+
const handlerArray = entry?.hooks;
|
|
219
|
+
if (!Array.isArray(handlerArray)) continue;
|
|
220
|
+
const filteredHandlers = handlerArray.filter(h =>
|
|
221
|
+
shouldShipHook(h, claudeEventName, agent, opts)
|
|
222
|
+
);
|
|
223
|
+
if (filteredHandlers.length > 0) {
|
|
224
|
+
filteredEntries.push({ ...entry, hooks: filteredHandlers });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (filteredEntries.length > 0) {
|
|
228
|
+
const translated = translateEventName(claudeEventName, agent);
|
|
229
|
+
out[translated] = filteredEntries;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Walk a hooks/ directory and return the list of script filenames that should
|
|
238
|
+
* ship to the agent. Scripts referenced by no surviving hook entry are
|
|
239
|
+
* naturally excluded by callers (they should call this to enumerate files
|
|
240
|
+
* to keep AFTER filtering the manifest).
|
|
241
|
+
*
|
|
242
|
+
* @param {string[]} scriptFilenames Filenames found in hooks/
|
|
243
|
+
* @param {"cursor"|"agy"|"copilot"|"codex"} agent
|
|
244
|
+
* @returns {string[]}
|
|
245
|
+
*/
|
|
246
|
+
export function filterScriptsForAgent(scriptFilenames, agent) {
|
|
247
|
+
if (agent === "agy") return [];
|
|
248
|
+
return scriptFilenames.filter(name => shouldShipScript(name, agent));
|
|
249
|
+
}
|