@heyai-rules/pilo-masterkit 2.1.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/agents/PILO_MASTER.md +77 -77
- package/.agent/agents/architect.md +211 -211
- package/.agent/agents/backend-specialist.md +263 -263
- package/.agent/agents/build-error-resolver.md +114 -114
- package/.agent/agents/chief-of-staff.md +151 -151
- package/.agent/agents/code-archaeologist.md +106 -106
- package/.agent/agents/code-reviewer.md +237 -237
- package/.agent/agents/cpp-build-resolver.md +90 -90
- package/.agent/agents/cpp-reviewer.md +72 -72
- package/.agent/agents/csharp-reviewer.md +101 -101
- package/.agent/agents/dart-build-resolver.md +201 -201
- package/.agent/agents/database-architect.md +226 -226
- package/.agent/agents/database-reviewer.md +91 -91
- package/.agent/agents/debugger.md +225 -225
- package/.agent/agents/devops-engineer.md +242 -242
- package/.agent/agents/doc-updater.md +107 -107
- package/.agent/agents/docs-lookup.md +68 -68
- package/.agent/agents/documentation-writer.md +104 -104
- package/.agent/agents/e2e-runner.md +107 -107
- package/.agent/agents/explorer-agent.md +73 -73
- package/.agent/agents/flutter-reviewer.md +243 -243
- package/.agent/agents/frontend-specialist.md +593 -593
- package/.agent/agents/game-developer.md +162 -162
- package/.agent/agents/gan-evaluator.md +209 -209
- package/.agent/agents/gan-generator.md +131 -131
- package/.agent/agents/gan-planner.md +99 -99
- package/.agent/agents/go-build-resolver.md +94 -94
- package/.agent/agents/go-reviewer.md +76 -76
- package/.agent/agents/harness-optimizer.md +35 -35
- package/.agent/agents/healthcare-reviewer.md +83 -83
- package/.agent/agents/java-build-resolver.md +153 -153
- package/.agent/agents/java-reviewer.md +92 -92
- package/.agent/agents/kotlin-build-resolver.md +118 -118
- package/.agent/agents/kotlin-reviewer.md +159 -159
- package/.agent/agents/loop-operator.md +36 -36
- package/.agent/agents/mobile-developer.md +377 -377
- package/.agent/agents/opensource-forker.md +198 -198
- package/.agent/agents/opensource-packager.md +249 -249
- package/.agent/agents/opensource-sanitizer.md +188 -188
- package/.agent/agents/orchestrator.md +416 -416
- package/.agent/agents/penetration-tester.md +188 -188
- package/.agent/agents/performance-optimizer.md +446 -446
- package/.agent/agents/personas/athena-agent/agent.json +10 -10
- package/.agent/agents/personas/athena-agent/athena-backend-logic-architecture-profile.md +3 -3
- package/.agent/agents/personas/athena-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/athena-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/athena-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/athena-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/athena-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/athena-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/agent.json +10 -10
- package/.agent/agents/personas/da-vinci-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/da-vinci-frontend-ui-ux-design-profile.md +3 -3
- package/.agent/agents/personas/da-vinci-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/agent.json +10 -10
- package/.agent/agents/personas/duong-tang-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/tang-monk-quality-testing-documentation-profile.md +3 -3
- package/.agent/agents/personas/duong-tang-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/agent.json +10 -10
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/kongming-research-strategy-analysis-profile.md +3 -3
- package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/mihata-agent/agent.json +10 -10
- package/.agent/agents/personas/mihata-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/mihata-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/mihata-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/mihata-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/mihata-agent/mihata-multi-agent-orchestration-profile.md +3 -3
- package/.agent/agents/personas/mihata-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/mihata-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/tesla-agent/agent.json +10 -10
- package/.agent/agents/personas/tesla-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/tesla-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/tesla-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/tesla-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/tesla-agent/tesla-fullstack-system-optimization-profile.md +3 -3
- package/.agent/agents/personas/tesla-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/tesla-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/agent.json +10 -10
- package/.agent/agents/personas/tu-ma-y-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/simayi-feasibility-risk-control-profile.md +3 -3
- package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/venti-agent/agent.json +10 -10
- package/.agent/agents/personas/venti-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/venti-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/venti-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/venti-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/venti-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/venti-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/venti-agent/venti-learning-communication-mentoring-profile.md +3 -3
- package/.agent/agents/planner.md +212 -212
- package/.agent/agents/product-manager.md +112 -112
- package/.agent/agents/product-owner.md +95 -95
- package/.agent/agents/project-planner.md +406 -406
- package/.agent/agents/python-reviewer.md +98 -98
- package/.agent/agents/pytorch-build-resolver.md +120 -120
- package/.agent/agents/qa-automation-engineer.md +103 -103
- package/.agent/agents/refactor-cleaner.md +85 -85
- package/.agent/agents/rust-build-resolver.md +148 -148
- package/.agent/agents/rust-reviewer.md +94 -94
- package/.agent/agents/security-auditor.md +170 -170
- package/.agent/agents/security-reviewer.md +108 -108
- package/.agent/agents/seo-specialist.md +111 -111
- package/.agent/agents/tdd-guide.md +91 -91
- package/.agent/agents/test-engineer.md +158 -158
- package/.agent/agents/typescript-reviewer.md +112 -112
- package/.agent/contexts/dev.md +20 -20
- package/.agent/contexts/research.md +26 -26
- package/.agent/contexts/review.md +22 -22
- package/.agent/hooks/hooks.json +395 -395
- package/.agent/hooks/readme.md +222 -222
- package/.agent/mcp-configs/mcp-servers.json +181 -181
- package/.agent/rules/ARCHITECTURAL_BLUEPRINTS.md +62 -62
- package/.agent/rules/CODE_CRAFTSMANSHIP.md +69 -69
- package/.agent/rules/CORE_RULES.md +72 -72
- package/.agent/rules/PROJECT_MAP.md +58 -58
- package/.agent/rules/QUALITY_ASSURANCE.md +54 -54
- package/.agent/rules/SECURITY_ARMOR.md +44 -44
- package/.agent/rules/VERSION_ORCHESTRATION.md +64 -64
- package/.agent/rules/WORKFLOW_ORCHESTRATION.md +55 -55
- package/.agent/rules/common/agents.md +50 -50
- package/.agent/rules/common/code-review.md +124 -124
- package/.agent/rules/common/coding-style.md +48 -48
- package/.agent/rules/common/development-workflow.md +44 -44
- package/.agent/rules/common/git-workflow.md +24 -24
- package/.agent/rules/common/hooks.md +30 -30
- package/.agent/rules/common/patterns.md +31 -31
- package/.agent/rules/common/performance.md +55 -55
- package/.agent/rules/common/security.md +29 -29
- package/.agent/rules/common/testing.md +29 -29
- package/.agent/rules/cpp/coding-style.md +44 -44
- package/.agent/rules/cpp/hooks.md +39 -39
- package/.agent/rules/cpp/patterns.md +51 -51
- package/.agent/rules/cpp/security.md +51 -51
- package/.agent/rules/cpp/testing.md +44 -44
- package/.agent/rules/csharp/coding-style.md +72 -72
- package/.agent/rules/csharp/hooks.md +25 -25
- package/.agent/rules/csharp/patterns.md +50 -50
- package/.agent/rules/csharp/security.md +58 -58
- package/.agent/rules/csharp/testing.md +46 -46
- package/.agent/rules/dart/coding-style.md +159 -159
- package/.agent/rules/dart/hooks.md +66 -66
- package/.agent/rules/dart/patterns.md +261 -261
- package/.agent/rules/dart/security.md +135 -135
- package/.agent/rules/dart/testing.md +215 -215
- package/.agent/rules/golang/coding-style.md +32 -32
- package/.agent/rules/golang/hooks.md +17 -17
- package/.agent/rules/golang/patterns.md +45 -45
- package/.agent/rules/golang/security.md +34 -34
- package/.agent/rules/golang/testing.md +31 -31
- package/.agent/rules/java/coding-style.md +114 -114
- package/.agent/rules/java/hooks.md +18 -18
- package/.agent/rules/java/patterns.md +146 -146
- package/.agent/rules/java/security.md +100 -100
- package/.agent/rules/java/testing.md +131 -131
- package/.agent/rules/kotlin/coding-style.md +86 -86
- package/.agent/rules/kotlin/hooks.md +17 -17
- package/.agent/rules/kotlin/patterns.md +146 -146
- package/.agent/rules/kotlin/security.md +82 -82
- package/.agent/rules/kotlin/testing.md +128 -128
- package/.agent/rules/perl/coding-style.md +46 -46
- package/.agent/rules/perl/hooks.md +22 -22
- package/.agent/rules/perl/patterns.md +76 -76
- package/.agent/rules/perl/security.md +69 -69
- package/.agent/rules/perl/testing.md +54 -54
- package/.agent/rules/php/coding-style.md +40 -40
- package/.agent/rules/php/hooks.md +24 -24
- package/.agent/rules/php/patterns.md +33 -33
- package/.agent/rules/php/security.md +37 -37
- package/.agent/rules/php/testing.md +39 -39
- package/.agent/rules/python/coding-style.md +42 -42
- package/.agent/rules/python/hooks.md +19 -19
- package/.agent/rules/python/patterns.md +39 -39
- package/.agent/rules/python/security.md +30 -30
- package/.agent/rules/python/testing.md +38 -38
- package/.agent/rules/readme.md +111 -111
- package/.agent/rules/rust/coding-style.md +151 -151
- package/.agent/rules/rust/hooks.md +16 -16
- package/.agent/rules/rust/patterns.md +168 -168
- package/.agent/rules/rust/security.md +141 -141
- package/.agent/rules/rust/testing.md +154 -154
- package/.agent/rules/swift/coding-style.md +47 -47
- package/.agent/rules/swift/hooks.md +20 -20
- package/.agent/rules/swift/patterns.md +66 -66
- package/.agent/rules/swift/security.md +33 -33
- package/.agent/rules/swift/testing.md +45 -45
- package/.agent/rules/typescript/coding-style.md +199 -199
- package/.agent/rules/typescript/hooks.md +22 -22
- package/.agent/rules/typescript/patterns.md +52 -52
- package/.agent/rules/typescript/security.md +28 -28
- package/.agent/rules/typescript/testing.md +18 -18
- package/.agent/rules/web/coding-style.md +96 -96
- package/.agent/rules/web/design-quality.md +63 -63
- package/.agent/rules/web/hooks.md +120 -120
- package/.agent/rules/web/patterns.md +79 -79
- package/.agent/rules/web/performance.md +64 -64
- package/.agent/rules/web/security.md +57 -57
- package/.agent/rules/web/testing.md +55 -55
- package/.agent/rules/zh/agents.md +50 -50
- package/.agent/rules/zh/code-review.md +124 -124
- package/.agent/rules/zh/coding-style.md +48 -48
- package/.agent/rules/zh/development-workflow.md +44 -44
- package/.agent/rules/zh/git-workflow.md +24 -24
- package/.agent/rules/zh/hooks.md +30 -30
- package/.agent/rules/zh/patterns.md +31 -31
- package/.agent/rules/zh/performance.md +55 -55
- package/.agent/rules/zh/readme.md +108 -108
- package/.agent/rules/zh/security.md +29 -29
- package/.agent/rules/zh/testing.md +29 -29
- package/.agent/scripts/auto_preview.py +148 -148
- package/.agent/scripts/checklist.py +217 -217
- package/.agent/scripts/session_manager.py +120 -120
- package/.agent/scripts/verify_all.py +327 -327
- package/.agent/skills/agent-eval/SKILL.md +145 -145
- package/.agent/skills/agent-harness-construction/SKILL.md +73 -73
- package/.agent/skills/agent-payment-x402/SKILL.md +178 -178
- package/.agent/skills/agentic-engineering/SKILL.md +63 -63
- package/.agent/skills/ai-first-engineering/SKILL.md +51 -51
- package/.agent/skills/ai-regression-testing/SKILL.md +385 -385
- package/.agent/skills/android-clean-architecture/SKILL.md +339 -339
- package/.agent/skills/api-design/SKILL.md +523 -523
- package/.agent/skills/api-patterns/SKILL.md +81 -81
- package/.agent/skills/api-patterns/api-style.md +42 -42
- package/.agent/skills/api-patterns/auth.md +24 -24
- package/.agent/skills/api-patterns/documentation.md +26 -26
- package/.agent/skills/api-patterns/graphql.md +41 -41
- package/.agent/skills/api-patterns/rate-limiting.md +31 -31
- package/.agent/skills/api-patterns/response.md +37 -37
- package/.agent/skills/api-patterns/rest.md +40 -40
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -211
- package/.agent/skills/api-patterns/security-testing.md +122 -122
- package/.agent/skills/api-patterns/trpc.md +41 -41
- package/.agent/skills/api-patterns/versioning.md +22 -22
- package/.agent/skills/app-builder/SKILL.md +75 -75
- package/.agent/skills/app-builder/agent-coordination.md +71 -71
- package/.agent/skills/app-builder/feature-building.md +53 -53
- package/.agent/skills/app-builder/project-detection.md +34 -34
- package/.agent/skills/app-builder/scaffolding.md +118 -118
- package/.agent/skills/app-builder/tech-stack.md +41 -41
- package/.agent/skills/app-builder/templates/SKILL.md +39 -39
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -119
- package/.agent/skills/architecture/SKILL.md +55 -55
- package/.agent/skills/architecture/context-discovery.md +43 -43
- package/.agent/skills/architecture/examples.md +94 -94
- package/.agent/skills/architecture/pattern-selection.md +68 -68
- package/.agent/skills/architecture/patterns-reference.md +50 -50
- package/.agent/skills/architecture/trade-off-analysis.md +77 -77
- package/.agent/skills/architecture-decision-records/SKILL.md +179 -179
- package/.agent/skills/article-writing/SKILL.md +79 -79
- package/.agent/skills/autonomous-agent-harness/SKILL.md +267 -267
- package/.agent/skills/autonomous-loops/SKILL.md +610 -610
- package/.agent/skills/backend-patterns/SKILL.md +598 -598
- package/.agent/skills/bash-linux/SKILL.md +199 -199
- package/.agent/skills/behavioral-modes/SKILL.md +242 -242
- package/.agent/skills/benchmark/SKILL.md +93 -93
- package/.agent/skills/blueprint/SKILL.md +105 -105
- package/.agent/skills/brainstorming/SKILL.md +163 -163
- package/.agent/skills/brainstorming/dynamic-questioning.md +350 -350
- package/.agent/skills/brand-voice/SKILL.md +97 -97
- package/.agent/skills/brand-voice/references/voice-profile-schema.md +55 -55
- package/.agent/skills/browser-qa/SKILL.md +87 -87
- package/.agent/skills/bun-runtime/SKILL.md +84 -84
- package/.agent/skills/canary-watch/SKILL.md +99 -99
- package/.agent/skills/carrier-relationship-management/SKILL.md +212 -212
- package/.agent/skills/ck/SKILL.md +147 -147
- package/.agent/skills/ck/commands/forget.mjs +44 -44
- package/.agent/skills/ck/commands/info.mjs +24 -24
- package/.agent/skills/ck/commands/init.mjs +143 -143
- package/.agent/skills/ck/commands/list.mjs +40 -40
- package/.agent/skills/ck/commands/migrate.mjs +202 -202
- package/.agent/skills/ck/commands/resume.mjs +36 -36
- package/.agent/skills/ck/commands/save.mjs +210 -210
- package/.agent/skills/ck/commands/shared.mjs +387 -387
- package/.agent/skills/ck/hooks/session-start.mjs +224 -224
- package/.agent/skills/claude-api/SKILL.md +337 -337
- package/.agent/skills/claude-devfleet/SKILL.md +103 -103
- package/.agent/skills/clean-code/SKILL.md +201 -201
- package/.agent/skills/click-path-audit/SKILL.md +244 -244
- package/.agent/skills/clickhouse-io/SKILL.md +439 -439
- package/.agent/skills/code-review-checklist/SKILL.md +109 -109
- package/.agent/skills/codebase-onboarding/SKILL.md +233 -233
- package/.agent/skills/coding-standards/SKILL.md +530 -530
- package/.agent/skills/compose-multiplatform-patterns/SKILL.md +299 -299
- package/.agent/skills/configure-ecc/SKILL.md +367 -367
- package/.agent/skills/connections-optimizer/SKILL.md +189 -189
- package/.agent/skills/content-engine/SKILL.md +131 -131
- package/.agent/skills/content-hash-cache-pattern/SKILL.md +161 -161
- package/.agent/skills/context-budget/SKILL.md +135 -135
- package/.agent/skills/continuous-agent-loop/SKILL.md +45 -45
- package/.agent/skills/continuous-learning/SKILL.md +119 -119
- package/.agent/skills/continuous-learning/config.json +18 -18
- package/.agent/skills/continuous-learning/evaluate-session.sh +69 -69
- package/.agent/skills/continuous-learning-v2/SKILL.md +365 -365
- package/.agent/skills/continuous-learning-v2/agents/observer-loop.sh +271 -271
- package/.agent/skills/continuous-learning-v2/agents/observer.md +198 -198
- package/.agent/skills/continuous-learning-v2/agents/session-guardian.sh +150 -150
- package/.agent/skills/continuous-learning-v2/agents/start-observer.sh +244 -244
- package/.agent/skills/continuous-learning-v2/config.json +8 -8
- package/.agent/skills/continuous-learning-v2/hooks/observe.sh +428 -428
- package/.agent/skills/continuous-learning-v2/scripts/detect-project.sh +228 -228
- package/.agent/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -1426
- package/.agent/skills/continuous-learning-v2/scripts/test-parse-instinct.py +984 -984
- package/.agent/skills/cost-aware-llm-pipeline/SKILL.md +183 -183
- package/.agent/skills/cpp-coding-standards/SKILL.md +723 -723
- package/.agent/skills/cpp-testing/SKILL.md +324 -324
- package/.agent/skills/crosspost/SKILL.md +111 -111
- package/.agent/skills/csharp-testing/SKILL.md +321 -321
- package/.agent/skills/customer-billing-ops/SKILL.md +140 -140
- package/.agent/skills/customs-trade-compliance/SKILL.md +263 -263
- package/.agent/skills/dart-flutter-patterns/SKILL.md +563 -563
- package/.agent/skills/data-scraper-agent/SKILL.md +764 -764
- package/.agent/skills/database-design/SKILL.md +52 -52
- package/.agent/skills/database-design/database-selection.md +43 -43
- package/.agent/skills/database-design/indexing.md +39 -39
- package/.agent/skills/database-design/migrations.md +48 -48
- package/.agent/skills/database-design/optimization.md +36 -36
- package/.agent/skills/database-design/orm-selection.md +30 -30
- package/.agent/skills/database-design/schema-design.md +56 -56
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -172
- package/.agent/skills/database-migrations/SKILL.md +429 -429
- package/.agent/skills/deep-research/SKILL.md +155 -155
- package/.agent/skills/deployment-patterns/SKILL.md +427 -427
- package/.agent/skills/deployment-procedures/SKILL.md +241 -241
- package/.agent/skills/design-system/SKILL.md +82 -82
- package/.agent/skills/django-patterns/SKILL.md +734 -734
- package/.agent/skills/django-security/SKILL.md +593 -593
- package/.agent/skills/django-tdd/SKILL.md +729 -729
- package/.agent/skills/django-verification/SKILL.md +469 -469
- package/.agent/skills/dmux-workflows/SKILL.md +191 -191
- package/.agent/skills/doc.md +177 -177
- package/.agent/skills/docker-patterns/SKILL.md +364 -364
- package/.agent/skills/documentation-lookup/SKILL.md +90 -90
- package/.agent/skills/documentation-templates/SKILL.md +194 -194
- package/.agent/skills/dotnet-patterns/SKILL.md +321 -321
- package/.agent/skills/e2e-testing/SKILL.md +326 -326
- package/.agent/skills/energy-procurement/SKILL.md +228 -228
- package/.agent/skills/enterprise-agent-ops/SKILL.md +50 -50
- package/.agent/skills/eval-harness/SKILL.md +270 -270
- package/.agent/skills/exa-search/SKILL.md +103 -103
- package/.agent/skills/fal-ai-media/SKILL.md +284 -284
- package/.agent/skills/flutter-dart-code-review/SKILL.md +435 -435
- package/.agent/skills/foundation-models-on-device/SKILL.md +243 -243
- package/.agent/skills/frontend-design/SKILL.md +452 -452
- package/.agent/skills/frontend-design/animation-guide.md +331 -331
- package/.agent/skills/frontend-design/color-system.md +311 -311
- package/.agent/skills/frontend-design/decision-trees.md +418 -418
- package/.agent/skills/frontend-design/motion-graphics.md +306 -306
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -183
- package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -722
- package/.agent/skills/frontend-design/typography-system.md +345 -345
- package/.agent/skills/frontend-design/ux-psychology.md +1116 -1116
- package/.agent/skills/frontend-design/visual-effects.md +383 -383
- package/.agent/skills/frontend-patterns/SKILL.md +642 -642
- package/.agent/skills/frontend-slides/SKILL.md +184 -184
- package/.agent/skills/frontend-slides/style-presets.md +330 -330
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -135
- package/.agent/skills/game-development/SKILL.md +167 -167
- package/.agent/skills/game-development/game-art/SKILL.md +185 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -190
- package/.agent/skills/game-development/game-design/SKILL.md +129 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -123
- package/.agent/skills/game-development/web-games/SKILL.md +150 -150
- package/.agent/skills/gan-style-harness/SKILL.md +278 -278
- package/.agent/skills/geo-fundamentals/SKILL.md +156 -156
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -289
- package/.agent/skills/git-workflow/SKILL.md +715 -715
- package/.agent/skills/golang-patterns/SKILL.md +674 -674
- package/.agent/skills/golang-testing/SKILL.md +720 -720
- package/.agent/skills/google-workspace-ops/SKILL.md +95 -95
- package/.agent/skills/healthcare-cdss-patterns/SKILL.md +245 -245
- package/.agent/skills/healthcare-emr-patterns/SKILL.md +159 -159
- package/.agent/skills/healthcare-eval-harness/SKILL.md +207 -207
- package/.agent/skills/healthcare-phi-compliance/SKILL.md +145 -145
- package/.agent/skills/hexagonal-architecture/SKILL.md +276 -276
- package/.agent/skills/i18n-localization/SKILL.md +154 -154
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -241
- package/.agent/skills/intelligent-routing/SKILL.md +335 -335
- package/.agent/skills/inventory-demand-planning/SKILL.md +247 -247
- package/.agent/skills/investor-materials/SKILL.md +96 -96
- package/.agent/skills/investor-outreach/SKILL.md +91 -91
- package/.agent/skills/iterative-retrieval/SKILL.md +211 -211
- package/.agent/skills/java-coding-standards/SKILL.md +147 -147
- package/.agent/skills/jira-integration/SKILL.md +293 -293
- package/.agent/skills/jpa-patterns/SKILL.md +151 -151
- package/.agent/skills/kotlin-coroutines-flows/SKILL.md +284 -284
- package/.agent/skills/kotlin-exposed-patterns/SKILL.md +719 -719
- package/.agent/skills/kotlin-ktor-patterns/SKILL.md +689 -689
- package/.agent/skills/kotlin-patterns/SKILL.md +711 -711
- package/.agent/skills/kotlin-testing/SKILL.md +824 -824
- package/.agent/skills/laravel-patterns/SKILL.md +415 -415
- package/.agent/skills/laravel-plugin-discovery/SKILL.md +229 -229
- package/.agent/skills/laravel-security/SKILL.md +285 -285
- package/.agent/skills/laravel-tdd/SKILL.md +283 -283
- package/.agent/skills/laravel-verification/SKILL.md +179 -179
- package/.agent/skills/lead-intelligence/SKILL.md +321 -321
- package/.agent/skills/lead-intelligence/agents/enrichment-agent.md +85 -85
- package/.agent/skills/lead-intelligence/agents/mutual-mapper.md +75 -75
- package/.agent/skills/lead-intelligence/agents/outreach-drafter.md +98 -98
- package/.agent/skills/lead-intelligence/agents/signal-scorer.md +60 -60
- package/.agent/skills/lint-and-validate/SKILL.md +45 -45
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -184
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -173
- package/.agent/skills/liquid-glass-design/SKILL.md +279 -279
- package/.agent/skills/logistics-exception-management/SKILL.md +222 -222
- package/.agent/skills/manim-video/SKILL.md +89 -89
- package/.agent/skills/manim-video/assets/network-graph-scene.py +52 -52
- package/.agent/skills/market-research/SKILL.md +75 -75
- package/.agent/skills/mcp-server-patterns/SKILL.md +67 -67
- package/.agent/skills/mobile-design/SKILL.md +394 -394
- package/.agent/skills/mobile-design/decision-trees.md +516 -516
- package/.agent/skills/mobile-design/mobile-backend.md +491 -491
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -420
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -122
- package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -357
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -458
- package/.agent/skills/mobile-design/mobile-performance.md +767 -767
- package/.agent/skills/mobile-design/mobile-testing.md +356 -356
- package/.agent/skills/mobile-design/mobile-typography.md +433 -433
- package/.agent/skills/mobile-design/platform-android.md +666 -666
- package/.agent/skills/mobile-design/platform-ios.md +561 -561
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -670
- package/.agent/skills/mobile-design/touch-psychology.md +537 -537
- package/.agent/skills/nanoclaw-repl/SKILL.md +33 -33
- package/.agent/skills/nestjs-patterns/SKILL.md +230 -230
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -351
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -240
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -490
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -264
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -581
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -432
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -684
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -150
- package/.agent/skills/nextjs-react-expert/9-cache-components.md +103 -103
- package/.agent/skills/nextjs-react-expert/SKILL.md +293 -293
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -222
- package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -252
- package/.agent/skills/nextjs-turbopack/SKILL.md +44 -44
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -333
- package/.agent/skills/nutrient-document-processing/SKILL.md +167 -167
- package/.agent/skills/nuxt4-patterns/SKILL.md +100 -100
- package/.agent/skills/openclaw-persona-forge/SKILL.md +296 -296
- package/.agent/skills/openclaw-persona-forge/gacha.py +224 -224
- package/.agent/skills/openclaw-persona-forge/gacha.sh +5 -5
- package/.agent/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
- package/.agent/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
- package/.agent/skills/openclaw-persona-forge/references/error-handling.md +53 -53
- package/.agent/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
- package/.agent/skills/openclaw-persona-forge/references/naming-system.md +39 -39
- package/.agent/skills/openclaw-persona-forge/references/output-template.md +166 -166
- package/.agent/skills/opensource-pipeline/SKILL.md +255 -255
- package/.agent/skills/parallel-agents/SKILL.md +175 -175
- package/.agent/skills/performance-profiling/SKILL.md +143 -143
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -76
- package/.agent/skills/perl-patterns/SKILL.md +504 -504
- package/.agent/skills/perl-security/SKILL.md +503 -503
- package/.agent/skills/perl-testing/SKILL.md +475 -475
- package/.agent/skills/plan-writing/SKILL.md +152 -152
- package/.agent/skills/plankton-code-quality/SKILL.md +236 -236
- package/.agent/skills/postgres-patterns/SKILL.md +147 -147
- package/.agent/skills/powershell-windows/SKILL.md +167 -167
- package/.agent/skills/product-lens/SKILL.md +85 -85
- package/.agent/skills/production-scheduling/SKILL.md +238 -238
- package/.agent/skills/project-flow-ops/SKILL.md +111 -111
- package/.agent/skills/project-guidelines-example/SKILL.md +349 -349
- package/.agent/skills/prompt-optimizer/SKILL.md +397 -397
- package/.agent/skills/python-patterns/SKILL.md +750 -750
- package/.agent/skills/python-testing/SKILL.md +816 -816
- package/.agent/skills/pytorch-patterns/SKILL.md +396 -396
- package/.agent/skills/quality-nonconformance/SKILL.md +260 -260
- package/.agent/skills/ralphinho-rfc-pipeline/SKILL.md +67 -67
- package/.agent/skills/red-team-tactics/SKILL.md +199 -199
- package/.agent/skills/regex-vs-llm-structured-text/SKILL.md +220 -220
- package/.agent/skills/remotion-video-creation/SKILL.md +43 -43
- package/.agent/skills/remotion-video-creation/rules/3d.md +86 -86
- package/.agent/skills/remotion-video-creation/rules/animations.md +29 -29
- package/.agent/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -173
- package/.agent/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -100
- package/.agent/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -108
- package/.agent/skills/remotion-video-creation/rules/assets.md +78 -78
- package/.agent/skills/remotion-video-creation/rules/audio.md +172 -172
- package/.agent/skills/remotion-video-creation/rules/calculate-metadata.md +104 -104
- package/.agent/skills/remotion-video-creation/rules/can-decode.md +75 -75
- package/.agent/skills/remotion-video-creation/rules/charts.md +58 -58
- package/.agent/skills/remotion-video-creation/rules/compositions.md +146 -146
- package/.agent/skills/remotion-video-creation/rules/display-captions.md +126 -126
- package/.agent/skills/remotion-video-creation/rules/extract-frames.md +229 -229
- package/.agent/skills/remotion-video-creation/rules/fonts.md +152 -152
- package/.agent/skills/remotion-video-creation/rules/get-audio-duration.md +58 -58
- package/.agent/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -68
- package/.agent/skills/remotion-video-creation/rules/get-video-duration.md +58 -58
- package/.agent/skills/remotion-video-creation/rules/gifs.md +138 -138
- package/.agent/skills/remotion-video-creation/rules/images.md +130 -130
- package/.agent/skills/remotion-video-creation/rules/import-srt-captions.md +67 -67
- package/.agent/skills/remotion-video-creation/rules/lottie.md +67 -67
- package/.agent/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -34
- package/.agent/skills/remotion-video-creation/rules/measuring-text.md +143 -143
- package/.agent/skills/remotion-video-creation/rules/sequencing.md +106 -106
- package/.agent/skills/remotion-video-creation/rules/tailwind.md +11 -11
- package/.agent/skills/remotion-video-creation/rules/text-animations.md +20 -20
- package/.agent/skills/remotion-video-creation/rules/timing.md +179 -179
- package/.agent/skills/remotion-video-creation/rules/transcribe-captions.md +19 -19
- package/.agent/skills/remotion-video-creation/rules/transitions.md +122 -122
- package/.agent/skills/remotion-video-creation/rules/trimming.md +52 -52
- package/.agent/skills/remotion-video-creation/rules/videos.md +171 -171
- package/.agent/skills/repo-scan/SKILL.md +63 -63
- package/.agent/skills/returns-reverse-logistics/SKILL.md +240 -240
- package/.agent/skills/rules-distill/SKILL.md +264 -264
- package/.agent/skills/rules-distill/scripts/scan-rules.sh +58 -58
- package/.agent/skills/rules-distill/scripts/scan-skills.sh +129 -129
- package/.agent/skills/rust-patterns/SKILL.md +499 -499
- package/.agent/skills/rust-pro/SKILL.md +175 -175
- package/.agent/skills/rust-testing/SKILL.md +500 -500
- package/.agent/skills/safety-guard/SKILL.md +75 -75
- package/.agent/skills/santa-method/SKILL.md +306 -306
- package/.agent/skills/search-first/SKILL.md +161 -161
- package/.agent/skills/security-review/SKILL.md +495 -495
- package/.agent/skills/security-review/cloud-infrastructure-security.md +361 -361
- package/.agent/skills/security-scan/SKILL.md +165 -165
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -129
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -219
- package/.agent/skills/server-management/SKILL.md +161 -161
- package/.agent/skills/skill-comply/SKILL.md +58 -58
- package/.agent/skills/skill-comply/fixtures/compliant-trace.jsonl +5 -5
- package/.agent/skills/skill-comply/fixtures/noncompliant-trace.jsonl +3 -3
- package/.agent/skills/skill-comply/fixtures/tdd-spec.yaml +44 -44
- package/.agent/skills/skill-comply/prompts/classifier.md +24 -24
- package/.agent/skills/skill-comply/prompts/scenario-generator.md +62 -62
- package/.agent/skills/skill-comply/prompts/spec-generator.md +42 -42
- package/.agent/skills/skill-comply/pyproject.toml +15 -15
- package/.agent/skills/skill-comply/scripts/classifier.py +85 -85
- package/.agent/skills/skill-comply/scripts/grader.py +122 -122
- package/.agent/skills/skill-comply/scripts/parser.py +107 -107
- package/.agent/skills/skill-comply/scripts/report.py +170 -170
- package/.agent/skills/skill-comply/scripts/run.py +127 -127
- package/.agent/skills/skill-comply/scripts/runner.py +161 -161
- package/.agent/skills/skill-comply/scripts/scenario-generator.py +70 -70
- package/.agent/skills/skill-comply/scripts/spec-generator.py +72 -72
- package/.agent/skills/skill-comply/scripts/utils.py +13 -13
- package/.agent/skills/skill-comply/tests/test-grader.py +137 -137
- package/.agent/skills/skill-comply/tests/test-parser.py +90 -90
- package/.agent/skills/skill-stocktake/SKILL.md +193 -193
- package/.agent/skills/skill-stocktake/scripts/quick-diff.sh +87 -87
- package/.agent/skills/skill-stocktake/scripts/save-results.sh +56 -56
- package/.agent/skills/skill-stocktake/scripts/scan.sh +170 -170
- package/.agent/skills/social-graph-ranker/SKILL.md +154 -154
- package/.agent/skills/springboot-patterns/SKILL.md +314 -314
- package/.agent/skills/springboot-security/SKILL.md +272 -272
- package/.agent/skills/springboot-tdd/SKILL.md +158 -158
- package/.agent/skills/springboot-verification/SKILL.md +231 -231
- package/.agent/skills/strategic-compact/SKILL.md +131 -131
- package/.agent/skills/strategic-compact/suggest-compact.sh +54 -54
- package/.agent/skills/swift-actor-persistence/SKILL.md +143 -143
- package/.agent/skills/swift-concurrency-6-2/SKILL.md +216 -216
- package/.agent/skills/swift-protocol-di-testing/SKILL.md +190 -190
- package/.agent/skills/swiftui-patterns/SKILL.md +259 -259
- package/.agent/skills/systematic-debugging/SKILL.md +109 -109
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -269
- package/.agent/skills/tdd-workflow/SKILL.md +463 -463
- package/.agent/skills/team-builder/SKILL.md +168 -168
- package/.agent/skills/testing-patterns/SKILL.md +178 -178
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -219
- package/.agent/skills/token-budget-advisor/SKILL.md +133 -133
- package/.agent/skills/ui-demo/SKILL.md +465 -465
- package/.agent/skills/ui-ux-pro-max/SKILL.md +292 -292
- package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -26
- package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -97
- package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -101
- package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -31
- package/.agent/skills/ui-ux-pro-max/data/products.csv +96 -96
- package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/.agent/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/.agent/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/.agent/skills/ui-ux-pro-max/data/styles.csv +68 -68
- package/.agent/skills/ui-ux-pro-max/data/typography.csv +57 -57
- package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/.agent/skills/ui-ux-pro-max/scripts/core.py +253 -253
- package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/.agent/skills/ui-ux-pro-max/scripts/search.py +114 -114
- package/.agent/skills/verification-loop/SKILL.md +126 -126
- package/.agent/skills/video-editing/SKILL.md +310 -310
- package/.agent/skills/videodb/SKILL.md +374 -374
- package/.agent/skills/videodb/reference/api-reference.md +550 -550
- package/.agent/skills/videodb/reference/capture-reference.md +407 -407
- package/.agent/skills/videodb/reference/capture.md +101 -101
- package/.agent/skills/videodb/reference/editor.md +443 -443
- package/.agent/skills/videodb/reference/generative.md +331 -331
- package/.agent/skills/videodb/reference/rtstream-reference.md +564 -564
- package/.agent/skills/videodb/reference/rtstream.md +65 -65
- package/.agent/skills/videodb/reference/search.md +230 -230
- package/.agent/skills/videodb/reference/streaming.md +406 -406
- package/.agent/skills/videodb/reference/use-cases.md +118 -118
- package/.agent/skills/videodb/scripts/ws-listener.py +282 -282
- package/.agent/skills/visa-doc-translate/SKILL.md +117 -117
- package/.agent/skills/visa-doc-translate/readme.md +86 -86
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -276
- package/.agent/skills/vulnerability-scanner/checklists.md +121 -121
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -458
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -57
- package/.agent/skills/webapp-testing/SKILL.md +187 -187
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -173
- package/.agent/skills/workspace-surface-audit/SKILL.md +125 -125
- package/.agent/skills/x-api/SKILL.md +230 -230
- package/.agent/tasks/lessons.md +40 -40
- package/.agent/tasks/todo.md +33 -33
- package/.agent/tasks/two-track-merge-contract.md +1 -1
- package/.agent/workflows/aside.md +164 -164
- package/.agent/workflows/brainstorm.md +113 -113
- package/.agent/workflows/build-fix.md +62 -62
- package/.agent/workflows/checkpoint.md +74 -74
- package/.agent/workflows/claw.md +23 -23
- package/.agent/workflows/clean-memory.md +34 -34
- package/.agent/workflows/code-review.md +289 -289
- package/.agent/workflows/context-budget.md +23 -23
- package/.agent/workflows/cpp-build.md +173 -173
- package/.agent/workflows/cpp-review.md +132 -132
- package/.agent/workflows/cpp-test.md +251 -251
- package/.agent/workflows/create.md +59 -59
- package/.agent/workflows/debug.md +103 -103
- package/.agent/workflows/deploy.md +176 -176
- package/.agent/workflows/devfleet.md +23 -23
- package/.agent/workflows/docs.md +23 -23
- package/.agent/workflows/e2e.md +268 -268
- package/.agent/workflows/enhance.md +63 -63
- package/.agent/workflows/eval.md +23 -23
- package/.agent/workflows/evolve.md +178 -178
- package/.agent/workflows/flutter-build.md +164 -164
- package/.agent/workflows/flutter-review.md +116 -116
- package/.agent/workflows/flutter-test.md +144 -144
- package/.agent/workflows/gan-build.md +99 -99
- package/.agent/workflows/gan-design.md +35 -35
- package/.agent/workflows/go-build.md +183 -183
- package/.agent/workflows/go-review.md +148 -148
- package/.agent/workflows/go-test.md +268 -268
- package/.agent/workflows/gradle-build.md +70 -70
- package/.agent/workflows/harness-audit.md +73 -73
- package/.agent/workflows/init-docs.md +46 -46
- package/.agent/workflows/instinct-export.md +66 -66
- package/.agent/workflows/instinct-import.md +114 -114
- package/.agent/workflows/instinct-status.md +59 -59
- package/.agent/workflows/jira.md +106 -106
- package/.agent/workflows/kotlin-build.md +174 -174
- package/.agent/workflows/kotlin-review.md +140 -140
- package/.agent/workflows/kotlin-test.md +312 -312
- package/.agent/workflows/learn-eval.md +116 -116
- package/.agent/workflows/learn.md +70 -70
- package/.agent/workflows/loop-start.md +32 -32
- package/.agent/workflows/loop-status.md +24 -24
- package/.agent/workflows/model-route.md +26 -26
- package/.agent/workflows/multi-backend.md +158 -158
- package/.agent/workflows/multi-execute.md +315 -315
- package/.agent/workflows/multi-frontend.md +158 -158
- package/.agent/workflows/multi-plan.md +268 -268
- package/.agent/workflows/multi-workflow.md +191 -191
- package/.agent/workflows/orchestrate.md +135 -135
- package/.agent/workflows/plan.md +117 -117
- package/.agent/workflows/pm2.md +272 -272
- package/.agent/workflows/preview.md +81 -81
- package/.agent/workflows/projects.md +39 -39
- package/.agent/workflows/promote.md +41 -41
- package/.agent/workflows/prompt-optimize.md +23 -23
- package/.agent/workflows/prp-commit.md +112 -112
- package/.agent/workflows/prp-implement.md +385 -385
- package/.agent/workflows/prp-plan.md +502 -502
- package/.agent/workflows/prp-pr.md +184 -184
- package/.agent/workflows/prp-prd.md +447 -447
- package/.agent/workflows/prune.md +31 -31
- package/.agent/workflows/python-review.md +297 -297
- package/.agent/workflows/quality-gate.md +29 -29
- package/.agent/workflows/refactor-clean.md +80 -80
- package/.agent/workflows/resume-session.md +156 -156
- package/.agent/workflows/rules-distill.md +20 -20
- package/.agent/workflows/rust-build.md +187 -187
- package/.agent/workflows/rust-review.md +142 -142
- package/.agent/workflows/rust-test.md +308 -308
- package/.agent/workflows/santa-loop.md +175 -175
- package/.agent/workflows/save-session.md +275 -275
- package/.agent/workflows/sessions.md +333 -333
- package/.agent/workflows/setup-pm.md +80 -80
- package/.agent/workflows/skill-create.md +174 -174
- package/.agent/workflows/skill-health.md +54 -54
- package/.agent/workflows/status.md +86 -86
- package/.agent/workflows/tdd.md +231 -231
- package/.agent/workflows/test-coverage.md +69 -69
- package/.agent/workflows/test.md +144 -144
- package/.agent/workflows/ui-ux-pro-max.md +295 -295
- package/.agent/workflows/update-codemaps.md +72 -72
- package/.agent/workflows/update-docs.md +84 -84
- package/.agent/workflows/verify.md +23 -23
- package/LICENSE +176 -176
- package/README.md +144 -144
- package/package.json +1 -1
- package/scripts/release-check.js +55 -55
- package/src/bin/cli.js +424 -354
- package/src/lib/installer.js +223 -11
|
@@ -1,406 +1,406 @@
|
|
|
1
|
-
# Streaming & Playback
|
|
2
|
-
|
|
3
|
-
VideoDB generates streams on-demand, returning HLS-compatible URLs that play instantly in any standard video player. No render times or export waits - edits, searches, and compositions stream immediately.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
Videos **must be uploaded** to a collection before streams can be generated. For search-based streams, the video must also be **indexed** (spoken words and/or scenes). See [search.md](search.md) for indexing details.
|
|
8
|
-
|
|
9
|
-
## Core Concepts
|
|
10
|
-
|
|
11
|
-
### Stream Generation
|
|
12
|
-
|
|
13
|
-
Every video, search result, and timeline in VideoDB can produce a **stream URL**. This URL points to an HLS (HTTP Live Streaming) manifest that is compiled on demand.
|
|
14
|
-
|
|
15
|
-
```python
|
|
16
|
-
# From a video
|
|
17
|
-
stream_url = video.generate_stream()
|
|
18
|
-
|
|
19
|
-
# From a timeline
|
|
20
|
-
stream_url = timeline.generate_stream()
|
|
21
|
-
|
|
22
|
-
# From search results
|
|
23
|
-
stream_url = results.compile()
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Streaming a Single Video
|
|
27
|
-
|
|
28
|
-
### Basic Playback
|
|
29
|
-
|
|
30
|
-
```python
|
|
31
|
-
import videodb
|
|
32
|
-
|
|
33
|
-
conn = videodb.connect()
|
|
34
|
-
coll = conn.get_collection()
|
|
35
|
-
video = coll.get_video("your-video-id")
|
|
36
|
-
|
|
37
|
-
# Generate stream URL
|
|
38
|
-
stream_url = video.generate_stream()
|
|
39
|
-
print(f"Stream: {stream_url}")
|
|
40
|
-
|
|
41
|
-
# Open in default browser
|
|
42
|
-
video.play()
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### With Subtitles
|
|
46
|
-
|
|
47
|
-
```python
|
|
48
|
-
# Index and add subtitles first
|
|
49
|
-
video.index_spoken_words(force=True)
|
|
50
|
-
stream_url = video.add_subtitle()
|
|
51
|
-
|
|
52
|
-
# Returned URL already includes subtitles
|
|
53
|
-
print(f"Subtitled stream: {stream_url}")
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Specific Segments
|
|
57
|
-
|
|
58
|
-
Stream only a portion of a video by passing a timeline of timestamp ranges:
|
|
59
|
-
|
|
60
|
-
```python
|
|
61
|
-
# Stream seconds 10-30 and 60-90
|
|
62
|
-
stream_url = video.generate_stream(timeline=[(10, 30), (60, 90)])
|
|
63
|
-
print(f"Segment stream: {stream_url}")
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Streaming Timeline Compositions
|
|
67
|
-
|
|
68
|
-
Build a multi-asset composition and stream it in real time:
|
|
69
|
-
|
|
70
|
-
```python
|
|
71
|
-
import videodb
|
|
72
|
-
from videodb.timeline import Timeline
|
|
73
|
-
from videodb.asset import VideoAsset, AudioAsset, ImageAsset, TextAsset, TextStyle
|
|
74
|
-
|
|
75
|
-
conn = videodb.connect()
|
|
76
|
-
coll = conn.get_collection()
|
|
77
|
-
|
|
78
|
-
video = coll.get_video(video_id)
|
|
79
|
-
music = coll.get_audio(music_id)
|
|
80
|
-
|
|
81
|
-
timeline = Timeline(conn)
|
|
82
|
-
|
|
83
|
-
# Main video content
|
|
84
|
-
timeline.add_inline(VideoAsset(asset_id=video.id))
|
|
85
|
-
|
|
86
|
-
# Background music overlay (starts at second 0)
|
|
87
|
-
timeline.add_overlay(0, AudioAsset(asset_id=music.id))
|
|
88
|
-
|
|
89
|
-
# Text overlay at the beginning
|
|
90
|
-
timeline.add_overlay(0, TextAsset(
|
|
91
|
-
text="Live Demo",
|
|
92
|
-
duration=3,
|
|
93
|
-
style=TextStyle(fontsize=48, fontcolor="white", boxcolor="#000000"),
|
|
94
|
-
))
|
|
95
|
-
|
|
96
|
-
# Generate the composed stream
|
|
97
|
-
stream_url = timeline.generate_stream()
|
|
98
|
-
print(f"Composed stream: {stream_url}")
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
**Important:** `add_inline()` only accepts `VideoAsset`. Use `add_overlay()` for `AudioAsset`, `ImageAsset`, and `TextAsset`.
|
|
102
|
-
|
|
103
|
-
For detailed timeline editing, see [editor.md](editor.md).
|
|
104
|
-
|
|
105
|
-
## Streaming Search Results
|
|
106
|
-
|
|
107
|
-
Compile search results into a single stream of all matching segments:
|
|
108
|
-
|
|
109
|
-
```python
|
|
110
|
-
from videodb import SearchType
|
|
111
|
-
from videodb.exceptions import InvalidRequestError
|
|
112
|
-
|
|
113
|
-
video.index_spoken_words(force=True)
|
|
114
|
-
try:
|
|
115
|
-
results = video.search("key announcement", search_type=SearchType.semantic)
|
|
116
|
-
|
|
117
|
-
# Compile all matching shots into one stream
|
|
118
|
-
stream_url = results.compile()
|
|
119
|
-
print(f"Search results stream: {stream_url}")
|
|
120
|
-
|
|
121
|
-
# Or play directly
|
|
122
|
-
results.play()
|
|
123
|
-
except InvalidRequestError as exc:
|
|
124
|
-
if "No results found" in str(exc):
|
|
125
|
-
print("No matching announcement segments were found.")
|
|
126
|
-
else:
|
|
127
|
-
raise
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Stream Individual Search Hits
|
|
131
|
-
|
|
132
|
-
```python
|
|
133
|
-
from videodb.exceptions import InvalidRequestError
|
|
134
|
-
|
|
135
|
-
try:
|
|
136
|
-
results = video.search("product demo", search_type=SearchType.semantic)
|
|
137
|
-
for i, shot in enumerate(results.get_shots()):
|
|
138
|
-
stream_url = shot.generate_stream()
|
|
139
|
-
print(f"Hit {i+1} [{shot.start:.1f}s-{shot.end:.1f}s]: {stream_url}")
|
|
140
|
-
except InvalidRequestError as exc:
|
|
141
|
-
if "No results found" in str(exc):
|
|
142
|
-
print("No product demo segments matched the query.")
|
|
143
|
-
else:
|
|
144
|
-
raise
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Audio Playback
|
|
148
|
-
|
|
149
|
-
Get a signed playback URL for audio content:
|
|
150
|
-
|
|
151
|
-
```python
|
|
152
|
-
audio = coll.get_audio(audio_id)
|
|
153
|
-
playback_url = audio.generate_url()
|
|
154
|
-
print(f"Audio URL: {playback_url}")
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Complete Workflow Examples
|
|
158
|
-
|
|
159
|
-
### Search-to-Stream Pipeline
|
|
160
|
-
|
|
161
|
-
Combine search, timeline composition, and streaming in one workflow:
|
|
162
|
-
|
|
163
|
-
```python
|
|
164
|
-
import videodb
|
|
165
|
-
from videodb import SearchType
|
|
166
|
-
from videodb.exceptions import InvalidRequestError
|
|
167
|
-
from videodb.timeline import Timeline
|
|
168
|
-
from videodb.asset import VideoAsset, TextAsset, TextStyle
|
|
169
|
-
|
|
170
|
-
conn = videodb.connect()
|
|
171
|
-
coll = conn.get_collection()
|
|
172
|
-
video = coll.get_video("your-video-id")
|
|
173
|
-
|
|
174
|
-
video.index_spoken_words(force=True)
|
|
175
|
-
|
|
176
|
-
# Search for key moments
|
|
177
|
-
queries = ["introduction", "main demo", "Q&A"]
|
|
178
|
-
timeline = Timeline(conn)
|
|
179
|
-
timeline_offset = 0.0
|
|
180
|
-
|
|
181
|
-
for query in queries:
|
|
182
|
-
try:
|
|
183
|
-
results = video.search(query, search_type=SearchType.semantic)
|
|
184
|
-
shots = results.get_shots()
|
|
185
|
-
except InvalidRequestError as exc:
|
|
186
|
-
if "No results found" in str(exc):
|
|
187
|
-
shots = []
|
|
188
|
-
else:
|
|
189
|
-
raise
|
|
190
|
-
|
|
191
|
-
if not shots:
|
|
192
|
-
continue
|
|
193
|
-
|
|
194
|
-
# Add the section label where this batch starts in the compiled timeline
|
|
195
|
-
timeline.add_overlay(timeline_offset, TextAsset(
|
|
196
|
-
text=query.title(),
|
|
197
|
-
duration=2,
|
|
198
|
-
style=TextStyle(fontsize=36, fontcolor="white", boxcolor="#222222"),
|
|
199
|
-
))
|
|
200
|
-
|
|
201
|
-
for shot in shots:
|
|
202
|
-
timeline.add_inline(
|
|
203
|
-
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
204
|
-
)
|
|
205
|
-
timeline_offset += shot.end - shot.start
|
|
206
|
-
|
|
207
|
-
stream_url = timeline.generate_stream()
|
|
208
|
-
print(f"Dynamic compilation: {stream_url}")
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Multi-Video Stream
|
|
212
|
-
|
|
213
|
-
Combine clips from different videos into a single stream:
|
|
214
|
-
|
|
215
|
-
```python
|
|
216
|
-
import videodb
|
|
217
|
-
from videodb.timeline import Timeline
|
|
218
|
-
from videodb.asset import VideoAsset
|
|
219
|
-
|
|
220
|
-
conn = videodb.connect()
|
|
221
|
-
coll = conn.get_collection()
|
|
222
|
-
|
|
223
|
-
video_clips = [
|
|
224
|
-
{"id": "vid_001", "start": 0, "end": 15},
|
|
225
|
-
{"id": "vid_002", "start": 10, "end": 30},
|
|
226
|
-
{"id": "vid_003", "start": 5, "end": 25},
|
|
227
|
-
]
|
|
228
|
-
|
|
229
|
-
timeline = Timeline(conn)
|
|
230
|
-
for clip in video_clips:
|
|
231
|
-
timeline.add_inline(
|
|
232
|
-
VideoAsset(asset_id=clip["id"], start=clip["start"], end=clip["end"])
|
|
233
|
-
)
|
|
234
|
-
|
|
235
|
-
stream_url = timeline.generate_stream()
|
|
236
|
-
print(f"Multi-video stream: {stream_url}")
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
### Conditional Stream Assembly
|
|
240
|
-
|
|
241
|
-
Build a stream dynamically based on search availability:
|
|
242
|
-
|
|
243
|
-
```python
|
|
244
|
-
import videodb
|
|
245
|
-
from videodb import SearchType
|
|
246
|
-
from videodb.exceptions import InvalidRequestError
|
|
247
|
-
from videodb.timeline import Timeline
|
|
248
|
-
from videodb.asset import VideoAsset, TextAsset, TextStyle
|
|
249
|
-
|
|
250
|
-
conn = videodb.connect()
|
|
251
|
-
coll = conn.get_collection()
|
|
252
|
-
video = coll.get_video("your-video-id")
|
|
253
|
-
|
|
254
|
-
video.index_spoken_words(force=True)
|
|
255
|
-
|
|
256
|
-
timeline = Timeline(conn)
|
|
257
|
-
|
|
258
|
-
# Try to find specific content; fall back to full video
|
|
259
|
-
topics = ["opening remarks", "technical deep dive", "closing"]
|
|
260
|
-
|
|
261
|
-
found_any = False
|
|
262
|
-
timeline_offset = 0.0
|
|
263
|
-
for topic in topics:
|
|
264
|
-
try:
|
|
265
|
-
results = video.search(topic, search_type=SearchType.semantic)
|
|
266
|
-
shots = results.get_shots()
|
|
267
|
-
except InvalidRequestError as exc:
|
|
268
|
-
if "No results found" in str(exc):
|
|
269
|
-
shots = []
|
|
270
|
-
else:
|
|
271
|
-
raise
|
|
272
|
-
|
|
273
|
-
if shots:
|
|
274
|
-
found_any = True
|
|
275
|
-
timeline.add_overlay(timeline_offset, TextAsset(
|
|
276
|
-
text=topic.title(),
|
|
277
|
-
duration=2,
|
|
278
|
-
style=TextStyle(fontsize=32, fontcolor="white", boxcolor="#1a1a2e"),
|
|
279
|
-
))
|
|
280
|
-
for shot in shots:
|
|
281
|
-
timeline.add_inline(
|
|
282
|
-
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
283
|
-
)
|
|
284
|
-
timeline_offset += shot.end - shot.start
|
|
285
|
-
|
|
286
|
-
if found_any:
|
|
287
|
-
stream_url = timeline.generate_stream()
|
|
288
|
-
print(f"Curated stream: {stream_url}")
|
|
289
|
-
else:
|
|
290
|
-
# Fall back to full video stream
|
|
291
|
-
stream_url = video.generate_stream()
|
|
292
|
-
print(f"Full video stream: {stream_url}")
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### Live Event Recap
|
|
296
|
-
|
|
297
|
-
Process an event recording into a streamable recap with multiple sections:
|
|
298
|
-
|
|
299
|
-
```python
|
|
300
|
-
import videodb
|
|
301
|
-
from videodb import SearchType
|
|
302
|
-
from videodb.exceptions import InvalidRequestError
|
|
303
|
-
from videodb.timeline import Timeline
|
|
304
|
-
from videodb.asset import VideoAsset, AudioAsset, ImageAsset, TextAsset, TextStyle
|
|
305
|
-
|
|
306
|
-
conn = videodb.connect()
|
|
307
|
-
coll = conn.get_collection()
|
|
308
|
-
|
|
309
|
-
# Upload event recording
|
|
310
|
-
event = coll.upload(url="https://example.com/event-recording.mp4")
|
|
311
|
-
event.index_spoken_words(force=True)
|
|
312
|
-
|
|
313
|
-
# Generate background music
|
|
314
|
-
music = coll.generate_music(
|
|
315
|
-
prompt="upbeat corporate background music",
|
|
316
|
-
duration=120,
|
|
317
|
-
)
|
|
318
|
-
|
|
319
|
-
# Generate title image
|
|
320
|
-
title_img = coll.generate_image(
|
|
321
|
-
prompt="modern event recap title card, dark background, professional",
|
|
322
|
-
aspect_ratio="16:9",
|
|
323
|
-
)
|
|
324
|
-
|
|
325
|
-
# Build the recap timeline
|
|
326
|
-
timeline = Timeline(conn)
|
|
327
|
-
timeline_offset = 0.0
|
|
328
|
-
|
|
329
|
-
# Main video segments from search
|
|
330
|
-
try:
|
|
331
|
-
keynote = event.search("keynote announcement", search_type=SearchType.semantic)
|
|
332
|
-
keynote_shots = keynote.get_shots()[:5]
|
|
333
|
-
except InvalidRequestError as exc:
|
|
334
|
-
if "No results found" in str(exc):
|
|
335
|
-
keynote_shots = []
|
|
336
|
-
else:
|
|
337
|
-
raise
|
|
338
|
-
if keynote_shots:
|
|
339
|
-
keynote_start = timeline_offset
|
|
340
|
-
for shot in keynote_shots:
|
|
341
|
-
timeline.add_inline(
|
|
342
|
-
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
343
|
-
)
|
|
344
|
-
timeline_offset += shot.end - shot.start
|
|
345
|
-
else:
|
|
346
|
-
keynote_start = None
|
|
347
|
-
|
|
348
|
-
try:
|
|
349
|
-
demo = event.search("product demo", search_type=SearchType.semantic)
|
|
350
|
-
demo_shots = demo.get_shots()[:5]
|
|
351
|
-
except InvalidRequestError as exc:
|
|
352
|
-
if "No results found" in str(exc):
|
|
353
|
-
demo_shots = []
|
|
354
|
-
else:
|
|
355
|
-
raise
|
|
356
|
-
if demo_shots:
|
|
357
|
-
demo_start = timeline_offset
|
|
358
|
-
for shot in demo_shots:
|
|
359
|
-
timeline.add_inline(
|
|
360
|
-
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
361
|
-
)
|
|
362
|
-
timeline_offset += shot.end - shot.start
|
|
363
|
-
else:
|
|
364
|
-
demo_start = None
|
|
365
|
-
|
|
366
|
-
# Overlay title card image
|
|
367
|
-
timeline.add_overlay(0, ImageAsset(
|
|
368
|
-
asset_id=title_img.id, width=100, height=100, x=80, y=20, duration=5
|
|
369
|
-
))
|
|
370
|
-
|
|
371
|
-
# Overlay section labels at the correct timeline offsets
|
|
372
|
-
if keynote_start is not None:
|
|
373
|
-
timeline.add_overlay(max(5, keynote_start), TextAsset(
|
|
374
|
-
text="Keynote Highlights",
|
|
375
|
-
duration=3,
|
|
376
|
-
style=TextStyle(fontsize=40, fontcolor="white", boxcolor="#0d1117"),
|
|
377
|
-
))
|
|
378
|
-
if demo_start is not None:
|
|
379
|
-
timeline.add_overlay(max(5, demo_start), TextAsset(
|
|
380
|
-
text="Demo Highlights",
|
|
381
|
-
duration=3,
|
|
382
|
-
style=TextStyle(fontsize=36, fontcolor="white", boxcolor="#0d1117"),
|
|
383
|
-
))
|
|
384
|
-
|
|
385
|
-
# Overlay background music
|
|
386
|
-
timeline.add_overlay(0, AudioAsset(
|
|
387
|
-
asset_id=music.id, fade_in_duration=3
|
|
388
|
-
))
|
|
389
|
-
|
|
390
|
-
# Stream the final recap
|
|
391
|
-
stream_url = timeline.generate_stream()
|
|
392
|
-
print(f"Event recap: {stream_url}")
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
---
|
|
396
|
-
|
|
397
|
-
## Tips
|
|
398
|
-
|
|
399
|
-
- **HLS compatibility**: Stream URLs return HLS manifests (`.m3u8`). They work in Safari natively, and in other browsers via hls.js or similar libraries.
|
|
400
|
-
- **On-demand compilation**: Streams are compiled server-side when requested. The first play may have a brief compilation delay; subsequent plays of the same composition are cached.
|
|
401
|
-
- **Caching**: Calling `video.generate_stream()` a second time without arguments returns the cached stream URL rather than recompiling.
|
|
402
|
-
- **Segment streams**: `video.generate_stream(timeline=[(start, end)])` is the fastest way to stream a specific clip without building a full `Timeline` object.
|
|
403
|
-
- **Inline vs overlay**: `add_inline()` only accepts `VideoAsset` and places assets sequentially on the main track. `add_overlay()` accepts `AudioAsset`, `ImageAsset`, and `TextAsset` and layers them on top at a given start time.
|
|
404
|
-
- **TextStyle defaults**: `TextStyle` defaults to `font='Sans'`, `fontcolor='black'`. Use `boxcolor` (not `bgcolor`) for background color on text.
|
|
405
|
-
- **Combine with generation**: Use `coll.generate_music(prompt, duration)` and `coll.generate_image(prompt, aspect_ratio)` to create assets for timeline compositions.
|
|
406
|
-
- **Playback**: `.play()` opens the stream URL in the default system browser. For programmatic use, work with the URL string directly.
|
|
1
|
+
# Streaming & Playback
|
|
2
|
+
|
|
3
|
+
VideoDB generates streams on-demand, returning HLS-compatible URLs that play instantly in any standard video player. No render times or export waits - edits, searches, and compositions stream immediately.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
Videos **must be uploaded** to a collection before streams can be generated. For search-based streams, the video must also be **indexed** (spoken words and/or scenes). See [search.md](search.md) for indexing details.
|
|
8
|
+
|
|
9
|
+
## Core Concepts
|
|
10
|
+
|
|
11
|
+
### Stream Generation
|
|
12
|
+
|
|
13
|
+
Every video, search result, and timeline in VideoDB can produce a **stream URL**. This URL points to an HLS (HTTP Live Streaming) manifest that is compiled on demand.
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# From a video
|
|
17
|
+
stream_url = video.generate_stream()
|
|
18
|
+
|
|
19
|
+
# From a timeline
|
|
20
|
+
stream_url = timeline.generate_stream()
|
|
21
|
+
|
|
22
|
+
# From search results
|
|
23
|
+
stream_url = results.compile()
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Streaming a Single Video
|
|
27
|
+
|
|
28
|
+
### Basic Playback
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import videodb
|
|
32
|
+
|
|
33
|
+
conn = videodb.connect()
|
|
34
|
+
coll = conn.get_collection()
|
|
35
|
+
video = coll.get_video("your-video-id")
|
|
36
|
+
|
|
37
|
+
# Generate stream URL
|
|
38
|
+
stream_url = video.generate_stream()
|
|
39
|
+
print(f"Stream: {stream_url}")
|
|
40
|
+
|
|
41
|
+
# Open in default browser
|
|
42
|
+
video.play()
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### With Subtitles
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
# Index and add subtitles first
|
|
49
|
+
video.index_spoken_words(force=True)
|
|
50
|
+
stream_url = video.add_subtitle()
|
|
51
|
+
|
|
52
|
+
# Returned URL already includes subtitles
|
|
53
|
+
print(f"Subtitled stream: {stream_url}")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Specific Segments
|
|
57
|
+
|
|
58
|
+
Stream only a portion of a video by passing a timeline of timestamp ranges:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
# Stream seconds 10-30 and 60-90
|
|
62
|
+
stream_url = video.generate_stream(timeline=[(10, 30), (60, 90)])
|
|
63
|
+
print(f"Segment stream: {stream_url}")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Streaming Timeline Compositions
|
|
67
|
+
|
|
68
|
+
Build a multi-asset composition and stream it in real time:
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
import videodb
|
|
72
|
+
from videodb.timeline import Timeline
|
|
73
|
+
from videodb.asset import VideoAsset, AudioAsset, ImageAsset, TextAsset, TextStyle
|
|
74
|
+
|
|
75
|
+
conn = videodb.connect()
|
|
76
|
+
coll = conn.get_collection()
|
|
77
|
+
|
|
78
|
+
video = coll.get_video(video_id)
|
|
79
|
+
music = coll.get_audio(music_id)
|
|
80
|
+
|
|
81
|
+
timeline = Timeline(conn)
|
|
82
|
+
|
|
83
|
+
# Main video content
|
|
84
|
+
timeline.add_inline(VideoAsset(asset_id=video.id))
|
|
85
|
+
|
|
86
|
+
# Background music overlay (starts at second 0)
|
|
87
|
+
timeline.add_overlay(0, AudioAsset(asset_id=music.id))
|
|
88
|
+
|
|
89
|
+
# Text overlay at the beginning
|
|
90
|
+
timeline.add_overlay(0, TextAsset(
|
|
91
|
+
text="Live Demo",
|
|
92
|
+
duration=3,
|
|
93
|
+
style=TextStyle(fontsize=48, fontcolor="white", boxcolor="#000000"),
|
|
94
|
+
))
|
|
95
|
+
|
|
96
|
+
# Generate the composed stream
|
|
97
|
+
stream_url = timeline.generate_stream()
|
|
98
|
+
print(f"Composed stream: {stream_url}")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Important:** `add_inline()` only accepts `VideoAsset`. Use `add_overlay()` for `AudioAsset`, `ImageAsset`, and `TextAsset`.
|
|
102
|
+
|
|
103
|
+
For detailed timeline editing, see [editor.md](editor.md).
|
|
104
|
+
|
|
105
|
+
## Streaming Search Results
|
|
106
|
+
|
|
107
|
+
Compile search results into a single stream of all matching segments:
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
from videodb import SearchType
|
|
111
|
+
from videodb.exceptions import InvalidRequestError
|
|
112
|
+
|
|
113
|
+
video.index_spoken_words(force=True)
|
|
114
|
+
try:
|
|
115
|
+
results = video.search("key announcement", search_type=SearchType.semantic)
|
|
116
|
+
|
|
117
|
+
# Compile all matching shots into one stream
|
|
118
|
+
stream_url = results.compile()
|
|
119
|
+
print(f"Search results stream: {stream_url}")
|
|
120
|
+
|
|
121
|
+
# Or play directly
|
|
122
|
+
results.play()
|
|
123
|
+
except InvalidRequestError as exc:
|
|
124
|
+
if "No results found" in str(exc):
|
|
125
|
+
print("No matching announcement segments were found.")
|
|
126
|
+
else:
|
|
127
|
+
raise
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Stream Individual Search Hits
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from videodb.exceptions import InvalidRequestError
|
|
134
|
+
|
|
135
|
+
try:
|
|
136
|
+
results = video.search("product demo", search_type=SearchType.semantic)
|
|
137
|
+
for i, shot in enumerate(results.get_shots()):
|
|
138
|
+
stream_url = shot.generate_stream()
|
|
139
|
+
print(f"Hit {i+1} [{shot.start:.1f}s-{shot.end:.1f}s]: {stream_url}")
|
|
140
|
+
except InvalidRequestError as exc:
|
|
141
|
+
if "No results found" in str(exc):
|
|
142
|
+
print("No product demo segments matched the query.")
|
|
143
|
+
else:
|
|
144
|
+
raise
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Audio Playback
|
|
148
|
+
|
|
149
|
+
Get a signed playback URL for audio content:
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
audio = coll.get_audio(audio_id)
|
|
153
|
+
playback_url = audio.generate_url()
|
|
154
|
+
print(f"Audio URL: {playback_url}")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Complete Workflow Examples
|
|
158
|
+
|
|
159
|
+
### Search-to-Stream Pipeline
|
|
160
|
+
|
|
161
|
+
Combine search, timeline composition, and streaming in one workflow:
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
import videodb
|
|
165
|
+
from videodb import SearchType
|
|
166
|
+
from videodb.exceptions import InvalidRequestError
|
|
167
|
+
from videodb.timeline import Timeline
|
|
168
|
+
from videodb.asset import VideoAsset, TextAsset, TextStyle
|
|
169
|
+
|
|
170
|
+
conn = videodb.connect()
|
|
171
|
+
coll = conn.get_collection()
|
|
172
|
+
video = coll.get_video("your-video-id")
|
|
173
|
+
|
|
174
|
+
video.index_spoken_words(force=True)
|
|
175
|
+
|
|
176
|
+
# Search for key moments
|
|
177
|
+
queries = ["introduction", "main demo", "Q&A"]
|
|
178
|
+
timeline = Timeline(conn)
|
|
179
|
+
timeline_offset = 0.0
|
|
180
|
+
|
|
181
|
+
for query in queries:
|
|
182
|
+
try:
|
|
183
|
+
results = video.search(query, search_type=SearchType.semantic)
|
|
184
|
+
shots = results.get_shots()
|
|
185
|
+
except InvalidRequestError as exc:
|
|
186
|
+
if "No results found" in str(exc):
|
|
187
|
+
shots = []
|
|
188
|
+
else:
|
|
189
|
+
raise
|
|
190
|
+
|
|
191
|
+
if not shots:
|
|
192
|
+
continue
|
|
193
|
+
|
|
194
|
+
# Add the section label where this batch starts in the compiled timeline
|
|
195
|
+
timeline.add_overlay(timeline_offset, TextAsset(
|
|
196
|
+
text=query.title(),
|
|
197
|
+
duration=2,
|
|
198
|
+
style=TextStyle(fontsize=36, fontcolor="white", boxcolor="#222222"),
|
|
199
|
+
))
|
|
200
|
+
|
|
201
|
+
for shot in shots:
|
|
202
|
+
timeline.add_inline(
|
|
203
|
+
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
204
|
+
)
|
|
205
|
+
timeline_offset += shot.end - shot.start
|
|
206
|
+
|
|
207
|
+
stream_url = timeline.generate_stream()
|
|
208
|
+
print(f"Dynamic compilation: {stream_url}")
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Multi-Video Stream
|
|
212
|
+
|
|
213
|
+
Combine clips from different videos into a single stream:
|
|
214
|
+
|
|
215
|
+
```python
|
|
216
|
+
import videodb
|
|
217
|
+
from videodb.timeline import Timeline
|
|
218
|
+
from videodb.asset import VideoAsset
|
|
219
|
+
|
|
220
|
+
conn = videodb.connect()
|
|
221
|
+
coll = conn.get_collection()
|
|
222
|
+
|
|
223
|
+
video_clips = [
|
|
224
|
+
{"id": "vid_001", "start": 0, "end": 15},
|
|
225
|
+
{"id": "vid_002", "start": 10, "end": 30},
|
|
226
|
+
{"id": "vid_003", "start": 5, "end": 25},
|
|
227
|
+
]
|
|
228
|
+
|
|
229
|
+
timeline = Timeline(conn)
|
|
230
|
+
for clip in video_clips:
|
|
231
|
+
timeline.add_inline(
|
|
232
|
+
VideoAsset(asset_id=clip["id"], start=clip["start"], end=clip["end"])
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
stream_url = timeline.generate_stream()
|
|
236
|
+
print(f"Multi-video stream: {stream_url}")
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Conditional Stream Assembly
|
|
240
|
+
|
|
241
|
+
Build a stream dynamically based on search availability:
|
|
242
|
+
|
|
243
|
+
```python
|
|
244
|
+
import videodb
|
|
245
|
+
from videodb import SearchType
|
|
246
|
+
from videodb.exceptions import InvalidRequestError
|
|
247
|
+
from videodb.timeline import Timeline
|
|
248
|
+
from videodb.asset import VideoAsset, TextAsset, TextStyle
|
|
249
|
+
|
|
250
|
+
conn = videodb.connect()
|
|
251
|
+
coll = conn.get_collection()
|
|
252
|
+
video = coll.get_video("your-video-id")
|
|
253
|
+
|
|
254
|
+
video.index_spoken_words(force=True)
|
|
255
|
+
|
|
256
|
+
timeline = Timeline(conn)
|
|
257
|
+
|
|
258
|
+
# Try to find specific content; fall back to full video
|
|
259
|
+
topics = ["opening remarks", "technical deep dive", "closing"]
|
|
260
|
+
|
|
261
|
+
found_any = False
|
|
262
|
+
timeline_offset = 0.0
|
|
263
|
+
for topic in topics:
|
|
264
|
+
try:
|
|
265
|
+
results = video.search(topic, search_type=SearchType.semantic)
|
|
266
|
+
shots = results.get_shots()
|
|
267
|
+
except InvalidRequestError as exc:
|
|
268
|
+
if "No results found" in str(exc):
|
|
269
|
+
shots = []
|
|
270
|
+
else:
|
|
271
|
+
raise
|
|
272
|
+
|
|
273
|
+
if shots:
|
|
274
|
+
found_any = True
|
|
275
|
+
timeline.add_overlay(timeline_offset, TextAsset(
|
|
276
|
+
text=topic.title(),
|
|
277
|
+
duration=2,
|
|
278
|
+
style=TextStyle(fontsize=32, fontcolor="white", boxcolor="#1a1a2e"),
|
|
279
|
+
))
|
|
280
|
+
for shot in shots:
|
|
281
|
+
timeline.add_inline(
|
|
282
|
+
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
283
|
+
)
|
|
284
|
+
timeline_offset += shot.end - shot.start
|
|
285
|
+
|
|
286
|
+
if found_any:
|
|
287
|
+
stream_url = timeline.generate_stream()
|
|
288
|
+
print(f"Curated stream: {stream_url}")
|
|
289
|
+
else:
|
|
290
|
+
# Fall back to full video stream
|
|
291
|
+
stream_url = video.generate_stream()
|
|
292
|
+
print(f"Full video stream: {stream_url}")
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Live Event Recap
|
|
296
|
+
|
|
297
|
+
Process an event recording into a streamable recap with multiple sections:
|
|
298
|
+
|
|
299
|
+
```python
|
|
300
|
+
import videodb
|
|
301
|
+
from videodb import SearchType
|
|
302
|
+
from videodb.exceptions import InvalidRequestError
|
|
303
|
+
from videodb.timeline import Timeline
|
|
304
|
+
from videodb.asset import VideoAsset, AudioAsset, ImageAsset, TextAsset, TextStyle
|
|
305
|
+
|
|
306
|
+
conn = videodb.connect()
|
|
307
|
+
coll = conn.get_collection()
|
|
308
|
+
|
|
309
|
+
# Upload event recording
|
|
310
|
+
event = coll.upload(url="https://example.com/event-recording.mp4")
|
|
311
|
+
event.index_spoken_words(force=True)
|
|
312
|
+
|
|
313
|
+
# Generate background music
|
|
314
|
+
music = coll.generate_music(
|
|
315
|
+
prompt="upbeat corporate background music",
|
|
316
|
+
duration=120,
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
# Generate title image
|
|
320
|
+
title_img = coll.generate_image(
|
|
321
|
+
prompt="modern event recap title card, dark background, professional",
|
|
322
|
+
aspect_ratio="16:9",
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
# Build the recap timeline
|
|
326
|
+
timeline = Timeline(conn)
|
|
327
|
+
timeline_offset = 0.0
|
|
328
|
+
|
|
329
|
+
# Main video segments from search
|
|
330
|
+
try:
|
|
331
|
+
keynote = event.search("keynote announcement", search_type=SearchType.semantic)
|
|
332
|
+
keynote_shots = keynote.get_shots()[:5]
|
|
333
|
+
except InvalidRequestError as exc:
|
|
334
|
+
if "No results found" in str(exc):
|
|
335
|
+
keynote_shots = []
|
|
336
|
+
else:
|
|
337
|
+
raise
|
|
338
|
+
if keynote_shots:
|
|
339
|
+
keynote_start = timeline_offset
|
|
340
|
+
for shot in keynote_shots:
|
|
341
|
+
timeline.add_inline(
|
|
342
|
+
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
343
|
+
)
|
|
344
|
+
timeline_offset += shot.end - shot.start
|
|
345
|
+
else:
|
|
346
|
+
keynote_start = None
|
|
347
|
+
|
|
348
|
+
try:
|
|
349
|
+
demo = event.search("product demo", search_type=SearchType.semantic)
|
|
350
|
+
demo_shots = demo.get_shots()[:5]
|
|
351
|
+
except InvalidRequestError as exc:
|
|
352
|
+
if "No results found" in str(exc):
|
|
353
|
+
demo_shots = []
|
|
354
|
+
else:
|
|
355
|
+
raise
|
|
356
|
+
if demo_shots:
|
|
357
|
+
demo_start = timeline_offset
|
|
358
|
+
for shot in demo_shots:
|
|
359
|
+
timeline.add_inline(
|
|
360
|
+
VideoAsset(asset_id=shot.video_id, start=shot.start, end=shot.end)
|
|
361
|
+
)
|
|
362
|
+
timeline_offset += shot.end - shot.start
|
|
363
|
+
else:
|
|
364
|
+
demo_start = None
|
|
365
|
+
|
|
366
|
+
# Overlay title card image
|
|
367
|
+
timeline.add_overlay(0, ImageAsset(
|
|
368
|
+
asset_id=title_img.id, width=100, height=100, x=80, y=20, duration=5
|
|
369
|
+
))
|
|
370
|
+
|
|
371
|
+
# Overlay section labels at the correct timeline offsets
|
|
372
|
+
if keynote_start is not None:
|
|
373
|
+
timeline.add_overlay(max(5, keynote_start), TextAsset(
|
|
374
|
+
text="Keynote Highlights",
|
|
375
|
+
duration=3,
|
|
376
|
+
style=TextStyle(fontsize=40, fontcolor="white", boxcolor="#0d1117"),
|
|
377
|
+
))
|
|
378
|
+
if demo_start is not None:
|
|
379
|
+
timeline.add_overlay(max(5, demo_start), TextAsset(
|
|
380
|
+
text="Demo Highlights",
|
|
381
|
+
duration=3,
|
|
382
|
+
style=TextStyle(fontsize=36, fontcolor="white", boxcolor="#0d1117"),
|
|
383
|
+
))
|
|
384
|
+
|
|
385
|
+
# Overlay background music
|
|
386
|
+
timeline.add_overlay(0, AudioAsset(
|
|
387
|
+
asset_id=music.id, fade_in_duration=3
|
|
388
|
+
))
|
|
389
|
+
|
|
390
|
+
# Stream the final recap
|
|
391
|
+
stream_url = timeline.generate_stream()
|
|
392
|
+
print(f"Event recap: {stream_url}")
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Tips
|
|
398
|
+
|
|
399
|
+
- **HLS compatibility**: Stream URLs return HLS manifests (`.m3u8`). They work in Safari natively, and in other browsers via hls.js or similar libraries.
|
|
400
|
+
- **On-demand compilation**: Streams are compiled server-side when requested. The first play may have a brief compilation delay; subsequent plays of the same composition are cached.
|
|
401
|
+
- **Caching**: Calling `video.generate_stream()` a second time without arguments returns the cached stream URL rather than recompiling.
|
|
402
|
+
- **Segment streams**: `video.generate_stream(timeline=[(start, end)])` is the fastest way to stream a specific clip without building a full `Timeline` object.
|
|
403
|
+
- **Inline vs overlay**: `add_inline()` only accepts `VideoAsset` and places assets sequentially on the main track. `add_overlay()` accepts `AudioAsset`, `ImageAsset`, and `TextAsset` and layers them on top at a given start time.
|
|
404
|
+
- **TextStyle defaults**: `TextStyle` defaults to `font='Sans'`, `fontcolor='black'`. Use `boxcolor` (not `bgcolor`) for background color on text.
|
|
405
|
+
- **Combine with generation**: Use `coll.generate_music(prompt, duration)` and `coll.generate_image(prompt, aspect_ratio)` to create assets for timeline compositions.
|
|
406
|
+
- **Playback**: `.play()` opens the stream URL in the default system browser. For programmatic use, work with the URL string directly.
|