@cubis/foundry 0.3.32 → 0.3.33
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/README.md +23 -0
- package/bin/cubis.js +461 -37
- package/mcp/README.md +17 -0
- package/mcp/catalogs/default.json +14 -0
- package/mcp/powers/atlassian-mcp/POWER.md +91 -0
- package/mcp/powers/atlassian-mcp/SKILL.md +88 -0
- package/mcp/powers/building-mcp-server-on-cloudflare/POWER.md +261 -0
- package/mcp/powers/building-mcp-server-on-cloudflare/SKILL.md +258 -0
- package/mcp/powers/datadog-automation/POWER.md +238 -0
- package/mcp/powers/datadog-automation/SKILL.md +235 -0
- package/mcp/powers/github-automation/POWER.md +230 -0
- package/mcp/powers/github-automation/SKILL.md +227 -0
- package/mcp/powers/mcp-builder/POWER.md +179 -0
- package/mcp/powers/mcp-builder/SKILL.md +176 -0
- package/mcp/powers/mcp-developer/POWER.md +88 -0
- package/mcp/powers/mcp-developer/SKILL.md +85 -0
- package/mcp/powers/postman/POWER.md +243 -0
- package/mcp/powers/postman/SKILL.md +240 -0
- package/mcp/powers/sentry-automation/POWER.md +235 -0
- package/mcp/powers/sentry-automation/SKILL.md +232 -0
- package/mcp/skills/atlassian-mcp/SKILL.md +88 -0
- package/mcp/skills/building-mcp-server-on-cloudflare/SKILL.md +258 -0
- package/mcp/skills/datadog-automation/SKILL.md +235 -0
- package/mcp/skills/github-automation/SKILL.md +227 -0
- package/mcp/skills/mcp-builder/SKILL.md +176 -0
- package/mcp/skills/mcp-developer/SKILL.md +85 -0
- package/mcp/skills/postman/SKILL.md +240 -0
- package/mcp/skills/sentry-automation/SKILL.md +232 -0
- package/package.json +2 -1
- package/workflows/powers/architecture/POWER.md +12 -46
- package/workflows/powers/architecture/SKILL.md +12 -46
- package/workflows/powers/atlassian-mcp/POWER.md +11 -81
- package/workflows/powers/atlassian-mcp/SKILL.md +11 -81
- package/workflows/powers/building-mcp-server-on-cloudflare/POWER.md +12 -252
- package/workflows/powers/building-mcp-server-on-cloudflare/SKILL.md +12 -252
- package/workflows/powers/code-review-checklist/POWER.md +11 -99
- package/workflows/powers/code-review-checklist/SKILL.md +11 -99
- package/workflows/powers/csharp-pro/POWER.md +43 -0
- package/workflows/powers/csharp-pro/SKILL.md +40 -0
- package/workflows/powers/database-design/POWER.md +47 -5
- package/workflows/powers/database-design/SKILL.md +45 -4
- package/workflows/powers/database-optimizer/POWER.md +11 -23
- package/workflows/powers/database-optimizer/SKILL.md +5 -5
- package/workflows/powers/datadog-automation/POWER.md +12 -229
- package/workflows/powers/datadog-automation/SKILL.md +12 -229
- package/workflows/powers/debugging-wizard/POWER.md +12 -78
- package/workflows/powers/debugging-wizard/SKILL.md +12 -78
- package/workflows/powers/deployment-procedures/POWER.md +11 -231
- package/workflows/powers/deployment-procedures/SKILL.md +11 -231
- package/workflows/powers/drift-flutter/POWER.md +51 -0
- package/workflows/powers/drift-flutter/SKILL.md +2 -2
- package/workflows/powers/github-automation/POWER.md +12 -221
- package/workflows/powers/github-automation/SKILL.md +12 -221
- package/workflows/powers/golang-pro/POWER.md +38 -66
- package/workflows/powers/golang-pro/SKILL.md +38 -66
- package/workflows/powers/java-pro/POWER.md +43 -0
- package/workflows/powers/java-pro/SKILL.md +40 -0
- package/workflows/powers/javascript-pro/POWER.md +37 -67
- package/workflows/powers/javascript-pro/SKILL.md +37 -67
- package/workflows/powers/kotlin-pro/POWER.md +43 -0
- package/workflows/powers/kotlin-pro/SKILL.md +40 -0
- package/workflows/powers/mcp-builder/POWER.md +12 -170
- package/workflows/powers/mcp-builder/SKILL.md +12 -170
- package/workflows/powers/mcp-developer/POWER.md +11 -78
- package/workflows/powers/mcp-developer/SKILL.md +11 -78
- package/workflows/powers/nextjs-developer/POWER.md +41 -148
- package/workflows/powers/nextjs-developer/SKILL.md +41 -148
- package/workflows/powers/nextjs-react-expert/POWER.md +10 -281
- package/workflows/powers/nextjs-react-expert/SKILL.md +10 -281
- package/workflows/powers/nodejs-best-practices/POWER.md +33 -317
- package/workflows/powers/nodejs-best-practices/SKILL.md +33 -317
- package/workflows/powers/postman/POWER.md +11 -233
- package/workflows/powers/postman/SKILL.md +11 -233
- package/workflows/powers/python-patterns/POWER.md +11 -431
- package/workflows/powers/python-patterns/SKILL.md +11 -431
- package/workflows/powers/python-pro/POWER.md +38 -66
- package/workflows/powers/python-pro/SKILL.md +38 -66
- package/workflows/powers/react-best-practices/POWER.md +35 -118
- package/workflows/powers/react-best-practices/SKILL.md +35 -118
- package/workflows/powers/react-expert/POWER.md +38 -66
- package/workflows/powers/react-expert/SKILL.md +38 -66
- package/workflows/powers/rust-engineer/POWER.md +10 -75
- package/workflows/powers/rust-engineer/SKILL.md +10 -75
- package/workflows/powers/rust-pro/POWER.md +36 -163
- package/workflows/powers/rust-pro/SKILL.md +36 -163
- package/workflows/powers/sentry-automation/POWER.md +12 -226
- package/workflows/powers/sentry-automation/SKILL.md +12 -226
- package/workflows/powers/server-management/POWER.md +11 -151
- package/workflows/powers/server-management/SKILL.md +11 -151
- package/workflows/powers/tdd-workflow/POWER.md +12 -140
- package/workflows/powers/tdd-workflow/SKILL.md +12 -140
- package/workflows/powers/testing-patterns/POWER.md +11 -168
- package/workflows/powers/testing-patterns/SKILL.md +11 -168
- package/workflows/powers/typescript-pro/POWER.md +43 -70
- package/workflows/powers/typescript-pro/SKILL.md +43 -70
- package/workflows/powers/vercel-ai/POWER.md +43 -0
- package/workflows/powers/vercel-ai/SKILL.md +40 -0
- package/workflows/powers/vercel-ai-gateway/POWER.md +11 -69
- package/workflows/powers/vercel-ai-gateway/SKILL.md +11 -69
- package/workflows/powers/vercel-ai-sdk/POWER.md +11 -49
- package/workflows/powers/vercel-ai-sdk/SKILL.md +11 -49
- package/workflows/powers/vercel-caching/POWER.md +10 -72
- package/workflows/powers/vercel-caching/SKILL.md +10 -72
- package/workflows/powers/vercel-cli/POWER.md +11 -75
- package/workflows/powers/vercel-cli/SKILL.md +11 -75
- package/workflows/powers/vercel-delivery/POWER.md +45 -0
- package/workflows/powers/vercel-delivery/SKILL.md +42 -0
- package/workflows/powers/vercel-deployments/POWER.md +10 -90
- package/workflows/powers/vercel-deployments/SKILL.md +10 -90
- package/workflows/powers/vercel-domains/POWER.md +10 -69
- package/workflows/powers/vercel-domains/SKILL.md +10 -69
- package/workflows/powers/vercel-firewall/POWER.md +10 -61
- package/workflows/powers/vercel-firewall/SKILL.md +10 -61
- package/workflows/powers/vercel-flags/POWER.md +10 -62
- package/workflows/powers/vercel-flags/SKILL.md +10 -62
- package/workflows/powers/vercel-functions/POWER.md +10 -70
- package/workflows/powers/vercel-functions/SKILL.md +10 -70
- package/workflows/powers/vercel-routing/POWER.md +10 -68
- package/workflows/powers/vercel-routing/SKILL.md +10 -68
- package/workflows/powers/vercel-runtime/POWER.md +43 -0
- package/workflows/powers/vercel-runtime/SKILL.md +40 -0
- package/workflows/powers/vercel-security/POWER.md +43 -0
- package/workflows/powers/vercel-security/SKILL.md +40 -0
- package/workflows/powers/vulnerability-scanner/POWER.md +11 -266
- package/workflows/powers/vulnerability-scanner/SKILL.md +11 -266
- package/workflows/scripts/generate-powers.mjs +95 -202
- package/workflows/skills/atlassian-mcp/SKILL.md +11 -81
- package/workflows/skills/building-mcp-server-on-cloudflare/SKILL.md +12 -252
- package/workflows/skills/catalogs/core.json +30 -0
- package/workflows/skills/catalogs/web-backend.json +70 -0
- package/workflows/skills/csharp-pro/SKILL.md +40 -0
- package/workflows/skills/datadog-automation/SKILL.md +12 -229
- package/workflows/skills/github-automation/SKILL.md +12 -221
- package/workflows/skills/golang-pro/SKILL.md +38 -66
- package/workflows/skills/java-pro/SKILL.md +40 -0
- package/workflows/skills/javascript-pro/SKILL.md +37 -67
- package/workflows/skills/kotlin-pro/SKILL.md +40 -0
- package/workflows/skills/mcp-builder/SKILL.md +12 -170
- package/workflows/skills/mcp-developer/SKILL.md +11 -78
- package/workflows/skills/nextjs-developer/SKILL.md +41 -148
- package/workflows/skills/nextjs-react-expert/SKILL.md +5 -11
- package/workflows/skills/nodejs-best-practices/SKILL.md +33 -317
- package/workflows/skills/postman/SKILL.md +11 -233
- package/workflows/skills/python-pro/SKILL.md +38 -66
- package/workflows/skills/react-best-practices/SKILL.md +35 -118
- package/workflows/skills/react-expert/SKILL.md +38 -66
- package/workflows/skills/rust-pro/SKILL.md +36 -163
- package/workflows/skills/sentry-automation/SKILL.md +12 -226
- package/workflows/skills/skills_index.json +43 -57
- package/workflows/skills/typescript-pro/SKILL.md +43 -70
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/backend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/code-archaeologist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/database-architect.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/debugger.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/devops-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/documentation-writer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/explorer-agent.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/frontend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/game-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/mobile-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/orchestrator.md +28 -400
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/penetration-tester.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/performance-optimizer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/product-manager.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/product-owner.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/project-planner.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/qa-automation-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/security-auditor.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/seo-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/test-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/agents/vercel-expert.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/antigravity/rules/GEMINI.md +7 -6
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/backend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/code-archaeologist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/database-architect.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/debugger.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/devops-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/documentation-writer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/explorer-agent.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/frontend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/game-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/mobile-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/orchestrator.md +28 -400
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/penetration-tester.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/performance-optimizer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/product-manager.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/product-owner.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/project-planner.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/qa-automation-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/security-auditor.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/seo-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/test-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/agents/vercel-expert.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/codex/rules/AGENTS.md +7 -6
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/backend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/code-archaeologist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/database-architect.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/debugger.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/devops-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/documentation-writer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/explorer-agent.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/frontend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/game-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/mobile-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/orchestrator.md +28 -400
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/penetration-tester.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/performance-optimizer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/product-manager.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/product-owner.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/project-planner.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/qa-automation-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/security-auditor.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/seo-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/test-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/agents/vercel-expert.md +1 -1
- package/workflows/workflows/agent-environment-setup/platforms/copilot/rules/AGENTS.md +7 -6
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/csharp-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/golang-pro/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/java-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/javascript-pro/SKILL.md +37 -67
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/kotlin-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nextjs-developer/SKILL.md +41 -148
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nextjs-react-expert/SKILL.md +6 -12
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nodejs-best-practices/SKILL.md +33 -317
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/python-pro/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/react-best-practices/SKILL.md +35 -118
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/react-expert/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/rust-pro/SKILL.md +36 -163
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/skills_index.json +43 -57
- package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/typescript-pro/SKILL.md +43 -70
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/csharp-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/golang-pro/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/java-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/javascript-pro/SKILL.md +37 -67
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/kotlin-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nextjs-developer/SKILL.md +41 -148
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nextjs-react-expert/SKILL.md +6 -12
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nodejs-best-practices/SKILL.md +33 -317
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/python-pro/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/react-best-practices/SKILL.md +35 -118
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/react-expert/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/rust-pro/SKILL.md +36 -163
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/skills_index.json +43 -57
- package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/typescript-pro/SKILL.md +43 -70
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/csharp-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/golang-pro/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/java-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/javascript-pro/SKILL.md +37 -67
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/kotlin-pro/SKILL.md +40 -0
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nextjs-developer/SKILL.md +41 -148
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nextjs-react-expert/SKILL.md +6 -12
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nodejs-best-practices/SKILL.md +33 -317
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/python-pro/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/react-best-practices/SKILL.md +35 -118
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/react-expert/SKILL.md +38 -66
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/rust-pro/SKILL.md +36 -163
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/skills_index.json +43 -57
- package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/typescript-pro/SKILL.md +43 -70
- package/workflows/workflows/agent-environment-setup/shared/agents/backend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/code-archaeologist.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/database-architect.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/debugger.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/devops-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/documentation-writer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/explorer-agent.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/frontend-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/game-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/mobile-developer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/orchestrator.md +28 -400
- package/workflows/workflows/agent-environment-setup/shared/agents/penetration-tester.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/performance-optimizer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/product-manager.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/product-owner.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/project-planner.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/qa-automation-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/security-auditor.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/seo-specialist.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/test-engineer.md +1 -1
- package/workflows/workflows/agent-environment-setup/shared/agents/vercel-expert.md +1 -1
- package/workflows/powers/sub-agents/scripts/run_subagent.py.bak +0 -512
- /package/{workflows → mcp}/powers/atlassian-mcp/steering/authentication-patterns.md +0 -0
- /package/{workflows → mcp}/powers/atlassian-mcp/steering/common-workflows.md +0 -0
- /package/{workflows → mcp}/powers/atlassian-mcp/steering/confluence-operations.md +0 -0
- /package/{workflows → mcp}/powers/atlassian-mcp/steering/jira-queries.md +0 -0
- /package/{workflows → mcp}/powers/atlassian-mcp/steering/mcp-server-setup.md +0 -0
- /package/{workflows → mcp}/powers/building-mcp-server-on-cloudflare/steering/examples.md +0 -0
- /package/{workflows → mcp}/powers/building-mcp-server-on-cloudflare/steering/oauth-setup.md +0 -0
- /package/{workflows → mcp}/powers/building-mcp-server-on-cloudflare/steering/troubleshooting.md +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/LICENSE.txt +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/reference/evaluation.md +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/reference/mcp_best_practices.md +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/reference/node_mcp_server.md +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/reference/python_mcp_server.md +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/scripts/connections.py +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/scripts/evaluation.py +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/scripts/example_evaluation.xml +0 -0
- /package/{workflows → mcp}/powers/mcp-builder/scripts/requirements.txt +0 -0
- /package/{workflows → mcp}/powers/mcp-developer/steering/protocol.md +0 -0
- /package/{workflows → mcp}/powers/mcp-developer/steering/python-sdk.md +0 -0
- /package/{workflows → mcp}/powers/mcp-developer/steering/resources.md +0 -0
- /package/{workflows → mcp}/powers/mcp-developer/steering/tools.md +0 -0
- /package/{workflows → mcp}/powers/mcp-developer/steering/typescript-sdk.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/bloc-state.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/engineering-principles.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/gorouter-navigation.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/performance.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/project-structure.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/riverpod-state.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-expert/steering/widget-patterns.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/steering/log_redaction.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/steering/network_hardening.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/steering/secret-scanning.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/steering/secure_storage_policy.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/steering/vulnerability-patterns.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-security-reviewer/templates/security_review_response.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/golden-testing.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/integration-testing.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/property-testing.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/riverpod-testing.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/test-utilities.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/unit-testing.md +0 -0
- /package/{workflows → mcp}/powers/postman/flutter-test-master/steering/widget-testing.md +0 -0
- /package/{workflows → mcp}/powers/postman/git-commit/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/git-commit/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/gorouter-restoration/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/gorouter-restoration/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/gorouter-restoration/steering/guard_patterns.md +0 -0
- /package/{workflows → mcp}/powers/postman/gorouter-restoration/steering/tab_preservation.md +0 -0
- /package/{workflows → mcp}/powers/postman/gorouter-restoration/templates/guard_redirect.md +0 -0
- /package/{workflows → mcp}/powers/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -0
- /package/{workflows → mcp}/powers/postman/mcp.json +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/steering/communication.md +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/steering/data.md +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/steering/decomposition.md +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/steering/observability.md +0 -0
- /package/{workflows → mcp}/powers/postman/microservices-architect/steering/patterns.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/authentication.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/controllers-routing.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/dtos-validation.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/migration-from-express.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/secure-sessions.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/services-di.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/strangler-fig-pattern.md +0 -0
- /package/{workflows → mcp}/powers/postman/nestjs-expert/steering/testing-patterns.md +0 -0
- /package/{workflows → mcp}/powers/postman/oneup-design/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/oneup-design/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/oneup-design/steering/colors.md +0 -0
- /package/{workflows → mcp}/powers/postman/oneup-design/steering/components.md +0 -0
- /package/{workflows → mcp}/powers/postman/oneup-design/steering/spacing.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/POWER.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/SKILL.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/crud-templates.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/framework-express.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/framework-fastapi.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/framework-nestjs.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/framework-raw-openapi.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/openapi-checklist.md +0 -0
- /package/{workflows → mcp}/powers/postman/openapi-docs/steering/stoplight-ui.md +0 -0
- /package/{workflows → mcp}/powers/postman/steering/steering.md +0 -0
- /package/{workflows → mcp}/skills/atlassian-mcp/references/authentication-patterns.md +0 -0
- /package/{workflows → mcp}/skills/atlassian-mcp/references/common-workflows.md +0 -0
- /package/{workflows → mcp}/skills/atlassian-mcp/references/confluence-operations.md +0 -0
- /package/{workflows → mcp}/skills/atlassian-mcp/references/jira-queries.md +0 -0
- /package/{workflows → mcp}/skills/atlassian-mcp/references/mcp-server-setup.md +0 -0
- /package/{workflows → mcp}/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -0
- /package/{workflows → mcp}/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -0
- /package/{workflows → mcp}/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -0
- /package/{workflows → mcp}/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/LICENSE.txt +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/reference/evaluation.md +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/reference/mcp_best_practices.md +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/reference/node_mcp_server.md +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/reference/python_mcp_server.md +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/scripts/connections.py +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/scripts/evaluation.py +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/scripts/example_evaluation.xml +0 -0
- /package/{workflows → mcp}/skills/mcp-builder/scripts/requirements.txt +0 -0
- /package/{workflows → mcp}/skills/mcp-developer/references/protocol.md +0 -0
- /package/{workflows → mcp}/skills/mcp-developer/references/python-sdk.md +0 -0
- /package/{workflows → mcp}/skills/mcp-developer/references/resources.md +0 -0
- /package/{workflows → mcp}/skills/mcp-developer/references/tools.md +0 -0
- /package/{workflows → mcp}/skills/mcp-developer/references/typescript-sdk.md +0 -0
- /package/{workflows → mcp}/skills/postman/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/bloc-state.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/engineering-principles.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/performance.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/project-structure.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/riverpod-state.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-expert/references/widget-patterns.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/golden-testing.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/integration-testing.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/property-testing.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/test-utilities.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/unit-testing.md +0 -0
- /package/{workflows → mcp}/skills/postman/flutter-test-master/references/widget-testing.md +0 -0
- /package/{workflows → mcp}/skills/postman/git-commit/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/git-commit/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/gorouter-restoration/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/gorouter-restoration/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -0
- /package/{workflows → mcp}/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -0
- /package/{workflows → mcp}/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -0
- /package/{workflows → mcp}/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -0
- /package/{workflows → mcp}/skills/postman/mcp.json +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/references/communication.md +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/references/data.md +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/references/decomposition.md +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/references/observability.md +0 -0
- /package/{workflows → mcp}/skills/postman/microservices-architect/references/patterns.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/authentication.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/controllers-routing.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/dtos-validation.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/migration-from-express.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/secure-sessions.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/services-di.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -0
- /package/{workflows → mcp}/skills/postman/nestjs-expert/references/testing-patterns.md +0 -0
- /package/{workflows → mcp}/skills/postman/oneup-design/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/oneup-design/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/oneup-design/references/colors.md +0 -0
- /package/{workflows → mcp}/skills/postman/oneup-design/references/components.md +0 -0
- /package/{workflows → mcp}/skills/postman/oneup-design/references/spacing.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/POWER.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/SKILL.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/crud-templates.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/framework-express.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/framework-fastapi.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/framework-nestjs.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/openapi-checklist.md +0 -0
- /package/{workflows → mcp}/skills/postman/openapi-docs/references/stoplight-ui.md +0 -0
- /package/{workflows → mcp}/skills/postman/references/steering.md +0 -0
package/bin/cubis.js
CHANGED
|
@@ -249,6 +249,13 @@ const TECH_RUST_FRAMEWORK_SIGNALS = [
|
|
|
249
249
|
["rocket", "Rocket"],
|
|
250
250
|
["tokio", "Tokio"]
|
|
251
251
|
];
|
|
252
|
+
const SKILL_PROFILES = new Set(["core", "web-backend", "full"]);
|
|
253
|
+
const DEFAULT_SKILL_PROFILE = "core";
|
|
254
|
+
const CATALOG_FILES = Object.freeze({
|
|
255
|
+
core: path.join("skills", "catalogs", "core.json"),
|
|
256
|
+
"web-backend": path.join("skills", "catalogs", "web-backend.json"),
|
|
257
|
+
mcp: path.join("catalogs", "default.json")
|
|
258
|
+
});
|
|
252
259
|
|
|
253
260
|
function platformInstallsCustomAgents(platformId) {
|
|
254
261
|
const profile = WORKFLOW_PROFILES[platformId];
|
|
@@ -287,6 +294,22 @@ function agentAssetsRoot() {
|
|
|
287
294
|
return existsSync(preferred) ? preferred : packageRoot();
|
|
288
295
|
}
|
|
289
296
|
|
|
297
|
+
function workflowSkillsRoot() {
|
|
298
|
+
return path.join(agentAssetsRoot(), "skills");
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function mcpRoot() {
|
|
302
|
+
return path.join(packageRoot(), "mcp");
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
function mcpSkillsRoot() {
|
|
306
|
+
return path.join(mcpRoot(), "skills");
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function mcpCatalogRoot() {
|
|
310
|
+
return path.join(mcpRoot(), "catalogs");
|
|
311
|
+
}
|
|
312
|
+
|
|
290
313
|
function expandPath(inputPath, cwd = process.cwd()) {
|
|
291
314
|
if (!inputPath) return cwd;
|
|
292
315
|
if (inputPath === "~") return os.homedir();
|
|
@@ -308,6 +331,32 @@ function normalizeScope(value) {
|
|
|
308
331
|
throw new Error(`Unknown scope '${value}'. Use --scope project or --scope global.`);
|
|
309
332
|
}
|
|
310
333
|
|
|
334
|
+
function normalizeSkillProfile(value) {
|
|
335
|
+
const normalized = String(value || DEFAULT_SKILL_PROFILE)
|
|
336
|
+
.trim()
|
|
337
|
+
.toLowerCase();
|
|
338
|
+
if (!SKILL_PROFILES.has(normalized)) {
|
|
339
|
+
throw new Error(`Unknown skill profile '${value}'. Use core|web-backend|full.`);
|
|
340
|
+
}
|
|
341
|
+
return normalized;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
function resolveWorkflowSkillInstallOptions(options) {
|
|
345
|
+
const allSkills = Boolean(options.allSkills);
|
|
346
|
+
let skillProfile = normalizeSkillProfile(options.skillProfile || DEFAULT_SKILL_PROFILE);
|
|
347
|
+
let includeMcp = Boolean(options.includeMcp);
|
|
348
|
+
|
|
349
|
+
if (allSkills) {
|
|
350
|
+
skillProfile = "full";
|
|
351
|
+
includeMcp = true;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return {
|
|
355
|
+
skillProfile,
|
|
356
|
+
includeMcp
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
|
|
311
360
|
function normalizeMcpScope(value, fallback = "project") {
|
|
312
361
|
if (!value) return fallback;
|
|
313
362
|
const normalized = value.trim().toLowerCase();
|
|
@@ -1144,6 +1193,20 @@ async function collectTechSnapshot(rootDir) {
|
|
|
1144
1193
|
keyScripts.push({ name, command: packageScripts.get(name) });
|
|
1145
1194
|
}
|
|
1146
1195
|
|
|
1196
|
+
const mcpSignals = [];
|
|
1197
|
+
const mcpSignalPaths = [
|
|
1198
|
+
"cbx_config.json",
|
|
1199
|
+
".cbx/mcp",
|
|
1200
|
+
".vscode/mcp.json",
|
|
1201
|
+
".gemini/settings.json",
|
|
1202
|
+
".copilot/mcp-config.json"
|
|
1203
|
+
];
|
|
1204
|
+
for (const signalPath of mcpSignalPaths) {
|
|
1205
|
+
if (fileExists(signalPath)) {
|
|
1206
|
+
mcpSignals.push(signalPath);
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1147
1210
|
return {
|
|
1148
1211
|
rootDir,
|
|
1149
1212
|
scannedFiles: discoveredFiles.length,
|
|
@@ -1158,7 +1221,8 @@ async function collectTechSnapshot(rootDir) {
|
|
|
1158
1221
|
go: toSortedArray(goModules),
|
|
1159
1222
|
python: toSortedArray(pythonPackages),
|
|
1160
1223
|
rust: toSortedArray(rustCrates)
|
|
1161
|
-
}
|
|
1224
|
+
},
|
|
1225
|
+
mcpSignals: toSortedArray(mcpSignals)
|
|
1162
1226
|
};
|
|
1163
1227
|
}
|
|
1164
1228
|
|
|
@@ -1178,13 +1242,66 @@ function appendTechPackageSection(lines, heading, packages) {
|
|
|
1178
1242
|
lines.push("");
|
|
1179
1243
|
}
|
|
1180
1244
|
|
|
1181
|
-
function
|
|
1245
|
+
function inferRecommendedSkills(snapshot) {
|
|
1246
|
+
const recommended = new Set();
|
|
1247
|
+
const hasFramework = (name) => snapshot.frameworks.includes(name);
|
|
1248
|
+
|
|
1249
|
+
if (hasFramework("Next.js")) {
|
|
1250
|
+
recommended.add("nextjs-developer");
|
|
1251
|
+
recommended.add("react-expert");
|
|
1252
|
+
recommended.add("typescript-pro");
|
|
1253
|
+
}
|
|
1254
|
+
if (hasFramework("React")) {
|
|
1255
|
+
recommended.add("react-expert");
|
|
1256
|
+
}
|
|
1257
|
+
if (hasFramework("NestJS")) {
|
|
1258
|
+
recommended.add("nestjs-expert");
|
|
1259
|
+
recommended.add("nodejs-best-practices");
|
|
1260
|
+
}
|
|
1261
|
+
if (hasFramework("FastAPI")) {
|
|
1262
|
+
recommended.add("fastapi-expert");
|
|
1263
|
+
recommended.add("python-pro");
|
|
1264
|
+
}
|
|
1265
|
+
if (hasFramework("Go Modules")) {
|
|
1266
|
+
recommended.add("golang-pro");
|
|
1267
|
+
}
|
|
1268
|
+
if (hasFramework("Rust Cargo")) {
|
|
1269
|
+
recommended.add("rust-pro");
|
|
1270
|
+
}
|
|
1271
|
+
if (hasFramework("Flutter")) {
|
|
1272
|
+
recommended.add("flutter-expert");
|
|
1273
|
+
recommended.add("mobile-design");
|
|
1274
|
+
}
|
|
1275
|
+
if (recommended.size === 0) {
|
|
1276
|
+
recommended.add("clean-code");
|
|
1277
|
+
recommended.add("plan-writing");
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
return [...recommended].sort((a, b) => a.localeCompare(b));
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
function inferContextBudget(snapshot) {
|
|
1284
|
+
const webBackendSignals = new Set(["Next.js", "React", "NestJS", "FastAPI", "Go Modules", "Rust Cargo"]);
|
|
1285
|
+
const webBackendDetected = snapshot.frameworks.some((framework) => webBackendSignals.has(framework));
|
|
1286
|
+
const suggestedProfile = webBackendDetected ? "web-backend" : "core";
|
|
1287
|
+
const includeMcp = Array.isArray(snapshot.mcpSignals) && snapshot.mcpSignals.length > 0;
|
|
1288
|
+
return {
|
|
1289
|
+
suggestedProfile,
|
|
1290
|
+
includeMcp
|
|
1291
|
+
};
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
function buildTechMd(snapshot, { compact = false } = {}) {
|
|
1182
1295
|
const lines = [];
|
|
1296
|
+
const recommendedSkills = inferRecommendedSkills(snapshot);
|
|
1297
|
+
const contextBudget = inferContextBudget(snapshot);
|
|
1298
|
+
|
|
1183
1299
|
lines.push("# TECH.md");
|
|
1184
1300
|
lines.push("");
|
|
1185
1301
|
lines.push(`Generated by cbx on ${new Date().toISOString()}.`);
|
|
1186
1302
|
lines.push(`Root: \`${toPosixPath(snapshot.rootDir)}\``);
|
|
1187
1303
|
lines.push(`Files scanned: ${snapshot.scannedFiles} (max ${TECH_SCAN_MAX_FILES}).`);
|
|
1304
|
+
lines.push(`Mode: ${compact ? "compact" : "full"}.`);
|
|
1188
1305
|
lines.push("");
|
|
1189
1306
|
|
|
1190
1307
|
lines.push("## Stack Snapshot");
|
|
@@ -1207,43 +1324,69 @@ function buildTechMd(snapshot) {
|
|
|
1207
1324
|
}
|
|
1208
1325
|
lines.push("");
|
|
1209
1326
|
|
|
1210
|
-
lines.push("##
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
appendTechPackageSection(lines, "Go Modules (go.mod)", snapshot.packageSignals.go);
|
|
1214
|
-
appendTechPackageSection(lines, "Python Packages (requirements / pyproject)", snapshot.packageSignals.python);
|
|
1215
|
-
appendTechPackageSection(lines, "Rust Crates (Cargo.toml)", snapshot.packageSignals.rust);
|
|
1216
|
-
|
|
1217
|
-
lines.push("## Tooling and Lockfiles");
|
|
1218
|
-
if (snapshot.lockfiles.length === 0) {
|
|
1219
|
-
lines.push("- No lockfiles detected.");
|
|
1220
|
-
} else {
|
|
1221
|
-
lines.push(`- ${snapshot.lockfiles.join(", ")}`);
|
|
1327
|
+
lines.push("## Recommended Skills");
|
|
1328
|
+
for (const skillId of recommendedSkills) {
|
|
1329
|
+
lines.push(`- \`${skillId}\``);
|
|
1222
1330
|
}
|
|
1223
1331
|
lines.push("");
|
|
1224
1332
|
|
|
1225
|
-
lines.push("##
|
|
1226
|
-
if (snapshot.
|
|
1227
|
-
lines.push("- No
|
|
1333
|
+
lines.push("## MCP Footprint");
|
|
1334
|
+
if (!snapshot.mcpSignals || snapshot.mcpSignals.length === 0) {
|
|
1335
|
+
lines.push("- No MCP configuration signals detected in workspace.");
|
|
1228
1336
|
} else {
|
|
1229
|
-
for (const
|
|
1230
|
-
lines.push(`- \`${
|
|
1337
|
+
for (const signal of snapshot.mcpSignals) {
|
|
1338
|
+
lines.push(`- \`${signal}\``);
|
|
1231
1339
|
}
|
|
1232
1340
|
}
|
|
1233
1341
|
lines.push("");
|
|
1234
1342
|
|
|
1235
|
-
lines.push("##
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1343
|
+
lines.push("## Context Budget Notes");
|
|
1344
|
+
lines.push(`- Suggested install profile: \`${contextBudget.suggestedProfile}\``);
|
|
1345
|
+
lines.push(`- Suggested MCP inclusion: \`${contextBudget.includeMcp ? "--include-mcp" : "skip --include-mcp"}\``);
|
|
1346
|
+
lines.push("- Use `--all-skills` only when task scope clearly requires full catalog breadth.");
|
|
1347
|
+
lines.push("");
|
|
1348
|
+
|
|
1349
|
+
if (!compact) {
|
|
1350
|
+
lines.push("## Package Signals");
|
|
1351
|
+
appendTechPackageSection(lines, "JavaScript / TypeScript (package.json)", snapshot.packageSignals.javascript);
|
|
1352
|
+
appendTechPackageSection(lines, "Dart / Flutter (pubspec.yaml)", snapshot.packageSignals.dart);
|
|
1353
|
+
appendTechPackageSection(lines, "Go Modules (go.mod)", snapshot.packageSignals.go);
|
|
1354
|
+
appendTechPackageSection(lines, "Python Packages (requirements / pyproject)", snapshot.packageSignals.python);
|
|
1355
|
+
appendTechPackageSection(lines, "Rust Crates (Cargo.toml)", snapshot.packageSignals.rust);
|
|
1356
|
+
|
|
1357
|
+
lines.push("## Tooling and Lockfiles");
|
|
1358
|
+
if (snapshot.lockfiles.length === 0) {
|
|
1359
|
+
lines.push("- No lockfiles detected.");
|
|
1360
|
+
} else {
|
|
1361
|
+
lines.push(`- ${snapshot.lockfiles.join(", ")}`);
|
|
1362
|
+
}
|
|
1363
|
+
lines.push("");
|
|
1364
|
+
|
|
1365
|
+
lines.push("## Key Scripts");
|
|
1366
|
+
if (snapshot.keyScripts.length === 0) {
|
|
1367
|
+
lines.push("- No common scripts detected.");
|
|
1368
|
+
} else {
|
|
1369
|
+
for (const script of snapshot.keyScripts) {
|
|
1370
|
+
lines.push(`- \`${script.name}\`: \`${script.command}\``);
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
lines.push("");
|
|
1374
|
+
|
|
1375
|
+
lines.push("## Important Top-Level Paths");
|
|
1376
|
+
if (snapshot.topDirs.length === 0) {
|
|
1377
|
+
lines.push("- No significant top-level directories detected.");
|
|
1378
|
+
} else {
|
|
1379
|
+
for (const dir of snapshot.topDirs) {
|
|
1380
|
+
lines.push(`- \`${dir}/\``);
|
|
1381
|
+
}
|
|
1241
1382
|
}
|
|
1383
|
+
lines.push("");
|
|
1242
1384
|
}
|
|
1243
|
-
lines.push("");
|
|
1244
1385
|
|
|
1245
1386
|
lines.push("## Maintenance");
|
|
1246
|
-
lines.push(
|
|
1387
|
+
lines.push(
|
|
1388
|
+
`- Re-run \`cbx rules tech-md --overwrite${compact ? " --compact" : ""}\` after major stack or architecture changes.`
|
|
1389
|
+
);
|
|
1247
1390
|
lines.push("");
|
|
1248
1391
|
|
|
1249
1392
|
return lines.join("\n");
|
|
@@ -1489,7 +1632,7 @@ function extractSkillIdFromIndexPath(indexPathValue) {
|
|
|
1489
1632
|
}
|
|
1490
1633
|
|
|
1491
1634
|
async function resolveTopLevelSkillIdsFromIndex() {
|
|
1492
|
-
const skillsRoot =
|
|
1635
|
+
const skillsRoot = workflowSkillsRoot();
|
|
1493
1636
|
const indexPath = path.join(skillsRoot, "skills_index.json");
|
|
1494
1637
|
if (!(await pathExists(indexPath))) return [];
|
|
1495
1638
|
|
|
@@ -1531,11 +1674,97 @@ async function resolveTopLevelSkillIdsFromIndex() {
|
|
|
1531
1674
|
return topLevelIds;
|
|
1532
1675
|
}
|
|
1533
1676
|
|
|
1534
|
-
async function
|
|
1535
|
-
|
|
1677
|
+
async function readSkillCatalogIds(catalogPath) {
|
|
1678
|
+
if (!(await pathExists(catalogPath))) return [];
|
|
1679
|
+
let parsed;
|
|
1680
|
+
try {
|
|
1681
|
+
parsed = JSON.parse(await readFile(catalogPath, "utf8"));
|
|
1682
|
+
} catch {
|
|
1683
|
+
return [];
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
const values = Array.isArray(parsed) ? parsed : Array.isArray(parsed?.skills) ? parsed.skills : [];
|
|
1687
|
+
const ids = [];
|
|
1688
|
+
const seen = new Set();
|
|
1689
|
+
for (const value of values) {
|
|
1690
|
+
const id = String(value || "").trim();
|
|
1691
|
+
if (!id || id.startsWith(".")) continue;
|
|
1692
|
+
const key = id.toLowerCase();
|
|
1693
|
+
if (seen.has(key)) continue;
|
|
1694
|
+
seen.add(key);
|
|
1695
|
+
ids.push(id);
|
|
1696
|
+
}
|
|
1697
|
+
return ids;
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
async function listTopLevelSkillIdsFromRoot(rootPath) {
|
|
1701
|
+
if (!(await pathExists(rootPath))) return [];
|
|
1702
|
+
const entries = await readdir(rootPath, { withFileTypes: true });
|
|
1703
|
+
const out = [];
|
|
1704
|
+
for (const entry of entries) {
|
|
1705
|
+
if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
|
|
1706
|
+
const skillId = entry.name;
|
|
1707
|
+
const skillFile = path.join(rootPath, skillId, "SKILL.md");
|
|
1708
|
+
if (!(await pathExists(skillFile))) continue;
|
|
1709
|
+
out.push(skillId);
|
|
1710
|
+
}
|
|
1711
|
+
return out.sort((a, b) => a.localeCompare(b));
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
async function resolveSkillSourceDirectory(skillId) {
|
|
1715
|
+
const normalized = String(skillId || "").trim();
|
|
1716
|
+
if (!normalized) return null;
|
|
1717
|
+
const candidates = [
|
|
1718
|
+
path.join(mcpSkillsRoot(), normalized),
|
|
1719
|
+
path.join(workflowSkillsRoot(), normalized)
|
|
1720
|
+
];
|
|
1721
|
+
for (const candidate of candidates) {
|
|
1722
|
+
const skillFile = path.join(candidate, "SKILL.md");
|
|
1723
|
+
if ((await pathExists(candidate)) && (await pathExists(skillFile))) {
|
|
1724
|
+
return candidate;
|
|
1725
|
+
}
|
|
1726
|
+
}
|
|
1727
|
+
return null;
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1730
|
+
async function resolveCatalogSkillIds({
|
|
1731
|
+
profile,
|
|
1732
|
+
includeMcp
|
|
1733
|
+
}) {
|
|
1734
|
+
const workflowCatalogPath = path.join(workflowSkillsRoot(), CATALOG_FILES[profile] || "");
|
|
1735
|
+
const workflowCatalogIds = await readSkillCatalogIds(workflowCatalogPath);
|
|
1736
|
+
const workflowProfileIds =
|
|
1737
|
+
workflowCatalogIds.length > 0
|
|
1738
|
+
? workflowCatalogIds
|
|
1739
|
+
: profile === "full"
|
|
1740
|
+
? await listTopLevelSkillIdsFromRoot(workflowSkillsRoot())
|
|
1741
|
+
: [];
|
|
1742
|
+
|
|
1743
|
+
if (!includeMcp) return workflowProfileIds;
|
|
1744
|
+
|
|
1745
|
+
const mcpCatalogPath = path.join(mcpCatalogRoot(), CATALOG_FILES.mcp);
|
|
1746
|
+
const mcpCatalogIds = await readSkillCatalogIds(mcpCatalogPath);
|
|
1747
|
+
const mcpIds = mcpCatalogIds.length > 0 ? mcpCatalogIds : await listTopLevelSkillIdsFromRoot(mcpSkillsRoot());
|
|
1748
|
+
return unique([...workflowProfileIds, ...mcpIds]);
|
|
1749
|
+
}
|
|
1750
|
+
|
|
1751
|
+
async function resolveInstallSkillIds({
|
|
1752
|
+
platformSpec,
|
|
1753
|
+
extraSkillIds = [],
|
|
1754
|
+
skillProfile = DEFAULT_SKILL_PROFILE,
|
|
1755
|
+
includeMcp = false
|
|
1756
|
+
}) {
|
|
1536
1757
|
const fallbackManifestSkillIds = Array.isArray(platformSpec.skills) ? platformSpec.skills : [];
|
|
1758
|
+
const catalogSelectedIds = await resolveCatalogSkillIds({
|
|
1759
|
+
profile: normalizeSkillProfile(skillProfile),
|
|
1760
|
+
includeMcp
|
|
1761
|
+
});
|
|
1537
1762
|
|
|
1538
|
-
let selected =
|
|
1763
|
+
let selected = catalogSelectedIds.length > 0 ? catalogSelectedIds : fallbackManifestSkillIds;
|
|
1764
|
+
if (selected.length === 0) {
|
|
1765
|
+
const indexedSkillIds = await resolveTopLevelSkillIdsFromIndex();
|
|
1766
|
+
selected = indexedSkillIds;
|
|
1767
|
+
}
|
|
1539
1768
|
if (Array.isArray(platformSpec.skillAllowList) && platformSpec.skillAllowList.length > 0) {
|
|
1540
1769
|
const allow = new Set(platformSpec.skillAllowList.map((item) => String(item).toLowerCase()));
|
|
1541
1770
|
selected = selected.filter((skillId) => allow.has(String(skillId).toLowerCase()));
|
|
@@ -3738,6 +3967,8 @@ async function installBundleArtifacts({
|
|
|
3738
3967
|
overwrite,
|
|
3739
3968
|
profilePathsOverride = null,
|
|
3740
3969
|
extraSkillIds = [],
|
|
3970
|
+
skillProfile = DEFAULT_SKILL_PROFILE,
|
|
3971
|
+
includeMcp = false,
|
|
3741
3972
|
terminalVerifierSelection = null,
|
|
3742
3973
|
dryRun = false,
|
|
3743
3974
|
cwd = process.cwd()
|
|
@@ -3838,14 +4069,18 @@ async function installBundleArtifacts({
|
|
|
3838
4069
|
|
|
3839
4070
|
const skillIds = await resolveInstallSkillIds({
|
|
3840
4071
|
platformSpec,
|
|
3841
|
-
extraSkillIds
|
|
4072
|
+
extraSkillIds,
|
|
4073
|
+
skillProfile,
|
|
4074
|
+
includeMcp
|
|
3842
4075
|
});
|
|
3843
4076
|
for (const skillId of skillIds) {
|
|
3844
|
-
const source =
|
|
4077
|
+
const source = await resolveSkillSourceDirectory(skillId);
|
|
3845
4078
|
const destination = path.join(profilePaths.skillsDir, skillId);
|
|
3846
4079
|
|
|
3847
|
-
if (!
|
|
3848
|
-
throw new Error(
|
|
4080
|
+
if (!source) {
|
|
4081
|
+
throw new Error(
|
|
4082
|
+
`Missing skill source directory for '${skillId}' (checked ${workflowSkillsRoot()} and ${mcpSkillsRoot()}).`
|
|
4083
|
+
);
|
|
3849
4084
|
}
|
|
3850
4085
|
|
|
3851
4086
|
const result = await copyArtifact({ source, destination, overwrite, dryRun });
|
|
@@ -3855,7 +4090,7 @@ async function installBundleArtifacts({
|
|
|
3855
4090
|
}
|
|
3856
4091
|
|
|
3857
4092
|
// Copy skills_index.json if it exists in the package skills root
|
|
3858
|
-
const skillsIndexSource = path.join(
|
|
4093
|
+
const skillsIndexSource = path.join(workflowSkillsRoot(), "skills_index.json");
|
|
3859
4094
|
if (await pathExists(skillsIndexSource)) {
|
|
3860
4095
|
const skillsIndexDest = path.join(profilePaths.skillsDir, "skills_index.json");
|
|
3861
4096
|
const indexResult = await copyArtifact({ source: skillsIndexSource, destination: skillsIndexDest, overwrite, dryRun });
|
|
@@ -4638,6 +4873,13 @@ function withInstallOptions(command) {
|
|
|
4638
4873
|
"--terminal-verifier <provider>",
|
|
4639
4874
|
"Antigravity only: verifier provider (codex|gemini). Implies --terminal-integration."
|
|
4640
4875
|
)
|
|
4876
|
+
.option(
|
|
4877
|
+
"--skill-profile <profile>",
|
|
4878
|
+
"skill install profile: core|web-backend|full (default: core)",
|
|
4879
|
+
DEFAULT_SKILL_PROFILE
|
|
4880
|
+
)
|
|
4881
|
+
.option("--include-mcp", "include MCP catalog skills in install selection")
|
|
4882
|
+
.option("--all-skills", "alias for --skill-profile full --include-mcp")
|
|
4641
4883
|
.option("--dry-run", "preview install without writing files")
|
|
4642
4884
|
.option("-y, --yes", "skip interactive confirmation");
|
|
4643
4885
|
}
|
|
@@ -4849,6 +5091,7 @@ async function runWorkflowInstall(options) {
|
|
|
4849
5091
|
options,
|
|
4850
5092
|
cwd
|
|
4851
5093
|
});
|
|
5094
|
+
const skillInstallOptions = resolveWorkflowSkillInstallOptions(options);
|
|
4852
5095
|
|
|
4853
5096
|
const installResult = await installBundleArtifacts({
|
|
4854
5097
|
bundleId,
|
|
@@ -4858,6 +5101,8 @@ async function runWorkflowInstall(options) {
|
|
|
4858
5101
|
overwrite: Boolean(options.overwrite),
|
|
4859
5102
|
profilePathsOverride: artifactProfilePaths,
|
|
4860
5103
|
extraSkillIds: postmanSelection.enabled ? [POSTMAN_SKILL_ID] : [],
|
|
5104
|
+
skillProfile: skillInstallOptions.skillProfile,
|
|
5105
|
+
includeMcp: skillInstallOptions.includeMcp,
|
|
4861
5106
|
terminalVerifierSelection,
|
|
4862
5107
|
dryRun,
|
|
4863
5108
|
cwd
|
|
@@ -4970,6 +5215,147 @@ async function runWorkflowInstall(options) {
|
|
|
4970
5215
|
}
|
|
4971
5216
|
}
|
|
4972
5217
|
|
|
5218
|
+
async function listInstalledTopLevelSkillDirs(skillsDir) {
|
|
5219
|
+
if (!skillsDir || !(await pathExists(skillsDir))) return [];
|
|
5220
|
+
const entries = await readdir(skillsDir, { withFileTypes: true });
|
|
5221
|
+
const out = [];
|
|
5222
|
+
for (const entry of entries) {
|
|
5223
|
+
if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
|
|
5224
|
+
const skillId = entry.name;
|
|
5225
|
+
const skillFile = path.join(skillsDir, skillId, "SKILL.md");
|
|
5226
|
+
if (!(await pathExists(skillFile))) continue;
|
|
5227
|
+
out.push(path.join(skillsDir, skillId));
|
|
5228
|
+
}
|
|
5229
|
+
return out.sort((a, b) => path.basename(a).localeCompare(path.basename(b)));
|
|
5230
|
+
}
|
|
5231
|
+
|
|
5232
|
+
function isProtectedInstalledSkillId(skillId) {
|
|
5233
|
+
const normalized = String(skillId || "").trim().toLowerCase();
|
|
5234
|
+
if (!normalized) return true;
|
|
5235
|
+
if (normalized.startsWith("workflow-") || normalized.startsWith("agent-")) return true;
|
|
5236
|
+
return normalized.startsWith(".");
|
|
5237
|
+
}
|
|
5238
|
+
|
|
5239
|
+
async function runWorkflowPruneSkills(options) {
|
|
5240
|
+
try {
|
|
5241
|
+
const cwd = process.cwd();
|
|
5242
|
+
const scope = normalizeScope(options.scope);
|
|
5243
|
+
const dryRun = Boolean(options.dryRun);
|
|
5244
|
+
const platform = await resolvePlatform(options.platform, scope, cwd);
|
|
5245
|
+
const profilePaths = await resolveArtifactProfilePaths(platform, scope, cwd);
|
|
5246
|
+
const bundleId = await chooseBundle(options.bundle || "agent-environment-setup");
|
|
5247
|
+
const manifest = await readBundleManifest(bundleId);
|
|
5248
|
+
const platformSpec = manifest.platforms?.[platform];
|
|
5249
|
+
if (!platformSpec) {
|
|
5250
|
+
throw new Error(`Bundle '${bundleId}' does not define platform '${platform}'.`);
|
|
5251
|
+
}
|
|
5252
|
+
if (!profilePaths.skillsDir || !(await pathExists(profilePaths.skillsDir))) {
|
|
5253
|
+
console.log(`No skills directory found at ${profilePaths.skillsDir || "(unset)"}. Nothing to prune.`);
|
|
5254
|
+
return;
|
|
5255
|
+
}
|
|
5256
|
+
|
|
5257
|
+
const skillInstallOptions = resolveWorkflowSkillInstallOptions(options);
|
|
5258
|
+
const desiredSkillIds = await resolveInstallSkillIds({
|
|
5259
|
+
platformSpec,
|
|
5260
|
+
extraSkillIds: [],
|
|
5261
|
+
skillProfile: skillInstallOptions.skillProfile,
|
|
5262
|
+
includeMcp: skillInstallOptions.includeMcp
|
|
5263
|
+
});
|
|
5264
|
+
const desiredSet = new Set(desiredSkillIds.map((skillId) => String(skillId).toLowerCase()));
|
|
5265
|
+
|
|
5266
|
+
const installedSkillDirs = await listInstalledTopLevelSkillDirs(profilePaths.skillsDir);
|
|
5267
|
+
const installedSkillIds = installedSkillDirs.map((dirPath) => path.basename(dirPath));
|
|
5268
|
+
const nestedPlan = await cleanupNestedDuplicateSkills({
|
|
5269
|
+
skillsRootDir: profilePaths.skillsDir,
|
|
5270
|
+
installedSkillDirs,
|
|
5271
|
+
dryRun: true
|
|
5272
|
+
});
|
|
5273
|
+
|
|
5274
|
+
const removeOutOfProfile = installedSkillIds
|
|
5275
|
+
.filter((skillId) => !isProtectedInstalledSkillId(skillId))
|
|
5276
|
+
.filter((skillId) => !desiredSet.has(skillId.toLowerCase()))
|
|
5277
|
+
.sort((a, b) => a.localeCompare(b));
|
|
5278
|
+
|
|
5279
|
+
const hasWork = nestedPlan.length > 0 || removeOutOfProfile.length > 0;
|
|
5280
|
+
if (!hasWork) {
|
|
5281
|
+
console.log("No stale skills found. Installed set already matches selected profile.");
|
|
5282
|
+
console.log(
|
|
5283
|
+
`Profile: ${skillInstallOptions.skillProfile} (include MCP: ${skillInstallOptions.includeMcp ? "yes" : "no"})`
|
|
5284
|
+
);
|
|
5285
|
+
return;
|
|
5286
|
+
}
|
|
5287
|
+
|
|
5288
|
+
if (!dryRun && !options.yes && process.stdin.isTTY) {
|
|
5289
|
+
const proceed = await confirm({
|
|
5290
|
+
message: `Prune ${nestedPlan.length + removeOutOfProfile.length} stale skill path(s) for ${platform} (${scope})?`,
|
|
5291
|
+
default: true
|
|
5292
|
+
});
|
|
5293
|
+
if (!proceed) {
|
|
5294
|
+
console.log("Cancelled.");
|
|
5295
|
+
process.exit(0);
|
|
5296
|
+
}
|
|
5297
|
+
}
|
|
5298
|
+
|
|
5299
|
+
const nestedResult = await cleanupNestedDuplicateSkills({
|
|
5300
|
+
skillsRootDir: profilePaths.skillsDir,
|
|
5301
|
+
installedSkillDirs,
|
|
5302
|
+
dryRun
|
|
5303
|
+
});
|
|
5304
|
+
|
|
5305
|
+
const removedOutOfProfile = [];
|
|
5306
|
+
for (const skillId of removeOutOfProfile) {
|
|
5307
|
+
const targetDir = path.join(profilePaths.skillsDir, skillId);
|
|
5308
|
+
if (!dryRun) {
|
|
5309
|
+
await rm(targetDir, { recursive: true, force: true });
|
|
5310
|
+
}
|
|
5311
|
+
removedOutOfProfile.push({
|
|
5312
|
+
skillId,
|
|
5313
|
+
path: targetDir,
|
|
5314
|
+
action: dryRun ? "would-remove" : "removed"
|
|
5315
|
+
});
|
|
5316
|
+
}
|
|
5317
|
+
|
|
5318
|
+
const beforeCount = installedSkillIds.length;
|
|
5319
|
+
const afterCount = dryRun
|
|
5320
|
+
? beforeCount - nestedResult.length - removedOutOfProfile.length
|
|
5321
|
+
: (await listInstalledTopLevelSkillDirs(profilePaths.skillsDir)).length;
|
|
5322
|
+
|
|
5323
|
+
console.log("Skill prune summary:");
|
|
5324
|
+
console.log(`- Platform/scope: ${platform}/${scope}`);
|
|
5325
|
+
console.log(`- Bundle: ${bundleId}`);
|
|
5326
|
+
console.log(
|
|
5327
|
+
`- Profile: ${skillInstallOptions.skillProfile} (include MCP: ${skillInstallOptions.includeMcp ? "yes" : "no"})`
|
|
5328
|
+
);
|
|
5329
|
+
console.log(`- Installed before: ${beforeCount}`);
|
|
5330
|
+
console.log(`- Nested duplicates: ${nestedResult.length}`);
|
|
5331
|
+
console.log(`- Out-of-profile: ${removedOutOfProfile.length}`);
|
|
5332
|
+
console.log(`- Installed after: ${afterCount}`);
|
|
5333
|
+
|
|
5334
|
+
if (nestedResult.length > 0) {
|
|
5335
|
+
console.log("\nNested duplicate removals:");
|
|
5336
|
+
for (const item of nestedResult) {
|
|
5337
|
+
console.log(`- ${item.action}: ${item.path}`);
|
|
5338
|
+
}
|
|
5339
|
+
}
|
|
5340
|
+
if (removedOutOfProfile.length > 0) {
|
|
5341
|
+
console.log("\nOut-of-profile removals:");
|
|
5342
|
+
for (const item of removedOutOfProfile) {
|
|
5343
|
+
console.log(`- ${item.action}: ${item.path}`);
|
|
5344
|
+
}
|
|
5345
|
+
}
|
|
5346
|
+
if (dryRun) {
|
|
5347
|
+
console.log("\nDry-run complete. Re-run without `--dry-run` to apply changes.");
|
|
5348
|
+
}
|
|
5349
|
+
} catch (error) {
|
|
5350
|
+
if (error?.name === "ExitPromptError") {
|
|
5351
|
+
console.error("\nCancelled.");
|
|
5352
|
+
process.exit(130);
|
|
5353
|
+
}
|
|
5354
|
+
console.error(`\nError: ${error.message}`);
|
|
5355
|
+
process.exit(1);
|
|
5356
|
+
}
|
|
5357
|
+
}
|
|
5358
|
+
|
|
4973
5359
|
async function runWorkflowRemove(target, options) {
|
|
4974
5360
|
try {
|
|
4975
5361
|
if (!target) {
|
|
@@ -5737,11 +6123,12 @@ async function runRulesTechMd(options) {
|
|
|
5737
6123
|
try {
|
|
5738
6124
|
const dryRun = Boolean(options.dryRun);
|
|
5739
6125
|
const overwrite = Boolean(options.overwrite);
|
|
6126
|
+
const compact = Boolean(options.compact);
|
|
5740
6127
|
const cwd = process.cwd();
|
|
5741
6128
|
const workspaceRoot = findWorkspaceRoot(cwd);
|
|
5742
6129
|
const outputPath = options.output ? expandPath(options.output, cwd) : path.join(workspaceRoot, "TECH.md");
|
|
5743
6130
|
const snapshot = await collectTechSnapshot(workspaceRoot);
|
|
5744
|
-
const content = buildTechMd(snapshot);
|
|
6131
|
+
const content = buildTechMd(snapshot, { compact });
|
|
5745
6132
|
const result = await writeTextFile({
|
|
5746
6133
|
targetPath: outputPath,
|
|
5747
6134
|
content: `${content}\n`,
|
|
@@ -5753,6 +6140,7 @@ async function runRulesTechMd(options) {
|
|
|
5753
6140
|
console.log(`File: ${result.filePath}`);
|
|
5754
6141
|
console.log(`Root scanned: ${toPosixPath(workspaceRoot)}`);
|
|
5755
6142
|
console.log(`Files scanned: ${snapshot.scannedFiles}`);
|
|
6143
|
+
console.log(`Mode: ${compact ? "compact" : "full"}`);
|
|
5756
6144
|
if (dryRun) {
|
|
5757
6145
|
console.log("\nDry-run complete. Re-run without `--dry-run` to apply changes.");
|
|
5758
6146
|
}
|
|
@@ -5791,6 +6179,22 @@ withWorkflowBaseOptions(
|
|
|
5791
6179
|
.option("-y, --yes", "skip interactive confirmation")
|
|
5792
6180
|
).action(runWorkflowRemove);
|
|
5793
6181
|
|
|
6182
|
+
withWorkflowBaseOptions(
|
|
6183
|
+
workflowsCommand
|
|
6184
|
+
.command("prune-skills")
|
|
6185
|
+
.description("Prune nested duplicates and out-of-profile installed skills")
|
|
6186
|
+
.option("-b, --bundle <bundle>", "bundle id (default: agent-environment-setup)")
|
|
6187
|
+
.option(
|
|
6188
|
+
"--skill-profile <profile>",
|
|
6189
|
+
"skill prune profile: core|web-backend|full (default: core)",
|
|
6190
|
+
DEFAULT_SKILL_PROFILE
|
|
6191
|
+
)
|
|
6192
|
+
.option("--include-mcp", "include MCP catalog skills in desired profile set")
|
|
6193
|
+
.option("--all-skills", "alias for --skill-profile full --include-mcp")
|
|
6194
|
+
.option("--dry-run", "preview prune operations without deleting files")
|
|
6195
|
+
.option("-y, --yes", "skip interactive confirmation")
|
|
6196
|
+
).action(runWorkflowPruneSkills);
|
|
6197
|
+
|
|
5794
6198
|
withWorkflowBaseOptions(
|
|
5795
6199
|
workflowsCommand
|
|
5796
6200
|
.command("sync-rules")
|
|
@@ -5857,6 +6261,25 @@ withWorkflowBaseOptions(
|
|
|
5857
6261
|
await runWorkflowRemove(target, options);
|
|
5858
6262
|
});
|
|
5859
6263
|
|
|
6264
|
+
withWorkflowBaseOptions(
|
|
6265
|
+
skillsCommand
|
|
6266
|
+
.command("prune-skills")
|
|
6267
|
+
.description("Alias for workflows prune-skills")
|
|
6268
|
+
.option("-b, --bundle <bundle>", "bundle id (default: agent-environment-setup)")
|
|
6269
|
+
.option(
|
|
6270
|
+
"--skill-profile <profile>",
|
|
6271
|
+
"skill prune profile: core|web-backend|full (default: core)",
|
|
6272
|
+
DEFAULT_SKILL_PROFILE
|
|
6273
|
+
)
|
|
6274
|
+
.option("--include-mcp", "include MCP catalog skills in desired profile set")
|
|
6275
|
+
.option("--all-skills", "alias for --skill-profile full --include-mcp")
|
|
6276
|
+
.option("--dry-run", "preview prune operations without deleting files")
|
|
6277
|
+
.option("-y, --yes", "skip interactive confirmation")
|
|
6278
|
+
).action(async (options) => {
|
|
6279
|
+
printSkillsDeprecation();
|
|
6280
|
+
await runWorkflowPruneSkills(options);
|
|
6281
|
+
});
|
|
6282
|
+
|
|
5860
6283
|
withWorkflowBaseOptions(
|
|
5861
6284
|
skillsCommand
|
|
5862
6285
|
.command("sync-rules")
|
|
@@ -5920,6 +6343,7 @@ rulesCommand
|
|
|
5920
6343
|
.description("Scan the codebase and generate/update TECH.md")
|
|
5921
6344
|
.option("--output <path>", "output path (default: <workspace-root>/TECH.md)")
|
|
5922
6345
|
.option("--overwrite", "overwrite existing TECH.md")
|
|
6346
|
+
.option("--compact", "generate compact TECH.md (stack + context budget only)")
|
|
5923
6347
|
.option("--dry-run", "preview generation without writing files")
|
|
5924
6348
|
.action(runRulesTechMd);
|
|
5925
6349
|
|
package/mcp/README.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# MCP Skill Catalog
|
|
2
|
+
|
|
3
|
+
This directory contains MCP-focused skills and powers separated from workflow-first skills.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
- `mcp/skills/<skill-id>/...`: canonical MCP skills
|
|
8
|
+
- `mcp/powers/<skill-id>/...`: canonical MCP powers
|
|
9
|
+
- `mcp/catalogs/default.json`: default MCP profile used by `--include-mcp`
|
|
10
|
+
|
|
11
|
+
## Install Behavior
|
|
12
|
+
|
|
13
|
+
- `cbx workflows install` defaults to workflow profile `core` (no MCP skills).
|
|
14
|
+
- Add `--include-mcp` to append MCP skills from `mcp/catalogs/default.json`.
|
|
15
|
+
- Use `--all-skills` to install workflow full profile + MCP skills.
|
|
16
|
+
|
|
17
|
+
Legacy wrappers remain in `workflows/skills/*` and `workflows/powers/*` for compatibility.
|