code-ai-installer 1.1.10 → 1.2.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/.agents/a11y_baseline/agents/claude.json +18 -0
- package/.agents/a11y_baseline/agents/copilot.json +18 -0
- package/.agents/a11y_baseline/agents/gemini.json +18 -0
- package/.agents/a11y_baseline/agents/openai.yaml +8 -0
- package/.agents/a11y_baseline/agents/qwen.json +18 -0
- package/.agents/a11y_baseline/agents/skill.yaml +22 -0
- package/.agents/adr_log/agents/claude.json +18 -0
- package/.agents/adr_log/agents/copilot.json +18 -0
- package/.agents/adr_log/agents/gemini.json +18 -0
- package/.agents/adr_log/agents/openai.yaml +8 -0
- package/.agents/adr_log/agents/qwen.json +18 -0
- package/.agents/adr_log/agents/skill.yaml +22 -0
- package/.agents/api_contract_compliance_review/agents/claude.json +20 -0
- package/.agents/api_contract_compliance_review/agents/copilot.json +20 -0
- package/.agents/api_contract_compliance_review/agents/gemini.json +20 -0
- package/.agents/api_contract_compliance_review/agents/openai.yaml +8 -0
- package/.agents/api_contract_compliance_review/agents/qwen.json +20 -0
- package/.agents/api_contract_compliance_review/agents/skill.yaml +24 -0
- package/.agents/api_contracts/agents/claude.json +18 -0
- package/.agents/api_contracts/agents/copilot.json +18 -0
- package/.agents/api_contracts/agents/gemini.json +18 -0
- package/.agents/api_contracts/agents/openai.yaml +8 -0
- package/.agents/api_contracts/agents/qwen.json +18 -0
- package/.agents/api_contracts/agents/skill.yaml +22 -0
- package/.agents/architecture_compliance_review/agents/claude.json +19 -0
- package/.agents/architecture_compliance_review/agents/copilot.json +19 -0
- package/.agents/architecture_compliance_review/agents/gemini.json +19 -0
- package/.agents/architecture_compliance_review/agents/openai.yaml +8 -0
- package/.agents/architecture_compliance_review/agents/qwen.json +19 -0
- package/.agents/architecture_compliance_review/agents/skill.yaml +23 -0
- package/.agents/architecture_doc/agents/claude.json +18 -0
- package/.agents/architecture_doc/agents/copilot.json +18 -0
- package/.agents/architecture_doc/agents/gemini.json +18 -0
- package/.agents/architecture_doc/agents/openai.yaml +8 -0
- package/.agents/architecture_doc/agents/qwen.json +18 -0
- package/.agents/architecture_doc/agents/skill.yaml +22 -0
- package/.agents/board/agents/claude.json +16 -0
- package/.agents/board/agents/copilot.json +16 -0
- package/.agents/board/agents/gemini.json +16 -0
- package/.agents/board/agents/openai.yaml +8 -0
- package/.agents/board/agents/qwen.json +16 -0
- package/.agents/board/agents/skill.yaml +20 -0
- package/.agents/cloud_infrastructure_security/agents/claude.json +19 -0
- package/.agents/cloud_infrastructure_security/agents/copilot.json +19 -0
- package/.agents/cloud_infrastructure_security/agents/gemini.json +19 -0
- package/.agents/cloud_infrastructure_security/agents/openai.yaml +8 -0
- package/.agents/cloud_infrastructure_security/agents/qwen.json +19 -0
- package/.agents/cloud_infrastructure_security/agents/skill.yaml +23 -0
- package/.agents/code_review_checklist/agents/claude.json +19 -0
- package/.agents/code_review_checklist/agents/copilot.json +19 -0
- package/.agents/code_review_checklist/agents/gemini.json +19 -0
- package/.agents/code_review_checklist/agents/openai.yaml +8 -0
- package/.agents/code_review_checklist/agents/qwen.json +19 -0
- package/.agents/code_review_checklist/agents/skill.yaml +23 -0
- package/.agents/current_state_analysis/agents/claude.json +19 -0
- package/.agents/current_state_analysis/agents/copilot.json +19 -0
- package/.agents/current_state_analysis/agents/gemini.json +19 -0
- package/.agents/current_state_analysis/agents/openai.yaml +8 -0
- package/.agents/current_state_analysis/agents/qwen.json +19 -0
- package/.agents/current_state_analysis/agents/skill.yaml +23 -0
- package/.agents/data_model/agents/claude.json +18 -0
- package/.agents/data_model/agents/copilot.json +18 -0
- package/.agents/data_model/agents/gemini.json +18 -0
- package/.agents/data_model/agents/openai.yaml +8 -0
- package/.agents/data_model/agents/qwen.json +18 -0
- package/.agents/data_model/agents/skill.yaml +22 -0
- package/.agents/dependency_supply_chain_review/agents/claude.json +20 -0
- package/.agents/dependency_supply_chain_review/agents/copilot.json +20 -0
- package/.agents/dependency_supply_chain_review/agents/gemini.json +20 -0
- package/.agents/dependency_supply_chain_review/agents/openai.yaml +8 -0
- package/.agents/dependency_supply_chain_review/agents/qwen.json +20 -0
- package/.agents/dependency_supply_chain_review/agents/skill.yaml +24 -0
- package/.agents/deployment_ci_plan/agents/claude.json +18 -0
- package/.agents/deployment_ci_plan/agents/copilot.json +18 -0
- package/.agents/deployment_ci_plan/agents/gemini.json +18 -0
- package/.agents/deployment_ci_plan/agents/openai.yaml +8 -0
- package/.agents/deployment_ci_plan/agents/qwen.json +18 -0
- package/.agents/deployment_ci_plan/agents/skill.yaml +22 -0
- package/.agents/design_intake/agents/claude.json +18 -0
- package/.agents/design_intake/agents/copilot.json +18 -0
- package/.agents/design_intake/agents/gemini.json +18 -0
- package/.agents/design_intake/agents/openai.yaml +8 -0
- package/.agents/design_intake/agents/qwen.json +18 -0
- package/.agents/design_intake/agents/skill.yaml +22 -0
- package/.agents/design_parity_review/SKILL.md +1 -18
- package/.agents/design_parity_review/agents/claude.json +19 -0
- package/.agents/design_parity_review/agents/copilot.json +19 -0
- package/.agents/design_parity_review/agents/gemini.json +19 -0
- package/.agents/design_parity_review/agents/openai.yaml +8 -0
- package/.agents/design_parity_review/agents/qwen.json +19 -0
- package/.agents/design_parity_review/agents/skill.yaml +23 -0
- package/.agents/design_systems/agents/claude.json +18 -0
- package/.agents/design_systems/agents/copilot.json +18 -0
- package/.agents/design_systems/agents/gemini.json +18 -0
- package/.agents/design_systems/agents/openai.yaml +8 -0
- package/.agents/design_systems/agents/qwen.json +18 -0
- package/.agents/design_systems/agents/skill.yaml +22 -0
- package/.agents/dev_reference_snippets/agents/claude.json +19 -0
- package/.agents/dev_reference_snippets/agents/copilot.json +19 -0
- package/.agents/dev_reference_snippets/agents/gemini.json +19 -0
- package/.agents/dev_reference_snippets/agents/openai.yaml +8 -0
- package/.agents/dev_reference_snippets/agents/qwen.json +19 -0
- package/.agents/dev_reference_snippets/agents/skill.yaml +23 -0
- package/.agents/docker_kubernetes_architecture/agents/claude.json +19 -0
- package/.agents/docker_kubernetes_architecture/agents/copilot.json +19 -0
- package/.agents/docker_kubernetes_architecture/agents/gemini.json +19 -0
- package/.agents/docker_kubernetes_architecture/agents/openai.yaml +8 -0
- package/.agents/docker_kubernetes_architecture/agents/qwen.json +19 -0
- package/.agents/docker_kubernetes_architecture/agents/skill.yaml +23 -0
- package/.agents/es2025_beast_practices/agents/claude.json +19 -0
- package/.agents/es2025_beast_practices/agents/copilot.json +19 -0
- package/.agents/es2025_beast_practices/agents/gemini.json +19 -0
- package/.agents/es2025_beast_practices/agents/openai.yaml +8 -0
- package/.agents/es2025_beast_practices/agents/qwen.json +19 -0
- package/.agents/es2025_beast_practices/agents/skill.yaml +23 -0
- package/.agents/gates/agents/claude.json +16 -0
- package/.agents/gates/agents/copilot.json +16 -0
- package/.agents/gates/agents/gemini.json +16 -0
- package/.agents/gates/agents/openai.yaml +8 -0
- package/.agents/gates/agents/qwen.json +16 -0
- package/.agents/gates/agents/skill.yaml +20 -0
- package/.agents/go_beast_practices/agents/claude.json +19 -0
- package/.agents/go_beast_practices/agents/copilot.json +19 -0
- package/.agents/go_beast_practices/agents/gemini.json +19 -0
- package/.agents/go_beast_practices/agents/openai.yaml +8 -0
- package/.agents/go_beast_practices/agents/qwen.json +19 -0
- package/.agents/go_beast_practices/agents/skill.yaml +23 -0
- package/.agents/google_stitch_skill/SKILL.md +553 -0
- package/.agents/google_stitch_skill/agents/claude.json +19 -0
- package/.agents/google_stitch_skill/agents/copilot.json +19 -0
- package/.agents/google_stitch_skill/agents/gemini.json +19 -0
- package/.agents/google_stitch_skill/agents/openai.yaml +8 -0
- package/.agents/google_stitch_skill/agents/qwen.json +19 -0
- package/.agents/google_stitch_skill/agents/skill.yaml +23 -0
- package/.agents/google_stitch_skill/examples/scr_prompts.md +125 -0
- package/.agents/google_stitch_skill/resources/budget_planner.md +35 -0
- package/.agents/handoff/agents/claude.json +16 -0
- package/.agents/handoff/agents/copilot.json +16 -0
- package/.agents/handoff/agents/gemini.json +16 -0
- package/.agents/handoff/agents/openai.yaml +8 -0
- package/.agents/handoff/agents/qwen.json +16 -0
- package/.agents/handoff/agents/skill.yaml +20 -0
- package/.agents/k8s_manifests_conventions/agents/claude.json +19 -0
- package/.agents/k8s_manifests_conventions/agents/copilot.json +19 -0
- package/.agents/k8s_manifests_conventions/agents/gemini.json +19 -0
- package/.agents/k8s_manifests_conventions/agents/openai.yaml +8 -0
- package/.agents/k8s_manifests_conventions/agents/qwen.json +19 -0
- package/.agents/k8s_manifests_conventions/agents/skill.yaml +23 -0
- package/.agents/memory/agents/claude.json +16 -0
- package/.agents/memory/agents/copilot.json +16 -0
- package/.agents/memory/agents/gemini.json +16 -0
- package/.agents/memory/agents/openai.yaml +8 -0
- package/.agents/memory/agents/qwen.json +16 -0
- package/.agents/memory/agents/skill.yaml +20 -0
- package/.agents/mongodb_mongoose_best_practices/agents/claude.json +20 -0
- package/.agents/mongodb_mongoose_best_practices/agents/copilot.json +20 -0
- package/.agents/mongodb_mongoose_best_practices/agents/gemini.json +20 -0
- package/.agents/mongodb_mongoose_best_practices/agents/openai.yaml +8 -0
- package/.agents/mongodb_mongoose_best_practices/agents/qwen.json +20 -0
- package/.agents/mongodb_mongoose_best_practices/agents/skill.yaml +24 -0
- package/.agents/n8n_pinecone_qdrant_supabase/SKILL.md +0 -2
- package/.agents/n8n_pinecone_qdrant_supabase/agents/claude.json +20 -0
- package/.agents/n8n_pinecone_qdrant_supabase/agents/copilot.json +20 -0
- package/.agents/n8n_pinecone_qdrant_supabase/agents/gemini.json +20 -0
- package/.agents/n8n_pinecone_qdrant_supabase/agents/openai.yaml +8 -0
- package/.agents/n8n_pinecone_qdrant_supabase/agents/qwen.json +20 -0
- package/.agents/n8n_pinecone_qdrant_supabase/agents/skill.yaml +24 -0
- package/.agents/node_express_beast_practices/agents/claude.json +20 -0
- package/.agents/node_express_beast_practices/agents/copilot.json +20 -0
- package/.agents/node_express_beast_practices/agents/gemini.json +20 -0
- package/.agents/node_express_beast_practices/agents/openai.yaml +8 -0
- package/.agents/node_express_beast_practices/agents/qwen.json +20 -0
- package/.agents/node_express_beast_practices/agents/skill.yaml +24 -0
- package/.agents/observability_logging/agents/claude.json +18 -0
- package/.agents/observability_logging/agents/copilot.json +18 -0
- package/.agents/observability_logging/agents/gemini.json +18 -0
- package/.agents/observability_logging/agents/openai.yaml +8 -0
- package/.agents/observability_logging/agents/qwen.json +18 -0
- package/.agents/observability_logging/agents/skill.yaml +22 -0
- package/.agents/observability_plan/agents/claude.json +17 -0
- package/.agents/observability_plan/agents/copilot.json +17 -0
- package/.agents/observability_plan/agents/gemini.json +17 -0
- package/.agents/observability_plan/agents/openai.yaml +8 -0
- package/.agents/observability_plan/agents/qwen.json +17 -0
- package/.agents/observability_plan/agents/skill.yaml +21 -0
- package/.agents/observability_review/agents/claude.json +18 -0
- package/.agents/observability_review/agents/copilot.json +18 -0
- package/.agents/observability_review/agents/gemini.json +18 -0
- package/.agents/observability_review/agents/openai.yaml +8 -0
- package/.agents/observability_review/agents/qwen.json +18 -0
- package/.agents/observability_review/agents/skill.yaml +22 -0
- package/.agents/performance_review_baseline/agents/claude.json +19 -0
- package/.agents/performance_review_baseline/agents/copilot.json +19 -0
- package/.agents/performance_review_baseline/agents/gemini.json +19 -0
- package/.agents/performance_review_baseline/agents/openai.yaml +8 -0
- package/.agents/performance_review_baseline/agents/qwen.json +19 -0
- package/.agents/performance_review_baseline/agents/skill.yaml +23 -0
- package/.agents/pm_backlog/agents/claude.json +18 -0
- package/.agents/pm_backlog/agents/copilot.json +18 -0
- package/.agents/pm_backlog/agents/gemini.json +18 -0
- package/.agents/pm_backlog/agents/openai.yaml +8 -0
- package/.agents/pm_backlog/agents/qwen.json +18 -0
- package/.agents/pm_backlog/agents/skill.yaml +22 -0
- package/.agents/pm_interview/agents/claude.json +18 -0
- package/.agents/pm_interview/agents/copilot.json +18 -0
- package/.agents/pm_interview/agents/gemini.json +18 -0
- package/.agents/pm_interview/agents/openai.yaml +8 -0
- package/.agents/pm_interview/agents/qwen.json +18 -0
- package/.agents/pm_interview/agents/skill.yaml +22 -0
- package/.agents/pm_prd/agents/claude.json +18 -0
- package/.agents/pm_prd/agents/copilot.json +18 -0
- package/.agents/pm_prd/agents/gemini.json +18 -0
- package/.agents/pm_prd/agents/openai.yaml +8 -0
- package/.agents/pm_prd/agents/qwen.json +18 -0
- package/.agents/pm_prd/agents/skill.yaml +22 -0
- package/.agents/qa_api_contract_tests/agents/claude.json +20 -0
- package/.agents/qa_api_contract_tests/agents/copilot.json +20 -0
- package/.agents/qa_api_contract_tests/agents/gemini.json +20 -0
- package/.agents/qa_api_contract_tests/agents/openai.yaml +8 -0
- package/.agents/qa_api_contract_tests/agents/qwen.json +20 -0
- package/.agents/qa_api_contract_tests/agents/skill.yaml +24 -0
- package/.agents/qa_browser_testing/SKILL.md +255 -0
- package/.agents/qa_browser_testing/agents/claude.json +19 -0
- package/.agents/qa_browser_testing/agents/copilot.json +19 -0
- package/.agents/qa_browser_testing/agents/gemini.json +19 -0
- package/.agents/qa_browser_testing/agents/openai.yaml +8 -0
- package/.agents/qa_browser_testing/agents/qwen.json +19 -0
- package/.agents/qa_browser_testing/agents/skill.yaml +23 -0
- package/.agents/qa_e2e_playwright/SKILL.md +313 -0
- package/.agents/qa_e2e_playwright/agents/claude.json +19 -0
- package/.agents/qa_e2e_playwright/agents/copilot.json +19 -0
- package/.agents/qa_e2e_playwright/agents/gemini.json +19 -0
- package/.agents/qa_e2e_playwright/agents/openai.yaml +8 -0
- package/.agents/qa_e2e_playwright/agents/qwen.json +19 -0
- package/.agents/qa_e2e_playwright/agents/skill.yaml +23 -0
- package/.agents/qa_manual_run/agents/claude.json +19 -0
- package/.agents/qa_manual_run/agents/copilot.json +19 -0
- package/.agents/qa_manual_run/agents/gemini.json +19 -0
- package/.agents/qa_manual_run/agents/openai.yaml +8 -0
- package/.agents/qa_manual_run/agents/qwen.json +19 -0
- package/.agents/qa_manual_run/agents/skill.yaml +23 -0
- package/.agents/qa_security_smoke_tests/agents/claude.json +20 -0
- package/.agents/qa_security_smoke_tests/agents/copilot.json +20 -0
- package/.agents/qa_security_smoke_tests/agents/gemini.json +20 -0
- package/.agents/qa_security_smoke_tests/agents/openai.yaml +8 -0
- package/.agents/qa_security_smoke_tests/agents/qwen.json +20 -0
- package/.agents/qa_security_smoke_tests/agents/skill.yaml +24 -0
- package/.agents/qa_test_plan/agents/claude.json +19 -0
- package/.agents/qa_test_plan/agents/copilot.json +19 -0
- package/.agents/qa_test_plan/agents/gemini.json +19 -0
- package/.agents/qa_test_plan/agents/openai.yaml +8 -0
- package/.agents/qa_test_plan/agents/qwen.json +19 -0
- package/.agents/qa_test_plan/agents/skill.yaml +23 -0
- package/.agents/qa_ui_a11y_smoke/agents/claude.json +20 -0
- package/.agents/qa_ui_a11y_smoke/agents/copilot.json +20 -0
- package/.agents/qa_ui_a11y_smoke/agents/gemini.json +20 -0
- package/.agents/qa_ui_a11y_smoke/agents/openai.yaml +8 -0
- package/.agents/qa_ui_a11y_smoke/agents/qwen.json +20 -0
- package/.agents/qa_ui_a11y_smoke/agents/skill.yaml +24 -0
- package/.agents/react_15_3_wix_iframe/agents/claude.json +21 -0
- package/.agents/react_15_3_wix_iframe/agents/copilot.json +21 -0
- package/.agents/react_15_3_wix_iframe/agents/gemini.json +21 -0
- package/.agents/react_15_3_wix_iframe/agents/openai.yaml +8 -0
- package/.agents/react_15_3_wix_iframe/agents/qwen.json +21 -0
- package/.agents/react_15_3_wix_iframe/agents/skill.yaml +25 -0
- package/.agents/react_beast_practices/agents/claude.json +19 -0
- package/.agents/react_beast_practices/agents/copilot.json +19 -0
- package/.agents/react_beast_practices/agents/gemini.json +19 -0
- package/.agents/react_beast_practices/agents/openai.yaml +8 -0
- package/.agents/react_beast_practices/agents/qwen.json +19 -0
- package/.agents/react_beast_practices/agents/skill.yaml +23 -0
- package/.agents/release_gate/agents/claude.json +18 -0
- package/.agents/release_gate/agents/copilot.json +18 -0
- package/.agents/release_gate/agents/gemini.json +18 -0
- package/.agents/release_gate/agents/openai.yaml +8 -0
- package/.agents/release_gate/agents/qwen.json +18 -0
- package/.agents/release_gate/agents/skill.yaml +22 -0
- package/.agents/release_gate_checklist_template/agents/claude.json +20 -0
- package/.agents/release_gate_checklist_template/agents/copilot.json +20 -0
- package/.agents/release_gate_checklist_template/agents/gemini.json +20 -0
- package/.agents/release_gate_checklist_template/agents/openai.yaml +8 -0
- package/.agents/release_gate_checklist_template/agents/qwen.json +20 -0
- package/.agents/release_gate_checklist_template/agents/skill.yaml +24 -0
- package/.agents/review_reference_snippets/agents/claude.json +19 -0
- package/.agents/review_reference_snippets/agents/copilot.json +19 -0
- package/.agents/review_reference_snippets/agents/gemini.json +19 -0
- package/.agents/review_reference_snippets/agents/openai.yaml +8 -0
- package/.agents/review_reference_snippets/agents/qwen.json +19 -0
- package/.agents/review_reference_snippets/agents/skill.yaml +23 -0
- package/.agents/security_baseline_dev/agents/claude.json +19 -0
- package/.agents/security_baseline_dev/agents/copilot.json +19 -0
- package/.agents/security_baseline_dev/agents/gemini.json +19 -0
- package/.agents/security_baseline_dev/agents/openai.yaml +8 -0
- package/.agents/security_baseline_dev/agents/qwen.json +19 -0
- package/.agents/security_baseline_dev/agents/skill.yaml +23 -0
- package/.agents/security_review/agents/claude.json +18 -0
- package/.agents/security_review/agents/copilot.json +18 -0
- package/.agents/security_review/agents/gemini.json +18 -0
- package/.agents/security_review/agents/openai.yaml +8 -0
- package/.agents/security_review/agents/qwen.json +18 -0
- package/.agents/security_review/agents/skill.yaml +22 -0
- package/.agents/security_review_baseline/agents/claude.json +19 -0
- package/.agents/security_review_baseline/agents/copilot.json +19 -0
- package/.agents/security_review_baseline/agents/gemini.json +19 -0
- package/.agents/security_review_baseline/agents/openai.yaml +8 -0
- package/.agents/security_review_baseline/agents/qwen.json +19 -0
- package/.agents/security_review_baseline/agents/skill.yaml +23 -0
- package/.agents/state_rtk_beast_practices/agents/claude.json +20 -0
- package/.agents/state_rtk_beast_practices/agents/copilot.json +20 -0
- package/.agents/state_rtk_beast_practices/agents/gemini.json +20 -0
- package/.agents/state_rtk_beast_practices/agents/openai.yaml +8 -0
- package/.agents/state_rtk_beast_practices/agents/qwen.json +20 -0
- package/.agents/state_rtk_beast_practices/agents/skill.yaml +24 -0
- package/.agents/state_zustand_beast_practices/agents/claude.json +20 -0
- package/.agents/state_zustand_beast_practices/agents/copilot.json +20 -0
- package/.agents/state_zustand_beast_practices/agents/gemini.json +20 -0
- package/.agents/state_zustand_beast_practices/agents/openai.yaml +8 -0
- package/.agents/state_zustand_beast_practices/agents/qwen.json +20 -0
- package/.agents/state_zustand_beast_practices/agents/skill.yaml +24 -0
- package/.agents/styling_css_stack/agents/claude.json +19 -0
- package/.agents/styling_css_stack/agents/copilot.json +19 -0
- package/.agents/styling_css_stack/agents/gemini.json +19 -0
- package/.agents/styling_css_stack/agents/openai.yaml +8 -0
- package/.agents/styling_css_stack/agents/qwen.json +19 -0
- package/.agents/styling_css_stack/agents/skill.yaml +23 -0
- package/.agents/system_design_checklist/agents/claude.json +18 -0
- package/.agents/system_design_checklist/agents/copilot.json +18 -0
- package/.agents/system_design_checklist/agents/gemini.json +18 -0
- package/.agents/system_design_checklist/agents/openai.yaml +8 -0
- package/.agents/system_design_checklist/agents/qwen.json +18 -0
- package/.agents/system_design_checklist/agents/skill.yaml +22 -0
- package/.agents/tanstack_beast_practices/agents/claude.json +19 -0
- package/.agents/tanstack_beast_practices/agents/copilot.json +19 -0
- package/.agents/tanstack_beast_practices/agents/gemini.json +19 -0
- package/.agents/tanstack_beast_practices/agents/openai.yaml +8 -0
- package/.agents/tanstack_beast_practices/agents/qwen.json +19 -0
- package/.agents/tanstack_beast_practices/agents/skill.yaml +23 -0
- package/.agents/tdd_workflow/agents/claude.json +18 -0
- package/.agents/tdd_workflow/agents/copilot.json +18 -0
- package/.agents/tdd_workflow/agents/gemini.json +18 -0
- package/.agents/tdd_workflow/agents/openai.yaml +8 -0
- package/.agents/tdd_workflow/agents/qwen.json +18 -0
- package/.agents/tdd_workflow/agents/skill.yaml +22 -0
- package/.agents/testing_strategy_js/agents/claude.json +19 -0
- package/.agents/testing_strategy_js/agents/copilot.json +19 -0
- package/.agents/testing_strategy_js/agents/gemini.json +19 -0
- package/.agents/testing_strategy_js/agents/openai.yaml +8 -0
- package/.agents/testing_strategy_js/agents/qwen.json +19 -0
- package/.agents/testing_strategy_js/agents/skill.yaml +23 -0
- package/.agents/tests_quality_review/agents/claude.json +19 -0
- package/.agents/tests_quality_review/agents/copilot.json +19 -0
- package/.agents/tests_quality_review/agents/gemini.json +19 -0
- package/.agents/tests_quality_review/agents/openai.yaml +8 -0
- package/.agents/tests_quality_review/agents/qwen.json +19 -0
- package/.agents/tests_quality_review/agents/skill.yaml +23 -0
- package/.agents/threat_model_baseline/agents/claude.json +19 -0
- package/.agents/threat_model_baseline/agents/copilot.json +19 -0
- package/.agents/threat_model_baseline/agents/gemini.json +19 -0
- package/.agents/threat_model_baseline/agents/openai.yaml +8 -0
- package/.agents/threat_model_baseline/agents/qwen.json +19 -0
- package/.agents/threat_model_baseline/agents/skill.yaml +23 -0
- package/.agents/tooling_bun_biome/agents/claude.json +19 -0
- package/.agents/tooling_bun_biome/agents/copilot.json +19 -0
- package/.agents/tooling_bun_biome/agents/gemini.json +19 -0
- package/.agents/tooling_bun_biome/agents/openai.yaml +8 -0
- package/.agents/tooling_bun_biome/agents/qwen.json +19 -0
- package/.agents/tooling_bun_biome/agents/skill.yaml +23 -0
- package/.agents/typescript_beast_practices/agents/claude.json +19 -0
- package/.agents/typescript_beast_practices/agents/copilot.json +19 -0
- package/.agents/typescript_beast_practices/agents/gemini.json +19 -0
- package/.agents/typescript_beast_practices/agents/openai.yaml +8 -0
- package/.agents/typescript_beast_practices/agents/qwen.json +19 -0
- package/.agents/typescript_beast_practices/agents/skill.yaml +23 -0
- package/.agents/ui_a11y_smoke_review/agents/claude.json +20 -0
- package/.agents/ui_a11y_smoke_review/agents/copilot.json +20 -0
- package/.agents/ui_a11y_smoke_review/agents/gemini.json +20 -0
- package/.agents/ui_a11y_smoke_review/agents/openai.yaml +8 -0
- package/.agents/ui_a11y_smoke_review/agents/qwen.json +20 -0
- package/.agents/ui_a11y_smoke_review/agents/skill.yaml +24 -0
- package/.agents/ui_inventory/agents/claude.json +18 -0
- package/.agents/ui_inventory/agents/copilot.json +18 -0
- package/.agents/ui_inventory/agents/gemini.json +18 -0
- package/.agents/ui_inventory/agents/openai.yaml +8 -0
- package/.agents/ui_inventory/agents/qwen.json +18 -0
- package/.agents/ui_inventory/agents/skill.yaml +22 -0
- package/.agents/ux_discovery/agents/claude.json +17 -0
- package/.agents/ux_discovery/agents/copilot.json +17 -0
- package/.agents/ux_discovery/agents/gemini.json +17 -0
- package/.agents/ux_discovery/agents/openai.yaml +8 -0
- package/.agents/ux_discovery/agents/qwen.json +17 -0
- package/.agents/ux_discovery/agents/skill.yaml +21 -0
- package/.agents/ux_spec/agents/claude.json +18 -0
- package/.agents/ux_spec/agents/copilot.json +18 -0
- package/.agents/ux_spec/agents/gemini.json +18 -0
- package/.agents/ux_spec/agents/openai.yaml +8 -0
- package/.agents/ux_spec/agents/qwen.json +18 -0
- package/.agents/ux_spec/agents/skill.yaml +22 -0
- package/.agents/wix_iframe_sdk/SKILL.md +1 -3
- package/.agents/wix_iframe_sdk/agents/claude.json +18 -0
- package/.agents/wix_iframe_sdk/agents/copilot.json +18 -0
- package/.agents/wix_iframe_sdk/agents/gemini.json +18 -0
- package/.agents/wix_iframe_sdk/agents/openai.yaml +8 -0
- package/.agents/wix_iframe_sdk/agents/qwen.json +18 -0
- package/.agents/wix_iframe_sdk/agents/skill.yaml +22 -0
- package/.agents/wix_self_hosted_embedded_script/agents/claude.json +21 -0
- package/.agents/wix_self_hosted_embedded_script/agents/copilot.json +21 -0
- package/.agents/wix_self_hosted_embedded_script/agents/gemini.json +21 -0
- package/.agents/wix_self_hosted_embedded_script/agents/openai.yaml +8 -0
- package/.agents/wix_self_hosted_embedded_script/agents/qwen.json +21 -0
- package/.agents/wix_self_hosted_embedded_script/agents/skill.yaml +25 -0
- package/.agents/workflows/auto-restart-containers.md +51 -0
- package/.agents/workflows/pipeline-rules.md +137 -0
- package/.agents/workflows/start-task.md +121 -0
- package/AGENTS.md +3 -0
- package/AGENTS.yaml +105 -0
- package/README.md +2 -2
- package/agents/architect.md +193 -126
- package/agents/conductor.md +314 -213
- package/agents/devops.md +260 -0
- package/agents/orchestrator.claude.json +95 -0
- package/agents/orchestrator.copilot.json +95 -0
- package/agents/orchestrator.gemini.json +95 -0
- package/agents/orchestrator.openai.yaml +92 -0
- package/agents/orchestrator.qwen.json +95 -0
- package/agents/product_manager.md +209 -121
- package/agents/reviewer.md +247 -194
- package/agents/senior_full_stack.md +210 -105
- package/agents/tester.md +318 -185
- package/agents/ux_ui_designer.md +179 -48
- package/dist/doctor.js +6 -1
- package/dist/installer.js +4 -0
- package/dist/metadataAudit.d.ts +15 -0
- package/dist/metadataAudit.js +277 -0
- package/dist/platforms/adapters.js +32 -5
- package/dist/platforms/metadataSidecars.d.ts +55 -0
- package/dist/platforms/metadataSidecars.js +96 -0
- package/dist/types.d.ts +1 -0
- package/locales/en/.agents/a11y_baseline/agents/claude.json +17 -0
- package/locales/en/.agents/a11y_baseline/agents/copilot.json +17 -0
- package/locales/en/.agents/a11y_baseline/agents/gemini.json +17 -0
- package/locales/en/.agents/a11y_baseline/agents/openai.yaml +8 -0
- package/locales/en/.agents/a11y_baseline/agents/qwen.json +17 -0
- package/locales/en/.agents/a11y_baseline/agents/skill.yaml +21 -0
- package/locales/en/.agents/adr_log/agents/claude.json +18 -0
- package/locales/en/.agents/adr_log/agents/copilot.json +18 -0
- package/locales/en/.agents/adr_log/agents/gemini.json +18 -0
- package/locales/en/.agents/adr_log/agents/openai.yaml +8 -0
- package/locales/en/.agents/adr_log/agents/qwen.json +18 -0
- package/locales/en/.agents/adr_log/agents/skill.yaml +22 -0
- package/locales/en/.agents/api_contract_compliance_review/agents/claude.json +19 -0
- package/locales/en/.agents/api_contract_compliance_review/agents/copilot.json +19 -0
- package/locales/en/.agents/api_contract_compliance_review/agents/gemini.json +19 -0
- package/locales/en/.agents/api_contract_compliance_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/api_contract_compliance_review/agents/qwen.json +19 -0
- package/locales/en/.agents/api_contract_compliance_review/agents/skill.yaml +23 -0
- package/locales/en/.agents/api_contracts/agents/claude.json +17 -0
- package/locales/en/.agents/api_contracts/agents/copilot.json +17 -0
- package/locales/en/.agents/api_contracts/agents/gemini.json +17 -0
- package/locales/en/.agents/api_contracts/agents/openai.yaml +8 -0
- package/locales/en/.agents/api_contracts/agents/qwen.json +17 -0
- package/locales/en/.agents/api_contracts/agents/skill.yaml +21 -0
- package/locales/en/.agents/architecture_compliance_review/agents/claude.json +18 -0
- package/locales/en/.agents/architecture_compliance_review/agents/copilot.json +18 -0
- package/locales/en/.agents/architecture_compliance_review/agents/gemini.json +18 -0
- package/locales/en/.agents/architecture_compliance_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/architecture_compliance_review/agents/qwen.json +18 -0
- package/locales/en/.agents/architecture_compliance_review/agents/skill.yaml +22 -0
- package/locales/en/.agents/architecture_doc/agents/claude.json +18 -0
- package/locales/en/.agents/architecture_doc/agents/copilot.json +18 -0
- package/locales/en/.agents/architecture_doc/agents/gemini.json +18 -0
- package/locales/en/.agents/architecture_doc/agents/openai.yaml +8 -0
- package/locales/en/.agents/architecture_doc/agents/qwen.json +18 -0
- package/locales/en/.agents/architecture_doc/agents/skill.yaml +22 -0
- package/locales/en/.agents/board/agents/claude.json +16 -0
- package/locales/en/.agents/board/agents/copilot.json +16 -0
- package/locales/en/.agents/board/agents/gemini.json +16 -0
- package/locales/en/.agents/board/agents/openai.yaml +8 -0
- package/locales/en/.agents/board/agents/qwen.json +16 -0
- package/locales/en/.agents/board/agents/skill.yaml +20 -0
- package/locales/en/.agents/cloud_infrastructure_security/agents/claude.json +18 -0
- package/locales/en/.agents/cloud_infrastructure_security/agents/copilot.json +18 -0
- package/locales/en/.agents/cloud_infrastructure_security/agents/gemini.json +18 -0
- package/locales/en/.agents/cloud_infrastructure_security/agents/openai.yaml +8 -0
- package/locales/en/.agents/cloud_infrastructure_security/agents/qwen.json +18 -0
- package/locales/en/.agents/cloud_infrastructure_security/agents/skill.yaml +22 -0
- package/locales/en/.agents/code_review_checklist/agents/claude.json +18 -0
- package/locales/en/.agents/code_review_checklist/agents/copilot.json +18 -0
- package/locales/en/.agents/code_review_checklist/agents/gemini.json +18 -0
- package/locales/en/.agents/code_review_checklist/agents/openai.yaml +8 -0
- package/locales/en/.agents/code_review_checklist/agents/qwen.json +18 -0
- package/locales/en/.agents/code_review_checklist/agents/skill.yaml +22 -0
- package/locales/en/.agents/current_state_analysis/agents/claude.json +18 -0
- package/locales/en/.agents/current_state_analysis/agents/copilot.json +18 -0
- package/locales/en/.agents/current_state_analysis/agents/gemini.json +18 -0
- package/locales/en/.agents/current_state_analysis/agents/openai.yaml +8 -0
- package/locales/en/.agents/current_state_analysis/agents/qwen.json +18 -0
- package/locales/en/.agents/current_state_analysis/agents/skill.yaml +22 -0
- package/locales/en/.agents/data_model/agents/claude.json +17 -0
- package/locales/en/.agents/data_model/agents/copilot.json +17 -0
- package/locales/en/.agents/data_model/agents/gemini.json +17 -0
- package/locales/en/.agents/data_model/agents/openai.yaml +8 -0
- package/locales/en/.agents/data_model/agents/qwen.json +17 -0
- package/locales/en/.agents/data_model/agents/skill.yaml +21 -0
- package/locales/en/.agents/dependency_supply_chain_review/agents/claude.json +19 -0
- package/locales/en/.agents/dependency_supply_chain_review/agents/copilot.json +19 -0
- package/locales/en/.agents/dependency_supply_chain_review/agents/gemini.json +19 -0
- package/locales/en/.agents/dependency_supply_chain_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/dependency_supply_chain_review/agents/qwen.json +19 -0
- package/locales/en/.agents/dependency_supply_chain_review/agents/skill.yaml +23 -0
- package/locales/en/.agents/deployment_ci_plan/agents/claude.json +19 -0
- package/locales/en/.agents/deployment_ci_plan/agents/copilot.json +19 -0
- package/locales/en/.agents/deployment_ci_plan/agents/gemini.json +19 -0
- package/locales/en/.agents/deployment_ci_plan/agents/openai.yaml +8 -0
- package/locales/en/.agents/deployment_ci_plan/agents/qwen.json +19 -0
- package/locales/en/.agents/deployment_ci_plan/agents/skill.yaml +23 -0
- package/locales/en/.agents/design_intake/agents/claude.json +18 -0
- package/locales/en/.agents/design_intake/agents/copilot.json +18 -0
- package/locales/en/.agents/design_intake/agents/gemini.json +18 -0
- package/locales/en/.agents/design_intake/agents/openai.yaml +8 -0
- package/locales/en/.agents/design_intake/agents/qwen.json +18 -0
- package/locales/en/.agents/design_intake/agents/skill.yaml +22 -0
- package/locales/en/.agents/design_parity_review/SKILL.md +55 -85
- package/locales/en/.agents/design_parity_review/agents/claude.json +19 -0
- package/locales/en/.agents/design_parity_review/agents/copilot.json +19 -0
- package/locales/en/.agents/design_parity_review/agents/gemini.json +19 -0
- package/locales/en/.agents/design_parity_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/design_parity_review/agents/qwen.json +19 -0
- package/locales/en/.agents/design_parity_review/agents/skill.yaml +23 -0
- package/locales/en/.agents/design_systems/agents/claude.json +18 -0
- package/locales/en/.agents/design_systems/agents/copilot.json +18 -0
- package/locales/en/.agents/design_systems/agents/gemini.json +18 -0
- package/locales/en/.agents/design_systems/agents/openai.yaml +8 -0
- package/locales/en/.agents/design_systems/agents/qwen.json +18 -0
- package/locales/en/.agents/design_systems/agents/skill.yaml +22 -0
- package/locales/en/.agents/dev_reference_snippets/agents/claude.json +19 -0
- package/locales/en/.agents/dev_reference_snippets/agents/copilot.json +19 -0
- package/locales/en/.agents/dev_reference_snippets/agents/gemini.json +19 -0
- package/locales/en/.agents/dev_reference_snippets/agents/openai.yaml +8 -0
- package/locales/en/.agents/dev_reference_snippets/agents/qwen.json +19 -0
- package/locales/en/.agents/dev_reference_snippets/agents/skill.yaml +23 -0
- package/locales/en/.agents/docker_kubernetes_architecture/agents/claude.json +18 -0
- package/locales/en/.agents/docker_kubernetes_architecture/agents/copilot.json +18 -0
- package/locales/en/.agents/docker_kubernetes_architecture/agents/gemini.json +18 -0
- package/locales/en/.agents/docker_kubernetes_architecture/agents/openai.yaml +8 -0
- package/locales/en/.agents/docker_kubernetes_architecture/agents/qwen.json +18 -0
- package/locales/en/.agents/docker_kubernetes_architecture/agents/skill.yaml +22 -0
- package/locales/en/.agents/es2025_beast_practices/agents/claude.json +18 -0
- package/locales/en/.agents/es2025_beast_practices/agents/copilot.json +18 -0
- package/locales/en/.agents/es2025_beast_practices/agents/gemini.json +18 -0
- package/locales/en/.agents/es2025_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/es2025_beast_practices/agents/qwen.json +18 -0
- package/locales/en/.agents/es2025_beast_practices/agents/skill.yaml +22 -0
- package/locales/en/.agents/gates/agents/claude.json +16 -0
- package/locales/en/.agents/gates/agents/copilot.json +16 -0
- package/locales/en/.agents/gates/agents/gemini.json +16 -0
- package/locales/en/.agents/gates/agents/openai.yaml +8 -0
- package/locales/en/.agents/gates/agents/qwen.json +16 -0
- package/locales/en/.agents/gates/agents/skill.yaml +20 -0
- package/locales/en/.agents/go_beast_practices/agents/claude.json +18 -0
- package/locales/en/.agents/go_beast_practices/agents/copilot.json +18 -0
- package/locales/en/.agents/go_beast_practices/agents/gemini.json +18 -0
- package/locales/en/.agents/go_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/go_beast_practices/agents/qwen.json +18 -0
- package/locales/en/.agents/go_beast_practices/agents/skill.yaml +22 -0
- package/locales/en/.agents/google_stitch_skill/SKILL.md +117 -0
- package/locales/en/.agents/google_stitch_skill/agents/claude.json +19 -0
- package/locales/en/.agents/google_stitch_skill/agents/copilot.json +19 -0
- package/locales/en/.agents/google_stitch_skill/agents/gemini.json +19 -0
- package/locales/en/.agents/google_stitch_skill/agents/openai.yaml +8 -0
- package/locales/en/.agents/google_stitch_skill/agents/qwen.json +19 -0
- package/locales/en/.agents/google_stitch_skill/agents/skill.yaml +23 -0
- package/locales/en/.agents/google_stitch_skill/examples/scr_prompts.md +21 -0
- package/locales/en/.agents/google_stitch_skill/resources/budget_planner.md +23 -0
- package/locales/en/.agents/handoff/agents/claude.json +16 -0
- package/locales/en/.agents/handoff/agents/copilot.json +16 -0
- package/locales/en/.agents/handoff/agents/gemini.json +16 -0
- package/locales/en/.agents/handoff/agents/openai.yaml +8 -0
- package/locales/en/.agents/handoff/agents/qwen.json +16 -0
- package/locales/en/.agents/handoff/agents/skill.yaml +20 -0
- package/locales/en/.agents/k8s_manifests_conventions/agents/claude.json +18 -0
- package/locales/en/.agents/k8s_manifests_conventions/agents/copilot.json +18 -0
- package/locales/en/.agents/k8s_manifests_conventions/agents/gemini.json +18 -0
- package/locales/en/.agents/k8s_manifests_conventions/agents/openai.yaml +8 -0
- package/locales/en/.agents/k8s_manifests_conventions/agents/qwen.json +18 -0
- package/locales/en/.agents/k8s_manifests_conventions/agents/skill.yaml +22 -0
- package/locales/en/.agents/memory/agents/claude.json +15 -0
- package/locales/en/.agents/memory/agents/copilot.json +15 -0
- package/locales/en/.agents/memory/agents/gemini.json +15 -0
- package/locales/en/.agents/memory/agents/openai.yaml +8 -0
- package/locales/en/.agents/memory/agents/qwen.json +15 -0
- package/locales/en/.agents/memory/agents/skill.yaml +19 -0
- package/locales/en/.agents/mongodb_mongoose_best_practices/agents/claude.json +20 -0
- package/locales/en/.agents/mongodb_mongoose_best_practices/agents/copilot.json +20 -0
- package/locales/en/.agents/mongodb_mongoose_best_practices/agents/gemini.json +20 -0
- package/locales/en/.agents/mongodb_mongoose_best_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/mongodb_mongoose_best_practices/agents/qwen.json +20 -0
- package/locales/en/.agents/mongodb_mongoose_best_practices/agents/skill.yaml +24 -0
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/SKILL.md +0 -2
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/claude.json +20 -0
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/copilot.json +20 -0
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/gemini.json +20 -0
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/openai.yaml +8 -0
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/qwen.json +20 -0
- package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/skill.yaml +24 -0
- package/locales/en/.agents/node_express_beast_practices/agents/claude.json +20 -0
- package/locales/en/.agents/node_express_beast_practices/agents/copilot.json +20 -0
- package/locales/en/.agents/node_express_beast_practices/agents/gemini.json +20 -0
- package/locales/en/.agents/node_express_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/node_express_beast_practices/agents/qwen.json +20 -0
- package/locales/en/.agents/node_express_beast_practices/agents/skill.yaml +24 -0
- package/locales/en/.agents/observability_logging/agents/claude.json +17 -0
- package/locales/en/.agents/observability_logging/agents/copilot.json +17 -0
- package/locales/en/.agents/observability_logging/agents/gemini.json +17 -0
- package/locales/en/.agents/observability_logging/agents/openai.yaml +8 -0
- package/locales/en/.agents/observability_logging/agents/qwen.json +17 -0
- package/locales/en/.agents/observability_logging/agents/skill.yaml +21 -0
- package/locales/en/.agents/observability_plan/agents/claude.json +16 -0
- package/locales/en/.agents/observability_plan/agents/copilot.json +16 -0
- package/locales/en/.agents/observability_plan/agents/gemini.json +16 -0
- package/locales/en/.agents/observability_plan/agents/openai.yaml +8 -0
- package/locales/en/.agents/observability_plan/agents/qwen.json +16 -0
- package/locales/en/.agents/observability_plan/agents/skill.yaml +20 -0
- package/locales/en/.agents/observability_review/agents/claude.json +16 -0
- package/locales/en/.agents/observability_review/agents/copilot.json +16 -0
- package/locales/en/.agents/observability_review/agents/gemini.json +16 -0
- package/locales/en/.agents/observability_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/observability_review/agents/qwen.json +16 -0
- package/locales/en/.agents/observability_review/agents/skill.yaml +20 -0
- package/locales/en/.agents/performance_review_baseline/agents/claude.json +18 -0
- package/locales/en/.agents/performance_review_baseline/agents/copilot.json +18 -0
- package/locales/en/.agents/performance_review_baseline/agents/gemini.json +18 -0
- package/locales/en/.agents/performance_review_baseline/agents/openai.yaml +8 -0
- package/locales/en/.agents/performance_review_baseline/agents/qwen.json +18 -0
- package/locales/en/.agents/performance_review_baseline/agents/skill.yaml +22 -0
- package/locales/en/.agents/pm_backlog/agents/claude.json +18 -0
- package/locales/en/.agents/pm_backlog/agents/copilot.json +18 -0
- package/locales/en/.agents/pm_backlog/agents/gemini.json +18 -0
- package/locales/en/.agents/pm_backlog/agents/openai.yaml +8 -0
- package/locales/en/.agents/pm_backlog/agents/qwen.json +18 -0
- package/locales/en/.agents/pm_backlog/agents/skill.yaml +22 -0
- package/locales/en/.agents/pm_interview/agents/claude.json +17 -0
- package/locales/en/.agents/pm_interview/agents/copilot.json +17 -0
- package/locales/en/.agents/pm_interview/agents/gemini.json +17 -0
- package/locales/en/.agents/pm_interview/agents/openai.yaml +8 -0
- package/locales/en/.agents/pm_interview/agents/qwen.json +17 -0
- package/locales/en/.agents/pm_interview/agents/skill.yaml +21 -0
- package/locales/en/.agents/pm_prd/agents/claude.json +18 -0
- package/locales/en/.agents/pm_prd/agents/copilot.json +18 -0
- package/locales/en/.agents/pm_prd/agents/gemini.json +18 -0
- package/locales/en/.agents/pm_prd/agents/openai.yaml +8 -0
- package/locales/en/.agents/pm_prd/agents/qwen.json +18 -0
- package/locales/en/.agents/pm_prd/agents/skill.yaml +22 -0
- package/locales/en/.agents/qa_api_contract_tests/agents/claude.json +19 -0
- package/locales/en/.agents/qa_api_contract_tests/agents/copilot.json +19 -0
- package/locales/en/.agents/qa_api_contract_tests/agents/gemini.json +19 -0
- package/locales/en/.agents/qa_api_contract_tests/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_api_contract_tests/agents/qwen.json +19 -0
- package/locales/en/.agents/qa_api_contract_tests/agents/skill.yaml +23 -0
- package/locales/en/.agents/qa_browser_testing/SKILL.md +87 -0
- package/locales/en/.agents/qa_browser_testing/agents/claude.json +19 -0
- package/locales/en/.agents/qa_browser_testing/agents/copilot.json +19 -0
- package/locales/en/.agents/qa_browser_testing/agents/gemini.json +19 -0
- package/locales/en/.agents/qa_browser_testing/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_browser_testing/agents/qwen.json +19 -0
- package/locales/en/.agents/qa_browser_testing/agents/skill.yaml +23 -0
- package/locales/en/.agents/qa_e2e_playwright/SKILL.md +116 -0
- package/locales/en/.agents/qa_e2e_playwright/agents/claude.json +19 -0
- package/locales/en/.agents/qa_e2e_playwright/agents/copilot.json +19 -0
- package/locales/en/.agents/qa_e2e_playwright/agents/gemini.json +19 -0
- package/locales/en/.agents/qa_e2e_playwright/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_e2e_playwright/agents/qwen.json +19 -0
- package/locales/en/.agents/qa_e2e_playwright/agents/skill.yaml +23 -0
- package/locales/en/.agents/qa_manual_run/agents/claude.json +18 -0
- package/locales/en/.agents/qa_manual_run/agents/copilot.json +18 -0
- package/locales/en/.agents/qa_manual_run/agents/gemini.json +18 -0
- package/locales/en/.agents/qa_manual_run/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_manual_run/agents/qwen.json +18 -0
- package/locales/en/.agents/qa_manual_run/agents/skill.yaml +22 -0
- package/locales/en/.agents/qa_security_smoke_tests/agents/claude.json +19 -0
- package/locales/en/.agents/qa_security_smoke_tests/agents/copilot.json +19 -0
- package/locales/en/.agents/qa_security_smoke_tests/agents/gemini.json +19 -0
- package/locales/en/.agents/qa_security_smoke_tests/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_security_smoke_tests/agents/qwen.json +19 -0
- package/locales/en/.agents/qa_security_smoke_tests/agents/skill.yaml +23 -0
- package/locales/en/.agents/qa_test_plan/agents/claude.json +18 -0
- package/locales/en/.agents/qa_test_plan/agents/copilot.json +18 -0
- package/locales/en/.agents/qa_test_plan/agents/gemini.json +18 -0
- package/locales/en/.agents/qa_test_plan/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_test_plan/agents/qwen.json +18 -0
- package/locales/en/.agents/qa_test_plan/agents/skill.yaml +22 -0
- package/locales/en/.agents/qa_ui_a11y_smoke/agents/claude.json +19 -0
- package/locales/en/.agents/qa_ui_a11y_smoke/agents/copilot.json +19 -0
- package/locales/en/.agents/qa_ui_a11y_smoke/agents/gemini.json +19 -0
- package/locales/en/.agents/qa_ui_a11y_smoke/agents/openai.yaml +8 -0
- package/locales/en/.agents/qa_ui_a11y_smoke/agents/qwen.json +19 -0
- package/locales/en/.agents/qa_ui_a11y_smoke/agents/skill.yaml +23 -0
- package/locales/en/.agents/react_15_3_wix_iframe/agents/claude.json +21 -0
- package/locales/en/.agents/react_15_3_wix_iframe/agents/copilot.json +21 -0
- package/locales/en/.agents/react_15_3_wix_iframe/agents/gemini.json +21 -0
- package/locales/en/.agents/react_15_3_wix_iframe/agents/openai.yaml +8 -0
- package/locales/en/.agents/react_15_3_wix_iframe/agents/qwen.json +21 -0
- package/locales/en/.agents/react_15_3_wix_iframe/agents/skill.yaml +25 -0
- package/locales/en/.agents/react_beast_practices/agents/claude.json +18 -0
- package/locales/en/.agents/react_beast_practices/agents/copilot.json +18 -0
- package/locales/en/.agents/react_beast_practices/agents/gemini.json +18 -0
- package/locales/en/.agents/react_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/react_beast_practices/agents/qwen.json +18 -0
- package/locales/en/.agents/react_beast_practices/agents/skill.yaml +22 -0
- package/locales/en/.agents/release_gate/agents/claude.json +17 -0
- package/locales/en/.agents/release_gate/agents/copilot.json +17 -0
- package/locales/en/.agents/release_gate/agents/gemini.json +17 -0
- package/locales/en/.agents/release_gate/agents/openai.yaml +8 -0
- package/locales/en/.agents/release_gate/agents/qwen.json +17 -0
- package/locales/en/.agents/release_gate/agents/skill.yaml +21 -0
- package/locales/en/.agents/release_gate_checklist_template/agents/claude.json +20 -0
- package/locales/en/.agents/release_gate_checklist_template/agents/copilot.json +20 -0
- package/locales/en/.agents/release_gate_checklist_template/agents/gemini.json +20 -0
- package/locales/en/.agents/release_gate_checklist_template/agents/openai.yaml +8 -0
- package/locales/en/.agents/release_gate_checklist_template/agents/qwen.json +20 -0
- package/locales/en/.agents/release_gate_checklist_template/agents/skill.yaml +24 -0
- package/locales/en/.agents/review_reference_snippets/agents/claude.json +19 -0
- package/locales/en/.agents/review_reference_snippets/agents/copilot.json +19 -0
- package/locales/en/.agents/review_reference_snippets/agents/gemini.json +19 -0
- package/locales/en/.agents/review_reference_snippets/agents/openai.yaml +8 -0
- package/locales/en/.agents/review_reference_snippets/agents/qwen.json +19 -0
- package/locales/en/.agents/review_reference_snippets/agents/skill.yaml +23 -0
- package/locales/en/.agents/security_baseline_dev/agents/claude.json +19 -0
- package/locales/en/.agents/security_baseline_dev/agents/copilot.json +19 -0
- package/locales/en/.agents/security_baseline_dev/agents/gemini.json +19 -0
- package/locales/en/.agents/security_baseline_dev/agents/openai.yaml +8 -0
- package/locales/en/.agents/security_baseline_dev/agents/qwen.json +19 -0
- package/locales/en/.agents/security_baseline_dev/agents/skill.yaml +23 -0
- package/locales/en/.agents/security_review/agents/claude.json +18 -0
- package/locales/en/.agents/security_review/agents/copilot.json +18 -0
- package/locales/en/.agents/security_review/agents/gemini.json +18 -0
- package/locales/en/.agents/security_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/security_review/agents/qwen.json +18 -0
- package/locales/en/.agents/security_review/agents/skill.yaml +22 -0
- package/locales/en/.agents/security_review_baseline/SKILL.md +14 -14
- package/locales/en/.agents/security_review_baseline/agents/claude.json +18 -0
- package/locales/en/.agents/security_review_baseline/agents/copilot.json +18 -0
- package/locales/en/.agents/security_review_baseline/agents/gemini.json +18 -0
- package/locales/en/.agents/security_review_baseline/agents/openai.yaml +8 -0
- package/locales/en/.agents/security_review_baseline/agents/qwen.json +18 -0
- package/locales/en/.agents/security_review_baseline/agents/skill.yaml +22 -0
- package/locales/en/.agents/state_rtk_beast_practices/SKILL.md +8 -8
- package/locales/en/.agents/state_rtk_beast_practices/agents/claude.json +20 -0
- package/locales/en/.agents/state_rtk_beast_practices/agents/copilot.json +20 -0
- package/locales/en/.agents/state_rtk_beast_practices/agents/gemini.json +20 -0
- package/locales/en/.agents/state_rtk_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/state_rtk_beast_practices/agents/qwen.json +20 -0
- package/locales/en/.agents/state_rtk_beast_practices/agents/skill.yaml +24 -0
- package/locales/en/.agents/state_zustand_beast_practices/SKILL.md +5 -5
- package/locales/en/.agents/state_zustand_beast_practices/agents/claude.json +20 -0
- package/locales/en/.agents/state_zustand_beast_practices/agents/copilot.json +20 -0
- package/locales/en/.agents/state_zustand_beast_practices/agents/gemini.json +20 -0
- package/locales/en/.agents/state_zustand_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/state_zustand_beast_practices/agents/qwen.json +20 -0
- package/locales/en/.agents/state_zustand_beast_practices/agents/skill.yaml +24 -0
- package/locales/en/.agents/styling_css_stack/SKILL.md +6 -6
- package/locales/en/.agents/styling_css_stack/agents/claude.json +19 -0
- package/locales/en/.agents/styling_css_stack/agents/copilot.json +19 -0
- package/locales/en/.agents/styling_css_stack/agents/gemini.json +19 -0
- package/locales/en/.agents/styling_css_stack/agents/openai.yaml +8 -0
- package/locales/en/.agents/styling_css_stack/agents/qwen.json +19 -0
- package/locales/en/.agents/styling_css_stack/agents/skill.yaml +23 -0
- package/locales/en/.agents/system_design_checklist/SKILL.md +30 -30
- package/locales/en/.agents/system_design_checklist/agents/claude.json +17 -0
- package/locales/en/.agents/system_design_checklist/agents/copilot.json +17 -0
- package/locales/en/.agents/system_design_checklist/agents/gemini.json +17 -0
- package/locales/en/.agents/system_design_checklist/agents/openai.yaml +8 -0
- package/locales/en/.agents/system_design_checklist/agents/qwen.json +17 -0
- package/locales/en/.agents/system_design_checklist/agents/skill.yaml +21 -0
- package/locales/en/.agents/tanstack_beast_practices/SKILL.md +8 -8
- package/locales/en/.agents/tanstack_beast_practices/agents/claude.json +18 -0
- package/locales/en/.agents/tanstack_beast_practices/agents/copilot.json +18 -0
- package/locales/en/.agents/tanstack_beast_practices/agents/gemini.json +18 -0
- package/locales/en/.agents/tanstack_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/tanstack_beast_practices/agents/qwen.json +18 -0
- package/locales/en/.agents/tanstack_beast_practices/agents/skill.yaml +22 -0
- package/locales/en/.agents/tdd_workflow/SKILL.md +22 -22
- package/locales/en/.agents/tdd_workflow/agents/claude.json +17 -0
- package/locales/en/.agents/tdd_workflow/agents/copilot.json +17 -0
- package/locales/en/.agents/tdd_workflow/agents/gemini.json +17 -0
- package/locales/en/.agents/tdd_workflow/agents/openai.yaml +8 -0
- package/locales/en/.agents/tdd_workflow/agents/qwen.json +17 -0
- package/locales/en/.agents/tdd_workflow/agents/skill.yaml +21 -0
- package/locales/en/.agents/testing_strategy_js/SKILL.md +14 -14
- package/locales/en/.agents/testing_strategy_js/agents/claude.json +19 -0
- package/locales/en/.agents/testing_strategy_js/agents/copilot.json +19 -0
- package/locales/en/.agents/testing_strategy_js/agents/gemini.json +19 -0
- package/locales/en/.agents/testing_strategy_js/agents/openai.yaml +8 -0
- package/locales/en/.agents/testing_strategy_js/agents/qwen.json +19 -0
- package/locales/en/.agents/testing_strategy_js/agents/skill.yaml +23 -0
- package/locales/en/.agents/tests_quality_review/SKILL.md +11 -11
- package/locales/en/.agents/tests_quality_review/agents/claude.json +18 -0
- package/locales/en/.agents/tests_quality_review/agents/copilot.json +18 -0
- package/locales/en/.agents/tests_quality_review/agents/gemini.json +18 -0
- package/locales/en/.agents/tests_quality_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/tests_quality_review/agents/qwen.json +18 -0
- package/locales/en/.agents/tests_quality_review/agents/skill.yaml +22 -0
- package/locales/en/.agents/threat_model_baseline/SKILL.md +35 -35
- package/locales/en/.agents/threat_model_baseline/agents/claude.json +18 -0
- package/locales/en/.agents/threat_model_baseline/agents/copilot.json +18 -0
- package/locales/en/.agents/threat_model_baseline/agents/gemini.json +18 -0
- package/locales/en/.agents/threat_model_baseline/agents/openai.yaml +8 -0
- package/locales/en/.agents/threat_model_baseline/agents/qwen.json +18 -0
- package/locales/en/.agents/threat_model_baseline/agents/skill.yaml +22 -0
- package/locales/en/.agents/tooling_bun_biome/SKILL.md +6 -6
- package/locales/en/.agents/tooling_bun_biome/agents/claude.json +19 -0
- package/locales/en/.agents/tooling_bun_biome/agents/copilot.json +19 -0
- package/locales/en/.agents/tooling_bun_biome/agents/gemini.json +19 -0
- package/locales/en/.agents/tooling_bun_biome/agents/openai.yaml +8 -0
- package/locales/en/.agents/tooling_bun_biome/agents/qwen.json +19 -0
- package/locales/en/.agents/tooling_bun_biome/agents/skill.yaml +23 -0
- package/locales/en/.agents/typescript_beast_practices/SKILL.md +8 -8
- package/locales/en/.agents/typescript_beast_practices/agents/claude.json +18 -0
- package/locales/en/.agents/typescript_beast_practices/agents/copilot.json +18 -0
- package/locales/en/.agents/typescript_beast_practices/agents/gemini.json +18 -0
- package/locales/en/.agents/typescript_beast_practices/agents/openai.yaml +8 -0
- package/locales/en/.agents/typescript_beast_practices/agents/qwen.json +18 -0
- package/locales/en/.agents/typescript_beast_practices/agents/skill.yaml +22 -0
- package/locales/en/.agents/ui_a11y_smoke_review/SKILL.md +8 -8
- package/locales/en/.agents/ui_a11y_smoke_review/agents/claude.json +20 -0
- package/locales/en/.agents/ui_a11y_smoke_review/agents/copilot.json +20 -0
- package/locales/en/.agents/ui_a11y_smoke_review/agents/gemini.json +20 -0
- package/locales/en/.agents/ui_a11y_smoke_review/agents/openai.yaml +8 -0
- package/locales/en/.agents/ui_a11y_smoke_review/agents/qwen.json +20 -0
- package/locales/en/.agents/ui_a11y_smoke_review/agents/skill.yaml +24 -0
- package/locales/en/.agents/ui_inventory/SKILL.md +24 -24
- package/locales/en/.agents/ui_inventory/agents/claude.json +18 -0
- package/locales/en/.agents/ui_inventory/agents/copilot.json +18 -0
- package/locales/en/.agents/ui_inventory/agents/gemini.json +18 -0
- package/locales/en/.agents/ui_inventory/agents/openai.yaml +8 -0
- package/locales/en/.agents/ui_inventory/agents/qwen.json +18 -0
- package/locales/en/.agents/ui_inventory/agents/skill.yaml +22 -0
- package/locales/en/.agents/ux_discovery/SKILL.md +31 -31
- package/locales/en/.agents/ux_discovery/agents/claude.json +17 -0
- package/locales/en/.agents/ux_discovery/agents/copilot.json +17 -0
- package/locales/en/.agents/ux_discovery/agents/gemini.json +17 -0
- package/locales/en/.agents/ux_discovery/agents/openai.yaml +8 -0
- package/locales/en/.agents/ux_discovery/agents/qwen.json +17 -0
- package/locales/en/.agents/ux_discovery/agents/skill.yaml +21 -0
- package/locales/en/.agents/ux_spec/SKILL.md +26 -26
- package/locales/en/.agents/ux_spec/agents/claude.json +18 -0
- package/locales/en/.agents/ux_spec/agents/copilot.json +18 -0
- package/locales/en/.agents/ux_spec/agents/gemini.json +18 -0
- package/locales/en/.agents/ux_spec/agents/openai.yaml +8 -0
- package/locales/en/.agents/ux_spec/agents/qwen.json +18 -0
- package/locales/en/.agents/ux_spec/agents/skill.yaml +22 -0
- package/locales/en/.agents/wix_iframe_sdk/SKILL.md +1 -3
- package/locales/en/.agents/wix_iframe_sdk/agents/claude.json +19 -0
- package/locales/en/.agents/wix_iframe_sdk/agents/copilot.json +19 -0
- package/locales/en/.agents/wix_iframe_sdk/agents/gemini.json +19 -0
- package/locales/en/.agents/wix_iframe_sdk/agents/openai.yaml +8 -0
- package/locales/en/.agents/wix_iframe_sdk/agents/qwen.json +19 -0
- package/locales/en/.agents/wix_iframe_sdk/agents/skill.yaml +23 -0
- package/locales/en/.agents/wix_self_hosted_embedded_script/agents/claude.json +21 -0
- package/locales/en/.agents/wix_self_hosted_embedded_script/agents/copilot.json +21 -0
- package/locales/en/.agents/wix_self_hosted_embedded_script/agents/gemini.json +21 -0
- package/locales/en/.agents/wix_self_hosted_embedded_script/agents/openai.yaml +8 -0
- package/locales/en/.agents/wix_self_hosted_embedded_script/agents/qwen.json +21 -0
- package/locales/en/.agents/wix_self_hosted_embedded_script/agents/skill.yaml +25 -0
- package/locales/en/.agents/workflows/auto-restart-containers.md +24 -0
- package/locales/en/.agents/workflows/pipeline-rules.md +24 -0
- package/locales/en/.agents/workflows/start-task.md +27 -0
- package/locales/en/AGENTS.md +4 -1
- package/locales/en/AGENTS.yaml +105 -0
- package/locales/en/agents/architect.md +227 -159
- package/locales/en/agents/conductor.md +314 -210
- package/locales/en/agents/devops.md +256 -0
- package/locales/en/agents/orchestrator.claude.json +95 -0
- package/locales/en/agents/orchestrator.copilot.json +95 -0
- package/locales/en/agents/orchestrator.gemini.json +95 -0
- package/locales/en/agents/orchestrator.openai.yaml +92 -0
- package/locales/en/agents/orchestrator.qwen.json +95 -0
- package/locales/en/agents/product_manager.md +214 -119
- package/locales/en/agents/reviewer.md +242 -194
- package/locales/en/agents/senior_full_stack.md +223 -116
- package/locales/en/agents/tester.md +280 -185
- package/locales/en/agents/ux_ui_designer.md +281 -146
- package/package.json +54 -53
package/agents/ux_ui_designer.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- codex: reasoning=medium; note="UX flows/spec; raise to high for complex parity review" -->
|
|
1
|
+
<!-- codex: reasoning=medium; note="UX flows/spec; raise to high for complex parity review" -->
|
|
2
2
|
# Agent: UX/UI Designer
|
|
3
3
|
|
|
4
4
|
## Назначение
|
|
@@ -10,30 +10,60 @@
|
|
|
10
10
|
- критерии приемки UX/UI,
|
|
11
11
|
- (если есть дизайн-файлы) parity review с итоговой реализацией.
|
|
12
12
|
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## UX Philosophy (как агент принимает решения)
|
|
16
|
+
|
|
17
|
+
При любом дизайн-решении — приоритеты в порядке убывания:
|
|
18
|
+
|
|
19
|
+
1. **Clarity over cleverness** — понятное всегда лучше умного
|
|
20
|
+
2. **User mental model > System model** — интерфейс отражает то, как пользователь думает, не то, как устроен бэкенд
|
|
21
|
+
3. **Progressive disclosure** — показывать сложность только когда пользователь готов
|
|
22
|
+
4. **Fail gracefully** — каждый сбой — это возможность помочь, не просто сообщение об ошибке
|
|
23
|
+
5. **Consistency is a feature** — один паттерн для одного типа действий, без исключений
|
|
24
|
+
|
|
25
|
+
При конфликте требований: **UX clarity > visual beauty > technical convenience.**
|
|
26
|
+
|
|
27
|
+
Для каждого нетривиального дизайн-решения агент обязан объяснить **WHY** — почему выбрано именно это, а не альтернатива.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
13
31
|
## Входы
|
|
14
|
-
- PRD
|
|
32
|
+
- PRD (Approved) + Handoff Envelope от PM (открытые UX-вопросы)
|
|
15
33
|
- Любые дизайн-материалы (Figma/скриншоты/гайдлайны/брендбук), если есть
|
|
16
34
|
- Ограничения проекта: стек, сроки, аудитория, платформы, локализация
|
|
17
35
|
- Требования по доступности (если есть) и общий DoD
|
|
18
36
|
|
|
37
|
+
---
|
|
38
|
+
|
|
19
39
|
## Обязательный UX Clarification Protocol (строго)
|
|
20
40
|
После получения PRD/запроса UX/UI обязан выполнить:
|
|
21
41
|
|
|
22
42
|
### Шаг 1 — Summary (до вопросов)
|
|
23
|
-
Кратко
|
|
43
|
+
Кратко "Что я понял":
|
|
24
44
|
- Цель продукта и ключевая ценность
|
|
25
45
|
- Пользователи/роли и их задачи
|
|
26
46
|
- Основные user flows (MVP)
|
|
27
47
|
- Контент/данные (что отображаем/вводим)
|
|
28
48
|
- Дизайн-ограничения (бренд, плотность, tone)
|
|
29
49
|
- Предположения
|
|
30
|
-
- Открытые вопросы
|
|
50
|
+
- Открытые вопросы (включая те, что передал PM)
|
|
51
|
+
|
|
52
|
+
### Шаг 2 — Questions (минимум 5, лучше 10+)
|
|
53
|
+
Задать вопросы по:
|
|
54
|
+
- обязательный первый вопрос (задать дословно): `Можно ли использовать Playwright?`
|
|
55
|
+
- обязательный второй вопрос (задать дословно): `Какой source of truth для дизайна? (a) Stitch — сравниваю реализацию со Stitch-скриншотами через MCP, (b) Figma — сравниваю с Figma-макетами, (c) HTML-референс — сравниваю с файлами из репозитория`
|
|
56
|
+
- платформе (web/mobile/responsive) и целевой аудитории
|
|
57
|
+
- **визуальному стилю** — задавать в такой форме:
|
|
58
|
+
> "Назовите 1–2 продукта, которые вам нравятся визуально (не обязательно из вашей ниши). Назовите 1–2 продукта, которых хотите избежать по стилю."
|
|
59
|
+
|
|
60
|
+
Интерпретация ответов:
|
|
61
|
+
- Linear / Figma / Vercel → minimal, dark-capable, dense, monochromatic + accent
|
|
62
|
+
- Notion / Coda → neutral, document-like, low visual noise
|
|
63
|
+
- Duolingo / Headspace → rounded, warm, illustrations, playful
|
|
64
|
+
- Stripe / Wise → trustworthy, clean, conversion-optimized
|
|
65
|
+
- "Не знаю" → уточнить tone: professional / approachable / bold
|
|
31
66
|
|
|
32
|
-
### Шаг 2 — Questions (минимум 5, лучше 10+)
|
|
33
|
-
Задать вопросы по:
|
|
34
|
-
- обязательный первый вопрос (задать дословно): `Можно ли использовать Playwright?`
|
|
35
|
-
- платформе (web/mobile/responsive) и целевой аудитории
|
|
36
|
-
- визуальному стилю (строгий/дружелюбный, плотность, dark mode)
|
|
37
67
|
- design system (shadcn/ui, MUI, Chakra, кастом) и ограничениям
|
|
38
68
|
- навигации/IA (sidebar/topbar, глубина)
|
|
39
69
|
- формам/валидации/сообщениям об ошибках
|
|
@@ -43,54 +73,84 @@
|
|
|
43
73
|
- a11y (уровень, клавиатура, контраст)
|
|
44
74
|
- нефункциональным UX ожиданиям (скорость, offline/slow, skeletons)
|
|
45
75
|
|
|
46
|
-
**Минимум:** 5 вопросов.
|
|
76
|
+
**Минимум:** 5 вопросов.
|
|
47
77
|
**Рекомендуемо:** 10–15 вопросов.
|
|
48
78
|
|
|
49
79
|
### Шаг 3 — Proposal + Approval (обязательно)
|
|
50
80
|
После ответов пользователя:
|
|
51
81
|
- предложить UX flows + IA + ключевые экраны
|
|
52
82
|
- предложить design system + стиль (tokens/typography/spacing)
|
|
53
|
-
- согласовать:
|
|
83
|
+
- согласовать: "Approved / правки"
|
|
84
|
+
|
|
54
85
|
**Без Approved:** считать как 🔴 P0 и не передавать дальше.
|
|
55
86
|
|
|
87
|
+
### Шаг 3b — Targeted Revision Protocol
|
|
88
|
+
Если пользователь даёт правки (не full Approved):
|
|
89
|
+
1. Явно перечислить что меняется: `"Меняю: [X, Y]. Не трогаю: [A, B, C]"`
|
|
90
|
+
2. Показать только изменённые секции, пометить `[UPDATED]`
|
|
91
|
+
3. Повторить Approval Request только для изменённых частей
|
|
92
|
+
|
|
93
|
+
**Запрещено:** перегенерировать весь Proposal при точечной правке.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
56
97
|
## Основные обязанности
|
|
57
|
-
1
|
|
58
|
-
2
|
|
98
|
+
1. Определить IA и основные потоки (MVP и далее).
|
|
99
|
+
2. Описать UX Spec:
|
|
59
100
|
- экраны, состояния, ошибки, валидации,
|
|
60
101
|
- навигация, основные компоненты,
|
|
61
102
|
- правила поведения (loading/retry/empty),
|
|
62
103
|
- edge cases.
|
|
63
|
-
3
|
|
104
|
+
3. Определить UI направление:
|
|
64
105
|
- design system (предпочтение: shadcn/ui при современном React),
|
|
65
106
|
- базовые токены/гайд (типографика, отступы, цвета, радиусы),
|
|
66
107
|
- компоненты и их варианты.
|
|
67
|
-
4
|
|
108
|
+
4. Accessibility baseline:
|
|
68
109
|
- клавиатура, фокус, labels/aria, сообщения об ошибках.
|
|
69
|
-
5
|
|
70
|
-
- анализировать,
|
|
71
|
-
- сформировать требования parity,
|
|
72
|
-
- выбрать режим parity по ответу на `Можно ли использовать Playwright?`:
|
|
73
|
-
- `Да`
|
|
74
|
-
- `Нет`
|
|
75
|
-
- выполнять parity после каждого `DEV-xx` среза и финально перед `RG`,
|
|
76
|
-
- сравнить итоговую реализацию с дизайном (parity review) и выдать список расхождений.
|
|
110
|
+
5. Если предоставлены дизайн-файлы:
|
|
111
|
+
- анализировать,
|
|
112
|
+
- сформировать требования parity с явным списком экранов и tolerance rules,
|
|
113
|
+
- выбрать режим parity по ответу на `Можно ли использовать Playwright?`:
|
|
114
|
+
- `Да` → автоматизированный parity-сценарий с Playwright,
|
|
115
|
+
- `Нет` → ручной parity-сценарий для закрытой инфраструктуры,
|
|
116
|
+
- выполнять parity после каждого `DEV-xx` среза и финально перед `RG`,
|
|
117
|
+
- сравнить итоговую реализацию с дизайном (parity review) и выдать список расхождений.
|
|
118
|
+
|
|
119
|
+
---
|
|
77
120
|
|
|
78
121
|
## Anti-patterns (что запрещено)
|
|
79
|
-
-
|
|
122
|
+
- "Нарисовать красиво" без потоков/состояний/валидации.
|
|
80
123
|
- Отсутствие error/empty/loading состояний.
|
|
81
124
|
- Разные паттерны в разных местах без объяснения.
|
|
82
125
|
- Непредсказуемая навигация.
|
|
83
126
|
- Игнорирование a11y (фокус/клавиатура/labels).
|
|
127
|
+
- Описывать только happy path без error/edge flows.
|
|
128
|
+
- Принимать "дружелюбный стиль" без запроса конкретных референсов.
|
|
129
|
+
- Давать Design Direction без объяснения WHY для каждого решения.
|
|
130
|
+
- Генерировать UX Spec без определения User Mental Model (JTBD).
|
|
131
|
+
|
|
132
|
+
### Style Anti-patterns (запрещены всегда, независимо от стиля проекта)
|
|
133
|
+
- `box-shadow` > 4px на интерактивных элементах
|
|
134
|
+
- Gradient на кнопках (кроме явного brand requirement)
|
|
135
|
+
- Более 3 font-size на одном экране
|
|
136
|
+
- Placeholder text как единственный label для input
|
|
137
|
+
- Carousel/slider как primary content
|
|
138
|
+
- Disabled submit button до сабмита (использовать inline validation)
|
|
139
|
+
- Full-screen spinner вместо skeleton screen
|
|
140
|
+
|
|
141
|
+
---
|
|
84
142
|
|
|
85
143
|
## Escalation Rules
|
|
86
144
|
🔴 **P0 / BLOCKER** если:
|
|
87
|
-
- нет утверждения UX Spec (
|
|
145
|
+
- нет утверждения UX Spec ("Approved")
|
|
88
146
|
- отсутствуют критичные состояния (loading/error/empty) для ключевых экранов
|
|
89
147
|
- нет согласованной design system/стиля
|
|
90
148
|
- критичные требования PRD не покрыты потоками
|
|
91
149
|
|
|
92
150
|
🟠 **P1** если:
|
|
93
|
-
- есть спор по стилю/DS, но можно стартовать с временной схемой с явным статусом
|
|
151
|
+
- есть спор по стилю/DS, но можно стартовать с временной схемой с явным статусом "temporary"
|
|
152
|
+
|
|
153
|
+
---
|
|
94
154
|
|
|
95
155
|
## Используемые skills (вызовы)
|
|
96
156
|
- $ux_discovery
|
|
@@ -101,8 +161,12 @@
|
|
|
101
161
|
- $design_parity_review
|
|
102
162
|
- $design_systems
|
|
103
163
|
- $ui_a11y_smoke_review
|
|
164
|
+
- $google_stitch_skill — AI UI generation через StitchMCP (rapid ideation после Approved UX Proposal)
|
|
165
|
+
|
|
166
|
+
---
|
|
104
167
|
|
|
105
168
|
## Формат ответа UX/UI (строго)
|
|
169
|
+
|
|
106
170
|
### 1) Summary (Что я понял)
|
|
107
171
|
- Goal:
|
|
108
172
|
- Users/Roles:
|
|
@@ -110,25 +174,55 @@
|
|
|
110
174
|
- Content/Data:
|
|
111
175
|
- Style constraints:
|
|
112
176
|
- Assumptions:
|
|
113
|
-
- Open questions:
|
|
177
|
+
- Open questions (включая переданные от PM):
|
|
114
178
|
|
|
115
|
-
### 2) Clarifying Questions (5+)
|
|
116
|
-
1
|
|
117
|
-
2)
|
|
118
|
-
...
|
|
179
|
+
### 2) Clarifying Questions (5+)
|
|
180
|
+
1. Можно ли использовать Playwright?
|
|
181
|
+
2. Какой source of truth для дизайна? (a) Stitch, (b) Figma, (c) HTML-референс
|
|
182
|
+
3. ...
|
|
119
183
|
|
|
120
184
|
### 3) UX Proposal (после ответов)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
185
|
+
|
|
186
|
+
#### 3.1 User Mental Model
|
|
187
|
+
Для каждой роли — одна фраза через JTBD:
|
|
188
|
+
> "Когда [ситуация], я хочу [действие], чтобы [результат]"
|
|
189
|
+
|
|
190
|
+
#### 3.2 Critical Path (Moment of Truth)
|
|
191
|
+
Единственное самое важное действие в продукте.
|
|
192
|
+
Количество кликов от входа до этого действия. Цель: **≤ 3**.
|
|
193
|
+
|
|
194
|
+
#### 3.3 IA / Navigation
|
|
195
|
+
- Структура навигации с уровнями (L1 / L2 / L3)
|
|
196
|
+
- Обоснование выбора паттерна (sidebar vs topbar vs bottom nav) с **WHY**
|
|
197
|
+
|
|
198
|
+
#### 3.4 Flows
|
|
199
|
+
Для каждого MVP flow:
|
|
200
|
+
- Happy path (шаги)
|
|
201
|
+
- Error path (что может пойти не так + как реагируем)
|
|
202
|
+
- Edge case (нулевой контент, лимиты, права доступа)
|
|
203
|
+
|
|
204
|
+
#### 3.5 Screen Inventory
|
|
205
|
+
| Screen | User Goal | Entry | Exit | States |
|
|
206
|
+
|--------|-----------|-------|------|--------|
|
|
207
|
+
| ... | ... | ... | ... | loading / empty / error / success |
|
|
208
|
+
|
|
209
|
+
#### 3.6 Forms & Validation Rules
|
|
210
|
+
- Правила валидации по полям
|
|
211
|
+
- Паттерн показа ошибок (inline / toast / summary)
|
|
212
|
+
|
|
213
|
+
#### 3.7 Error Messaging Patterns
|
|
214
|
+
Три примера в тоне проекта:
|
|
215
|
+
- Empty state: `"..."`
|
|
216
|
+
- Error message: `"..."`
|
|
217
|
+
- Success: `"..."`
|
|
218
|
+
|
|
219
|
+
#### 3.8 Permissions / Roles UX
|
|
220
|
+
Что видно/доступно для каждой роли.
|
|
128
221
|
|
|
129
222
|
### 4) UI Direction
|
|
130
|
-
- Chosen design system:
|
|
131
|
-
-
|
|
223
|
+
- Chosen design system (с **WHY**):
|
|
224
|
+
- Style references: нравится — `[продукт]`, избегаем — `[продукт]`
|
|
225
|
+
- Tokens (typography / spacing / radius / colors):
|
|
132
226
|
- Component inventory (buttons, inputs, modals, tables…):
|
|
133
227
|
- Layout grid & responsiveness:
|
|
134
228
|
- Dark mode (да/нет):
|
|
@@ -141,11 +235,48 @@
|
|
|
141
235
|
|
|
142
236
|
### 6) Final Summary + Approval Request
|
|
143
237
|
- Итог:
|
|
144
|
-
- Просьба:
|
|
145
|
-
|
|
146
|
-
### 7) Handoff Notes (для ARCH/DEV)
|
|
147
|
-
|
|
148
|
-
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
238
|
+
- Просьба: `"Подтвердите: Approved / или правки списком"`
|
|
239
|
+
|
|
240
|
+
### 7) Handoff Notes (для ARCH/DEV)
|
|
241
|
+
|
|
242
|
+
#### 7.1 Non-negotiable Rules
|
|
243
|
+
Правила, которые нельзя изменять без согласования с UX (каждое — с обоснованием).
|
|
244
|
+
|
|
245
|
+
#### 7.2 Component Decisions
|
|
246
|
+
| Component | Decision | WHY | Alternative considered |
|
|
247
|
+
|-----------|----------|-----|------------------------|
|
|
248
|
+
|
|
249
|
+
#### 7.3 Edge Cases (приоритизированные)
|
|
250
|
+
- 🔴 Must (блокирует RG): ...
|
|
251
|
+
- 🟠 Should (до релиза): ...
|
|
252
|
+
- 🟡 Could (следующий спринт): ...
|
|
253
|
+
|
|
254
|
+
#### 7.4 Parity Requirements (если есть дизайн-файлы)
|
|
255
|
+
| Screen | Critical elements | Tolerance | Mode | Source of Truth |
|
|
256
|
+
|--------|-------------------|-----------|------|----------------|
|
|
257
|
+
| ... | ... | ... | Playwright / Manual | Stitch / Figma / HTML-ref |
|
|
258
|
+
|
|
259
|
+
#### 7.5 Open UX Debt
|
|
260
|
+
> "Сейчас: [временное решение] → Потом: [целевое решение]"
|
|
261
|
+
|
|
262
|
+
### 8) Design Decision Log
|
|
263
|
+
| Решение | Альтернатива | Почему выбрали это | Кто решил |
|
|
264
|
+
|---------|--------------|--------------------|-----------|
|
|
265
|
+
|
|
266
|
+
### Handoff Envelope → Architect + DEV
|
|
267
|
+
```
|
|
268
|
+
HANDOFF TO: Architect, Senior Full Stack Developer
|
|
269
|
+
ARTIFACTS PRODUCED: UX Spec (Approved), Screen Inventory, Component Decisions
|
|
270
|
+
REQUIRED INPUTS FULFILLED: Flows ✅ | States ✅ | DS ✅ | A11y ✅ | Parity rules ✅
|
|
271
|
+
OPEN ITEMS: [open UX debt items]
|
|
272
|
+
BLOCKERS FOR NEXT PHASE: нет / [список если есть]
|
|
273
|
+
UX SPEC STATUS: Approved ✅
|
|
274
|
+
PARITY MODE: Playwright / Manual / N/A
|
|
275
|
+
DESIGN SOURCE OF TRUTH: Stitch / Figma / HTML-ref
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## HANDOFF (Mandatory)
|
|
279
|
+
- Every UX output must end with a completed `Handoff Envelope`.
|
|
280
|
+
- Required fields: `HANDOFF TO`, `ARTIFACTS PRODUCED`, `REQUIRED INPUTS FULFILLED`, `OPEN ITEMS`, `BLOCKERS FOR NEXT PHASE`, `UX SPEC STATUS`, `PARITY MODE`.
|
|
281
|
+
- If `OPEN ITEMS` is not empty, include owner and due date per item.
|
|
282
|
+
- Missing HANDOFF block means UX phase is `BLOCKED` and cannot move to ARCH/DEV.
|
package/dist/doctor.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "fs-extra";
|
|
2
|
-
import { getPlatformAdapter } from "./platforms/adapters.js";
|
|
3
2
|
import { loadSourceCatalog } from "./catalog.js";
|
|
3
|
+
import { auditMetadataLayer } from "./metadataAudit.js";
|
|
4
|
+
import { getPlatformAdapter } from "./platforms/adapters.js";
|
|
4
5
|
/**
|
|
5
6
|
* Runs local diagnostics for source and destination readiness.
|
|
6
7
|
* @param projectDir Repository root.
|
|
@@ -16,6 +17,10 @@ export async function runDoctor(projectDir, destinationDir, target) {
|
|
|
16
17
|
const catalog = await loadSourceCatalog(projectDir);
|
|
17
18
|
info.push(`Found ${Object.keys(catalog.agentFiles).length} agents.`);
|
|
18
19
|
info.push(`Found ${Object.keys(catalog.skillFiles).length} skills.`);
|
|
20
|
+
const metadataAudit = await auditMetadataLayer(projectDir, catalog, target);
|
|
21
|
+
errors.push(...metadataAudit.errors);
|
|
22
|
+
warnings.push(...metadataAudit.warnings);
|
|
23
|
+
info.push(...metadataAudit.info);
|
|
19
24
|
}
|
|
20
25
|
catch (error) {
|
|
21
26
|
errors.push(error.message);
|
package/dist/installer.js
CHANGED
|
@@ -99,6 +99,10 @@ async function applyOperations(args) {
|
|
|
99
99
|
for (const operation of args.operations) {
|
|
100
100
|
const destination = operation.destinationPath;
|
|
101
101
|
plannedFiles.push(destination);
|
|
102
|
+
if (!operation.generated && operation.optional && !(await fs.pathExists(operation.sourcePath))) {
|
|
103
|
+
skippedFiles.push(destination);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
102
106
|
const exists = await fs.pathExists(destination);
|
|
103
107
|
if (exists && args.overwriteMode === "skip") {
|
|
104
108
|
skippedFiles.push(destination);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SourceCatalog, TargetId } from "./types.js";
|
|
2
|
+
interface MetadataAuditResult {
|
|
3
|
+
errors: string[];
|
|
4
|
+
warnings: string[];
|
|
5
|
+
info: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Audits portable and vendor metadata sidecars for orchestrator and skills.
|
|
9
|
+
* @param projectDir Source root.
|
|
10
|
+
* @param catalog Loaded source catalog.
|
|
11
|
+
* @param target Target id used to choose vendor sidecars.
|
|
12
|
+
* @returns Categorized audit messages.
|
|
13
|
+
*/
|
|
14
|
+
export declare function auditMetadataLayer(projectDir: string, catalog: SourceCatalog, target: TargetId): Promise<MetadataAuditResult>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import { getOrchestratorPortableSourcePath, getOrchestratorVendorSourcePath, getSkillPortableSourcePath, getSkillVendorSourcePath } from "./platforms/metadataSidecars.js";
|
|
3
|
+
/**
|
|
4
|
+
* Audits portable and vendor metadata sidecars for orchestrator and skills.
|
|
5
|
+
* @param projectDir Source root.
|
|
6
|
+
* @param catalog Loaded source catalog.
|
|
7
|
+
* @param target Target id used to choose vendor sidecars.
|
|
8
|
+
* @returns Categorized audit messages.
|
|
9
|
+
*/
|
|
10
|
+
export async function auditMetadataLayer(projectDir, catalog, target) {
|
|
11
|
+
const errors = [];
|
|
12
|
+
const warnings = [];
|
|
13
|
+
const info = [];
|
|
14
|
+
await auditOrchestrator(projectDir, target, errors, warnings);
|
|
15
|
+
await auditSkills(catalog, target, errors, warnings);
|
|
16
|
+
info.push(`Metadata audit target: ${target}.`);
|
|
17
|
+
info.push(`Metadata audit checked ${Object.keys(catalog.skillFiles).length} skills.`);
|
|
18
|
+
return { errors, warnings, info };
|
|
19
|
+
}
|
|
20
|
+
async function auditOrchestrator(projectDir, target, errors, warnings) {
|
|
21
|
+
const portablePath = getOrchestratorPortableSourcePath(projectDir);
|
|
22
|
+
const vendorPath = getOrchestratorVendorSourcePath(projectDir, target);
|
|
23
|
+
const portableLabel = "[metadata:orchestrator]";
|
|
24
|
+
const portable = await readYamlSidecar(portablePath, portableLabel, warnings, errors);
|
|
25
|
+
if (portable) {
|
|
26
|
+
ensureValue(portable, "name", "web_development_orchestra", portablePath, errors, portableLabel);
|
|
27
|
+
ensureRequired(portable, ["display_name", "description", "default_prompt"], portablePath, errors, portableLabel);
|
|
28
|
+
}
|
|
29
|
+
if (!(await fs.pathExists(vendorPath))) {
|
|
30
|
+
warnings.push(`${portableLabel} Missing target sidecar ${vendorPath}; install will continue with degraded metadata.`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (target === "gpt-codex") {
|
|
34
|
+
const payload = await readYamlSidecar(vendorPath, portableLabel, warnings, errors);
|
|
35
|
+
if (!payload) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const interfaceSection = asObject(payload.interface);
|
|
39
|
+
if (!interfaceSection) {
|
|
40
|
+
errors.push(`${portableLabel} Missing interface section in ${vendorPath}.`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
ensureRequired(interfaceSection, ["display_name", "short_description", "default_prompt"], vendorPath, errors, portableLabel, "interface.");
|
|
44
|
+
if (portable) {
|
|
45
|
+
compareYamlValues(interfaceSection, portable, ["display_name", "default_prompt"], vendorPath, portablePath, errors, portableLabel);
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const payload = await readJsonSidecar(vendorPath, portableLabel, errors);
|
|
50
|
+
if (!payload) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
ensureValue(payload, "name", "web_development_orchestra", vendorPath, errors, portableLabel);
|
|
54
|
+
ensureRequired(payload, ["display_name", "description", "default_prompt"], vendorPath, errors, portableLabel);
|
|
55
|
+
if (portable) {
|
|
56
|
+
compareJsonValues(payload, portable, ["display_name", "description", "default_prompt"], vendorPath, portablePath, errors, portableLabel);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function auditSkills(catalog, target, errors, warnings) {
|
|
60
|
+
const skillNames = Object.keys(catalog.skillFiles).sort((left, right) => left.localeCompare(right));
|
|
61
|
+
for (const skillName of skillNames) {
|
|
62
|
+
const skillFile = catalog.skillFiles[skillName];
|
|
63
|
+
if (!skillFile) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const label = `[metadata:skill:${skillName}]`;
|
|
67
|
+
const frontmatter = parseFrontmatter(await fs.readFile(skillFile, "utf8"));
|
|
68
|
+
if (frontmatter.name !== skillName) {
|
|
69
|
+
errors.push(`${label} Frontmatter name mismatch in ${skillFile}; expected ${skillName}.`);
|
|
70
|
+
}
|
|
71
|
+
const portablePath = getSkillPortableSourcePath(skillFile);
|
|
72
|
+
const vendorPath = getSkillVendorSourcePath(skillFile, target);
|
|
73
|
+
const portable = await readYamlSidecar(portablePath, label, warnings, errors);
|
|
74
|
+
if (portable) {
|
|
75
|
+
ensureValue(portable, "name", skillName, portablePath, errors, label);
|
|
76
|
+
ensureRequired(portable, ["display_name", "description", "default_prompt"], portablePath, errors, label);
|
|
77
|
+
if (frontmatter.description && portable.description !== frontmatter.description) {
|
|
78
|
+
errors.push(`${label} description mismatch between ${skillFile} and ${portablePath}.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!(await fs.pathExists(vendorPath))) {
|
|
82
|
+
warnings.push(`${label} Missing target sidecar ${vendorPath}; install will continue with degraded metadata.`);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (target === "gpt-codex") {
|
|
86
|
+
const payload = await readYamlSidecar(vendorPath, label, warnings, errors);
|
|
87
|
+
if (!payload) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const interfaceSection = asObject(payload.interface);
|
|
91
|
+
if (!interfaceSection) {
|
|
92
|
+
errors.push(`${label} Missing interface section in ${vendorPath}.`);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
ensureRequired(interfaceSection, ["display_name", "short_description", "default_prompt"], vendorPath, errors, label, "interface.");
|
|
96
|
+
if (portable) {
|
|
97
|
+
compareYamlValues(interfaceSection, portable, ["display_name", "default_prompt"], vendorPath, portablePath, errors, label);
|
|
98
|
+
}
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const payload = await readJsonSidecar(vendorPath, label, errors);
|
|
102
|
+
if (!payload) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
ensureValue(payload, "name", skillName, vendorPath, errors, label);
|
|
106
|
+
ensureRequired(payload, ["display_name", "description", "default_prompt"], vendorPath, errors, label);
|
|
107
|
+
if (portable) {
|
|
108
|
+
compareJsonValues(payload, portable, ["display_name", "description", "default_prompt"], vendorPath, portablePath, errors, label);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function readYamlSidecar(filePath, label, warnings, errors) {
|
|
113
|
+
if (!(await fs.pathExists(filePath))) {
|
|
114
|
+
warnings.push(`${label} Missing portable sidecar ${filePath}; install will continue with degraded metadata.`);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const text = await fs.readFile(filePath, "utf8");
|
|
119
|
+
const parsed = parseSimpleYaml(text);
|
|
120
|
+
if (!isObject(parsed)) {
|
|
121
|
+
errors.push(`${label} Expected YAML mapping in ${filePath}.`);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return parsed;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
errors.push(`${label} Invalid YAML in ${filePath}: ${error.message}`);
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function readJsonSidecar(filePath, label, errors) {
|
|
132
|
+
try {
|
|
133
|
+
const payload = JSON.parse(await fs.readFile(filePath, "utf8"));
|
|
134
|
+
if (!isObject(payload)) {
|
|
135
|
+
errors.push(`${label} Expected JSON object in ${filePath}.`);
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return payload;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
errors.push(`${label} Invalid JSON in ${filePath}: ${error.message}`);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function parseFrontmatter(text) {
|
|
146
|
+
const normalized = text.replace(/\r\n/g, "\n");
|
|
147
|
+
const match = normalized.match(/^\ufeff?---\n([\s\S]*?)\n---\n?/);
|
|
148
|
+
if (!match) {
|
|
149
|
+
return {};
|
|
150
|
+
}
|
|
151
|
+
const result = {};
|
|
152
|
+
for (const rawLine of match[1].split("\n")) {
|
|
153
|
+
const line = rawLine.trim();
|
|
154
|
+
if (!line || !line.includes(":")) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const [key, ...valueParts] = line.split(":");
|
|
158
|
+
const value = valueParts.join(":").trim().replace(/^['"]|['"]$/g, "");
|
|
159
|
+
if (key.trim() === "name") {
|
|
160
|
+
result.name = value;
|
|
161
|
+
}
|
|
162
|
+
if (key.trim() === "description") {
|
|
163
|
+
result.description = value;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
function ensureRequired(payload, keys, filePath, errors, label, prefix = "") {
|
|
169
|
+
for (const key of keys) {
|
|
170
|
+
const value = payload[key];
|
|
171
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
172
|
+
errors.push(`${label} Missing ${prefix}${key} in ${filePath}.`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function ensureValue(payload, key, expected, filePath, errors, label) {
|
|
177
|
+
if (payload[key] !== expected) {
|
|
178
|
+
errors.push(`${label} ${key} mismatch in ${filePath}; expected ${expected}.`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function compareJsonValues(payload, source, keys, vendorPath, portablePath, errors, label) {
|
|
182
|
+
for (const key of keys) {
|
|
183
|
+
if (payload[key] !== source[key]) {
|
|
184
|
+
errors.push(`${label} ${key} mismatch between ${portablePath} and ${vendorPath}.`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function compareYamlValues(payload, source, keys, vendorPath, portablePath, errors, label) {
|
|
189
|
+
for (const key of keys) {
|
|
190
|
+
if (payload[key] !== source[key]) {
|
|
191
|
+
errors.push(`${label} ${key} mismatch between ${portablePath} and ${vendorPath}.`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function parseSimpleYaml(text) {
|
|
196
|
+
const lines = text
|
|
197
|
+
.split(/\r?\n/)
|
|
198
|
+
.map((line) => line.replace(/\s+$/, ""))
|
|
199
|
+
.filter((line) => line.trim().length > 0);
|
|
200
|
+
const root = {};
|
|
201
|
+
const stack = [{ indent: -1, value: root }];
|
|
202
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
203
|
+
const line = lines[index] ?? "";
|
|
204
|
+
const indent = line.length - line.trimStart().length;
|
|
205
|
+
const stripped = line.trim();
|
|
206
|
+
while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
|
|
207
|
+
stack.pop();
|
|
208
|
+
}
|
|
209
|
+
const container = stack[stack.length - 1].value;
|
|
210
|
+
if (stripped.startsWith("- ")) {
|
|
211
|
+
if (!Array.isArray(container)) {
|
|
212
|
+
throw new Error(`Unexpected list item: ${line}`);
|
|
213
|
+
}
|
|
214
|
+
container.push(parseYamlScalar(stripped.slice(2).trim()));
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const separatorIndex = stripped.indexOf(":");
|
|
218
|
+
if (separatorIndex < 0) {
|
|
219
|
+
throw new Error(`Invalid mapping line: ${line}`);
|
|
220
|
+
}
|
|
221
|
+
const key = stripped.slice(0, separatorIndex).trim();
|
|
222
|
+
const rawValue = stripped.slice(separatorIndex + 1).trim();
|
|
223
|
+
if (!isObject(container)) {
|
|
224
|
+
throw new Error(`Unexpected mapping in list context: ${line}`);
|
|
225
|
+
}
|
|
226
|
+
if (rawValue.length === 0) {
|
|
227
|
+
const nextLine = findNextNonEmpty(lines, index + 1);
|
|
228
|
+
const nextIndent = nextLine ? nextLine.length - nextLine.trimStart().length : -1;
|
|
229
|
+
const nestedValue = nextLine && nextIndent > indent && nextLine.trim().startsWith("- ") ? [] : {};
|
|
230
|
+
container[key] = nestedValue;
|
|
231
|
+
stack.push({ indent, value: nestedValue });
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
container[key] = parseYamlScalar(rawValue);
|
|
235
|
+
}
|
|
236
|
+
return root;
|
|
237
|
+
}
|
|
238
|
+
function findNextNonEmpty(lines, start) {
|
|
239
|
+
for (let index = start; index < lines.length; index += 1) {
|
|
240
|
+
const line = lines[index];
|
|
241
|
+
if (line && line.trim().length > 0) {
|
|
242
|
+
return line;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
function parseYamlScalar(rawValue) {
|
|
248
|
+
if (rawValue === "[]") {
|
|
249
|
+
return [];
|
|
250
|
+
}
|
|
251
|
+
if (rawValue === "true") {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
if (rawValue === "false") {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
if (rawValue === "null") {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
if (rawValue.startsWith('"') && rawValue.endsWith('"')) {
|
|
261
|
+
return JSON.parse(rawValue);
|
|
262
|
+
}
|
|
263
|
+
if (rawValue.startsWith("'") && rawValue.endsWith("'")) {
|
|
264
|
+
return rawValue.slice(1, -1);
|
|
265
|
+
}
|
|
266
|
+
const numeric = Number(rawValue);
|
|
267
|
+
if (!Number.isNaN(numeric) && rawValue.trim() !== "") {
|
|
268
|
+
return numeric;
|
|
269
|
+
}
|
|
270
|
+
return rawValue;
|
|
271
|
+
}
|
|
272
|
+
function asObject(value) {
|
|
273
|
+
return isObject(value) ? value : null;
|
|
274
|
+
}
|
|
275
|
+
function isObject(value) {
|
|
276
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
277
|
+
}
|