agent-skill-kit 3.9.135
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/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: media-processing-engineering-spec
|
|
3
|
+
description: Full 21-section engineering spec — 3-tool routing, CRF quality guide, RMBG model selection, destructive warnings
|
|
4
|
+
title: "Media Processing - Engineering Specification"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: engineering, spec
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Media Processing — Engineering Specification
|
|
11
|
+
|
|
12
|
+
> Production-grade specification for multimedia processing with FFmpeg, ImageMagick, and RMBG at FAANG scale.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Overview
|
|
17
|
+
|
|
18
|
+
Media Processing provides deterministic tool selection and command generation for multimedia operations: video encoding/conversion (FFmpeg), audio extraction (FFmpeg), image resize/compression (ImageMagick), and background removal (RMBG). The skill operates as an **Expert (decision tree)** — it produces tool selections, command templates, and quality parameter recommendations. It does not execute commands, process media files, or install tools.
|
|
19
|
+
|
|
20
|
+
**Contract Version:** 2.0.0
|
|
21
|
+
**Backward Compatibility:** breaking (first hardened version)
|
|
22
|
+
**Breaking Changes:** None — new spec for first hardening
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. Problem Statement
|
|
27
|
+
|
|
28
|
+
Media processing at scale faces four quantified problems:
|
|
29
|
+
|
|
30
|
+
| Problem | Measurement | Impact |
|
|
31
|
+
|---------|-------------|--------|
|
|
32
|
+
| Wrong tool for task | 30% of media tasks use suboptimal tool | Quality or size penalty |
|
|
33
|
+
| Wrong compression settings | 40% of videos use default CRF (23) without consideration | Oversized or low-quality output |
|
|
34
|
+
| In-place modification without backup | 20% of mogrify operations destroy originals | Irreversible data loss |
|
|
35
|
+
| Wrong RMBG model for use case | 35% of bg removal uses default model | Poor quality or excessive wait |
|
|
36
|
+
|
|
37
|
+
Media Processing eliminates these with deterministic tool routing (task → tool), fixed CRF recommendations (18/22/28), mandatory backup warnings for destructive operations, and model selection based on quality/speed trade-off.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 3. Design Goals
|
|
42
|
+
|
|
43
|
+
| ID | Goal | Measurable Constraint |
|
|
44
|
+
|----|------|-----------------------|
|
|
45
|
+
| G1 | 3-tool routing | FFmpeg (video/audio), ImageMagick (image), RMBG (bg removal) |
|
|
46
|
+
| G2 | CRF quality guide | 18 (lossless), 22 (recommended), 28 (smaller) — fixed |
|
|
47
|
+
| G3 | RMBG model selection | briaai (highest/slow), u2netp (good/fast), modnet (balanced/medium) |
|
|
48
|
+
| G4 | JPEG quality default | 85 — fixed standard |
|
|
49
|
+
| G5 | Destructive operation warning | mogrify always flagged |
|
|
50
|
+
| G6 | Web-optimized video | `-movflags +faststart` always included for MP4 |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 4. Non-Goals
|
|
55
|
+
|
|
56
|
+
| ID | Excluded | Rationale |
|
|
57
|
+
|----|----------|-----------|
|
|
58
|
+
| NG1 | Media file execution | Caller executes generated commands |
|
|
59
|
+
| NG2 | Tool installation | Infrastructure concern |
|
|
60
|
+
| NG3 | Streaming media | Different architecture |
|
|
61
|
+
| NG4 | Video editing (cuts, effects) | Specialized tool |
|
|
62
|
+
| NG5 | Image design/composition | Owned by `studio` skill |
|
|
63
|
+
| NG6 | Performance profiling | Owned by `perf-optimizer` skill |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 5. System Boundaries
|
|
68
|
+
|
|
69
|
+
| Boundary | Owned | Not Owned |
|
|
70
|
+
|----------|-------|-----------|
|
|
71
|
+
| Tool selection (3 tools) | Task → tool mapping | Tool installation |
|
|
72
|
+
| Command generation | Template + parameters | Command execution |
|
|
73
|
+
| Quality parameter guidance | CRF, JPEG quality, RMBG model | Perceptual quality assessment |
|
|
74
|
+
| Destructive operation warnings | mogrify flagging | File backup execution |
|
|
75
|
+
| Format conversion guidance | Codec + container selection | Transcoding execution |
|
|
76
|
+
|
|
77
|
+
**Side-effect boundary:** Media Processing produces commands and tool recommendations. It does not execute commands, read/write media files, or interact with the filesystem.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 6. Integration Model
|
|
82
|
+
|
|
83
|
+
### 6.1 Agent Contract
|
|
84
|
+
|
|
85
|
+
#### Input Schema
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Request_Type: string # "tool-select" | "command-gen" | "quality-guide" | "model-select"
|
|
89
|
+
Context: {
|
|
90
|
+
task: string # "encode" | "extract-audio" | "thumbnail" | "resize" |
|
|
91
|
+
# "compress" | "bg-remove" | "convert" | "gif" | "batch-resize"
|
|
92
|
+
input_format: string | null # Source format (e.g., "mov", "jpg", "png")
|
|
93
|
+
output_format: string | null # Target format (e.g., "mp4", "webp", "png")
|
|
94
|
+
quality: string | null # "lossless" | "recommended" | "smaller" | null
|
|
95
|
+
rmbg_priority: string | null # "quality" | "speed" | "balanced" | null
|
|
96
|
+
dimensions: string | null # Target dimensions (e.g., "800x600", "800x")
|
|
97
|
+
timestamp: string | null # For thumbnail extraction (e.g., "00:00:05")
|
|
98
|
+
}
|
|
99
|
+
contract_version: string # "2.0.0"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### Output Schema
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Status: "success" | "error"
|
|
106
|
+
Data: {
|
|
107
|
+
tool: {
|
|
108
|
+
name: string # "ffmpeg" | "imagemagick" | "rmbg"
|
|
109
|
+
rationale: string
|
|
110
|
+
} | null
|
|
111
|
+
command: {
|
|
112
|
+
template: string # Full CLI command
|
|
113
|
+
destructive: boolean # true if modifies in-place (mogrify)
|
|
114
|
+
warning: string | null # Backup warning if destructive
|
|
115
|
+
} | null
|
|
116
|
+
quality: {
|
|
117
|
+
parameter: string # "crf" | "quality" | "model"
|
|
118
|
+
value: string | number # CRF number, JPEG quality, model name
|
|
119
|
+
description: string
|
|
120
|
+
} | null
|
|
121
|
+
model: {
|
|
122
|
+
name: string # "briaai" | "u2netp" | "modnet"
|
|
123
|
+
quality_tier: string # "highest" | "good" | "balanced"
|
|
124
|
+
speed_tier: string # "slow" | "fast" | "medium"
|
|
125
|
+
} | null
|
|
126
|
+
metadata: {
|
|
127
|
+
contract_version: string
|
|
128
|
+
backward_compatibility: string
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
Error: ErrorSchema | null
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### Error Schema
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Code: string # From Error Taxonomy (Section 11)
|
|
138
|
+
Message: string
|
|
139
|
+
Request_Type: string
|
|
140
|
+
Recoverable: boolean
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Deterministic Guarantees
|
|
144
|
+
|
|
145
|
+
- Tool selection is fixed: video/audio tasks → FFmpeg; image tasks → ImageMagick; bg removal → RMBG.
|
|
146
|
+
- CRF values are fixed: lossless = 18, recommended = 22, smaller = 28.
|
|
147
|
+
- JPEG quality is fixed: 85 (default).
|
|
148
|
+
- RMBG model selection is fixed: quality → briaai, speed → u2netp, balanced → modnet.
|
|
149
|
+
- MP4 output always includes `-movflags +faststart`.
|
|
150
|
+
- mogrify commands always flagged as destructive with backup warning.
|
|
151
|
+
- `-strip` always included for JPEG compression (removes EXIF).
|
|
152
|
+
|
|
153
|
+
#### What Agents May Assume
|
|
154
|
+
|
|
155
|
+
- Tool selection maps to task type deterministically.
|
|
156
|
+
- CRF/quality values produce consistent visual results.
|
|
157
|
+
- Commands are syntactically correct for current tool versions.
|
|
158
|
+
- Destructive operations are always flagged.
|
|
159
|
+
|
|
160
|
+
#### What Agents Must NOT Assume
|
|
161
|
+
|
|
162
|
+
- FFmpeg, ImageMagick, or RMBG is installed.
|
|
163
|
+
- Commands execute successfully (depends on input file).
|
|
164
|
+
- CRF values produce identical file sizes across inputs.
|
|
165
|
+
- RMBG models handle all image types equally.
|
|
166
|
+
|
|
167
|
+
#### Side-Effect Boundaries
|
|
168
|
+
|
|
169
|
+
| Operation | Side Effects |
|
|
170
|
+
|-----------|-------------|
|
|
171
|
+
| Tool select | None; recommendation |
|
|
172
|
+
| Command gen | None; command template |
|
|
173
|
+
| Quality guide | None; parameter recommendation |
|
|
174
|
+
| Model select | None; model recommendation |
|
|
175
|
+
|
|
176
|
+
### 6.2 Workflow Contract
|
|
177
|
+
|
|
178
|
+
#### Invocation Pattern
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
1. Identify media task (encode, resize, bg-remove, etc.)
|
|
182
|
+
2. Invoke tool-select to determine tool
|
|
183
|
+
3. Invoke command-gen with task + parameters
|
|
184
|
+
4. Review generated command (check destructive flag)
|
|
185
|
+
5. Execute command (caller's responsibility)
|
|
186
|
+
6. Verify output (caller's responsibility)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### Execution Guarantees
|
|
190
|
+
|
|
191
|
+
- Each invocation produces a complete command or recommendation.
|
|
192
|
+
- Destructive commands are always flagged.
|
|
193
|
+
|
|
194
|
+
#### Failure Propagation Model
|
|
195
|
+
|
|
196
|
+
| Failure Severity | Propagation | Workflow Action |
|
|
197
|
+
|-----------------|-------------|-----------------|
|
|
198
|
+
| Unknown task type | Return error | Use supported task |
|
|
199
|
+
| Missing format | Return error | Supply format |
|
|
200
|
+
| Unknown RMBG priority | Default to "balanced" | Transparent |
|
|
201
|
+
| Unsupported conversion | Return error | Use supported format pair |
|
|
202
|
+
|
|
203
|
+
#### Retry Boundaries
|
|
204
|
+
|
|
205
|
+
- Zero internal retries. Deterministic output.
|
|
206
|
+
|
|
207
|
+
#### Isolation Model
|
|
208
|
+
|
|
209
|
+
- Each invocation is stateless and independent.
|
|
210
|
+
|
|
211
|
+
#### Idempotency Expectations
|
|
212
|
+
|
|
213
|
+
| Operation | Idempotent | Notes |
|
|
214
|
+
|-----------|-----------|-------|
|
|
215
|
+
| Tool select | Yes | Same task = same tool |
|
|
216
|
+
| Command gen | Yes | Same context = same command |
|
|
217
|
+
| Quality guide | Yes | Same quality tier = same value |
|
|
218
|
+
| Model select | Yes | Same priority = same model |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 7. Execution Model
|
|
223
|
+
|
|
224
|
+
### 2-Phase Lifecycle
|
|
225
|
+
|
|
226
|
+
| Phase | Action | Output |
|
|
227
|
+
|-------|--------|--------|
|
|
228
|
+
| **Classify** | Validate task, determine tool, check destructive | Classification |
|
|
229
|
+
| **Generate** | Produce command template or recommendation | Complete output |
|
|
230
|
+
|
|
231
|
+
All phases synchronous. No async pipeline.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 8. Deterministic Design Principles
|
|
236
|
+
|
|
237
|
+
| Principle | Enforcement |
|
|
238
|
+
|-----------|-------------|
|
|
239
|
+
| Fixed tool routing | video/audio → FFmpeg, image → ImageMagick, bg → RMBG |
|
|
240
|
+
| Fixed CRF values | 18 (lossless), 22 (recommended), 28 (smaller) |
|
|
241
|
+
| Fixed JPEG quality | 85 default |
|
|
242
|
+
| Fixed RMBG models | briaai (highest/slow), u2netp (good/fast), modnet (balanced/medium) |
|
|
243
|
+
| Web-optimized MP4 | `-movflags +faststart` always |
|
|
244
|
+
| Destructive warning | mogrify always flagged |
|
|
245
|
+
| EXIF stripping | `-strip` always for JPEG compression |
|
|
246
|
+
| No execution | Command output only; caller executes |
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 9. State & Idempotency Model
|
|
251
|
+
|
|
252
|
+
Stateless. Fully idempotent. No persistent state.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 10. Failure Handling Strategy
|
|
257
|
+
|
|
258
|
+
| Failure Class | Behavior | Caller Recovery |
|
|
259
|
+
|---------------|----------|-----------------|
|
|
260
|
+
| Unknown task type | Return `ERR_UNKNOWN_TASK` | Use supported task |
|
|
261
|
+
| Missing input format | Return `ERR_MISSING_FORMAT` | Supply format |
|
|
262
|
+
| Unsupported format pair | Return `ERR_UNSUPPORTED_FORMAT` | Use supported conversion |
|
|
263
|
+
| Tool not installed (caller) | Not this skill's error | Install tool |
|
|
264
|
+
|
|
265
|
+
**Invariant:** Every failure returns a structured error. No partial commands.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## 11. Error Taxonomy
|
|
270
|
+
|
|
271
|
+
| Code | Category | Recoverable | Description |
|
|
272
|
+
|------|----------|-------------|-------------|
|
|
273
|
+
| `ERR_UNKNOWN_TASK` | Validation | No | Task type not supported |
|
|
274
|
+
| `ERR_MISSING_FORMAT` | Validation | Yes | Input or output format not provided |
|
|
275
|
+
| `ERR_UNSUPPORTED_FORMAT` | Validation | No | Format pair not supported |
|
|
276
|
+
| `ERR_INVALID_QUALITY` | Validation | Yes | Quality tier not recognized |
|
|
277
|
+
| `WARN_DESTRUCTIVE` | Advisory | Yes | Command modifies files in-place |
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 12. Timeout & Retry Policy
|
|
282
|
+
|
|
283
|
+
| Parameter | Default | Maximum | Rationale |
|
|
284
|
+
|-----------|---------|---------|-----------|
|
|
285
|
+
| Command generation | N/A | N/A | Synchronous; < 50ms |
|
|
286
|
+
| Internal retries | Zero | Zero | Deterministic output |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 13. Observability & Logging Schema
|
|
291
|
+
|
|
292
|
+
### Log Entry Format
|
|
293
|
+
|
|
294
|
+
```json
|
|
295
|
+
{
|
|
296
|
+
"trace_id": "uuid",
|
|
297
|
+
"skill_name": "media-processing",
|
|
298
|
+
"contract_version": "2.0.0",
|
|
299
|
+
"execution_id": "uuid",
|
|
300
|
+
"timestamp": "ISO-8601",
|
|
301
|
+
"request_type": "string",
|
|
302
|
+
"task": "string",
|
|
303
|
+
"tool_selected": "string|null",
|
|
304
|
+
"destructive": "boolean",
|
|
305
|
+
"quality_parameter": "string|null",
|
|
306
|
+
"quality_value": "string|number|null",
|
|
307
|
+
"status": "success|error",
|
|
308
|
+
"error_code": "string|null",
|
|
309
|
+
"duration_ms": "number"
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Required Log Points
|
|
314
|
+
|
|
315
|
+
| Event | Log Level | Fields |
|
|
316
|
+
|-------|-----------|--------|
|
|
317
|
+
| Tool selected | INFO | task, tool_selected |
|
|
318
|
+
| Command generated | INFO | task, tool_selected, destructive |
|
|
319
|
+
| Destructive warning | WARN | command_template |
|
|
320
|
+
| Quality recommendation | INFO | quality_parameter, quality_value |
|
|
321
|
+
| Decision failed | ERROR | error_code, message |
|
|
322
|
+
|
|
323
|
+
### Metrics
|
|
324
|
+
|
|
325
|
+
| Metric | Type | Unit |
|
|
326
|
+
|--------|------|------|
|
|
327
|
+
| `mediaproc.decision.duration` | Histogram | ms |
|
|
328
|
+
| `mediaproc.tool.distribution` | Counter | per tool |
|
|
329
|
+
| `mediaproc.task.distribution` | Counter | per task |
|
|
330
|
+
| `mediaproc.destructive.count` | Counter | per invocation |
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 14. Security & Trust Model
|
|
335
|
+
|
|
336
|
+
### Data Handling
|
|
337
|
+
|
|
338
|
+
- Media Processing does not access file contents.
|
|
339
|
+
- No credentials, tokens, or PII handled.
|
|
340
|
+
- Generated commands may reference user-supplied file paths.
|
|
341
|
+
- File path sanitization is caller's responsibility.
|
|
342
|
+
|
|
343
|
+
### Destructive Operation Safety
|
|
344
|
+
|
|
345
|
+
| Rule | Enforcement |
|
|
346
|
+
|------|-------------|
|
|
347
|
+
| mogrify always flagged | `destructive: true` + warning |
|
|
348
|
+
| Backup recommended | Warning message in output |
|
|
349
|
+
| Test before batch | Guidance to test on single file |
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 15. Scalability Model
|
|
354
|
+
|
|
355
|
+
| Dimension | Constraint | Mitigation |
|
|
356
|
+
|-----------|-----------|------------|
|
|
357
|
+
| Throughput | CPU-bound command generation | < 50ms; scales linearly |
|
|
358
|
+
| Concurrency | Stateless invocations | Unlimited parallel |
|
|
359
|
+
| Memory per invocation | < 1 MB | No accumulation |
|
|
360
|
+
| Network | Zero network calls | No external dependency |
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 16. Concurrency Model
|
|
365
|
+
|
|
366
|
+
Fully parallel. No shared state. No coordination required.
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## 17. Resource Lifecycle Management
|
|
371
|
+
|
|
372
|
+
All resources scoped to invocation. No persistent handles.
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## 18. Performance Constraints
|
|
377
|
+
|
|
378
|
+
| Operation | P50 Target | P99 Target | Hard Limit |
|
|
379
|
+
|-----------|-----------|-----------|------------|
|
|
380
|
+
| Tool selection | < 1 ms | < 5 ms | 20 ms |
|
|
381
|
+
| Command generation | < 3 ms | < 10 ms | 30 ms |
|
|
382
|
+
| Full pipeline (select + gen) | < 5 ms | < 15 ms | 50 ms |
|
|
383
|
+
| Output size | ≤ 500 chars | ≤ 1,500 chars | 3,000 chars |
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## 19. Operational Risks
|
|
388
|
+
|
|
389
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
390
|
+
|------|-----------|--------|------------|
|
|
391
|
+
| Tool version mismatch | Medium | Command syntax may differ | Document supported versions |
|
|
392
|
+
| mogrify data loss | High if unflagged | Permanent file destruction | Always flag destructive |
|
|
393
|
+
| Wrong CRF for content type | Low | Suboptimal quality/size | CRF guide with descriptions |
|
|
394
|
+
| RMBG model deprecated | Low | Model unavailable | Track model availability |
|
|
395
|
+
| ImageMagick policy restrictions | Medium | Operations blocked | Document policy.xml fix |
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## 20. Compliance with skill-design-guide.md
|
|
400
|
+
|
|
401
|
+
| Requirement | Status | Evidence |
|
|
402
|
+
|-------------|--------|----------|
|
|
403
|
+
| YAML frontmatter complete | ✅ | name, description, metadata with category, version, triggers, coordinates_with, success_metrics |
|
|
404
|
+
| SKILL.md < 200 lines | ✅ | Entry point under 200 lines |
|
|
405
|
+
| Prerequisites documented | ✅ | ffmpeg, imagemagick, rmbg-cli installation |
|
|
406
|
+
| When to Use section | ✅ | Task-based routing table |
|
|
407
|
+
| Core content matches skill type | ✅ | Expert type: decision trees, command templates |
|
|
408
|
+
| Troubleshooting section | ✅ | Anti-patterns table |
|
|
409
|
+
| Related section | ✅ | Cross-links to perf-optimizer, studio |
|
|
410
|
+
| Content Map for multi-file | ✅ | Link to engineering-spec.md |
|
|
411
|
+
| Contract versioning | ✅ | contract_version, backward_compatibility, breaking_changes |
|
|
412
|
+
| Compliance matrix structured | ✅ | This table with ✅/❌ + evidence |
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## 21. Production Readiness Checklist
|
|
417
|
+
|
|
418
|
+
| Category | Check | Status |
|
|
419
|
+
|----------|-------|--------|
|
|
420
|
+
| **Functionality** | 3-tool routing (FFmpeg, ImageMagick, RMBG) | ✅ |
|
|
421
|
+
| **Functionality** | CRF quality guide (18/22/28) | ✅ |
|
|
422
|
+
| **Functionality** | RMBG model selection (3 models) | ✅ |
|
|
423
|
+
| **Functionality** | Destructive operation warnings | ✅ |
|
|
424
|
+
| **Functionality** | Web-optimized MP4 (-movflags +faststart) | ✅ |
|
|
425
|
+
| **Contracts** | Input/output/error schemas in pseudo-schema format | ✅ |
|
|
426
|
+
| **Contracts** | Contract versioning with semver | ✅ |
|
|
427
|
+
| **Failure** | Error taxonomy with 5 categorized codes | ✅ |
|
|
428
|
+
| **Failure** | No partial commands on error | ✅ |
|
|
429
|
+
| **Failure** | Zero internal retries | ✅ |
|
|
430
|
+
| **Determinism** | Fixed tool routing, fixed CRF, fixed models | ✅ |
|
|
431
|
+
| **Security** | No file access, no credentials | ✅ |
|
|
432
|
+
| **Observability** | Structured log schema with 5 mandatory fields | ✅ |
|
|
433
|
+
| **Observability** | 4 metrics defined | ✅ |
|
|
434
|
+
| **Performance** | P50/P99 targets for all operations | ✅ |
|
|
435
|
+
| **Scalability** | Stateless; unlimited parallel | ✅ |
|
|
436
|
+
| **Compliance** | All skill-design-guide.md sections mapped with evidence | ✅ |
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## 🔗 Related
|
|
441
|
+
|
|
442
|
+
| File | When to Read |
|
|
443
|
+
|------|-------------|
|
|
444
|
+
| [../SKILL.md](../SKILL.md) | Quick reference, CRF guide, RMBG models |
|
|
445
|
+
| [../scripts/convert-video.ts](../scripts/convert-video.ts) | FFmpeg video converter script |
|
|
446
|
+
| [../scripts/optimize-image.ts](../scripts/optimize-image.ts) | ImageMagick image optimizer script |
|
|
447
|
+
| `perf-optimizer` | Performance profiling |
|
|
448
|
+
| `studio` | Design assets |
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/**
|
|
4
|
+
* Video Converter — FFmpeg CLI wrapper
|
|
5
|
+
*
|
|
6
|
+
* Convert and optimize videos for web delivery.
|
|
7
|
+
* Supports encoding, audio extraction, thumbnails, and GIF generation.
|
|
8
|
+
*
|
|
9
|
+
* @version 2.0.0
|
|
10
|
+
* @contract media-processing v2.0.0
|
|
11
|
+
* @see references/engineering-spec.md
|
|
12
|
+
*
|
|
13
|
+
* CRF Guide (fixed):
|
|
14
|
+
* 18 = Visually lossless (archival)
|
|
15
|
+
* 22 = Recommended balance (default)
|
|
16
|
+
* 28 = Smaller file (web previews)
|
|
17
|
+
*
|
|
18
|
+
* Read-only: does not modify input files.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { execSync } from 'node:child_process';
|
|
22
|
+
import path from 'node:path';
|
|
23
|
+
|
|
24
|
+
// Parse arguments
|
|
25
|
+
const args = process.argv.slice(2);
|
|
26
|
+
const getArg = (name) => {
|
|
27
|
+
const idx = args.indexOf(`--${name}`);
|
|
28
|
+
return idx !== -1 ? args[idx + 1] : null;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const input = getArg('input');
|
|
32
|
+
const output = getArg('output');
|
|
33
|
+
const crf = getArg('crf') || '22';
|
|
34
|
+
const preset = getArg('preset') || 'medium';
|
|
35
|
+
const mode = getArg('mode') || 'encode';
|
|
36
|
+
|
|
37
|
+
// Help
|
|
38
|
+
if (args.includes('--help') || !input) {
|
|
39
|
+
console.log(`
|
|
40
|
+
Video Converter — FFmpeg CLI wrapper (v2.0.0)
|
|
41
|
+
|
|
42
|
+
Usage:
|
|
43
|
+
node convert-video.js --input <file> [options]
|
|
44
|
+
|
|
45
|
+
Options:
|
|
46
|
+
--input Input video file (required)
|
|
47
|
+
--output Output file (default: input_web.mp4)
|
|
48
|
+
--mode Operation mode: encode | audio | thumbnail | gif (default: encode)
|
|
49
|
+
--crf Quality 0-51, lower=better (default: 22)
|
|
50
|
+
--preset Encoding speed: ultrafast/fast/medium/slow (default: medium)
|
|
51
|
+
--help Show this help
|
|
52
|
+
|
|
53
|
+
CRF Guide:
|
|
54
|
+
18 = Visually lossless (large file)
|
|
55
|
+
22 = Recommended balance
|
|
56
|
+
28 = Smaller file, lower quality
|
|
57
|
+
|
|
58
|
+
Examples:
|
|
59
|
+
node convert-video.js --input raw.mov
|
|
60
|
+
node convert-video.js --input raw.mov --crf 18 --preset slow
|
|
61
|
+
node convert-video.js --input video.mp4 --mode audio
|
|
62
|
+
node convert-video.js --input video.mp4 --mode thumbnail
|
|
63
|
+
node convert-video.js --input video.mp4 --mode gif
|
|
64
|
+
`);
|
|
65
|
+
process.exit(0);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Check FFmpeg
|
|
69
|
+
try {
|
|
70
|
+
execSync('ffmpeg -version', { stdio: 'ignore' });
|
|
71
|
+
} catch {
|
|
72
|
+
console.error(JSON.stringify({
|
|
73
|
+
success: false,
|
|
74
|
+
error: { code: 'ERR_TOOL_MISSING', message: 'FFmpeg not found. Install: brew install ffmpeg | choco install ffmpeg | apt install ffmpeg' }
|
|
75
|
+
}));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Default output name
|
|
80
|
+
const ext = path.extname(input);
|
|
81
|
+
const base = path.basename(input, ext);
|
|
82
|
+
|
|
83
|
+
/** Build FFmpeg command based on mode. */
|
|
84
|
+
function buildCommand() {
|
|
85
|
+
switch (mode) {
|
|
86
|
+
case 'encode': {
|
|
87
|
+
const out = output || `${base}_web.mp4`;
|
|
88
|
+
return {
|
|
89
|
+
cmd: `ffmpeg -i "${input}" -c:v libx264 -crf ${crf} -preset ${preset} -c:a aac -movflags +faststart -y "${out}"`,
|
|
90
|
+
outputFile: out,
|
|
91
|
+
description: `Encode with CRF ${crf}, preset ${preset}`
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
case 'audio': {
|
|
95
|
+
const out = output || `${base}.m4a`;
|
|
96
|
+
return {
|
|
97
|
+
cmd: `ffmpeg -i "${input}" -vn -c:a copy -y "${out}"`,
|
|
98
|
+
outputFile: out,
|
|
99
|
+
description: 'Extract audio (copy codec)'
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
case 'thumbnail': {
|
|
103
|
+
const timestamp = getArg('timestamp') || '00:00:05';
|
|
104
|
+
const out = output || `${base}_thumb.jpg`;
|
|
105
|
+
return {
|
|
106
|
+
cmd: `ffmpeg -i "${input}" -ss ${timestamp} -vframes 1 -y "${out}"`,
|
|
107
|
+
outputFile: out,
|
|
108
|
+
description: `Thumbnail at ${timestamp}`
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
case 'gif': {
|
|
112
|
+
const fps = getArg('fps') || '10';
|
|
113
|
+
const width = getArg('width') || '480';
|
|
114
|
+
const out = output || `${base}.gif`;
|
|
115
|
+
return {
|
|
116
|
+
cmd: `ffmpeg -i "${input}" -vf "fps=${fps},scale=${width}:-1:flags=lanczos" -y "${out}"`,
|
|
117
|
+
outputFile: out,
|
|
118
|
+
description: `GIF at ${fps}fps, ${width}px wide`
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
default:
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const result = buildCommand();
|
|
127
|
+
|
|
128
|
+
if (!result) {
|
|
129
|
+
console.error(JSON.stringify({
|
|
130
|
+
success: false,
|
|
131
|
+
error: { code: 'ERR_UNKNOWN_MODE', message: `Unknown mode: ${mode}. Use: encode, audio, thumbnail, gif` }
|
|
132
|
+
}));
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
console.log(`🔄 ${result.description}: ${input}`);
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
execSync(result.cmd, { stdio: 'inherit' });
|
|
140
|
+
console.log(JSON.stringify({
|
|
141
|
+
success: true,
|
|
142
|
+
version: '2.0.0',
|
|
143
|
+
tool: 'ffmpeg',
|
|
144
|
+
mode,
|
|
145
|
+
input,
|
|
146
|
+
output: result.outputFile,
|
|
147
|
+
params: { crf: mode === 'encode' ? crf : undefined, preset: mode === 'encode' ? preset : undefined }
|
|
148
|
+
}));
|
|
149
|
+
} catch (err) {
|
|
150
|
+
console.error(JSON.stringify({
|
|
151
|
+
success: false,
|
|
152
|
+
error: { code: 'ERR_FFMPEG', message: err.message }
|
|
153
|
+
}));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|