@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,286 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validate SKILL.md frontmatter against schemas/skill.frontmatter.schema.json.
|
|
3
|
+
|
|
4
|
+
Uses jsonschema for validation (consistent with existing jsonschema usage
|
|
5
|
+
in validate-catalog.py). Falls back to a minimal hand-rolled validator if
|
|
6
|
+
jsonschema is unavailable.
|
|
7
|
+
|
|
8
|
+
Validation covers:
|
|
9
|
+
- Required fields: name, description, allowed-tools, metadata
|
|
10
|
+
- metadata required sub-fields: author, version
|
|
11
|
+
- name: pattern ^[a-z0-9][a-z0-9-]*$
|
|
12
|
+
- description: minLength 50, maxLength 1500
|
|
13
|
+
- allowed-tools: non-empty string or non-empty list of strings
|
|
14
|
+
- metadata.version: semver pattern ^\\d+\\.\\d+\\.\\d+(-[\\w.-]+)?$
|
|
15
|
+
- metadata.author: minLength 1
|
|
16
|
+
- disable-model-invocation (optional): boolean
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import json
|
|
22
|
+
import re
|
|
23
|
+
import sys
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
27
|
+
SKILLS_DIR = ROOT / "skills"
|
|
28
|
+
SCHEMA_PATH = ROOT / "schemas" / "skill.frontmatter.schema.json"
|
|
29
|
+
|
|
30
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
31
|
+
# YAML frontmatter parser (stdlib only, mirrors validate-skill-allowed-tools.py)
|
|
32
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
|
|
34
|
+
def parse_frontmatter_raw(text: str) -> dict | None:
|
|
35
|
+
"""Return a dict of the raw YAML frontmatter block, or None on failure.
|
|
36
|
+
|
|
37
|
+
Supports:
|
|
38
|
+
- scalar values (key: value)
|
|
39
|
+
- quoted scalars (key: "value")
|
|
40
|
+
- nested mappings (metadata:\\n sub: val)
|
|
41
|
+
- block sequences (key:\\n - item)
|
|
42
|
+
- inline sequences (key: [a, b])
|
|
43
|
+
|
|
44
|
+
Uses the hand-rolled parser (not PyYAML) to avoid failures on unquoted
|
|
45
|
+
colons in description values — a known pattern in this corpus.
|
|
46
|
+
"""
|
|
47
|
+
if not text.startswith("---\n"):
|
|
48
|
+
return None
|
|
49
|
+
end = text.find("\n---", 4)
|
|
50
|
+
if end == -1:
|
|
51
|
+
return None
|
|
52
|
+
block = text[4:end]
|
|
53
|
+
|
|
54
|
+
# Use hand-rolled parser to handle unquoted colons in scalar values.
|
|
55
|
+
return _minimal_yaml_parse(block)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _minimal_yaml_parse(block: str) -> dict:
|
|
59
|
+
"""Parse a restricted YAML subset into a Python dict."""
|
|
60
|
+
result: dict = {}
|
|
61
|
+
lines = block.splitlines()
|
|
62
|
+
i = 0
|
|
63
|
+
|
|
64
|
+
def parse_scalar(s: str):
|
|
65
|
+
s = s.strip()
|
|
66
|
+
if (s.startswith('"') and s.endswith('"')) or \
|
|
67
|
+
(s.startswith("'") and s.endswith("'")):
|
|
68
|
+
return s[1:-1]
|
|
69
|
+
if s.lower() == "true":
|
|
70
|
+
return True
|
|
71
|
+
if s.lower() == "false":
|
|
72
|
+
return False
|
|
73
|
+
return s
|
|
74
|
+
|
|
75
|
+
while i < len(lines):
|
|
76
|
+
line = lines[i]
|
|
77
|
+
# top-level key
|
|
78
|
+
if line and not line.startswith(" ") and ":" in line:
|
|
79
|
+
key, _, rest = line.partition(":")
|
|
80
|
+
key = key.strip()
|
|
81
|
+
rest = rest.strip()
|
|
82
|
+
|
|
83
|
+
if rest == "":
|
|
84
|
+
# look ahead for block sequence or nested mapping
|
|
85
|
+
children_list: list = []
|
|
86
|
+
children_dict: dict = {}
|
|
87
|
+
i += 1
|
|
88
|
+
while i < len(lines) and (lines[i].startswith(" ") or lines[i] == ""):
|
|
89
|
+
child = lines[i]
|
|
90
|
+
if child.strip() == "":
|
|
91
|
+
i += 1
|
|
92
|
+
continue
|
|
93
|
+
if child.startswith(" - "):
|
|
94
|
+
children_list.append(child[4:].strip())
|
|
95
|
+
elif child.startswith(" ") and ":" in child:
|
|
96
|
+
ckey, _, crest = child.strip().partition(":")
|
|
97
|
+
children_dict[ckey.strip()] = parse_scalar(crest)
|
|
98
|
+
i += 1
|
|
99
|
+
if children_list:
|
|
100
|
+
result[key] = children_list
|
|
101
|
+
elif children_dict:
|
|
102
|
+
result[key] = children_dict
|
|
103
|
+
else:
|
|
104
|
+
result[key] = None
|
|
105
|
+
continue
|
|
106
|
+
elif rest.startswith("[") and rest.endswith("]"):
|
|
107
|
+
inner = rest[1:-1]
|
|
108
|
+
result[key] = [t.strip().strip("'\"") for t in inner.split(",") if t.strip()]
|
|
109
|
+
else:
|
|
110
|
+
result[key] = parse_scalar(rest)
|
|
111
|
+
i += 1
|
|
112
|
+
|
|
113
|
+
return result
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
117
|
+
# Schema-based validation
|
|
118
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
119
|
+
|
|
120
|
+
NAME_RE = re.compile(r"^[a-z0-9][a-z0-9-]*$")
|
|
121
|
+
VERSION_RE = re.compile(r"^\d+\.\d+\.\d+(-[\w.-]+)?$")
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _try_jsonschema_validate(instance: dict, schema: dict) -> list[str]:
|
|
125
|
+
"""Validate using jsonschema if available; return list of error messages."""
|
|
126
|
+
try:
|
|
127
|
+
import jsonschema # type: ignore
|
|
128
|
+
errors = []
|
|
129
|
+
validator_cls = jsonschema.validators.validator_for(schema)
|
|
130
|
+
validator = validator_cls(schema)
|
|
131
|
+
for err in sorted(validator.iter_errors(instance), key=lambda e: list(e.path)):
|
|
132
|
+
path = ".".join(str(p) for p in err.absolute_path) or "<root>"
|
|
133
|
+
errors.append(f" field '{path}': {err.message}")
|
|
134
|
+
return errors
|
|
135
|
+
except ImportError:
|
|
136
|
+
return [] # fall through to hand-rolled validator
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _hand_rolled_validate(fm: dict) -> list[str]:
|
|
140
|
+
"""Minimal validator that mirrors the schema constraints."""
|
|
141
|
+
errors: list[str] = []
|
|
142
|
+
|
|
143
|
+
# Required top-level fields
|
|
144
|
+
for req in ("name", "description", "allowed-tools", "metadata"):
|
|
145
|
+
if req not in fm or fm[req] is None:
|
|
146
|
+
errors.append(f" field '{req}': required field is missing")
|
|
147
|
+
|
|
148
|
+
# name pattern
|
|
149
|
+
name = fm.get("name")
|
|
150
|
+
if isinstance(name, str):
|
|
151
|
+
if not NAME_RE.match(name):
|
|
152
|
+
errors.append(
|
|
153
|
+
f" field 'name': '{name}' does not match pattern ^[a-z0-9][a-z0-9-]*$"
|
|
154
|
+
)
|
|
155
|
+
elif name is not None:
|
|
156
|
+
errors.append(f" field 'name': must be a string, got {type(name).__name__}")
|
|
157
|
+
|
|
158
|
+
# description length
|
|
159
|
+
desc = fm.get("description")
|
|
160
|
+
if isinstance(desc, str):
|
|
161
|
+
if len(desc) < 50:
|
|
162
|
+
errors.append(
|
|
163
|
+
f" field 'description': length {len(desc)} is below minimum 50"
|
|
164
|
+
)
|
|
165
|
+
if len(desc) > 1500:
|
|
166
|
+
errors.append(
|
|
167
|
+
f" field 'description': length {len(desc)} exceeds maximum 1500"
|
|
168
|
+
)
|
|
169
|
+
elif desc is not None:
|
|
170
|
+
errors.append(f" field 'description': must be a string, got {type(desc).__name__}")
|
|
171
|
+
|
|
172
|
+
# allowed-tools: string or list of strings, non-empty
|
|
173
|
+
at = fm.get("allowed-tools")
|
|
174
|
+
if at is not None:
|
|
175
|
+
if isinstance(at, str):
|
|
176
|
+
if len(at.strip()) == 0:
|
|
177
|
+
errors.append(" field 'allowed-tools': string value must not be empty")
|
|
178
|
+
elif isinstance(at, list):
|
|
179
|
+
if len(at) == 0:
|
|
180
|
+
errors.append(" field 'allowed-tools': list must contain at least one item")
|
|
181
|
+
for idx, item in enumerate(at):
|
|
182
|
+
if not isinstance(item, str) or len(item.strip()) == 0:
|
|
183
|
+
errors.append(
|
|
184
|
+
f" field 'allowed-tools[{idx}]': each item must be a non-empty string"
|
|
185
|
+
)
|
|
186
|
+
else:
|
|
187
|
+
errors.append(
|
|
188
|
+
f" field 'allowed-tools': must be a string or array, got {type(at).__name__}"
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# metadata sub-fields
|
|
192
|
+
meta = fm.get("metadata")
|
|
193
|
+
if isinstance(meta, dict):
|
|
194
|
+
author = meta.get("author")
|
|
195
|
+
if author is None:
|
|
196
|
+
errors.append(" field 'metadata.author': required field is missing")
|
|
197
|
+
elif not isinstance(author, str) or len(author) < 1:
|
|
198
|
+
errors.append(" field 'metadata.author': must be a non-empty string")
|
|
199
|
+
|
|
200
|
+
version = meta.get("version")
|
|
201
|
+
if version is None:
|
|
202
|
+
errors.append(" field 'metadata.version': required field is missing")
|
|
203
|
+
elif not isinstance(version, str):
|
|
204
|
+
errors.append(
|
|
205
|
+
f" field 'metadata.version': must be a string, got {type(version).__name__}"
|
|
206
|
+
)
|
|
207
|
+
elif not VERSION_RE.match(version):
|
|
208
|
+
errors.append(
|
|
209
|
+
f" field 'metadata.version': '{version}' does not match semver pattern"
|
|
210
|
+
)
|
|
211
|
+
elif meta is not None:
|
|
212
|
+
errors.append(
|
|
213
|
+
f" field 'metadata': must be a mapping/object, got {type(meta).__name__}"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# disable-model-invocation (optional): must be boolean if present
|
|
217
|
+
dmi = fm.get("disable-model-invocation")
|
|
218
|
+
if dmi is not None and not isinstance(dmi, bool):
|
|
219
|
+
errors.append(
|
|
220
|
+
f" field 'disable-model-invocation': must be a boolean, got {type(dmi).__name__}"
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
return errors
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def validate_skill(skill_md: Path, schema: dict) -> list[str]:
|
|
227
|
+
text = skill_md.read_text(encoding="utf-8")
|
|
228
|
+
fm = parse_frontmatter_raw(text)
|
|
229
|
+
if fm is None or not isinstance(fm, dict):
|
|
230
|
+
return [f" no valid YAML frontmatter block found"]
|
|
231
|
+
|
|
232
|
+
# Prefer jsonschema; fall back to hand-rolled
|
|
233
|
+
errors = _try_jsonschema_validate(fm, schema)
|
|
234
|
+
if not errors and _hand_rolled_validate(fm):
|
|
235
|
+
# jsonschema not available or returned nothing; use hand-rolled
|
|
236
|
+
errors = _hand_rolled_validate(fm)
|
|
237
|
+
elif not errors:
|
|
238
|
+
# double-check with hand-rolled to catch anything jsonschema might miss
|
|
239
|
+
errors = _hand_rolled_validate(fm)
|
|
240
|
+
|
|
241
|
+
return errors
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
245
|
+
# Entry point
|
|
246
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
247
|
+
|
|
248
|
+
def main() -> int:
|
|
249
|
+
if not SCHEMA_PATH.exists():
|
|
250
|
+
print(f"ERROR: schema not found at {SCHEMA_PATH}", file=sys.stderr)
|
|
251
|
+
return 2
|
|
252
|
+
|
|
253
|
+
schema = json.loads(SCHEMA_PATH.read_text(encoding="utf-8"))
|
|
254
|
+
|
|
255
|
+
skill_files = sorted(SKILLS_DIR.glob("*/*/SKILL.md"))
|
|
256
|
+
if not skill_files:
|
|
257
|
+
print("ERROR: no SKILL.md files found", file=sys.stderr)
|
|
258
|
+
return 2
|
|
259
|
+
|
|
260
|
+
failed: list[tuple[Path, list[str]]] = []
|
|
261
|
+
|
|
262
|
+
for skill_md in skill_files:
|
|
263
|
+
errors = validate_skill(skill_md, schema)
|
|
264
|
+
if errors:
|
|
265
|
+
failed.append((skill_md, errors))
|
|
266
|
+
|
|
267
|
+
if failed:
|
|
268
|
+
print(
|
|
269
|
+
f"FAIL: {len(failed)} skill(s) failed frontmatter schema validation "
|
|
270
|
+
f"(out of {len(skill_files)} checked):",
|
|
271
|
+
file=sys.stderr,
|
|
272
|
+
)
|
|
273
|
+
for path, errs in failed:
|
|
274
|
+
print(f"\n {path}", file=sys.stderr)
|
|
275
|
+
for e in errs:
|
|
276
|
+
print(f" {e}", file=sys.stderr)
|
|
277
|
+
return 1
|
|
278
|
+
|
|
279
|
+
print(
|
|
280
|
+
f"OK: all {len(skill_files)} skills passed SKILL.md frontmatter schema validation"
|
|
281
|
+
)
|
|
282
|
+
return 0
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
if __name__ == "__main__":
|
|
286
|
+
sys.exit(main())
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Generate or validate the skill integrity manifest.
|
|
3
|
+
|
|
4
|
+
The manifest is deterministic: it records every file under each cataloged skill
|
|
5
|
+
directory, plus an aggregate SHA-256 per skill. Use --write when skill content
|
|
6
|
+
changes intentionally. Use default check mode in CI.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import hashlib
|
|
13
|
+
import json
|
|
14
|
+
import sys
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
18
|
+
CATALOG = ROOT / "catalog" / "skills.json"
|
|
19
|
+
MANIFEST = ROOT / "catalog" / "skill-manifest.json"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def sha256_bytes(data: bytes) -> str:
|
|
23
|
+
return hashlib.sha256(data).hexdigest()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def load_json(path: Path):
|
|
27
|
+
return json.loads(path.read_text(encoding="utf-8"))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def skill_files(skill_path: Path) -> list[dict]:
|
|
31
|
+
files: list[dict] = []
|
|
32
|
+
for path in sorted(p for p in skill_path.rglob("*") if p.is_file()):
|
|
33
|
+
rel = path.relative_to(ROOT).as_posix()
|
|
34
|
+
data = path.read_bytes()
|
|
35
|
+
files.append({
|
|
36
|
+
"path": rel,
|
|
37
|
+
"sha256": sha256_bytes(data),
|
|
38
|
+
"bytes": len(data),
|
|
39
|
+
})
|
|
40
|
+
return files
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def aggregate_hash(files: list[dict]) -> str:
|
|
44
|
+
h = hashlib.sha256()
|
|
45
|
+
for item in files:
|
|
46
|
+
h.update(item["path"].encode("utf-8"))
|
|
47
|
+
h.update(b"\0")
|
|
48
|
+
h.update(item["sha256"].encode("ascii"))
|
|
49
|
+
h.update(b"\0")
|
|
50
|
+
h.update(str(item["bytes"]).encode("ascii"))
|
|
51
|
+
h.update(b"\n")
|
|
52
|
+
return h.hexdigest()
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def build_manifest() -> dict:
|
|
56
|
+
catalog = load_json(CATALOG)
|
|
57
|
+
entries: list[dict] = []
|
|
58
|
+
for item in sorted(catalog, key=lambda entry: entry["id"]):
|
|
59
|
+
if item["type"] != "skill":
|
|
60
|
+
continue
|
|
61
|
+
skill_path = ROOT / item["path"]
|
|
62
|
+
if not skill_path.is_dir():
|
|
63
|
+
raise AssertionError(f"{item['id']}: skill path is not a directory: {item['path']}")
|
|
64
|
+
files = skill_files(skill_path)
|
|
65
|
+
if not files:
|
|
66
|
+
raise AssertionError(f"{item['id']}: skill path has no files: {item['path']}")
|
|
67
|
+
entries.append({
|
|
68
|
+
"id": item["id"],
|
|
69
|
+
"path": item["path"],
|
|
70
|
+
"aggregate_sha256": aggregate_hash(files),
|
|
71
|
+
"files": files,
|
|
72
|
+
})
|
|
73
|
+
return {
|
|
74
|
+
"manifest_version": 1,
|
|
75
|
+
"algorithm": "sha256",
|
|
76
|
+
"root": "skills",
|
|
77
|
+
"entries": entries,
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def main() -> int:
|
|
82
|
+
parser = argparse.ArgumentParser()
|
|
83
|
+
parser.add_argument("--write", action="store_true", help="Rewrite catalog/skill-manifest.json")
|
|
84
|
+
args = parser.parse_args()
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
current = build_manifest()
|
|
88
|
+
except AssertionError as exc:
|
|
89
|
+
print(f"ERROR: {exc}", file=sys.stderr)
|
|
90
|
+
return 1
|
|
91
|
+
|
|
92
|
+
rendered = json.dumps(current, indent=2, sort_keys=False) + "\n"
|
|
93
|
+
if args.write:
|
|
94
|
+
MANIFEST.write_text(rendered, encoding="utf-8")
|
|
95
|
+
print(f"OK: wrote {MANIFEST.relative_to(ROOT)} with {len(current['entries'])} skill entries")
|
|
96
|
+
return 0
|
|
97
|
+
|
|
98
|
+
if not MANIFEST.exists():
|
|
99
|
+
print(f"ERROR: missing {MANIFEST.relative_to(ROOT)}; run tests/validate-skill-manifest.py --write", file=sys.stderr)
|
|
100
|
+
return 1
|
|
101
|
+
|
|
102
|
+
expected = MANIFEST.read_text(encoding="utf-8")
|
|
103
|
+
if expected != rendered:
|
|
104
|
+
print(
|
|
105
|
+
f"ERROR: {MANIFEST.relative_to(ROOT)} is stale or skill contents changed; "
|
|
106
|
+
"run tests/validate-skill-manifest.py --write if intentional",
|
|
107
|
+
file=sys.stderr,
|
|
108
|
+
)
|
|
109
|
+
return 1
|
|
110
|
+
|
|
111
|
+
print(f"OK: skill manifest matches {len(current['entries'])} skill entries")
|
|
112
|
+
return 0
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
if __name__ == "__main__":
|
|
116
|
+
raise SystemExit(main())
|