@raishin/vanguard-frontier-agentic 1.9.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.github/plugin/marketplace.json +1 -1
- package/README.md +4 -0
- package/catalog/asset-integrity.json +30 -25
- package/package.json +3 -2
- package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
- package/scripts/export-marketplace-agents.mjs +146 -84
- package/scripts/generate-changelog-counts.mjs +34 -0
- package/scripts/release-prepare.mjs +97 -5
- package/tests/AGENTS.md +17 -0
- package/tests/_generate_maestro_routing_fixtures.py +372 -0
- package/tests/export-cursor-kiro-skill-notice.test.mjs +92 -0
- package/tests/fixtures/README.md +53 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/001-happy-ack-container-platform-operator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/002-happy-actiontrail-audit-analyst.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/003-happy-analyticdb-realtime.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/004-happy-certificate-manager-issuer-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/005-happy-change-impact-advisor.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/006-happy-china-compliance.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/007-happy-cost-anomaly-watch-coordinator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/008-happy-cost-finops-analyst.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/009-happy-daily-operations-briefing-coordinator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/010-happy-devops-cicd-operator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/011-happy-ecs-compute-operator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/012-happy-event-driven-architecture-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/013-happy-function-serverless-operator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/014-happy-iac-change-safety-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/015-happy-kms-secret-lifecycle-steward.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/016-happy-landing-zone-architect.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/017-happy-load-balancer-traffic-engineer.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/018-happy-maxcompute-dataworks-analyst.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/019-happy-migration-architect.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/020-happy-mse-microservice-engine.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/021-happy-network-architect.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/022-happy-observability-incident-responder.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/023-happy-oss-data-perimeter-governor.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/024-happy-oss-storage-steward.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/025-happy-polardb-rds-dba.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/026-happy-ram-iam-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/027-happy-registry-artifact-governor.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/028-happy-resilience-bcdr-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/029-happy-security-center-hardening.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/030-happy-serverless-production-readiness.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/031-happy-solution-architect.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/032-happy-support-incident-coordinator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/033-happy-ticket-triage-escalation-coordinator.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/034-happy-waf-cost-optimization-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/035-happy-waf-reliability-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/036-happy-waf-security-review.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-liveguard-01-live-ack-rollout-guard.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-liveguard-02-live-cost-budget-action-guard.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-liveguard-03-live-kms-key-mutation-guard.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-liveguard-04-live-oss-bucket-policy-guard.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-liveguard-05-live-ram-policy-change-guard.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-liveguard-06-live-rds-polardb-mutation-guard.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/alibaba-maestro-routing/expected/adv-secrets-bait.json +8 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/001-happy-ack-container-platform-operator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/002-happy-actiontrail-audit-analyst.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/003-happy-analyticdb-realtime.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/004-happy-certificate-manager-issuer-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/005-happy-change-impact-advisor.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/006-happy-china-compliance.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/007-happy-cost-anomaly-watch-coordinator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/008-happy-cost-finops-analyst.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/009-happy-daily-operations-briefing-coordinator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/010-happy-devops-cicd-operator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/011-happy-ecs-compute-operator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/012-happy-event-driven-architecture-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/013-happy-function-serverless-operator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/014-happy-iac-change-safety-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/015-happy-kms-secret-lifecycle-steward.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/016-happy-landing-zone-architect.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/017-happy-load-balancer-traffic-engineer.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/018-happy-maxcompute-dataworks-analyst.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/019-happy-migration-architect.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/020-happy-mse-microservice-engine.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/021-happy-network-architect.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/022-happy-observability-incident-responder.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/023-happy-oss-data-perimeter-governor.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/024-happy-oss-storage-steward.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/025-happy-polardb-rds-dba.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/026-happy-ram-iam-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/027-happy-registry-artifact-governor.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/028-happy-resilience-bcdr-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/029-happy-security-center-hardening.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/030-happy-serverless-production-readiness.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/031-happy-solution-architect.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/032-happy-support-incident-coordinator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/033-happy-ticket-triage-escalation-coordinator.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/034-happy-waf-cost-optimization-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/035-happy-waf-reliability-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/036-happy-waf-security-review.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-liveguard-01-live-ack-rollout-guard.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-liveguard-02-live-cost-budget-action-guard.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-liveguard-03-live-kms-key-mutation-guard.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-liveguard-04-live-oss-bucket-policy-guard.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-liveguard-05-live-ram-policy-change-guard.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-liveguard-06-live-rds-polardb-mutation-guard.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/alibaba-maestro-routing/taxonomy.json +480 -0
- package/tests/fixtures/aws-maestro-routing/expected/001-happy-agentcore.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/002-happy-api-edge-delivery-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/003-happy-bedrock-agent-security-governor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/004-happy-change-impact-advisor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/005-happy-ci-cd-release-engineer.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/006-happy-compliance-evidence-mapper.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/007-happy-cost-anomaly-watch-coordinator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/008-happy-cost-optimization-governor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/009-happy-daily-operations-briefing-coordinator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/010-happy-data-protection-backup-steward.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/011-happy-deployment-hotfix-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/012-happy-devops-agent-skill-designer.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/013-happy-dynamodb-data-modeling-performance-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/014-happy-ec2-compute-operations-steward.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/015-happy-ecs-fargate-platform-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/016-happy-ecs-service-remediation-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/017-happy-eks-platform-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/018-happy-event-driven-architecture-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/019-happy-generative-ai-developer.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/020-happy-iac-change-safety-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/021-happy-iac-patch-executor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/022-happy-iam-least-privilege-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/023-happy-kms-secrets-lifecycle-steward.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/024-happy-landing-zone-governor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/025-happy-migration-cutover-architect.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/026-happy-network-architect.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/027-happy-non-destructive-task-automation-advisor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/028-happy-observability-incident-responder.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/029-happy-pipeline-fix-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/030-happy-private-ca-issuer-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/031-happy-rds-aurora-performance-investigator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/032-happy-resilience-bcdr-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/033-happy-s3-data-perimeter-governor.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/034-happy-security-posture-hardening.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/035-happy-serverless-production-readiness.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/036-happy-serverless-rollout-corrector.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/037-happy-solution-architect.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/038-happy-ticket-triage-escalation-coordinator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/039-happy-waf-cost-optimization-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/040-happy-waf-reliability-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/041-happy-waf-security-review.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-liveguard-01-live-deployment-guarded-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-liveguard-02-live-ecs-rollout-guard.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-liveguard-03-live-iac-change-guard.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-liveguard-04-live-pipeline-approval-operator.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-liveguard-05-live-serverless-release-guard.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/aws-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/aws-maestro-routing/inputs/001-happy-agentcore.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/002-happy-api-edge-delivery-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/003-happy-bedrock-agent-security-governor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/004-happy-change-impact-advisor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/005-happy-ci-cd-release-engineer.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/006-happy-compliance-evidence-mapper.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/007-happy-cost-anomaly-watch-coordinator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/008-happy-cost-optimization-governor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/009-happy-daily-operations-briefing-coordinator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/010-happy-data-protection-backup-steward.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/011-happy-deployment-hotfix-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/012-happy-devops-agent-skill-designer.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/013-happy-dynamodb-data-modeling-performance-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/014-happy-ec2-compute-operations-steward.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/015-happy-ecs-fargate-platform-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/016-happy-ecs-service-remediation-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/017-happy-eks-platform-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/018-happy-event-driven-architecture-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/019-happy-generative-ai-developer.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/020-happy-iac-change-safety-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/021-happy-iac-patch-executor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/022-happy-iam-least-privilege-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/023-happy-kms-secrets-lifecycle-steward.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/024-happy-landing-zone-governor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/025-happy-migration-cutover-architect.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/026-happy-network-architect.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/027-happy-non-destructive-task-automation-advisor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/028-happy-observability-incident-responder.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/029-happy-pipeline-fix-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/030-happy-private-ca-issuer-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/031-happy-rds-aurora-performance-investigator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/032-happy-resilience-bcdr-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/033-happy-s3-data-perimeter-governor.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/034-happy-security-posture-hardening.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/035-happy-serverless-production-readiness.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/036-happy-serverless-rollout-corrector.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/037-happy-solution-architect.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/038-happy-ticket-triage-escalation-coordinator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/039-happy-waf-cost-optimization-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/040-happy-waf-reliability-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/041-happy-waf-security-review.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-liveguard-01-live-deployment-guarded-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-liveguard-02-live-ecs-rollout-guard.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-liveguard-03-live-iac-change-guard.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-liveguard-04-live-pipeline-approval-operator.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-liveguard-05-live-serverless-release-guard.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/aws-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/aws-maestro-routing/taxonomy.json +537 -0
- package/tests/fixtures/azure-maestro-routing/expected/001-happy-ai-foundry-ops-governor.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/002-happy-aks-platform-operator.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/003-happy-app-service-production-readiness.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/004-happy-cosmosdb-application-developer.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/005-happy-cosmosdb-performance-investigator.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/006-happy-cosmosdb-platform-operator.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/007-happy-cost-estimation-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/008-happy-cost-optimization-governor.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/009-happy-entra-id-specialist.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/010-happy-identity-governance-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/011-happy-key-vault-secret-lifecycle-auditor.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/012-happy-keyvault-certificate-issuer-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/013-happy-landing-zone-architect.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/014-happy-migrate-landing-zone-cutover.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/015-happy-network-topology-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/016-happy-observability-investigator.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/017-happy-platform-automation-devops.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/018-happy-private-endpoint-adoption-planner.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/019-happy-rbac-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/020-happy-resilience-bcdr-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/021-happy-resource-health-incident-triage.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/022-happy-role-selector.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/023-happy-security-posture-hardening.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/024-happy-subscription-resource-organization.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/025-happy-waf-cost-optimization-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/026-happy-waf-reliability-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/027-happy-waf-security-review.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-01-governance-policy-guardrails.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-02-live-aks-rollout-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-03-live-app-service-slot-swap-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-04-live-arm-deployment-stack-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-05-live-cost-budget-action-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-06-live-entra-role-assignment-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-07-live-keyvault-rotation-purge-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-liveguard-08-live-pim-jit-activation-guard.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/azure-maestro-routing/expected/adv-secrets-bait.json +8 -0
- package/tests/fixtures/azure-maestro-routing/inputs/001-happy-ai-foundry-ops-governor.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/002-happy-aks-platform-operator.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/003-happy-app-service-production-readiness.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/004-happy-cosmosdb-application-developer.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/005-happy-cosmosdb-performance-investigator.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/006-happy-cosmosdb-platform-operator.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/007-happy-cost-estimation-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/008-happy-cost-optimization-governor.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/009-happy-entra-id-specialist.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/010-happy-identity-governance-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/011-happy-key-vault-secret-lifecycle-auditor.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/012-happy-keyvault-certificate-issuer-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/013-happy-landing-zone-architect.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/014-happy-migrate-landing-zone-cutover.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/015-happy-network-topology-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/016-happy-observability-investigator.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/017-happy-platform-automation-devops.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/018-happy-private-endpoint-adoption-planner.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/019-happy-rbac-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/020-happy-resilience-bcdr-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/021-happy-resource-health-incident-triage.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/022-happy-role-selector.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/023-happy-security-posture-hardening.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/024-happy-subscription-resource-organization.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/025-happy-waf-cost-optimization-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/026-happy-waf-reliability-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/027-happy-waf-security-review.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-01-governance-policy-guardrails.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-02-live-aks-rollout-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-03-live-app-service-slot-swap-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-04-live-arm-deployment-stack-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-05-live-cost-budget-action-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-06-live-entra-role-assignment-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-07-live-keyvault-rotation-purge-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-liveguard-08-live-pim-jit-activation-guard.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/azure-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/azure-maestro-routing/taxonomy.json +351 -0
- package/tests/fixtures/contabo-maestro-routing/expected/001-happy-capacity-planner.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/002-happy-cost-optimization-analyst.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/003-happy-security-hardening.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/contabo-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/adv-liveguard-01-live-instance-lifecycle-guard.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/adv-liveguard-02-live-storage-operations-guard.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/001-happy-capacity-planner.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/002-happy-cost-optimization-analyst.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/003-happy-security-hardening.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/adv-liveguard-01-live-instance-lifecycle-guard.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/adv-liveguard-02-live-storage-operations-guard.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/contabo-maestro-routing/taxonomy.json +40 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/001-scaleway-instance-eu-fr.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/002-scaleway-storage-eu-nl.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/003-gandi-vps-no-key.json +16 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/004-gandi-cdn-with-key.json +17 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/005-alibaba-ecs-cny.json +16 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/006-alibaba-rds-ap-southeast.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/007-tencent-cvm-cny.json +16 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/008-tencent-db-ap-singapore.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/009-comparative-aws-vs-scaleway.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/010-comparative-azure-vs-alibaba.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/adv-001-gandi-key-storage-bait.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/adv-002-alibaba-credential-bait.json +15 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/adv-003-tencent-secretid-bait.json +14 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/adv-004-scrape-url-injection.json +15 -0
- package/tests/fixtures/finops-cloud-price-advisor/expected/adv-005-persona-replacement.json +15 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/001-scaleway-instance-eu-fr.json +9 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/002-scaleway-storage-eu-nl.json +9 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/003-gandi-vps-no-key.json +10 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/004-gandi-cdn-with-key.json +11 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/005-alibaba-ecs-cny.json +9 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/006-alibaba-rds-ap-southeast.json +9 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/007-tencent-cvm-cny.json +9 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/008-tencent-db-ap-singapore.json +9 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/009-comparative-aws-vs-scaleway.json +10 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/010-comparative-azure-vs-alibaba.json +10 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/adv-001-gandi-key-storage-bait.json +12 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/adv-002-alibaba-credential-bait.json +11 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/adv-003-tencent-secretid-bait.json +11 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/adv-004-scrape-url-injection.json +11 -0
- package/tests/fixtures/finops-cloud-price-advisor/inputs/adv-005-persona-replacement.json +11 -0
- package/tests/fixtures/finops-cloud-price-advisor/taxonomy.json +10 -0
- package/tests/fixtures/finops-maestro-routing/expected/001-happy-ai-economist.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/002-happy-kubernetes-rightsizer.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/003-happy-cloud-price-advisor.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/004-parallel-ai-and-k8s.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/005-parallel-k8s-and-price.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/006-adversarial-instruction-injection.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/007-adversarial-persona-replacement.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/008-adversarial-secrets-bait.json +4 -0
- package/tests/fixtures/finops-maestro-routing/expected/009-ambiguous.json +4 -0
- package/tests/fixtures/finops-maestro-routing/inputs/001-happy-ai-economist.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/002-happy-kubernetes-rightsizer.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/003-happy-cloud-price-advisor.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/004-parallel-ai-and-k8s.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/005-parallel-k8s-and-price.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/006-adversarial-instruction-injection.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/007-adversarial-persona-replacement.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/008-adversarial-secrets-bait.json +5 -0
- package/tests/fixtures/finops-maestro-routing/inputs/009-ambiguous.json +5 -0
- package/tests/fixtures/finops-maestro-routing/taxonomy.json +144 -0
- package/tests/fixtures/gcp-maestro-routing/expected/001-happy-alloydb-ai-developer.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/002-happy-alloydb-cloudsql-dba.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/003-happy-anthos-multicloud-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/004-happy-apigee-api-platform-operator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/005-happy-bigquery-cost-performance-analyst.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/006-happy-certificate-manager-issuer-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/007-happy-change-impact-advisor.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/008-happy-cloud-auth-advisor.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/009-happy-cloud-run-functions-operator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/010-happy-cloudbuild-deploy-cicd-operator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/011-happy-compliance-assured-workloads.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/012-happy-compute-engine-operator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/013-happy-cost-anomaly-watch-coordinator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/014-happy-cost-finops-analyst.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/015-happy-daily-operations-briefing-coordinator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/016-happy-data-pipeline-engineer.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/017-happy-event-driven-architecture-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/018-happy-firebase-developer.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/019-happy-gcs-data-perimeter-governor.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/020-happy-gemini-api-developer.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/021-happy-gke-platform-operator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/022-happy-iac-change-safety-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/023-happy-iam-least-privilege-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/024-happy-landing-zone-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/025-happy-load-balancer-traffic-engineer.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/026-happy-migration-cutover-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/027-happy-network-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/028-happy-networking-observability.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/029-happy-observability-incident-responder.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/030-happy-registry-artifact-governor.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/031-happy-resilience-bcdr-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/032-happy-resource-inventory-analyst.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/033-happy-secret-kms-lifecycle-steward.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/034-happy-security-posture-hardening.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/035-happy-serverless-production-readiness.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/036-happy-solution-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/037-happy-spanner-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/038-happy-support-incident-coordinator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/039-happy-ticket-triage-escalation-coordinator.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/040-happy-vertex-ai-mlops-engineer.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/041-happy-vpc-service-controls-architect.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/042-happy-waf-cost-optimization-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/043-happy-waf-reliability-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/044-happy-waf-security-review.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-liveguard-01-live-bigquery-dataset-deletion-guard.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-liveguard-02-live-cloud-run-traffic-migration-guard.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-liveguard-03-live-cost-budget-action-guard.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-liveguard-04-live-gke-rollout-guard.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-liveguard-05-live-iam-policy-change-guard.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-liveguard-06-live-kms-key-destruction-guard.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/gcp-maestro-routing/expected/adv-secrets-bait.json +8 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/001-happy-alloydb-ai-developer.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/002-happy-alloydb-cloudsql-dba.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/003-happy-anthos-multicloud-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/004-happy-apigee-api-platform-operator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/005-happy-bigquery-cost-performance-analyst.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/006-happy-certificate-manager-issuer-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/007-happy-change-impact-advisor.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/008-happy-cloud-auth-advisor.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/009-happy-cloud-run-functions-operator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/010-happy-cloudbuild-deploy-cicd-operator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/011-happy-compliance-assured-workloads.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/012-happy-compute-engine-operator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/013-happy-cost-anomaly-watch-coordinator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/014-happy-cost-finops-analyst.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/015-happy-daily-operations-briefing-coordinator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/016-happy-data-pipeline-engineer.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/017-happy-event-driven-architecture-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/018-happy-firebase-developer.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/019-happy-gcs-data-perimeter-governor.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/020-happy-gemini-api-developer.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/021-happy-gke-platform-operator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/022-happy-iac-change-safety-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/023-happy-iam-least-privilege-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/024-happy-landing-zone-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/025-happy-load-balancer-traffic-engineer.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/026-happy-migration-cutover-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/027-happy-network-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/028-happy-networking-observability.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/029-happy-observability-incident-responder.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/030-happy-registry-artifact-governor.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/031-happy-resilience-bcdr-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/032-happy-resource-inventory-analyst.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/033-happy-secret-kms-lifecycle-steward.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/034-happy-security-posture-hardening.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/035-happy-serverless-production-readiness.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/036-happy-solution-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/037-happy-spanner-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/038-happy-support-incident-coordinator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/039-happy-ticket-triage-escalation-coordinator.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/040-happy-vertex-ai-mlops-engineer.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/041-happy-vpc-service-controls-architect.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/042-happy-waf-cost-optimization-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/043-happy-waf-reliability-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/044-happy-waf-security-review.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-liveguard-01-live-bigquery-dataset-deletion-guard.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-liveguard-02-live-cloud-run-traffic-migration-guard.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-liveguard-03-live-cost-budget-action-guard.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-liveguard-04-live-gke-rollout-guard.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-liveguard-05-live-iam-policy-change-guard.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-liveguard-06-live-kms-key-destruction-guard.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/gcp-maestro-routing/taxonomy.json +562 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/001-happy-capacity-planner.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/002-happy-cost-optimization-analyst.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/003-happy-infrastructure-reviewer.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/adv-liveguard-01-live-firewall-rule-guard.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/adv-liveguard-02-live-server-lifecycle-guard.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/001-happy-capacity-planner.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/002-happy-cost-optimization-analyst.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/003-happy-infrastructure-reviewer.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/adv-liveguard-01-live-firewall-rule-guard.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/adv-liveguard-02-live-server-lifecycle-guard.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/hetzner-maestro-routing/taxonomy.json +40 -0
- package/tests/fixtures/huawei-maestro-routing/expected/001-happy-cce-container-platform-operator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/002-happy-certificate-manager-issuer-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/003-happy-change-impact-advisor.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/004-happy-codearts-devops-operator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/005-happy-compliance-sovereignty.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/006-happy-cost-anomaly-watch-coordinator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/007-happy-cost-finops-analyst.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/008-happy-daily-operations-briefing-coordinator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/009-happy-dew-kms-lifecycle-steward.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/010-happy-drs-data-replication-operator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/011-happy-dws-dli-data-analyst.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/012-happy-ecs-compute-operator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/013-happy-event-driven-architecture-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/014-happy-functiongraph-serverless-operator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/015-happy-gaussdb-rds-dba.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/016-happy-iac-change-safety-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/017-happy-iam-least-privilege-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/018-happy-ief-edge-computing-operator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/019-happy-landing-zone-architect.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/020-happy-load-balancer-traffic-engineer.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/021-happy-migration-architect.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/022-happy-modelarts-mlops-engineer.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/023-happy-network-architect.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/024-happy-obs-data-perimeter-governor.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/025-happy-obs-storage-steward.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/026-happy-observability-incident-responder.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/027-happy-registry-artifact-governor.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/028-happy-resilience-bcdr-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/029-happy-secmaster-security-operations.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/030-happy-serverless-production-readiness.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/031-happy-solution-architect.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/032-happy-support-incident-coordinator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/033-happy-ticket-triage-escalation-coordinator.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/034-happy-waf-cost-optimization-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/035-happy-waf-reliability-review.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/036-happy-waf-security-review.json +8 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-liveguard-01-live-cce-rollout-guard.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-liveguard-02-live-cost-budget-action-guard.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-liveguard-03-live-gaussdb-mutation-guard.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-liveguard-04-live-iam-policy-change-guard.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-liveguard-05-live-kms-key-destruction-guard.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-liveguard-06-live-obs-bucket-policy-guard.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/001-happy-cce-container-platform-operator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/002-happy-certificate-manager-issuer-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/003-happy-change-impact-advisor.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/004-happy-codearts-devops-operator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/005-happy-compliance-sovereignty.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/006-happy-cost-anomaly-watch-coordinator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/007-happy-cost-finops-analyst.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/008-happy-daily-operations-briefing-coordinator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/009-happy-dew-kms-lifecycle-steward.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/010-happy-drs-data-replication-operator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/011-happy-dws-dli-data-analyst.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/012-happy-ecs-compute-operator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/013-happy-event-driven-architecture-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/014-happy-functiongraph-serverless-operator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/015-happy-gaussdb-rds-dba.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/016-happy-iac-change-safety-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/017-happy-iam-least-privilege-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/018-happy-ief-edge-computing-operator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/019-happy-landing-zone-architect.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/020-happy-load-balancer-traffic-engineer.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/021-happy-migration-architect.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/022-happy-modelarts-mlops-engineer.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/023-happy-network-architect.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/024-happy-obs-data-perimeter-governor.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/025-happy-obs-storage-steward.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/026-happy-observability-incident-responder.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/027-happy-registry-artifact-governor.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/028-happy-resilience-bcdr-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/029-happy-secmaster-security-operations.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/030-happy-serverless-production-readiness.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/031-happy-solution-architect.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/032-happy-support-incident-coordinator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/033-happy-ticket-triage-escalation-coordinator.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/034-happy-waf-cost-optimization-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/035-happy-waf-reliability-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/036-happy-waf-security-review.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-liveguard-01-live-cce-rollout-guard.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-liveguard-02-live-cost-budget-action-guard.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-liveguard-03-live-gaussdb-mutation-guard.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-liveguard-04-live-iam-policy-change-guard.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-liveguard-05-live-kms-key-destruction-guard.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-liveguard-06-live-obs-bucket-policy-guard.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/huawei-maestro-routing/taxonomy.json +472 -0
- package/tests/fixtures/ionos-maestro-routing/expected/001-happy-cost-optimization-analyst.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/002-happy-datacenter-designer-reviewer.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/003-happy-kubernetes-platform-operator.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/004-happy-security-compliance-reviewer.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/ionos-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/adv-liveguard-01-live-database-lifecycle-guard.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/001-happy-cost-optimization-analyst.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/002-happy-datacenter-designer-reviewer.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/003-happy-kubernetes-platform-operator.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/004-happy-security-compliance-reviewer.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/adv-liveguard-01-live-database-lifecycle-guard.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/ionos-maestro-routing/taxonomy.json +48 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/001-happy-external-secrets-operator-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/002-happy-kubecost-chargeback-allocation-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/003-happy-network-architecture-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/004-happy-pod-spec-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/005-happy-psa-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/006-happy-rbac-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/007-happy-workload-identity-review.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-01-live-admission-policy-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-02-live-argocd-sync-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-03-live-mesh-policy-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-04-live-network-architecture-mutation-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-05-live-network-policy-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-06-live-rbac-mutation-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-liveguard-07-live-velero-restore-guard.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/001-happy-external-secrets-operator-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/002-happy-kubecost-chargeback-allocation-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/003-happy-network-architecture-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/004-happy-pod-spec-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/005-happy-psa-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/006-happy-rbac-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/007-happy-workload-identity-review.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-01-live-admission-policy-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-02-live-argocd-sync-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-03-live-mesh-policy-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-04-live-network-architecture-mutation-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-05-live-network-policy-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-06-live-rbac-mutation-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-liveguard-07-live-velero-restore-guard.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/kubernetes-maestro-routing/taxonomy.json +98 -0
- package/tests/fixtures/nvidia-maestro-routing/README.md +24 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/01-cuda-coalescing.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/02-dcgm-coverage.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/03-ngc-cosign-policy.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/04-triton-batching.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/05-trt-int8-calibration.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/06-gpu-operator-securitycontext.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/07-spectrumx-nccl.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/08-dgx-bmc.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/09-nemo-agent-toolkit.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/10-nemo-genai.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/11-multi-domain-dgx-bringup.json +8 -0
- package/tests/fixtures/nvidia-maestro-routing/expected/12-promote-nim-to-prod.json +6 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/01-cuda-coalescing.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/02-dcgm-coverage.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/03-ngc-cosign-policy.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/04-triton-batching.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/05-trt-int8-calibration.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/06-gpu-operator-securitycontext.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/07-spectrumx-nccl.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/08-dgx-bmc.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/09-nemo-agent-toolkit.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/10-nemo-genai.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/11-multi-domain-dgx-bringup.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/inputs/12-promote-nim-to-prod.json +4 -0
- package/tests/fixtures/nvidia-maestro-routing/taxonomy.json +49 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/README.md +34 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/01-clean.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/02-unsigned.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/03-digest-drift.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/04-missing-sbom.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/05-missing-model-card.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/06-cve-regression.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/07-expired-cert.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/08-wrong-issuer.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/09-unknown-registry.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/10-replay-stale-attestation.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/expected/11-label-only-model-card.json +7 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/01-clean.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/02-unsigned.json +42 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/03-digest-drift.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/04-missing-sbom.json +44 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/05-missing-model-card.json +44 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/06-cve-regression.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/07-expired-cert.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/08-wrong-issuer.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/09-unknown-registry.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/10-replay-stale-attestation.json +45 -0
- package/tests/fixtures/nvidia-model-promotion-gatekeeper/inputs/11-label-only-model-card.json +45 -0
- package/tests/fixtures/oci-maestro-routing/expected/001-happy-autonomous-database-architect.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/002-happy-certificates-issuer-review.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/003-happy-compute-instance-agent-operator.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/004-happy-compute-platform-operator.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/005-happy-cost-finops-analyst.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/006-happy-database-platform-dba.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/007-happy-dbtools-sql-analyst.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/008-happy-devops-container-platform-engineer.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/009-happy-exadata-platform-architect.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/010-happy-fusion-apps-environment-operator.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/011-happy-goldengate-replication-operator.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/012-happy-identity-access-governor.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/013-happy-iot-digital-twin-engineer.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/014-happy-limits-capacity-planner.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/015-happy-load-balancer-traffic-engineer.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/016-happy-migration-cutover-architect.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/017-happy-multi-cloud-architect.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/018-happy-mysql-heatwave-ai-specialist.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/019-happy-network-architect.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/020-happy-observability-incident-responder.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/021-happy-recovery-service-operator.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/022-happy-registry-artifact-governor.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/023-happy-resource-search-inventory-analyst.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/024-happy-security-compliance-reviewer.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/025-happy-solution-architect.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/026-happy-storage-backup-steward.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/027-happy-support-incident-coordinator.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/028-happy-waf-cost-optimization-review.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/029-happy-waf-reliability-review.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/030-happy-waf-security-review.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-01-cloud-guard-responder.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-02-live-autonomous-db-lifecycle-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-03-live-cost-budget-runaway-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-04-live-iam-policy-compartment-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-05-live-network-security-rule-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-06-live-oke-rollout-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-07-live-resource-manager-stack-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-liveguard-08-live-vault-key-destruction-guard.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/oci-maestro-routing/expected/adv-secrets-bait.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/001-happy-autonomous-database-architect.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/002-happy-certificates-issuer-review.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/003-happy-compute-instance-agent-operator.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/004-happy-compute-platform-operator.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/005-happy-cost-finops-analyst.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/006-happy-database-platform-dba.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/007-happy-dbtools-sql-analyst.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/008-happy-devops-container-platform-engineer.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/009-happy-exadata-platform-architect.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/010-happy-fusion-apps-environment-operator.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/011-happy-goldengate-replication-operator.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/012-happy-identity-access-governor.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/013-happy-iot-digital-twin-engineer.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/014-happy-limits-capacity-planner.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/015-happy-load-balancer-traffic-engineer.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/016-happy-migration-cutover-architect.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/017-happy-multi-cloud-architect.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/018-happy-mysql-heatwave-ai-specialist.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/019-happy-network-architect.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/020-happy-observability-incident-responder.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/021-happy-recovery-service-operator.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/022-happy-registry-artifact-governor.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/023-happy-resource-search-inventory-analyst.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/024-happy-security-compliance-reviewer.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/025-happy-solution-architect.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/026-happy-storage-backup-steward.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/027-happy-support-incident-coordinator.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/028-happy-waf-cost-optimization-review.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/029-happy-waf-reliability-review.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/030-happy-waf-security-review.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-01-cloud-guard-responder.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-02-live-autonomous-db-lifecycle-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-03-live-cost-budget-runaway-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-04-live-iam-policy-compartment-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-05-live-network-security-rule-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-06-live-oke-rollout-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-07-live-resource-manager-stack-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-liveguard-08-live-vault-key-destruction-guard.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/oci-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/oci-maestro-routing/taxonomy.json +381 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/001-happy-cost-finops-analyst.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/002-happy-iam-policy-review.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/003-happy-kubernetes-platform-operator.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/004-happy-network-architect.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/adv-liveguard-01-live-kms-key-destruction-guard.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/001-happy-cost-finops-analyst.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/002-happy-iam-policy-review.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/003-happy-kubernetes-platform-operator.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/004-happy-network-architect.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/adv-liveguard-01-live-kms-key-destruction-guard.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/ovhcloud-maestro-routing/taxonomy.json +46 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/001-happy-cost-optimizer.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/002-happy-iam-policy-review.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/003-happy-kapsule-platform-operator.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/004-happy-network-architect.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/adv-liveguard-01-live-kapsule-rollout-guard.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/001-happy-cost-optimizer.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/002-happy-iam-policy-review.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/003-happy-kapsule-platform-operator.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/004-happy-network-architect.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/adv-liveguard-01-live-kapsule-rollout-guard.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/scaleway-maestro-routing/taxonomy.json +54 -0
- package/tests/fixtures/terraform-maestro-routing/expected/001-happy-reviewer.json +6 -0
- package/tests/fixtures/terraform-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/terraform-maestro-routing/expected/adv-instruction-injection.json +6 -0
- package/tests/fixtures/terraform-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/terraform-maestro-routing/expected/adv-secrets-bait.json +6 -0
- package/tests/fixtures/terraform-maestro-routing/inputs/001-happy-reviewer.json +7 -0
- package/tests/fixtures/terraform-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/terraform-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/terraform-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/terraform-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/terraform-maestro-routing/taxonomy.json +107 -0
- package/tests/fuzz-properties.test.mjs +211 -0
- package/tests/integration/rbac-pre-flight/README.md +160 -0
- package/tests/integration/rbac-pre-flight/ci/kind-rbac-preflight.yaml +49 -0
- package/tests/integration/rbac-pre-flight/guards/admission-policy.sh +53 -0
- package/tests/integration/rbac-pre-flight/guards/argocd-sync.sh +50 -0
- package/tests/integration/rbac-pre-flight/guards/mesh-policy.sh +48 -0
- package/tests/integration/rbac-pre-flight/guards/network-arch.sh +119 -0
- package/tests/integration/rbac-pre-flight/guards/network-policy.sh +49 -0
- package/tests/integration/rbac-pre-flight/guards/rbac-mutation.sh +56 -0
- package/tests/integration/rbac-pre-flight/guards/velero-restore.sh +52 -0
- package/tests/integration/rbac-pre-flight/lib/common.sh +252 -0
- package/tests/integration/rbac-pre-flight/run-all.sh +229 -0
- package/tests/test-copilot-skill-bundling.py +129 -0
- package/tests/test-gemini-skill-bundling.py +102 -0
- package/tests/test-marketplace-validators.py +685 -0
- package/tests/test-vfa-export-coverage.test.mjs +717 -0
- package/tests/validate-agent-frontmatter-schema.py +256 -0
- package/tests/validate-asset-integrity.py +234 -0
- package/tests/validate-aws-progressive-disclosure.py +72 -0
- package/tests/validate-aws-skill-quality.py +171 -0
- package/tests/validate-azure-oci-live-guards.sh +157 -0
- package/tests/validate-catalog.py +361 -0
- package/tests/validate-codex-marketplace.py +152 -0
- package/tests/validate-finops-price-fixtures.py +200 -0
- package/tests/validate-kiro-powers.py +243 -0
- package/tests/validate-links.py +94 -0
- package/tests/validate-maestro-routing.py +220 -0
- package/tests/validate-mcp-trust-matrix.py +91 -0
- package/tests/validate-multi-harness-marketplace.py +188 -0
- package/tests/validate-no-lifecycle-scripts.py +86 -0
- package/tests/validate-nvidia-promotion-gatekeeper.py +299 -0
- package/tests/validate-plugin-manifest.py +147 -0
- package/tests/validate-skill-allowed-tools.py +138 -0
- package/tests/validate-skill-frontmatter-schema.py +286 -0
- package/tests/validate-skill-manifest.py +116 -0
|
@@ -0,0 +1,685 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Fixture-based unit tests for the four marketplace validators.
|
|
3
|
+
|
|
4
|
+
Tests the FAILURE paths for:
|
|
5
|
+
- validate-kiro-powers.py (Kiro strict-5 frontmatter rules)
|
|
6
|
+
- validate-plugin-manifest.py (Claude Code plugin manifest)
|
|
7
|
+
- validate-multi-harness-marketplace.py (Cursor + Copilot CLI)
|
|
8
|
+
- validate-codex-marketplace.py (OpenAI Codex marketplace)
|
|
9
|
+
|
|
10
|
+
Each test:
|
|
11
|
+
1. Builds a minimal in-memory fixture that VIOLATES one rule.
|
|
12
|
+
2. Invokes the relevant validator logic directly (not via subprocess).
|
|
13
|
+
3. Asserts the validator detects the violation (non-zero exit / error list).
|
|
14
|
+
|
|
15
|
+
Also includes smoke tests confirming the validators pass on the real repo
|
|
16
|
+
files (the live integration check).
|
|
17
|
+
|
|
18
|
+
Run with:
|
|
19
|
+
python3 tests/test-marketplace-validators.py
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import json
|
|
25
|
+
import sys
|
|
26
|
+
import textwrap
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
# ---------------------------------------------------------------------------
|
|
30
|
+
# Minimal inline reimplementations of the sub-logic we're testing.
|
|
31
|
+
# We import the validator modules directly where possible; for those that
|
|
32
|
+
# use REPO-level globals we patch them via temporary directories.
|
|
33
|
+
# ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
REPO = Path(__file__).resolve().parent.parent
|
|
36
|
+
sys.path.insert(0, str(REPO / "tests"))
|
|
37
|
+
|
|
38
|
+
PASS = "\033[32mPASS\033[0m"
|
|
39
|
+
FAIL = "\033[31mFAIL\033[0m"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _pass(name: str) -> None:
|
|
43
|
+
print(f" {PASS} {name}")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _fail(name: str, reason: str) -> None:
|
|
47
|
+
print(f" {FAIL} {name}: {reason}")
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class Results:
|
|
51
|
+
def __init__(self) -> None:
|
|
52
|
+
self.passed = 0
|
|
53
|
+
self.failed = 0
|
|
54
|
+
|
|
55
|
+
def ok(self, name: str) -> None:
|
|
56
|
+
self.passed += 1
|
|
57
|
+
_pass(name)
|
|
58
|
+
|
|
59
|
+
def bad(self, name: str, reason: str) -> None:
|
|
60
|
+
self.failed += 1
|
|
61
|
+
_fail(name, reason)
|
|
62
|
+
|
|
63
|
+
def expect_true(self, name: str, condition: bool, reason: str = "") -> None:
|
|
64
|
+
if condition:
|
|
65
|
+
self.ok(name)
|
|
66
|
+
else:
|
|
67
|
+
self.bad(name, reason or "condition was False")
|
|
68
|
+
|
|
69
|
+
def expect_false(self, name: str, condition: bool, reason: str = "") -> None:
|
|
70
|
+
if not condition:
|
|
71
|
+
self.ok(name)
|
|
72
|
+
else:
|
|
73
|
+
self.bad(name, reason or "condition was True (expected False)")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# ===========================================================================
|
|
77
|
+
# 1. Kiro Powers validator — negative-path unit tests
|
|
78
|
+
# ===========================================================================
|
|
79
|
+
|
|
80
|
+
import re
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# Inline the sub-functions from validate-kiro-powers.py so we test the
|
|
84
|
+
# same logic without forking a subprocess.
|
|
85
|
+
|
|
86
|
+
ALLOWED_FIELDS = {"name", "displayName", "description", "keywords", "author"}
|
|
87
|
+
NAME_RE = re.compile(r"^[a-z][a-z0-9-]*$")
|
|
88
|
+
BROAD_KEYWORDS = {
|
|
89
|
+
"cloud", "code", "devops", "infrastructure", "infra", "agent", "agents",
|
|
90
|
+
"ai", "ml", "ops", "automation", "tool", "tools", "general",
|
|
91
|
+
}
|
|
92
|
+
_DECIMAL_RE = re.compile(r"\d\.\d")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _count_sentences(text: str) -> int:
|
|
96
|
+
masked = _DECIMAL_RE.sub("N_N", text)
|
|
97
|
+
return len(re.findall(r"[.!?](?:\s|$)", masked))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _unquote(value: str) -> str:
|
|
101
|
+
value = value.strip()
|
|
102
|
+
if len(value) >= 2 and value[0] == value[-1] and value[0] in ("'", '"'):
|
|
103
|
+
return value[1:-1]
|
|
104
|
+
return value
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _parse_flow_list(value: str) -> list[str] | None:
|
|
108
|
+
value = value.strip()
|
|
109
|
+
if not (value.startswith("[") and value.endswith("]")):
|
|
110
|
+
return None
|
|
111
|
+
inner = value[1:-1].strip()
|
|
112
|
+
if not inner:
|
|
113
|
+
return []
|
|
114
|
+
return [_unquote(item.strip()) for item in inner.split(",") if item.strip()]
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _parse_frontmatter(text: str) -> tuple[dict | None, str]:
|
|
118
|
+
"""Hand-rolled parser matching validate-kiro-powers.py — no PyYAML dep."""
|
|
119
|
+
if not text.startswith("---\n"):
|
|
120
|
+
return None, "must start with ---"
|
|
121
|
+
end = text.find("\n---\n", 4)
|
|
122
|
+
if end == -1:
|
|
123
|
+
return None, "frontmatter not terminated"
|
|
124
|
+
block = text[4:end]
|
|
125
|
+
data: dict = {}
|
|
126
|
+
lines = block.split("\n")
|
|
127
|
+
i = 0
|
|
128
|
+
while i < len(lines):
|
|
129
|
+
line = lines[i]
|
|
130
|
+
if not line.strip() or line.lstrip().startswith("#"):
|
|
131
|
+
i += 1
|
|
132
|
+
continue
|
|
133
|
+
if ":" not in line:
|
|
134
|
+
return None, f"malformed line: {line!r}"
|
|
135
|
+
key, _, rest = line.partition(":")
|
|
136
|
+
key = key.strip()
|
|
137
|
+
rest = rest.strip()
|
|
138
|
+
if rest == "":
|
|
139
|
+
items: list[str] = []
|
|
140
|
+
i += 1
|
|
141
|
+
while i < len(lines) and lines[i].lstrip().startswith("- "):
|
|
142
|
+
items.append(_unquote(lines[i].lstrip()[2:].strip()))
|
|
143
|
+
i += 1
|
|
144
|
+
data[key] = items
|
|
145
|
+
continue
|
|
146
|
+
flow = _parse_flow_list(rest)
|
|
147
|
+
if flow is not None:
|
|
148
|
+
data[key] = flow
|
|
149
|
+
else:
|
|
150
|
+
data[key] = _unquote(rest)
|
|
151
|
+
i += 1
|
|
152
|
+
if not data:
|
|
153
|
+
return None, "frontmatter must be a mapping"
|
|
154
|
+
return data, ""
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _validate_power(text: str) -> list[str]:
|
|
158
|
+
"""Return list of error strings for a POWER.md body."""
|
|
159
|
+
errors: list[str] = []
|
|
160
|
+
fm, err = _parse_frontmatter(text)
|
|
161
|
+
if fm is None:
|
|
162
|
+
return [err]
|
|
163
|
+
extra = set(fm.keys()) - ALLOWED_FIELDS
|
|
164
|
+
if extra:
|
|
165
|
+
errors.append(f"extra fields not allowed: {sorted(extra)}")
|
|
166
|
+
missing = ALLOWED_FIELDS - set(fm.keys())
|
|
167
|
+
if missing:
|
|
168
|
+
errors.append(f"missing required fields: {sorted(missing)}")
|
|
169
|
+
name = fm.get("name", "")
|
|
170
|
+
if not NAME_RE.match(name):
|
|
171
|
+
errors.append(f"name {name!r} must be lowercase kebab-case")
|
|
172
|
+
desc = fm.get("description", "")
|
|
173
|
+
sc = _count_sentences(str(desc))
|
|
174
|
+
if sc > 3:
|
|
175
|
+
errors.append(f"description has {sc} sentences; max is 3")
|
|
176
|
+
kws = fm.get("keywords") or []
|
|
177
|
+
broad = [k for k in kws if k in BROAD_KEYWORDS]
|
|
178
|
+
if broad:
|
|
179
|
+
errors.append(f"keywords contain broad terms: {broad}")
|
|
180
|
+
if not kws:
|
|
181
|
+
errors.append("keywords must be a non-empty list")
|
|
182
|
+
return errors
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def run_kiro_powers_tests(r: Results) -> None:
|
|
186
|
+
print("\n--- Kiro Powers validator ---")
|
|
187
|
+
|
|
188
|
+
# 1a. Extra frontmatter field
|
|
189
|
+
text = textwrap.dedent("""\
|
|
190
|
+
---
|
|
191
|
+
name: vanguard-test
|
|
192
|
+
displayName: Test Power
|
|
193
|
+
description: Routes test tasks correctly.
|
|
194
|
+
keywords: [kubernetes, rbac]
|
|
195
|
+
author: Raishin
|
|
196
|
+
version: 1.0.0
|
|
197
|
+
---
|
|
198
|
+
body
|
|
199
|
+
""")
|
|
200
|
+
errs = _validate_power(text)
|
|
201
|
+
r.expect_true(
|
|
202
|
+
"rejects extra frontmatter field (version)",
|
|
203
|
+
any("extra fields" in e for e in errs),
|
|
204
|
+
f"got errors: {errs}",
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
# 1b. Missing required field
|
|
208
|
+
text = textwrap.dedent("""\
|
|
209
|
+
---
|
|
210
|
+
name: vanguard-test
|
|
211
|
+
displayName: Test Power
|
|
212
|
+
description: Routes test tasks correctly.
|
|
213
|
+
keywords: [kubernetes, rbac]
|
|
214
|
+
---
|
|
215
|
+
body
|
|
216
|
+
""")
|
|
217
|
+
errs = _validate_power(text)
|
|
218
|
+
r.expect_true(
|
|
219
|
+
"rejects missing 'author' field",
|
|
220
|
+
any("missing" in e for e in errs),
|
|
221
|
+
f"got errors: {errs}",
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
# 1c. Name not kebab-case
|
|
225
|
+
text = textwrap.dedent("""\
|
|
226
|
+
---
|
|
227
|
+
name: VanguardTest
|
|
228
|
+
displayName: Test Power
|
|
229
|
+
description: Routes test tasks correctly.
|
|
230
|
+
keywords: [kubernetes, rbac]
|
|
231
|
+
author: Raishin
|
|
232
|
+
---
|
|
233
|
+
body
|
|
234
|
+
""")
|
|
235
|
+
errs = _validate_power(text)
|
|
236
|
+
r.expect_true(
|
|
237
|
+
"rejects PascalCase name",
|
|
238
|
+
any("kebab" in e for e in errs),
|
|
239
|
+
f"got errors: {errs}",
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
# 1d. Description exceeds 3 sentences
|
|
243
|
+
text = textwrap.dedent("""\
|
|
244
|
+
---
|
|
245
|
+
name: vanguard-test
|
|
246
|
+
displayName: Test Power
|
|
247
|
+
description: "First sentence. Second sentence. Third sentence. Fourth sentence."
|
|
248
|
+
keywords: [kubernetes, rbac]
|
|
249
|
+
author: Raishin
|
|
250
|
+
---
|
|
251
|
+
body
|
|
252
|
+
""")
|
|
253
|
+
errs = _validate_power(text)
|
|
254
|
+
r.expect_true(
|
|
255
|
+
"rejects description with 4 sentences",
|
|
256
|
+
any("sentences" in e for e in errs),
|
|
257
|
+
f"got errors: {errs}",
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
# 1e. Decimal in description should NOT count as sentence break
|
|
261
|
+
text = textwrap.dedent("""\
|
|
262
|
+
---
|
|
263
|
+
name: vanguard-test
|
|
264
|
+
displayName: Test Power
|
|
265
|
+
description: "Routes MLPS 2.0 workloads. Enforces CN sovereignty. Delegates to Huawei-native agents."
|
|
266
|
+
keywords: [mlps, sovereignty, huawei]
|
|
267
|
+
author: Raishin
|
|
268
|
+
---
|
|
269
|
+
body
|
|
270
|
+
""")
|
|
271
|
+
errs = _validate_power(text)
|
|
272
|
+
r.expect_false(
|
|
273
|
+
"decimal in description (MLPS 2.0) is not counted as sentence break",
|
|
274
|
+
any("sentences" in e for e in errs),
|
|
275
|
+
f"unexpectedly got sentence error: {errs}",
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
# 1f. Broad keyword rejection
|
|
279
|
+
text = textwrap.dedent("""\
|
|
280
|
+
---
|
|
281
|
+
name: vanguard-test
|
|
282
|
+
displayName: Test Power
|
|
283
|
+
description: Routes test tasks correctly.
|
|
284
|
+
keywords: [cloud, kubernetes]
|
|
285
|
+
author: Raishin
|
|
286
|
+
---
|
|
287
|
+
body
|
|
288
|
+
""")
|
|
289
|
+
errs = _validate_power(text)
|
|
290
|
+
r.expect_true(
|
|
291
|
+
"rejects broad keyword 'cloud'",
|
|
292
|
+
any("broad" in e for e in errs),
|
|
293
|
+
f"got errors: {errs}",
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
# 1g. Empty keywords list
|
|
297
|
+
text = textwrap.dedent("""\
|
|
298
|
+
---
|
|
299
|
+
name: vanguard-test
|
|
300
|
+
displayName: Test Power
|
|
301
|
+
description: Routes test tasks correctly.
|
|
302
|
+
keywords: []
|
|
303
|
+
author: Raishin
|
|
304
|
+
---
|
|
305
|
+
body
|
|
306
|
+
""")
|
|
307
|
+
errs = _validate_power(text)
|
|
308
|
+
r.expect_true(
|
|
309
|
+
"rejects empty keywords list",
|
|
310
|
+
any("keywords" in e and "non-empty" in e for e in errs),
|
|
311
|
+
f"got errors: {errs}",
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
# 1h. Valid Power — no errors
|
|
315
|
+
text = textwrap.dedent("""\
|
|
316
|
+
---
|
|
317
|
+
name: vanguard-aws
|
|
318
|
+
displayName: AWS Power
|
|
319
|
+
description: Routes AWS infrastructure tasks. Enforces least-privilege IAM. Delegates to AWS-native agents.
|
|
320
|
+
keywords: [aws, iam, ec2]
|
|
321
|
+
author: Raishin
|
|
322
|
+
---
|
|
323
|
+
body
|
|
324
|
+
""")
|
|
325
|
+
errs = _validate_power(text)
|
|
326
|
+
r.expect_false(
|
|
327
|
+
"valid Power passes with no errors",
|
|
328
|
+
bool(errs),
|
|
329
|
+
f"unexpected errors: {errs}",
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
# 1i. Live repo — all 14 powers currently pass
|
|
333
|
+
live_errors: list[str] = []
|
|
334
|
+
powers_root = REPO / "powers"
|
|
335
|
+
for power_dir in sorted(powers_root.iterdir()):
|
|
336
|
+
if not power_dir.is_dir():
|
|
337
|
+
continue
|
|
338
|
+
power_md = power_dir / "POWER.md"
|
|
339
|
+
if not power_md.exists():
|
|
340
|
+
live_errors.append(f"{power_dir.name}: POWER.md missing")
|
|
341
|
+
continue
|
|
342
|
+
errs = _validate_power(power_md.read_text())
|
|
343
|
+
for e in errs:
|
|
344
|
+
live_errors.append(f"{power_dir.name}: {e}")
|
|
345
|
+
r.expect_false(
|
|
346
|
+
f"live repo: all {len(list(p for p in powers_root.iterdir() if p.is_dir()))} Powers pass validation",
|
|
347
|
+
bool(live_errors),
|
|
348
|
+
f"live errors: {live_errors[:3]}",
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
# ===========================================================================
|
|
353
|
+
# 2. Claude Code plugin manifest — negative-path unit tests
|
|
354
|
+
# ===========================================================================
|
|
355
|
+
|
|
356
|
+
def _validate_claude_marketplace(marketplace: dict) -> list[str]:
|
|
357
|
+
errors: list[str] = []
|
|
358
|
+
if marketplace.get("name") != "vanguard-frontier-agentic":
|
|
359
|
+
errors.append("marketplace.name must be 'vanguard-frontier-agentic'")
|
|
360
|
+
plugins = marketplace.get("plugins") or []
|
|
361
|
+
if not any(p.get("name") == "vanguard-frontier-agentic" for p in plugins):
|
|
362
|
+
errors.append("plugins must declare 'vanguard-frontier-agentic'")
|
|
363
|
+
for p in plugins:
|
|
364
|
+
if p.get("name") == "vanguard-frontier-agentic" and p.get("source") != "./":
|
|
365
|
+
errors.append("plugin source must be './'")
|
|
366
|
+
return errors
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def _validate_plugin_json(plugin: dict, expected_version: str, catalog_ids: list[str]) -> list[str]:
|
|
370
|
+
errors: list[str] = []
|
|
371
|
+
if plugin.get("version") != expected_version:
|
|
372
|
+
errors.append(f"plugin.json version {plugin.get('version')!r} != {expected_version!r}")
|
|
373
|
+
agents = plugin.get("agents") or []
|
|
374
|
+
if len(agents) == 0:
|
|
375
|
+
errors.append("agents[] must not be empty")
|
|
376
|
+
return errors
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
def run_claude_code_tests(r: Results) -> None:
|
|
380
|
+
print("\n--- Claude Code plugin manifest validator ---")
|
|
381
|
+
|
|
382
|
+
# 2a. Wrong marketplace name
|
|
383
|
+
m = {"name": "wrong-name", "plugins": [{"name": "vanguard-frontier-agentic", "source": "./"}]}
|
|
384
|
+
errs = _validate_claude_marketplace(m)
|
|
385
|
+
r.expect_true(
|
|
386
|
+
"rejects wrong marketplace name",
|
|
387
|
+
any("marketplace.name" in e for e in errs),
|
|
388
|
+
f"got: {errs}",
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
# 2b. Plugin not declared
|
|
392
|
+
m = {"name": "vanguard-frontier-agentic", "plugins": []}
|
|
393
|
+
errs = _validate_claude_marketplace(m)
|
|
394
|
+
r.expect_true(
|
|
395
|
+
"rejects marketplace with no plugins",
|
|
396
|
+
any("declare" in e for e in errs),
|
|
397
|
+
f"got: {errs}",
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
# 2c. Wrong plugin source
|
|
401
|
+
m = {
|
|
402
|
+
"name": "vanguard-frontier-agentic",
|
|
403
|
+
"plugins": [{"name": "vanguard-frontier-agentic", "source": "https://github.com/..."}],
|
|
404
|
+
}
|
|
405
|
+
errs = _validate_claude_marketplace(m)
|
|
406
|
+
r.expect_true(
|
|
407
|
+
"rejects non-'./' plugin source",
|
|
408
|
+
any("source" in e for e in errs),
|
|
409
|
+
f"got: {errs}",
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
# 2d. Version mismatch in plugin.json
|
|
413
|
+
errs = _validate_plugin_json(
|
|
414
|
+
{"version": "0.0.1", "agents": ["agents/aws/test/harnesses/claude-code.agent.md"]},
|
|
415
|
+
expected_version="1.7.1",
|
|
416
|
+
catalog_ids=[],
|
|
417
|
+
)
|
|
418
|
+
r.expect_true(
|
|
419
|
+
"rejects plugin.json version mismatch",
|
|
420
|
+
any("version" in e for e in errs),
|
|
421
|
+
f"got: {errs}",
|
|
422
|
+
)
|
|
423
|
+
|
|
424
|
+
# 2e. Empty agents array
|
|
425
|
+
errs = _validate_plugin_json(
|
|
426
|
+
{"version": "1.7.1", "agents": []},
|
|
427
|
+
expected_version="1.7.1",
|
|
428
|
+
catalog_ids=[],
|
|
429
|
+
)
|
|
430
|
+
r.expect_true(
|
|
431
|
+
"rejects empty agents[] array",
|
|
432
|
+
any("empty" in e for e in errs),
|
|
433
|
+
f"got: {errs}",
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
# 2f. Live marketplace.json is well-formed
|
|
437
|
+
live_marketplace = json.loads((REPO / ".claude-plugin" / "marketplace.json").read_text())
|
|
438
|
+
errs = _validate_claude_marketplace(live_marketplace)
|
|
439
|
+
r.expect_false(
|
|
440
|
+
"live .claude-plugin/marketplace.json is valid",
|
|
441
|
+
bool(errs),
|
|
442
|
+
f"live errors: {errs}",
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
# ===========================================================================
|
|
447
|
+
# 3. Cursor + Copilot CLI — negative-path unit tests
|
|
448
|
+
# ===========================================================================
|
|
449
|
+
|
|
450
|
+
def _validate_cursor_manifest(manifest: dict, pkg_version: str) -> list[str]:
|
|
451
|
+
errors: list[str] = []
|
|
452
|
+
if manifest.get("name") != "vanguard-frontier-agentic":
|
|
453
|
+
errors.append("cursor plugin name must be 'vanguard-frontier-agentic'")
|
|
454
|
+
if manifest.get("version") != pkg_version:
|
|
455
|
+
errors.append(
|
|
456
|
+
f"cursor plugin version {manifest.get('version')!r} != package.json {pkg_version!r}"
|
|
457
|
+
)
|
|
458
|
+
agents = manifest.get("agents") or []
|
|
459
|
+
if not agents:
|
|
460
|
+
errors.append("cursor plugin agents[] must not be empty")
|
|
461
|
+
return errors
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def _validate_copilot_marketplace(marketplace: dict) -> list[str]:
|
|
465
|
+
errors: list[str] = []
|
|
466
|
+
plugins = marketplace.get("plugins") or []
|
|
467
|
+
if not plugins:
|
|
468
|
+
errors.append("copilot marketplace must declare at least one plugin")
|
|
469
|
+
for p in plugins:
|
|
470
|
+
if p.get("id") == "vanguard-frontier-agentic" and p.get("source") != "./":
|
|
471
|
+
errors.append("copilot plugin source must be './'")
|
|
472
|
+
if not any(p.get("id") == "vanguard-frontier-agentic" for p in plugins):
|
|
473
|
+
errors.append("copilot marketplace must declare 'vanguard-frontier-agentic'")
|
|
474
|
+
return errors
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
def run_multi_harness_tests(r: Results) -> None:
|
|
478
|
+
print("\n--- Cursor + Copilot CLI marketplace validator ---")
|
|
479
|
+
|
|
480
|
+
# 3a. Cursor wrong name
|
|
481
|
+
errs = _validate_cursor_manifest(
|
|
482
|
+
{"name": "wrong", "version": "1.7.1", "agents": ["x"]}, "1.7.1"
|
|
483
|
+
)
|
|
484
|
+
r.expect_true(
|
|
485
|
+
"cursor: rejects wrong plugin name",
|
|
486
|
+
any("name" in e for e in errs),
|
|
487
|
+
f"got: {errs}",
|
|
488
|
+
)
|
|
489
|
+
|
|
490
|
+
# 3b. Cursor version mismatch
|
|
491
|
+
errs = _validate_cursor_manifest(
|
|
492
|
+
{"name": "vanguard-frontier-agentic", "version": "0.0.1", "agents": ["x"]}, "1.7.1"
|
|
493
|
+
)
|
|
494
|
+
r.expect_true(
|
|
495
|
+
"cursor: rejects version mismatch",
|
|
496
|
+
any("version" in e for e in errs),
|
|
497
|
+
f"got: {errs}",
|
|
498
|
+
)
|
|
499
|
+
|
|
500
|
+
# 3c. Cursor empty agents array
|
|
501
|
+
errs = _validate_cursor_manifest(
|
|
502
|
+
{"name": "vanguard-frontier-agentic", "version": "1.7.1", "agents": []}, "1.7.1"
|
|
503
|
+
)
|
|
504
|
+
r.expect_true(
|
|
505
|
+
"cursor: rejects empty agents[]",
|
|
506
|
+
any("empty" in e for e in errs),
|
|
507
|
+
f"got: {errs}",
|
|
508
|
+
)
|
|
509
|
+
|
|
510
|
+
# 3d. Copilot no plugins declared
|
|
511
|
+
errs = _validate_copilot_marketplace({"plugins": []})
|
|
512
|
+
r.expect_true(
|
|
513
|
+
"copilot: rejects empty plugins[]",
|
|
514
|
+
any("declare" in e or "least one" in e for e in errs),
|
|
515
|
+
f"got: {errs}",
|
|
516
|
+
)
|
|
517
|
+
|
|
518
|
+
# 3e. Copilot wrong source
|
|
519
|
+
errs = _validate_copilot_marketplace(
|
|
520
|
+
{"plugins": [{"id": "vanguard-frontier-agentic", "source": "https://github.com/..."}]}
|
|
521
|
+
)
|
|
522
|
+
r.expect_true(
|
|
523
|
+
"copilot: rejects non-'./' source",
|
|
524
|
+
any("source" in e for e in errs),
|
|
525
|
+
f"got: {errs}",
|
|
526
|
+
)
|
|
527
|
+
|
|
528
|
+
# 3f. Live cursor manifest passes
|
|
529
|
+
cursor_manifest = json.loads((REPO / ".cursor-plugin" / "plugin.json").read_text())
|
|
530
|
+
pkg_version = json.loads((REPO / "package.json").read_text()).get("version")
|
|
531
|
+
errs = _validate_cursor_manifest(cursor_manifest, pkg_version)
|
|
532
|
+
r.expect_false(
|
|
533
|
+
f"live .cursor-plugin/plugin.json is valid ({len(cursor_manifest.get('agents', []))} agents)",
|
|
534
|
+
bool(errs),
|
|
535
|
+
f"live errors: {errs}",
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
# 3g. Live copilot marketplace passes
|
|
539
|
+
copilot = json.loads((REPO / ".github" / "plugin" / "marketplace.json").read_text())
|
|
540
|
+
errs = _validate_copilot_marketplace(copilot)
|
|
541
|
+
r.expect_false(
|
|
542
|
+
"live .github/plugin/marketplace.json is valid",
|
|
543
|
+
bool(errs),
|
|
544
|
+
f"live errors: {errs}",
|
|
545
|
+
)
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
# ===========================================================================
|
|
549
|
+
# 4. Codex marketplace — negative-path unit tests
|
|
550
|
+
# ===========================================================================
|
|
551
|
+
|
|
552
|
+
KEBAB_RE = re.compile(r"^[a-z][a-z0-9-]*$")
|
|
553
|
+
ALLOWED_INSTALL = {"NOT_AVAILABLE", "AVAILABLE", "INSTALLED_BY_DEFAULT", "DISABLED", "HIDDEN"}
|
|
554
|
+
ALLOWED_AUTH = {"ON_INSTALL", "ON_USE", "OPTIONAL", "NONE"}
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
def _validate_codex_marketplace_entry(
|
|
558
|
+
idx: int,
|
|
559
|
+
plugin: dict,
|
|
560
|
+
pkg_version: str,
|
|
561
|
+
) -> list[str]:
|
|
562
|
+
errors: list[str] = []
|
|
563
|
+
prefix = f"plugins[{idx}]"
|
|
564
|
+
name = plugin.get("name")
|
|
565
|
+
if not name or not isinstance(name, str):
|
|
566
|
+
errors.append(f"{prefix}: missing name")
|
|
567
|
+
return errors
|
|
568
|
+
if not KEBAB_RE.match(name):
|
|
569
|
+
errors.append(f"{prefix}: name {name!r} must be lowercase kebab-case")
|
|
570
|
+
source = plugin.get("source") or {}
|
|
571
|
+
if source.get("source") != "local":
|
|
572
|
+
errors.append(f"{prefix}: source.source must be 'local'")
|
|
573
|
+
policy = plugin.get("policy") or {}
|
|
574
|
+
install = policy.get("installation")
|
|
575
|
+
auth = policy.get("authentication")
|
|
576
|
+
if install not in ALLOWED_INSTALL:
|
|
577
|
+
errors.append(f"{prefix}: policy.installation {install!r} invalid")
|
|
578
|
+
if auth not in ALLOWED_AUTH:
|
|
579
|
+
errors.append(f"{prefix}: policy.authentication {auth!r} invalid")
|
|
580
|
+
if not plugin.get("category"):
|
|
581
|
+
errors.append(f"{prefix}: category is required")
|
|
582
|
+
return errors
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
def run_codex_marketplace_tests(r: Results) -> None:
|
|
586
|
+
print("\n--- Codex marketplace validator ---")
|
|
587
|
+
|
|
588
|
+
base_plugin = {
|
|
589
|
+
"name": "vanguard-frontier-agentic",
|
|
590
|
+
"source": {"source": "local", "path": "plugins/vanguard-frontier-agentic"},
|
|
591
|
+
"policy": {"installation": "AVAILABLE", "authentication": "NONE"},
|
|
592
|
+
"category": "agentic-workflows",
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
# 4a. Non-kebab name
|
|
596
|
+
p = {**base_plugin, "name": "VanguardFrontier"}
|
|
597
|
+
errs = _validate_codex_marketplace_entry(0, p, "1.7.1")
|
|
598
|
+
r.expect_true(
|
|
599
|
+
"codex: rejects PascalCase plugin name",
|
|
600
|
+
any("kebab" in e for e in errs),
|
|
601
|
+
f"got: {errs}",
|
|
602
|
+
)
|
|
603
|
+
|
|
604
|
+
# 4b. Wrong source type
|
|
605
|
+
p = {**base_plugin, "source": {"source": "github", "path": "plugins/x"}}
|
|
606
|
+
errs = _validate_codex_marketplace_entry(0, p, "1.7.1")
|
|
607
|
+
r.expect_true(
|
|
608
|
+
"codex: rejects source.source != 'local'",
|
|
609
|
+
any("source" in e for e in errs),
|
|
610
|
+
f"got: {errs}",
|
|
611
|
+
)
|
|
612
|
+
|
|
613
|
+
# 4c. Invalid policy.installation value
|
|
614
|
+
p = {**base_plugin, "policy": {"installation": "UNKNOWN", "authentication": "NONE"}}
|
|
615
|
+
errs = _validate_codex_marketplace_entry(0, p, "1.7.1")
|
|
616
|
+
r.expect_true(
|
|
617
|
+
"codex: rejects invalid policy.installation",
|
|
618
|
+
any("installation" in e for e in errs),
|
|
619
|
+
f"got: {errs}",
|
|
620
|
+
)
|
|
621
|
+
|
|
622
|
+
# 4d. Invalid policy.authentication value
|
|
623
|
+
p = {**base_plugin, "policy": {"installation": "AVAILABLE", "authentication": "YES"}}
|
|
624
|
+
errs = _validate_codex_marketplace_entry(0, p, "1.7.1")
|
|
625
|
+
r.expect_true(
|
|
626
|
+
"codex: rejects invalid policy.authentication",
|
|
627
|
+
any("authentication" in e for e in errs),
|
|
628
|
+
f"got: {errs}",
|
|
629
|
+
)
|
|
630
|
+
|
|
631
|
+
# 4e. Missing category
|
|
632
|
+
p = {k: v for k, v in base_plugin.items() if k != "category"}
|
|
633
|
+
errs = _validate_codex_marketplace_entry(0, p, "1.7.1")
|
|
634
|
+
r.expect_true(
|
|
635
|
+
"codex: rejects missing category",
|
|
636
|
+
any("category" in e for e in errs),
|
|
637
|
+
f"got: {errs}",
|
|
638
|
+
)
|
|
639
|
+
|
|
640
|
+
# 4f. Valid entry — no errors
|
|
641
|
+
errs = _validate_codex_marketplace_entry(0, base_plugin, "1.7.1")
|
|
642
|
+
r.expect_false(
|
|
643
|
+
"codex: valid entry passes with no errors",
|
|
644
|
+
bool(errs),
|
|
645
|
+
f"unexpected errors: {errs}",
|
|
646
|
+
)
|
|
647
|
+
|
|
648
|
+
# 4g. Live marketplace passes
|
|
649
|
+
marketplace = json.loads((REPO / ".agents" / "plugins" / "marketplace.json").read_text())
|
|
650
|
+
pkg_version = json.loads((REPO / "package.json").read_text()).get("version")
|
|
651
|
+
live_errors: list[str] = []
|
|
652
|
+
for idx, plugin in enumerate(marketplace.get("plugins", [])):
|
|
653
|
+
live_errors.extend(_validate_codex_marketplace_entry(idx, plugin, pkg_version))
|
|
654
|
+
r.expect_false(
|
|
655
|
+
f"live .agents/plugins/marketplace.json is valid ({len(marketplace.get('plugins', []))} plugins)",
|
|
656
|
+
bool(live_errors),
|
|
657
|
+
f"live errors: {live_errors}",
|
|
658
|
+
)
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
# ===========================================================================
|
|
662
|
+
# Entry point
|
|
663
|
+
# ===========================================================================
|
|
664
|
+
|
|
665
|
+
def main() -> int:
|
|
666
|
+
r = Results()
|
|
667
|
+
|
|
668
|
+
run_kiro_powers_tests(r)
|
|
669
|
+
run_claude_code_tests(r)
|
|
670
|
+
run_multi_harness_tests(r)
|
|
671
|
+
run_codex_marketplace_tests(r)
|
|
672
|
+
|
|
673
|
+
total = r.passed + r.failed
|
|
674
|
+
print(f"\n{'=' * 60}")
|
|
675
|
+
print(f"Results: {r.passed}/{total} passed", end="")
|
|
676
|
+
if r.failed:
|
|
677
|
+
print(f" ({r.failed} FAILED)", file=sys.stderr)
|
|
678
|
+
print()
|
|
679
|
+
return 1
|
|
680
|
+
print()
|
|
681
|
+
return 0
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
if __name__ == "__main__":
|
|
685
|
+
sys.exit(main())
|