@raishin/vanguard-frontier-agentic 2.0.0 → 2.1.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 +25 -1
- package/.cursor-plugin/plugin.json +25 -1
- package/.github/plugin/marketplace.json +1 -1
- package/README.md +26 -7
- package/agents/marketing/README.md +44 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/AGENT.md +53 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/metadata.json +31 -0
- package/agents/marketing/analytics-data-minimization-review-agent/AGENT.md +51 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/metadata.json +31 -0
- package/agents/marketing/email-sender-authentication-review-agent/AGENT.md +50 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/metadata.json +31 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/AGENT.md +54 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/metadata.json +31 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/AGENT.md +52 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/metadata.json +31 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/AGENT.md +54 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/codex.toml +34 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/AGENT.md +51 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/AGENT.md +51 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/AGENT.md +50 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/AGENT.md +50 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-maestro-agent/AGENT.md +62 -0
- package/agents/marketing/marketing-maestro-agent/PERMISSIONS.md +75 -0
- package/agents/marketing/marketing-maestro-agent/README.md +62 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/claude-code.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/codex.toml +35 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/copilot.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/cursor.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/gemini.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/kiro-ide.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/metadata.json +38 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/AGENT.md +50 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/metadata.json +31 -0
- package/agents/marketing/martech-access-governance-review-agent/AGENT.md +51 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/metadata.json +31 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/AGENT.md +50 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/metadata.json +31 -0
- package/agents/qa/README.md +51 -0
- package/agents/qa/ci-test-pipeline-review-agent/AGENT.md +51 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/codex.toml +34 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/ci-test-pipeline-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/qa/ci-test-pipeline-review-agent/metadata.json +33 -0
- package/agents/qa/helm-chart-quality-review-agent/AGENT.md +56 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/claude-code.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/codex.toml +39 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/copilot.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/cursor.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/gemini.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/helm-chart-quality-review-agent/harnesses/kiro-ide.agent.md +40 -0
- package/agents/qa/helm-chart-quality-review-agent/metadata.json +35 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/AGENT.md +55 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/claude-code.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/codex.toml +38 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/copilot.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/cursor.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/gemini.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/kiro-ide.agent.md +32 -0
- package/agents/qa/kubernetes-manifest-quality-review-agent/metadata.json +35 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/AGENT.md +52 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/codex.toml +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/qa/llm-ai-pipeline-test-review-agent/metadata.json +35 -0
- package/agents/qa/playwright-e2e-execution-run-agent/AGENT.md +50 -0
- package/agents/qa/playwright-e2e-execution-run-agent/harnesses/claude-code.agent.md +39 -0
- package/agents/qa/playwright-e2e-execution-run-agent/harnesses/cursor.agent.md +39 -0
- package/agents/qa/playwright-e2e-execution-run-agent/metadata.json +28 -0
- package/agents/qa/playwright-e2e-suite-review-agent/AGENT.md +51 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/codex.toml +34 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/playwright-e2e-suite-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/qa/playwright-e2e-suite-review-agent/metadata.json +35 -0
- package/agents/qa/plc-control-logic-safety-review-agent/AGENT.md +53 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/codex.toml +36 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/plc-control-logic-safety-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/qa/plc-control-logic-safety-review-agent/metadata.json +33 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/AGENT.md +52 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/codex.toml +35 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/qa/rpa-workflow-resilience-review-agent/metadata.json +34 -0
- package/agents/qa/test-coverage-quality-review-agent/AGENT.md +50 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/codex.toml +33 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/test-coverage-quality-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/qa/test-coverage-quality-review-agent/metadata.json +33 -0
- package/agents/qa/test-flakiness-triage-agent/AGENT.md +52 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/codex.toml +33 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/copilot.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/cursor.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/gemini.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/qa/test-flakiness-triage-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/qa/test-flakiness-triage-agent/metadata.json +33 -0
- package/catalog/agents.json +1047 -197
- package/catalog/asset-integrity.json +2950 -1675
- package/catalog/install-roles.json +65 -1
- package/catalog/skill-manifest.json +538 -0
- package/catalog/skills.json +685 -0
- package/package.json +5 -2
- package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
- package/scripts/generate-readme-counts.mjs +162 -0
- package/skills/marketing/ai-advertising-targeting-fairness-review/SKILL.md +43 -0
- package/skills/marketing/ai-advertising-targeting-fairness-review/metadata.json +21 -0
- package/skills/marketing/ai-advertising-targeting-fairness-review/references/workflow-and-output.md +150 -0
- package/skills/marketing/analytics-data-minimization-review/SKILL.md +44 -0
- package/skills/marketing/analytics-data-minimization-review/metadata.json +22 -0
- package/skills/marketing/analytics-data-minimization-review/references/workflow-and-output.md +187 -0
- package/skills/marketing/email-sender-authentication-review/SKILL.md +43 -0
- package/skills/marketing/email-sender-authentication-review/metadata.json +22 -0
- package/skills/marketing/email-sender-authentication-review/references/workflow-and-output.md +152 -0
- package/skills/marketing/eu-ai-act-marketing-system-review/SKILL.md +43 -0
- package/skills/marketing/eu-ai-act-marketing-system-review/metadata.json +21 -0
- package/skills/marketing/eu-ai-act-marketing-system-review/references/workflow-and-output.md +176 -0
- package/skills/marketing/influencer-disclosure-compliance-review/SKILL.md +43 -0
- package/skills/marketing/influencer-disclosure-compliance-review/metadata.json +22 -0
- package/skills/marketing/influencer-disclosure-compliance-review/references/workflow-and-output.md +156 -0
- package/skills/marketing/lookalike-audience-upload-compliance-review/SKILL.md +44 -0
- package/skills/marketing/lookalike-audience-upload-compliance-review/metadata.json +21 -0
- package/skills/marketing/lookalike-audience-upload-compliance-review/references/workflow-and-output.md +203 -0
- package/skills/marketing/marketing-consent-data-collection-review/SKILL.md +44 -0
- package/skills/marketing/marketing-consent-data-collection-review/metadata.json +21 -0
- package/skills/marketing/marketing-consent-data-collection-review/references/workflow-and-output.md +139 -0
- package/skills/marketing/marketing-conversion-flow-dark-pattern-review/SKILL.md +45 -0
- package/skills/marketing/marketing-conversion-flow-dark-pattern-review/metadata.json +22 -0
- package/skills/marketing/marketing-conversion-flow-dark-pattern-review/references/workflow-and-output.md +160 -0
- package/skills/marketing/marketing-email-list-retention-review/SKILL.md +43 -0
- package/skills/marketing/marketing-email-list-retention-review/metadata.json +22 -0
- package/skills/marketing/marketing-email-list-retention-review/references/workflow-and-output.md +144 -0
- package/skills/marketing/marketing-gpc-signal-honoring-review/SKILL.md +42 -0
- package/skills/marketing/marketing-gpc-signal-honoring-review/metadata.json +22 -0
- package/skills/marketing/marketing-gpc-signal-honoring-review/references/workflow-and-output.md +145 -0
- package/skills/marketing/marketing-maestro/README.md +37 -0
- package/skills/marketing/marketing-maestro/SKILL.md +49 -0
- package/skills/marketing/marketing-maestro/metadata.json +26 -0
- package/skills/marketing/marketing-maestro/references/safety-checklist.md +67 -0
- package/skills/marketing/marketing-maestro/references/workflow-and-output.md +110 -0
- package/skills/marketing/marketing-pixel-data-leakage-review/SKILL.md +43 -0
- package/skills/marketing/marketing-pixel-data-leakage-review/metadata.json +21 -0
- package/skills/marketing/marketing-pixel-data-leakage-review/references/workflow-and-output.md +129 -0
- package/skills/marketing/martech-access-governance-review/SKILL.md +45 -0
- package/skills/marketing/martech-access-governance-review/metadata.json +21 -0
- package/skills/marketing/martech-access-governance-review/references/workflow-and-output.md +116 -0
- package/skills/marketing/programmatic-supply-chain-integrity-review/SKILL.md +43 -0
- package/skills/marketing/programmatic-supply-chain-integrity-review/metadata.json +22 -0
- package/skills/marketing/programmatic-supply-chain-integrity-review/references/workflow-and-output.md +164 -0
- package/skills/qa/ci-test-pipeline-review/SKILL.md +45 -0
- package/skills/qa/ci-test-pipeline-review/metadata.json +21 -0
- package/skills/qa/ci-test-pipeline-review/references/workflow-and-output.md +124 -0
- package/skills/qa/helm-chart-quality-review/SKILL.md +61 -0
- package/skills/qa/helm-chart-quality-review/metadata.json +23 -0
- package/skills/qa/helm-chart-quality-review/references/workflow-and-output.md +174 -0
- package/skills/qa/kubernetes-manifest-quality-review/SKILL.md +92 -0
- package/skills/qa/kubernetes-manifest-quality-review/metadata.json +23 -0
- package/skills/qa/kubernetes-manifest-quality-review/references/workflow-and-output.md +246 -0
- package/skills/qa/llm-ai-pipeline-test-review/SKILL.md +52 -0
- package/skills/qa/llm-ai-pipeline-test-review/metadata.json +23 -0
- package/skills/qa/llm-ai-pipeline-test-review/references/workflow-and-output.md +221 -0
- package/skills/qa/playwright-e2e-execution-run/SKILL.md +54 -0
- package/skills/qa/playwright-e2e-execution-run/metadata.json +24 -0
- package/skills/qa/playwright-e2e-execution-run/references/workflow-and-output.md +133 -0
- package/skills/qa/playwright-e2e-suite-review/SKILL.md +44 -0
- package/skills/qa/playwright-e2e-suite-review/metadata.json +23 -0
- package/skills/qa/playwright-e2e-suite-review/references/workflow-and-output.md +176 -0
- package/skills/qa/plc-control-logic-safety-review/SKILL.md +47 -0
- package/skills/qa/plc-control-logic-safety-review/metadata.json +21 -0
- package/skills/qa/plc-control-logic-safety-review/references/workflow-and-output.md +231 -0
- package/skills/qa/rpa-workflow-resilience-review/SKILL.md +47 -0
- package/skills/qa/rpa-workflow-resilience-review/metadata.json +22 -0
- package/skills/qa/rpa-workflow-resilience-review/references/workflow-and-output.md +210 -0
- package/skills/qa/test-coverage-quality-review/SKILL.md +44 -0
- package/skills/qa/test-coverage-quality-review/metadata.json +21 -0
- package/skills/qa/test-coverage-quality-review/references/workflow-and-output.md +139 -0
- package/skills/qa/test-flakiness-triage/SKILL.md +43 -0
- package/skills/qa/test-flakiness-triage/metadata.json +21 -0
- package/skills/qa/test-flakiness-triage/references/workflow-and-output.md +114 -0
- package/tests/eval-qa-cluster.mjs +111 -0
- package/tests/fixtures/marketing-maestro-routing/expected/001-happy-ai-advertising-targeting-fairness-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/002-happy-analytics-data-minimization-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/003-happy-consent-data-collection-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/004-happy-conversion-flow-dark-pattern-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/005-happy-email-list-retention-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/006-happy-email-sender-authentication-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/007-happy-eu-ai-act-marketing-system-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/008-happy-gpc-signal-honoring-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/009-happy-influencer-disclosure-compliance-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/010-happy-lookalike-audience-upload-compliance-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/011-happy-martech-access-governance-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/012-happy-pixel-data-leakage-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/013-happy-programmatic-supply-chain-integrity-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-instruction-injection.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-live-guard-gate.json +4 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-secrets-bait.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/001-happy-ai-advertising-targeting-fairness-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/002-happy-analytics-data-minimization-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/003-happy-consent-data-collection-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/004-happy-conversion-flow-dark-pattern-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/005-happy-email-list-retention-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/006-happy-email-sender-authentication-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/007-happy-eu-ai-act-marketing-system-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/008-happy-gpc-signal-honoring-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/009-happy-influencer-disclosure-compliance-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/010-happy-lookalike-audience-upload-compliance-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/011-happy-martech-access-governance-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/012-happy-pixel-data-leakage-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/013-happy-programmatic-supply-chain-integrity-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-live-guard-gate.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/taxonomy.json +183 -0
- package/tests/validate-catalog.py +1 -0
- package/tests/validate-maestro-routing.py +4 -0
- package/tests/validate-readme-counts.mjs +179 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"provider": "marketing",
|
|
3
|
+
"domains": {
|
|
4
|
+
"consent-data-collection-review": {
|
|
5
|
+
"keywords": [
|
|
6
|
+
"consent",
|
|
7
|
+
"data",
|
|
8
|
+
"collection",
|
|
9
|
+
"CMP",
|
|
10
|
+
"tag-manager",
|
|
11
|
+
"Consent Mode",
|
|
12
|
+
"GDPR",
|
|
13
|
+
"CCPA"
|
|
14
|
+
],
|
|
15
|
+
"agent": "marketing-consent-data-collection-review-agent"
|
|
16
|
+
},
|
|
17
|
+
"pixel-data-leakage-review": {
|
|
18
|
+
"keywords": [
|
|
19
|
+
"pixel",
|
|
20
|
+
"data",
|
|
21
|
+
"leakage",
|
|
22
|
+
"personal-data",
|
|
23
|
+
"PII",
|
|
24
|
+
"form-field",
|
|
25
|
+
"auto-capture"
|
|
26
|
+
],
|
|
27
|
+
"agent": "marketing-pixel-data-leakage-review-agent"
|
|
28
|
+
},
|
|
29
|
+
"martech-access-governance-review": {
|
|
30
|
+
"keywords": [
|
|
31
|
+
"martech",
|
|
32
|
+
"access",
|
|
33
|
+
"governance",
|
|
34
|
+
"OAuth",
|
|
35
|
+
"API",
|
|
36
|
+
"CRM",
|
|
37
|
+
"marketing-automation",
|
|
38
|
+
"least-privilege"
|
|
39
|
+
],
|
|
40
|
+
"agent": "martech-access-governance-review-agent"
|
|
41
|
+
},
|
|
42
|
+
"ai-advertising-targeting-fairness-review": {
|
|
43
|
+
"keywords": [
|
|
44
|
+
"advertising",
|
|
45
|
+
"targeting",
|
|
46
|
+
"fairness",
|
|
47
|
+
"ad-platform",
|
|
48
|
+
"protected-class",
|
|
49
|
+
"Fair Housing Act",
|
|
50
|
+
"ECOA",
|
|
51
|
+
"EU AI Act",
|
|
52
|
+
"Article"
|
|
53
|
+
],
|
|
54
|
+
"agent": "ai-advertising-targeting-fairness-review-agent"
|
|
55
|
+
},
|
|
56
|
+
"analytics-data-minimization-review": {
|
|
57
|
+
"keywords": [
|
|
58
|
+
"analytics",
|
|
59
|
+
"data",
|
|
60
|
+
"minimization",
|
|
61
|
+
"GA4",
|
|
62
|
+
"BigQuery",
|
|
63
|
+
"event-parameter",
|
|
64
|
+
"user-property",
|
|
65
|
+
"data-minimization",
|
|
66
|
+
"storage-period"
|
|
67
|
+
],
|
|
68
|
+
"agent": "analytics-data-minimization-review-agent"
|
|
69
|
+
},
|
|
70
|
+
"email-sender-authentication-review": {
|
|
71
|
+
"keywords": [
|
|
72
|
+
"email",
|
|
73
|
+
"sender",
|
|
74
|
+
"authentication",
|
|
75
|
+
"Review DNS",
|
|
76
|
+
"sender-authentication",
|
|
77
|
+
"SPF",
|
|
78
|
+
"DKIM",
|
|
79
|
+
"DMARC",
|
|
80
|
+
"BIMI"
|
|
81
|
+
],
|
|
82
|
+
"agent": "email-sender-authentication-review-agent"
|
|
83
|
+
},
|
|
84
|
+
"eu-ai-act-marketing-system-review": {
|
|
85
|
+
"keywords": [
|
|
86
|
+
"eu",
|
|
87
|
+
"act",
|
|
88
|
+
"marketing",
|
|
89
|
+
"system",
|
|
90
|
+
"EU AI Act",
|
|
91
|
+
"Regulation",
|
|
92
|
+
"risk-tier",
|
|
93
|
+
"Articles",
|
|
94
|
+
"deployment-readiness",
|
|
95
|
+
"August"
|
|
96
|
+
],
|
|
97
|
+
"agent": "eu-ai-act-marketing-system-review-agent"
|
|
98
|
+
},
|
|
99
|
+
"influencer-disclosure-compliance-review": {
|
|
100
|
+
"keywords": [
|
|
101
|
+
"influencer",
|
|
102
|
+
"disclosure",
|
|
103
|
+
"compliance",
|
|
104
|
+
"FTC Endorsement Guide"
|
|
105
|
+
],
|
|
106
|
+
"agent": "influencer-disclosure-compliance-review-agent"
|
|
107
|
+
},
|
|
108
|
+
"lookalike-audience-upload-compliance-review": {
|
|
109
|
+
"keywords": [
|
|
110
|
+
"lookalike",
|
|
111
|
+
"audience",
|
|
112
|
+
"upload",
|
|
113
|
+
"compliance",
|
|
114
|
+
"custom-audience",
|
|
115
|
+
"lookalike-audience",
|
|
116
|
+
"PII",
|
|
117
|
+
"consent-basis",
|
|
118
|
+
"data-sharing",
|
|
119
|
+
"Meta"
|
|
120
|
+
],
|
|
121
|
+
"agent": "lookalike-audience-upload-compliance-review-agent"
|
|
122
|
+
},
|
|
123
|
+
"conversion-flow-dark-pattern-review": {
|
|
124
|
+
"keywords": [
|
|
125
|
+
"conversion",
|
|
126
|
+
"flow",
|
|
127
|
+
"dark",
|
|
128
|
+
"pattern",
|
|
129
|
+
"sign-up",
|
|
130
|
+
"free-trial",
|
|
131
|
+
"dark-pattern",
|
|
132
|
+
"FTC Section",
|
|
133
|
+
"FTC Negative Option",
|
|
134
|
+
"Rule"
|
|
135
|
+
],
|
|
136
|
+
"agent": "marketing-conversion-flow-dark-pattern-review-agent"
|
|
137
|
+
},
|
|
138
|
+
"email-list-retention-review": {
|
|
139
|
+
"keywords": [
|
|
140
|
+
"email",
|
|
141
|
+
"list",
|
|
142
|
+
"retention",
|
|
143
|
+
"consent-record",
|
|
144
|
+
"suppression-list",
|
|
145
|
+
"data-retention",
|
|
146
|
+
"GDPR",
|
|
147
|
+
"CASL",
|
|
148
|
+
"CCPA"
|
|
149
|
+
],
|
|
150
|
+
"agent": "marketing-email-list-retention-review-agent"
|
|
151
|
+
},
|
|
152
|
+
"gpc-signal-honoring-review": {
|
|
153
|
+
"keywords": [
|
|
154
|
+
"gpc",
|
|
155
|
+
"signal",
|
|
156
|
+
"honoring",
|
|
157
|
+
"Global Privacy Control",
|
|
158
|
+
"opt-out",
|
|
159
|
+
"CMP",
|
|
160
|
+
"server-side",
|
|
161
|
+
"APIs",
|
|
162
|
+
"CAPI"
|
|
163
|
+
],
|
|
164
|
+
"agent": "marketing-gpc-signal-honoring-review-agent"
|
|
165
|
+
},
|
|
166
|
+
"programmatic-supply-chain-integrity-review": {
|
|
167
|
+
"keywords": [
|
|
168
|
+
"programmatic",
|
|
169
|
+
"supply",
|
|
170
|
+
"chain",
|
|
171
|
+
"integrity",
|
|
172
|
+
"app-ads",
|
|
173
|
+
"domain-spoofing",
|
|
174
|
+
"SupplyChain Object"
|
|
175
|
+
],
|
|
176
|
+
"agent": "programmatic-supply-chain-integrity-review-agent"
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
"live_guards": [],
|
|
180
|
+
"gate_mode": "live-guard-gate",
|
|
181
|
+
"live_guard_intent": "(destroy|delete|terminate|rollout to prod|rollout to production|approve.*production|promote.*to (?:prod|production)|key destruction|policy change in prod|mutate (?:rbac|iam|policy)|change-set.*apply|live (?:apply|push|deploy)|force[- ]push.*main|drop\\s+(?:table|database)|swap\\s+production\\s+slot)",
|
|
182
|
+
"parallel_threshold": 0.8
|
|
183
|
+
}
|
|
@@ -94,6 +94,10 @@ def evaluate(task: str, taxonomy: dict) -> dict:
|
|
|
94
94
|
# Generic live-guard intent without a clear specific match: emit
|
|
95
95
|
# the first live_guard as a stand-in (specialist will refine).
|
|
96
96
|
return {"route": [scored[0][0]], "mode": gate_mode}
|
|
97
|
+
# live_guard_intent matched but no specific live-guard agents are
|
|
98
|
+
# registered (e.g. marketing). Still gate the mutation intent; do
|
|
99
|
+
# not fall through to normal domain routing.
|
|
100
|
+
return {"route": [], "mode": gate_mode}
|
|
97
101
|
|
|
98
102
|
domains = taxonomy["domains"]
|
|
99
103
|
scores = {d: _score_domain(task, conf["keywords"]) for d, conf in domains.items()}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Standalone validator: fails CI if README.md count markers have drifted
|
|
4
|
+
* from the real computed values derived from disk.
|
|
5
|
+
*
|
|
6
|
+
* Count contract:
|
|
7
|
+
* skills = files matching skills/STAR-STAR/SKILL.md (recursive)
|
|
8
|
+
* agents = files matching agents/STAR-STAR/metadata.json (recursive)
|
|
9
|
+
* providers = distinct `provider` values across all agents/STAR-STAR/metadata.json
|
|
10
|
+
* roles = number of keys under .roles in catalog/install-roles.json
|
|
11
|
+
* rules = length of JSON array in catalog/rules.json
|
|
12
|
+
* mcp = length of JSON array in catalog/mcp-references.json
|
|
13
|
+
*
|
|
14
|
+
* Run: node tests/validate-readme-counts.mjs
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import fs from "node:fs";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
|
|
21
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
22
|
+
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Helpers
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
/** Recursively collect files whose basename matches `basename`. */
|
|
28
|
+
function findFiles(dir, basename) {
|
|
29
|
+
const results = [];
|
|
30
|
+
if (!fs.existsSync(dir)) return results;
|
|
31
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
32
|
+
const full = path.join(dir, entry.name);
|
|
33
|
+
if (entry.isDirectory()) {
|
|
34
|
+
results.push(...findFiles(full, basename));
|
|
35
|
+
} else if (entry.isFile() && entry.name === basename) {
|
|
36
|
+
results.push(full);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return results;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Compute counts from disk
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
const skillFiles = findFiles(path.join(repoRoot, "skills"), "SKILL.md");
|
|
47
|
+
const computedSkills = skillFiles.length;
|
|
48
|
+
|
|
49
|
+
const agentMetaFiles = findFiles(path.join(repoRoot, "agents"), "metadata.json");
|
|
50
|
+
const computedAgents = agentMetaFiles.length;
|
|
51
|
+
|
|
52
|
+
const providerSet = new Set();
|
|
53
|
+
for (const f of agentMetaFiles) {
|
|
54
|
+
try {
|
|
55
|
+
const data = JSON.parse(fs.readFileSync(f, "utf8"));
|
|
56
|
+
if (typeof data.provider === "string" && data.provider.length > 0) {
|
|
57
|
+
providerSet.add(data.provider);
|
|
58
|
+
}
|
|
59
|
+
} catch {
|
|
60
|
+
// malformed metadata — skip silently
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const computedProviders = providerSet.size;
|
|
64
|
+
|
|
65
|
+
const rolesDoc = JSON.parse(
|
|
66
|
+
fs.readFileSync(path.join(repoRoot, "catalog", "install-roles.json"), "utf8")
|
|
67
|
+
);
|
|
68
|
+
const computedRoles = Object.keys(rolesDoc.roles ?? {}).length;
|
|
69
|
+
|
|
70
|
+
const rulesArr = JSON.parse(
|
|
71
|
+
fs.readFileSync(path.join(repoRoot, "catalog", "rules.json"), "utf8")
|
|
72
|
+
);
|
|
73
|
+
const computedRules = Array.isArray(rulesArr) ? rulesArr.length : 0;
|
|
74
|
+
|
|
75
|
+
const mcpArr = JSON.parse(
|
|
76
|
+
fs.readFileSync(path.join(repoRoot, "catalog", "mcp-references.json"), "utf8")
|
|
77
|
+
);
|
|
78
|
+
const computedMcp = Array.isArray(mcpArr) ? mcpArr.length : 0;
|
|
79
|
+
|
|
80
|
+
/** Map from canonical KEY (as used in inline spans) → computed value. */
|
|
81
|
+
const computed = {
|
|
82
|
+
skills: computedSkills,
|
|
83
|
+
agents: computedAgents,
|
|
84
|
+
providers: computedProviders,
|
|
85
|
+
roles: computedRoles,
|
|
86
|
+
rules: computedRules,
|
|
87
|
+
mcp: computedMcp,
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Read README.md
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
|
|
94
|
+
const readmePath = path.join(repoRoot, "README.md");
|
|
95
|
+
const readme = fs.readFileSync(readmePath, "utf8");
|
|
96
|
+
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Extract and validate marker block
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
|
|
101
|
+
const blockMatch = readme.match(
|
|
102
|
+
/<!--\s*readme-counts:start\s*-->([\s\S]*?)<!--\s*readme-counts:end\s*-->/
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
if (!blockMatch) {
|
|
106
|
+
process.stderr.write(
|
|
107
|
+
"FAIL [readme-counts] marker block not found in README.md\n"
|
|
108
|
+
);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const blockContent = blockMatch[1];
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Map from table label → canonical KEY used in `computed`.
|
|
116
|
+
* Keys are lower-cased for case-insensitive matching.
|
|
117
|
+
*/
|
|
118
|
+
const labelToKey = {
|
|
119
|
+
"skills": "skills",
|
|
120
|
+
"agents": "agents",
|
|
121
|
+
"providers": "providers",
|
|
122
|
+
"install roles": "roles",
|
|
123
|
+
"rules": "rules",
|
|
124
|
+
"mcp references": "mcp",
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const failures = [];
|
|
128
|
+
|
|
129
|
+
// Parse table rows: | Label | Number |
|
|
130
|
+
// Tolerate extra whitespace around cell content.
|
|
131
|
+
const tableRowRe = /\|\s*([^|]+?)\s*\|\s*(\d+)\s*\|/g;
|
|
132
|
+
let rowMatch;
|
|
133
|
+
while ((rowMatch = tableRowRe.exec(blockContent)) !== null) {
|
|
134
|
+
const rawLabel = rowMatch[1].trim().toLowerCase();
|
|
135
|
+
const shownValue = parseInt(rowMatch[2], 10);
|
|
136
|
+
const key = labelToKey[rawLabel];
|
|
137
|
+
if (key === undefined) continue; // header row or unknown label — skip
|
|
138
|
+
const computedValue = computed[key];
|
|
139
|
+
if (shownValue !== computedValue) {
|
|
140
|
+
failures.push(
|
|
141
|
+
`FAIL [readme-counts] ${rowMatch[1].trim()}: README shows ${shownValue}, computed ${computedValue}`
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
// Find and validate all inline count spans
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
|
|
150
|
+
// <!-- count:KEY -->NUMBER<!-- /count -->
|
|
151
|
+
const spanRe = /<!--\s*count:(skills|agents|providers|roles|rules|mcp)\s*-->(\d+)<!--\s*\/count\s*-->/g;
|
|
152
|
+
let spanMatch;
|
|
153
|
+
while ((spanMatch = spanRe.exec(readme)) !== null) {
|
|
154
|
+
const key = spanMatch[1];
|
|
155
|
+
const shownValue = parseInt(spanMatch[2], 10);
|
|
156
|
+
const computedValue = computed[key];
|
|
157
|
+
if (shownValue !== computedValue) {
|
|
158
|
+
failures.push(
|
|
159
|
+
`FAIL [readme-counts] ${key} (inline span): README shows ${shownValue}, computed ${computedValue}`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// ---------------------------------------------------------------------------
|
|
165
|
+
// Report
|
|
166
|
+
// ---------------------------------------------------------------------------
|
|
167
|
+
|
|
168
|
+
if (failures.length > 0) {
|
|
169
|
+
for (const line of failures) {
|
|
170
|
+
process.stderr.write(line + "\n");
|
|
171
|
+
}
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
console.log(
|
|
176
|
+
`OK: README counts match catalog (skills=${computedSkills} agents=${computedAgents} ` +
|
|
177
|
+
`providers=${computedProviders} roles=${computedRoles} rules=${computedRules} mcp=${computedMcp})`
|
|
178
|
+
);
|
|
179
|
+
process.exit(0);
|