specweave 0.4.0 → 0.6.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/README.md +325 -0
- package/.claude-plugin/marketplace.json +210 -0
- package/CLAUDE.md +1000 -252
- package/README.md +273 -180
- package/bin/install-agents.sh +1 -1
- package/bin/install-commands.sh +66 -14
- package/bin/install-hooks.sh +1 -1
- package/bin/install-skills.sh +1 -1
- package/bin/specweave.js +18 -0
- package/dist/adapters/adapter-base.d.ts +21 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -1
- package/dist/adapters/adapter-base.js +28 -0
- package/dist/adapters/adapter-base.js.map +1 -1
- package/dist/adapters/adapter-interface.d.ts +41 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.d.ts +85 -11
- package/dist/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.js +305 -37
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/adapters/copilot/adapter.d.ts +45 -2
- package/dist/adapters/copilot/adapter.d.ts.map +1 -1
- package/dist/adapters/copilot/adapter.js +226 -4
- package/dist/adapters/copilot/adapter.js.map +1 -1
- package/dist/adapters/cursor/adapter.d.ts +54 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/adapters/cursor/adapter.js +192 -0
- package/dist/adapters/cursor/adapter.js.map +1 -1
- package/dist/adapters/generic/adapter.d.ts +43 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +163 -0
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +392 -123
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/install.d.ts +2 -0
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +28 -25
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/list.d.ts +2 -0
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +26 -24
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +43 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +307 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/core/i18n/language-detector.d.ts +29 -0
- package/dist/core/i18n/language-detector.d.ts.map +1 -0
- package/dist/core/i18n/language-detector.js +143 -0
- package/dist/core/i18n/language-detector.js.map +1 -0
- package/dist/core/i18n/language-manager.d.ts +101 -0
- package/dist/core/i18n/language-manager.d.ts.map +1 -0
- package/dist/core/i18n/language-manager.js +232 -0
- package/dist/core/i18n/language-manager.js.map +1 -0
- package/dist/core/i18n/language-registry.d.ts +44 -0
- package/dist/core/i18n/language-registry.d.ts.map +1 -0
- package/dist/core/i18n/language-registry.js +234 -0
- package/dist/core/i18n/language-registry.js.map +1 -0
- package/dist/core/i18n/locale-manager.d.ts +62 -0
- package/dist/core/i18n/locale-manager.d.ts.map +1 -0
- package/dist/core/i18n/locale-manager.js +137 -0
- package/dist/core/i18n/locale-manager.js.map +1 -0
- package/dist/core/i18n/system-prompt-injector.d.ts +33 -0
- package/dist/core/i18n/system-prompt-injector.d.ts.map +1 -0
- package/dist/core/i18n/system-prompt-injector.js +131 -0
- package/dist/core/i18n/system-prompt-injector.js.map +1 -0
- package/dist/core/i18n/types.d.ts +151 -0
- package/dist/core/i18n/types.d.ts.map +1 -0
- package/dist/core/i18n/types.js +11 -0
- package/dist/core/i18n/types.js.map +1 -0
- package/dist/core/increment-status.d.ts +72 -0
- package/dist/core/increment-status.d.ts.map +1 -0
- package/dist/core/increment-status.js +227 -0
- package/dist/core/increment-status.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +96 -0
- package/dist/core/plugin-detector.d.ts.map +1 -0
- package/dist/core/plugin-detector.js +349 -0
- package/dist/core/plugin-detector.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +131 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +421 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +144 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +393 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/schemas/plugin-manifest.schema.json +253 -0
- package/dist/core/types/config.d.ts +51 -0
- package/dist/core/types/config.d.ts.map +1 -0
- package/dist/core/types/config.js +21 -0
- package/dist/core/types/config.js.map +1 -0
- package/dist/core/types/plugin.d.ts +283 -0
- package/dist/core/types/plugin.d.ts.map +1 -0
- package/dist/core/types/plugin.js +49 -0
- package/dist/core/types/plugin.js.map +1 -0
- package/dist/hooks/lib/sync-living-docs.d.ts +27 -0
- package/dist/hooks/lib/sync-living-docs.d.ts.map +1 -0
- package/dist/hooks/lib/sync-living-docs.js +116 -0
- package/dist/hooks/lib/sync-living-docs.js.map +1 -0
- package/dist/hooks/lib/translate-living-docs.d.ts +13 -0
- package/dist/hooks/lib/translate-living-docs.d.ts.map +1 -0
- package/dist/hooks/lib/translate-living-docs.js +166 -0
- package/dist/hooks/lib/translate-living-docs.js.map +1 -0
- package/dist/hooks/lib/update-tasks-md.d.ts +29 -0
- package/dist/hooks/lib/update-tasks-md.d.ts.map +1 -0
- package/dist/hooks/lib/update-tasks-md.js +203 -0
- package/dist/hooks/lib/update-tasks-md.js.map +1 -0
- package/dist/integrations/jira/jira-incremental-mapper.js.map +1 -1
- package/dist/integrations/jira/jira-mapper.d.ts +2 -2
- package/dist/integrations/jira/jira-mapper.js +2 -2
- package/dist/integrations/jira/jira-mapper.js.map +1 -1
- package/dist/locales/de/.gitkeep +0 -0
- package/dist/locales/de/cli.json +108 -0
- package/dist/locales/en/cli.json +269 -0
- package/dist/locales/en/errors.json +7 -0
- package/dist/locales/en/templates.json +6 -0
- package/dist/locales/es/.gitkeep +0 -0
- package/dist/locales/es/cli.json +41 -0
- package/dist/locales/fr/.gitkeep +0 -0
- package/dist/locales/fr/cli.json +108 -0
- package/dist/locales/ja/.gitkeep +0 -0
- package/dist/locales/ja/cli.json +108 -0
- package/dist/locales/ko/.gitkeep +0 -0
- package/dist/locales/ko/cli.json +108 -0
- package/dist/locales/pt/.gitkeep +0 -0
- package/dist/locales/pt/cli.json +108 -0
- package/dist/locales/ru/.gitkeep +0 -0
- package/dist/locales/ru/cli.json +269 -0
- package/dist/locales/zh/.gitkeep +0 -0
- package/dist/locales/zh/cli.json +108 -0
- package/dist/plugins/specweave-github/lib/github-client.d.ts +86 -0
- package/dist/plugins/specweave-github/lib/github-client.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client.js +275 -0
- package/dist/plugins/specweave-github/lib/github-client.js.map +1 -0
- package/dist/plugins/specweave-github/lib/index.d.ts +10 -0
- package/dist/plugins/specweave-github/lib/index.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/index.js +10 -0
- package/dist/plugins/specweave-github/lib/index.js.map +1 -0
- package/dist/plugins/specweave-github/lib/subtask-sync.d.ts +51 -0
- package/dist/plugins/specweave-github/lib/subtask-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/subtask-sync.js +147 -0
- package/dist/plugins/specweave-github/lib/subtask-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/task-parser.d.ts +37 -0
- package/dist/plugins/specweave-github/lib/task-parser.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/task-parser.js +211 -0
- package/dist/plugins/specweave-github/lib/task-parser.js.map +1 -0
- package/dist/plugins/specweave-github/lib/task-sync.d.ts +51 -0
- package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/task-sync.js +332 -0
- package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/types.d.ts +80 -0
- package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/types.js +5 -0
- package/dist/plugins/specweave-github/lib/types.js.map +1 -0
- package/dist/utils/agents-md-compiler.d.ts +68 -0
- package/dist/utils/agents-md-compiler.d.ts.map +1 -0
- package/dist/utils/agents-md-compiler.js +420 -0
- package/dist/utils/agents-md-compiler.js.map +1 -0
- package/dist/utils/generate-skills-index.js +4 -4
- package/dist/utils/generate-skills-index.js.map +1 -1
- package/package.json +24 -21
- package/plugins/specweave-ado/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-alternatives/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-alternatives/skills/bmad-method-expert/SKILL.md +626 -0
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/check-setup.js +208 -0
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
- package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
- package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +1010 -0
- package/plugins/specweave-backend/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-core/.claude-plugin/plugin.json +25 -0
- package/{src → plugins/specweave-core}/agents/pm/AGENT.md +80 -0
- package/plugins/specweave-core/agents/translator/AGENT.md +282 -0
- package/{src → plugins/specweave-core}/commands/README.md +11 -11
- package/{src → plugins/specweave-core}/commands/specweave.costs.md +7 -7
- package/{src → plugins/specweave-core}/commands/specweave.do.md +34 -7
- package/{src → plugins/specweave-core}/commands/specweave.increment.md +131 -22
- package/{src → plugins/specweave-core}/commands/specweave.md +49 -17
- package/{src → plugins/specweave-core}/commands/specweave.sync-docs.md +5 -5
- package/plugins/specweave-core/commands/specweave.translate.md +425 -0
- package/{src → plugins/specweave-core}/commands/specweave.validate.md +1 -1
- package/plugins/specweave-core/hooks/hooks.json +13 -0
- package/plugins/specweave-core/hooks/post-increment-plugin-detect.sh +142 -0
- package/plugins/specweave-core/hooks/post-task-completion.sh +265 -0
- package/plugins/specweave-core/hooks/pre-task-plugin-detect.sh +96 -0
- package/plugins/specweave-core/skills/SKILLS-INDEX.md +229 -0
- package/{src → plugins/specweave-core}/skills/brownfield-analyzer/SKILL.md +66 -24
- package/{src → plugins/specweave-core}/skills/context-loader/SKILL.md +1 -1
- package/plugins/specweave-core/skills/context-optimizer/SKILL.md +588 -0
- package/plugins/specweave-core/skills/docs-updater/SKILL.md +0 -0
- package/{src → plugins/specweave-core}/skills/increment-planner/SKILL.md +81 -4
- package/plugins/specweave-core/skills/plugin-detector/SKILL.md +211 -0
- package/{src → plugins/specweave-core}/skills/project-kickstarter/SKILL.md +7 -7
- package/plugins/specweave-core/skills/rfc-generator/SKILL.md +369 -0
- package/{src → plugins/specweave-core}/skills/specweave-detector/SKILL.md +2 -2
- package/plugins/specweave-core/skills/specweave-framework/SKILL.md +498 -0
- package/plugins/specweave-core/skills/specweave-framework/test-cases/test-1-increment-naming.yaml +11 -0
- package/plugins/specweave-core/skills/specweave-framework/test-cases/test-2-source-of-truth.yaml +11 -0
- package/plugins/specweave-core/skills/specweave-framework/test-cases/test-3-increment-discipline.yaml +12 -0
- package/plugins/specweave-core/skills/specweave-framework/test-cases/test-4-file-placement.yaml +11 -0
- package/{src → plugins/specweave-core}/skills/tdd-workflow/SKILL.md +20 -20
- package/plugins/specweave-core/skills/translator/SKILL.md +172 -0
- package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-diagrams/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-docs/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +526 -0
- package/plugins/specweave-figma/.claude-plugin/.mcp.json +12 -0
- package/plugins/specweave-figma/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-figma/ARCHITECTURE.md +453 -0
- package/plugins/specweave-figma/README.md +728 -0
- package/plugins/specweave-figma/skills/figma-to-code/SKILL.md +632 -0
- package/plugins/specweave-figma/skills/figma-to-code/test-1-token-generation.yaml +29 -0
- package/plugins/specweave-figma/skills/figma-to-code/test-2-component-generation.yaml +27 -0
- package/plugins/specweave-figma/skills/figma-to-code/test-3-typescript-generation.yaml +28 -0
- package/plugins/specweave-frontend/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-github/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +651 -0
- package/plugins/specweave-github/commands/github-close-issue.md +418 -0
- package/plugins/specweave-github/commands/github-create-issue.md +307 -0
- package/plugins/specweave-github/commands/github-status.md +533 -0
- package/plugins/specweave-github/commands/github-sync-tasks.md +530 -0
- package/plugins/specweave-github/commands/github-sync.md +443 -0
- package/plugins/specweave-github/lib/github-client.ts +330 -0
- package/plugins/specweave-github/lib/index.ts +10 -0
- package/plugins/specweave-github/lib/subtask-sync.ts +225 -0
- package/plugins/specweave-github/lib/task-parser.ts +246 -0
- package/plugins/specweave-github/lib/task-sync.ts +402 -0
- package/plugins/specweave-github/lib/types.ts +86 -0
- package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +497 -0
- package/plugins/specweave-github/skills/github-sync/SKILL.md +461 -0
- package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-jira/.claude-plugin/plugin.json +8 -0
- package/{src → plugins/specweave-jira}/commands/specweave.sync-jira.md +18 -18
- package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-ml/.claude-plugin/plugin.json +39 -0
- package/plugins/specweave-ml/README.md +885 -0
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +402 -0
- package/plugins/specweave-ml/commands/ml-deploy.md +116 -0
- package/plugins/specweave-ml/commands/ml-evaluate.md +87 -0
- package/plugins/specweave-ml/commands/ml-explain.md +83 -0
- package/plugins/specweave-ml/skills/anomaly-detector/SKILL.md +559 -0
- package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +485 -0
- package/plugins/specweave-ml/skills/cv-pipeline-builder/SKILL.md +157 -0
- package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +521 -0
- package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +535 -0
- package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +566 -0
- package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +345 -0
- package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +518 -0
- package/plugins/specweave-ml/skills/model-evaluator/SKILL.md +155 -0
- package/plugins/specweave-ml/skills/model-explainer/SKILL.md +227 -0
- package/plugins/specweave-ml/skills/model-registry/SKILL.md +541 -0
- package/plugins/specweave-ml/skills/nlp-pipeline-builder/SKILL.md +180 -0
- package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +569 -0
- package/plugins/specweave-payments/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-testing/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-tooling/.claude-plugin/plugin.json +8 -0
- package/plugins/specweave-ui/.claude-plugin/plugin.json +106 -0
- package/plugins/specweave-ui/.mcp.json +14 -0
- package/plugins/specweave-ui/README.md +386 -0
- package/src/adapters/adapter-base.ts +33 -0
- package/src/adapters/adapter-interface.ts +46 -0
- package/src/adapters/claude/adapter.ts +350 -39
- package/src/adapters/copilot/adapter.ts +267 -4
- package/src/adapters/cursor/adapter.ts +229 -0
- package/src/adapters/generic/adapter.ts +196 -0
- package/src/templates/AGENTS.md.template +170 -1
- package/src/templates/CLAUDE.md.template +122 -24
- package/src/templates/tasks.md.template +261 -0
- package/src/agents/ml-engineer/AGENT.md +0 -150
- package/src/commands/specweave.sync-github.md +0 -269
- package/src/hooks/post-task-completion.sh +0 -79
- package/src/skills/SKILLS-INDEX.md +0 -444
- package/src/skills/github-sync/SKILL.md +0 -234
- /package/{src → plugins/specweave-ado}/skills/ado-sync/README.md +0 -0
- /package/{src → plugins/specweave-ado}/skills/ado-sync/SKILL.md +0 -0
- /package/{src → plugins/specweave-ado}/skills/specweave-ado-mapper/SKILL.md +0 -0
- /package/{src → plugins/specweave-backend}/agents/database-optimizer/AGENT.md +0 -0
- /package/{src → plugins/specweave-backend}/skills/dotnet-backend/SKILL.md +0 -0
- /package/{src → plugins/specweave-backend}/skills/nodejs-backend/SKILL.md +0 -0
- /package/{src → plugins/specweave-backend}/skills/python-backend/SKILL.md +0 -0
- /package/{src → plugins/specweave-core}/agents/architect/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/agents/code-reviewer.md +0 -0
- /package/{src → plugins/specweave-core}/agents/docs-writer/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/agents/performance/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/agents/qa-lead/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/agents/security/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/agents/tdd-orchestrator/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/agents/tech-lead/AGENT.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.done.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.inc.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.list-increments.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.next.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.progress.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.tdd-cycle.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.tdd-green.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.tdd-red.md +0 -0
- /package/{src → plugins/specweave-core}/commands/specweave.tdd-refactor.md +0 -0
- /package/{src → plugins/specweave-core}/hooks/README.md +0 -0
- /package/{src → plugins/specweave-core}/hooks/docs-changed.sh +0 -0
- /package/{src → plugins/specweave-core}/hooks/human-input-required.sh +0 -0
- /package/{src → plugins/specweave-core}/hooks/pre-implementation.sh +0 -0
- /package/{src → plugins/specweave-core}/skills/brownfield-onboarder/SKILL.md +0 -0
- /package/{src → plugins/specweave-core}/skills/docs-updater/README.md +0 -0
- /package/{src → plugins/specweave-core}/skills/increment-planner/scripts/feature-utils.js +0 -0
- /package/{src → plugins/specweave-core}/skills/increment-quality-judge/SKILL.md +0 -0
- /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-1-high-confidence-full-product.yaml +0 -0
- /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-2-medium-confidence-partial.yaml +0 -0
- /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-3-low-confidence-technical-question.yaml +0 -0
- /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-4-opt-out-explicit.yaml +0 -0
- /package/{src → plugins/specweave-core}/skills/role-orchestrator/README.md +0 -0
- /package/{src → plugins/specweave-core}/skills/role-orchestrator/SKILL.md +0 -0
- /package/{src → plugins/specweave-core}/skills/task-builder/README.md +0 -0
- /package/{src → plugins/specweave-cost-optimizer}/skills/cost-optimizer/SKILL.md +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/AGENT.md +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/c4-component-template.mmd +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/c4-container-template.mmd +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/c4-context-template.mmd +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/deployment-template.mmd +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/er-diagram-template.mmd +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/sequence-template.mmd +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/test-cases/test-1-c4-context.yaml +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/test-cases/test-2-sequence.yaml +0 -0
- /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/test-cases/test-3-er-diagram.yaml +0 -0
- /package/{src → plugins/specweave-diagrams}/skills/diagrams-architect/SKILL.md +0 -0
- /package/{src → plugins/specweave-diagrams}/skills/diagrams-generator/SKILL.md +0 -0
- /package/{src → plugins/specweave-docs}/skills/spec-driven-brainstorming/README.md +0 -0
- /package/{src → plugins/specweave-docs}/skills/spec-driven-brainstorming/SKILL.md +0 -0
- /package/{src → plugins/specweave-docs}/skills/spec-driven-debugging/README.md +0 -0
- /package/{src → plugins/specweave-docs}/skills/spec-driven-debugging/SKILL.md +0 -0
- /package/{src → plugins/specweave-frontend}/skills/design-system-architect/SKILL.md +0 -0
- /package/{src → plugins/specweave-frontend}/skills/frontend/SKILL.md +0 -0
- /package/{src → plugins/specweave-frontend}/skills/nextjs/SKILL.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/devops/AGENT.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/network-engineer/AGENT.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/observability-engineer/AGENT.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/performance-engineer/AGENT.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/AGENT.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/backend-diagnostics.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/database-diagnostics.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/infrastructure.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/monitoring.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/security-incidents.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/ui-diagnostics.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/01-high-cpu-usage.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/02-database-deadlock.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/03-memory-leak.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/04-slow-api-response.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/05-ddos-attack.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/06-disk-full.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/07-service-down.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/08-data-corruption.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/09-cascade-failure.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/10-rate-limit-exceeded.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/health-check.sh +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/log-analyzer.py +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/metrics-collector.sh +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/trace-analyzer.js +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/incident-report.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/mitigation-plan.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/post-mortem.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/runbook-template.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/commands/specweave.monitor-setup.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/commands/specweave.slo-implement.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/skills/distributed-tracing/SKILL.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/skills/grafana-dashboards/SKILL.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/skills/hetzner-provisioner/README.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/skills/hetzner-provisioner/SKILL.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/skills/prometheus-configuration/SKILL.md +0 -0
- /package/{src → plugins/specweave-infrastructure}/skills/slo-implementation/SKILL.md +0 -0
- /package/{src → plugins/specweave-jira}/skills/jira-sync/README.md +0 -0
- /package/{src → plugins/specweave-jira}/skills/jira-sync/SKILL.md +0 -0
- /package/{src → plugins/specweave-jira}/skills/specweave-jira-mapper/SKILL.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/agents/kubernetes-architect/AGENT.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/gitops-workflow/SKILL.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/gitops-workflow/references/argocd-setup.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/gitops-workflow/references/sync-policies.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/SKILL.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/assets/Chart.yaml.template +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/assets/values.yaml.template +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/references/chart-structure.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/scripts/validate-chart.sh +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/SKILL.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/assets/configmap-template.yaml +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/assets/deployment-template.yaml +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/assets/service-template.yaml +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/references/deployment-spec.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/references/service-spec.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-security-policies/SKILL.md +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-security-policies/assets/network-policy-template.yaml +0 -0
- /package/{src → plugins/specweave-kubernetes}/skills/k8s-security-policies/references/rbac-patterns.md +0 -0
- /package/{src → plugins/specweave-ml}/agents/data-scientist/AGENT.md +0 -0
- /package/{src → plugins/specweave-ml}/agents/mlops-engineer/AGENT.md +0 -0
- /package/{src → plugins/specweave-ml}/commands/specweave.ml-pipeline.md +0 -0
- /package/{src → plugins/specweave-ml}/skills/ml-pipeline-workflow/SKILL.md +0 -0
- /package/{src → plugins/specweave-payments}/agents/payment-integration/AGENT.md +0 -0
- /package/{src → plugins/specweave-payments}/skills/billing-automation/SKILL.md +0 -0
- /package/{src → plugins/specweave-payments}/skills/paypal-integration/SKILL.md +0 -0
- /package/{src → plugins/specweave-payments}/skills/pci-compliance/SKILL.md +0 -0
- /package/{src → plugins/specweave-payments}/skills/stripe-integration/SKILL.md +0 -0
- /package/{src → plugins/specweave-testing}/skills/e2e-playwright/README.md +0 -0
- /package/{src → plugins/specweave-testing}/skills/e2e-playwright/SKILL.md +0 -0
- /package/{src → plugins/specweave-testing}/skills/e2e-playwright/execute.js +0 -0
- /package/{src → plugins/specweave-testing}/skills/e2e-playwright/lib/utils.js +0 -0
- /package/{src → plugins/specweave-testing}/skills/e2e-playwright/package.json +0 -0
- /package/{src → plugins/specweave-tooling}/skills/skill-creator/LICENSE.txt +0 -0
- /package/{src → plugins/specweave-tooling}/skills/skill-creator/SKILL.md +0 -0
- /package/{src → plugins/specweave-tooling}/skills/skill-creator/scripts/init_skill.py +0 -0
- /package/{src → plugins/specweave-tooling}/skills/skill-creator/scripts/package_skill.py +0 -0
- /package/{src → plugins/specweave-tooling}/skills/skill-creator/scripts/quick_validate.py +0 -0
- /package/{src → plugins/specweave-tooling}/skills/skill-router/SKILL.md +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Manager
|
|
3
|
+
*
|
|
4
|
+
* Central orchestrator for plugin lifecycle management.
|
|
5
|
+
* Handles loading/unloading, dependency resolution, configuration management.
|
|
6
|
+
*
|
|
7
|
+
* @module core/plugin-manager
|
|
8
|
+
* @version 0.4.0
|
|
9
|
+
*/
|
|
10
|
+
import type { Plugin, PluginInfo, PluginLoadOptions, PluginUnloadOptions } from './types/plugin.js';
|
|
11
|
+
import type { IAdapter } from '../adapters/adapter-interface.js';
|
|
12
|
+
/**
|
|
13
|
+
* PluginManager - Manages plugin lifecycle and configuration
|
|
14
|
+
*/
|
|
15
|
+
export declare class PluginManager {
|
|
16
|
+
private projectPath;
|
|
17
|
+
private loader;
|
|
18
|
+
private configPath;
|
|
19
|
+
private pluginsDir;
|
|
20
|
+
private loadedPlugins;
|
|
21
|
+
/**
|
|
22
|
+
* Create a new PluginManager
|
|
23
|
+
*
|
|
24
|
+
* @param projectPath - Path to project root
|
|
25
|
+
* @param pluginsDir - Path to plugins directory (default: src/plugins)
|
|
26
|
+
*/
|
|
27
|
+
constructor(projectPath?: string, pluginsDir?: string);
|
|
28
|
+
/**
|
|
29
|
+
* Load (enable) a plugin
|
|
30
|
+
*
|
|
31
|
+
* 1. Load plugin from src/plugins/
|
|
32
|
+
* 2. Check dependencies
|
|
33
|
+
* 3. Install via adapter
|
|
34
|
+
* 4. Update config
|
|
35
|
+
*
|
|
36
|
+
* @param name - Plugin name (e.g., "github", "kubernetes")
|
|
37
|
+
* @param adapter - Adapter to use for installation
|
|
38
|
+
* @param options - Load options
|
|
39
|
+
*/
|
|
40
|
+
loadPlugin(name: string, adapter: IAdapter, options?: PluginLoadOptions): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Unload (disable) a plugin
|
|
43
|
+
*
|
|
44
|
+
* @param name - Plugin name
|
|
45
|
+
* @param adapter - Adapter to use for uninstallation
|
|
46
|
+
* @param options - Unload options
|
|
47
|
+
*/
|
|
48
|
+
unloadPlugin(name: string, adapter: IAdapter, options?: PluginUnloadOptions): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Get all available plugins (scan src/plugins/)
|
|
51
|
+
*
|
|
52
|
+
* @returns Array of plugin info
|
|
53
|
+
*/
|
|
54
|
+
getAvailablePlugins(): Promise<PluginInfo[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Get enabled plugins from config
|
|
57
|
+
*
|
|
58
|
+
* @returns Array of enabled plugin names
|
|
59
|
+
*/
|
|
60
|
+
getEnabledPlugins(): Promise<string[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a plugin is enabled
|
|
63
|
+
*
|
|
64
|
+
* @param name - Plugin name
|
|
65
|
+
* @returns True if enabled
|
|
66
|
+
*/
|
|
67
|
+
isPluginEnabled(name: string): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Update plugin configuration
|
|
70
|
+
*
|
|
71
|
+
* @param name - Plugin name
|
|
72
|
+
* @param action - 'enable' or 'disable'
|
|
73
|
+
*/
|
|
74
|
+
private updateConfig;
|
|
75
|
+
/**
|
|
76
|
+
* Load plugin configuration from .specweave/config.yaml
|
|
77
|
+
*
|
|
78
|
+
* @returns Plugin configuration
|
|
79
|
+
*/
|
|
80
|
+
private loadConfig;
|
|
81
|
+
/**
|
|
82
|
+
* Save plugin configuration to .specweave/config.yaml
|
|
83
|
+
*
|
|
84
|
+
* @param pluginConfig - Plugin configuration to save
|
|
85
|
+
*/
|
|
86
|
+
private saveConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Check plugin dependencies
|
|
89
|
+
*
|
|
90
|
+
* Ensures all required plugins are loaded
|
|
91
|
+
*
|
|
92
|
+
* @param plugin - Plugin to check
|
|
93
|
+
* @throws PluginDependencyError if dependencies are not met
|
|
94
|
+
*/
|
|
95
|
+
checkDependencies(plugin: Plugin): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Resolve dependency graph for a plugin
|
|
98
|
+
*
|
|
99
|
+
* Returns all plugins that need to be loaded (including transitive deps)
|
|
100
|
+
*
|
|
101
|
+
* @param plugin - Plugin to resolve
|
|
102
|
+
* @returns Array of plugins in load order
|
|
103
|
+
*/
|
|
104
|
+
resolveDependencies(plugin: Plugin): Promise<Plugin[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Get plugins that depend on a given plugin
|
|
107
|
+
*
|
|
108
|
+
* @param name - Plugin name
|
|
109
|
+
* @returns Array of dependent plugin names
|
|
110
|
+
*/
|
|
111
|
+
private getDependents;
|
|
112
|
+
/**
|
|
113
|
+
* Validate plugin configuration
|
|
114
|
+
*
|
|
115
|
+
* Checks for circular dependencies, missing plugins, etc.
|
|
116
|
+
*
|
|
117
|
+
* @returns Validation result
|
|
118
|
+
*/
|
|
119
|
+
validateConfig(): Promise<{
|
|
120
|
+
valid: boolean;
|
|
121
|
+
errors: string[];
|
|
122
|
+
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Get plugin by name
|
|
125
|
+
*
|
|
126
|
+
* @param name - Plugin name
|
|
127
|
+
* @returns Loaded plugin
|
|
128
|
+
* @throws PluginNotFoundError if plugin is not loaded
|
|
129
|
+
*/
|
|
130
|
+
getPlugin(name: string): Plugin;
|
|
131
|
+
/**
|
|
132
|
+
* Get all loaded plugins
|
|
133
|
+
*
|
|
134
|
+
* @returns Map of loaded plugins
|
|
135
|
+
*/
|
|
136
|
+
getLoadedPlugins(): Map<string, Plugin>;
|
|
137
|
+
/**
|
|
138
|
+
* Clear loaded plugins cache
|
|
139
|
+
*
|
|
140
|
+
* Useful for testing or forcing reload
|
|
141
|
+
*/
|
|
142
|
+
clearCache(): void;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=plugin-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/core/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAEV,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE;;GAEG;AACH,qBAAa,aAAa;IAatB,OAAO,CAAC,WAAW;IAZrB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAsB;IAE3C;;;;;OAKG;gBAEO,WAAW,GAAE,MAAsB,EAC3C,UAAU,CAAC,EAAE,MAAM;IAQrB;;;;;;;;;;;OAWG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC;IAmDhB;;;;;;OAMG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC;IAkChB;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAwClD;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C;;;;;OAKG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;;;;OAKG;YACW,YAAY;IAc1B;;;;OAIG;YACW,UAAU;IA4BxB;;;;OAIG;YACW,UAAU;IAgBxB;;;;;;;OAOG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtD;;;;;;;OAOG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4B5D;;;;;OAKG;YACW,aAAa;IAgB3B;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAuDrE;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQ/B;;;;OAIG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC;;;;OAIG;IACH,UAAU,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Manager
|
|
3
|
+
*
|
|
4
|
+
* Central orchestrator for plugin lifecycle management.
|
|
5
|
+
* Handles loading/unloading, dependency resolution, configuration management.
|
|
6
|
+
*
|
|
7
|
+
* @module core/plugin-manager
|
|
8
|
+
* @version 0.4.0
|
|
9
|
+
*/
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as fs from 'fs-extra';
|
|
12
|
+
import * as yaml from 'js-yaml';
|
|
13
|
+
import { PluginLoader } from './plugin-loader.js';
|
|
14
|
+
import { PluginError, PluginDependencyError, PluginNotFoundError } from './types/plugin.js';
|
|
15
|
+
/**
|
|
16
|
+
* PluginManager - Manages plugin lifecycle and configuration
|
|
17
|
+
*/
|
|
18
|
+
export class PluginManager {
|
|
19
|
+
/**
|
|
20
|
+
* Create a new PluginManager
|
|
21
|
+
*
|
|
22
|
+
* @param projectPath - Path to project root
|
|
23
|
+
* @param pluginsDir - Path to plugins directory (default: src/plugins)
|
|
24
|
+
*/
|
|
25
|
+
constructor(projectPath = process.cwd(), pluginsDir) {
|
|
26
|
+
this.projectPath = projectPath;
|
|
27
|
+
this.loader = new PluginLoader();
|
|
28
|
+
this.configPath = path.join(projectPath, '.specweave', 'config.yaml');
|
|
29
|
+
this.pluginsDir = pluginsDir || path.join(projectPath, 'src', 'plugins');
|
|
30
|
+
this.loadedPlugins = new Map();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load (enable) a plugin
|
|
34
|
+
*
|
|
35
|
+
* 1. Load plugin from src/plugins/
|
|
36
|
+
* 2. Check dependencies
|
|
37
|
+
* 3. Install via adapter
|
|
38
|
+
* 4. Update config
|
|
39
|
+
*
|
|
40
|
+
* @param name - Plugin name (e.g., "github", "kubernetes")
|
|
41
|
+
* @param adapter - Adapter to use for installation
|
|
42
|
+
* @param options - Load options
|
|
43
|
+
*/
|
|
44
|
+
async loadPlugin(name, adapter, options = {}) {
|
|
45
|
+
console.log(`\n📦 Loading plugin: ${name}...`);
|
|
46
|
+
// Check if already loaded
|
|
47
|
+
if (this.loadedPlugins.has(name) && !options.force) {
|
|
48
|
+
console.log(`ℹ️ Plugin ${name} already loaded`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Load plugin from disk
|
|
52
|
+
const pluginPath = path.join(this.pluginsDir, name);
|
|
53
|
+
const plugin = await this.loader.loadFromDirectory(pluginPath);
|
|
54
|
+
// Validate plugin integrity
|
|
55
|
+
if (options.validate !== false) {
|
|
56
|
+
const isValid = await this.loader.verifyPlugin(plugin);
|
|
57
|
+
if (!isValid) {
|
|
58
|
+
throw new PluginError(`Plugin ${name} failed integrity check`, name);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Check dependencies
|
|
62
|
+
if (!options.skipDependencies) {
|
|
63
|
+
await this.checkDependencies(plugin);
|
|
64
|
+
}
|
|
65
|
+
// Install via adapter
|
|
66
|
+
console.log(`📋 Installing ${name} via ${adapter.name} adapter...`);
|
|
67
|
+
if (adapter.supportsPlugins && adapter.supportsPlugins()) {
|
|
68
|
+
await adapter.compilePlugin(plugin);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.warn(`⚠️ Adapter ${adapter.name} does not support plugins`);
|
|
72
|
+
throw new PluginError(`Adapter ${adapter.name} does not support plugins`, name, 'ADAPTER_NOT_SUPPORTED');
|
|
73
|
+
}
|
|
74
|
+
// Update config
|
|
75
|
+
await this.updateConfig(name, 'enable');
|
|
76
|
+
// Cache loaded plugin
|
|
77
|
+
this.loadedPlugins.set(name, plugin);
|
|
78
|
+
console.log(`✅ Plugin ${name} loaded successfully!`);
|
|
79
|
+
console.log(` - ${plugin.skills.length} skills`);
|
|
80
|
+
console.log(` - ${plugin.agents.length} agents`);
|
|
81
|
+
console.log(` - ${plugin.commands.length} commands`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Unload (disable) a plugin
|
|
85
|
+
*
|
|
86
|
+
* @param name - Plugin name
|
|
87
|
+
* @param adapter - Adapter to use for uninstallation
|
|
88
|
+
* @param options - Unload options
|
|
89
|
+
*/
|
|
90
|
+
async unloadPlugin(name, adapter, options = {}) {
|
|
91
|
+
console.log(`\n🗑️ Unloading plugin: ${name}...`);
|
|
92
|
+
// Check if plugin is loaded
|
|
93
|
+
if (!this.loadedPlugins.has(name)) {
|
|
94
|
+
console.log(`ℹ️ Plugin ${name} not loaded`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Check if other plugins depend on this one
|
|
98
|
+
if (!options.force) {
|
|
99
|
+
const dependents = await this.getDependents(name);
|
|
100
|
+
if (dependents.length > 0) {
|
|
101
|
+
throw new PluginDependencyError(`Cannot unload ${name}: Required by ${dependents.join(', ')}`, name);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Uninstall via adapter
|
|
105
|
+
if (adapter.supportsPlugins && adapter.supportsPlugins()) {
|
|
106
|
+
await adapter.unloadPlugin(name);
|
|
107
|
+
}
|
|
108
|
+
// Update config
|
|
109
|
+
await this.updateConfig(name, 'disable');
|
|
110
|
+
// Remove from cache
|
|
111
|
+
this.loadedPlugins.delete(name);
|
|
112
|
+
console.log(`✅ Plugin ${name} unloaded`);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get all available plugins (scan src/plugins/)
|
|
116
|
+
*
|
|
117
|
+
* @returns Array of plugin info
|
|
118
|
+
*/
|
|
119
|
+
async getAvailablePlugins() {
|
|
120
|
+
const plugins = [];
|
|
121
|
+
// Check if plugins directory exists
|
|
122
|
+
if (!(await fs.pathExists(this.pluginsDir))) {
|
|
123
|
+
return plugins;
|
|
124
|
+
}
|
|
125
|
+
// Get enabled plugins from config
|
|
126
|
+
const enabledPlugins = await this.getEnabledPlugins();
|
|
127
|
+
// Scan plugins directory
|
|
128
|
+
const dirs = await fs.readdir(this.pluginsDir);
|
|
129
|
+
for (const dir of dirs) {
|
|
130
|
+
const pluginPath = path.join(this.pluginsDir, dir);
|
|
131
|
+
const stat = await fs.stat(pluginPath);
|
|
132
|
+
if (stat.isDirectory()) {
|
|
133
|
+
try {
|
|
134
|
+
const metadata = await this.loader.getMetadata(pluginPath);
|
|
135
|
+
plugins.push({
|
|
136
|
+
name: dir,
|
|
137
|
+
version: metadata.version,
|
|
138
|
+
description: metadata.description,
|
|
139
|
+
path: pluginPath,
|
|
140
|
+
enabled: enabledPlugins.includes(dir),
|
|
141
|
+
skillCount: metadata.skillCount,
|
|
142
|
+
agentCount: metadata.agentCount,
|
|
143
|
+
commandCount: metadata.commandCount
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.warn(`⚠️ Failed to load metadata for ${dir}: ${error.message}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return plugins;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get enabled plugins from config
|
|
155
|
+
*
|
|
156
|
+
* @returns Array of enabled plugin names
|
|
157
|
+
*/
|
|
158
|
+
async getEnabledPlugins() {
|
|
159
|
+
const config = await this.loadConfig();
|
|
160
|
+
return config.enabled || [];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Check if a plugin is enabled
|
|
164
|
+
*
|
|
165
|
+
* @param name - Plugin name
|
|
166
|
+
* @returns True if enabled
|
|
167
|
+
*/
|
|
168
|
+
async isPluginEnabled(name) {
|
|
169
|
+
const enabled = await this.getEnabledPlugins();
|
|
170
|
+
return enabled.includes(name);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Update plugin configuration
|
|
174
|
+
*
|
|
175
|
+
* @param name - Plugin name
|
|
176
|
+
* @param action - 'enable' or 'disable'
|
|
177
|
+
*/
|
|
178
|
+
async updateConfig(name, action) {
|
|
179
|
+
const config = await this.loadConfig();
|
|
180
|
+
if (action === 'enable') {
|
|
181
|
+
if (!config.enabled.includes(name)) {
|
|
182
|
+
config.enabled.push(name);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
config.enabled = config.enabled.filter(p => p !== name);
|
|
187
|
+
}
|
|
188
|
+
await this.saveConfig(config);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Load plugin configuration from .specweave/config.yaml
|
|
192
|
+
*
|
|
193
|
+
* @returns Plugin configuration
|
|
194
|
+
*/
|
|
195
|
+
async loadConfig() {
|
|
196
|
+
// Ensure config directory exists
|
|
197
|
+
const configDir = path.dirname(this.configPath);
|
|
198
|
+
await fs.ensureDir(configDir);
|
|
199
|
+
// Check if config file exists
|
|
200
|
+
if (!(await fs.pathExists(this.configPath))) {
|
|
201
|
+
// Create default config
|
|
202
|
+
const defaultConfig = {
|
|
203
|
+
enabled: [],
|
|
204
|
+
settings: {}
|
|
205
|
+
};
|
|
206
|
+
await this.saveConfig(defaultConfig);
|
|
207
|
+
return defaultConfig;
|
|
208
|
+
}
|
|
209
|
+
// Read and parse config
|
|
210
|
+
const content = await fs.readFile(this.configPath, 'utf-8');
|
|
211
|
+
const config = yaml.load(content);
|
|
212
|
+
// Ensure plugins section exists
|
|
213
|
+
if (!config.plugins) {
|
|
214
|
+
config.plugins = { enabled: [], settings: {} };
|
|
215
|
+
}
|
|
216
|
+
return config.plugins;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Save plugin configuration to .specweave/config.yaml
|
|
220
|
+
*
|
|
221
|
+
* @param pluginConfig - Plugin configuration to save
|
|
222
|
+
*/
|
|
223
|
+
async saveConfig(pluginConfig) {
|
|
224
|
+
// Read full config (if exists)
|
|
225
|
+
let fullConfig = {};
|
|
226
|
+
if (await fs.pathExists(this.configPath)) {
|
|
227
|
+
const content = await fs.readFile(this.configPath, 'utf-8');
|
|
228
|
+
fullConfig = yaml.load(content) || {};
|
|
229
|
+
}
|
|
230
|
+
// Update plugins section
|
|
231
|
+
fullConfig.plugins = pluginConfig;
|
|
232
|
+
// Write back
|
|
233
|
+
const yamlContent = yaml.dump(fullConfig, { indent: 2 });
|
|
234
|
+
await fs.writeFile(this.configPath, yamlContent, 'utf-8');
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Check plugin dependencies
|
|
238
|
+
*
|
|
239
|
+
* Ensures all required plugins are loaded
|
|
240
|
+
*
|
|
241
|
+
* @param plugin - Plugin to check
|
|
242
|
+
* @throws PluginDependencyError if dependencies are not met
|
|
243
|
+
*/
|
|
244
|
+
async checkDependencies(plugin) {
|
|
245
|
+
const { dependencies } = plugin.manifest;
|
|
246
|
+
if (!dependencies || !dependencies.plugins) {
|
|
247
|
+
return; // No dependencies
|
|
248
|
+
}
|
|
249
|
+
const enabledPlugins = await this.getEnabledPlugins();
|
|
250
|
+
const missingDeps = [];
|
|
251
|
+
for (const depName of dependencies.plugins) {
|
|
252
|
+
if (!enabledPlugins.includes(depName)) {
|
|
253
|
+
missingDeps.push(depName);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (missingDeps.length > 0) {
|
|
257
|
+
throw new PluginDependencyError(`Plugin ${plugin.manifest.name} requires: ${missingDeps.join(', ')}`, plugin.manifest.name);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Resolve dependency graph for a plugin
|
|
262
|
+
*
|
|
263
|
+
* Returns all plugins that need to be loaded (including transitive deps)
|
|
264
|
+
*
|
|
265
|
+
* @param plugin - Plugin to resolve
|
|
266
|
+
* @returns Array of plugins in load order
|
|
267
|
+
*/
|
|
268
|
+
async resolveDependencies(plugin) {
|
|
269
|
+
const resolved = [];
|
|
270
|
+
const visited = new Set();
|
|
271
|
+
const resolve = async (p) => {
|
|
272
|
+
if (visited.has(p.manifest.name)) {
|
|
273
|
+
return; // Already processed
|
|
274
|
+
}
|
|
275
|
+
visited.add(p.manifest.name);
|
|
276
|
+
// Resolve dependencies first
|
|
277
|
+
if (p.manifest.dependencies?.plugins) {
|
|
278
|
+
for (const depName of p.manifest.dependencies.plugins) {
|
|
279
|
+
const depPath = path.join(this.pluginsDir, depName);
|
|
280
|
+
const depPlugin = await this.loader.loadFromDirectory(depPath);
|
|
281
|
+
await resolve(depPlugin);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Add this plugin
|
|
285
|
+
resolved.push(p);
|
|
286
|
+
};
|
|
287
|
+
await resolve(plugin);
|
|
288
|
+
return resolved;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get plugins that depend on a given plugin
|
|
292
|
+
*
|
|
293
|
+
* @param name - Plugin name
|
|
294
|
+
* @returns Array of dependent plugin names
|
|
295
|
+
*/
|
|
296
|
+
async getDependents(name) {
|
|
297
|
+
const dependents = [];
|
|
298
|
+
const availablePlugins = await this.getAvailablePlugins();
|
|
299
|
+
for (const info of availablePlugins) {
|
|
300
|
+
if (info.enabled) {
|
|
301
|
+
const plugin = await this.loader.loadFromDirectory(info.path);
|
|
302
|
+
if (plugin.manifest.dependencies?.plugins?.includes(name)) {
|
|
303
|
+
dependents.push(info.name);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return dependents;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Validate plugin configuration
|
|
311
|
+
*
|
|
312
|
+
* Checks for circular dependencies, missing plugins, etc.
|
|
313
|
+
*
|
|
314
|
+
* @returns Validation result
|
|
315
|
+
*/
|
|
316
|
+
async validateConfig() {
|
|
317
|
+
const errors = [];
|
|
318
|
+
const enabledPlugins = await this.getEnabledPlugins();
|
|
319
|
+
// Check if all enabled plugins exist
|
|
320
|
+
for (const name of enabledPlugins) {
|
|
321
|
+
const pluginPath = path.join(this.pluginsDir, name);
|
|
322
|
+
if (!(await fs.pathExists(pluginPath))) {
|
|
323
|
+
errors.push(`Enabled plugin '${name}' not found at ${pluginPath}`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Check for circular dependencies
|
|
327
|
+
const visited = new Set();
|
|
328
|
+
const recursionStack = new Set();
|
|
329
|
+
const hasCycle = async (name) => {
|
|
330
|
+
visited.add(name);
|
|
331
|
+
recursionStack.add(name);
|
|
332
|
+
const pluginPath = path.join(this.pluginsDir, name);
|
|
333
|
+
if (!(await fs.pathExists(pluginPath))) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
const plugin = await this.loader.loadFromDirectory(pluginPath);
|
|
337
|
+
const deps = plugin.manifest.dependencies?.plugins || [];
|
|
338
|
+
for (const dep of deps) {
|
|
339
|
+
if (!visited.has(dep)) {
|
|
340
|
+
if (await hasCycle(dep)) {
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
else if (recursionStack.has(dep)) {
|
|
345
|
+
errors.push(`Circular dependency detected: ${name} → ${dep}`);
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
recursionStack.delete(name);
|
|
350
|
+
return false;
|
|
351
|
+
};
|
|
352
|
+
for (const name of enabledPlugins) {
|
|
353
|
+
if (!visited.has(name)) {
|
|
354
|
+
await hasCycle(name);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
valid: errors.length === 0,
|
|
359
|
+
errors
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Get plugin by name
|
|
364
|
+
*
|
|
365
|
+
* @param name - Plugin name
|
|
366
|
+
* @returns Loaded plugin
|
|
367
|
+
* @throws PluginNotFoundError if plugin is not loaded
|
|
368
|
+
*/
|
|
369
|
+
getPlugin(name) {
|
|
370
|
+
const plugin = this.loadedPlugins.get(name);
|
|
371
|
+
if (!plugin) {
|
|
372
|
+
throw new PluginNotFoundError(name);
|
|
373
|
+
}
|
|
374
|
+
return plugin;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Get all loaded plugins
|
|
378
|
+
*
|
|
379
|
+
* @returns Map of loaded plugins
|
|
380
|
+
*/
|
|
381
|
+
getLoadedPlugins() {
|
|
382
|
+
return this.loadedPlugins;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Clear loaded plugins cache
|
|
386
|
+
*
|
|
387
|
+
* Useful for testing or forcing reload
|
|
388
|
+
*/
|
|
389
|
+
clearCache() {
|
|
390
|
+
this.loadedPlugins.clear();
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=plugin-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../../src/core/plugin-manager.ts"],"names":[],"mappings":"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"}
|