@codyswann/lisa 2.119.1 → 2.121.1
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 +102 -0
- package/dist/agy/mcp-installer.d.ts.map +1 -0
- package/dist/agy/mcp-installer.js +155 -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 +88 -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 +68 -0
- package/dist/codex/lisa-plugin-detection.d.ts.map +1 -0
- package/dist/codex/lisa-plugin-detection.js +139 -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 +144 -0
- package/dist/copilot/plugin-installer.js.map +1 -0
- package/dist/core/config.d.ts +28 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +24 -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 +99 -2
- 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/plugin.json +2 -1
- package/plugins/lisa/hooks/hooks.json +75 -0
- 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/plugin.json +2 -1
- package/plugins/lisa-harper-fabric/hooks/hooks.json +26 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-nestjs/hooks/hooks.json +15 -0
- 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/plugin.json +2 -1
- package/plugins/lisa-rails/hooks/hooks.json +41 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- 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/hooks.json +34 -0
- 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 +150 -12
- package/scripts/generate-copilot-plugin-artifacts.mjs +235 -0
- package/scripts/generate-cursor-plugin-artifacts.mjs +177 -0
- package/scripts/internal-agy-skill-policy.json +3 -0
- package/scripts/internal-copilot-runtime-probe.json +13 -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
|
@@ -3,18 +3,29 @@
|
|
|
3
3
|
* Generate Codex plugin artifacts from the built Claude plugin directories.
|
|
4
4
|
*
|
|
5
5
|
* Claude remains Lisa's production path; this script derives the .codex-plugin
|
|
6
|
-
* metadata (skills + MCP pointers) every time plugins are rebuilt.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* (Claude-team-specific)
|
|
16
|
-
*
|
|
17
|
-
* has
|
|
6
|
+
* metadata (skills + MCP pointers + hooks) every time plugins are rebuilt.
|
|
7
|
+
*
|
|
8
|
+
* HOOKS: as of Codex 0.125.0 (verified via codex features list showing
|
|
9
|
+
* codex_hooks as `stable`), the plugin manifest accepts a `hooks` field
|
|
10
|
+
* pointing at a sibling `hooks.json`. `emitCodexHooks` below derives the
|
|
11
|
+
* Codex-shape hooks block from the Claude manifest by applying the Wave 1
|
|
12
|
+
* per-agent ship-list audit
|
|
13
|
+
* (wiki/architecture/lisa-hook-per-agent-ship-list.md):
|
|
14
|
+
* - Drop every `entire hooks claude-code *` command (Claude-only analytics).
|
|
15
|
+
* - Drop every reference to `enforce-team-first.sh` (Claude-team-specific).
|
|
16
|
+
* - Drop `inject-flow-context.sh` ONLY when targeting an agent without
|
|
17
|
+
* SubagentStart (Codex 0.125.0 has SubagentStart, so we ship it).
|
|
18
|
+
* - Rewrite ${CLAUDE_PLUGIN_ROOT}/hooks/<n>.sh to ./hooks/<n>.sh so the
|
|
19
|
+
* hooks.json sibling can resolve the script path relative to itself.
|
|
20
|
+
* - Copy the surviving scripts into .codex-plugin/hooks/.
|
|
21
|
+
*
|
|
22
|
+
* SessionEnd is documented as unsupported by Codex; the `entire hooks
|
|
23
|
+
* claude-code session-end` hook is stripped per the Claude-only rule above
|
|
24
|
+
* regardless of event support.
|
|
25
|
+
*
|
|
26
|
+
* src/codex/hooks-installer.ts remains as the documented fallback for users
|
|
27
|
+
* who install Lisa via `lisa apply` without enabling the marketplace plugin —
|
|
28
|
+
* src/codex/lisa-plugin-detection.ts is the helper that gates that fallback.
|
|
18
29
|
*/
|
|
19
30
|
import fs from "node:fs";
|
|
20
31
|
import path from "node:path";
|
|
@@ -441,10 +452,64 @@ function main() {
|
|
|
441
452
|
const pluginName = claudeManifest.name;
|
|
442
453
|
|
|
443
454
|
pruneInternalCodexSkills(pluginDir);
|
|
455
|
+
emitCodexHooks(pluginDir, claudeManifest);
|
|
444
456
|
writeCodexManifest(pluginDir, claudeManifest, pluginName, versionArg);
|
|
445
457
|
writeSkillAgents(pluginDir);
|
|
446
458
|
}
|
|
447
459
|
|
|
460
|
+
/**
|
|
461
|
+
* Per Wave 1 audit + Codex 0.125.0 supporting plugin-bundled hooks: derive
|
|
462
|
+
* a Codex-shaped hooks.json from the Claude manifest's hooks block and copy
|
|
463
|
+
* the surviving scripts into .codex-plugin/hooks/.
|
|
464
|
+
*
|
|
465
|
+
* No-op when the input has no hooks block or every entry is stripped.
|
|
466
|
+
*
|
|
467
|
+
* @param {string} pluginDir Built Claude plugin directory.
|
|
468
|
+
* @param {object} claudeManifest Parsed contents of .claude-plugin/plugin.json.
|
|
469
|
+
*/
|
|
470
|
+
function emitCodexHooks(pluginDir, claudeManifest) {
|
|
471
|
+
// Codex auto-discovers a plugin's hooks at <plugin-root>/hooks/hooks.json and
|
|
472
|
+
// resolves the manifest hooks pointer + ${PLUGIN_ROOT} relative to the plugin
|
|
473
|
+
// root (developers.openai.com/codex/plugins/build). The hook scripts already
|
|
474
|
+
// ship at <plugin-root>/hooks/ (copied from plugins/src by the Claude build),
|
|
475
|
+
// so the Codex hooks.json lives alongside them and no script copy is needed.
|
|
476
|
+
const hooksDir = path.join(pluginDir, "hooks");
|
|
477
|
+
const hooksJsonPath = path.join(hooksDir, "hooks.json");
|
|
478
|
+
// Clean up the pre-2.121 layout (hooks.json + copied scripts under
|
|
479
|
+
// .codex-plugin/) so a rebuilt plugin never ships both.
|
|
480
|
+
const legacyCodexPluginDir = path.join(pluginDir, ".codex-plugin");
|
|
481
|
+
fs.rmSync(path.join(legacyCodexPluginDir, "hooks.json"), { force: true });
|
|
482
|
+
fs.rmSync(path.join(legacyCodexPluginDir, "hooks"), {
|
|
483
|
+
force: true,
|
|
484
|
+
recursive: true,
|
|
485
|
+
});
|
|
486
|
+
const filtered = filterCodexHooks(claudeManifest.hooks);
|
|
487
|
+
if (filtered === null) {
|
|
488
|
+
// Nothing survived the filter. Remove any stale hooks.json so
|
|
489
|
+
// componentPointers() doesn't keep advertising removed hooks.
|
|
490
|
+
fs.rmSync(hooksJsonPath, { force: true });
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
494
|
+
fs.writeFileSync(
|
|
495
|
+
hooksJsonPath,
|
|
496
|
+
`${JSON.stringify(buildCodexHooksDocument(filtered), null, 2)}\n`
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Wrap a filtered events block in the document shape Codex's hooks.json parser
|
|
502
|
+
* expects: events nested under a top-level "hooks" key (see the HooksFile
|
|
503
|
+
* contract in src/codex/hooks-merger.ts). Writing the events block at the root
|
|
504
|
+
* would not be recognized as hooks.
|
|
505
|
+
*
|
|
506
|
+
* @param {object} filtered Codex-shaped events block from filterCodexHooks.
|
|
507
|
+
* @returns {{ hooks: object }} The hooks.json document root.
|
|
508
|
+
*/
|
|
509
|
+
export function buildCodexHooksDocument(filtered) {
|
|
510
|
+
return { hooks: filtered };
|
|
511
|
+
}
|
|
512
|
+
|
|
448
513
|
function writeCodexManifest(pluginDir, claudeManifest, pluginName, version) {
|
|
449
514
|
const metadata = metadataFor(pluginName, claudeManifest);
|
|
450
515
|
const manifest = {
|
|
@@ -484,9 +549,82 @@ function componentPointers(pluginDir) {
|
|
|
484
549
|
...(fs.existsSync(path.join(pluginDir, ".mcp.json"))
|
|
485
550
|
? { mcpServers: "./.mcp.json" }
|
|
486
551
|
: {}),
|
|
552
|
+
...(fs.existsSync(path.join(pluginDir, "hooks", "hooks.json"))
|
|
553
|
+
? { hooks: "./hooks/hooks.json" }
|
|
554
|
+
: {}),
|
|
487
555
|
};
|
|
488
556
|
}
|
|
489
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Per the Wave 1 hook audit, derive Codex-shaped hooks.json from the
|
|
560
|
+
* Claude plugin.json hooks block:
|
|
561
|
+
* - Drop every `entire hooks claude-code *` command (Claude-only).
|
|
562
|
+
* - Drop every reference to `enforce-team-first.sh` (Claude-team-specific).
|
|
563
|
+
* - Rewrite ${CLAUDE_PLUGIN_ROOT}/hooks/<script>.sh to
|
|
564
|
+
* ${PLUGIN_ROOT}/hooks/<script>.sh (Codex exposes the installed plugin
|
|
565
|
+
* root to hook commands as ${PLUGIN_ROOT}).
|
|
566
|
+
* - Drop matchers that produce no surviving handlers.
|
|
567
|
+
*
|
|
568
|
+
* When the resulting block is empty, no hooks.json is written and the
|
|
569
|
+
* manifest pointer omits the hooks field.
|
|
570
|
+
*
|
|
571
|
+
* @param {object} hooksBlock The hooks field from the Claude plugin manifest.
|
|
572
|
+
* @returns {object | null} A Codex-shape hooks block or null when empty.
|
|
573
|
+
*/
|
|
574
|
+
export function filterCodexHooks(hooksBlock) {
|
|
575
|
+
if (!hooksBlock || typeof hooksBlock !== "object") return null;
|
|
576
|
+
const codexStrip = new Set(["enforce-team-first.sh"]);
|
|
577
|
+
const isEntire = cmd =>
|
|
578
|
+
typeof cmd === "string" &&
|
|
579
|
+
/command -v entire >\/dev\/null 2>&1 && entire hooks claude-code /.test(
|
|
580
|
+
cmd
|
|
581
|
+
);
|
|
582
|
+
const scriptName = cmd => {
|
|
583
|
+
if (typeof cmd !== "string") return null;
|
|
584
|
+
const m = /\$\{CLAUDE_PLUGIN_ROOT\}\/hooks\/([^/\s]+\.sh)/.exec(cmd);
|
|
585
|
+
return m ? m[1] : null;
|
|
586
|
+
};
|
|
587
|
+
const out = {};
|
|
588
|
+
for (const [event, entries] of Object.entries(hooksBlock)) {
|
|
589
|
+
if (!Array.isArray(entries)) continue;
|
|
590
|
+
const keptEntries = [];
|
|
591
|
+
for (const entry of entries) {
|
|
592
|
+
const handlers = entry?.hooks;
|
|
593
|
+
if (!Array.isArray(handlers)) continue;
|
|
594
|
+
const keptHandlers = handlers.flatMap(h => {
|
|
595
|
+
if (!h || typeof h.command !== "string") return [];
|
|
596
|
+
if (isEntire(h.command)) return [];
|
|
597
|
+
const script = scriptName(h.command);
|
|
598
|
+
if (script !== null) {
|
|
599
|
+
if (codexStrip.has(script)) return [];
|
|
600
|
+
return [
|
|
601
|
+
{
|
|
602
|
+
...h,
|
|
603
|
+
// Codex exposes the installed plugin root as ${PLUGIN_ROOT} to hook
|
|
604
|
+
// commands (developers.openai.com/codex/plugins/build). A bare
|
|
605
|
+
// ./hooks/ path would resolve against the session cwd, not the
|
|
606
|
+
// plugin, so rewrite to the plugin-root env var.
|
|
607
|
+
command: h.command.replaceAll(
|
|
608
|
+
"${CLAUDE_PLUGIN_ROOT}/hooks/",
|
|
609
|
+
"${PLUGIN_ROOT}/hooks/"
|
|
610
|
+
),
|
|
611
|
+
},
|
|
612
|
+
];
|
|
613
|
+
}
|
|
614
|
+
// Unknown command shape — ship verbatim.
|
|
615
|
+
return [h];
|
|
616
|
+
});
|
|
617
|
+
if (keptHandlers.length > 0) {
|
|
618
|
+
keptEntries.push({ ...entry, hooks: keptHandlers });
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
if (keptEntries.length > 0) {
|
|
622
|
+
out[event] = keptEntries;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
626
|
+
}
|
|
627
|
+
|
|
490
628
|
function metadataFor(pluginName, claudeManifest) {
|
|
491
629
|
const map = {
|
|
492
630
|
lisa: {
|
|
@@ -0,0 +1,235 @@
|
|
|
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 the Codex hooks manifest the base build emits at hooks/hooks.json —
|
|
143
|
+
// Copilot reads its (camelCase) hooks from .claude-plugin/plugin.json, not
|
|
144
|
+
// this Codex-shaped (PascalCase, ${PLUGIN_ROOT}) file. Keeping it would ship
|
|
145
|
+
// a spurious, wrong-shaped hooks manifest in the Copilot variant.
|
|
146
|
+
if (relPath === path.join("hooks", "hooks.json")) return false;
|
|
147
|
+
// Drop Codex-specific per-skill openai.yaml artifacts — Copilot does not use them.
|
|
148
|
+
if (/^skills\/[^/]+\/agents\/openai\.ya?ml$/.test(relPath)) return false;
|
|
149
|
+
const skillsPrefix = path.join("skills") + path.sep;
|
|
150
|
+
if (relPath.startsWith(skillsPrefix)) {
|
|
151
|
+
const skillName = relPath.slice(skillsPrefix.length).split(path.sep)[0];
|
|
152
|
+
if (denylist.has(skillName)) return false;
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// 1a. Remove any now-empty `skills/<n>/agents/` directories left by the openai.yaml strip.
|
|
158
|
+
const skillsDirForCleanup = path.join(outDir, "skills");
|
|
159
|
+
if (fs.existsSync(skillsDirForCleanup)) {
|
|
160
|
+
for (const skillName of fs.readdirSync(skillsDirForCleanup)) {
|
|
161
|
+
const agentsDir = path.join(skillsDirForCleanup, skillName, "agents");
|
|
162
|
+
if (fs.existsSync(agentsDir) && fs.readdirSync(agentsDir).length === 0) {
|
|
163
|
+
fs.rmdirSync(agentsDir);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// 2. Rename agents/<n>.md to agents/<n>.agent.md (per Copilot's default convention).
|
|
169
|
+
// This is the safe-default path; if the manifest agents-path override probe
|
|
170
|
+
// returns positive, this rename is unnecessary but harmless.
|
|
171
|
+
if (renameAgentsToAgentMd) {
|
|
172
|
+
const agentsDir = path.join(outDir, "agents");
|
|
173
|
+
if (fs.existsSync(agentsDir)) {
|
|
174
|
+
for (const entry of fs.readdirSync(agentsDir, { withFileTypes: true })) {
|
|
175
|
+
if (
|
|
176
|
+
entry.isFile() &&
|
|
177
|
+
entry.name.endsWith(".md") &&
|
|
178
|
+
!entry.name.endsWith(".agent.md")
|
|
179
|
+
) {
|
|
180
|
+
const oldPath = path.join(agentsDir, entry.name);
|
|
181
|
+
const newName = entry.name.replace(/\.md$/, ".agent.md");
|
|
182
|
+
const newPath = path.join(agentsDir, newName);
|
|
183
|
+
fs.renameSync(oldPath, newPath);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// 3. Read + filter the manifest, translate event names to Copilot camelCase.
|
|
190
|
+
const manifestPath = path.join(outDir, ".claude-plugin", "plugin.json");
|
|
191
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
192
|
+
manifest.version = version;
|
|
193
|
+
const filteredHooks = filterHooksForAgent(manifest.hooks ?? {}, "copilot", {
|
|
194
|
+
copilotRulesAutoLoads,
|
|
195
|
+
});
|
|
196
|
+
if (filteredHooks) {
|
|
197
|
+
manifest.hooks = filteredHooks;
|
|
198
|
+
} else {
|
|
199
|
+
delete manifest.hooks;
|
|
200
|
+
}
|
|
201
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
202
|
+
|
|
203
|
+
// 4. Filter the hooks/ directory.
|
|
204
|
+
const hooksDir = path.join(outDir, "hooks");
|
|
205
|
+
if (fs.existsSync(hooksDir)) {
|
|
206
|
+
const all = fs
|
|
207
|
+
.readdirSync(hooksDir, { withFileTypes: true })
|
|
208
|
+
.filter(e => e.isFile() && e.name.endsWith(".sh"))
|
|
209
|
+
.map(e => e.name);
|
|
210
|
+
// Copilot ships everything Cursor ships, plus inject-rules.sh when
|
|
211
|
+
// copilotRulesAutoLoads is false. The filter helper handles this.
|
|
212
|
+
const keep = new Set(filterScriptsForAgent(all, "copilot"));
|
|
213
|
+
// If the rules-auto-load probe is positive, ALSO strip inject-rules.sh.
|
|
214
|
+
if (copilotRulesAutoLoads) keep.delete("inject-rules.sh");
|
|
215
|
+
for (const name of all) {
|
|
216
|
+
if (!keep.has(name)) fs.rmSync(path.join(hooksDir, name));
|
|
217
|
+
}
|
|
218
|
+
if (fs.readdirSync(hooksDir).length === 0) {
|
|
219
|
+
fs.rmdirSync(hooksDir);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// CLI entrypoint.
|
|
225
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
226
|
+
const [srcDir, outDir, version] = process.argv.slice(2);
|
|
227
|
+
if (!srcDir || !outDir || !version) {
|
|
228
|
+
console.error(
|
|
229
|
+
"Usage: generate-copilot-plugin-artifacts.mjs <src> <out> <version>"
|
|
230
|
+
);
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
generateCopilotVariant(srcDir, outDir, version);
|
|
234
|
+
console.log(`Generated Copilot variant at ${outDir} (v${version})`);
|
|
235
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
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 the Codex hooks manifest the base build emits at hooks/hooks.json —
|
|
109
|
+
// Cursor reads its (filtered) hooks from .claude-plugin/plugin.json, not this
|
|
110
|
+
// Codex-shaped file. The surviving .sh scripts in hooks/ are kept below.
|
|
111
|
+
if (relPath === path.join("hooks", "hooks.json")) return false;
|
|
112
|
+
// Drop Codex-specific per-skill openai.yaml artifacts — Cursor does not use them.
|
|
113
|
+
// These live at skills/<n>/agents/openai.yaml and are generated by the Codex
|
|
114
|
+
// artifact builder; the per-agent variants ship only the SKILL.md.
|
|
115
|
+
if (/^skills\/[^/]+\/agents\/openai\.ya?ml$/.test(relPath)) return false;
|
|
116
|
+
// Apply the per-agent skill denylist (skills/<name>/).
|
|
117
|
+
const skillsPrefix = path.join("skills") + path.sep;
|
|
118
|
+
if (relPath.startsWith(skillsPrefix)) {
|
|
119
|
+
const skillName = relPath.slice(skillsPrefix.length).split(path.sep)[0];
|
|
120
|
+
if (denylist.has(skillName)) return false;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// 1a. Remove any now-empty `skills/<n>/agents/` directories left by the openai.yaml strip.
|
|
126
|
+
const skillsDir = path.join(outDir, "skills");
|
|
127
|
+
if (fs.existsSync(skillsDir)) {
|
|
128
|
+
for (const skillName of fs.readdirSync(skillsDir)) {
|
|
129
|
+
const agentsDir = path.join(skillsDir, skillName, "agents");
|
|
130
|
+
if (fs.existsSync(agentsDir) && fs.readdirSync(agentsDir).length === 0) {
|
|
131
|
+
fs.rmdirSync(agentsDir);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// 2. Read + filter the manifest.
|
|
137
|
+
const manifestPath = path.join(outDir, ".claude-plugin", "plugin.json");
|
|
138
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
139
|
+
manifest.version = version;
|
|
140
|
+
const filteredHooks = filterHooksForAgent(manifest.hooks ?? {}, "cursor");
|
|
141
|
+
if (filteredHooks) {
|
|
142
|
+
manifest.hooks = filteredHooks;
|
|
143
|
+
} else {
|
|
144
|
+
delete manifest.hooks;
|
|
145
|
+
}
|
|
146
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
147
|
+
|
|
148
|
+
// 3. Filter the hooks/ directory to match the script ship-list.
|
|
149
|
+
const hooksDir = path.join(outDir, "hooks");
|
|
150
|
+
if (fs.existsSync(hooksDir)) {
|
|
151
|
+
const all = fs
|
|
152
|
+
.readdirSync(hooksDir, { withFileTypes: true })
|
|
153
|
+
.filter(e => e.isFile() && e.name.endsWith(".sh"))
|
|
154
|
+
.map(e => e.name);
|
|
155
|
+
const keep = new Set(filterScriptsForAgent(all, "cursor"));
|
|
156
|
+
for (const name of all) {
|
|
157
|
+
if (!keep.has(name)) fs.rmSync(path.join(hooksDir, name));
|
|
158
|
+
}
|
|
159
|
+
// Remove empty hooks dir.
|
|
160
|
+
if (fs.readdirSync(hooksDir).length === 0) {
|
|
161
|
+
fs.rmdirSync(hooksDir);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// CLI entrypoint.
|
|
167
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
168
|
+
const [srcDir, outDir, version] = process.argv.slice(2);
|
|
169
|
+
if (!srcDir || !outDir || !version) {
|
|
170
|
+
console.error(
|
|
171
|
+
"Usage: generate-cursor-plugin-artifacts.mjs <src> <out> <version>"
|
|
172
|
+
);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
generateCursorVariant(srcDir, outDir, version);
|
|
176
|
+
console.log(`Generated Cursor variant at ${outDir} (v${version})`);
|
|
177
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Cached Copilot runtime probe results consumed by scripts/generate-copilot-plugin-artifacts.mjs. Populated 2026-05-28 by empirical probes against GitHub Copilot CLI 1.0.55 (see _evidence). Missing/null values fall through to conservative generator defaults.",
|
|
3
|
+
"cliVersion": "1.0.55",
|
|
4
|
+
"pluginRootEnvVar": null,
|
|
5
|
+
"rulesAutoLoads": false,
|
|
6
|
+
"agentPathOverrideAccepted": false,
|
|
7
|
+
"_evidence": {
|
|
8
|
+
"cliVersion": "[VERIFIED-BY-RUN] `copilot --version` => 'GitHub Copilot CLI 1.0.55.'",
|
|
9
|
+
"rulesAutoLoads": "[VERIFIED-BY-RUN] A plugin's bundled rules/ directory is NOT auto-loaded. Probe: `copilot --plugin-dir <pkg> -p 'plugin codeword?'` with a sentinel rule in <pkg>/rules/sentinel.md and no .github/copilot-instructions.md returned 'UNKNOWN'. (Copilot DOES auto-load .github/copilot-instructions.md — a separate project file — but that template only points at the plugin, so inject-rules.sh must still ship. Hence false: do NOT strip inject-rules.sh.)",
|
|
10
|
+
"agentPathOverrideAccepted": "[PARTIAL] With an explicit manifest 'agents: ./agents/' pointer, `copilot --plugin-dir <pkg> --agent <ns>:<name>` loaded a non-.agent.md file (agents/probeagent.md) and it responded. However that is session-only --plugin-dir loading; the marketplace-install auto-discovery path is unverified and .agent.md loads in every observed context. Kept false so the generator retains the universally-safe rename to <name>.agent.md.",
|
|
11
|
+
"pluginRootEnvVar": "[VERIFIED-DOC] GitHub Copilot CLI plugin reference documents ${COPILOT_PLUGIN_DATA} is also exposed as ${CLAUDE_PLUGIN_DATA}; Copilot aliases the CLAUDE_* plugin env vars, so the ${CLAUDE_PLUGIN_ROOT} form the generator emits in hook commands is supported. null => generator keeps ${CLAUDE_PLUGIN_ROOT}. Direct hook-fire env capture was not achievable via --plugin-dir in -p mode (hook did not fire; firing likely requires a real `copilot plugin install` and/or interactive trust — unverified)."
|
|
12
|
+
}
|
|
13
|
+
}
|