workspace-architect 1.4.1 → 1.5.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/assets-manifest.json +3392 -0
- package/bin/cli.js +134 -72
- package/package.json +10 -2
- package/.env.example +0 -1
- package/.gitattributes +0 -1
- package/.github/workflows/manual-publish.yml +0 -36
- package/.github/workflows/sync-and-publish.yml +0 -58
- package/.release-it.json +0 -20
- package/CHANGELOG.md +0 -53
- package/assets/chatmodes/4.1-Beast.chatmode.md +0 -152
- package/assets/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -337
- package/assets/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -644
- package/assets/chatmodes/accessibility.chatmode.md +0 -298
- package/assets/chatmodes/address-comments.chatmode.md +0 -59
- package/assets/chatmodes/aem-frontend-specialist.chatmode.md +0 -385
- package/assets/chatmodes/api-architect.chatmode.md +0 -40
- package/assets/chatmodes/atlassian-requirements-to-jira.chatmode.md +0 -444
- package/assets/chatmodes/azure-logic-apps-expert.chatmode.md +0 -100
- package/assets/chatmodes/azure-principal-architect.chatmode.md +0 -58
- package/assets/chatmodes/azure-saas-architect.chatmode.md +0 -118
- package/assets/chatmodes/azure-verified-modules-bicep.chatmode.md +0 -44
- package/assets/chatmodes/azure-verified-modules-terraform.chatmode.md +0 -58
- package/assets/chatmodes/bicep-implement.chatmode.md +0 -40
- package/assets/chatmodes/bicep-plan.chatmode.md +0 -112
- package/assets/chatmodes/blueprint-mode-codex.chatmode.md +0 -110
- package/assets/chatmodes/blueprint-mode.chatmode.md +0 -171
- package/assets/chatmodes/clojure-interactive-programming.chatmode.md +0 -174
- package/assets/chatmodes/code-tour.chatmode.md +0 -205
- package/assets/chatmodes/critical-thinking.chatmode.md +0 -23
- package/assets/chatmodes/csharp-dotnet-janitor.chatmode.md +0 -83
- package/assets/chatmodes/csharp-mcp-expert.chatmode.md +0 -69
- package/assets/chatmodes/debug.chatmode.md +0 -79
- package/assets/chatmodes/declarative-agents-architect.chatmode.md +0 -76
- package/assets/chatmodes/demonstrate-understanding.chatmode.md +0 -60
- package/assets/chatmodes/dotnet-upgrade.chatmode.md +0 -222
- package/assets/chatmodes/drupal-expert.chatmode.md +0 -687
- package/assets/chatmodes/electron-angular-native.chatmode.md +0 -285
- package/assets/chatmodes/expert-cpp-software-engineer.chatmode.md +0 -27
- package/assets/chatmodes/expert-dotnet-software-engineer.chatmode.md +0 -22
- package/assets/chatmodes/expert-nextjs-developer.chatmode.md +0 -477
- package/assets/chatmodes/expert-react-frontend-engineer.chatmode.md +0 -738
- package/assets/chatmodes/gilfoyle.chatmode.md +0 -66
- package/assets/chatmodes/go-mcp-expert.chatmode.md +0 -122
- package/assets/chatmodes/gpt-5-beast-mode.chatmode.md +0 -109
- package/assets/chatmodes/hlbpa.chatmode.md +0 -232
- package/assets/chatmodes/implementation-plan.chatmode.md +0 -159
- package/assets/chatmodes/janitor.chatmode.md +0 -89
- package/assets/chatmodes/java-mcp-expert.chatmode.md +0 -325
- package/assets/chatmodes/kotlin-mcp-expert.chatmode.md +0 -181
- package/assets/chatmodes/kusto-assistant.chatmode.md +0 -143
- package/assets/chatmodes/laravel-expert-agent.chatmode.md +0 -628
- package/assets/chatmodes/mentor.chatmode.md +0 -32
- package/assets/chatmodes/meta-agentic-project-scaffold.chatmode.md +0 -15
- package/assets/chatmodes/microsoft-agent-framework-dotnet.chatmode.md +0 -62
- package/assets/chatmodes/microsoft-agent-framework-python.chatmode.md +0 -62
- package/assets/chatmodes/microsoft-study-mode.chatmode.md +0 -32
- package/assets/chatmodes/microsoft_learn_contributor.chatmode.md +0 -388
- package/assets/chatmodes/ms-sql-dba.chatmode.md +0 -25
- package/assets/chatmodes/php-mcp-expert.chatmode.md +0 -498
- package/assets/chatmodes/pimcore-expert.chatmode.md +0 -869
- package/assets/chatmodes/plan.chatmode.md +0 -114
- package/assets/chatmodes/planner.chatmode.md +0 -14
- package/assets/chatmodes/playwright-tester.chatmode.md +0 -13
- package/assets/chatmodes/postgresql-dba.chatmode.md +0 -17
- package/assets/chatmodes/power-bi-data-modeling-expert.chatmode.md +0 -319
- package/assets/chatmodes/power-bi-dax-expert.chatmode.md +0 -334
- package/assets/chatmodes/power-bi-performance-expert.chatmode.md +0 -533
- package/assets/chatmodes/power-bi-visualization-expert.chatmode.md +0 -549
- package/assets/chatmodes/power-platform-expert.chatmode.md +0 -116
- package/assets/chatmodes/power-platform-mcp-integration-expert.chatmode.md +0 -149
- package/assets/chatmodes/prd.chatmode.md +0 -201
- package/assets/chatmodes/principal-software-engineer.chatmode.md +0 -41
- package/assets/chatmodes/prompt-builder.chatmode.md +0 -352
- package/assets/chatmodes/prompt-engineer.chatmode.md +0 -72
- package/assets/chatmodes/python-mcp-expert.chatmode.md +0 -99
- package/assets/chatmodes/refine-issue.chatmode.md +0 -34
- package/assets/chatmodes/research-technical-spike.chatmode.md +0 -169
- package/assets/chatmodes/ruby-mcp-expert.chatmode.md +0 -346
- package/assets/chatmodes/rust-gpt-4.1-beast-mode.chatmode.md +0 -197
- package/assets/chatmodes/rust-mcp-expert.chatmode.md +0 -465
- package/assets/chatmodes/search-ai-optimization-expert.chatmode.md +0 -227
- package/assets/chatmodes/semantic-kernel-dotnet.chatmode.md +0 -31
- package/assets/chatmodes/semantic-kernel-python.chatmode.md +0 -28
- package/assets/chatmodes/shopify-expert.chatmode.md +0 -681
- package/assets/chatmodes/simple-app-idea-generator.chatmode.md +0 -134
- package/assets/chatmodes/software-engineer-agent-v1.chatmode.md +0 -164
- package/assets/chatmodes/specification.chatmode.md +0 -127
- package/assets/chatmodes/swift-mcp-expert.chatmode.md +0 -240
- package/assets/chatmodes/task-planner.chatmode.md +0 -374
- package/assets/chatmodes/task-researcher.chatmode.md +0 -254
- package/assets/chatmodes/tdd-green.chatmode.md +0 -59
- package/assets/chatmodes/tdd-red.chatmode.md +0 -59
- package/assets/chatmodes/tdd-refactor.chatmode.md +0 -84
- package/assets/chatmodes/tech-debt-remediation-plan.chatmode.md +0 -49
- package/assets/chatmodes/terraform-azure-implement.chatmode.md +0 -104
- package/assets/chatmodes/terraform-azure-planning.chatmode.md +0 -157
- package/assets/chatmodes/typescript-mcp-expert.chatmode.md +0 -91
- package/assets/chatmodes/voidbeast-gpt41enhanced.chatmode.md +0 -230
- package/assets/chatmodes/wg-code-alchemist.chatmode.md +0 -61
- package/assets/chatmodes/wg-code-sentinel.chatmode.md +0 -55
- package/assets/collections/ai-prompt-engineering.json +0 -95
- package/assets/collections/angular-development.json +0 -19
- package/assets/collections/azure-cloud-architect.json +0 -150
- package/assets/collections/cpp-development.json +0 -4
- package/assets/collections/database-administration.json +0 -13
- package/assets/collections/devops-sre.json +0 -33
- package/assets/collections/dotnet-development.json +0 -114
- package/assets/collections/general-productivity.json +0 -4
- package/assets/collections/go-development.json +0 -42
- package/assets/collections/java-spring-developer.json +0 -111
- package/assets/collections/learning-mentoring.json +0 -9
- package/assets/collections/legacy-migration.json +0 -6
- package/assets/collections/mcp-specialist.json +0 -92
- package/assets/collections/mobile-development.json +0 -12
- package/assets/collections/php-cms-development.json +0 -68
- package/assets/collections/power-platform-specialist.json +0 -128
- package/assets/collections/project-management.json +0 -50
- package/assets/collections/python-development.json +0 -66
- package/assets/collections/quality-assurance.json +0 -56
- package/assets/collections/ruby-development.json +0 -43
- package/assets/collections/rust-development.json +0 -63
- package/assets/collections/security-specialist.json +0 -65
- package/assets/collections/software-architect.json +0 -85
- package/assets/collections/technical-writing.json +0 -23
- package/assets/collections/web-frontend-development.json +0 -52
- package/assets/instructions/a11y.instructions.md +0 -369
- package/assets/instructions/ai-prompt-engineering-safety-best-practices.instructions.md +0 -867
- package/assets/instructions/angular.instructions.md +0 -104
- package/assets/instructions/ansible.instructions.md +0 -88
- package/assets/instructions/aspnet-rest-apis.instructions.md +0 -110
- package/assets/instructions/astro.instructions.md +0 -182
- package/assets/instructions/azure-devops-pipelines.instructions.md +0 -185
- package/assets/instructions/azure-functions-typescript.instructions.md +0 -14
- package/assets/instructions/azure-logic-apps-power-automate.instructions.md +0 -1943
- package/assets/instructions/azure-verified-modules-terraform.instructions.md +0 -229
- package/assets/instructions/bicep-code-best-practices.instructions.md +0 -54
- package/assets/instructions/blazor.instructions.md +0 -77
- package/assets/instructions/clojure.instructions.md +0 -349
- package/assets/instructions/cmake-vcpkg.instructions.md +0 -10
- package/assets/instructions/codexer.instructions.md +0 -428
- package/assets/instructions/coldfusion-cfc.instructions.md +0 -30
- package/assets/instructions/coldfusion-cfm.instructions.md +0 -28
- package/assets/instructions/collections.instructions.md +0 -54
- package/assets/instructions/containerization-docker-best-practices.instructions.md +0 -681
- package/assets/instructions/convert-jpa-to-spring-data-cosmos.instructions.md +0 -949
- package/assets/instructions/copilot-thought-logging.instructions.md +0 -62
- package/assets/instructions/csharp-ja.instructions.md +0 -114
- package/assets/instructions/csharp-ko.instructions.md +0 -77
- package/assets/instructions/csharp-mcp-server.instructions.md +0 -95
- package/assets/instructions/csharp.instructions.md +0 -114
- package/assets/instructions/dart-n-flutter.instructions.md +0 -447
- package/assets/instructions/declarative-agents-microsoft365.instructions.md +0 -316
- package/assets/instructions/devbox-image-definition.instructions.md +0 -302
- package/assets/instructions/devops-core-principles.instructions.md +0 -167
- package/assets/instructions/dotnet-architecture-good-practices.instructions.md +0 -279
- package/assets/instructions/dotnet-framework.instructions.md +0 -113
- package/assets/instructions/dotnet-maui-9-to-dotnet-maui-10-upgrade.instructions.md +0 -1922
- package/assets/instructions/dotnet-maui.instructions.md +0 -69
- package/assets/instructions/dotnet-upgrade.instructions.md +0 -287
- package/assets/instructions/dotnet-wpf.instructions.md +0 -79
- package/assets/instructions/genaiscript.instructions.md +0 -21
- package/assets/instructions/generate-modern-terraform-code-for-azure.instructions.md +0 -82
- package/assets/instructions/gilfoyle-code-review.instructions.md +0 -114
- package/assets/instructions/github-actions-ci-cd-best-practices.instructions.md +0 -607
- package/assets/instructions/go-mcp-server.instructions.md +0 -346
- package/assets/instructions/go.instructions.md +0 -373
- package/assets/instructions/instructions.instructions.md +0 -256
- package/assets/instructions/java-11-to-java-17-upgrade.instructions.md +0 -793
- package/assets/instructions/java-17-to-java-21-upgrade.instructions.md +0 -464
- package/assets/instructions/java-21-to-java-25-upgrade.instructions.md +0 -311
- package/assets/instructions/java-mcp-server.instructions.md +0 -553
- package/assets/instructions/java.instructions.md +0 -81
- package/assets/instructions/joyride-user-project.instructions.md +0 -206
- package/assets/instructions/joyride-workspace-automation.instructions.md +0 -46
- package/assets/instructions/kotlin-mcp-server.instructions.md +0 -481
- package/assets/instructions/kubernetes-deployment-best-practices.instructions.md +0 -307
- package/assets/instructions/langchain-python.instructions.md +0 -229
- package/assets/instructions/localization.instructions.md +0 -39
- package/assets/instructions/makefile.instructions.md +0 -410
- package/assets/instructions/markdown.instructions.md +0 -52
- package/assets/instructions/memory-bank.instructions.md +0 -299
- package/assets/instructions/mongo-dba.instructions.md +0 -25
- package/assets/instructions/ms-sql-dba.instructions.md +0 -25
- package/assets/instructions/nestjs.instructions.md +0 -406
- package/assets/instructions/nextjs-tailwind.instructions.md +0 -72
- package/assets/instructions/nextjs.instructions.md +0 -143
- package/assets/instructions/nodejs-javascript-vitest.instructions.md +0 -30
- package/assets/instructions/object-calisthenics.instructions.md +0 -302
- package/assets/instructions/oqtane.instructions.md +0 -86
- package/assets/instructions/performance-optimization.instructions.md +0 -420
- package/assets/instructions/php-mcp-server.instructions.md +0 -809
- package/assets/instructions/playwright-dotnet.instructions.md +0 -101
- package/assets/instructions/playwright-python.instructions.md +0 -62
- package/assets/instructions/playwright-typescript.instructions.md +0 -86
- package/assets/instructions/power-apps-canvas-yaml.instructions.md +0 -827
- package/assets/instructions/power-apps-code-apps.instructions.md +0 -601
- package/assets/instructions/power-bi-custom-visuals-development.instructions.md +0 -810
- package/assets/instructions/power-bi-data-modeling-best-practices.instructions.md +0 -639
- package/assets/instructions/power-bi-dax-best-practices.instructions.md +0 -795
- package/assets/instructions/power-bi-devops-alm-best-practices.instructions.md +0 -623
- package/assets/instructions/power-bi-report-design-best-practices.instructions.md +0 -752
- package/assets/instructions/power-bi-security-rls-best-practices.instructions.md +0 -504
- package/assets/instructions/power-platform-connector.instructions.md +0 -430
- package/assets/instructions/power-platform-mcp-development.instructions.md +0 -88
- package/assets/instructions/powershell-pester-5.instructions.md +0 -197
- package/assets/instructions/powershell.instructions.md +0 -356
- package/assets/instructions/prompt.instructions.md +0 -73
- package/assets/instructions/python-mcp-server.instructions.md +0 -204
- package/assets/instructions/python.instructions.md +0 -56
- package/assets/instructions/quarkus-mcp-server-sse.instructions.md +0 -49
- package/assets/instructions/quarkus.instructions.md +0 -98
- package/assets/instructions/r.instructions.md +0 -116
- package/assets/instructions/reactjs.instructions.md +0 -162
- package/assets/instructions/ruby-mcp-server.instructions.md +0 -629
- package/assets/instructions/ruby-on-rails.instructions.md +0 -124
- package/assets/instructions/rust-mcp-server.instructions.md +0 -715
- package/assets/instructions/rust.instructions.md +0 -135
- package/assets/instructions/security-and-owasp.instructions.md +0 -51
- package/assets/instructions/self-explanatory-code-commenting.instructions.md +0 -162
- package/assets/instructions/shell.instructions.md +0 -132
- package/assets/instructions/spec-driven-workflow-v1.instructions.md +0 -323
- package/assets/instructions/springboot.instructions.md +0 -68
- package/assets/instructions/sql-sp-generation.instructions.md +0 -74
- package/assets/instructions/svelte.instructions.md +0 -161
- package/assets/instructions/swift-mcp-server.instructions.md +0 -498
- package/assets/instructions/taming-copilot.instructions.md +0 -40
- package/assets/instructions/tanstack-start-shadcn-tailwind.instructions.md +0 -212
- package/assets/instructions/task-implementation.instructions.md +0 -190
- package/assets/instructions/tasksync.instructions.md +0 -352
- package/assets/instructions/terraform-azure.instructions.md +0 -254
- package/assets/instructions/terraform-sap-btp.instructions.md +0 -195
- package/assets/instructions/terraform.instructions.md +0 -113
- package/assets/instructions/typescript-5-es2022.instructions.md +0 -114
- package/assets/instructions/typescript-mcp-server.instructions.md +0 -228
- package/assets/instructions/update-code-from-shorthand.instructions.md +0 -130
- package/assets/instructions/vuejs3.instructions.md +0 -153
- package/assets/instructions/wordpress.instructions.md +0 -186
- package/assets/prompts/add-educational-comments.prompt.md +0 -129
- package/assets/prompts/ai-prompt-engineering-safety-review.prompt.md +0 -230
- package/assets/prompts/architecture-blueprint-generator.prompt.md +0 -322
- package/assets/prompts/aspnet-minimal-api-openapi.prompt.md +0 -42
- package/assets/prompts/az-cost-optimize.prompt.md +0 -305
- package/assets/prompts/azure-resource-health-diagnose.prompt.md +0 -290
- package/assets/prompts/boost-prompt.prompt.md +0 -25
- package/assets/prompts/breakdown-epic-arch.prompt.md +0 -66
- package/assets/prompts/breakdown-epic-pm.prompt.md +0 -58
- package/assets/prompts/breakdown-feature-implementation.prompt.md +0 -128
- package/assets/prompts/breakdown-feature-prd.prompt.md +0 -61
- package/assets/prompts/breakdown-plan.prompt.md +0 -509
- package/assets/prompts/breakdown-test.prompt.md +0 -365
- package/assets/prompts/code-exemplars-blueprint-generator.prompt.md +0 -126
- package/assets/prompts/comment-code-generate-a-tutorial.prompt.md +0 -26
- package/assets/prompts/containerize-aspnet-framework.prompt.md +0 -455
- package/assets/prompts/containerize-aspnetcore.prompt.md +0 -393
- package/assets/prompts/conventional-commit.prompt.md +0 -73
- package/assets/prompts/copilot-instructions-blueprint-generator.prompt.md +0 -294
- package/assets/prompts/cosmosdb-datamodeling.prompt.md +0 -1045
- package/assets/prompts/create-agentsmd.prompt.md +0 -249
- package/assets/prompts/create-architectural-decision-record.prompt.md +0 -97
- package/assets/prompts/create-github-action-workflow-specification.prompt.md +0 -276
- package/assets/prompts/create-github-issue-feature-from-specification.prompt.md +0 -28
- package/assets/prompts/create-github-issues-feature-from-implementation-plan.prompt.md +0 -28
- package/assets/prompts/create-github-issues-for-unmet-specification-requirements.prompt.md +0 -35
- package/assets/prompts/create-github-pull-request-from-specification.prompt.md +0 -24
- package/assets/prompts/create-implementation-plan.prompt.md +0 -157
- package/assets/prompts/create-llms.prompt.md +0 -210
- package/assets/prompts/create-oo-component-documentation.prompt.md +0 -193
- package/assets/prompts/create-readme.prompt.md +0 -21
- package/assets/prompts/create-specification.prompt.md +0 -127
- package/assets/prompts/create-spring-boot-java-project.prompt.md +0 -163
- package/assets/prompts/create-spring-boot-kotlin-project.prompt.md +0 -147
- package/assets/prompts/create-technical-spike.prompt.md +0 -231
- package/assets/prompts/csharp-async.prompt.md +0 -50
- package/assets/prompts/csharp-docs.prompt.md +0 -63
- package/assets/prompts/csharp-mcp-server-generator.prompt.md +0 -59
- package/assets/prompts/csharp-mstest.prompt.md +0 -67
- package/assets/prompts/csharp-nunit.prompt.md +0 -72
- package/assets/prompts/csharp-tunit.prompt.md +0 -101
- package/assets/prompts/csharp-xunit.prompt.md +0 -69
- package/assets/prompts/declarative-agents.prompt.md +0 -93
- package/assets/prompts/documentation-writer.prompt.md +0 -46
- package/assets/prompts/dotnet-best-practices.prompt.md +0 -84
- package/assets/prompts/dotnet-design-pattern-review.prompt.md +0 -41
- package/assets/prompts/dotnet-upgrade.prompt.md +0 -116
- package/assets/prompts/editorconfig.prompt.md +0 -64
- package/assets/prompts/ef-core.prompt.md +0 -76
- package/assets/prompts/finalize-agent-prompt.prompt.md +0 -27
- package/assets/prompts/first-ask.prompt.md +0 -29
- package/assets/prompts/folder-structure-blueprint-generator.prompt.md +0 -405
- package/assets/prompts/gen-specs-as-issues.prompt.md +0 -165
- package/assets/prompts/generate-custom-instructions-from-codebase.prompt.md +0 -240
- package/assets/prompts/git-flow-branch-creator.prompt.md +0 -293
- package/assets/prompts/github-copilot-starter.prompt.md +0 -372
- package/assets/prompts/go-mcp-server-generator.prompt.md +0 -334
- package/assets/prompts/java-docs.prompt.md +0 -24
- package/assets/prompts/java-junit.prompt.md +0 -64
- package/assets/prompts/java-mcp-server-generator.prompt.md +0 -756
- package/assets/prompts/java-refactoring-extract-method.prompt.md +0 -105
- package/assets/prompts/java-refactoring-remove-parameter.prompt.md +0 -85
- package/assets/prompts/java-springboot.prompt.md +0 -66
- package/assets/prompts/javascript-typescript-jest.prompt.md +0 -44
- package/assets/prompts/kotlin-mcp-server-generator.prompt.md +0 -449
- package/assets/prompts/kotlin-springboot.prompt.md +0 -71
- package/assets/prompts/mcp-copilot-studio-server-generator.prompt.md +0 -118
- package/assets/prompts/memory-merger.prompt.md +0 -107
- package/assets/prompts/mkdocs-translations.prompt.md +0 -110
- package/assets/prompts/model-recommendation.prompt.md +0 -677
- package/assets/prompts/multi-stage-dockerfile.prompt.md +0 -47
- package/assets/prompts/my-issues.prompt.md +0 -9
- package/assets/prompts/my-pull-requests.prompt.md +0 -15
- package/assets/prompts/next-intl-add-language.prompt.md +0 -20
- package/assets/prompts/php-mcp-server-generator.prompt.md +0 -522
- package/assets/prompts/playwright-automation-fill-in-form.prompt.md +0 -30
- package/assets/prompts/playwright-explore-website.prompt.md +0 -19
- package/assets/prompts/playwright-generate-test.prompt.md +0 -19
- package/assets/prompts/postgresql-code-review.prompt.md +0 -214
- package/assets/prompts/postgresql-optimization.prompt.md +0 -406
- package/assets/prompts/power-apps-code-app-scaffold.prompt.md +0 -150
- package/assets/prompts/power-bi-dax-optimization.prompt.md +0 -175
- package/assets/prompts/power-bi-model-design-review.prompt.md +0 -405
- package/assets/prompts/power-bi-performance-troubleshooting.prompt.md +0 -384
- package/assets/prompts/power-bi-report-design-consultation.prompt.md +0 -353
- package/assets/prompts/power-platform-mcp-connector-suite.prompt.md +0 -156
- package/assets/prompts/project-workflow-analysis-blueprint-generator.prompt.md +0 -294
- package/assets/prompts/prompt-builder.prompt.md +0 -142
- package/assets/prompts/pytest-coverage.prompt.md +0 -28
- package/assets/prompts/python-mcp-server-generator.prompt.md +0 -105
- package/assets/prompts/readme-blueprint-generator.prompt.md +0 -79
- package/assets/prompts/remember-interactive-programming.prompt.md +0 -13
- package/assets/prompts/remember.prompt.md +0 -125
- package/assets/prompts/repo-story-time.prompt.md +0 -156
- package/assets/prompts/review-and-refactor.prompt.md +0 -15
- package/assets/prompts/ruby-mcp-server-generator.prompt.md +0 -660
- package/assets/prompts/rust-mcp-server-generator.prompt.md +0 -578
- package/assets/prompts/shuffle-json-data.prompt.md +0 -151
- package/assets/prompts/sql-code-review.prompt.md +0 -303
- package/assets/prompts/sql-optimization.prompt.md +0 -298
- package/assets/prompts/suggest-awesome-github-copilot-agents.prompt.md +0 -72
- package/assets/prompts/suggest-awesome-github-copilot-chatmodes.prompt.md +0 -71
- package/assets/prompts/suggest-awesome-github-copilot-collections.prompt.md +0 -149
- package/assets/prompts/suggest-awesome-github-copilot-instructions.prompt.md +0 -88
- package/assets/prompts/suggest-awesome-github-copilot-prompts.prompt.md +0 -71
- package/assets/prompts/swift-mcp-server-generator.prompt.md +0 -669
- package/assets/prompts/technology-stack-blueprint-generator.prompt.md +0 -242
- package/assets/prompts/typescript-mcp-server-generator.prompt.md +0 -90
- package/assets/prompts/update-avm-modules-in-bicep.prompt.md +0 -60
- package/assets/prompts/update-implementation-plan.prompt.md +0 -157
- package/assets/prompts/update-llms.prompt.md +0 -216
- package/assets/prompts/update-markdown-file-index.prompt.md +0 -76
- package/assets/prompts/update-oo-component-documentation.prompt.md +0 -162
- package/assets/prompts/update-specification.prompt.md +0 -127
- package/assets/prompts/write-coding-standards-from-file.prompt.md +0 -316
- package/scripts/analyze-collections.js +0 -387
- package/scripts/sync.js +0 -99
- package/verdaccio/config.yaml +0 -202
|
@@ -1,387 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { program } from 'commander';
|
|
4
|
-
import fs from 'fs-extra';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import matter from 'gray-matter';
|
|
7
|
-
import chalk from 'chalk';
|
|
8
|
-
import { fileURLToPath } from 'url';
|
|
9
|
-
|
|
10
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
const ROOT_DIR = path.join(__dirname, '..');
|
|
12
|
-
const ASSETS_DIR = path.join(ROOT_DIR, 'assets');
|
|
13
|
-
|
|
14
|
-
const DIRS = {
|
|
15
|
-
collections: path.join(ASSETS_DIR, 'collections'),
|
|
16
|
-
chatmodes: path.join(ASSETS_DIR, 'chatmodes'),
|
|
17
|
-
instructions: path.join(ASSETS_DIR, 'instructions'),
|
|
18
|
-
prompts: path.join(ASSETS_DIR, 'prompts'),
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// Expanded stop words
|
|
22
|
-
const STOP_WORDS = new Set([
|
|
23
|
-
'a', 'an', 'the', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by', 'is', 'are', 'was', 'were', 'be', 'been', 'this', 'that', 'it', 'as', 'from', 'mode', 'chat', 'prompt', 'instruction', 'file', 'use', 'using', 'create', 'make', 'expert', 'guide', 'help', 'code', 'generate', 'write', 'user', 'system', 'assistant', 'response', 'output', 'input', 'example', 'task', 'context', 'role', 'act', 'like', 'you', 'your', 'my', 'i', 'me', 'we', 'us', 'our', 'can', 'could', 'would', 'should', 'will', 'shall', 'may', 'might', 'must', 'do', 'does', 'did', 'done', 'doing', 'have', 'has', 'had', 'having', 'get', 'gets', 'got', 'getting', 'go', 'goes', 'went', 'gone', 'going', 'say', 'says', 'said', 'saying', 'tell', 'tells', 'told', 'telling', 'ask', 'asks', 'asked', 'asking', 'answer', 'answers', 'answered', 'answering', 'question', 'questions', 'questioning', 'problem', 'problems', 'issue', 'issues', 'solution', 'solutions', 'solve', 'solves', 'solved', 'solving', 'fix', 'fixes', 'fixed', 'fixing', 'bug', 'bugs', 'error', 'errors', 'warning', 'warnings', 'info', 'information', 'data', 'value', 'values', 'variable', 'variables', 'function', 'functions', 'method', 'methods', 'class', 'classes', 'object', 'objects', 'array', 'arrays', 'string', 'strings', 'number', 'numbers', 'boolean', 'booleans', 'true', 'false', 'null', 'undefined', 'nan', 'infinity'
|
|
24
|
-
]);
|
|
25
|
-
|
|
26
|
-
// Simple Stemmer
|
|
27
|
-
function stem(word) {
|
|
28
|
-
if (word.length < 4) return word;
|
|
29
|
-
if (word.endsWith('ies') && word.length > 4) return word.slice(0, -3) + 'y';
|
|
30
|
-
if (word.endsWith('es') && word.length > 3) return word.slice(0, -2);
|
|
31
|
-
if (word.endsWith('s') && !word.endsWith('ss') && word.length > 2) return word.slice(0, -1);
|
|
32
|
-
if (word.endsWith('ing') && word.length > 4) return word.slice(0, -3);
|
|
33
|
-
if (word.endsWith('ed') && word.length > 3) return word.slice(0, -2);
|
|
34
|
-
if (word.endsWith('ly') && word.length > 4) return word.slice(0, -2);
|
|
35
|
-
return word;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function getTokens(text) {
|
|
39
|
-
if (!text) return [];
|
|
40
|
-
// Normalize text: split camelCase, snake_case, kebab-case
|
|
41
|
-
const normalized = text
|
|
42
|
-
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
43
|
-
.replace(/[-_.]/g, ' ');
|
|
44
|
-
|
|
45
|
-
return normalized
|
|
46
|
-
.toLowerCase()
|
|
47
|
-
.split(/[^a-z0-9]+/)
|
|
48
|
-
.filter(t => t.length > 2 && !STOP_WORDS.has(t))
|
|
49
|
-
.map(t => stem(t));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Custom TF-IDF Implementation
|
|
53
|
-
class TfIdf {
|
|
54
|
-
constructor() {
|
|
55
|
-
this.documents = []; // Array of { termCounts: Map<Term, Count>, totalTerms: number }
|
|
56
|
-
this.docFrequencies = new Map(); // Term -> DocCount
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
addDocument(tokens) {
|
|
60
|
-
const termCounts = new Map();
|
|
61
|
-
const uniqueTerms = new Set(tokens);
|
|
62
|
-
|
|
63
|
-
for (const token of tokens) {
|
|
64
|
-
termCounts.set(token, (termCounts.get(token) || 0) + 1);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
this.documents.push({ termCounts, totalTerms: tokens.length });
|
|
68
|
-
|
|
69
|
-
for (const term of uniqueTerms) {
|
|
70
|
-
this.docFrequencies.set(term, (this.docFrequencies.get(term) || 0) + 1);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
getTfIdfVector(docIndex) {
|
|
75
|
-
const doc = this.documents[docIndex];
|
|
76
|
-
const vector = {};
|
|
77
|
-
const totalDocs = this.documents.length;
|
|
78
|
-
|
|
79
|
-
for (const [term, count] of doc.termCounts) {
|
|
80
|
-
const tf = count / doc.totalTerms;
|
|
81
|
-
const df = this.docFrequencies.get(term) || 0;
|
|
82
|
-
const idf = Math.log(1 + (totalDocs / (1 + df))); // Smooth IDF
|
|
83
|
-
vector[term] = tf * idf;
|
|
84
|
-
}
|
|
85
|
-
return vector;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Helper to create a vector for a new set of tokens (like a query or profile)
|
|
89
|
-
// using the existing IDF stats
|
|
90
|
-
getVectorForTokens(tokens) {
|
|
91
|
-
const termCounts = new Map();
|
|
92
|
-
for (const token of tokens) {
|
|
93
|
-
termCounts.set(token, (termCounts.get(token) || 0) + 1);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const vector = {};
|
|
97
|
-
const totalDocs = this.documents.length;
|
|
98
|
-
|
|
99
|
-
for (const [term, count] of termCounts) {
|
|
100
|
-
const tf = count / tokens.length;
|
|
101
|
-
const df = this.docFrequencies.get(term) || 0;
|
|
102
|
-
const idf = Math.log(1 + (totalDocs / (1 + df)));
|
|
103
|
-
vector[term] = tf * idf;
|
|
104
|
-
}
|
|
105
|
-
return vector;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function extractBoostedContent(content) {
|
|
110
|
-
if (!content) return '';
|
|
111
|
-
|
|
112
|
-
let boosted = '';
|
|
113
|
-
|
|
114
|
-
// Headers
|
|
115
|
-
const headers = content.match(/^#+\s+(.*)$/gm);
|
|
116
|
-
if (headers) {
|
|
117
|
-
boosted += headers.map(h => h.replace(/^#+\s+/, '')).join(' ') + ' ';
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Bold text
|
|
121
|
-
const bold = content.match(/\*\*(.*?)\*\*/g);
|
|
122
|
-
if (bold) {
|
|
123
|
-
boosted += bold.map(b => b.replace(/\*\*/g, '')).join(' ') + ' ';
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return boosted;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
async function loadAssets(type) {
|
|
130
|
-
const dir = DIRS[type];
|
|
131
|
-
if (!await fs.pathExists(dir)) return [];
|
|
132
|
-
|
|
133
|
-
const files = await fs.readdir(dir);
|
|
134
|
-
const assets = [];
|
|
135
|
-
|
|
136
|
-
for (const file of files) {
|
|
137
|
-
if (!file.endsWith('.md')) continue;
|
|
138
|
-
|
|
139
|
-
const filePath = path.join(dir, file);
|
|
140
|
-
const content = await fs.readFile(filePath, 'utf8');
|
|
141
|
-
const parsed = matter(content);
|
|
142
|
-
const id = file.replace(/\.(chatmode|instructions|prompt)\.md$/, '');
|
|
143
|
-
|
|
144
|
-
// Boosted content (headers, bold) is repeated to increase term frequency
|
|
145
|
-
const boosted = extractBoostedContent(parsed.content);
|
|
146
|
-
const fullText = `${id} ${parsed.data.title || ''} ${parsed.data.description || ''} ${boosted} ${boosted} ${parsed.content}`;
|
|
147
|
-
|
|
148
|
-
assets.push({
|
|
149
|
-
id,
|
|
150
|
-
type,
|
|
151
|
-
key: `${type}:${id}`,
|
|
152
|
-
filename: file,
|
|
153
|
-
data: parsed.data,
|
|
154
|
-
fullText,
|
|
155
|
-
tokens: getTokens(fullText)
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
return assets;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
async function loadCollections() {
|
|
162
|
-
const dir = DIRS.collections;
|
|
163
|
-
if (!await fs.pathExists(dir)) return [];
|
|
164
|
-
|
|
165
|
-
const files = await fs.readdir(dir);
|
|
166
|
-
const collections = [];
|
|
167
|
-
|
|
168
|
-
for (const file of files) {
|
|
169
|
-
if (!file.endsWith('.json')) continue;
|
|
170
|
-
|
|
171
|
-
const filePath = path.join(dir, file);
|
|
172
|
-
const content = await fs.readJson(filePath);
|
|
173
|
-
|
|
174
|
-
collections.push({
|
|
175
|
-
filename: file,
|
|
176
|
-
filePath,
|
|
177
|
-
data: content,
|
|
178
|
-
// Initial tokens from metadata
|
|
179
|
-
tokens: getTokens(`${file.replace('.json', '')} ${content.description || ''}`)
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
return collections;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function calculateTfIdfVectors(assets) {
|
|
186
|
-
const tfidf = new TfIdf();
|
|
187
|
-
|
|
188
|
-
assets.forEach(asset => {
|
|
189
|
-
tfidf.addDocument(asset.tokens);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
// Build vectors for each asset
|
|
193
|
-
const assetVectors = new Map();
|
|
194
|
-
|
|
195
|
-
assets.forEach((asset, index) => {
|
|
196
|
-
const vector = tfidf.getTfIdfVector(index);
|
|
197
|
-
assetVectors.set(asset.key, vector);
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
return { tfidf, assetVectors };
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function cosineSimilarity(vecA, vecB) {
|
|
204
|
-
const terms = new Set([...Object.keys(vecA), ...Object.keys(vecB)]);
|
|
205
|
-
let dotProduct = 0;
|
|
206
|
-
let magA = 0;
|
|
207
|
-
let magB = 0;
|
|
208
|
-
|
|
209
|
-
for (const term of terms) {
|
|
210
|
-
const valA = vecA[term] || 0;
|
|
211
|
-
const valB = vecB[term] || 0;
|
|
212
|
-
dotProduct += valA * valB;
|
|
213
|
-
magA += valA * valA;
|
|
214
|
-
magB += valB * valB;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
if (magA === 0 || magB === 0) return 0;
|
|
218
|
-
return dotProduct / (Math.sqrt(magA) * Math.sqrt(magB));
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function getCollectionProfileVector(collection, allAssetsMap, assetVectors, tfidf) {
|
|
222
|
-
// Start with collection's own metadata tokens
|
|
223
|
-
// We use the global TF-IDF model to get the vector for these tokens
|
|
224
|
-
const baseVector = tfidf.getVectorForTokens(collection.tokens);
|
|
225
|
-
|
|
226
|
-
// Boost metadata importance
|
|
227
|
-
for (const key in baseVector) {
|
|
228
|
-
baseVector[key] *= 2;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// Aggregate vectors of existing items
|
|
232
|
-
const existingItems = collection.data.items || [];
|
|
233
|
-
if (existingItems.length === 0) return baseVector;
|
|
234
|
-
|
|
235
|
-
const combinedVector = { ...baseVector };
|
|
236
|
-
|
|
237
|
-
for (const itemKey of existingItems) {
|
|
238
|
-
const assetVector = assetVectors.get(itemKey);
|
|
239
|
-
if (assetVector) {
|
|
240
|
-
for (const [term, score] of Object.entries(assetVector)) {
|
|
241
|
-
combinedVector[term] = (combinedVector[term] || 0) + score;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return combinedVector;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
function subtractVector(vecA, vecB) {
|
|
250
|
-
const result = { ...vecA };
|
|
251
|
-
for (const [term, valB] of Object.entries(vecB)) {
|
|
252
|
-
if (result[term]) {
|
|
253
|
-
result[term] -= valB;
|
|
254
|
-
if (result[term] <= 0.0001) delete result[term]; // Remove if effectively zero
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
return result;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
async function main() {
|
|
261
|
-
program
|
|
262
|
-
.name('analyze-collections')
|
|
263
|
-
.description('Analyze collections and suggest missing assets using TF-IDF and Cosine Similarity')
|
|
264
|
-
.option('-f, --fix', 'Automatically add high-confidence matches to collections')
|
|
265
|
-
.option('-p, --prune', 'Automatically remove low-confidence items from collections')
|
|
266
|
-
.option('-t, --threshold <number>', 'Similarity threshold for adding (0.0 to 1.0)', '0.2')
|
|
267
|
-
.option('--prune-threshold <number>', 'Similarity threshold for pruning (0.0 to 1.0)', '0.05')
|
|
268
|
-
.parse(process.argv);
|
|
269
|
-
|
|
270
|
-
const options = program.opts();
|
|
271
|
-
const threshold = parseFloat(options.threshold);
|
|
272
|
-
const pruneThreshold = parseFloat(options.pruneThreshold);
|
|
273
|
-
|
|
274
|
-
console.log(chalk.blue('Loading assets...'));
|
|
275
|
-
|
|
276
|
-
const [chatmodes, instructions, prompts] = await Promise.all([
|
|
277
|
-
loadAssets('chatmodes'),
|
|
278
|
-
loadAssets('instructions'),
|
|
279
|
-
loadAssets('prompts')
|
|
280
|
-
]);
|
|
281
|
-
|
|
282
|
-
const allAssets = [...chatmodes, ...instructions, ...prompts];
|
|
283
|
-
const allAssetsMap = new Map(allAssets.map(a => [a.key, a]));
|
|
284
|
-
|
|
285
|
-
console.log(chalk.blue(`Loaded ${allAssets.length} assets.`));
|
|
286
|
-
|
|
287
|
-
const collections = await loadCollections();
|
|
288
|
-
console.log(chalk.blue(`Loaded ${collections.length} collections.`));
|
|
289
|
-
|
|
290
|
-
console.log(chalk.yellow('\nCalculating TF-IDF vectors...'));
|
|
291
|
-
const { tfidf, assetVectors } = calculateTfIdfVectors(allAssets);
|
|
292
|
-
|
|
293
|
-
console.log(chalk.yellow('Analyzing collections...'));
|
|
294
|
-
|
|
295
|
-
for (const collection of collections) {
|
|
296
|
-
const profileVector = getCollectionProfileVector(collection, allAssetsMap, assetVectors, tfidf);
|
|
297
|
-
let isModified = false;
|
|
298
|
-
|
|
299
|
-
console.log(chalk.green(`\nCollection: ${collection.filename}`));
|
|
300
|
-
console.log(chalk.dim(collection.data.description || 'No description'));
|
|
301
|
-
|
|
302
|
-
// --- PRUNING PHASE ---
|
|
303
|
-
const existingItems = collection.data.items || [];
|
|
304
|
-
const outliers = [];
|
|
305
|
-
|
|
306
|
-
for (const itemKey of existingItems) {
|
|
307
|
-
const assetVector = assetVectors.get(itemKey);
|
|
308
|
-
|
|
309
|
-
if (!assetVector) {
|
|
310
|
-
console.log(chalk.red(` [MISSING] ${itemKey} (File not found)`));
|
|
311
|
-
// We don't auto-prune missing files unless explicitly asked, but for now let's just flag them
|
|
312
|
-
continue;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// "Leave-One-Out" Validation:
|
|
316
|
-
// Check how well this item fits the collection *without* itself included in the profile.
|
|
317
|
-
// This prevents an item from validating itself.
|
|
318
|
-
const profileMinusItem = subtractVector(profileVector, assetVector);
|
|
319
|
-
const score = cosineSimilarity(profileMinusItem, assetVector);
|
|
320
|
-
|
|
321
|
-
if (score < pruneThreshold) {
|
|
322
|
-
outliers.push({ key: itemKey, score });
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
if (outliers.length > 0) {
|
|
327
|
-
outliers.sort((a, b) => a.score - b.score);
|
|
328
|
-
console.log(chalk.yellow(` Outliers (Low Similarity < ${pruneThreshold}):`));
|
|
329
|
-
|
|
330
|
-
for (const { key, score } of outliers) {
|
|
331
|
-
console.log(` [${score.toFixed(3)}] ${chalk.red(key)}`);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
if (options.prune) {
|
|
335
|
-
const keysToRemove = new Set(outliers.map(o => o.key));
|
|
336
|
-
collection.data.items = collection.data.items.filter(k => !keysToRemove.has(k));
|
|
337
|
-
console.log(chalk.red(` -> Pruned ${outliers.length} items`));
|
|
338
|
-
isModified = true;
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// --- SUGGESTION PHASE ---
|
|
343
|
-
const suggestions = [];
|
|
344
|
-
|
|
345
|
-
for (const asset of allAssets) {
|
|
346
|
-
// Skip if already in collection
|
|
347
|
-
if (collection.data.items && collection.data.items.includes(asset.key)) continue;
|
|
348
|
-
|
|
349
|
-
const assetVector = assetVectors.get(asset.key);
|
|
350
|
-
const score = cosineSimilarity(profileVector, assetVector);
|
|
351
|
-
|
|
352
|
-
if (score >= threshold) {
|
|
353
|
-
suggestions.push({ asset, score });
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
if (suggestions.length > 0) {
|
|
358
|
-
suggestions.sort((a, b) => b.score - a.score);
|
|
359
|
-
|
|
360
|
-
const newItems = [];
|
|
361
|
-
const topSuggestions = suggestions.slice(0, 10); // Limit to top 10
|
|
362
|
-
|
|
363
|
-
for (const { asset, score } of topSuggestions) {
|
|
364
|
-
console.log(` [${score.toFixed(3)}] ${chalk.cyan(asset.key)} - ${chalk.dim(asset.data.title || asset.id)}`);
|
|
365
|
-
newItems.push(asset.key);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
if (options.fix) {
|
|
369
|
-
if (!collection.data.items) collection.data.items = [];
|
|
370
|
-
collection.data.items.push(...newItems);
|
|
371
|
-
collection.data.items = [...new Set(collection.data.items)]; // Dedupe
|
|
372
|
-
console.log(chalk.magenta(` -> Added ${newItems.length} items`));
|
|
373
|
-
isModified = true;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// --- SAVE ---
|
|
378
|
-
if (isModified) {
|
|
379
|
-
await fs.writeJson(collection.filePath, collection.data, { spaces: 2 });
|
|
380
|
-
console.log(chalk.blue(` -> Saved changes to ${collection.filename}`));
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
console.log(chalk.blue('\nDone.'));
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
main().catch(console.error);
|
package/scripts/sync.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
|
|
5
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
-
const __dirname = path.dirname(__filename);
|
|
7
|
-
|
|
8
|
-
// Load .env manually
|
|
9
|
-
const envPath = path.join(__dirname, '../.env');
|
|
10
|
-
if (fs.existsSync(envPath)) {
|
|
11
|
-
const envConfig = fs.readFileSync(envPath, 'utf8');
|
|
12
|
-
envConfig.split('\n').forEach(line => {
|
|
13
|
-
const [key, value] = line.split('=');
|
|
14
|
-
if (key && value) {
|
|
15
|
-
process.env[key.trim()] = value.trim();
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
|
|
21
|
-
const REPO_OWNER = 'github';
|
|
22
|
-
const REPO_NAME = 'awesome-copilot';
|
|
23
|
-
const BASE_API_URL = `https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/contents`;
|
|
24
|
-
|
|
25
|
-
const MAPPINGS = [
|
|
26
|
-
{ remote: 'chatmodes', local: 'assets/chatmodes' },
|
|
27
|
-
{ remote: 'instructions', local: 'assets/instructions' },
|
|
28
|
-
{ remote: 'prompts', local: 'assets/prompts' }
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
const FILES_TO_DELETE = [
|
|
32
|
-
'basic-setup.md',
|
|
33
|
-
'assets/instructions/basic-setup.md'
|
|
34
|
-
];
|
|
35
|
-
|
|
36
|
-
async function fetchGitHubContent(path) {
|
|
37
|
-
const url = `${BASE_API_URL}/${path}`;
|
|
38
|
-
const headers = {
|
|
39
|
-
'User-Agent': 'node.js',
|
|
40
|
-
'Accept': 'application/vnd.github.v3+json'
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
if (GITHUB_TOKEN) {
|
|
44
|
-
headers['Authorization'] = `token ${GITHUB_TOKEN}`;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const response = await fetch(url, { headers });
|
|
48
|
-
if (!response.ok) {
|
|
49
|
-
throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
|
|
50
|
-
}
|
|
51
|
-
return response.json();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async function downloadFile(downloadUrl, localPath) {
|
|
55
|
-
const response = await fetch(downloadUrl);
|
|
56
|
-
if (!response.ok) {
|
|
57
|
-
throw new Error(`Failed to download ${downloadUrl}: ${response.statusText}`);
|
|
58
|
-
}
|
|
59
|
-
const content = await response.text();
|
|
60
|
-
const dir = path.dirname(localPath);
|
|
61
|
-
if (!fs.existsSync(dir)) {
|
|
62
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
63
|
-
}
|
|
64
|
-
fs.writeFileSync(localPath, content);
|
|
65
|
-
console.log(`Downloaded: ${localPath}`);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
async function sync() {
|
|
69
|
-
console.log('Starting sync...');
|
|
70
|
-
|
|
71
|
-
// Delete legacy files
|
|
72
|
-
for (const file of FILES_TO_DELETE) {
|
|
73
|
-
const filePath = path.join(__dirname, '..', file);
|
|
74
|
-
if (fs.existsSync(filePath)) {
|
|
75
|
-
fs.unlinkSync(filePath);
|
|
76
|
-
console.log(`Deleted: ${file}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Sync folders
|
|
81
|
-
for (const mapping of MAPPINGS) {
|
|
82
|
-
console.log(`Syncing ${mapping.remote} to ${mapping.local}...`);
|
|
83
|
-
try {
|
|
84
|
-
const items = await fetchGitHubContent(mapping.remote);
|
|
85
|
-
|
|
86
|
-
for (const item of items) {
|
|
87
|
-
if (item.type === 'file') {
|
|
88
|
-
const localFilePath = path.join(__dirname, '..', mapping.local, item.name);
|
|
89
|
-
await downloadFile(item.download_url, localFilePath);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
} catch (error) {
|
|
93
|
-
console.error(`Error syncing ${mapping.remote}:`, error.message);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
console.log('Sync complete!');
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
sync();
|
package/verdaccio/config.yaml
DELETED
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# This is the default configuration file. It allows all users to do anything,
|
|
3
|
-
# please read carefully the documentation and best practices to
|
|
4
|
-
# improve security.
|
|
5
|
-
#
|
|
6
|
-
# Look here for more config file examples:
|
|
7
|
-
# https://github.com/verdaccio/verdaccio/tree/5.x/conf
|
|
8
|
-
#
|
|
9
|
-
# Read about the best practices
|
|
10
|
-
# https://verdaccio.org/docs/best
|
|
11
|
-
|
|
12
|
-
# path to a directory with all packages
|
|
13
|
-
storage: ./storage
|
|
14
|
-
# path to a directory with plugins to include
|
|
15
|
-
plugins: ./plugins
|
|
16
|
-
|
|
17
|
-
# https://verdaccio.org/docs/webui
|
|
18
|
-
web:
|
|
19
|
-
title: Verdaccio
|
|
20
|
-
# comment out to disable gravatar support
|
|
21
|
-
# gravatar: false
|
|
22
|
-
# by default packages are ordercer ascendant (asc|desc)
|
|
23
|
-
# sort_packages: asc
|
|
24
|
-
# convert your UI to the dark side
|
|
25
|
-
# darkMode: true
|
|
26
|
-
# html_cache: true
|
|
27
|
-
# by default all features are displayed
|
|
28
|
-
# login: true
|
|
29
|
-
# showInfo: true
|
|
30
|
-
# showSettings: true
|
|
31
|
-
# In combination with darkMode you can force specific theme
|
|
32
|
-
# showThemeSwitch: true
|
|
33
|
-
# showFooter: true
|
|
34
|
-
# showSearch: true
|
|
35
|
-
# showRaw: true
|
|
36
|
-
# showDownloadTarball: true
|
|
37
|
-
# HTML tags injected after manifest <scripts/>
|
|
38
|
-
# scriptsBodyAfter:
|
|
39
|
-
# - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
|
|
40
|
-
# HTML tags injected before ends </head>
|
|
41
|
-
# metaScripts:
|
|
42
|
-
# - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
|
|
43
|
-
# - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
|
|
44
|
-
# - '<meta name="robots" content="noindex" />'
|
|
45
|
-
# HTML tags injected first child at <body/>
|
|
46
|
-
# bodyBefore:
|
|
47
|
-
# - '<div id="myId">html before webpack scripts</div>'
|
|
48
|
-
# Public path for template manifest scripts (only manifest)
|
|
49
|
-
# publicPath: http://somedomain.org/
|
|
50
|
-
|
|
51
|
-
# https://verdaccio.org/docs/configuration#authentication
|
|
52
|
-
auth:
|
|
53
|
-
htpasswd:
|
|
54
|
-
file: ./htpasswd
|
|
55
|
-
# Maximum amount of users allowed to register, defaults to "+inf".
|
|
56
|
-
# You can set this to -1 to disable registration.
|
|
57
|
-
# max_users: 1000
|
|
58
|
-
# Hash algorithm, possible options are: "bcrypt", "md5", "sha1", "crypt".
|
|
59
|
-
# algorithm: bcrypt # by default is crypt, but is recommended use bcrypt for new installations
|
|
60
|
-
# Rounds number for "bcrypt", will be ignored for other algorithms.
|
|
61
|
-
# rounds: 10
|
|
62
|
-
|
|
63
|
-
# https://verdaccio.org/docs/configuration#uplinks
|
|
64
|
-
# a list of other known repositories we can talk to
|
|
65
|
-
uplinks:
|
|
66
|
-
npmjs:
|
|
67
|
-
url: https://registry.npmjs.org/
|
|
68
|
-
|
|
69
|
-
# Learn how to protect your packages
|
|
70
|
-
# https://verdaccio.org/docs/protect-your-dependencies/
|
|
71
|
-
# https://verdaccio.org/docs/configuration#packages
|
|
72
|
-
packages:
|
|
73
|
-
'@*/*':
|
|
74
|
-
# scoped packages
|
|
75
|
-
access: $all
|
|
76
|
-
publish: $authenticated
|
|
77
|
-
unpublish: $authenticated
|
|
78
|
-
proxy: npmjs
|
|
79
|
-
|
|
80
|
-
'**':
|
|
81
|
-
# allow all users (including non-authenticated users) to read and
|
|
82
|
-
# publish all packages
|
|
83
|
-
#
|
|
84
|
-
# you can specify usernames/groupnames (depending on your auth plugin)
|
|
85
|
-
# and three keywords: "$all", "$anonymous", "$authenticated"
|
|
86
|
-
access: $all
|
|
87
|
-
|
|
88
|
-
# allow all known users to publish/publish packages
|
|
89
|
-
# (anyone can register by default, remember?)
|
|
90
|
-
publish: $all
|
|
91
|
-
unpublish: $all
|
|
92
|
-
|
|
93
|
-
# if package is not available locally, proxy requests to 'npmjs' registry
|
|
94
|
-
proxy: npmjs
|
|
95
|
-
|
|
96
|
-
# To improve your security configuration and avoid dependency confusion
|
|
97
|
-
# consider removing the proxy property for private packages
|
|
98
|
-
# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
|
|
99
|
-
|
|
100
|
-
# https://verdaccio.org/docs/configuration#server
|
|
101
|
-
# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
|
|
102
|
-
# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
|
|
103
|
-
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
|
|
104
|
-
server:
|
|
105
|
-
keepAliveTimeout: 60
|
|
106
|
-
# Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
|
|
107
|
-
# See: https://expressjs.com/en/guide/behind-proxies.html
|
|
108
|
-
# trustProxy: '127.0.0.1'
|
|
109
|
-
|
|
110
|
-
# https://verdaccio.org/docs/configuration#offline-publish
|
|
111
|
-
# publish:
|
|
112
|
-
# allow_offline: false
|
|
113
|
-
|
|
114
|
-
# https://verdaccio.org/docs/configuration#url-prefix
|
|
115
|
-
# url_prefix: /verdaccio/
|
|
116
|
-
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
|
|
117
|
-
# url_prefix: '/my_prefix'
|
|
118
|
-
# // url -> https://somedomain.org/my_prefix/
|
|
119
|
-
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
|
|
120
|
-
# url_prefix: '/'
|
|
121
|
-
# // url -> https://somedomain.org/
|
|
122
|
-
# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
|
|
123
|
-
# url_prefix: '/second_prefix'
|
|
124
|
-
# // url -> https://somedomain.org/second_prefix/'
|
|
125
|
-
|
|
126
|
-
# https://verdaccio.org/docs/configuration#security
|
|
127
|
-
# security:
|
|
128
|
-
# api:
|
|
129
|
-
# legacy: true
|
|
130
|
-
# # recomended set to true for older installations
|
|
131
|
-
# migrateToSecureLegacySignature: true
|
|
132
|
-
# jwt:
|
|
133
|
-
# sign:
|
|
134
|
-
# expiresIn: 29d
|
|
135
|
-
# verify:
|
|
136
|
-
# someProp: [value]
|
|
137
|
-
# web:
|
|
138
|
-
# sign:
|
|
139
|
-
# expiresIn: 1h # 1 hour by default
|
|
140
|
-
# verify:
|
|
141
|
-
# someProp: [value]
|
|
142
|
-
|
|
143
|
-
# https://verdaccio.org/docs/configuration#user-rate-limit
|
|
144
|
-
# userRateLimit:
|
|
145
|
-
# windowMs: 50000
|
|
146
|
-
# max: 1000
|
|
147
|
-
|
|
148
|
-
# https://verdaccio.org/docs/configuration#max-body-size
|
|
149
|
-
# max_body_size: 10mb
|
|
150
|
-
|
|
151
|
-
# https://verdaccio.org/docs/configuration#listen-port
|
|
152
|
-
listen: 0.0.0.0:4873
|
|
153
|
-
# listen:
|
|
154
|
-
# - localhost:4873 # default value
|
|
155
|
-
# - http://localhost:4873 # same thing
|
|
156
|
-
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
|
|
157
|
-
# - https://example.org:4873 # if you want to use https
|
|
158
|
-
# - "[::1]:4873" # ipv6
|
|
159
|
-
# - unix:/tmp/verdaccio.sock # unix socket
|
|
160
|
-
|
|
161
|
-
# The HTTPS configuration is useful if you do not consider use a HTTP Proxy
|
|
162
|
-
# https://verdaccio.org/docs/configuration#https
|
|
163
|
-
# https:
|
|
164
|
-
# key: ./path/verdaccio-key.pem
|
|
165
|
-
# cert: ./path/verdaccio-cert.pem
|
|
166
|
-
# ca: ./path/verdaccio-csr.pem
|
|
167
|
-
|
|
168
|
-
# https://verdaccio.org/docs/configuration#proxy
|
|
169
|
-
# http_proxy: http://something.local/
|
|
170
|
-
# https_proxy: https://something.local/
|
|
171
|
-
|
|
172
|
-
# https://verdaccio.org/docs/configuration#notifications
|
|
173
|
-
# notify:
|
|
174
|
-
# method: POST
|
|
175
|
-
# headers: [{ "Content-Type": "application/json" }]
|
|
176
|
-
# endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
|
177
|
-
# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
|
178
|
-
|
|
179
|
-
middlewares:
|
|
180
|
-
audit:
|
|
181
|
-
enabled: true
|
|
182
|
-
|
|
183
|
-
# https://verdaccio.org/docs/logger
|
|
184
|
-
# log settings
|
|
185
|
-
log: { type: stdout, format: pretty, level: http }
|
|
186
|
-
#experiments:
|
|
187
|
-
# # support for npm token command
|
|
188
|
-
# token: false
|
|
189
|
-
# # disable writing body size to logs, read more on ticket 1912
|
|
190
|
-
# bytesin_off: false
|
|
191
|
-
# # enable tarball URL redirect for hosting tarball with a different server, the tarball_url_redirect can be a template string
|
|
192
|
-
# tarball_url_redirect: 'https://mycdn.com/verdaccio/${packageName}/${filename}'
|
|
193
|
-
# # the tarball_url_redirect can be a function, takes packageName and filename and returns the url, when working with a js configuration file
|
|
194
|
-
# tarball_url_redirect(packageName, filename) {
|
|
195
|
-
# const signedUrl = // generate a signed url
|
|
196
|
-
# return signedUrl;
|
|
197
|
-
# }
|
|
198
|
-
|
|
199
|
-
# translate your registry, api i18n not available yet
|
|
200
|
-
# i18n:
|
|
201
|
-
# list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
|
|
202
|
-
# web: en-US
|