claude-code-arcane 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +100 -0
- package/LICENSE +26 -0
- package/README.md +372 -0
- package/agents/ai/ai-architect.md +80 -0
- package/agents/ai/data-engineer.md +66 -0
- package/agents/ai/data-scientist.md +58 -0
- package/agents/ai/ml-engineer.md +61 -0
- package/agents/business/business-ops-lead.md +64 -0
- package/agents/business/financial-analyst.md +62 -0
- package/agents/business/sales-engineer.md +74 -0
- package/agents/clevel/ceo-advisor.md +64 -0
- package/agents/clevel/cfo-advisor.md +63 -0
- package/agents/clevel/chief-of-staff.md +60 -0
- package/agents/clevel/cmo-advisor.md +67 -0
- package/agents/clevel/coo-advisor.md +79 -0
- package/agents/clevel/cto-advisor.md +72 -0
- package/agents/devops/cloud-architect.md +52 -0
- package/agents/devops/platform-lead.md +72 -0
- package/agents/devops/sre-lead.md +100 -0
- package/agents/engineering/android-engineer.md +78 -0
- package/agents/engineering/backend-architect.md +127 -0
- package/agents/engineering/database-architect.md +138 -0
- package/agents/engineering/flutter-engineer.md +75 -0
- package/agents/engineering/frontend-architect.md +138 -0
- package/agents/engineering/go-engineer.md +102 -0
- package/agents/engineering/ios-engineer.md +76 -0
- package/agents/engineering/node-engineer.md +107 -0
- package/agents/engineering/react-engineer.md +109 -0
- package/agents/engineering/react-native-engineer.md +112 -0
- package/agents/engineering/sql-specialist.md +106 -0
- package/agents/game/accessibility-specialist.md +150 -0
- package/agents/game/ai-programmer.md +95 -0
- package/agents/game/analytics-engineer.md +101 -0
- package/agents/game/art-director.md +64 -0
- package/agents/game/economy-designer.md +143 -0
- package/agents/game/game-designer.md +70 -0
- package/agents/game/gameplay-programmer.md +133 -0
- package/agents/game/lead-programmer.md +62 -0
- package/agents/game/level-designer.md +115 -0
- package/agents/game/live-ops-designer.md +184 -0
- package/agents/game/narrative-director.md +60 -0
- package/agents/game/network-programmer.md +98 -0
- package/agents/game/performance-analyst.md +112 -0
- package/agents/game/qa-lead.md +65 -0
- package/agents/game/qa-tester-gamedev.md +230 -0
- package/agents/game/release-manager.md +65 -0
- package/agents/game/sound-designer.md +85 -0
- package/agents/game/systems-designer.md +157 -0
- package/agents/game/technical-artist.md +108 -0
- package/agents/game/technical-director.md +74 -0
- package/agents/game/ue-replication-specialist.md +143 -0
- package/agents/game/unity-shader-specialist.md +178 -0
- package/agents/game/unity-specialist.md +184 -0
- package/agents/game/unreal-specialist.md +172 -0
- package/agents/game/ux-designer.md +112 -0
- package/agents/game/world-builder.md +111 -0
- package/agents/game/writer.md +104 -0
- package/agents/integrations/api-tools-specialist.md +209 -0
- package/agents/integrations/comms-tools-specialist.md +159 -0
- package/agents/integrations/design-tools-specialist.md +129 -0
- package/agents/integrations/docs-tools-specialist.md +116 -0
- package/agents/integrations/integrations-architect.md +144 -0
- package/agents/integrations/project-tools-specialist.md +129 -0
- package/agents/management/delivery-manager.md +105 -0
- package/agents/management/program-director.md +55 -0
- package/agents/management/project-manager.md +126 -0
- package/agents/management/scrum-master.md +96 -0
- package/agents/marketing/content-lead.md +74 -0
- package/agents/marketing/growth-lead.md +72 -0
- package/agents/marketing/marketing-analyst.md +89 -0
- package/agents/marketing/marketing-director.md +75 -0
- package/agents/marketing/seo-lead.md +80 -0
- package/agents/product/chief-product-officer.md +79 -0
- package/agents/product/design-system-lead.md +76 -0
- package/agents/product/product-manager.md +132 -0
- package/agents/product/ui-lead.md +73 -0
- package/agents/product/ux-lead.md +103 -0
- package/agents/quality/qa-director.md +121 -0
- package/agents/quality/qa-engineer.md +92 -0
- package/agents/quality/security-architect.md +144 -0
- package/agents/regulatory/compliance-officer.md +88 -0
- package/agents/regulatory/quality-manager.md +90 -0
- package/agents/regulatory/regulatory-director.md +92 -0
- package/agents/visualnovel/vn-comfyui-artist.md +91 -0
- package/agents/visualnovel/vn-narrative-director.md +86 -0
- package/agents/visualnovel/vn-producer.md +108 -0
- package/agents/visualnovel/vn-renpy-developer.md +118 -0
- package/agents/visualnovel/vn-scene-director.md +98 -0
- package/agents/visualnovel/vn-ui-designer.md +97 -0
- package/dist/cli.js +2352 -0
- package/docs/SKILLS-CATALOG.md +457 -0
- package/docs/USER-GUIDE.md +543 -0
- package/docs/agent-hierarchy.md +133 -0
- package/docs/coding-standards.md +135 -0
- package/docs/collaborative-design.md +439 -0
- package/docs/context-management.md +200 -0
- package/docs/coordination-rules.md +164 -0
- package/docs/directory-structure.md +156 -0
- package/docs/division-structure.md +135 -0
- package/docs/gamedev/coding-standards.md +184 -0
- package/docs/gates/README.md +169 -0
- package/docs/gates/gamedev-gates.md +509 -0
- package/docs/gates/software-gates.md +449 -0
- package/docs/software/coding-standards.md +165 -0
- package/docs/technical-preferences.md +61 -0
- package/docs/templates/accessibility-requirements.md +331 -0
- package/docs/templates/architecture-decision-record.md +177 -0
- package/docs/templates/architecture-doc-from-code.md +266 -0
- package/docs/templates/architecture-traceability.md +101 -0
- package/docs/templates/changelog-template.md +62 -0
- package/docs/templates/collaborative-protocols/design-agent-protocol.md +157 -0
- package/docs/templates/collaborative-protocols/implementation-agent-protocol.md +160 -0
- package/docs/templates/collaborative-protocols/leadership-agent-protocol.md +181 -0
- package/docs/templates/design-doc-from-implementation.md +204 -0
- package/docs/templates/incident-response.md +135 -0
- package/docs/templates/interaction-pattern-library.md +1089 -0
- package/docs/templates/milestone-definition.md +79 -0
- package/docs/templates/post-mortem.md +69 -0
- package/docs/templates/prd.md +222 -0
- package/docs/templates/project-stage-report.md +218 -0
- package/docs/templates/release-checklist-template.md +125 -0
- package/docs/templates/release-notes.md +103 -0
- package/docs/templates/rfc.md +256 -0
- package/docs/templates/risk-register-entry.md +58 -0
- package/docs/templates/skill-test-spec.md +96 -0
- package/docs/templates/sprint-plan.md +75 -0
- package/docs/templates/technical-design-document.md +98 -0
- package/docs/templates/test-evidence.md +86 -0
- package/docs/templates/test-plan.md +151 -0
- package/docs/templates/ux-spec.md +544 -0
- package/hooks/check-update.sh +82 -0
- package/hooks/detect-division.sh +28 -0
- package/hooks/detect-gaps.sh +230 -0
- package/hooks/log-agent-stop.sh +7 -0
- package/hooks/log-agent.sh +7 -0
- package/hooks/notify.sh +7 -0
- package/hooks/post-compact.sh +7 -0
- package/hooks/pre-compact.sh +7 -0
- package/hooks/session-start.sh +78 -0
- package/hooks/session-stop.sh +7 -0
- package/hooks/statusline.sh +98 -0
- package/hooks/validate-assets.sh +10 -0
- package/hooks/validate-commit.sh +24 -0
- package/hooks/validate-push.sh +21 -0
- package/hooks/validate-secrets.sh +23 -0
- package/hooks/validate-skill-change.sh +19 -0
- package/package.json +63 -0
- package/profiles/agile.yaml +60 -0
- package/profiles/ai.yaml +27 -0
- package/profiles/android-native.yaml +36 -0
- package/profiles/backend-go.yaml +56 -0
- package/profiles/backend-ts.yaml +59 -0
- package/profiles/business.yaml +24 -0
- package/profiles/clevel.yaml +48 -0
- package/profiles/clickup.yaml +21 -0
- package/profiles/core.yaml +83 -0
- package/profiles/database.yaml +28 -0
- package/profiles/design.yaml +30 -0
- package/profiles/docs.yaml +31 -0
- package/profiles/finance.yaml +23 -0
- package/profiles/flutter.yaml +37 -0
- package/profiles/frontend.yaml +39 -0
- package/profiles/infra.yaml +47 -0
- package/profiles/integrations.yaml +23 -0
- package/profiles/ios-native.yaml +37 -0
- package/profiles/jira.yaml +21 -0
- package/profiles/marketing.yaml +64 -0
- package/profiles/mobile.yaml +39 -0
- package/profiles/regulatory.yaml +33 -0
- package/profiles/security.yaml +30 -0
- package/profiles/self-improving.yaml +22 -0
- package/profiles/statusline.yaml +21 -0
- package/profiles/testing.yaml +32 -0
- package/profiles/unity-design.yaml +37 -0
- package/profiles/unity-dev.yaml +44 -0
- package/profiles/visual-novel.yaml +54 -0
- package/rules/ai-code.md +60 -0
- package/rules/api-code.md +41 -0
- package/rules/backend-code.md +35 -0
- package/rules/data-files.md +58 -0
- package/rules/frontend-code.md +35 -0
- package/rules/gamedev/ai-code.md +15 -0
- package/rules/gamedev/design-docs.md +18 -0
- package/rules/gamedev/engine-code.md +41 -0
- package/rules/gamedev/gameplay-code.md +31 -0
- package/rules/gamedev/narrative.md +15 -0
- package/rules/gamedev/network-code.md +15 -0
- package/rules/gamedev/shader-code.md +43 -0
- package/rules/gamedev/ui-code.md +15 -0
- package/rules/gamedev/vn-code.md +37 -0
- package/rules/implementation-workflow.md +48 -0
- package/rules/infra-code.md +47 -0
- package/rules/migration-code.md +41 -0
- package/rules/prototype-code.md +40 -0
- package/rules/test-standards.md +55 -0
- package/skills/ab-test-setup/SKILL.md +99 -0
- package/skills/ab-test-setup/references/sample-size-guide.md +252 -0
- package/skills/ab-test-setup/references/test-templates.md +268 -0
- package/skills/ab-test-setup/scripts/sample_size_calculator.py +337 -0
- package/skills/accessibility/SKILL.md +32 -0
- package/skills/accessibility/references/anti-patterns.md +9 -0
- package/skills/accessibility/references/component-requirements.md +15 -0
- package/skills/accessibility/references/focus-forms-testing.md +31 -0
- package/skills/accessibility/references/wcag-criteria.md +17 -0
- package/skills/ad-creative/SKILL.md +85 -0
- package/skills/ad-creative/references/creative-frameworks.md +253 -0
- package/skills/ad-creative/references/platform-specs.md +170 -0
- package/skills/ad-creative/scripts/ad_copy_validator.py +490 -0
- package/skills/agent-designer/README.md +430 -0
- package/skills/agent-designer/SKILL.md +64 -0
- package/skills/agent-designer/agent_evaluator.py +1223 -0
- package/skills/agent-designer/agent_planner.py +911 -0
- package/skills/agent-designer/assets/sample_execution_logs.json +543 -0
- package/skills/agent-designer/assets/sample_system_requirements.json +57 -0
- package/skills/agent-designer/assets/sample_tool_descriptions.json +545 -0
- package/skills/agent-designer/expected_outputs/sample_agent_architecture.json +488 -0
- package/skills/agent-designer/expected_outputs/sample_evaluation_report.json +570 -0
- package/skills/agent-designer/expected_outputs/sample_tool_schemas.json +416 -0
- package/skills/agent-designer/references/agent_architecture_patterns.md +445 -0
- package/skills/agent-designer/references/evaluation_methodology.md +749 -0
- package/skills/agent-designer/references/tool_design_best_practices.md +470 -0
- package/skills/agent-designer/tool_schema_generator.py +978 -0
- package/skills/agent-protocol/SKILL.md +102 -0
- package/skills/agent-protocol/references/communication-standard.md +115 -0
- package/skills/agent-protocol/references/invocation-patterns.md +247 -0
- package/skills/agent-protocol/references/quality-loop.md +123 -0
- package/skills/agent-workflow-designer/SKILL.md +59 -0
- package/skills/agent-workflow-designer/references/workflow-patterns.md +82 -0
- package/skills/agent-workflow-designer/scripts/workflow_scaffolder.py +113 -0
- package/skills/ai-security/SKILL.md +113 -0
- package/skills/ai-security/references/atlas-coverage.md +150 -0
- package/skills/ai-security/scripts/ai_threat_scanner.py +564 -0
- package/skills/ai-seo/SKILL.md +172 -0
- package/skills/ai-seo/references/ai-search-landscape.md +191 -0
- package/skills/ai-seo/references/content-patterns.md +276 -0
- package/skills/ai-seo/references/monitoring-guide.md +208 -0
- package/skills/ai-seo/references/optimization-playbook.md +58 -0
- package/skills/analytics-tracking/SKILL.md +105 -0
- package/skills/analytics-tracking/references/debugging-playbook.md +224 -0
- package/skills/analytics-tracking/references/event-taxonomy-guide.md +203 -0
- package/skills/analytics-tracking/references/gtm-patterns.md +298 -0
- package/skills/analytics-tracking/scripts/tracking_plan_generator.py +386 -0
- package/skills/android-native-dev/SKILL.md +878 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-design/SKILL.md +88 -0
- package/skills/api-design/references/anti-patterns.md +14 -0
- package/skills/api-design/references/versioning-deprecation.md +23 -0
- package/skills/api-docs/SKILL.md +101 -0
- package/skills/api-versioning/SKILL.md +51 -0
- package/skills/api-versioning/references/anti-patterns-and-checklist.md +27 -0
- package/skills/api-versioning/references/implementation-by-framework.md +31 -0
- package/skills/app-store-optimization/HOW_TO_USE.md +281 -0
- package/skills/app-store-optimization/SKILL.md +150 -0
- package/skills/app-store-optimization/assets/aso-audit-template.md +268 -0
- package/skills/app-store-optimization/expected_output.json +170 -0
- package/skills/app-store-optimization/references/ab-testing-guide.md +72 -0
- package/skills/app-store-optimization/references/aso-best-practices.md +403 -0
- package/skills/app-store-optimization/references/before-after-examples.md +73 -0
- package/skills/app-store-optimization/references/keyword-research-guide.md +419 -0
- package/skills/app-store-optimization/references/metadata-optimization.md +65 -0
- package/skills/app-store-optimization/references/platform-requirements.md +324 -0
- package/skills/app-store-optimization/sample_input.json +30 -0
- package/skills/app-store-optimization/scripts/ab_test_planner.py +662 -0
- package/skills/app-store-optimization/scripts/aso_scorer.py +482 -0
- package/skills/app-store-optimization/scripts/competitor_analyzer.py +577 -0
- package/skills/app-store-optimization/scripts/keyword_analyzer.py +406 -0
- package/skills/app-store-optimization/scripts/launch_checklist.py +739 -0
- package/skills/app-store-optimization/scripts/localization_helper.py +588 -0
- package/skills/app-store-optimization/scripts/metadata_optimizer.py +581 -0
- package/skills/app-store-optimization/scripts/review_analyzer.py +714 -0
- package/skills/arcane-add/SKILL.md +47 -0
- package/skills/arcane-clean/SKILL.md +45 -0
- package/skills/arcane-list/SKILL.md +46 -0
- package/skills/arcane-remove/SKILL.md +68 -0
- package/skills/arcane-status/SKILL.md +42 -0
- package/skills/architecture-decision/SKILL.md +75 -0
- package/skills/architecture-decision/templates/adr.md +101 -0
- package/skills/architecture-review/SKILL.md +90 -0
- package/skills/art-bible/SKILL.md +88 -0
- package/skills/art-bible/references/anti-patterns.md +8 -0
- package/skills/art-bible/references/checklist.md +17 -0
- package/skills/asset-audit/SKILL.md +95 -0
- package/skills/asset-spec/SKILL.md +72 -0
- package/skills/asset-spec/references/anti-patterns-checklist.md +19 -0
- package/skills/asset-spec/references/spec-output-format.md +34 -0
- package/skills/async-ops/SKILL.md +59 -0
- package/skills/async-ops/references/anti-patterns.md +16 -0
- package/skills/async-ops/references/checklist.md +10 -0
- package/skills/async-ops/references/job-scheduling.md +37 -0
- package/skills/async-ops/references/outbound-webhooks.md +19 -0
- package/skills/atlassian-admin/SKILL.md +121 -0
- package/skills/atlassian-admin/assets/permission_scheme_template.json +173 -0
- package/skills/atlassian-admin/references/security-hardening-guide.md +214 -0
- package/skills/atlassian-admin/references/user-provisioning-checklist.md +177 -0
- package/skills/atlassian-admin/scripts/permission_audit_tool.py +469 -0
- package/skills/atlassian-templates/SKILL.md +128 -0
- package/skills/atlassian-templates/references/governance-framework.md +234 -0
- package/skills/atlassian-templates/references/template-design-patterns.md +252 -0
- package/skills/atlassian-templates/scripts/template_scaffolder.py +418 -0
- package/skills/audit-dev/SKILL.md +43 -0
- package/skills/audit-game/SKILL.md +54 -0
- package/skills/audit-game/references/cross-reference-criteria.md +42 -0
- package/skills/audit-game/references/output-template.md +48 -0
- package/skills/audit-log/SKILL.md +75 -0
- package/skills/auth-strategy/SKILL.md +120 -0
- package/skills/auth-strategy/references/anti-patterns.md +21 -0
- package/skills/aws-solution-architect/SKILL.md +125 -0
- package/skills/aws-solution-architect/assets/expected_output.json +55 -0
- package/skills/aws-solution-architect/assets/sample_input.json +18 -0
- package/skills/aws-solution-architect/references/architecture_patterns.md +535 -0
- package/skills/aws-solution-architect/references/best_practices.md +631 -0
- package/skills/aws-solution-architect/references/service_selection.md +484 -0
- package/skills/aws-solution-architect/scripts/architecture_designer.py +808 -0
- package/skills/aws-solution-architect/scripts/cost_optimizer.py +346 -0
- package/skills/aws-solution-architect/scripts/serverless_stack.py +663 -0
- package/skills/azure-cloud-architect/SKILL.md +128 -0
- package/skills/azure-cloud-architect/references/architecture_patterns.md +413 -0
- package/skills/azure-cloud-architect/references/best_practices.md +337 -0
- package/skills/azure-cloud-architect/references/service_selection.md +250 -0
- package/skills/azure-cloud-architect/scripts/architecture_designer.py +592 -0
- package/skills/azure-cloud-architect/scripts/bicep_generator.py +775 -0
- package/skills/azure-cloud-architect/scripts/cost_optimizer.py +492 -0
- package/skills/backup-strategy/SKILL.md +101 -0
- package/skills/balance-check/SKILL.md +119 -0
- package/skills/board-deck-builder/SKILL.md +64 -0
- package/skills/board-deck-builder/references/deck-frameworks.md +184 -0
- package/skills/board-deck-builder/templates/board-deck-template.md +210 -0
- package/skills/board-meeting/SKILL.md +58 -0
- package/skills/board-meeting/references/meeting-facilitation.md +167 -0
- package/skills/board-meeting/templates/meeting-agenda.md +81 -0
- package/skills/board-meeting/templates/meeting-minutes.md +91 -0
- package/skills/brainstorm/SKILL.md +94 -0
- package/skills/brainstorm/references/next-steps-pipeline.md +13 -0
- package/skills/brainstorm/references/review-mode-gates.md +13 -0
- package/skills/brand-guidelines/SKILL.md +91 -0
- package/skills/brand-guidelines/references/brand-identity-and-framework.md +262 -0
- package/skills/bug-report/SKILL.md +53 -0
- package/skills/bug-triage/SKILL.md +74 -0
- package/skills/business-investment-advisor/SKILL.md +83 -0
- package/skills/business-investment-advisor/references/analysis-frameworks.md +113 -0
- package/skills/caching-strategy/SKILL.md +81 -0
- package/skills/caching-strategy/references/http-headers.md +9 -0
- package/skills/caching-strategy/references/patterns-and-invalidation.md +25 -0
- package/skills/caching-strategy/references/redis-and-client.md +13 -0
- package/skills/caching-strategy/references/ttl-defaults.md +11 -0
- package/skills/campaign-analytics/SKILL.md +93 -0
- package/skills/campaign-analytics/assets/ab_test_template.md +130 -0
- package/skills/campaign-analytics/assets/campaign_report_template.md +141 -0
- package/skills/campaign-analytics/assets/channel_comparison_template.md +158 -0
- package/skills/campaign-analytics/assets/expected_output.json +110 -0
- package/skills/campaign-analytics/assets/sample_campaign_data.json +151 -0
- package/skills/campaign-analytics/references/attribution-models-guide.md +285 -0
- package/skills/campaign-analytics/references/campaign-metrics-benchmarks.md +259 -0
- package/skills/campaign-analytics/references/funnel-optimization-framework.md +302 -0
- package/skills/campaign-analytics/scripts/attribution_analyzer.py +347 -0
- package/skills/campaign-analytics/scripts/campaign_roi_calculator.py +459 -0
- package/skills/campaign-analytics/scripts/funnel_analyzer.py +305 -0
- package/skills/capa-officer/SKILL.md +125 -0
- package/skills/capa-officer/references/effectiveness-verification-guide.md +462 -0
- package/skills/capa-officer/references/rca-methodologies.md +455 -0
- package/skills/capa-officer/scripts/capa_tracker.py +638 -0
- package/skills/capa-officer/scripts/root_cause_analyzer.py +486 -0
- package/skills/cdn-setup/SKILL.md +33 -0
- package/skills/cdn-setup/references/cache-strategy-and-invalidation.md +30 -0
- package/skills/cdn-setup/references/security-and-anti-patterns.md +26 -0
- package/skills/ceo-advisor/SKILL.md +110 -0
- package/skills/ceo-advisor/references/board_governance_investor_relations.md +599 -0
- package/skills/ceo-advisor/references/executive_decision_framework.md +475 -0
- package/skills/ceo-advisor/references/leadership_organizational_culture.md +682 -0
- package/skills/ceo-advisor/scripts/financial_scenario_analyzer.py +451 -0
- package/skills/ceo-advisor/scripts/strategy_analyzer.py +609 -0
- package/skills/cfo-advisor/SKILL.md +81 -0
- package/skills/cfo-advisor/references/cash_management.md +374 -0
- package/skills/cfo-advisor/references/financial_planning.md +500 -0
- package/skills/cfo-advisor/references/fundraising_playbook.md +419 -0
- package/skills/cfo-advisor/scripts/burn_rate_calculator.py +402 -0
- package/skills/cfo-advisor/scripts/fundraising_model.py +490 -0
- package/skills/cfo-advisor/scripts/unit_economics_analyzer.py +529 -0
- package/skills/change-management/SKILL.md +53 -0
- package/skills/change-management/references/adkar-details.md +110 -0
- package/skills/change-management/references/change-playbook.md +308 -0
- package/skills/changelog/SKILL.md +111 -0
- package/skills/check/SKILL.md +22 -0
- package/skills/chief-of-staff/SKILL.md +70 -0
- package/skills/chief-of-staff/references/routing-matrix.md +212 -0
- package/skills/chief-of-staff/references/synthesis-framework.md +201 -0
- package/skills/chro-advisor/SKILL.md +86 -0
- package/skills/chro-advisor/references/comp_frameworks.md +320 -0
- package/skills/chro-advisor/references/org_design.md +333 -0
- package/skills/chro-advisor/references/people_strategy.md +320 -0
- package/skills/chro-advisor/scripts/comp_benchmarker.py +613 -0
- package/skills/chro-advisor/scripts/hiring_plan_modeler.py +572 -0
- package/skills/churn-prevention/SKILL.md +200 -0
- package/skills/churn-prevention/references/cancel-flow-playbook.md +254 -0
- package/skills/churn-prevention/references/dunning-guide.md +276 -0
- package/skills/churn-prevention/references/exit-survey-and-save-offers.md +42 -0
- package/skills/churn-prevention/scripts/churn_impact_calculator.py +199 -0
- package/skills/ci-cd-setup/SKILL.md +66 -0
- package/skills/ci-cd-setup/references/anti-patterns.md +10 -0
- package/skills/ci-cd-setup/references/checklist.md +14 -0
- package/skills/ci-cd-setup/references/secret-and-deploy.md +30 -0
- package/skills/ciso-advisor/SKILL.md +86 -0
- package/skills/ciso-advisor/references/compliance_roadmap.md +370 -0
- package/skills/ciso-advisor/references/incident_response.md +350 -0
- package/skills/ciso-advisor/references/security_strategy.md +321 -0
- package/skills/ciso-advisor/scripts/compliance_tracker.py +781 -0
- package/skills/ciso-advisor/scripts/risk_quantifier.py +690 -0
- package/skills/clickup/SKILL.md +134 -0
- package/skills/cloud-security/SKILL.md +107 -0
- package/skills/cloud-security/references/cspm-checks.md +109 -0
- package/skills/cloud-security/scripts/cloud_posture_check.py +1180 -0
- package/skills/cmo-advisor/SKILL.md +82 -0
- package/skills/cmo-advisor/references/brand_positioning.md +374 -0
- package/skills/cmo-advisor/references/growth_frameworks.md +456 -0
- package/skills/cmo-advisor/references/marketing_org.md +281 -0
- package/skills/cmo-advisor/scripts/growth_model_simulator.py +416 -0
- package/skills/cmo-advisor/scripts/marketing_budget_modeler.py +440 -0
- package/skills/code-review/SKILL.md +66 -0
- package/skills/cold-email/SKILL.md +178 -0
- package/skills/cold-email/references/deliverability-guide.md +225 -0
- package/skills/cold-email/references/follow-up-playbook.md +225 -0
- package/skills/cold-email/references/frameworks.md +217 -0
- package/skills/cold-email/references/voice-and-subject-lines.md +41 -0
- package/skills/cold-email/scripts/email_sequence_analyzer.py +517 -0
- package/skills/commit/SKILL.md +25 -0
- package/skills/company-os/SKILL.md +66 -0
- package/skills/company-os/references/implementation-guide.md +249 -0
- package/skills/company-os/references/os-comparison.md +242 -0
- package/skills/company-os/references/six-components.md +129 -0
- package/skills/competitive-intel/SKILL.md +62 -0
- package/skills/competitive-intel/references/ci-playbook.md +237 -0
- package/skills/competitive-intel/templates/battlecard-template.md +99 -0
- package/skills/competitive-teardown/SKILL.md +169 -0
- package/skills/competitive-teardown/references/analysis-templates.md +203 -0
- package/skills/competitive-teardown/references/competitive-analysis-frameworks.md +107 -0
- package/skills/competitive-teardown/references/data-collection-guide.md +104 -0
- package/skills/competitive-teardown/references/scoring-rubric.md +116 -0
- package/skills/competitive-teardown/scripts/competitive_matrix_builder.py +299 -0
- package/skills/competitor-alternatives/SKILL.md +92 -0
- package/skills/competitor-alternatives/references/content-architecture.md +263 -0
- package/skills/competitor-alternatives/references/templates.md +212 -0
- package/skills/competitor-alternatives/scripts/comparison_matrix_builder.py +365 -0
- package/skills/confluence-expert/SKILL.md +129 -0
- package/skills/confluence-expert/references/macro-cheat-sheet.md +144 -0
- package/skills/confluence-expert/references/space-architecture-patterns.md +246 -0
- package/skills/confluence-expert/references/templates.md +725 -0
- package/skills/confluence-expert/scripts/content_audit_analyzer.py +457 -0
- package/skills/confluence-expert/scripts/space_structure_generator.py +517 -0
- package/skills/consistency-check/SKILL.md +68 -0
- package/skills/content-creator/SKILL.md +52 -0
- package/skills/content-creator/assets/content_calendar_template.md +99 -0
- package/skills/content-creator/examples/brand_voice_analysis_example.md +180 -0
- package/skills/content-creator/examples/seo_optimization_example.md +259 -0
- package/skills/content-creator/references/analytics_guide.md +352 -0
- package/skills/content-creator/references/brand_guidelines.md +219 -0
- package/skills/content-creator/references/content_frameworks.md +551 -0
- package/skills/content-creator/references/social_media_optimization.md +342 -0
- package/skills/content-humanizer/SKILL.md +193 -0
- package/skills/content-humanizer/references/ai-tells-checklist.md +157 -0
- package/skills/content-humanizer/references/voice-techniques.md +168 -0
- package/skills/content-humanizer/scripts/humanizer_scorer.py +504 -0
- package/skills/content-production/SKILL.md +192 -0
- package/skills/content-production/references/content-brief-guide.md +146 -0
- package/skills/content-production/references/optimization-checklist.md +139 -0
- package/skills/content-production/scripts/brand_voice_analyzer.py +197 -0
- package/skills/content-production/scripts/content_scorer.py +464 -0
- package/skills/content-production/scripts/seo_optimizer.py +433 -0
- package/skills/content-production/templates/content-brief-template.md +126 -0
- package/skills/content-strategy/SKILL.md +125 -0
- package/skills/content-strategy/references/content-strategy-reference.md +278 -0
- package/skills/content-strategy/scripts/topic_cluster_mapper.py +243 -0
- package/skills/context-engine/SKILL.md +50 -0
- package/skills/context-engine/references/anonymization-protocol.md +173 -0
- package/skills/context-prime/SKILL.md +25 -0
- package/skills/contract-and-proposal-writer/SKILL.md +126 -0
- package/skills/contract-and-proposal-writer/references/contract-templates.md +276 -0
- package/skills/contract-testing/SKILL.md +42 -0
- package/skills/contract-testing/references/anti-patterns-and-checklist.md +28 -0
- package/skills/contract-testing/references/implementation-details.md +29 -0
- package/skills/coo-advisor/SKILL.md +92 -0
- package/skills/coo-advisor/references/ops_cadence.md +606 -0
- package/skills/coo-advisor/references/process_frameworks.md +459 -0
- package/skills/coo-advisor/references/scaling_playbook.md +465 -0
- package/skills/coo-advisor/scripts/okr_tracker.py +1100 -0
- package/skills/coo-advisor/scripts/ops_efficiency_analyzer.py +1071 -0
- package/skills/copy-editing/SKILL.md +124 -0
- package/skills/copy-editing/references/copy-editing-checklist.md +134 -0
- package/skills/copy-editing/references/plain-english-alternatives.md +376 -0
- package/skills/copy-editing/references/seven-sweeps-framework.md +228 -0
- package/skills/copy-editing/scripts/readability_scorer.py +285 -0
- package/skills/copywriting/SKILL.md +192 -0
- package/skills/copywriting/references/copy-frameworks.md +338 -0
- package/skills/copywriting/references/natural-transitions.md +252 -0
- package/skills/copywriting/references/writing-style-rules.md +63 -0
- package/skills/copywriting/scripts/headline_scorer.py +256 -0
- package/skills/cpo-advisor/SKILL.md +102 -0
- package/skills/cpo-advisor/references/pmf_playbook.md +307 -0
- package/skills/cpo-advisor/references/product_org_design.md +407 -0
- package/skills/cpo-advisor/references/product_strategy.md +454 -0
- package/skills/cpo-advisor/scripts/pmf_scorer.py +600 -0
- package/skills/cpo-advisor/scripts/portfolio_analyzer.py +547 -0
- package/skills/create-epics/SKILL.md +65 -0
- package/skills/create-pr/SKILL.md +26 -0
- package/skills/create-stories/SKILL.md +85 -0
- package/skills/create-test-user/SKILL.md +37 -0
- package/skills/create-ticket/SKILL.md +50 -0
- package/skills/cro-advisor/SKILL.md +86 -0
- package/skills/cro-advisor/references/nrr_playbook.md +380 -0
- package/skills/cro-advisor/references/pricing_strategy.md +417 -0
- package/skills/cro-advisor/references/sales_playbook.md +461 -0
- package/skills/cro-advisor/scripts/churn_analyzer.py +742 -0
- package/skills/cro-advisor/scripts/revenue_forecast_model.py +571 -0
- package/skills/cs-onboard/SKILL.md +60 -0
- package/skills/cs-onboard/references/interview-guide.md +173 -0
- package/skills/cs-onboard/templates/company-context-template.md +144 -0
- package/skills/csp-headers/SKILL.md +53 -0
- package/skills/csp-headers/references/anti-patterns-checklist.md +26 -0
- package/skills/csp-headers/references/implementation.md +18 -0
- package/skills/cto-advisor/SKILL.md +95 -0
- package/skills/cto-advisor/references/architecture_decision_records.md +294 -0
- package/skills/cto-advisor/references/engineering_metrics.md +393 -0
- package/skills/cto-advisor/references/technology_evaluation_framework.md +370 -0
- package/skills/cto-advisor/references/workflows.md +84 -0
- package/skills/cto-advisor/scripts/team_scaling_calculator.py +562 -0
- package/skills/cto-advisor/scripts/tech_debt_analyzer.py +450 -0
- package/skills/culture-architect/SKILL.md +66 -0
- package/skills/culture-architect/references/culture-playbook.md +243 -0
- package/skills/culture-architect/templates/culture-code-template.md +137 -0
- package/skills/customer-success-manager/SKILL.md +97 -0
- package/skills/customer-success-manager/assets/executive_business_review_template.md +209 -0
- package/skills/customer-success-manager/assets/expected_output.json +170 -0
- package/skills/customer-success-manager/assets/onboarding_checklist_template.md +215 -0
- package/skills/customer-success-manager/assets/qbr_template.md +163 -0
- package/skills/customer-success-manager/assets/sample_customer_data.json +314 -0
- package/skills/customer-success-manager/assets/success_plan_template.md +167 -0
- package/skills/customer-success-manager/references/cs-metrics-benchmarks.md +259 -0
- package/skills/customer-success-manager/references/cs-playbooks.md +290 -0
- package/skills/customer-success-manager/references/health-scoring-framework.md +184 -0
- package/skills/customer-success-manager/scripts/churn_risk_analyzer.py +487 -0
- package/skills/customer-success-manager/scripts/expansion_opportunity_scorer.py +414 -0
- package/skills/customer-success-manager/scripts/health_score_calculator.py +438 -0
- package/skills/data-migrations/SKILL.md +113 -0
- package/skills/data-migrations/references/anti-patterns.md +14 -0
- package/skills/data-migrations/references/batching.md +9 -0
- package/skills/data-migrations/references/checklist.md +14 -0
- package/skills/data-migrations/references/expand-contract.md +19 -0
- package/skills/data-operations/SKILL.md +59 -0
- package/skills/data-operations/references/anti-patterns.md +17 -0
- package/skills/data-operations/references/query-optimization.md +37 -0
- package/skills/data-operations/references/seeding.md +38 -0
- package/skills/data-seeding/SKILL.md +96 -0
- package/skills/database/SKILL.md +74 -0
- package/skills/database/references/anti-patterns.md +20 -0
- package/skills/database/references/query-patterns.md +32 -0
- package/skills/database-indexing/SKILL.md +85 -0
- package/skills/database-indexing/references/anti-patterns.md +14 -0
- package/skills/database-indexing/references/checklists.md +23 -0
- package/skills/database-indexing/references/index-types.md +18 -0
- package/skills/database-setup/SKILL.md +109 -0
- package/skills/database-setup/references/indexing-guide.md +126 -0
- package/skills/db-diagram/SKILL.md +87 -0
- package/skills/decision-logger/SKILL.md +59 -0
- package/skills/decision-logger/references/entry-format.md +55 -0
- package/skills/decision-logger/scripts/decision_tracker.py +620 -0
- package/skills/decision-logger/templates/decision-entry.md +63 -0
- package/skills/deploy-check/SKILL.md +87 -0
- package/skills/deploy-staging/SKILL.md +44 -0
- package/skills/deps-audit/SKILL.md +92 -0
- package/skills/design-handoff/SKILL.md +49 -0
- package/skills/design-system/SKILL.md +56 -0
- package/skills/design-system/references/post-design-validation.md +8 -0
- package/skills/design-system/references/section-guidance.md +29 -0
- package/skills/distributed-tracing/SKILL.md +86 -0
- package/skills/doc-gdd/SKILL.md +56 -0
- package/skills/doc-pas/SKILL.md +41 -0
- package/skills/doc-pas/references/examples-and-usage.md +27 -0
- package/skills/doc-pas/references/output-format-template.md +63 -0
- package/skills/doc-rfc/SKILL.md +55 -0
- package/skills/doc-rfc/templates/decision.md +38 -0
- package/skills/doc-rfc/templates/epica.md +68 -0
- package/skills/doc-rfc/templates/hu.md +52 -0
- package/skills/doc-rfc/templates/tarea.md +37 -0
- package/skills/docker-setup/SKILL.md +78 -0
- package/skills/docker-setup/references/anti-patterns.md +10 -0
- package/skills/docker-setup/references/checklists.md +34 -0
- package/skills/docker-setup/references/size-optimization.md +7 -0
- package/skills/docx-generator/SKILL.md +249 -0
- package/skills/docx-generator/assets/styles/academic_styles.xml +250 -0
- package/skills/docx-generator/assets/styles/corporate_styles.xml +284 -0
- package/skills/docx-generator/assets/styles/default_styles.xml +449 -0
- package/skills/docx-generator/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/docx-generator/assets/xsd/business-rules.xsd +130 -0
- package/skills/docx-generator/assets/xsd/common-types.xsd +159 -0
- package/skills/docx-generator/assets/xsd/wml-subset.xsd +589 -0
- package/skills/docx-generator/references/cjk_typography.md +357 -0
- package/skills/docx-generator/references/cjk_university_template_guide.md +184 -0
- package/skills/docx-generator/references/comments_guide.md +191 -0
- package/skills/docx-generator/references/design_good_bad_examples.md +829 -0
- package/skills/docx-generator/references/design_principles.md +819 -0
- package/skills/docx-generator/references/openxml_element_order.md +308 -0
- package/skills/docx-generator/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/docx-generator/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/docx-generator/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/docx-generator/references/openxml_namespaces.md +82 -0
- package/skills/docx-generator/references/openxml_units.md +72 -0
- package/skills/docx-generator/references/scenario_a_create.md +284 -0
- package/skills/docx-generator/references/scenario_b_edit_content.md +295 -0
- package/skills/docx-generator/references/scenario_c_apply_template.md +456 -0
- package/skills/docx-generator/references/track_changes_guide.md +200 -0
- package/skills/docx-generator/references/troubleshooting.md +506 -0
- package/skills/docx-generator/references/typography_guide.md +294 -0
- package/skills/docx-generator/references/xsd_validation_guide.md +158 -0
- package/skills/docx-generator/scripts/doc_to_docx.sh +40 -0
- package/skills/docx-generator/scripts/docx_preview.sh +37 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/docx-generator/scripts/env_check.sh +196 -0
- package/skills/docx-generator/scripts/setup.ps1 +274 -0
- package/skills/docx-generator/scripts/setup.sh +504 -0
- package/skills/email-sequence/SKILL.md +119 -0
- package/skills/email-sequence/references/email-sequence-playbook.md +209 -0
- package/skills/email-sequence/scripts/sequence_analyzer.py +354 -0
- package/skills/email-template-builder/SKILL.md +93 -0
- package/skills/email-template-builder/references/react-email-templates.md +323 -0
- package/skills/env-sync/SKILL.md +102 -0
- package/skills/error-tracking/SKILL.md +25 -0
- package/skills/error-tracking/references/anti-patterns-and-checklist.md +23 -0
- package/skills/error-tracking/references/operational-details.md +38 -0
- package/skills/error-tracking/references/setup-per-stack.md +24 -0
- package/skills/estimate/SKILL.md +51 -0
- package/skills/estimate/references/complexity-factors.md +30 -0
- package/skills/estimate/references/estimate-template.md +60 -0
- package/skills/executive-mentor/.claude-plugin/plugin.json +13 -0
- package/skills/executive-mentor/SKILL.md +90 -0
- package/skills/executive-mentor/agents/devils-advocate.md +139 -0
- package/skills/executive-mentor/references/board_dynamics.md +263 -0
- package/skills/executive-mentor/references/crisis_playbook.md +173 -0
- package/skills/executive-mentor/references/hard_things.md +256 -0
- package/skills/executive-mentor/scripts/decision_matrix_scorer.py +491 -0
- package/skills/executive-mentor/scripts/stakeholder_mapper.py +547 -0
- package/skills/executive-mentor/skills/board-prep/SKILL.md +76 -0
- package/skills/executive-mentor/skills/challenge/SKILL.md +80 -0
- package/skills/executive-mentor/skills/hard-call/SKILL.md +64 -0
- package/skills/executive-mentor/skills/postmortem/SKILL.md +78 -0
- package/skills/executive-mentor/skills/stress-test/SKILL.md +74 -0
- package/skills/executive-mentor/skills/stress-test/references/patterns-by-type.md +73 -0
- package/skills/experiment-designer/SKILL.md +108 -0
- package/skills/experiment-designer/references/experiment-playbook.md +70 -0
- package/skills/experiment-designer/references/statistics-reference.md +56 -0
- package/skills/experiment-designer/scripts/sample_size_calculator.py +100 -0
- package/skills/fda-consultant-specialist/SKILL.md +102 -0
- package/skills/fda-consultant-specialist/references/device_cybersecurity_guidance.md +695 -0
- package/skills/fda-consultant-specialist/references/fda_capa_requirements.md +718 -0
- package/skills/fda-consultant-specialist/references/fda_submission_guide.md +400 -0
- package/skills/fda-consultant-specialist/references/hipaa_compliance_framework.md +721 -0
- package/skills/fda-consultant-specialist/references/qsr_compliance_requirements.md +753 -0
- package/skills/fda-consultant-specialist/scripts/fda_submission_tracker.py +493 -0
- package/skills/fda-consultant-specialist/scripts/hipaa_risk_assessment.py +626 -0
- package/skills/fda-consultant-specialist/scripts/qsr_compliance_checker.py +618 -0
- package/skills/feature-flags/SKILL.md +98 -0
- package/skills/figma/SKILL.md +124 -0
- package/skills/figma-to-code/SKILL.md +80 -0
- package/skills/figma-to-code/references/checklist-and-output.md +32 -0
- package/skills/figma-to-code/references/stack-detection.md +34 -0
- package/skills/figma-tokens/SKILL.md +55 -0
- package/skills/file-uploads/SKILL.md +95 -0
- package/skills/financial-analyst/SKILL.md +152 -0
- package/skills/financial-analyst/assets/dcf_analysis_template.md +184 -0
- package/skills/financial-analyst/assets/expected_output.json +161 -0
- package/skills/financial-analyst/assets/forecast_report_template.md +177 -0
- package/skills/financial-analyst/assets/sample_financial_data.json +219 -0
- package/skills/financial-analyst/assets/variance_report_template.md +122 -0
- package/skills/financial-analyst/references/financial-ratios-guide.md +376 -0
- package/skills/financial-analyst/references/forecasting-best-practices.md +279 -0
- package/skills/financial-analyst/references/industry-adaptations.md +103 -0
- package/skills/financial-analyst/references/valuation-methodology.md +246 -0
- package/skills/financial-analyst/scripts/budget_variance_analyzer.py +406 -0
- package/skills/financial-analyst/scripts/dcf_valuation.py +449 -0
- package/skills/financial-analyst/scripts/forecast_builder.py +494 -0
- package/skills/financial-analyst/scripts/ratio_calculator.py +432 -0
- package/skills/fix-issue/SKILL.md +19 -0
- package/skills/flutter-dev/SKILL.md +122 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +306 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +274 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/form-cro/SKILL.md +128 -0
- package/skills/form-cro/references/experiments.md +77 -0
- package/skills/form-cro/references/form-cro-playbook.md +271 -0
- package/skills/form-cro/scripts/form_field_analyzer.py +291 -0
- package/skills/form-validation/SKILL.md +75 -0
- package/skills/founder-coach/SKILL.md +57 -0
- package/skills/founder-coach/references/delegation-energy.md +124 -0
- package/skills/founder-coach/references/founder-toolkit.md +296 -0
- package/skills/founder-coach/references/leadership-evolution.md +112 -0
- package/skills/founder-coach/references/leadership-growth.md +178 -0
- package/skills/free-tool-strategy/SKILL.md +167 -0
- package/skills/free-tool-strategy/references/design-and-lead-capture.md +58 -0
- package/skills/free-tool-strategy/references/launch-playbook.md +182 -0
- package/skills/free-tool-strategy/references/tool-types-guide.md +253 -0
- package/skills/free-tool-strategy/scripts/tool_roi_estimator.py +401 -0
- package/skills/frontend-dev/SKILL.md +555 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +686 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/game-analysis/SKILL.md +51 -0
- package/skills/game-analysis/references/anti-patterns-checklist.md +25 -0
- package/skills/game-analysis/references/balance-report-format.md +21 -0
- package/skills/game-analysis/references/playtest-template.md +28 -0
- package/skills/game-audit/SKILL.md +66 -0
- package/skills/game-docs/SKILL.md +58 -0
- package/skills/game-docs/references/gdd-structure.md +24 -0
- package/skills/game-docs/references/pas-format.md +49 -0
- package/skills/game-docs/references/writing-rules.md +17 -0
- package/skills/gate-check/SKILL.md +93 -0
- package/skills/gcp-cloud-architect/SKILL.md +127 -0
- package/skills/gcp-cloud-architect/references/architecture_patterns.md +512 -0
- package/skills/gcp-cloud-architect/references/best_practices.md +467 -0
- package/skills/gcp-cloud-architect/references/service_selection.md +547 -0
- package/skills/gcp-cloud-architect/scripts/architecture_designer.py +805 -0
- package/skills/gcp-cloud-architect/scripts/cost_optimizer.py +465 -0
- package/skills/gcp-cloud-architect/scripts/deployment_manager.py +835 -0
- package/skills/gdocs/SKILL.md +128 -0
- package/skills/gdpr-dsgvo-expert/SKILL.md +97 -0
- package/skills/gdpr-dsgvo-expert/references/dpia_methodology.md +412 -0
- package/skills/gdpr-dsgvo-expert/references/gdpr_compliance_guide.md +336 -0
- package/skills/gdpr-dsgvo-expert/references/german_bdsg_requirements.md +327 -0
- package/skills/gdpr-dsgvo-expert/scripts/data_subject_rights_tracker.py +541 -0
- package/skills/gdpr-dsgvo-expert/scripts/dpia_generator.py +670 -0
- package/skills/gdpr-dsgvo-expert/scripts/gdpr_compliance_checker.py +443 -0
- package/skills/gdrive/SKILL.md +46 -0
- package/skills/gh-projects/SKILL.md +103 -0
- package/skills/gh-projects/references/graphql-queries.md +207 -0
- package/skills/git-worktree-manager/SKILL.md +86 -0
- package/skills/git-worktree-manager/references/docker-compose-patterns.md +62 -0
- package/skills/git-worktree-manager/references/port-allocation-strategy.md +46 -0
- package/skills/git-worktree-manager/scripts/worktree_cleanup.py +196 -0
- package/skills/git-worktree-manager/scripts/worktree_manager.py +240 -0
- package/skills/go-clean-architecture/SKILL.md +95 -0
- package/skills/go-clean-architecture/references/anti-patterns.md +7 -0
- package/skills/go-clean-architecture/references/checklist.md +13 -0
- package/skills/gsheets/SKILL.md +46 -0
- package/skills/helm-chart-builder/.claude-plugin/plugin.json +13 -0
- package/skills/helm-chart-builder/SKILL.md +122 -0
- package/skills/helm-chart-builder/references/chart-patterns.md +435 -0
- package/skills/helm-chart-builder/references/values-design.md +462 -0
- package/skills/helm-chart-builder/scripts/chart_analyzer.py +542 -0
- package/skills/helm-chart-builder/scripts/values_validator.py +442 -0
- package/skills/help/SKILL.md +75 -0
- package/skills/hotfix/SKILL.md +63 -0
- package/skills/i18n-setup/SKILL.md +79 -0
- package/skills/incident/SKILL.md +107 -0
- package/skills/incident-commander/SKILL.md +133 -0
- package/skills/incident-commander/assets/incident_report_template.md +171 -0
- package/skills/incident-commander/assets/runbook_template.md +289 -0
- package/skills/incident-commander/assets/sample_incident_classification.json +14 -0
- package/skills/incident-commander/assets/sample_incident_data.json +276 -0
- package/skills/incident-commander/assets/sample_incident_pir_data.json +74 -0
- package/skills/incident-commander/assets/sample_timeline_events.json +263 -0
- package/skills/incident-commander/assets/simple_incident.json +6 -0
- package/skills/incident-commander/assets/simple_timeline_events.json +30 -0
- package/skills/incident-commander/expected_outputs/incident_classification_text_output.txt +44 -0
- package/skills/incident-commander/expected_outputs/pir_markdown_output.md +88 -0
- package/skills/incident-commander/expected_outputs/simple_incident_classification.txt +44 -0
- package/skills/incident-commander/expected_outputs/timeline_reconstruction_text_output.txt +110 -0
- package/skills/incident-commander/references/communication_templates.md +591 -0
- package/skills/incident-commander/references/incident-response-framework.md +372 -0
- package/skills/incident-commander/references/incident_severity_matrix.md +292 -0
- package/skills/incident-commander/references/rca_frameworks_guide.md +562 -0
- package/skills/incident-commander/references/reference-information.md +201 -0
- package/skills/incident-commander/references/sla-management-guide.md +566 -0
- package/skills/incident-commander/scripts/incident_classifier.py +914 -0
- package/skills/incident-commander/scripts/incident_timeline_builder.py +742 -0
- package/skills/incident-commander/scripts/pir_generator.py +1638 -0
- package/skills/incident-commander/scripts/postmortem_generator.py +804 -0
- package/skills/incident-commander/scripts/severity_classifier.py +1228 -0
- package/skills/incident-commander/scripts/timeline_reconstructor.py +1007 -0
- package/skills/incident-response/SKILL.md +103 -0
- package/skills/incident-response/references/regulatory-deadlines.md +125 -0
- package/skills/incident-response/scripts/incident_triage.py +768 -0
- package/skills/information-security-manager-iso27001/SKILL.md +120 -0
- package/skills/information-security-manager-iso27001/references/incident-response.md +420 -0
- package/skills/information-security-manager-iso27001/references/iso27001-controls.md +381 -0
- package/skills/information-security-manager-iso27001/references/risk-assessment-guide.md +262 -0
- package/skills/information-security-manager-iso27001/scripts/compliance_checker.py +398 -0
- package/skills/information-security-manager-iso27001/scripts/risk_assessment.py +403 -0
- package/skills/internal-narrative/SKILL.md +68 -0
- package/skills/internal-narrative/references/narrative-frameworks.md +211 -0
- package/skills/internal-narrative/templates/all-hands-template.md +103 -0
- package/skills/intl-expansion/SKILL.md +72 -0
- package/skills/intl-expansion/references/market-entry-playbook.md +138 -0
- package/skills/intl-expansion/references/regional-guide.md +144 -0
- package/skills/ios-application-dev/SKILL.md +172 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/isms-audit-expert/SKILL.md +108 -0
- package/skills/isms-audit-expert/references/cloud-security-audit.md +226 -0
- package/skills/isms-audit-expert/references/iso27001-audit-methodology.md +260 -0
- package/skills/isms-audit-expert/references/security-control-testing.md +276 -0
- package/skills/isms-audit-expert/scripts/isms_audit_scheduler.py +279 -0
- package/skills/jira-tickets/SKILL.md +52 -0
- package/skills/jira-tickets/references/states-epics-sprints.md +43 -0
- package/skills/jira-tickets/references/team-data.md +51 -0
- package/skills/job-scheduling/SKILL.md +107 -0
- package/skills/jwt-strategy/SKILL.md +74 -0
- package/skills/jwt-strategy/references/anti-patterns.md +16 -0
- package/skills/jwt-strategy/references/checklist.md +13 -0
- package/skills/jwt-strategy/references/implementation.md +21 -0
- package/skills/kickoff/SKILL.md +180 -0
- package/skills/launch-strategy/SKILL.md +72 -0
- package/skills/launch-strategy/references/launch-frameworks-and-checklists.md +317 -0
- package/skills/launch-strategy/scripts/launch_readiness_scorer.py +301 -0
- package/skills/llm-cost-optimizer/SKILL.md +194 -0
- package/skills/local-database-setup/SKILL.md +48 -0
- package/skills/logging-setup/SKILL.md +79 -0
- package/skills/logging-setup/references/anti-patterns.md +7 -0
- package/skills/logging-setup/references/checklist.md +14 -0
- package/skills/logging-setup/references/pii-audit-access.md +25 -0
- package/skills/ma-playbook/SKILL.md +72 -0
- package/skills/ma-playbook/references/due-diligence-checklist.md +148 -0
- package/skills/ma-playbook/references/integration-playbook.md +145 -0
- package/skills/map-systems/SKILL.md +82 -0
- package/skills/map-systems/references/dependency-layers-priorities.md +36 -0
- package/skills/map-systems/references/implicit-systems.md +13 -0
- package/skills/marketing-context/SKILL.md +167 -0
- package/skills/marketing-context/references/context-template.md +64 -0
- package/skills/marketing-context/scripts/context_validator.py +219 -0
- package/skills/marketing-context/templates/marketing-context-template.md +133 -0
- package/skills/marketing-demand-acquisition/SKILL.md +124 -0
- package/skills/marketing-demand-acquisition/references/attribution-guide.md +217 -0
- package/skills/marketing-demand-acquisition/references/campaign-templates.md +221 -0
- package/skills/marketing-demand-acquisition/references/hubspot-workflows.md +168 -0
- package/skills/marketing-demand-acquisition/references/international-playbooks.md +200 -0
- package/skills/marketing-demand-acquisition/scripts/calculate_cac.py +101 -0
- package/skills/marketing-ideas/SKILL.md +83 -0
- package/skills/marketing-ideas/references/ideas-by-category.md +347 -0
- package/skills/marketing-ops/SKILL.md +188 -0
- package/skills/marketing-ops/references/routing-matrix.md +37 -0
- package/skills/marketing-ops/scripts/campaign_tracker.py +156 -0
- package/skills/marketing-psychology/SKILL.md +121 -0
- package/skills/marketing-psychology/references/mental-models-catalog.md +397 -0
- package/skills/marketing-strategy-pmm/SKILL.md +130 -0
- package/skills/marketing-strategy-pmm/references/international-gtm.md +401 -0
- package/skills/marketing-strategy-pmm/references/launch-checklists.md +333 -0
- package/skills/marketing-strategy-pmm/references/messaging-templates.md +446 -0
- package/skills/marketing-strategy-pmm/references/positioning-frameworks.md +279 -0
- package/skills/mcp-server-builder/SKILL.md +109 -0
- package/skills/mcp-server-builder/references/openapi-extraction-guide.md +34 -0
- package/skills/mcp-server-builder/references/python-server-template.md +22 -0
- package/skills/mcp-server-builder/references/typescript-server-template.md +19 -0
- package/skills/mcp-server-builder/references/validation-checklist.md +30 -0
- package/skills/mcp-server-builder/scripts/mcp_validator.py +186 -0
- package/skills/mcp-server-builder/scripts/openapi_to_mcp.py +284 -0
- package/skills/mdr-745-specialist/SKILL.md +110 -0
- package/skills/mdr-745-specialist/references/clinical-evidence-requirements.md +303 -0
- package/skills/mdr-745-specialist/references/mdr-classification-guide.md +289 -0
- package/skills/mdr-745-specialist/references/technical-documentation-templates.md +355 -0
- package/skills/mdr-745-specialist/scripts/mdr_gap_analyzer.py +511 -0
- package/skills/meeting-analyzer/SKILL.md +99 -0
- package/skills/meeting-analyzer/references/analysis-modules.md +92 -0
- package/skills/meeting-to-tasks/SKILL.md +63 -0
- package/skills/mfa-setup/SKILL.md +111 -0
- package/skills/mfa-setup/references/anti-patterns.md +15 -0
- package/skills/mfa-setup/references/checklist.md +17 -0
- package/skills/mfa-setup/references/rate-limiting.md +10 -0
- package/skills/mfa-setup/references/role-rules.md +9 -0
- package/skills/mfa-setup/references/schema-db.md +5 -0
- package/skills/milestone-review/SKILL.md +46 -0
- package/skills/monorepo-setup/SKILL.md +66 -0
- package/skills/monorepo-setup/references/anti-patterns-and-checklist.md +27 -0
- package/skills/ms365-tenant-manager/SKILL.md +104 -0
- package/skills/ms365-tenant-manager/expected_output.json +86 -0
- package/skills/ms365-tenant-manager/references/powershell-templates.md +704 -0
- package/skills/ms365-tenant-manager/references/security-policies.md +357 -0
- package/skills/ms365-tenant-manager/references/troubleshooting.md +411 -0
- package/skills/ms365-tenant-manager/references/workflow-scripts.md +145 -0
- package/skills/ms365-tenant-manager/sample_input.json +21 -0
- package/skills/ms365-tenant-manager/scripts/powershell_generator.py +430 -0
- package/skills/ms365-tenant-manager/scripts/tenant_setup.py +447 -0
- package/skills/ms365-tenant-manager/scripts/user_management.py +447 -0
- package/skills/oauth-setup/SKILL.md +92 -0
- package/skills/observability/SKILL.md +88 -0
- package/skills/observability-ops/SKILL.md +42 -0
- package/skills/observability-ops/references/anti-patterns.md +14 -0
- package/skills/observability-ops/references/slo-sli-framework.md +44 -0
- package/skills/observability-ops/references/tracing-setup.md +35 -0
- package/skills/observability-setup/SKILL.md +43 -0
- package/skills/observability-setup/references/conventions-and-anti-patterns.md +32 -0
- package/skills/observability-setup/references/stack-setup-details.md +23 -0
- package/skills/onboard/SKILL.md +123 -0
- package/skills/onboarding-cro/SKILL.md +149 -0
- package/skills/onboarding-cro/references/experiments.md +89 -0
- package/skills/onboarding-cro/scripts/activation_funnel_analyzer.py +217 -0
- package/skills/optimize/SKILL.md +27 -0
- package/skills/org-health-diagnostic/SKILL.md +79 -0
- package/skills/org-health-diagnostic/references/health-benchmarks.md +217 -0
- package/skills/org-health-diagnostic/scripts/health_scorer.py +585 -0
- package/skills/owasp-top10-check/SKILL.md +110 -0
- package/skills/owasp-top10-check/references/anti-patterns.md +19 -0
- package/skills/owasp-top10-check/references/educabot-specifics.md +6 -0
- package/skills/owasp-top10-check/references/tools.md +9 -0
- package/skills/page-cro/SKILL.md +160 -0
- package/skills/page-cro/references/experiments.md +71 -0
- package/skills/page-cro/scripts/conversion_audit.py +427 -0
- package/skills/paid-ads/SKILL.md +162 -0
- package/skills/paid-ads/references/ad-copy-templates.md +200 -0
- package/skills/paid-ads/references/audience-targeting.md +234 -0
- package/skills/paid-ads/references/campaign-structure.md +103 -0
- package/skills/paid-ads/references/platform-setup-checklists.md +269 -0
- package/skills/paid-ads/scripts/roas_calculator.py +304 -0
- package/skills/patch-notes/SKILL.md +51 -0
- package/skills/paywall-upgrade-cro/SKILL.md +189 -0
- package/skills/paywall-upgrade-cro/references/experiments.md +78 -0
- package/skills/pdf-generator/SKILL.md +181 -0
- package/skills/pdf-generator/design/design.md +381 -0
- package/skills/pdf-generator/scripts/cover.py +1579 -0
- package/skills/pdf-generator/scripts/fill_inspect.py +200 -0
- package/skills/pdf-generator/scripts/fill_write.py +242 -0
- package/skills/pdf-generator/scripts/make.sh +491 -0
- package/skills/pdf-generator/scripts/merge.py +112 -0
- package/skills/pdf-generator/scripts/palette.py +521 -0
- package/skills/pdf-generator/scripts/reformat_parse.py +374 -0
- package/skills/pdf-generator/scripts/render_body.py +1052 -0
- package/skills/pdf-generator/scripts/render_cover.js +111 -0
- package/skills/perf-profile/SKILL.md +82 -0
- package/skills/performance/SKILL.md +37 -0
- package/skills/performance/references/anti-patterns.md +25 -0
- package/skills/performance/references/cache-strategy.md +48 -0
- package/skills/performance/references/rate-limit-config.md +48 -0
- package/skills/performance-test/SKILL.md +87 -0
- package/skills/playtest-report/SKILL.md +45 -0
- package/skills/playwright-pro/.mcp.json +27 -0
- package/skills/playwright-pro/CLAUDE.md +84 -0
- package/skills/playwright-pro/LICENSE +21 -0
- package/skills/playwright-pro/SKILL.md +91 -0
- package/skills/playwright-pro/agents/migration-planner.md +121 -0
- package/skills/playwright-pro/agents/test-architect.md +105 -0
- package/skills/playwright-pro/agents/test-debugger.md +117 -0
- package/skills/playwright-pro/hooks/detect-playwright.sh +23 -0
- package/skills/playwright-pro/hooks/hooks.json +25 -0
- package/skills/playwright-pro/hooks/validate-test.sh +58 -0
- package/skills/playwright-pro/references/assertions.md +89 -0
- package/skills/playwright-pro/references/common-pitfalls.md +137 -0
- package/skills/playwright-pro/references/fixtures.md +121 -0
- package/skills/playwright-pro/references/flaky-tests.md +56 -0
- package/skills/playwright-pro/references/golden-rules.md +12 -0
- package/skills/playwright-pro/references/locators.md +77 -0
- package/skills/playwright-pro/settings.json +8 -0
- package/skills/playwright-pro/skills/browserstack/SKILL.md +169 -0
- package/skills/playwright-pro/skills/fix/SKILL.md +114 -0
- package/skills/playwright-pro/skills/fix/flaky-taxonomy.md +134 -0
- package/skills/playwright-pro/skills/generate/SKILL.md +145 -0
- package/skills/playwright-pro/skills/generate/patterns.md +163 -0
- package/skills/playwright-pro/skills/init/SKILL.md +168 -0
- package/skills/playwright-pro/skills/migrate/SKILL.md +136 -0
- package/skills/playwright-pro/skills/migrate/cypress-mapping.md +79 -0
- package/skills/playwright-pro/skills/migrate/selenium-mapping.md +94 -0
- package/skills/playwright-pro/skills/report/SKILL.md +127 -0
- package/skills/playwright-pro/skills/review/SKILL.md +103 -0
- package/skills/playwright-pro/skills/review/anti-patterns.md +182 -0
- package/skills/playwright-pro/skills/testrail/SKILL.md +130 -0
- package/skills/playwright-pro/templates/README.md +123 -0
- package/skills/playwright-pro/templates/accessibility/color-contrast.md +162 -0
- package/skills/playwright-pro/templates/accessibility/keyboard-navigation.md +149 -0
- package/skills/playwright-pro/templates/accessibility/screen-reader.md +159 -0
- package/skills/playwright-pro/templates/api/auth-headers.md +148 -0
- package/skills/playwright-pro/templates/api/error-responses.md +157 -0
- package/skills/playwright-pro/templates/api/graphql.md +174 -0
- package/skills/playwright-pro/templates/api/rate-limiting.md +152 -0
- package/skills/playwright-pro/templates/api/rest-crud.md +152 -0
- package/skills/playwright-pro/templates/auth/login.md +119 -0
- package/skills/playwright-pro/templates/auth/logout.md +112 -0
- package/skills/playwright-pro/templates/auth/mfa.md +125 -0
- package/skills/playwright-pro/templates/auth/password-reset.md +129 -0
- package/skills/playwright-pro/templates/auth/rbac.md +132 -0
- package/skills/playwright-pro/templates/auth/remember-me.md +127 -0
- package/skills/playwright-pro/templates/auth/session-timeout.md +113 -0
- package/skills/playwright-pro/templates/auth/sso.md +115 -0
- package/skills/playwright-pro/templates/checkout/add-to-cart.md +112 -0
- package/skills/playwright-pro/templates/checkout/apply-coupon.md +123 -0
- package/skills/playwright-pro/templates/checkout/order-confirm.md +108 -0
- package/skills/playwright-pro/templates/checkout/order-history.md +119 -0
- package/skills/playwright-pro/templates/checkout/payment.md +148 -0
- package/skills/playwright-pro/templates/checkout/update-quantity.md +125 -0
- package/skills/playwright-pro/templates/crud/bulk-operations.md +129 -0
- package/skills/playwright-pro/templates/crud/create.md +118 -0
- package/skills/playwright-pro/templates/crud/delete.md +116 -0
- package/skills/playwright-pro/templates/crud/read.md +117 -0
- package/skills/playwright-pro/templates/crud/soft-delete.md +113 -0
- package/skills/playwright-pro/templates/crud/update.md +129 -0
- package/skills/playwright-pro/templates/dashboard/chart-rendering.md +131 -0
- package/skills/playwright-pro/templates/dashboard/data-loading.md +128 -0
- package/skills/playwright-pro/templates/dashboard/date-range-filter.md +136 -0
- package/skills/playwright-pro/templates/dashboard/export.md +146 -0
- package/skills/playwright-pro/templates/dashboard/realtime-updates.md +143 -0
- package/skills/playwright-pro/templates/forms/autosave.md +135 -0
- package/skills/playwright-pro/templates/forms/conditional-fields.md +120 -0
- package/skills/playwright-pro/templates/forms/file-upload.md +136 -0
- package/skills/playwright-pro/templates/forms/multi-step.md +137 -0
- package/skills/playwright-pro/templates/forms/single-step.md +124 -0
- package/skills/playwright-pro/templates/forms/validation.md +141 -0
- package/skills/playwright-pro/templates/notifications/in-app.md +125 -0
- package/skills/playwright-pro/templates/notifications/notification-center.md +128 -0
- package/skills/playwright-pro/templates/notifications/toast-messages.md +139 -0
- package/skills/playwright-pro/templates/onboarding/email-verification.md +118 -0
- package/skills/playwright-pro/templates/onboarding/first-time-setup.md +130 -0
- package/skills/playwright-pro/templates/onboarding/registration.md +131 -0
- package/skills/playwright-pro/templates/onboarding/welcome-tour.md +128 -0
- package/skills/playwright-pro/templates/search/basic-search.md +118 -0
- package/skills/playwright-pro/templates/search/empty-state.md +109 -0
- package/skills/playwright-pro/templates/search/filters.md +128 -0
- package/skills/playwright-pro/templates/search/pagination.md +123 -0
- package/skills/playwright-pro/templates/search/sorting.md +131 -0
- package/skills/playwright-pro/templates/settings/account-delete.md +136 -0
- package/skills/playwright-pro/templates/settings/notification-prefs.md +139 -0
- package/skills/playwright-pro/templates/settings/password-change.md +143 -0
- package/skills/playwright-pro/templates/settings/profile-update.md +130 -0
- package/skills/popup-cro/SKILL.md +142 -0
- package/skills/popup-cro/references/experiments.md +88 -0
- package/skills/popup-cro/references/popup-cro-playbook.md +261 -0
- package/skills/postman/SKILL.md +79 -0
- package/skills/pptx-generator/SKILL.md +246 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pricing-strategy/SKILL.md +101 -0
- package/skills/pricing-strategy/references/pricing-models.md +194 -0
- package/skills/pricing-strategy/references/pricing-page-playbook.md +221 -0
- package/skills/pricing-strategy/scripts/pricing_modeler.py +283 -0
- package/skills/product-analytics/SKILL.md +151 -0
- package/skills/product-analytics/references/dashboard-templates.md +66 -0
- package/skills/product-analytics/references/metrics-frameworks.md +84 -0
- package/skills/product-analytics/scripts/metrics_calculator.py +195 -0
- package/skills/product-discovery/SKILL.md +118 -0
- package/skills/product-discovery/references/discovery-frameworks.md +72 -0
- package/skills/product-discovery/scripts/assumption_mapper.py +123 -0
- package/skills/product-manager-toolkit/SKILL.md +121 -0
- package/skills/product-manager-toolkit/assets/prd_template.md +132 -0
- package/skills/product-manager-toolkit/assets/rice_input_template.csv +4 -0
- package/skills/product-manager-toolkit/references/frameworks.md +559 -0
- package/skills/product-manager-toolkit/references/input-output-examples.md +156 -0
- package/skills/product-manager-toolkit/references/prd_templates.md +317 -0
- package/skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +452 -0
- package/skills/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
- package/skills/product-spec/SKILL.md +65 -0
- package/skills/product-strategist/SKILL.md +122 -0
- package/skills/product-strategist/assets/okr_template.md +106 -0
- package/skills/product-strategist/references/examples/sample_growth_okrs.json +366 -0
- package/skills/product-strategist/references/okr_framework.md +328 -0
- package/skills/product-strategist/references/strategy_types.md +320 -0
- package/skills/product-strategist/scripts/okr_cascade_generator.py +592 -0
- package/skills/programmatic-seo/SKILL.md +156 -0
- package/skills/programmatic-seo/references/playbooks.md +72 -0
- package/skills/programmatic-seo/scripts/url_pattern_generator.py +194 -0
- package/skills/prompt-engineer-toolkit/README.md +51 -0
- package/skills/prompt-engineer-toolkit/SKILL.md +136 -0
- package/skills/prompt-engineer-toolkit/references/evaluation-rubric.md +14 -0
- package/skills/prompt-engineer-toolkit/references/prompt-templates.md +105 -0
- package/skills/prompt-engineer-toolkit/references/technique-guide.md +25 -0
- package/skills/prompt-engineer-toolkit/scripts/prompt_tester.py +239 -0
- package/skills/prompt-engineer-toolkit/scripts/prompt_versioner.py +235 -0
- package/skills/prototype/SKILL.md +54 -0
- package/skills/qa-plan/SKILL.md +77 -0
- package/skills/qms-audit-expert/SKILL.md +116 -0
- package/skills/qms-audit-expert/references/iso13485-audit-guide.md +388 -0
- package/skills/qms-audit-expert/references/nonconformity-classification.md +221 -0
- package/skills/qms-audit-expert/scripts/audit_schedule_optimizer.py +420 -0
- package/skills/quality-documentation-manager/SKILL.md +140 -0
- package/skills/quality-documentation-manager/references/21cfr11-compliance-guide.md +398 -0
- package/skills/quality-documentation-manager/references/document-control-procedures.md +340 -0
- package/skills/quality-documentation-manager/scripts/document_validator.py +646 -0
- package/skills/quality-documentation-manager/scripts/document_version_control.py +466 -0
- package/skills/quality-manager-qmr/SKILL.md +129 -0
- package/skills/quality-manager-qmr/references/management-review-guide.md +378 -0
- package/skills/quality-manager-qmr/references/quality-kpi-framework.md +296 -0
- package/skills/quality-manager-qmr/scripts/management_review_tracker.py +580 -0
- package/skills/quality-manager-qmr/scripts/quality_effectiveness_monitor.py +481 -0
- package/skills/quality-manager-qms-iso13485/SKILL.md +129 -0
- package/skills/quality-manager-qms-iso13485/references/iso13485-clause-requirements.md +726 -0
- package/skills/quality-manager-qms-iso13485/references/qms-process-templates.md +876 -0
- package/skills/quality-manager-qms-iso13485/scripts/qms_audit_checklist.py +886 -0
- package/skills/query-optimization/SKILL.md +107 -0
- package/skills/quick-design/SKILL.md +47 -0
- package/skills/rag-architect/SKILL.md +117 -0
- package/skills/rag-architect/references/chunking_strategies_comparison.md +287 -0
- package/skills/rag-architect/references/embedding_model_benchmark.md +338 -0
- package/skills/rag-architect/references/rag_evaluation_framework.md +431 -0
- package/skills/rag-architect/scripts/chunking_optimizer.py +787 -0
- package/skills/rag-architect/scripts/rag_pipeline_designer.py +680 -0
- package/skills/rag-architect/scripts/retrieval_evaluator.py +578 -0
- package/skills/rate-limiting/SKILL.md +114 -0
- package/skills/rbac-abac/SKILL.md +70 -0
- package/skills/rbac-abac/references/anti-patterns.md +14 -0
- package/skills/rbac-abac/references/checklist.md +13 -0
- package/skills/rbac-abac/references/schema-jwt-cache.md +27 -0
- package/skills/react-native-dev/SKILL.md +139 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +342 -0
- package/skills/read-replicas/SKILL.md +46 -0
- package/skills/read-replicas/references/anti-patterns-checklist.md +26 -0
- package/skills/read-replicas/references/consistency-connection.md +24 -0
- package/skills/read-replicas/references/ha-dr.md +18 -0
- package/skills/red-team/SKILL.md +120 -0
- package/skills/red-team/references/attack-path-methodology.md +135 -0
- package/skills/red-team/scripts/engagement_planner.py +420 -0
- package/skills/referral-program/SKILL.md +189 -0
- package/skills/referral-program/references/loop-and-incentives.md +81 -0
- package/skills/referral-program/references/measurement-framework.md +199 -0
- package/skills/referral-program/references/program-mechanics.md +212 -0
- package/skills/referral-program/scripts/referral_roi_calculator.py +420 -0
- package/skills/regression-suite/SKILL.md +89 -0
- package/skills/regulatory-affairs-head/SKILL.md +117 -0
- package/skills/regulatory-affairs-head/references/eu-mdr-submission-guide.md +95 -0
- package/skills/regulatory-affairs-head/references/fda-submission-guide.md +127 -0
- package/skills/regulatory-affairs-head/references/global-regulatory-pathways.md +283 -0
- package/skills/regulatory-affairs-head/references/iso-regulatory-requirements.md +363 -0
- package/skills/regulatory-affairs-head/scripts/regulatory_pathway_analyzer.py +557 -0
- package/skills/regulatory-affairs-head/scripts/regulatory_tracker.py +199 -0
- package/skills/release/SKILL.md +89 -0
- package/skills/release-announce/SKILL.md +64 -0
- package/skills/release-checklist/SKILL.md +63 -0
- package/skills/research-summarizer/SKILL.md +94 -0
- package/skills/research-summarizer/references/citation-formats.md +105 -0
- package/skills/research-summarizer/references/summary-templates.md +120 -0
- package/skills/research-summarizer/scripts/extract_citations.py +309 -0
- package/skills/research-summarizer/scripts/format_summary.py +244 -0
- package/skills/retrospective/SKILL.md +72 -0
- package/skills/revenue-operations/SKILL.md +101 -0
- package/skills/revenue-operations/assets/expected_output.json +117 -0
- package/skills/revenue-operations/assets/forecast_report_template.md +149 -0
- package/skills/revenue-operations/assets/gtm_dashboard_template.md +215 -0
- package/skills/revenue-operations/assets/pipeline_review_template.md +138 -0
- package/skills/revenue-operations/assets/sample_forecast_data.json +23 -0
- package/skills/revenue-operations/assets/sample_gtm_data.json +24 -0
- package/skills/revenue-operations/assets/sample_pipeline_data.json +160 -0
- package/skills/revenue-operations/references/gtm-efficiency-benchmarks.md +257 -0
- package/skills/revenue-operations/references/pipeline-management-framework.md +292 -0
- package/skills/revenue-operations/references/revops-metrics-guide.md +304 -0
- package/skills/revenue-operations/scripts/forecast_accuracy_tracker.py +531 -0
- package/skills/revenue-operations/scripts/gtm_efficiency_calculator.py +658 -0
- package/skills/revenue-operations/scripts/pipeline_analyzer.py +496 -0
- package/skills/reverse-document/SKILL.md +70 -0
- package/skills/risk-management-specialist/SKILL.md +125 -0
- package/skills/risk-management-specialist/references/iso14971-implementation-guide.md +468 -0
- package/skills/risk-management-specialist/references/risk-analysis-methods.md +415 -0
- package/skills/risk-management-specialist/references/risk-assessment-templates.md +77 -0
- package/skills/risk-management-specialist/scripts/fmea_analyzer.py +442 -0
- package/skills/risk-management-specialist/scripts/risk_matrix_calculator.py +419 -0
- package/skills/roadmap-communicator/SKILL.md +96 -0
- package/skills/roadmap-communicator/references/communication-templates.md +63 -0
- package/skills/roadmap-communicator/references/roadmap-templates.md +44 -0
- package/skills/roadmap-communicator/scripts/changelog_generator.py +151 -0
- package/skills/rollback-strategy/SKILL.md +80 -0
- package/skills/rollback-strategy/references/anti-patterns.md +14 -0
- package/skills/rollback-strategy/references/canary-auto-rollback.md +17 -0
- package/skills/rollback-strategy/references/communication-protocol.md +6 -0
- package/skills/rollback-strategy/references/mobile-rollback.md +10 -0
- package/skills/rollback-strategy/references/pre-deploy-checklist.md +15 -0
- package/skills/rollback-strategy/references/runbook-commands.md +147 -0
- package/skills/run-migrations/SKILL.md +67 -0
- package/skills/runbooks/SKILL.md +57 -0
- package/skills/runbooks/references/anti-patterns.md +6 -0
- package/skills/runbooks/references/checklist.md +13 -0
- package/skills/runbooks/references/lifecycle.md +14 -0
- package/skills/runbooks/references/writing-principles.md +9 -0
- package/skills/runbooks/templates/runbook.md +80 -0
- package/skills/saas-metrics-coach/SKILL.md +156 -0
- package/skills/saas-metrics-coach/assets/input-template.md +29 -0
- package/skills/saas-metrics-coach/references/benchmarks.md +101 -0
- package/skills/saas-metrics-coach/references/formulas.md +103 -0
- package/skills/saas-metrics-coach/scripts/metrics_calculator.py +217 -0
- package/skills/saas-metrics-coach/scripts/quick_ratio_calculator.py +173 -0
- package/skills/saas-metrics-coach/scripts/unit_economics_simulator.py +205 -0
- package/skills/sales-engineer/SKILL.md +104 -0
- package/skills/sales-engineer/assets/demo_script_template.md +232 -0
- package/skills/sales-engineer/assets/expected_output.json +474 -0
- package/skills/sales-engineer/assets/poc_scorecard_template.md +213 -0
- package/skills/sales-engineer/assets/sample_rfp_data.json +219 -0
- package/skills/sales-engineer/assets/technical_proposal_template.md +231 -0
- package/skills/sales-engineer/references/competitive-positioning-framework.md +226 -0
- package/skills/sales-engineer/references/poc-best-practices.md +277 -0
- package/skills/sales-engineer/references/rfp-response-guide.md +189 -0
- package/skills/sales-engineer/scripts/competitive_matrix_builder.py +525 -0
- package/skills/sales-engineer/scripts/poc_planner.py +765 -0
- package/skills/sales-engineer/scripts/rfp_response_analyzer.py +557 -0
- package/skills/scaffold-fastify-ts/SKILL.md +77 -0
- package/skills/scaffold-fastify-ts/references/anti-patterns.md +10 -0
- package/skills/scaffold-fastify-ts/references/key-decisions.md +27 -0
- package/skills/scaffold-go/SKILL.md +77 -0
- package/skills/scaffold-go/references/patterns.md +22 -0
- package/skills/scaffold-go/references/project-structure.md +15 -0
- package/skills/scaffold-react-native/SKILL.md +69 -0
- package/skills/scaffold-react-native/references/conventions.md +26 -0
- package/skills/scaffold-react-native/references/workflow-and-navigation.md +22 -0
- package/skills/scaffold-react-vite/SKILL.md +76 -0
- package/skills/scaffold-react-vite/references/anti-patterns.md +9 -0
- package/skills/scaffold-react-vite/references/dependency-baseline.md +22 -0
- package/skills/scaffold-unity/SKILL.md +52 -0
- package/skills/scaffold-unity/references/folder-structure-and-files.md +43 -0
- package/skills/scaffold-unity/references/naming-conventions.md +11 -0
- package/skills/scenario-war-room/SKILL.md +81 -0
- package/skills/scenario-war-room/references/cascade-model.md +103 -0
- package/skills/scenario-war-room/references/scenario-planning.md +212 -0
- package/skills/scenario-war-room/scripts/scenario_modeler.py +486 -0
- package/skills/schema-markup/SKILL.md +184 -0
- package/skills/schema-markup/references/implementation-patterns.md +437 -0
- package/skills/schema-markup/references/schema-types-guide.md +285 -0
- package/skills/schema-markup/references/testing-and-mistakes.md +43 -0
- package/skills/schema-markup/scripts/schema_validator.py +442 -0
- package/skills/scope-check/SKILL.md +67 -0
- package/skills/scope-check/references/report-template.md +56 -0
- package/skills/scrum-master/SKILL.md +128 -0
- package/skills/scrum-master/assets/expected_output.json +131 -0
- package/skills/scrum-master/assets/expected_velocity_output.json +85 -0
- package/skills/scrum-master/assets/sample_sprint_data.json +821 -0
- package/skills/scrum-master/assets/sprint_report_template.md +214 -0
- package/skills/scrum-master/assets/team_health_check_template.md +380 -0
- package/skills/scrum-master/references/retro-formats.md +336 -0
- package/skills/scrum-master/references/team-dynamics-framework.md +561 -0
- package/skills/scrum-master/references/velocity-forecasting-guide.md +386 -0
- package/skills/scrum-master/scripts/retrospective_analyzer.py +914 -0
- package/skills/scrum-master/scripts/sprint_health_scorer.py +744 -0
- package/skills/scrum-master/scripts/velocity_analyzer.py +580 -0
- package/skills/search-setup/SKILL.md +49 -0
- package/skills/search-setup/references/anti-patterns-checklist.md +24 -0
- package/skills/search-setup/references/engine-details.md +15 -0
- package/skills/search-setup/references/indexing-pipeline.md +11 -0
- package/skills/search-setup/references/observability.md +6 -0
- package/skills/secret-management/SKILL.md +49 -0
- package/skills/secret-management/references/anti-patterns.md +7 -0
- package/skills/secret-management/references/checklist.md +13 -0
- package/skills/secret-management/references/implementation-details.md +37 -0
- package/skills/security-audit/SKILL.md +86 -0
- package/skills/security-pen-testing/SKILL.md +114 -0
- package/skills/security-pen-testing/references/attack_patterns.md +629 -0
- package/skills/security-pen-testing/references/owasp_top_10_checklist.md +440 -0
- package/skills/security-pen-testing/references/responsible_disclosure.md +317 -0
- package/skills/security-pen-testing/scripts/dependency_auditor.py +455 -0
- package/skills/security-pen-testing/scripts/pentest_report_generator.py +462 -0
- package/skills/security-pen-testing/scripts/vulnerability_scanner.py +545 -0
- package/skills/self-improving-agent/.claude-plugin/plugin.json +13 -0
- package/skills/self-improving-agent/CLAUDE.md +79 -0
- package/skills/self-improving-agent/LICENSE +21 -0
- package/skills/self-improving-agent/SKILL.md +112 -0
- package/skills/self-improving-agent/agents/memory-analyst.md +74 -0
- package/skills/self-improving-agent/agents/skill-extractor.md +110 -0
- package/skills/self-improving-agent/hooks/error-capture.sh +110 -0
- package/skills/self-improving-agent/hooks/hooks.json +15 -0
- package/skills/self-improving-agent/reference/memory-architecture.md +131 -0
- package/skills/self-improving-agent/reference/promotion-rules.md +83 -0
- package/skills/self-improving-agent/reference/rules-directory-patterns.md +137 -0
- package/skills/self-improving-agent/settings.json +28 -0
- package/skills/self-improving-agent/skills/extract/SKILL.md +182 -0
- package/skills/self-improving-agent/skills/promote/SKILL.md +148 -0
- package/skills/self-improving-agent/skills/remember/SKILL.md +102 -0
- package/skills/self-improving-agent/skills/review/SKILL.md +130 -0
- package/skills/self-improving-agent/skills/status/SKILL.md +107 -0
- package/skills/self-improving-agent/templates/rule-template.md +17 -0
- package/skills/self-improving-agent/templates/skill-template.md +53 -0
- package/skills/senior-computer-vision/SKILL.md +125 -0
- package/skills/senior-computer-vision/references/computer_vision_architectures.md +683 -0
- package/skills/senior-computer-vision/references/object_detection_optimization.md +885 -0
- package/skills/senior-computer-vision/references/production_vision_systems.md +1226 -0
- package/skills/senior-computer-vision/references/reference-docs-and-commands.md +96 -0
- package/skills/senior-computer-vision/scripts/dataset_pipeline_builder.py +1699 -0
- package/skills/senior-computer-vision/scripts/inference_optimizer.py +557 -0
- package/skills/senior-computer-vision/scripts/vision_model_trainer.py +576 -0
- package/skills/senior-data-engineer/SKILL.md +198 -0
- package/skills/senior-data-engineer/references/data_modeling_patterns.md +1058 -0
- package/skills/senior-data-engineer/references/data_pipeline_architecture.md +1100 -0
- package/skills/senior-data-engineer/references/dataops_best_practices.md +1502 -0
- package/skills/senior-data-engineer/references/troubleshooting.md +183 -0
- package/skills/senior-data-engineer/references/workflows.md +624 -0
- package/skills/senior-data-engineer/scripts/data_quality_validator.py +1636 -0
- package/skills/senior-data-engineer/scripts/etl_performance_optimizer.py +1685 -0
- package/skills/senior-data-engineer/scripts/pipeline_orchestrator.py +883 -0
- package/skills/senior-data-scientist/SKILL.md +117 -0
- package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
- package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
- package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
- package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
- package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
- package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
- package/skills/senior-ml-engineer/SKILL.md +121 -0
- package/skills/senior-ml-engineer/references/llm_integration_guide.md +317 -0
- package/skills/senior-ml-engineer/references/mlops_production_patterns.md +265 -0
- package/skills/senior-ml-engineer/references/rag_system_architecture.md +371 -0
- package/skills/senior-ml-engineer/scripts/ml_monitoring_suite.py +100 -0
- package/skills/senior-ml-engineer/scripts/model_deployment_pipeline.py +100 -0
- package/skills/senior-ml-engineer/scripts/rag_system_builder.py +100 -0
- package/skills/senior-pm/SKILL.md +109 -0
- package/skills/senior-pm/assets/executive_report_template.md +267 -0
- package/skills/senior-pm/assets/expected_output.json +150 -0
- package/skills/senior-pm/assets/project_charter_template.md +274 -0
- package/skills/senior-pm/assets/raci_matrix_template.md +265 -0
- package/skills/senior-pm/assets/sample_project_data.json +458 -0
- package/skills/senior-pm/references/portfolio-kpis.md +32 -0
- package/skills/senior-pm/references/portfolio-prioritization-models.md +645 -0
- package/skills/senior-pm/references/risk-management-framework.md +485 -0
- package/skills/senior-pm/scripts/project_health_dashboard.py +814 -0
- package/skills/senior-pm/scripts/resource_capacity_planner.py +846 -0
- package/skills/senior-pm/scripts/risk_matrix_analyzer.py +698 -0
- package/skills/senior-prompt-engineer/SKILL.md +108 -0
- package/skills/senior-prompt-engineer/references/agentic_system_design.md +646 -0
- package/skills/senior-prompt-engineer/references/llm_evaluation_frameworks.md +524 -0
- package/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +572 -0
- package/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +560 -0
- package/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +519 -0
- package/skills/senior-prompt-engineer/scripts/rag_evaluator.py +574 -0
- package/skills/seo-audit/SKILL.md +150 -0
- package/skills/seo-audit/references/aeo-geo-patterns.md +110 -0
- package/skills/seo-audit/references/ai-writing-detection.md +63 -0
- package/skills/seo-audit/references/seo-audit-reference.md +289 -0
- package/skills/seo-audit/scripts/seo_checker.py +361 -0
- package/skills/shader-dev/SKILL.md +299 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/signup-flow-cro/SKILL.md +150 -0
- package/skills/signup-flow-cro/references/experiments.md +76 -0
- package/skills/signup-flow-cro/references/signup-cro-playbook.md +180 -0
- package/skills/signup-flow-cro/scripts/funnel_drop_analyzer.py +320 -0
- package/skills/site-architecture/SKILL.md +167 -0
- package/skills/site-architecture/references/internal-linking-playbook.md +216 -0
- package/skills/site-architecture/references/navigation-design.md +32 -0
- package/skills/site-architecture/references/silo-and-linking-guide.md +80 -0
- package/skills/site-architecture/references/url-design-guide.md +220 -0
- package/skills/site-architecture/scripts/sitemap_analyzer.py +375 -0
- package/skills/skill-auditor/SKILL.md +159 -0
- package/skills/skill-auditor/references/frontmatter-spec.md +113 -0
- package/skills/skill-auditor/references/lazy-loading-guide.md +98 -0
- package/skills/skill-improve/SKILL.md +59 -0
- package/skills/skill-test/SKILL.md +45 -0
- package/skills/skill-test/references/audit-mode-procedure.md +7 -0
- package/skills/skill-test/references/category-mode-procedure.md +7 -0
- package/skills/skill-test/references/next-steps-guide.md +9 -0
- package/skills/skill-test/references/spec-mode-procedure.md +8 -0
- package/skills/skill-test/references/static-checks.md +13 -0
- package/skills/slack/SKILL.md +45 -0
- package/skills/slo-sli/SKILL.md +92 -0
- package/skills/slo-sli/references/alerting-burn-rate.md +22 -0
- package/skills/slo-sli/references/anti-patterns.md +12 -0
- package/skills/slo-sli/references/checklist.md +14 -0
- package/skills/smoke-check/SKILL.md +77 -0
- package/skills/snowflake-development/SKILL.md +119 -0
- package/skills/snowflake-development/references/cortex_ai_and_agents.md +280 -0
- package/skills/snowflake-development/references/snowflake_sql_and_pipelines.md +281 -0
- package/skills/snowflake-development/references/troubleshooting.md +155 -0
- package/skills/snowflake-development/scripts/snowflake_query_helper.py +233 -0
- package/skills/soc2-compliance/SKILL.md +132 -0
- package/skills/soc2-compliance/references/evidence_collection_guide.md +227 -0
- package/skills/soc2-compliance/references/trust_service_criteria.md +273 -0
- package/skills/soc2-compliance/references/type1_vs_type2.md +273 -0
- package/skills/soc2-compliance/scripts/control_matrix_builder.py +679 -0
- package/skills/soc2-compliance/scripts/evidence_tracker.py +240 -0
- package/skills/soc2-compliance/scripts/gap_analyzer.py +479 -0
- package/skills/social-content/SKILL.md +155 -0
- package/skills/social-content/references/hooks-and-repurposing.md +74 -0
- package/skills/social-content/references/platforms.md +163 -0
- package/skills/social-content/references/post-templates.md +171 -0
- package/skills/social-content/references/reverse-engineering.md +190 -0
- package/skills/social-media-analyzer/HOW_TO_USE.md +39 -0
- package/skills/social-media-analyzer/SKILL.md +190 -0
- package/skills/social-media-analyzer/assets/expected_output.json +61 -0
- package/skills/social-media-analyzer/assets/sample_input.json +42 -0
- package/skills/social-media-analyzer/references/platform-benchmarks.md +226 -0
- package/skills/social-media-analyzer/scripts/analyze_performance.py +180 -0
- package/skills/social-media-analyzer/scripts/calculate_metrics.py +147 -0
- package/skills/social-media-manager/SKILL.md +195 -0
- package/skills/social-media-manager/scripts/social_calendar_generator.py +399 -0
- package/skills/sprint-ceremony/SKILL.md +75 -0
- package/skills/sprint-plan/SKILL.md +47 -0
- package/skills/sprint-report/SKILL.md +124 -0
- package/skills/standup-report/SKILL.md +51 -0
- package/skills/start/SKILL.md +67 -0
- package/skills/start-service/SKILL.md +45 -0
- package/skills/state-management/SKILL.md +75 -0
- package/skills/story-done/SKILL.md +69 -0
- package/skills/story-done/references/review-gates.md +9 -0
- package/skills/story-done/references/test-evidence-traceability.md +17 -0
- package/skills/story-readiness/SKILL.md +57 -0
- package/skills/story-readiness/references/context-loading.md +9 -0
- package/skills/story-readiness/references/output-format.md +7 -0
- package/skills/story-readiness/references/readiness-checklist.md +33 -0
- package/skills/strategic-alignment/SKILL.md +79 -0
- package/skills/strategic-alignment/references/alignment-playbook.md +205 -0
- package/skills/strategic-alignment/scripts/alignment_checker.py +455 -0
- package/skills/stripe-integration-expert/SKILL.md +65 -0
- package/skills/stripe-integration-expert/references/stripe-code-examples.md +372 -0
- package/skills/tdd-guide/HOW_TO_USE.md +313 -0
- package/skills/tdd-guide/SKILL.md +114 -0
- package/skills/tdd-guide/assets/expected_output.json +77 -0
- package/skills/tdd-guide/assets/sample_coverage_report.lcov +56 -0
- package/skills/tdd-guide/assets/sample_input_python.json +39 -0
- package/skills/tdd-guide/assets/sample_input_typescript.json +36 -0
- package/skills/tdd-guide/references/ci-integration.md +195 -0
- package/skills/tdd-guide/references/framework-guide.md +206 -0
- package/skills/tdd-guide/references/tdd-best-practices.md +128 -0
- package/skills/tdd-guide/references/tdd-code-examples.md +229 -0
- package/skills/tdd-guide/scripts/coverage_analyzer.py +434 -0
- package/skills/tdd-guide/scripts/fixture_generator.py +440 -0
- package/skills/tdd-guide/scripts/format_detector.py +384 -0
- package/skills/tdd-guide/scripts/framework_adapter.py +428 -0
- package/skills/tdd-guide/scripts/metrics_calculator.py +456 -0
- package/skills/tdd-guide/scripts/output_formatter.py +354 -0
- package/skills/tdd-guide/scripts/tdd_workflow.py +474 -0
- package/skills/tdd-guide/scripts/test_generator.py +438 -0
- package/skills/team-communications/SKILL.md +69 -0
- package/skills/team-communications/references/3p-updates.md +47 -0
- package/skills/team-communications/references/company-newsletter.md +65 -0
- package/skills/team-communications/references/faq-answers.md +30 -0
- package/skills/team-communications/references/general-comms.md +16 -0
- package/skills/team-vn/SKILL.md +187 -0
- package/skills/tech-debt/SKILL.md +91 -0
- package/skills/tech-debt/references/register-format.md +20 -0
- package/skills/tech-debt/references/scan-indicators.md +22 -0
- package/skills/tech-stack-evaluator/SKILL.md +111 -0
- package/skills/tech-stack-evaluator/assets/expected_output_comparison.json +82 -0
- package/skills/tech-stack-evaluator/assets/sample_input_structured.json +39 -0
- package/skills/tech-stack-evaluator/assets/sample_input_tco.json +42 -0
- package/skills/tech-stack-evaluator/assets/sample_input_text.json +4 -0
- package/skills/tech-stack-evaluator/references/examples.md +383 -0
- package/skills/tech-stack-evaluator/references/metrics.md +242 -0
- package/skills/tech-stack-evaluator/references/workflows.md +362 -0
- package/skills/tech-stack-evaluator/scripts/ecosystem_analyzer.py +501 -0
- package/skills/tech-stack-evaluator/scripts/format_detector.py +430 -0
- package/skills/tech-stack-evaluator/scripts/migration_analyzer.py +587 -0
- package/skills/tech-stack-evaluator/scripts/report_generator.py +460 -0
- package/skills/tech-stack-evaluator/scripts/security_assessor.py +518 -0
- package/skills/tech-stack-evaluator/scripts/stack_comparator.py +389 -0
- package/skills/tech-stack-evaluator/scripts/tco_calculator.py +458 -0
- package/skills/terraform-init/SKILL.md +80 -0
- package/skills/terraform-init/references/anti-patterns.md +11 -0
- package/skills/terraform-init/references/security-checklist.md +10 -0
- package/skills/test-flakiness/SKILL.md +90 -0
- package/skills/test-helpers/SKILL.md +50 -0
- package/skills/test-setup/SKILL.md +58 -0
- package/skills/testing/SKILL.md +32 -0
- package/skills/testing/references/anti-patterns.md +11 -0
- package/skills/testing/references/coverage-strategy.md +11 -0
- package/skills/testing/references/framework-setup.md +25 -0
- package/skills/testing/references/helper-patterns.md +9 -0
- package/skills/threat-detection/SKILL.md +114 -0
- package/skills/threat-detection/references/hunt-playbooks.md +131 -0
- package/skills/threat-detection/scripts/threat_signal_analyzer.py +571 -0
- package/skills/unity-game-architecture/SKILL.md +45 -0
- package/skills/unity-game-architecture/references/anti-patterns.md +15 -0
- package/skills/unity-game-architecture/references/checklist.md +16 -0
- package/skills/unity-game-architecture/references/performance-and-systems.md +29 -0
- package/skills/user-persona/SKILL.md +65 -0
- package/skills/user-persona/references/persona-template.md +27 -0
- package/skills/ux-design/SKILL.md +60 -0
- package/skills/ux-design/references/cross-reference-and-routing.md +19 -0
- package/skills/ux-design/references/spec-sections.md +19 -0
- package/skills/ux-review/SKILL.md +70 -0
- package/skills/video-content-strategist/SKILL.md +181 -0
- package/skills/video-content-strategist/references/scripts-and-anti-patterns.md +48 -0
- package/skills/visual-regression/SKILL.md +86 -0
- package/skills/vn-asset-pipeline/SKILL.md +166 -0
- package/skills/vn-character-design/SKILL.md +220 -0
- package/skills/vn-comfyui-gen/SKILL.md +235 -0
- package/skills/vn-comfyui-gen/references/comfyui-vn-workflows.md +197 -0
- package/skills/vn-dialogue-tree/SKILL.md +126 -0
- package/skills/vn-gdd/SKILL.md +133 -0
- package/skills/vn-narrative-design/SKILL.md +185 -0
- package/skills/vn-renpy-setup/SKILL.md +136 -0
- package/skills/vn-scene-compose/SKILL.md +234 -0
- package/skills/vn-script/SKILL.md +140 -0
- package/skills/vn-script/references/renpy-cheatsheet.md +169 -0
- package/skills/vn-testing/SKILL.md +178 -0
- package/skills/vn-ui-design/SKILL.md +220 -0
- package/skills/web-security/SKILL.md +92 -0
- package/skills/web-security/references/csp-and-frontend.md +36 -0
- package/skills/webhooks/SKILL.md +102 -0
- package/skills/websocket-realtime-rooms/SKILL.md +46 -0
- package/skills/websocket-realtime-rooms/references/anti-patterns-checklist.md +27 -0
- package/skills/websocket-realtime-rooms/references/auth-security.md +9 -0
- package/skills/websocket-realtime-rooms/references/client-implementation.md +15 -0
- package/skills/websocket-realtime-rooms/references/heartbeat-reconnect-backpressure.md +17 -0
- package/skills/weekly-digest/SKILL.md +51 -0
- package/skills/worktree-isolation/README.md +193 -0
- package/skills/worktree-isolation/SKILL.md +87 -0
- package/skills/worktree-isolation/scripts/apply.py +178 -0
- package/skills/worktree-isolation/scripts/lib.py +371 -0
- package/skills/worktree-isolation-setup/README.md +137 -0
- package/skills/worktree-isolation-setup/SKILL.md +192 -0
- package/skills/worktree-isolation-setup/scripts/apply.py +178 -0
- package/skills/worktree-isolation-setup/scripts/install_hook.py +118 -0
- package/skills/worktree-isolation-setup/scripts/lib.py +371 -0
- package/skills/x-twitter-growth/SKILL.md +91 -0
- package/skills/x-twitter-growth/references/algorithm-signals.md +70 -0
- package/skills/x-twitter-growth/scripts/competitor_analyzer.py +235 -0
- package/skills/x-twitter-growth/scripts/content_planner.py +210 -0
- package/skills/x-twitter-growth/scripts/growth_tracker.py +259 -0
- package/skills/x-twitter-growth/scripts/profile_auditor.py +294 -0
- package/skills/x-twitter-growth/scripts/tweet_composer.py +290 -0
- package/skills/xlsx-generator/SKILL.md +135 -0
- package/skills/xlsx-generator/references/create.md +691 -0
- package/skills/xlsx-generator/references/edit.md +684 -0
- package/skills/xlsx-generator/references/fix.md +37 -0
- package/skills/xlsx-generator/references/format.md +768 -0
- package/skills/xlsx-generator/references/ooxml-cheatsheet.md +231 -0
- package/skills/xlsx-generator/references/read-analyze.md +97 -0
- package/skills/xlsx-generator/references/validate.md +772 -0
- package/skills/xlsx-generator/scripts/formula_check.py +422 -0
- package/skills/xlsx-generator/scripts/libreoffice_recalc.py +248 -0
- package/skills/xlsx-generator/scripts/shared_strings_builder.py +163 -0
- package/skills/xlsx-generator/scripts/style_audit.py +575 -0
- package/skills/xlsx-generator/scripts/xlsx_add_column.py +395 -0
- package/skills/xlsx-generator/scripts/xlsx_insert_row.py +274 -0
- package/skills/xlsx-generator/scripts/xlsx_pack.py +87 -0
- package/skills/xlsx-generator/scripts/xlsx_reader.py +362 -0
- package/skills/xlsx-generator/scripts/xlsx_shift_rows.py +396 -0
- package/skills/xlsx-generator/scripts/xlsx_unpack.py +130 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/xlsx-generator/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/templates/gamedev/architecture-decision-record.md +176 -0
- package/templates/gamedev/art-bible.md +80 -0
- package/templates/gamedev/concept-doc-from-prototype.md +304 -0
- package/templates/gamedev/difficulty-curve.md +330 -0
- package/templates/gamedev/economy-model.md +130 -0
- package/templates/gamedev/faction-design.md +166 -0
- package/templates/gamedev/game-concept.md +316 -0
- package/templates/gamedev/game-design-document.md +219 -0
- package/templates/gamedev/game-pillars.md +313 -0
- package/templates/gamedev/hud-design.md +505 -0
- package/templates/gamedev/level-design-document.md +111 -0
- package/templates/gamedev/narrative-character-sheet.md +111 -0
- package/templates/gamedev/pitch-document.md +140 -0
- package/templates/gamedev/player-journey.md +357 -0
- package/templates/gamedev/project-stage-report.md +199 -0
- package/templates/gamedev/sound-bible.md +130 -0
- package/templates/gamedev/systems-index.md +146 -0
- package/templates/gamedev/technical-design-document.md +96 -0
- package/templates/gamedev/test-evidence.md +86 -0
- package/templates/gamedev/test-plan.md +144 -0
|
@@ -0,0 +1,1175 @@
|
|
|
1
|
+
**IMPORTANT: Common Error When Extracting Shaders from HTML Script Tags**: When extracting source from `<script type="x-shader/x-fragment">`, you must ensure `#version` is the **very first character** of the string, with no leading whitespace or newlines:
|
|
2
|
+
```javascript
|
|
3
|
+
// WRONG: indentation/newline inside script tag
|
|
4
|
+
// <script id="fs">
|
|
5
|
+
// #version 300 es <-- leading newline here!
|
|
6
|
+
// </script>
|
|
7
|
+
const source = document.getElementById('fs').textContent; // contains leading whitespace
|
|
8
|
+
|
|
9
|
+
// CORRECT: use .trim() or place template string flush with the start
|
|
10
|
+
const source = document.getElementById('fs').textContent.trim();
|
|
11
|
+
// Or in HTML, place content directly after the tag:
|
|
12
|
+
// <script id="fs">#version 300 es
|
|
13
|
+
// ...
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### IMPORTANT: Float Texture Compatibility (Most Critical Issue for Fluid Simulation)
|
|
17
|
+
|
|
18
|
+
Fluid simulation requires float textures to store velocity (can be negative), pressure, and ink concentration (can exceed 1.0).
|
|
19
|
+
|
|
20
|
+
**IMPORTANT: Must use RGBA16F instead of RGBA32F**: Many environments (headless Chrome, SwiftShader, mobile) do not support `RGBA32F` render targets. Even when the `EXT_color_buffer_float` extension claims to be available, `RGBA32F` FBOs may silently fail (framebuffer reports complete but renders all zeros or all ones). `RGBA16F + HALF_FLOAT` has far better compatibility than `RGBA32F`, and its precision is more than sufficient for fluid simulation.
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
const gl = canvas.getContext("webgl2");
|
|
24
|
+
if (!gl) { /* error handling */ }
|
|
25
|
+
|
|
26
|
+
const ext = gl.getExtension("EXT_color_buffer_float");
|
|
27
|
+
// IMPORTANT: Continue even if ext is null — some environments support RGBA16F without this extension
|
|
28
|
+
|
|
29
|
+
function createFloatTexture(w, h) {
|
|
30
|
+
const tex = gl.createTexture();
|
|
31
|
+
gl.bindTexture(gl.TEXTURE_2D, tex);
|
|
32
|
+
// IMPORTANT: Must use RGBA16F + HALF_FLOAT, do NOT use RGBA32F + FLOAT
|
|
33
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, w, h, 0, gl.RGBA, gl.HALF_FLOAT, null);
|
|
34
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
35
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
36
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
37
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
38
|
+
return tex;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function createFBO(w, h) {
|
|
42
|
+
const tex = createFloatTexture(w, h);
|
|
43
|
+
const fbo = gl.createFramebuffer();
|
|
44
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
|
|
45
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
|
|
46
|
+
const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
|
|
47
|
+
if (status !== gl.FRAMEBUFFER_COMPLETE) {
|
|
48
|
+
console.error("FBO incomplete:", status);
|
|
49
|
+
}
|
|
50
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
51
|
+
return { fbo, tex };
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Mouse Interaction Implementation
|
|
56
|
+
|
|
57
|
+
Fluid simulation requires tracking mouse position and drag direction. iMouse uniform convention: **xy=current mouse position, z=mouse down flag (>0 means pressed), w=unused**. Mouse velocity is calculated from the position difference between current and previous frames:
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
// IMPORTANT: iMouse convention: xy=current position, z=pressed flag (1.0=down, 0.0=up), w=0
|
|
61
|
+
// Mouse velocity is computed via prevMouse on the JS side, passed through a separate uniform
|
|
62
|
+
let iMouse = [0, 0, 0, 0]; // [x, y, pressed, 0]
|
|
63
|
+
let prevMouse = [0, 0];
|
|
64
|
+
let mouseDown = false;
|
|
65
|
+
|
|
66
|
+
canvas.addEventListener('mousemove', (e) => {
|
|
67
|
+
const dpr = Math.min(window.devicePixelRatio, 1.5);
|
|
68
|
+
const x = e.clientX * dpr;
|
|
69
|
+
const y = canvas.height - e.clientY * dpr; // WebGL Y-axis is flipped
|
|
70
|
+
if (mouseDown) {
|
|
71
|
+
prevMouse[0] = iMouse[0];
|
|
72
|
+
prevMouse[1] = iMouse[1];
|
|
73
|
+
iMouse[0] = x;
|
|
74
|
+
iMouse[1] = y;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
canvas.addEventListener('mousedown', (e) => {
|
|
79
|
+
mouseDown = true;
|
|
80
|
+
const dpr = Math.min(window.devicePixelRatio, 1.5);
|
|
81
|
+
const x = e.clientX * dpr;
|
|
82
|
+
const y = canvas.height - e.clientY * dpr;
|
|
83
|
+
iMouse[0] = x; iMouse[1] = y;
|
|
84
|
+
iMouse[2] = 1.0; // Flag: mouse pressed
|
|
85
|
+
prevMouse[0] = x; prevMouse[1] = y;
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
canvas.addEventListener('mouseup', () => {
|
|
89
|
+
mouseDown = false;
|
|
90
|
+
iMouse[2] = 0.0; // Flag: mouse released
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Pass uniforms in render loop
|
|
94
|
+
// iMouse: xy=position, z=pressed flag, w=0
|
|
95
|
+
gl.uniform4f(uMouse, iMouse[0], iMouse[1], iMouse[2], 0.0);
|
|
96
|
+
// IMPORTANT: Mouse velocity must be clamped, otherwise fast dragging produces huge velocity deltas causing NaN explosion
|
|
97
|
+
const mvx = Math.max(-50, Math.min(50, iMouse[0] - prevMouse[0]));
|
|
98
|
+
const mvy = Math.max(-50, Math.min(50, iMouse[1] - prevMouse[1]));
|
|
99
|
+
gl.uniform2f(uMouseVel, mvx, mvy);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Handling WebGL 2 Unavailability
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
const gl = canvas.getContext("webgl2");
|
|
106
|
+
if (!gl) {
|
|
107
|
+
document.body.innerHTML = `
|
|
108
|
+
<div style="color:#fff;padding:20px;font-family:sans-serif;">
|
|
109
|
+
<h2>WebGL 2 Not Supported</h2>
|
|
110
|
+
<p>Fluid simulation requires WebGL 2. Please use a modern browser (Chrome 56+, Firefox 51+, Safari 15+).</p>
|
|
111
|
+
</div>
|
|
112
|
+
`;
|
|
113
|
+
throw new Error('WebGL2 not supported');
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
# Real-Time Fluid Simulation
|
|
118
|
+
|
|
119
|
+
## Use Cases
|
|
120
|
+
- Real-time 2D fluid effects in ShaderToy/WebGL (smoke, liquids, ink diffusion)
|
|
121
|
+
- Interactive fluid: mouse/touch-driven fluid response
|
|
122
|
+
- **Ink diffusion/curling vortex effects in water**: vorticity confinement + high diffusion coefficient + single or multi-color ink
|
|
123
|
+
- **Multi-color ink mixing**: multiple ink colors interpenetrating and blending (requires Buffer B to store RGB ink, see multi-color ink mixing template)
|
|
124
|
+
- Decorative fluid backgrounds, particle systems, vortex visualization
|
|
125
|
+
- **Lava/fire/magma effects**: fluid simulation + FBM noise texture + temperature color mapping
|
|
126
|
+
- **Water surface ripple effects**: wave equation + click-generated concentric ripples + interference and damping
|
|
127
|
+
- Core: solving simplified Navier-Stokes equations or wave equations in GPU fragment shaders
|
|
128
|
+
|
|
129
|
+
## Core Principles
|
|
130
|
+
|
|
131
|
+
Incompressible Navier-Stokes equation discretization:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Momentum equation: ∂v/∂t = -(v·∇)v - ∇p + ν∇²v + f
|
|
135
|
+
Continuity equation: ∇·v = 0
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Term meanings: `-(v·∇)v` advection, `-∇p` pressure gradient, `ν∇²v` viscous diffusion, `f` external forces.
|
|
139
|
+
Zero divergence = incompressibility constraint, achieved by projecting the velocity field through the pressure Poisson equation.
|
|
140
|
+
|
|
141
|
+
**ShaderToy implementation strategy**: texture buffer inter-frame feedback, each frame executes: advection → diffusion → external forces → pressure projection. Each pixel stores grid point physical quantities (velocity, pressure, density).
|
|
142
|
+
|
|
143
|
+
### Water Surface Ripple Principles (Wave Equation)
|
|
144
|
+
|
|
145
|
+
Water surface ripples use the 2D wave equation rather than Navier-Stokes:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
∂²h/∂t² = c² * ∇²h - damping * ∂h/∂t
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Discretized using Verlet integration: `next = speed * (2*curr - prev + laplacian) * damping`.
|
|
152
|
+
|
|
153
|
+
Data encoding: `.r = previous frame height (prev)`, `.g = current frame height (curr)`. Each frame computes the Laplacian to advance the wavefront, with ping-pong buffers alternating read/write.
|
|
154
|
+
|
|
155
|
+
## Implementation Steps
|
|
156
|
+
|
|
157
|
+
### Step 1: Data Encoding & Neighborhood Sampling
|
|
158
|
+
```glsl
|
|
159
|
+
// Data layout: .xy=velocity, .z=pressure/density, .w=ink
|
|
160
|
+
#define T(p) texture(iChannel0, (p) / iResolution.xy)
|
|
161
|
+
|
|
162
|
+
vec4 c = T(p); // center
|
|
163
|
+
vec4 n = T(p + vec2(0, 1)); // north
|
|
164
|
+
vec4 e = T(p + vec2(1, 0)); // east
|
|
165
|
+
vec4 s = T(p - vec2(0, 1)); // south
|
|
166
|
+
vec4 w = T(p - vec2(1, 0)); // west
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Step 2: Discrete Differential Operators
|
|
170
|
+
```glsl
|
|
171
|
+
// Laplacian (weighted 3x3 stencil)
|
|
172
|
+
const float _K0 = -20.0 / 6.0;
|
|
173
|
+
const float _K1 = 4.0 / 6.0;
|
|
174
|
+
const float _K2 = 1.0 / 6.0;
|
|
175
|
+
vec4 laplacian = _K0 * c
|
|
176
|
+
+ _K1 * (n + e + s + w)
|
|
177
|
+
+ _K2 * (T(p+vec2(1,1)) + T(p+vec2(-1,1)) + T(p+vec2(1,-1)) + T(p+vec2(-1,-1)));
|
|
178
|
+
|
|
179
|
+
// Gradient (central difference)
|
|
180
|
+
vec4 dx = (e - w) / 2.0;
|
|
181
|
+
vec4 dy = (n - s) / 2.0;
|
|
182
|
+
|
|
183
|
+
// Divergence & Curl
|
|
184
|
+
float div = dx.x + dy.y;
|
|
185
|
+
float curl = dx.y - dy.x;
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Step 3: Semi-Lagrangian Advection
|
|
189
|
+
```glsl
|
|
190
|
+
#define DT 0.15 // time step
|
|
191
|
+
// Backward trace: sample from upstream, unconditionally stable
|
|
192
|
+
vec4 advected = T(p - DT * c.xy);
|
|
193
|
+
c.xyw = advected.xyw;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Step 4: Viscous Diffusion
|
|
197
|
+
```glsl
|
|
198
|
+
#define NU 0.5 // kinematic viscosity (0.01=water, 1.0=syrup)
|
|
199
|
+
#define KAPPA 0.1 // ink diffusion coefficient
|
|
200
|
+
|
|
201
|
+
c.xy += DT * NU * laplacian.xy;
|
|
202
|
+
c.w += DT * KAPPA * laplacian.w;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Step 5: Pressure Projection
|
|
206
|
+
```glsl
|
|
207
|
+
#define K 0.2 // pressure correction strength
|
|
208
|
+
c.xy -= K * vec2(dx.z, dy.z);
|
|
209
|
+
c.z -= DT * (dx.z * c.x + dy.z * c.y + div * c.z);
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Step 6: Mouse Interaction
|
|
213
|
+
```glsl
|
|
214
|
+
// IMPORTANT: iMouse.z is the mouse-down flag (>0=pressed), not a position coordinate
|
|
215
|
+
// iMouseVel is mouse movement velocity, passed via a separate uniform
|
|
216
|
+
// IMPORTANT: Must clamp mouseVel to prevent NaN explosion
|
|
217
|
+
if (iMouse.z > 0.0) {
|
|
218
|
+
vec2 mouseVel = clamp(iMouseVel, vec2(-50.0), vec2(50.0));
|
|
219
|
+
float dist2 = dot(p - iMouse.xy, p - iMouse.xy);
|
|
220
|
+
float influence = exp(-dist2 / 50.0); // 50.0=influence radius
|
|
221
|
+
c.xy += DT * influence * mouseVel;
|
|
222
|
+
c.w += DT * influence * 0.5;
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Step 6b: Vorticity Confinement (Required for Ink Curling Effects)
|
|
227
|
+
```glsl
|
|
228
|
+
// IMPORTANT: Ink diffusion/swirl effects require vorticity confinement, otherwise small vortices dissipate quickly leaving only smooth flow
|
|
229
|
+
// Vorticity confinement re-injects energy into small-scale vortices, producing characteristic curling textures
|
|
230
|
+
#define VORT_STR 0.035 // [0.01=subtle, 0.05=noticeable, 0.1=strong]
|
|
231
|
+
float curl_c = dx.y - dy.x;
|
|
232
|
+
float curl_n = (T(p + vec2(1,1)).y - T(p + vec2(-1,1)).y) / 2.0
|
|
233
|
+
- (T(p + vec2(0,2)).x - T(p).x) / 2.0;
|
|
234
|
+
float curl_s = (T(p + vec2(1,-1)).y - T(p + vec2(-1,-1)).y) / 2.0
|
|
235
|
+
- (T(p).x - T(p + vec2(0,-2)).x) / 2.0;
|
|
236
|
+
float curl_e = (T(p + vec2(2,0)).y - T(p).y) / 2.0
|
|
237
|
+
- (T(p + vec2(1,1)).x - T(p + vec2(1,-1)).x) / 2.0;
|
|
238
|
+
float curl_w = (T(p).y - T(p + vec2(-2,0)).y) / 2.0
|
|
239
|
+
- (T(p + vec2(-1,1)).x - T(p + vec2(-1,-1)).x) / 2.0;
|
|
240
|
+
vec2 eta = normalize(vec2(abs(curl_e)-abs(curl_w), abs(curl_n)-abs(curl_s)) + vec2(1e-5));
|
|
241
|
+
c.xy += DT * VORT_STR * vec2(eta.y, -eta.x) * curl_c;
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Step 7: Automatic Ink Sources (Critical: Ensures Visible Output Without Interaction)
|
|
245
|
+
```glsl
|
|
246
|
+
// IMPORTANT: Must have automatic ink sources! Otherwise the screen is completely black without mouse interaction
|
|
247
|
+
// IMPORTANT: Ink injection and decay must be balanced! Too-strong injection or too-weak decay causes ink saturation across the entire screen → solid color with no features
|
|
248
|
+
// IMPORTANT: Gaussian denominator controls emitter radius — larger denominator means larger emitter!
|
|
249
|
+
// Denominator > 300 makes emitter cover most of the screen, ink saturates quickly
|
|
250
|
+
// Recommended 100~200, keeping it locally concentrated with visible gradient falloff at distance
|
|
251
|
+
float t = iTime;
|
|
252
|
+
|
|
253
|
+
// Emitter positions should move over time for dynamic effects
|
|
254
|
+
vec2 em1 = iResolution.xy * vec2(0.25, 0.5 + 0.2 * sin(t * 0.7));
|
|
255
|
+
vec2 em2 = iResolution.xy * vec2(0.75, 0.5 + 0.2 * cos(t * 0.9));
|
|
256
|
+
vec2 em3 = iResolution.xy * vec2(0.5, 0.3 + 0.15 * sin(t * 1.3));
|
|
257
|
+
|
|
258
|
+
// Gaussian influence radius controls locality (smaller denominator = more concentrated, 100~200 is reasonable)
|
|
259
|
+
float r1 = exp(-dot(p - em1, p - em1) / 150.0);
|
|
260
|
+
float r2 = exp(-dot(p - em2, p - em2) / 150.0);
|
|
261
|
+
float r3 = exp(-dot(p - em3, p - em3) / 120.0);
|
|
262
|
+
|
|
263
|
+
// Inject velocity (rotating, crossing directions make fluid motion more interesting)
|
|
264
|
+
c.xy += DT * r1 * vec2(cos(t), sin(t * 1.3)) * 3.0;
|
|
265
|
+
c.xy += DT * r2 * vec2(-cos(t * 0.8), sin(t * 0.6)) * 3.0;
|
|
266
|
+
c.xy += DT * r3 * vec2(sin(t * 1.1), -cos(t)) * 2.0;
|
|
267
|
+
|
|
268
|
+
// Inject ink (note: injection amount must balance with INK_DECAY, otherwise screen saturates)
|
|
269
|
+
c.w += DT * (r1 + r2 + r3) * 2.0;
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Step 8: Boundaries & Stability
|
|
273
|
+
```glsl
|
|
274
|
+
// No-slip boundary
|
|
275
|
+
if (p.x < 1.0 || p.y < 1.0 ||
|
|
276
|
+
iResolution.x - p.x < 1.0 || iResolution.y - p.y < 1.0) {
|
|
277
|
+
c.xyw *= 0.0;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// IMPORTANT: Ink decay — must use multiplicative decay (e.g., *= 0.99), NOT subtractive decay (-= constant)
|
|
281
|
+
// Subtractive decay zeros out quickly at small ink values and decays too slowly at large values, causing saturation
|
|
282
|
+
// Multiplicative decay scales proportionally, maintaining contrast at any concentration
|
|
283
|
+
c.w *= 0.99; // 1% decay per frame, adjustable [0.98=fast dissipation, 0.995=persistent]
|
|
284
|
+
|
|
285
|
+
c = clamp(c, vec4(-5, -5, 0.5, 0), vec4(5, 5, 3, 5));
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Step 9: Visualization (Image Pass) — General Fluid
|
|
289
|
+
```glsl
|
|
290
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
291
|
+
vec2 uv = fragCoord / iResolution.xy;
|
|
292
|
+
vec4 c = texture(iChannel0, uv);
|
|
293
|
+
|
|
294
|
+
// IMPORTANT: Color base must be bright enough! 0.5+0.5*cos produces [0,1] range bright colors
|
|
295
|
+
// Never use vec3(0.02, 0.01, 0.08) or similar near-zero base colors — they become invisible when multiplied by ink
|
|
296
|
+
float angle = atan(c.y, c.x);
|
|
297
|
+
vec3 col = 0.5 + 0.5 * cos(angle + vec3(0.0, 2.1, 4.2));
|
|
298
|
+
|
|
299
|
+
// IMPORTANT: Use smoothstep to map ink concentration; upper limit should exceed actual ink range to preserve gradients
|
|
300
|
+
float ink = smoothstep(0.0, 2.0, c.w);
|
|
301
|
+
col *= ink;
|
|
302
|
+
|
|
303
|
+
// Pressure highlights
|
|
304
|
+
col += vec3(0.05) * clamp(c.z - 1.0, 0.0, 1.0);
|
|
305
|
+
|
|
306
|
+
// IMPORTANT: Background color must be visible (RGB at least > 5/255 ≈ 0.02), otherwise users think the page is all black
|
|
307
|
+
col = max(col, vec3(0.02, 0.012, 0.035));
|
|
308
|
+
|
|
309
|
+
fragColor = vec4(col, 1.0);
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Step 9b: Visualization (Image Pass) — Lava/Fire/Magma Effects
|
|
314
|
+
|
|
315
|
+
Lava/fire requires FBM noise for turbulent textures + temperature color band mapping. **Key: Must use FBM noise to distort UV coordinates and temperature values, otherwise the image is too smooth and looks like a plain gradient rather than lava.**
|
|
316
|
+
|
|
317
|
+
```glsl
|
|
318
|
+
// IMPORTANT: FBM noise is the core of lava/fire visualization! Without it the image is a smooth gradient with no lava texture
|
|
319
|
+
// These noise functions must be defined in the Image Pass
|
|
320
|
+
|
|
321
|
+
float hash(vec2 p) {
|
|
322
|
+
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
float noise(vec2 p) {
|
|
326
|
+
vec2 i = floor(p);
|
|
327
|
+
vec2 f = fract(p);
|
|
328
|
+
f = f * f * (3.0 - 2.0 * f); // smoothstep hermite
|
|
329
|
+
float a = hash(i);
|
|
330
|
+
float b = hash(i + vec2(1.0, 0.0));
|
|
331
|
+
float c = hash(i + vec2(0.0, 1.0));
|
|
332
|
+
float d = hash(i + vec2(1.0, 1.0));
|
|
333
|
+
return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// IMPORTANT: octaves=4~6 produces sufficient detail; fewer than 3 gives too-coarse textures
|
|
337
|
+
float fbm(vec2 p, int octaves) {
|
|
338
|
+
float val = 0.0;
|
|
339
|
+
float amp = 0.5;
|
|
340
|
+
for (int i = 0; i < octaves; i++) {
|
|
341
|
+
val += amp * noise(p);
|
|
342
|
+
p *= 2.0;
|
|
343
|
+
amp *= 0.5;
|
|
344
|
+
}
|
|
345
|
+
return val;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
349
|
+
vec2 uv = fragCoord / iResolution.xy;
|
|
350
|
+
vec4 c = texture(iChannel0, uv);
|
|
351
|
+
float t = iTime;
|
|
352
|
+
|
|
353
|
+
// Use fluid velocity field to distort noise sampling coordinates so noise moves with the fluid
|
|
354
|
+
vec2 distortedUV = uv + c.xy * 0.002;
|
|
355
|
+
// FBM noise: multi-octave superposition produces turbulent detail
|
|
356
|
+
float n1 = fbm(distortedUV * 8.0 + t * 0.3, 5);
|
|
357
|
+
float n2 = fbm(distortedUV * 4.0 - t * 0.2 + 5.0, 4);
|
|
358
|
+
|
|
359
|
+
float ink = smoothstep(0.0, 2.0, c.w);
|
|
360
|
+
float speed = length(c.xy);
|
|
361
|
+
|
|
362
|
+
// Temperature = ink concentration + noise perturbation + speed contribution
|
|
363
|
+
// IMPORTANT: Noise perturbation amplitude of 0.2~0.4 produces visible texture without becoming noisy
|
|
364
|
+
float temp = ink * 0.7 + n1 * 0.25 + speed * 0.1;
|
|
365
|
+
// Second noise layer for cracks/dark veins
|
|
366
|
+
temp -= (1.0 - n2) * 0.15 * ink;
|
|
367
|
+
temp = clamp(temp, 0.0, 1.0);
|
|
368
|
+
|
|
369
|
+
// Lava temperature color band: black → dark red → orange → yellow → white-hot
|
|
370
|
+
vec3 col;
|
|
371
|
+
if (temp < 0.15) {
|
|
372
|
+
col = mix(vec3(0.05, 0.0, 0.0), vec3(0.5, 0.05, 0.0), temp / 0.15);
|
|
373
|
+
} else if (temp < 0.4) {
|
|
374
|
+
col = mix(vec3(0.5, 0.05, 0.0), vec3(1.0, 0.35, 0.0), (temp - 0.15) / 0.25);
|
|
375
|
+
} else if (temp < 0.7) {
|
|
376
|
+
col = mix(vec3(1.0, 0.35, 0.0), vec3(1.0, 0.75, 0.1), (temp - 0.4) / 0.3);
|
|
377
|
+
} else {
|
|
378
|
+
col = mix(vec3(1.0, 0.75, 0.1), vec3(1.0, 0.95, 0.7), clamp((temp - 0.7) / 0.3, 0.0, 1.0));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Glow effect: additional additive glow in high-temperature regions
|
|
382
|
+
float glow = smoothstep(0.5, 1.0, temp) * 0.4;
|
|
383
|
+
col += vec3(1.0, 0.5, 0.1) * glow;
|
|
384
|
+
|
|
385
|
+
// HDR tone mapping
|
|
386
|
+
col = 1.0 - exp(-col * 1.5);
|
|
387
|
+
|
|
388
|
+
col = max(col, vec3(0.03, 0.005, 0.0));
|
|
389
|
+
fragColor = vec4(col, 1.0);
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Step 9c: Visualization (Image Pass) — Water Surface Ripple Effects
|
|
394
|
+
|
|
395
|
+
The water ripple Image Pass computes normals from the height field, then applies lighting + environment reflection. **Key: Normal perturbation strength must be large enough (50~100), water base color must be bright (blue component > 0.15), and specular highlights must be prominent.**
|
|
396
|
+
|
|
397
|
+
```glsl
|
|
398
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
399
|
+
vec2 uv = fragCoord / iResolution.xy;
|
|
400
|
+
vec2 texel = 1.0 / iResolution.xy;
|
|
401
|
+
|
|
402
|
+
// IMPORTANT: Sample from wave height field: .g channel stores current frame height
|
|
403
|
+
float h = texture(iChannel0, uv).g;
|
|
404
|
+
float hn = texture(iChannel0, uv + vec2(0.0, texel.y)).g;
|
|
405
|
+
float hs = texture(iChannel0, uv - vec2(0.0, texel.y)).g;
|
|
406
|
+
float he = texture(iChannel0, uv + vec2(texel.x, 0.0)).g;
|
|
407
|
+
float hw = texture(iChannel0, uv - vec2(texel.x, 0.0)).g;
|
|
408
|
+
|
|
409
|
+
// IMPORTANT: Normal perturbation factor must be large enough (50~100), otherwise ripples are invisible
|
|
410
|
+
// If drop strength is 1.0 and radius is 8~15px, using 80.0 produces clearly visible ripples
|
|
411
|
+
vec3 normal = normalize(vec3((hw - he) * 80.0, (hs - hn) * 80.0, 1.0));
|
|
412
|
+
|
|
413
|
+
vec3 lightDir = normalize(vec3(0.3, 0.5, 1.0));
|
|
414
|
+
vec3 viewDir = vec3(0.0, 0.0, 1.0);
|
|
415
|
+
vec3 halfVec = normalize(lightDir + viewDir);
|
|
416
|
+
|
|
417
|
+
float diffuse = max(dot(normal, lightDir), 0.0);
|
|
418
|
+
float specular = pow(max(dot(normal, halfVec), 0.0), 64.0);
|
|
419
|
+
|
|
420
|
+
// IMPORTANT: Water base color must be bright enough! Deep color no darker than vec3(0.02, 0.08, 0.2), shallow color use vec3(0.1, 0.3, 0.6)
|
|
421
|
+
vec3 deepColor = vec3(0.02, 0.08, 0.22);
|
|
422
|
+
vec3 shallowColor = vec3(0.1, 0.35, 0.65);
|
|
423
|
+
vec3 waterColor = mix(deepColor, shallowColor, 0.5 + h * 5.0);
|
|
424
|
+
|
|
425
|
+
float fresnel = pow(1.0 - max(dot(normal, viewDir), 0.0), 3.0);
|
|
426
|
+
|
|
427
|
+
vec3 col = waterColor * (0.4 + 0.6 * diffuse);
|
|
428
|
+
col += vec3(0.9, 0.95, 1.0) * specular * 2.0;
|
|
429
|
+
col += vec3(0.15, 0.25, 0.45) * fresnel * 0.6;
|
|
430
|
+
|
|
431
|
+
// Caustic effect
|
|
432
|
+
float caustic = pow(max(diffuse, 0.0), 8.0) * abs(h) * 5.0;
|
|
433
|
+
col += vec3(0.15, 0.35, 0.55) * caustic;
|
|
434
|
+
|
|
435
|
+
col = max(col, vec3(0.02, 0.06, 0.15));
|
|
436
|
+
col = pow(col, vec3(0.95));
|
|
437
|
+
|
|
438
|
+
fragColor = vec4(col, 1.0);
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## IMPORTANT: Common Fatal Errors
|
|
443
|
+
|
|
444
|
+
1. **RGBA32F silently fails in headless/SwiftShader environments**: Must use `RGBA16F + HALF_FLOAT`
|
|
445
|
+
2. **Ink saturates entire screen**: Gaussian denominator too large (>300) or decay too weak (>0.995). Fix: denominator 100~200, decay `*= 0.99`
|
|
446
|
+
3. **Image Pass colors too dark causing all-black screen**: Use `0.5 + 0.5 * cos(...)` color base to ensure bright range
|
|
447
|
+
4. **Unclamped mouse velocity causing NaN crash**: Fast dragging or first-frame clicks produce huge velocity deltas → velocity explosion → NaN propagates across entire screen. **Both JS side and shader side must clamp mouseVel to [-50, 50]**
|
|
448
|
+
5. **Using single scalar for multi-color ink prevents mixing**: A single `c.w` can only do single-color. Multi-color ink requires Buffer B to store RGB three channels (see multi-color ink mixing template)
|
|
449
|
+
6. **GLSL strict typing**: `vec2 = float` is illegal, must use `vec2(float)`; integers and floats cannot be mixed
|
|
450
|
+
|
|
451
|
+
## Complete Code Template
|
|
452
|
+
|
|
453
|
+
Setup: Buffer A's iChannel0 points to Buffer A itself (feedback loop).
|
|
454
|
+
|
|
455
|
+
### Standalone HTML JS Skeleton (Ping-Pong Render Pipeline)
|
|
456
|
+
|
|
457
|
+
Fluid simulation requires framebuffer self-feedback + float textures. The following JS skeleton demonstrates the correct WebGL2 multi-pass ping-pong structure:
|
|
458
|
+
|
|
459
|
+
```html
|
|
460
|
+
<!DOCTYPE html>
|
|
461
|
+
<html>
|
|
462
|
+
<head>
|
|
463
|
+
<meta charset="utf-8">
|
|
464
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
465
|
+
<title>Fluid Simulation</title>
|
|
466
|
+
<style>
|
|
467
|
+
/* IMPORTANT: Critical: canvas must fill the viewport, otherwise it may be invisible or clipped */
|
|
468
|
+
*{margin:0;padding:0}
|
|
469
|
+
html,body{width:100%;height:100%;overflow:hidden;background:#000}
|
|
470
|
+
canvas{display:block;width:100%;height:100%}
|
|
471
|
+
</style>
|
|
472
|
+
</head>
|
|
473
|
+
<body>
|
|
474
|
+
<canvas id="c"></canvas>
|
|
475
|
+
<script>
|
|
476
|
+
let frameCount = 0;
|
|
477
|
+
// IMPORTANT: iMouse convention: [x, y, pressedFlag, 0] — z is the pressed flag (1 or 0), not a coordinate
|
|
478
|
+
let mouse = [0, 0, 0, 0];
|
|
479
|
+
let prevMouse = [0, 0];
|
|
480
|
+
let mouseDown = false;
|
|
481
|
+
|
|
482
|
+
const canvas = document.getElementById('c');
|
|
483
|
+
const gl = canvas.getContext('webgl2');
|
|
484
|
+
if (!gl) {
|
|
485
|
+
document.body.innerHTML = '<div style="color:#fff;padding:20px;font-family:sans-serif;"><h2>WebGL 2 not supported</h2></div>';
|
|
486
|
+
throw new Error('WebGL2 not supported');
|
|
487
|
+
}
|
|
488
|
+
const ext = gl.getExtension('EXT_color_buffer_float');
|
|
489
|
+
|
|
490
|
+
function createShader(type, src) {
|
|
491
|
+
const s = gl.createShader(type);
|
|
492
|
+
gl.shaderSource(s, src);
|
|
493
|
+
gl.compileShader(s);
|
|
494
|
+
if (!gl.getShaderParameter(s, gl.COMPILE_STATUS))
|
|
495
|
+
console.error(gl.getShaderInfoLog(s));
|
|
496
|
+
return s;
|
|
497
|
+
}
|
|
498
|
+
function createProgram(vsSrc, fsSrc) {
|
|
499
|
+
const p = gl.createProgram();
|
|
500
|
+
gl.attachShader(p, createShader(gl.VERTEX_SHADER, vsSrc));
|
|
501
|
+
gl.attachShader(p, createShader(gl.FRAGMENT_SHADER, fsSrc));
|
|
502
|
+
gl.linkProgram(p);
|
|
503
|
+
if (!gl.getProgramParameter(p, gl.LINK_STATUS))
|
|
504
|
+
console.error(gl.getProgramInfoLog(p));
|
|
505
|
+
return p;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const vsSource = `#version 300 es
|
|
509
|
+
in vec2 pos;
|
|
510
|
+
void main(){ gl_Position=vec4(pos,0,1); }`;
|
|
511
|
+
|
|
512
|
+
// fsBuffer / fsImage: adapt from the Buffer A / Image templates below
|
|
513
|
+
// IMPORTANT: Fragment shaders must declare these uniforms:
|
|
514
|
+
// uniform sampler2D iChannel0;
|
|
515
|
+
// uniform vec2 iResolution;
|
|
516
|
+
// uniform float iTime;
|
|
517
|
+
// uniform int iFrame;
|
|
518
|
+
// uniform vec4 iMouse; // xy=position, z=pressed flag, w=0
|
|
519
|
+
// uniform vec2 iMouseVel; // mouse movement velocity (only needed in Buffer pass)
|
|
520
|
+
|
|
521
|
+
const progBuf = createProgram(vsSource, fsBuffer);
|
|
522
|
+
const progImg = createProgram(vsSource, fsImage);
|
|
523
|
+
|
|
524
|
+
// IMPORTANT: Must use RGBA16F + HALF_FLOAT, do NOT use RGBA32F + FLOAT
|
|
525
|
+
// RGBA32F may render all zeros in headless Chrome / SwiftShader even when framebuffer reports complete
|
|
526
|
+
function createFBO(w, h) {
|
|
527
|
+
const tex = gl.createTexture();
|
|
528
|
+
gl.bindTexture(gl.TEXTURE_2D, tex);
|
|
529
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, w, h, 0, gl.RGBA, gl.HALF_FLOAT, null);
|
|
530
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
531
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
532
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
533
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
534
|
+
const fbo = gl.createFramebuffer();
|
|
535
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
|
|
536
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
|
|
537
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
538
|
+
return { fbo, tex };
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
let W, H, bufA, bufB;
|
|
542
|
+
|
|
543
|
+
const vao = gl.createVertexArray();
|
|
544
|
+
gl.bindVertexArray(vao);
|
|
545
|
+
const vbo = gl.createBuffer();
|
|
546
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
|
|
547
|
+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);
|
|
548
|
+
gl.enableVertexAttribArray(0);
|
|
549
|
+
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
|
|
550
|
+
|
|
551
|
+
function resize() {
|
|
552
|
+
const dpr = Math.min(window.devicePixelRatio, 1.5);
|
|
553
|
+
canvas.width = W = Math.floor(innerWidth * dpr);
|
|
554
|
+
canvas.height = H = Math.floor(innerHeight * dpr);
|
|
555
|
+
bufA = createFBO(W, H);
|
|
556
|
+
bufB = createFBO(W, H);
|
|
557
|
+
frameCount = 0;
|
|
558
|
+
}
|
|
559
|
+
addEventListener('resize', resize);
|
|
560
|
+
resize();
|
|
561
|
+
|
|
562
|
+
canvas.addEventListener('mousemove', e => {
|
|
563
|
+
const dpr = Math.min(devicePixelRatio, 1.5);
|
|
564
|
+
const x = e.clientX * dpr;
|
|
565
|
+
const y = H - e.clientY * dpr;
|
|
566
|
+
if (mouseDown) {
|
|
567
|
+
prevMouse[0] = mouse[0]; prevMouse[1] = mouse[1];
|
|
568
|
+
mouse[0] = x; mouse[1] = y;
|
|
569
|
+
}
|
|
570
|
+
});
|
|
571
|
+
canvas.addEventListener('mousedown', e => {
|
|
572
|
+
mouseDown = true;
|
|
573
|
+
const dpr = Math.min(devicePixelRatio, 1.5);
|
|
574
|
+
mouse[0] = e.clientX * dpr;
|
|
575
|
+
mouse[1] = H - e.clientY * dpr;
|
|
576
|
+
mouse[2] = 1.0; // IMPORTANT: Pressed flag, not a coordinate
|
|
577
|
+
prevMouse[0] = mouse[0]; prevMouse[1] = mouse[1];
|
|
578
|
+
});
|
|
579
|
+
canvas.addEventListener('mouseup', () => {
|
|
580
|
+
mouseDown = false;
|
|
581
|
+
mouse[2] = 0.0; // IMPORTANT: Released flag
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
// Touch events (mobile)
|
|
585
|
+
canvas.addEventListener('touchstart', e => {
|
|
586
|
+
e.preventDefault(); mouseDown = true;
|
|
587
|
+
const t = e.touches[0], dpr = Math.min(devicePixelRatio, 1.5);
|
|
588
|
+
mouse[0] = t.clientX * dpr; mouse[1] = H - t.clientY * dpr;
|
|
589
|
+
mouse[2] = 1.0;
|
|
590
|
+
prevMouse[0] = mouse[0]; prevMouse[1] = mouse[1];
|
|
591
|
+
}, {passive:false});
|
|
592
|
+
canvas.addEventListener('touchmove', e => {
|
|
593
|
+
e.preventDefault();
|
|
594
|
+
const t = e.touches[0], dpr = Math.min(devicePixelRatio, 1.5);
|
|
595
|
+
if (mouseDown) {
|
|
596
|
+
prevMouse[0] = mouse[0]; prevMouse[1] = mouse[1];
|
|
597
|
+
mouse[0] = t.clientX * dpr; mouse[1] = H - t.clientY * dpr;
|
|
598
|
+
}
|
|
599
|
+
}, {passive:false});
|
|
600
|
+
canvas.addEventListener('touchend', () => { mouseDown = false; mouse[2] = 0.0; });
|
|
601
|
+
|
|
602
|
+
// Cache uniform locations (avoid per-frame lookups)
|
|
603
|
+
const uBuf = {
|
|
604
|
+
ch0: gl.getUniformLocation(progBuf, 'iChannel0'),
|
|
605
|
+
res: gl.getUniformLocation(progBuf, 'iResolution'),
|
|
606
|
+
time: gl.getUniformLocation(progBuf, 'iTime'),
|
|
607
|
+
frame: gl.getUniformLocation(progBuf, 'iFrame'),
|
|
608
|
+
mouse: gl.getUniformLocation(progBuf, 'iMouse'),
|
|
609
|
+
mouseVel: gl.getUniformLocation(progBuf, 'iMouseVel')
|
|
610
|
+
};
|
|
611
|
+
const uImg = {
|
|
612
|
+
ch0: gl.getUniformLocation(progImg, 'iChannel0'),
|
|
613
|
+
res: gl.getUniformLocation(progImg, 'iResolution'),
|
|
614
|
+
time: gl.getUniformLocation(progImg, 'iTime')
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
function render(t) {
|
|
618
|
+
t *= 0.001;
|
|
619
|
+
|
|
620
|
+
// Buffer pass: read bufA → write bufB
|
|
621
|
+
gl.useProgram(progBuf);
|
|
622
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, bufB.fbo);
|
|
623
|
+
gl.viewport(0, 0, W, H);
|
|
624
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
625
|
+
gl.bindTexture(gl.TEXTURE_2D, bufA.tex);
|
|
626
|
+
gl.uniform1i(uBuf.ch0, 0);
|
|
627
|
+
gl.uniform2f(uBuf.res, W, H);
|
|
628
|
+
gl.uniform1f(uBuf.time, t);
|
|
629
|
+
gl.uniform1i(uBuf.frame, frameCount);
|
|
630
|
+
gl.uniform4f(uBuf.mouse, mouse[0], mouse[1], mouse[2], 0.0);
|
|
631
|
+
// IMPORTANT: Must clamp mouse velocity! Fast movement or first-frame clicks can produce huge velocity values,
|
|
632
|
+
// causing shader velocity explosion → NaN propagation → page crash
|
|
633
|
+
const mvx = Math.max(-50, Math.min(50, mouse[0] - prevMouse[0]));
|
|
634
|
+
const mvy = Math.max(-50, Math.min(50, mouse[1] - prevMouse[1]));
|
|
635
|
+
gl.uniform2f(uBuf.mouseVel, mvx, mvy);
|
|
636
|
+
gl.bindVertexArray(vao);
|
|
637
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
638
|
+
[bufA, bufB] = [bufB, bufA];
|
|
639
|
+
|
|
640
|
+
// Reset prevMouse each frame to avoid velocity accumulation
|
|
641
|
+
prevMouse[0] = mouse[0]; prevMouse[1] = mouse[1];
|
|
642
|
+
|
|
643
|
+
// Image pass: read bufA → screen
|
|
644
|
+
gl.useProgram(progImg);
|
|
645
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
646
|
+
gl.viewport(0, 0, W, H);
|
|
647
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
648
|
+
gl.bindTexture(gl.TEXTURE_2D, bufA.tex);
|
|
649
|
+
gl.uniform1i(uImg.ch0, 0);
|
|
650
|
+
gl.uniform2f(uImg.res, W, H);
|
|
651
|
+
gl.uniform1f(uImg.time, t);
|
|
652
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
653
|
+
|
|
654
|
+
frameCount++;
|
|
655
|
+
requestAnimationFrame(render);
|
|
656
|
+
}
|
|
657
|
+
requestAnimationFrame(render);
|
|
658
|
+
</script>
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
**Buffer A (Fluid Computation)**:
|
|
662
|
+
```glsl
|
|
663
|
+
// Grid-Based Euler Fluid Solver — Buffer A
|
|
664
|
+
// Data layout: .xy=velocity, .z=pressure/density, .w=ink
|
|
665
|
+
// iChannel0 = Buffer A (self-feedback)
|
|
666
|
+
|
|
667
|
+
#define DT 0.15 // time step [0.05 - 0.3]
|
|
668
|
+
#define K 0.2 // pressure correction strength [0.1 - 0.4]
|
|
669
|
+
#define NU 0.5 // viscosity coefficient [0.01=water, 1.0=syrup]
|
|
670
|
+
#define KAPPA 0.1 // ink diffusion coefficient [0.0 - 0.5]
|
|
671
|
+
#define MOUSE_RAD 50.0 // mouse influence radius [10.0 - 200.0]
|
|
672
|
+
|
|
673
|
+
#define T(p) texture(iChannel0, (p) / iResolution.xy)
|
|
674
|
+
|
|
675
|
+
void mainImage(out vec4 fragColor, in vec2 p) {
|
|
676
|
+
// Initial frames: add slight noise to break symmetry lock
|
|
677
|
+
if (iFrame < 10) {
|
|
678
|
+
vec2 uv = p / iResolution.xy;
|
|
679
|
+
float noise = fract(sin(dot(uv, vec2(12.9898, 78.233))) * 43758.5453);
|
|
680
|
+
fragColor = vec4(noise * 1e-4, noise * 1e-4, 1.0, 0.0);
|
|
681
|
+
return;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
vec4 c = T(p);
|
|
685
|
+
|
|
686
|
+
vec4 n = T(p + vec2(0, 1));
|
|
687
|
+
vec4 e = T(p + vec2(1, 0));
|
|
688
|
+
vec4 s = T(p - vec2(0, 1));
|
|
689
|
+
vec4 w = T(p - vec2(1, 0));
|
|
690
|
+
|
|
691
|
+
vec4 laplacian = (n + e + s + w - 4.0 * c);
|
|
692
|
+
vec4 dx = (e - w) / 2.0;
|
|
693
|
+
vec4 dy = (n - s) / 2.0;
|
|
694
|
+
float div = dx.x + dy.y;
|
|
695
|
+
|
|
696
|
+
c.z -= DT * (dx.z * c.x + dy.z * c.y + div * c.z);
|
|
697
|
+
c.xyw = T(p - DT * c.xy).xyw;
|
|
698
|
+
c.xyw += DT * vec3(NU, NU, KAPPA) * laplacian.xyw;
|
|
699
|
+
c.xy -= K * vec2(dx.z, dy.z);
|
|
700
|
+
|
|
701
|
+
// Mouse interaction: iMouse.z is the pressed flag (>0), velocity obtained via iMouseVel uniform
|
|
702
|
+
// IMPORTANT: mouseVel must be clamped to prevent NaN explosion (JS side should also clamp — double safety)
|
|
703
|
+
if (iMouse.z > 0.0) {
|
|
704
|
+
vec2 mouseVel = clamp(iMouseVel, vec2(-50.0), vec2(50.0));
|
|
705
|
+
float dist2 = dot(p - iMouse.xy, p - iMouse.xy);
|
|
706
|
+
float influence = exp(-dist2 / MOUSE_RAD);
|
|
707
|
+
c.xy += DT * influence * mouseVel;
|
|
708
|
+
c.w += DT * influence * 0.5;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// Vorticity confinement: prevents small vortices from dissipating too quickly, producing curling textures
|
|
712
|
+
// IMPORTANT: Ink diffusion/swirl effects (e.g., ink diffusing in water) require vorticity confinement, otherwise curl dissipates quickly leaving only smooth flow
|
|
713
|
+
float curl_c = dx.y - dy.x;
|
|
714
|
+
float curl_n = (T(p + vec2(1,1)).y - T(p + vec2(-1,1)).y) / 2.0
|
|
715
|
+
- (T(p + vec2(0,2)).x - T(p).x) / 2.0;
|
|
716
|
+
float curl_s = (T(p + vec2(1,-1)).y - T(p + vec2(-1,-1)).y) / 2.0
|
|
717
|
+
- (T(p).x - T(p + vec2(0,-2)).x) / 2.0;
|
|
718
|
+
float curl_e = (T(p + vec2(2,0)).y - T(p).y) / 2.0
|
|
719
|
+
- (T(p + vec2(1,1)).x - T(p + vec2(1,-1)).x) / 2.0;
|
|
720
|
+
float curl_w = (T(p).y - T(p + vec2(-2,0)).y) / 2.0
|
|
721
|
+
- (T(p + vec2(-1,1)).x - T(p + vec2(-1,-1)).x) / 2.0;
|
|
722
|
+
vec2 eta = vec2(abs(curl_e) - abs(curl_w), abs(curl_n) - abs(curl_s));
|
|
723
|
+
eta = normalize(eta + vec2(1e-5));
|
|
724
|
+
c.xy += DT * 0.035 * vec2(eta.y, -eta.x) * curl_c;
|
|
725
|
+
|
|
726
|
+
// IMPORTANT: Automatic ink sources: ensure visible fluid motion without mouse interaction
|
|
727
|
+
// Emitter positions must move over time, and Gaussian radius must be small enough to maintain locality
|
|
728
|
+
float t = iTime;
|
|
729
|
+
vec2 em1 = iResolution.xy * vec2(0.25, 0.5 + 0.2 * sin(t * 0.7));
|
|
730
|
+
vec2 em2 = iResolution.xy * vec2(0.75, 0.5 + 0.2 * cos(t * 0.9));
|
|
731
|
+
vec2 em3 = iResolution.xy * vec2(0.5, 0.3 + 0.15 * sin(t * 1.3));
|
|
732
|
+
|
|
733
|
+
float r1 = exp(-dot(p - em1, p - em1) / 150.0);
|
|
734
|
+
float r2 = exp(-dot(p - em2, p - em2) / 150.0);
|
|
735
|
+
float r3 = exp(-dot(p - em3, p - em3) / 120.0);
|
|
736
|
+
|
|
737
|
+
c.xy += DT * r1 * vec2(cos(t), sin(t * 1.3)) * 3.0;
|
|
738
|
+
c.xy += DT * r2 * vec2(-cos(t * 0.8), sin(t * 0.6)) * 3.0;
|
|
739
|
+
c.xy += DT * r3 * vec2(sin(t * 1.1), -cos(t)) * 2.0;
|
|
740
|
+
c.w += DT * (r1 + r2 + r3) * 2.0;
|
|
741
|
+
|
|
742
|
+
// IMPORTANT: Ink decay: must use multiplicative decay, do NOT use subtractive (subtractive causes saturation)
|
|
743
|
+
c.w *= 0.99;
|
|
744
|
+
|
|
745
|
+
c = clamp(c, vec4(-5, -5, 0.5, 0), vec4(5, 5, 3, 5));
|
|
746
|
+
|
|
747
|
+
if (p.x < 1.0 || p.y < 1.0 ||
|
|
748
|
+
iResolution.x - p.x < 1.0 || iResolution.y - p.y < 1.0) {
|
|
749
|
+
c.xyw *= 0.0;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
fragColor = c;
|
|
753
|
+
}
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
**Image (Visualization Rendering)**:
|
|
757
|
+
```glsl
|
|
758
|
+
// Fluid Visualization — Image Pass
|
|
759
|
+
// iChannel0 = Buffer A
|
|
760
|
+
|
|
761
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
762
|
+
vec2 uv = fragCoord / iResolution.xy;
|
|
763
|
+
vec4 c = texture(iChannel0, uv);
|
|
764
|
+
|
|
765
|
+
// IMPORTANT: Color base must be bright enough! 0.5+0.5*cos produces [0,1] range bright colors
|
|
766
|
+
// Never use vec3(0.02, 0.01, 0.08) or similar extremely dark base colors — they become invisible when multiplied by ink
|
|
767
|
+
float angle = atan(c.y, c.x);
|
|
768
|
+
vec3 col = 0.5 + 0.5 * cos(angle + vec3(0.0, 2.1, 4.2));
|
|
769
|
+
|
|
770
|
+
// IMPORTANT: smoothstep upper limit should cover actual ink range to preserve gradient variation
|
|
771
|
+
float ink = smoothstep(0.0, 2.0, c.w);
|
|
772
|
+
col *= ink;
|
|
773
|
+
|
|
774
|
+
// Pressure highlights
|
|
775
|
+
col += vec3(0.05) * clamp(c.z - 1.0, 0.0, 1.0);
|
|
776
|
+
|
|
777
|
+
// IMPORTANT: Background color must be visible (RGB at least > 5/255 ≈ 0.02), otherwise users think the page is all black
|
|
778
|
+
col = max(col, vec3(0.02, 0.012, 0.035));
|
|
779
|
+
|
|
780
|
+
fragColor = vec4(col, 1.0);
|
|
781
|
+
}
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
## Water Surface Ripple Complete Template
|
|
785
|
+
|
|
786
|
+
Water surface ripples use the wave equation rather than Navier-Stokes. Clicks/touches generate concentric ripples that interfere with each other and gradually decay.
|
|
787
|
+
|
|
788
|
+
**IMPORTANT: Water ripple drop injection must be implemented directly in the shader using iMouse**, do not use custom uniform arrays to pass click positions — that adds complexity on both JS/GLSL sides and is error-prone (uniform location not found, array length mismatch, etc.).
|
|
789
|
+
|
|
790
|
+
### Water Ripple Buffer Pass (Wave Equation Solver)
|
|
791
|
+
|
|
792
|
+
```glsl
|
|
793
|
+
// Water Ripple — Buffer Pass (Wave Equation Solver)
|
|
794
|
+
// Data encoding: .r = previous frame height (prev), .g = current frame height (curr)
|
|
795
|
+
// iChannel0 = self-feedback (ping-pong)
|
|
796
|
+
// IMPORTANT: Drop injection is done directly in the shader via iMouse, no custom uniforms needed
|
|
797
|
+
|
|
798
|
+
void main() {
|
|
799
|
+
vec2 p = gl_FragCoord.xy;
|
|
800
|
+
vec2 uv = p / iResolution.xy;
|
|
801
|
+
|
|
802
|
+
if (iFrame < 2) {
|
|
803
|
+
fragColor = vec4(0.0);
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
float prev = texture(iChannel0, uv).r;
|
|
808
|
+
float curr = texture(iChannel0, uv).g;
|
|
809
|
+
|
|
810
|
+
vec2 texel = 1.0 / iResolution.xy;
|
|
811
|
+
float n = texture(iChannel0, uv + vec2(0.0, texel.y)).g;
|
|
812
|
+
float s = texture(iChannel0, uv - vec2(0.0, texel.y)).g;
|
|
813
|
+
float e = texture(iChannel0, uv + vec2(texel.x, 0.0)).g;
|
|
814
|
+
float w = texture(iChannel0, uv - vec2(texel.x, 0.0)).g;
|
|
815
|
+
|
|
816
|
+
float laplacian = n + s + e + w - 4.0 * curr;
|
|
817
|
+
|
|
818
|
+
// Verlet integration: next = 2*curr - prev + c²*laplacian
|
|
819
|
+
float speed = 0.45;
|
|
820
|
+
float next = 2.0 * curr - prev + speed * laplacian;
|
|
821
|
+
|
|
822
|
+
// damping: 0.995~0.998 lets ripples propagate several rings before disappearing
|
|
823
|
+
float damping = 0.996;
|
|
824
|
+
next *= damping;
|
|
825
|
+
|
|
826
|
+
// IMPORTANT: Mouse click drop injection — directly using iMouse, simple and reliable
|
|
827
|
+
// iMouse.z > 0 indicates mouse is pressed
|
|
828
|
+
if (iMouse.z > 0.0) {
|
|
829
|
+
float dist = length(p - iMouse.xy);
|
|
830
|
+
float radius = 12.0;
|
|
831
|
+
float strength = 1.5;
|
|
832
|
+
next += strength * exp(-dist * dist / (2.0 * radius * radius));
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
// IMPORTANT: Automatic ripples: ensure visible ripples even without interaction
|
|
836
|
+
// Use periodic functions of iTime to control auto-drop position and timing
|
|
837
|
+
float autoPhase = iTime * 0.5;
|
|
838
|
+
float autoPeriod = fract(autoPhase);
|
|
839
|
+
// Only inject during phase < 0.05 each cycle (avoid continuous injection)
|
|
840
|
+
if (autoPeriod < 0.05) {
|
|
841
|
+
float idx = floor(autoPhase);
|
|
842
|
+
// Pseudo-random position
|
|
843
|
+
vec2 autoPos = iResolution.xy * vec2(
|
|
844
|
+
0.2 + 0.6 * fract(sin(idx * 12.9898) * 43758.5453),
|
|
845
|
+
0.2 + 0.6 * fract(sin(idx * 78.233) * 43758.5453)
|
|
846
|
+
);
|
|
847
|
+
float dist = length(p - autoPos);
|
|
848
|
+
next += 1.2 * exp(-dist * dist / (2.0 * 10.0 * 10.0));
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// Boundary absorption
|
|
852
|
+
if (p.x < 2.0 || p.y < 2.0 ||
|
|
853
|
+
iResolution.x - p.x < 2.0 || iResolution.y - p.y < 2.0) {
|
|
854
|
+
next *= 0.0;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
// IMPORTANT: Output: .r = current frame (becomes next frame's prev), .g = newly computed (becomes next frame's curr)
|
|
858
|
+
fragColor = vec4(curr, next, 0.0, 1.0);
|
|
859
|
+
}
|
|
860
|
+
```
|
|
861
|
+
|
|
862
|
+
### Water Ripple JS Side
|
|
863
|
+
|
|
864
|
+
The water ripple JS structure is identical to the fluid simulation skeleton (ping-pong FBO + render loop), with only these differences:
|
|
865
|
+
- Buffer pass shader is the wave equation solver (template above)
|
|
866
|
+
- Image pass is the water surface lighting renderer (Step 9c)
|
|
867
|
+
- **No custom uniform arrays needed**, drop injection is done entirely in the shader via iMouse
|
|
868
|
+
- JS side only needs to pass standard uniforms: `iChannel0, iResolution, iTime, iFrame, iMouse`
|
|
869
|
+
|
|
870
|
+
When dragging the mouse, ripples are continuously injected (because iMouse.z > 0 remains true), and faster dragging produces denser ripples (a natural effect).
|
|
871
|
+
|
|
872
|
+
### Water Ripple Image Pass
|
|
873
|
+
|
|
874
|
+
See Step 9c above.
|
|
875
|
+
|
|
876
|
+
## Multi-Color Ink Mixing Template (Ink Diffusion in Water / Multi-Color Blending)
|
|
877
|
+
|
|
878
|
+
When multiple ink colors need to interpenetrate and blend, a single scalar `c.w` is insufficient. You need **two Buffers**: Buffer A stores velocity/pressure (same as above), Buffer B stores RGB three-channel ink concentration, sharing the same velocity field for advection.
|
|
879
|
+
|
|
880
|
+
**IMPORTANT: Key for multi-color ink: Buffer B's RGB channels independently store the concentration of each ink color, using Buffer A's velocity field for semi-Lagrangian advection. Different ink colors naturally blend during advection and diffusion.**
|
|
881
|
+
|
|
882
|
+
### JS Side Changes (Three Buffer Ping-Pong)
|
|
883
|
+
|
|
884
|
+
Two sets of ping-pong FBOs are needed: `bufA/bufB` (velocity field) and `bufC/bufD` (ink RGB). In the render loop, first render Buffer A (velocity field), then Buffer B (ink advection), and finally the Image pass reads Buffer B for visualization:
|
|
885
|
+
|
|
886
|
+
```javascript
|
|
887
|
+
// Create additional ink FBO pair
|
|
888
|
+
let bufC, bufD;
|
|
889
|
+
function resize() {
|
|
890
|
+
// ... same as above for bufA/bufB ...
|
|
891
|
+
bufC = createFBO(W, H);
|
|
892
|
+
bufD = createFBO(W, H);
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
// Buffer B shader needs two input textures:
|
|
896
|
+
// iChannel0 = Buffer B self (ink RGB)
|
|
897
|
+
// iChannel1 = Buffer A (velocity field)
|
|
898
|
+
const uBufInk = {
|
|
899
|
+
ch0: gl.getUniformLocation(progBufInk, 'iChannel0'),
|
|
900
|
+
ch1: gl.getUniformLocation(progBufInk, 'iChannel1'),
|
|
901
|
+
res: gl.getUniformLocation(progBufInk, 'iResolution'),
|
|
902
|
+
time: gl.getUniformLocation(progBufInk, 'iTime'),
|
|
903
|
+
frame: gl.getUniformLocation(progBufInk, 'iFrame'),
|
|
904
|
+
mouse: gl.getUniformLocation(progBufInk, 'iMouse'),
|
|
905
|
+
};
|
|
906
|
+
|
|
907
|
+
function render(t) {
|
|
908
|
+
t *= 0.001;
|
|
909
|
+
// Pass 1: Buffer A (velocity) — read bufA, write bufB
|
|
910
|
+
// ... same as above ...
|
|
911
|
+
[bufA, bufB] = [bufB, bufA];
|
|
912
|
+
|
|
913
|
+
// Pass 2: Buffer B (ink RGB) — read bufC(ink)+bufA(velocity), write bufD
|
|
914
|
+
gl.useProgram(progBufInk);
|
|
915
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, bufD.fbo);
|
|
916
|
+
gl.viewport(0, 0, W, H);
|
|
917
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
918
|
+
gl.bindTexture(gl.TEXTURE_2D, bufC.tex); // previous frame ink
|
|
919
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
920
|
+
gl.bindTexture(gl.TEXTURE_2D, bufA.tex); // current velocity field
|
|
921
|
+
gl.uniform1i(uBufInk.ch0, 0);
|
|
922
|
+
gl.uniform1i(uBufInk.ch1, 1);
|
|
923
|
+
gl.uniform2f(uBufInk.res, W, H);
|
|
924
|
+
gl.uniform1f(uBufInk.time, t);
|
|
925
|
+
gl.uniform1i(uBufInk.frame, frameCount);
|
|
926
|
+
gl.uniform4f(uBufInk.mouse, mouse[0], mouse[1], mouse[2], 0.0);
|
|
927
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
928
|
+
[bufC, bufD] = [bufD, bufC];
|
|
929
|
+
|
|
930
|
+
// Pass 3: Image — read bufC(ink) to screen
|
|
931
|
+
gl.useProgram(progImg);
|
|
932
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
933
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
934
|
+
gl.bindTexture(gl.TEXTURE_2D, bufC.tex);
|
|
935
|
+
// ...
|
|
936
|
+
}
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### Buffer B — Multi-Color Ink Advection Shader
|
|
940
|
+
|
|
941
|
+
```glsl
|
|
942
|
+
// Multi-Color Ink — Buffer B (Ink Advection)
|
|
943
|
+
// .rgb = concentrations of three ink colors
|
|
944
|
+
// iChannel0 = Buffer B self (ink RGB)
|
|
945
|
+
// iChannel1 = Buffer A (velocity field, .xy=velocity)
|
|
946
|
+
|
|
947
|
+
#define DT 0.15
|
|
948
|
+
#define INK_KAPPA 0.3 // ink diffusion coefficient (higher than single-color template for faster blending)
|
|
949
|
+
#define INK_DECAY 0.995 // ink decay (slower than single-color to maintain richness)
|
|
950
|
+
|
|
951
|
+
#define TINK(p) texture(iChannel0, (p) / iResolution.xy)
|
|
952
|
+
#define TVEL(p) texture(iChannel1, (p) / iResolution.xy)
|
|
953
|
+
|
|
954
|
+
void mainImage(out vec4 fragColor, in vec2 p) {
|
|
955
|
+
if (iFrame < 10) { fragColor = vec4(0.0, 0.0, 0.0, 1.0); return; }
|
|
956
|
+
|
|
957
|
+
vec2 vel = TVEL(p).xy;
|
|
958
|
+
|
|
959
|
+
// Semi-Lagrangian advection: backward trace using velocity field
|
|
960
|
+
vec3 ink = TINK(p - DT * vel).rgb;
|
|
961
|
+
|
|
962
|
+
// Diffusion: Laplacian operator
|
|
963
|
+
vec3 inkC = TINK(p).rgb;
|
|
964
|
+
vec3 inkN = TINK(p + vec2(0,1)).rgb;
|
|
965
|
+
vec3 inkE = TINK(p + vec2(1,0)).rgb;
|
|
966
|
+
vec3 inkS = TINK(p - vec2(0,1)).rgb;
|
|
967
|
+
vec3 inkW = TINK(p - vec2(1,0)).rgb;
|
|
968
|
+
vec3 lapInk = inkN + inkE + inkS + inkW - 4.0 * inkC;
|
|
969
|
+
ink += DT * INK_KAPPA * lapInk;
|
|
970
|
+
|
|
971
|
+
// Automatic ink sources: multiple emitters with different colors
|
|
972
|
+
float t = iTime;
|
|
973
|
+
vec2 em1 = iResolution.xy * vec2(0.25, 0.5 + 0.2 * sin(t * 0.7));
|
|
974
|
+
vec2 em2 = iResolution.xy * vec2(0.75, 0.5 + 0.2 * cos(t * 0.9));
|
|
975
|
+
vec2 em3 = iResolution.xy * vec2(0.5, 0.3 + 0.15 * sin(t * 1.3));
|
|
976
|
+
vec2 em4 = iResolution.xy * vec2(0.5, 0.7 + 0.15 * cos(t * 0.5));
|
|
977
|
+
|
|
978
|
+
float r1 = exp(-dot(p - em1, p - em1) / 200.0);
|
|
979
|
+
float r2 = exp(-dot(p - em2, p - em2) / 200.0);
|
|
980
|
+
float r3 = exp(-dot(p - em3, p - em3) / 180.0);
|
|
981
|
+
float r4 = exp(-dot(p - em4, p - em4) / 180.0);
|
|
982
|
+
|
|
983
|
+
// Each emitter injects a different color
|
|
984
|
+
ink.r += DT * (r1 * 3.0 + r4 * 1.5); // red/magenta
|
|
985
|
+
ink.g += DT * (r2 * 3.0 + r3 * 1.5); // green/cyan
|
|
986
|
+
ink.b += DT * (r3 * 3.0 + r1 * 0.8 + r2 * 0.8); // blue/mixed
|
|
987
|
+
|
|
988
|
+
// Mouse stirring injects white ink (all channels)
|
|
989
|
+
if (iMouse.z > 0.0) {
|
|
990
|
+
float dist2 = dot(p - iMouse.xy, p - iMouse.xy);
|
|
991
|
+
float influence = exp(-dist2 / 80.0);
|
|
992
|
+
ink += vec3(DT * influence * 2.0);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// Decay + clamp
|
|
996
|
+
ink *= INK_DECAY;
|
|
997
|
+
ink = clamp(ink, vec3(0.0), vec3(5.0));
|
|
998
|
+
|
|
999
|
+
// Boundary clear
|
|
1000
|
+
if (p.x < 1.0 || p.y < 1.0 ||
|
|
1001
|
+
iResolution.x - p.x < 1.0 || iResolution.y - p.y < 1.0) {
|
|
1002
|
+
ink = vec3(0.0);
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
fragColor = vec4(ink, 1.0);
|
|
1006
|
+
}
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
### Step 9d: Visualization (Image Pass) — Multi-Color Ink Mixing
|
|
1010
|
+
|
|
1011
|
+
```glsl
|
|
1012
|
+
// Multi-Color Ink Visualization — Image Pass
|
|
1013
|
+
// iChannel0 = Buffer B (ink RGB)
|
|
1014
|
+
|
|
1015
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
1016
|
+
vec2 uv = fragCoord / iResolution.xy;
|
|
1017
|
+
vec3 ink = texture(iChannel0, uv).rgb;
|
|
1018
|
+
|
|
1019
|
+
// Use smoothstep to map each channel, preserving concentration gradients
|
|
1020
|
+
vec3 mapped = smoothstep(vec3(0.0), vec3(2.5), ink);
|
|
1021
|
+
|
|
1022
|
+
// Color mapping: map RGB concentrations to actual visible colors
|
|
1023
|
+
// IMPORTANT: Base colors must be bright, do not use extremely dark values
|
|
1024
|
+
vec3 col1 = vec3(0.9, 0.15, 0.2); // red ink
|
|
1025
|
+
vec3 col2 = vec3(0.1, 0.8, 0.3); // green ink
|
|
1026
|
+
vec3 col3 = vec3(0.15, 0.3, 0.95); // blue ink
|
|
1027
|
+
|
|
1028
|
+
vec3 col = col1 * mapped.r + col2 * mapped.g + col3 * mapped.b;
|
|
1029
|
+
|
|
1030
|
+
// Mixing regions produce new hues (additive blending naturally creates gradients)
|
|
1031
|
+
// HDR tone mapping to prevent overexposure
|
|
1032
|
+
col = 1.0 - exp(-col * 1.2);
|
|
1033
|
+
|
|
1034
|
+
// Background color
|
|
1035
|
+
float totalInk = mapped.r + mapped.g + mapped.b;
|
|
1036
|
+
vec3 bg = vec3(0.02, 0.015, 0.04);
|
|
1037
|
+
col = mix(bg, col, smoothstep(0.0, 0.3, totalInk));
|
|
1038
|
+
|
|
1039
|
+
fragColor = vec4(col, 1.0);
|
|
1040
|
+
}
|
|
1041
|
+
```
|
|
1042
|
+
|
|
1043
|
+
**IMPORTANT: The multi-color ink Buffer A velocity field template is identical to the single-color version**, except `c.w` is no longer used for ink (ink is in Buffer B). Buffer A only handles velocity + pressure.
|
|
1044
|
+
|
|
1045
|
+
## Common Variants
|
|
1046
|
+
|
|
1047
|
+
### Variant 1: Rotational Self-Advection
|
|
1048
|
+
Does not use pressure projection; achieves naturally divergence-free advection through multi-scale rotational sampling.
|
|
1049
|
+
```glsl
|
|
1050
|
+
#define RotNum 3
|
|
1051
|
+
#define angRnd 1.0
|
|
1052
|
+
|
|
1053
|
+
const float ang = 2.0 * 3.14159 / float(RotNum);
|
|
1054
|
+
mat2 m = mat2(cos(ang), sin(ang), -sin(ang), cos(ang));
|
|
1055
|
+
|
|
1056
|
+
float getRot(vec2 uv, float sc) {
|
|
1057
|
+
float ang2 = angRnd * randS(uv).x * ang;
|
|
1058
|
+
vec2 p = vec2(cos(ang2), sin(ang2));
|
|
1059
|
+
float rot = 0.0;
|
|
1060
|
+
for (int i = 0; i < RotNum; i++) {
|
|
1061
|
+
vec2 p2 = p * sc;
|
|
1062
|
+
vec2 v = texture(iChannel0, fract(uv + p2)).xy - vec2(0.5);
|
|
1063
|
+
rot += cross(vec3(v, 0.0), vec3(p2, 0.0)).z / dot(p2, p2);
|
|
1064
|
+
p = m * p;
|
|
1065
|
+
}
|
|
1066
|
+
return rot / float(RotNum);
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
// Multi-scale advection superposition
|
|
1070
|
+
vec2 v = vec2(0);
|
|
1071
|
+
float sc = 1.0 / max(iResolution.x, iResolution.y);
|
|
1072
|
+
for (int level = 0; level < 20; level++) {
|
|
1073
|
+
if (sc > 0.7) break;
|
|
1074
|
+
vec2 p = vec2(cos(ang2), sin(ang2));
|
|
1075
|
+
for (int i = 0; i < RotNum; i++) {
|
|
1076
|
+
vec2 p2 = p * sc;
|
|
1077
|
+
float rot = getRot(uv + p2, sc);
|
|
1078
|
+
v += p2.yx * rot * vec2(-1, 1);
|
|
1079
|
+
p = m * p;
|
|
1080
|
+
}
|
|
1081
|
+
sc *= 2.0;
|
|
1082
|
+
}
|
|
1083
|
+
fragColor = texture(iChannel0, fract(uv + v * 3.0 / iResolution.x));
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
### Variant 2: Vorticity Confinement
|
|
1087
|
+
Adds vorticity confinement force on top of the basic solver, preventing small vortices from dissipating too quickly.
|
|
1088
|
+
```glsl
|
|
1089
|
+
#define VORT_STRENGTH 0.01 // [0.001 - 0.1]
|
|
1090
|
+
|
|
1091
|
+
float curl_c = curl_at(uv);
|
|
1092
|
+
float curl_n = abs(curl_at(uv + vec2(0, texel.y)));
|
|
1093
|
+
float curl_s = abs(curl_at(uv - vec2(0, texel.y)));
|
|
1094
|
+
float curl_e = abs(curl_at(uv + vec2(texel.x, 0)));
|
|
1095
|
+
float curl_w = abs(curl_at(uv - vec2(texel.x, 0)));
|
|
1096
|
+
|
|
1097
|
+
vec2 eta = normalize(vec2(curl_e - curl_w, curl_n - curl_s) + 1e-5);
|
|
1098
|
+
vec2 conf = VORT_STRENGTH * vec2(eta.y, -eta.x) * curl_c;
|
|
1099
|
+
c.xy += DT * conf;
|
|
1100
|
+
```
|
|
1101
|
+
|
|
1102
|
+
### Variant 3: Viscous Fingering
|
|
1103
|
+
Rotation-driven self-amplification + Laplacian diffusion, producing reaction-diffusion style organic patterns.
|
|
1104
|
+
```glsl
|
|
1105
|
+
const float cs = 0.25; // curl→rotation scale
|
|
1106
|
+
const float ls = 0.24; // Laplacian diffusion strength
|
|
1107
|
+
const float ps = -0.06; // divergence-pressure feedback
|
|
1108
|
+
const float amp = 1.0; // self-amplification coefficient
|
|
1109
|
+
const float pwr = 0.2; // curl power exponent
|
|
1110
|
+
|
|
1111
|
+
float sc = cs * sign(curl) * pow(abs(curl), pwr);
|
|
1112
|
+
float ta = amp * uv.x + ls * lapl.x + norm.x * sp + uv.x * sd;
|
|
1113
|
+
float tb = amp * uv.y + ls * lapl.y + norm.y * sp + uv.y * sd;
|
|
1114
|
+
float a = ta * cos(sc) - tb * sin(sc);
|
|
1115
|
+
float b = ta * sin(sc) + tb * cos(sc);
|
|
1116
|
+
fragColor = clamp(vec4(a, b, div, 1), -1.0, 1.0);
|
|
1117
|
+
```
|
|
1118
|
+
|
|
1119
|
+
### Variant 4: Gaussian Kernel SPH Particle Fluid (Gaussian SPH)
|
|
1120
|
+
Gaussian kernel function for density and velocity estimation, a grid-based approximation of SPH.
|
|
1121
|
+
```glsl
|
|
1122
|
+
#define RADIUS 7 // search radius [3-10]
|
|
1123
|
+
|
|
1124
|
+
vec4 r = vec4(0);
|
|
1125
|
+
for (vec2 i = vec2(-RADIUS); ++i.x < float(RADIUS);)
|
|
1126
|
+
for (i.y = -float(RADIUS); ++i.y < float(RADIUS);) {
|
|
1127
|
+
vec2 v = texelFetch(iChannel0, ivec2(i + fragCoord), 0).xy;
|
|
1128
|
+
float mass = texelFetch(iChannel0, ivec2(i + fragCoord), 0).z;
|
|
1129
|
+
float w = exp(-dot(v + i, v + i)) / 3.14;
|
|
1130
|
+
r += mass * w * vec4(mix(v + v + i, v, mass), 1, 1);
|
|
1131
|
+
}
|
|
1132
|
+
r.xy /= r.z + 1e-6;
|
|
1133
|
+
```
|
|
1134
|
+
|
|
1135
|
+
### Variant 5: Lagrangian Vortex Particle Method
|
|
1136
|
+
Tracks discrete vortex particles, computing the velocity field using the Biot-Savart law.
|
|
1137
|
+
```glsl
|
|
1138
|
+
#define N 20 // N×N particles
|
|
1139
|
+
#define STRENGTH 1e3*0.25 // vorticity strength scale
|
|
1140
|
+
|
|
1141
|
+
vec2 F = vec2(0);
|
|
1142
|
+
for (int j = 0; j < N; j++)
|
|
1143
|
+
for (int i = 0; i < N; i++) {
|
|
1144
|
+
float w = vorticity(i, j);
|
|
1145
|
+
vec2 d = particle_pos(i, j) - my_pos;
|
|
1146
|
+
float l = dot(d, d);
|
|
1147
|
+
if (l > 1e-5)
|
|
1148
|
+
F += vec2(-d.y, d.x) * w / l;
|
|
1149
|
+
}
|
|
1150
|
+
velocity = STRENGTH * F;
|
|
1151
|
+
position += velocity * dt;
|
|
1152
|
+
```
|
|
1153
|
+
|
|
1154
|
+
## Performance & Composition
|
|
1155
|
+
|
|
1156
|
+
**Performance tips**:
|
|
1157
|
+
- 5-point cross stencil is fastest; 3x3 (9 samples) is the best accuracy/performance tradeoff
|
|
1158
|
+
- SPH search radius >7 is extremely slow; use `texelFetch` instead of `texture` to skip filtering
|
|
1159
|
+
- Merge multiple steps into a single Pass; inter-frame feedback forms implicit Jacobi iteration
|
|
1160
|
+
- Multi-step advection (`ADVECTION_STEPS=3`) improves accuracy but 3x sampling cost
|
|
1161
|
+
- `textureLod` provides O(1) multi-scale reads replacing large-radius sampling
|
|
1162
|
+
- Add slight noise (`1e-6`) on initial frames to break symmetry lock
|
|
1163
|
+
- `fract(uv + offset)` implements periodic boundaries without branching
|
|
1164
|
+
- Multiply pressure field by `0.9999` decay to prevent drift
|
|
1165
|
+
|
|
1166
|
+
**Composition directions**:
|
|
1167
|
+
- **+ Normal map lighting**: density field → height map → normals → Phong/GGX, liquid metal effects
|
|
1168
|
+
- **+ Particle tracing**: passive particles update position following the flow field, visualizing streamlines/ink wash
|
|
1169
|
+
- **+ Color advection**: extra channels store RGB, synchronous semi-Lagrangian advection, colorful blending
|
|
1170
|
+
- **+ Audio response**: low freq → thrust, high freq → vortex perturbation, music-driven fluid
|
|
1171
|
+
- **+ 3D volume rendering**: 2D slices packed as 3D voxels, ray marching to render clouds/explosions
|
|
1172
|
+
|
|
1173
|
+
## Further Reading
|
|
1174
|
+
|
|
1175
|
+
Full step-by-step tutorial, mathematical derivations, and advanced usage in [reference](../reference/fluid-simulation.md)
|