kinemotion 0.47.0__tar.gz → 0.47.1__tar.gz
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.
- {kinemotion-0.47.0 → kinemotion-0.47.1}/CHANGELOG.md +8 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/PKG-INFO +1 -1
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/pyproject.toml +1 -0
- kinemotion-0.47.1/backend/src/kinemotion_backend/telemetry.py +100 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/pyproject.toml +1 -1
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/timing.py +1 -1
- {kinemotion-0.47.0 → kinemotion-0.47.1}/uv.lock +153 -1
- kinemotion-0.47.0/backend/src/kinemotion_backend/telemetry.py +0 -66
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.claude/settings.local.json +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.cursor/mcp.json +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.dockerignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.envrc +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.gitattributes +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/dependabot.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/pull_request_template.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/workflows/release.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.github/workflows/test.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.gitignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.mcp.json +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.readthedocs.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/.gitignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.serena/project.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.tool-versions +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/.vercelignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/CLAUDE.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/CONTRIBUTING.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/Dockerfile +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/GEMINI.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/LICENSE +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/SECURITY.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/.dockerignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/.env.example +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/Dockerfile +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/docs/setup.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/docs/tests.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/app.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/conftest.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/test_health.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/api/cmj.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/api/core.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/api/dropjump.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/api/overview.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/testing.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/type-hints.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/index.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/quick-start.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/reference/parameters.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/technical/framerate.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/docs/validation-status.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/examples/bulk/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/.editorconfig +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/.env.example +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/.gitattributes +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/.gitignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/index.html +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/package.json +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/App.test.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/App.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/UploadForm.test.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/hooks/useAnalysis.test.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/index.css +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/main.tsx +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/test/setup.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/vercel.json +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/vite.config.ts +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/frontend/yarn.lock +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/justfile +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/local_dev.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/mkdocs.yml +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/.gitignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/demos/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/presentation/speaker_script.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/requirements-docs.txt +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/samples/cmjs/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/debug_detection.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/README.md +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/list.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project/summary.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/project.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/sonar-project.properties +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/api.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/pipeline_utils.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cli/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/test_cli.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/conftest.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_cli_utils.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_otel_timing.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_pipeline_utils.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_pose.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_quality.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_timing.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_validation.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_cli.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.47.0 → kinemotion-0.47.1}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.47.1 (2025-12-12)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **core**: Ensure correct timing.py linting and type safety
|
|
15
|
+
([`84ea7cf`](https://github.com/feniix/kinemotion/commit/84ea7cf269c81299cf0939b0c28f83c51910a523))
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
## v0.47.0 (2025-12-12)
|
|
11
19
|
|
|
12
20
|
### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.47.
|
|
3
|
+
Version: 0.47.1
|
|
4
4
|
Summary: Video-based kinematic analysis for athletic performance
|
|
5
5
|
Project-URL: Homepage, https://github.com/feniix/kinemotion
|
|
6
6
|
Project-URL: Repository, https://github.com/feniix/kinemotion
|
|
@@ -33,6 +33,7 @@ dependencies = [
|
|
|
33
33
|
"opentelemetry-api>=1.20.0",
|
|
34
34
|
"opentelemetry-sdk>=1.20.0",
|
|
35
35
|
"opentelemetry-exporter-otlp>=1.20.0",
|
|
36
|
+
"opentelemetry-exporter-gcp-trace>=1.6.0",
|
|
36
37
|
"opentelemetry-instrumentation-fastapi>=0.40b0",
|
|
37
38
|
"opentelemetry-instrumentation-logging>=0.40b0",
|
|
38
39
|
# Local development: use editable install via `uv sync`
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Telemetry configuration for Kinemotion Backend.
|
|
2
|
+
|
|
3
|
+
Enables OpenTelemetry tracing and logging if OTEL_EXPORTER_OTLP_ENDPOINT is set.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
from fastapi import FastAPI
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def setup_telemetry(app: FastAPI) -> bool:
|
|
15
|
+
"""Initialize OpenTelemetry if configured.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
app: FastAPI application instance to instrument
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
True if telemetry was enabled, False otherwise.
|
|
22
|
+
"""
|
|
23
|
+
otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
24
|
+
enable_gcp = os.getenv("ENABLE_GCP_TRACE", "").lower() == "true"
|
|
25
|
+
|
|
26
|
+
if not otlp_endpoint and not enable_gcp:
|
|
27
|
+
logger.info("telemetry_disabled_no_endpoint")
|
|
28
|
+
return False
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
from opentelemetry import trace
|
|
32
|
+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
|
|
33
|
+
OTLPSpanExporter,
|
|
34
|
+
)
|
|
35
|
+
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
36
|
+
from opentelemetry.instrumentation.logging import LoggingInstrumentor
|
|
37
|
+
from opentelemetry.sdk.resources import Resource
|
|
38
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
39
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
40
|
+
except ImportError as e:
|
|
41
|
+
logger.warning(
|
|
42
|
+
"telemetry_dependencies_missing",
|
|
43
|
+
error=str(e),
|
|
44
|
+
message="Install opentelemetry dependencies to enable tracing",
|
|
45
|
+
)
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
logger.info("telemetry_initializing")
|
|
50
|
+
|
|
51
|
+
# resource = Resource.create(attributes={
|
|
52
|
+
# "service.name": "kinemotion-backend",
|
|
53
|
+
# "service.instance.id": f"kinemotion-{os.getpid()}",
|
|
54
|
+
# })
|
|
55
|
+
# Use default resource detection (env vars like OTEL_SERVICE_NAME)
|
|
56
|
+
resource = Resource.create()
|
|
57
|
+
|
|
58
|
+
# Configure Tracer
|
|
59
|
+
tracer_provider = TracerProvider(resource=resource)
|
|
60
|
+
|
|
61
|
+
span_processor = None
|
|
62
|
+
|
|
63
|
+
if enable_gcp:
|
|
64
|
+
try:
|
|
65
|
+
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
|
|
66
|
+
|
|
67
|
+
gcp_exporter = CloudTraceSpanExporter()
|
|
68
|
+
span_processor = BatchSpanProcessor(gcp_exporter)
|
|
69
|
+
logger.info("telemetry_gcp_exporter_configured")
|
|
70
|
+
except ImportError:
|
|
71
|
+
logger.error(
|
|
72
|
+
"telemetry_gcp_dependency_missing",
|
|
73
|
+
message="Install opentelemetry-exporter-gcp-trace",
|
|
74
|
+
)
|
|
75
|
+
return False
|
|
76
|
+
elif otlp_endpoint:
|
|
77
|
+
# OTLP Exporter (defaults to gRPC)
|
|
78
|
+
otlp_exporter = OTLPSpanExporter()
|
|
79
|
+
span_processor = BatchSpanProcessor(otlp_exporter)
|
|
80
|
+
logger.info("telemetry_otlp_exporter_configured", endpoint=otlp_endpoint)
|
|
81
|
+
|
|
82
|
+
if span_processor:
|
|
83
|
+
tracer_provider.add_span_processor(span_processor)
|
|
84
|
+
trace.set_tracer_provider(tracer_provider)
|
|
85
|
+
|
|
86
|
+
# Instrument FastAPI
|
|
87
|
+
FastAPIInstrumentor.instrument_app(app, tracer_provider=tracer_provider)
|
|
88
|
+
|
|
89
|
+
# Instrument Logging
|
|
90
|
+
LoggingInstrumentor().instrument(set_logging_format=True)
|
|
91
|
+
|
|
92
|
+
logger.info("telemetry_enabled")
|
|
93
|
+
return True
|
|
94
|
+
else:
|
|
95
|
+
logger.warning("telemetry_no_exporter_configured")
|
|
96
|
+
return False
|
|
97
|
+
|
|
98
|
+
except Exception as e:
|
|
99
|
+
logger.error("telemetry_initialization_failed", error=str(e), exc_info=True)
|
|
100
|
+
return False
|
|
@@ -55,7 +55,7 @@ class Tracer: # Dummy for type hints if actual Tracer is not available
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
if _otel_tracer_class:
|
|
58
|
-
Tracer = _otel_tracer_class # Override dummy if actual Tracer is available
|
|
58
|
+
Tracer = _otel_tracer_class # type: ignore # Override dummy if actual Tracer is available
|
|
59
59
|
|
|
60
60
|
# This _OPENTELEMETRY_AVAILABLE variable is assigned only once,
|
|
61
61
|
# after the try-except block
|
|
@@ -139,6 +139,15 @@ wheels = [
|
|
|
139
139
|
{ url = "https://files.pythonhosted.org/packages/8b/9a/da5e6cabf4da855d182fcdacf3573b69f30899e0e6c3e0d91ce6ad92ce74/botocore-1.42.5-py3-none-any.whl", hash = "sha256:6aa487f1876c881e2143f6a186b7d8faaf042fc05e0ba7421d821f145356a0c9", size = 14525346, upload-time = "2025-12-08T20:28:24.06Z" },
|
|
140
140
|
]
|
|
141
141
|
|
|
142
|
+
[[package]]
|
|
143
|
+
name = "cachetools"
|
|
144
|
+
version = "6.2.2"
|
|
145
|
+
source = { registry = "https://pypi.org/simple" }
|
|
146
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fb/44/ca1675be2a83aeee1886ab745b28cda92093066590233cc501890eb8417a/cachetools-6.2.2.tar.gz", hash = "sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6", size = 31571, upload-time = "2025-11-13T17:42:51.465Z" }
|
|
147
|
+
wheels = [
|
|
148
|
+
{ url = "https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl", hash = "sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace", size = 11503, upload-time = "2025-11-13T17:42:50.232Z" },
|
|
149
|
+
]
|
|
150
|
+
|
|
142
151
|
[[package]]
|
|
143
152
|
name = "certifi"
|
|
144
153
|
version = "2025.11.12"
|
|
@@ -660,6 +669,58 @@ wheels = [
|
|
|
660
669
|
{ url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168, upload-time = "2025-07-24T03:45:52.517Z" },
|
|
661
670
|
]
|
|
662
671
|
|
|
672
|
+
[[package]]
|
|
673
|
+
name = "google-api-core"
|
|
674
|
+
version = "2.28.1"
|
|
675
|
+
source = { registry = "https://pypi.org/simple" }
|
|
676
|
+
dependencies = [
|
|
677
|
+
{ name = "google-auth" },
|
|
678
|
+
{ name = "googleapis-common-protos" },
|
|
679
|
+
{ name = "proto-plus" },
|
|
680
|
+
{ name = "protobuf" },
|
|
681
|
+
{ name = "requests" },
|
|
682
|
+
]
|
|
683
|
+
sdist = { url = "https://files.pythonhosted.org/packages/61/da/83d7043169ac2c8c7469f0e375610d78ae2160134bf1b80634c482fa079c/google_api_core-2.28.1.tar.gz", hash = "sha256:2b405df02d68e68ce0fbc138559e6036559e685159d148ae5861013dc201baf8", size = 176759, upload-time = "2025-10-28T21:34:51.529Z" }
|
|
684
|
+
wheels = [
|
|
685
|
+
{ url = "https://files.pythonhosted.org/packages/ed/d4/90197b416cb61cefd316964fd9e7bd8324bcbafabf40eef14a9f20b81974/google_api_core-2.28.1-py3-none-any.whl", hash = "sha256:4021b0f8ceb77a6fb4de6fde4502cecab45062e66ff4f2895169e0b35bc9466c", size = 173706, upload-time = "2025-10-28T21:34:50.151Z" },
|
|
686
|
+
]
|
|
687
|
+
|
|
688
|
+
[package.optional-dependencies]
|
|
689
|
+
grpc = [
|
|
690
|
+
{ name = "grpcio" },
|
|
691
|
+
{ name = "grpcio-status" },
|
|
692
|
+
]
|
|
693
|
+
|
|
694
|
+
[[package]]
|
|
695
|
+
name = "google-auth"
|
|
696
|
+
version = "2.43.0"
|
|
697
|
+
source = { registry = "https://pypi.org/simple" }
|
|
698
|
+
dependencies = [
|
|
699
|
+
{ name = "cachetools" },
|
|
700
|
+
{ name = "pyasn1-modules" },
|
|
701
|
+
{ name = "rsa" },
|
|
702
|
+
]
|
|
703
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ff/ef/66d14cf0e01b08d2d51ffc3c20410c4e134a1548fc246a6081eae585a4fe/google_auth-2.43.0.tar.gz", hash = "sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483", size = 296359, upload-time = "2025-11-06T00:13:36.587Z" }
|
|
704
|
+
wheels = [
|
|
705
|
+
{ url = "https://files.pythonhosted.org/packages/6f/d1/385110a9ae86d91cc14c5282c61fe9f4dc41c0b9f7d423c6ad77038c4448/google_auth-2.43.0-py2.py3-none-any.whl", hash = "sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16", size = 223114, upload-time = "2025-11-06T00:13:35.209Z" },
|
|
706
|
+
]
|
|
707
|
+
|
|
708
|
+
[[package]]
|
|
709
|
+
name = "google-cloud-trace"
|
|
710
|
+
version = "1.17.0"
|
|
711
|
+
source = { registry = "https://pypi.org/simple" }
|
|
712
|
+
dependencies = [
|
|
713
|
+
{ name = "google-api-core", extra = ["grpc"] },
|
|
714
|
+
{ name = "google-auth" },
|
|
715
|
+
{ name = "grpcio" },
|
|
716
|
+
{ name = "proto-plus" },
|
|
717
|
+
{ name = "protobuf" },
|
|
718
|
+
]
|
|
719
|
+
sdist = { url = "https://files.pythonhosted.org/packages/5e/89/5ecbcf7d2d37ead01fc84e774bc758638855c630b32720fa58edcf9667ae/google_cloud_trace-1.17.0.tar.gz", hash = "sha256:68703bfc93718083f061d9130a3852e3181ec1b6b796b76856997c28f51b9595", size = 97995, upload-time = "2025-10-20T14:57:28.662Z" }
|
|
720
|
+
wheels = [
|
|
721
|
+
{ url = "https://files.pythonhosted.org/packages/c9/84/e6b776f0b5d68451be68d3d43efe8eacc677182709dd7e84c960668a9909/google_cloud_trace-1.17.0-py3-none-any.whl", hash = "sha256:975dc0c2a9b1d7644bca45d78a2c5011ab5c73e94bd6537203deda374f88f7b3", size = 104118, upload-time = "2025-10-20T14:55:23.108Z" },
|
|
722
|
+
]
|
|
723
|
+
|
|
663
724
|
[[package]]
|
|
664
725
|
name = "googleapis-common-protos"
|
|
665
726
|
version = "1.72.0"
|
|
@@ -725,6 +786,20 @@ wheels = [
|
|
|
725
786
|
{ url = "https://files.pythonhosted.org/packages/9e/00/7bd478cbb851c04a48baccaa49b75abaa8e4122f7d86da797500cccdd771/grpcio-1.76.0-cp312-cp312-win_amd64.whl", hash = "sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347", size = 4704003, upload-time = "2025-10-21T16:21:46.244Z" },
|
|
726
787
|
]
|
|
727
788
|
|
|
789
|
+
[[package]]
|
|
790
|
+
name = "grpcio-status"
|
|
791
|
+
version = "1.62.3"
|
|
792
|
+
source = { registry = "https://pypi.org/simple" }
|
|
793
|
+
dependencies = [
|
|
794
|
+
{ name = "googleapis-common-protos" },
|
|
795
|
+
{ name = "grpcio" },
|
|
796
|
+
{ name = "protobuf" },
|
|
797
|
+
]
|
|
798
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7c/d7/013ef01c5a1c2fd0932c27c904934162f69f41ca0f28396d3ffe4d386123/grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485", size = 13063, upload-time = "2024-08-06T00:37:08.003Z" }
|
|
799
|
+
wheels = [
|
|
800
|
+
{ url = "https://files.pythonhosted.org/packages/90/40/972271de05f9315c0d69f9f7ebbcadd83bc85322f538637d11bb8c67803d/grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8", size = 14448, upload-time = "2024-08-06T00:30:15.702Z" },
|
|
801
|
+
]
|
|
802
|
+
|
|
728
803
|
[[package]]
|
|
729
804
|
name = "h11"
|
|
730
805
|
version = "0.16.0"
|
|
@@ -971,7 +1046,7 @@ wheels = [
|
|
|
971
1046
|
|
|
972
1047
|
[[package]]
|
|
973
1048
|
name = "kinemotion"
|
|
974
|
-
version = "0.47.
|
|
1049
|
+
version = "0.47.1"
|
|
975
1050
|
source = { editable = "." }
|
|
976
1051
|
dependencies = [
|
|
977
1052
|
{ name = "click" },
|
|
@@ -1028,6 +1103,7 @@ dependencies = [
|
|
|
1028
1103
|
{ name = "httpx" },
|
|
1029
1104
|
{ name = "kinemotion" },
|
|
1030
1105
|
{ name = "opentelemetry-api" },
|
|
1106
|
+
{ name = "opentelemetry-exporter-gcp-trace" },
|
|
1031
1107
|
{ name = "opentelemetry-exporter-otlp" },
|
|
1032
1108
|
{ name = "opentelemetry-instrumentation-fastapi" },
|
|
1033
1109
|
{ name = "opentelemetry-instrumentation-logging" },
|
|
@@ -1058,6 +1134,7 @@ requires-dist = [
|
|
|
1058
1134
|
{ name = "httpx", specifier = ">=0.27.0" },
|
|
1059
1135
|
{ name = "kinemotion", editable = "." },
|
|
1060
1136
|
{ name = "opentelemetry-api", specifier = ">=1.20.0" },
|
|
1137
|
+
{ name = "opentelemetry-exporter-gcp-trace", specifier = ">=1.6.0" },
|
|
1061
1138
|
{ name = "opentelemetry-exporter-otlp", specifier = ">=1.20.0" },
|
|
1062
1139
|
{ name = "opentelemetry-instrumentation-fastapi", specifier = ">=0.40b0" },
|
|
1063
1140
|
{ name = "opentelemetry-instrumentation-logging", specifier = ">=0.40b0" },
|
|
@@ -1678,6 +1755,21 @@ wheels = [
|
|
|
1678
1755
|
{ url = "https://files.pythonhosted.org/packages/fb/1f/737dcdbc9fea2fa96c1b392ae47275165a7c641663fbb08a8d252968eed2/opentelemetry_api-1.27.0-py3-none-any.whl", hash = "sha256:953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7", size = 63970, upload-time = "2024-08-28T21:35:00.598Z" },
|
|
1679
1756
|
]
|
|
1680
1757
|
|
|
1758
|
+
[[package]]
|
|
1759
|
+
name = "opentelemetry-exporter-gcp-trace"
|
|
1760
|
+
version = "1.9.0"
|
|
1761
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1762
|
+
dependencies = [
|
|
1763
|
+
{ name = "google-cloud-trace" },
|
|
1764
|
+
{ name = "opentelemetry-api" },
|
|
1765
|
+
{ name = "opentelemetry-resourcedetector-gcp" },
|
|
1766
|
+
{ name = "opentelemetry-sdk" },
|
|
1767
|
+
]
|
|
1768
|
+
sdist = { url = "https://files.pythonhosted.org/packages/c3/15/7556d54b01fb894497f69a98d57faa9caa45ffa59896e0bba6847a7f0d15/opentelemetry_exporter_gcp_trace-1.9.0.tar.gz", hash = "sha256:c3fc090342f6ee32a0cc41a5716a6bb716b4422d19facefcb22dc4c6b683ece8", size = 18568, upload-time = "2025-02-04T19:45:08.185Z" }
|
|
1769
|
+
wheels = [
|
|
1770
|
+
{ url = "https://files.pythonhosted.org/packages/c0/cd/6d7fbad05771eb3c2bace20f6360ce5dac5ca751c6f2122853e43830c32e/opentelemetry_exporter_gcp_trace-1.9.0-py3-none-any.whl", hash = "sha256:0a8396e8b39f636eeddc3f0ae08ddb40c40f288bc8c5544727c3581545e77254", size = 13973, upload-time = "2025-02-04T19:44:59.148Z" },
|
|
1771
|
+
]
|
|
1772
|
+
|
|
1681
1773
|
[[package]]
|
|
1682
1774
|
name = "opentelemetry-exporter-otlp"
|
|
1683
1775
|
version = "1.27.0"
|
|
@@ -1810,6 +1902,21 @@ wheels = [
|
|
|
1810
1902
|
{ url = "https://files.pythonhosted.org/packages/94/56/3d2d826834209b19a5141eed717f7922150224d1a982385d19a9444cbf8d/opentelemetry_proto-1.27.0-py3-none-any.whl", hash = "sha256:b133873de5581a50063e1e4b29cdcf0c5e253a8c2d8dc1229add20a4c3830ace", size = 52464, upload-time = "2024-08-28T21:35:21.434Z" },
|
|
1811
1903
|
]
|
|
1812
1904
|
|
|
1905
|
+
[[package]]
|
|
1906
|
+
name = "opentelemetry-resourcedetector-gcp"
|
|
1907
|
+
version = "1.9.0a0"
|
|
1908
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1909
|
+
dependencies = [
|
|
1910
|
+
{ name = "opentelemetry-api" },
|
|
1911
|
+
{ name = "opentelemetry-sdk" },
|
|
1912
|
+
{ name = "requests" },
|
|
1913
|
+
{ name = "typing-extensions" },
|
|
1914
|
+
]
|
|
1915
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e1/86/f0693998817779802525a5bcc885a3cdb68d05b636bc6faae5c9ade4bee4/opentelemetry_resourcedetector_gcp-1.9.0a0.tar.gz", hash = "sha256:6860a6649d1e3b9b7b7f09f3918cc16b72aa0c0c590d2a72ea6e42b67c9a42e7", size = 20730, upload-time = "2025-02-04T19:45:10.693Z" }
|
|
1916
|
+
wheels = [
|
|
1917
|
+
{ url = "https://files.pythonhosted.org/packages/12/04/7e33228c88422a5518e1774a836c9ec68f10f51bde0f1d5dd5f3054e612a/opentelemetry_resourcedetector_gcp-1.9.0a0-py3-none-any.whl", hash = "sha256:4e5a0822b0f0d7647b7ceb282d7aa921dd7f45466540bd0a24f954f90db8fde8", size = 20378, upload-time = "2025-02-04T19:45:03.898Z" },
|
|
1918
|
+
]
|
|
1919
|
+
|
|
1813
1920
|
[[package]]
|
|
1814
1921
|
name = "opentelemetry-sdk"
|
|
1815
1922
|
version = "1.27.0"
|
|
@@ -2034,6 +2141,18 @@ wheels = [
|
|
|
2034
2141
|
{ url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" },
|
|
2035
2142
|
]
|
|
2036
2143
|
|
|
2144
|
+
[[package]]
|
|
2145
|
+
name = "proto-plus"
|
|
2146
|
+
version = "1.26.1"
|
|
2147
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2148
|
+
dependencies = [
|
|
2149
|
+
{ name = "protobuf" },
|
|
2150
|
+
]
|
|
2151
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f4/ac/87285f15f7cce6d4a008f33f1757fb5a13611ea8914eb58c3d0d26243468/proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012", size = 56142, upload-time = "2025-03-10T15:54:38.843Z" }
|
|
2152
|
+
wheels = [
|
|
2153
|
+
{ url = "https://files.pythonhosted.org/packages/4e/6d/280c4c2ce28b1593a19ad5239c8b826871fc6ec275c21afc8e1820108039/proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66", size = 50163, upload-time = "2025-03-10T15:54:37.335Z" },
|
|
2154
|
+
]
|
|
2155
|
+
|
|
2037
2156
|
[[package]]
|
|
2038
2157
|
name = "protobuf"
|
|
2039
2158
|
version = "4.25.8"
|
|
@@ -2048,6 +2167,27 @@ wheels = [
|
|
|
2048
2167
|
{ url = "https://files.pythonhosted.org/packages/0c/c1/6aece0ab5209981a70cd186f164c133fdba2f51e124ff92b73de7fd24d78/protobuf-4.25.8-py3-none-any.whl", hash = "sha256:15a0af558aa3b13efef102ae6e4f3efac06f1eea11afb3a57db2901447d9fb59", size = 156757, upload-time = "2025-05-28T14:22:24.135Z" },
|
|
2049
2168
|
]
|
|
2050
2169
|
|
|
2170
|
+
[[package]]
|
|
2171
|
+
name = "pyasn1"
|
|
2172
|
+
version = "0.6.1"
|
|
2173
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2174
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" }
|
|
2175
|
+
wheels = [
|
|
2176
|
+
{ url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" },
|
|
2177
|
+
]
|
|
2178
|
+
|
|
2179
|
+
[[package]]
|
|
2180
|
+
name = "pyasn1-modules"
|
|
2181
|
+
version = "0.4.2"
|
|
2182
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2183
|
+
dependencies = [
|
|
2184
|
+
{ name = "pyasn1" },
|
|
2185
|
+
]
|
|
2186
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" }
|
|
2187
|
+
wheels = [
|
|
2188
|
+
{ url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" },
|
|
2189
|
+
]
|
|
2190
|
+
|
|
2051
2191
|
[[package]]
|
|
2052
2192
|
name = "pycparser"
|
|
2053
2193
|
version = "2.23"
|
|
@@ -2412,6 +2552,18 @@ wheels = [
|
|
|
2412
2552
|
{ url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" },
|
|
2413
2553
|
]
|
|
2414
2554
|
|
|
2555
|
+
[[package]]
|
|
2556
|
+
name = "rsa"
|
|
2557
|
+
version = "4.9.1"
|
|
2558
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2559
|
+
dependencies = [
|
|
2560
|
+
{ name = "pyasn1" },
|
|
2561
|
+
]
|
|
2562
|
+
sdist = { url = "https://files.pythonhosted.org/packages/da/8a/22b7beea3ee0d44b1916c0c1cb0ee3af23b700b6da9f04991899d0c555d4/rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75", size = 29034, upload-time = "2025-04-16T09:51:18.218Z" }
|
|
2563
|
+
wheels = [
|
|
2564
|
+
{ url = "https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762", size = 34696, upload-time = "2025-04-16T09:51:17.142Z" },
|
|
2565
|
+
]
|
|
2566
|
+
|
|
2415
2567
|
[[package]]
|
|
2416
2568
|
name = "ruff"
|
|
2417
2569
|
version = "0.14.8"
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"""Telemetry configuration for Kinemotion Backend.
|
|
2
|
-
|
|
3
|
-
Enables OpenTelemetry tracing and logging if OTEL_EXPORTER_OTLP_ENDPOINT is set.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import logging
|
|
7
|
-
import os
|
|
8
|
-
|
|
9
|
-
from fastapi import FastAPI
|
|
10
|
-
from opentelemetry import trace
|
|
11
|
-
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
12
|
-
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
13
|
-
from opentelemetry.instrumentation.logging import LoggingInstrumentor
|
|
14
|
-
from opentelemetry.sdk.resources import Resource
|
|
15
|
-
from opentelemetry.sdk.trace import TracerProvider
|
|
16
|
-
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
17
|
-
|
|
18
|
-
logger = logging.getLogger(__name__)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def setup_telemetry(app: FastAPI) -> bool:
|
|
22
|
-
"""Initialize OpenTelemetry if configured.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
app: FastAPI application instance to instrument
|
|
26
|
-
|
|
27
|
-
Returns:
|
|
28
|
-
True if telemetry was enabled, False otherwise.
|
|
29
|
-
"""
|
|
30
|
-
otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
31
|
-
|
|
32
|
-
if not otlp_endpoint:
|
|
33
|
-
logger.info("telemetry_disabled_no_endpoint")
|
|
34
|
-
return False
|
|
35
|
-
|
|
36
|
-
logger.info("telemetry_initializing", endpoint=otlp_endpoint)
|
|
37
|
-
|
|
38
|
-
# resource = Resource.create(attributes={
|
|
39
|
-
# "service.name": "kinemotion-backend",
|
|
40
|
-
# "service.instance.id": f"kinemotion-{os.getpid()}",
|
|
41
|
-
# })
|
|
42
|
-
# Use default resource detection (env vars like OTEL_SERVICE_NAME)
|
|
43
|
-
resource = Resource.create()
|
|
44
|
-
|
|
45
|
-
# Configure Tracer
|
|
46
|
-
tracer_provider = TracerProvider(resource=resource)
|
|
47
|
-
|
|
48
|
-
# OTLP Exporter (defaults to gRPC)
|
|
49
|
-
# The endpoint env var is handled automatically by the exporter if not passed,
|
|
50
|
-
# but since we check it manually, we can trust the SDK standard env vars too.
|
|
51
|
-
# We just instantiate it.
|
|
52
|
-
otlp_exporter = OTLPSpanExporter()
|
|
53
|
-
|
|
54
|
-
span_processor = BatchSpanProcessor(otlp_exporter)
|
|
55
|
-
tracer_provider.add_span_processor(span_processor)
|
|
56
|
-
|
|
57
|
-
trace.set_tracer_provider(tracer_provider)
|
|
58
|
-
|
|
59
|
-
# Instrument FastAPI
|
|
60
|
-
FastAPIInstrumentor.instrument_app(app, tracer_provider=tracer_provider)
|
|
61
|
-
|
|
62
|
-
# Instrument Logging
|
|
63
|
-
LoggingInstrumentor().instrument(set_logging_format=True)
|
|
64
|
-
|
|
65
|
-
logger.info("telemetry_enabled")
|
|
66
|
-
return True
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/api/supabase-authentication-setup-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-quick-start-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/codebase/codebase-architecture-overview.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/backend-code-coverage-analysis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/claude-code-hook-configuration.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/hook-complete-audit-summary.md
RENAMED
|
File without changes
|
{kinemotion-0.47.0 → kinemotion-0.47.1}/.basic-memory/development/hook-configuration-audit.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|