gitextract_zfonubvk/ ├── .editorconfig ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── SUPPORT.md ├── .gitignore ├── .pre-commit-config.yaml ├── AUTHORS ├── CODE_OF_CONDUCT.md ├── Dockerfile ├── Jenkinsfile ├── LICENSE ├── README.md ├── api/ │ ├── account/ │ │ ├── account_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── endpoints/ │ │ │ ├── __init__.py │ │ │ ├── change_email_address.py │ │ │ ├── change_password.py │ │ │ ├── city.py │ │ │ ├── country.py │ │ │ ├── defaults.py │ │ │ ├── device.py │ │ │ ├── device_count.py │ │ │ ├── geography.py │ │ │ ├── membership.py │ │ │ ├── pairing_code.py │ │ │ ├── preferences.py │ │ │ ├── region.py │ │ │ ├── skill_oauth.py │ │ │ ├── skill_settings.py │ │ │ ├── skills.py │ │ │ ├── software_update.py │ │ │ ├── ssh_key_validator.py │ │ │ ├── timezone.py │ │ │ ├── verify_email_address.py │ │ │ ├── voice_endpoint.py │ │ │ └── wake_word_endpoint.py │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ └── features/ │ │ │ ├── add_device.feature │ │ │ ├── agreements.feature │ │ │ ├── authentication.feature │ │ │ ├── environment.py │ │ │ ├── pantacor_update.feature │ │ │ ├── profile.feature │ │ │ ├── remove_account.feature │ │ │ └── steps/ │ │ │ ├── add_device.py │ │ │ ├── agreements.py │ │ │ ├── authentication.py │ │ │ ├── common.py │ │ │ ├── pantacor_update.py │ │ │ ├── profile.py │ │ │ └── remove_account.py │ │ └── uwsgi.ini │ ├── market/ │ │ ├── market_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── endpoints/ │ │ │ ├── __init__.py │ │ │ ├── available_skills.py │ │ │ ├── skill_detail.py │ │ │ ├── skill_install.py │ │ │ └── skill_install_status.py │ │ ├── pyproject.toml │ │ ├── swagger.yaml │ │ └── uwsgi.ini │ ├── precise/ │ │ ├── precise_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── endpoints/ │ │ │ ├── __init__.py │ │ │ ├── audio_file.py │ │ │ ├── designation.py │ │ │ └── tag.py │ │ ├── pyproject.toml │ │ └── uwsgi.ini │ ├── public/ │ │ ├── __init__.py │ │ ├── public_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── endpoints/ │ │ │ ├── __init__.py │ │ │ ├── audio_transcription.py │ │ │ ├── device.py │ │ │ ├── device_activate.py │ │ │ ├── device_code.py │ │ │ ├── device_email.py │ │ │ ├── device_location.py │ │ │ ├── device_metrics.py │ │ │ ├── device_oauth.py │ │ │ ├── device_pantacor.py │ │ │ ├── device_refresh_token.py │ │ │ ├── device_setting.py │ │ │ ├── device_skill.py │ │ │ ├── device_skill_manifest.py │ │ │ ├── device_skill_settings.py │ │ │ ├── device_subscription.py │ │ │ ├── geolocation.py │ │ │ ├── google_stt.py │ │ │ ├── oauth_callback.py │ │ │ ├── open_weather_map.py │ │ │ ├── premium_voice.py │ │ │ ├── stripe_webhook.py │ │ │ ├── wake_word_file.py │ │ │ ├── wolfram_alpha.py │ │ │ ├── wolfram_alpha_simple.py │ │ │ ├── wolfram_alpha_spoken.py │ │ │ └── wolfram_alpha_v2.py │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ └── features/ │ │ │ ├── device_email.feature │ │ │ ├── device_location.feature │ │ │ ├── device_metrics.feature │ │ │ ├── device_pairing.feature │ │ │ ├── device_refresh_token.feature │ │ │ ├── device_skill_manifest.feature │ │ │ ├── device_skill_settings.feature │ │ │ ├── device_subscription.feature │ │ │ ├── environment.py │ │ │ ├── get_device.feature │ │ │ ├── get_device_settings.feature │ │ │ ├── steps/ │ │ │ │ ├── common.py │ │ │ │ ├── device_email.py │ │ │ │ ├── device_location.py │ │ │ │ ├── device_metrics.py │ │ │ │ ├── device_pairing.py │ │ │ │ ├── device_refresh_token.py │ │ │ │ ├── device_skill_manifest.py │ │ │ │ ├── device_skill_settings.py │ │ │ │ ├── get_device.py │ │ │ │ ├── get_device_settings.py │ │ │ │ ├── get_device_subscription.py │ │ │ │ ├── resources/ │ │ │ │ │ └── test_stt.flac │ │ │ │ ├── transcribe_audio.py │ │ │ │ ├── wake_word_file.py │ │ │ │ └── wolfram_alpha.py │ │ │ ├── transcribe_audio.feature │ │ │ ├── wake_word_file_upload.feature │ │ │ └── wolfram_alpha.feature │ │ └── uwsgi.ini │ └── sso/ │ ├── Dockerfile │ ├── pyproject.toml │ ├── sso_api/ │ │ ├── __init__.py │ │ ├── api.py │ │ └── endpoints/ │ │ ├── __init__.py │ │ ├── authenticate_internal.py │ │ ├── github_token.py │ │ ├── logout.py │ │ ├── password_change.py │ │ ├── password_reset.py │ │ ├── validate_federated.py │ │ └── validate_token.py │ ├── tests/ │ │ └── features/ │ │ ├── add_account.feature │ │ ├── agreements.feature │ │ ├── environment.py │ │ ├── federated_login.feature │ │ ├── internal_login.feature │ │ ├── logout.feature │ │ ├── password_change.feature │ │ └── steps/ │ │ ├── add_account.py │ │ ├── agreements.py │ │ ├── common.py │ │ ├── login.py │ │ ├── logout.py │ │ └── password_change.py │ └── uwsgi.ini ├── batch/ │ ├── job_scheduler/ │ │ ├── __init__.py │ │ └── jobs.py │ ├── pyproject.toml │ └── script/ │ ├── __init__.py │ ├── daily_report.py │ ├── delete_wake_word_files.py │ ├── designate_wake_word_files.py │ ├── load_skill_display_data.py │ ├── move_wake_word_files.py │ ├── parse_core_metrics.py │ ├── partition_api_metrics.py │ ├── test_scheduler.py │ └── update_device_last_contact.py ├── db/ │ ├── mycroft/ │ │ ├── account_schema/ │ │ │ ├── create_schema.sql │ │ │ ├── data/ │ │ │ │ └── membership.sql │ │ │ ├── grants.sql │ │ │ └── tables/ │ │ │ ├── account.sql │ │ │ ├── account_agreement.sql │ │ │ ├── account_membership.sql │ │ │ ├── agreement.sql │ │ │ └── membership.sql │ │ ├── create_extensions.sql │ │ ├── create_mycroft_db.sql │ │ ├── create_roles.sql │ │ ├── create_template_db.sql │ │ ├── device_schema/ │ │ │ ├── create_schema.sql │ │ │ ├── data/ │ │ │ │ └── text_to_speech.sql │ │ │ ├── get_device_defaults_for_city.sql │ │ │ ├── get_device_geographies_for_city.sql │ │ │ ├── grants.sql │ │ │ └── tables/ │ │ │ ├── account_defaults.sql │ │ │ ├── account_preferences.sql │ │ │ ├── category.sql │ │ │ ├── device.sql │ │ │ ├── device_skill.sql │ │ │ ├── geography.sql │ │ │ ├── pantacor_config.sql │ │ │ ├── skill_setting.sql │ │ │ ├── text_to_speech.sql │ │ │ ├── wake_word.sql │ │ │ └── wake_word_settings.sql │ │ ├── drop_extensions.sql │ │ ├── drop_mycroft_db.sql │ │ ├── drop_roles.sql │ │ ├── drop_template_db.sql │ │ ├── geography_schema/ │ │ │ ├── create_schema.sql │ │ │ ├── delete_duplicate_cities.sql │ │ │ ├── get_duplicated_cities.sql │ │ │ ├── grants.sql │ │ │ └── tables/ │ │ │ ├── city.sql │ │ │ ├── country.sql │ │ │ ├── region.sql │ │ │ └── timezone.sql │ │ ├── metric_schema/ │ │ │ ├── create_schema.sql │ │ │ ├── grants.sql │ │ │ └── tables/ │ │ │ ├── account_activity.sql │ │ │ ├── api.sql │ │ │ ├── api_history.sql │ │ │ ├── core.sql │ │ │ ├── core_interaction.sql │ │ │ ├── job.sql │ │ │ ├── stt_engine.sql │ │ │ └── stt_transcription.sql │ │ ├── skill_schema/ │ │ │ ├── create_schema.sql │ │ │ ├── grants.sql │ │ │ └── tables/ │ │ │ ├── display.sql │ │ │ ├── oauth_credential.sql │ │ │ ├── oauth_token.sql │ │ │ ├── settings_display.sql │ │ │ └── skill.sql │ │ ├── tagging_schema/ │ │ │ ├── create_schema.sql │ │ │ ├── grants.sql │ │ │ └── tables/ │ │ │ ├── file_location.sql │ │ │ ├── session.sql │ │ │ ├── tag.sql │ │ │ ├── tag_value.sql │ │ │ ├── tagger.sql │ │ │ ├── wake_word_file.sql │ │ │ ├── wake_word_file_designation.sql │ │ │ └── wake_word_file_tag.sql │ │ ├── types/ │ │ │ ├── agreement_enum.sql │ │ │ ├── cateogory_enum.sql │ │ │ ├── core_version_enum.sql │ │ │ ├── date_format_enum.sql │ │ │ ├── measurement_system_enum.sql │ │ │ ├── membership_type_enum.sql │ │ │ ├── payment_method_enum.sql │ │ │ ├── tagger_type_enum.sql │ │ │ ├── tagging_file_origin_enum.sql │ │ │ ├── tagging_file_status_enum.sql │ │ │ ├── time_format_enum.sql │ │ │ └── tts_engine_enum.sql │ │ ├── versions/ │ │ │ └── 2020.9.1.sql │ │ └── wake_word_schema/ │ │ ├── create_schema.sql │ │ ├── grants.sql │ │ └── tables/ │ │ ├── pocketsphinx_settings.sql │ │ └── wake_word.sql │ ├── pyproject.toml │ └── scripts/ │ ├── __init__.py │ ├── bootstrap_mycroft_db.py │ ├── neo4j-postgres.py │ ├── queries.cypher │ └── remove_duplicate_cities.py └── shared/ ├── Dockerfile ├── MANIFEST.in ├── pyproject.toml ├── selene/ │ ├── __init__.py │ ├── api/ │ │ ├── __init__.py │ │ ├── base_config.py │ │ ├── base_endpoint.py │ │ ├── blueprint.py │ │ ├── endpoints/ │ │ │ ├── __init__.py │ │ │ ├── account.py │ │ │ ├── agreements.py │ │ │ ├── password_change.py │ │ │ └── validate_email.py │ │ ├── etag.py │ │ ├── pantacor.py │ │ ├── public_endpoint.py │ │ └── response.py │ ├── batch/ │ │ ├── __init__.py │ │ └── base.py │ ├── data/ │ │ ├── __init__.py │ │ ├── account/ │ │ │ ├── __init__.py │ │ │ ├── entity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account.py │ │ │ │ ├── agreement.py │ │ │ │ ├── membership.py │ │ │ │ └── skill.py │ │ │ └── repository/ │ │ │ ├── __init__.py │ │ │ ├── account.py │ │ │ ├── agreement.py │ │ │ ├── membership.py │ │ │ ├── skill.py │ │ │ └── sql/ │ │ │ ├── add_account.sql │ │ │ ├── add_account_agreement.sql │ │ │ ├── add_account_membership.sql │ │ │ ├── add_agreement.sql │ │ │ ├── add_membership.sql │ │ │ ├── change_email_address.sql │ │ │ ├── change_password.sql │ │ │ ├── daily_report.sql │ │ │ ├── delete_agreement.sql │ │ │ ├── delete_membership.sql │ │ │ ├── end_membership.sql │ │ │ ├── expire_account_agreement.sql │ │ │ ├── expire_agreement.sql │ │ │ ├── get_account.sql │ │ │ ├── get_account_by_device_id.sql │ │ │ ├── get_account_skills.sql │ │ │ ├── get_active_membership_by_account_id.sql │ │ │ ├── get_active_membership_by_payment_account_id.sql │ │ │ ├── get_agreement_content_id.sql │ │ │ ├── get_current_agreements.sql │ │ │ ├── get_membership_by_type.sql │ │ │ ├── get_membership_types.sql │ │ │ ├── remove_account.sql │ │ │ ├── update_last_activity_ts.sql │ │ │ └── update_username.sql │ │ ├── device/ │ │ │ ├── __init__.py │ │ │ ├── entity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── default.py │ │ │ │ ├── device.py │ │ │ │ ├── device_skill.py │ │ │ │ ├── geography.py │ │ │ │ ├── preference.py │ │ │ │ └── text_to_speech.py │ │ │ └── repository/ │ │ │ ├── __init__.py │ │ │ ├── default.py │ │ │ ├── device.py │ │ │ ├── device_skill.py │ │ │ ├── geography.py │ │ │ ├── preference.py │ │ │ ├── setting.py │ │ │ ├── sql/ │ │ │ │ ├── add_device.sql │ │ │ │ ├── add_geography.sql │ │ │ │ ├── add_manifest_skill.sql │ │ │ │ ├── add_text_to_speech.sql │ │ │ │ ├── delete_device_skill.sql │ │ │ │ ├── get_account_defaults.sql │ │ │ │ ├── get_account_device_count.sql │ │ │ │ ├── get_account_geographies.sql │ │ │ │ ├── get_account_preferences.sql │ │ │ │ ├── get_all_device_ids.sql │ │ │ │ ├── get_device_by_id.sql │ │ │ │ ├── get_device_settings_by_device_id.sql │ │ │ │ ├── get_device_skill_manifest.sql │ │ │ │ ├── get_devices_by_account_id.sql │ │ │ │ ├── get_location_by_device_id.sql │ │ │ │ ├── get_open_dataset_agreement_by_device_id.sql │ │ │ │ ├── get_settings_display_usage.sql │ │ │ │ ├── get_skill_manifest_for_account.sql │ │ │ │ ├── get_skill_settings_for_account.sql │ │ │ │ ├── get_skill_settings_for_device.sql │ │ │ │ ├── get_voices.sql │ │ │ │ ├── remove_device.sql │ │ │ │ ├── remove_manifest_skill.sql │ │ │ │ ├── remove_text_to_speech.sql │ │ │ │ ├── update_device_from_account.sql │ │ │ │ ├── update_device_from_core.sql │ │ │ │ ├── update_device_skill_settings.sql │ │ │ │ ├── update_last_contact_ts.sql │ │ │ │ ├── update_pantacor_config.sql │ │ │ │ ├── update_skill_manifest.sql │ │ │ │ ├── update_skill_settings.sql │ │ │ │ ├── upsert_defaults.sql │ │ │ │ ├── upsert_device_skill_settings.sql │ │ │ │ ├── upsert_pantacor_config.sql │ │ │ │ └── upsert_preferences.sql │ │ │ └── text_to_speech.py │ │ ├── geography/ │ │ │ ├── __init__.py │ │ │ ├── entity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── city.py │ │ │ │ ├── country.py │ │ │ │ ├── region.py │ │ │ │ └── timezone.py │ │ │ └── repository/ │ │ │ ├── __init__.py │ │ │ ├── city.py │ │ │ ├── country.py │ │ │ ├── region.py │ │ │ ├── sql/ │ │ │ │ ├── get_biggest_city_in_country.sql │ │ │ │ ├── get_biggest_city_in_region.sql │ │ │ │ ├── get_cities_by_region.sql │ │ │ │ ├── get_countries.sql │ │ │ │ ├── get_geographic_location_by_city.sql │ │ │ │ ├── get_regions_by_country.sql │ │ │ │ └── get_timezones_by_country.sql │ │ │ └── timezone.py │ │ ├── metric/ │ │ │ ├── __init__.py │ │ │ ├── entity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account_activity.py │ │ │ │ ├── api.py │ │ │ │ ├── core.py │ │ │ │ ├── job.py │ │ │ │ └── stt.py │ │ │ └── repository/ │ │ │ ├── __init__.py │ │ │ ├── account_activity.py │ │ │ ├── api.py │ │ │ ├── core.py │ │ │ ├── job.py │ │ │ ├── sql/ │ │ │ │ ├── add_account_activity.sql │ │ │ │ ├── add_api_metric.sql │ │ │ │ ├── add_core_interaction.sql │ │ │ │ ├── add_core_metric.sql │ │ │ │ ├── add_job_metric.sql │ │ │ │ ├── add_tts_transcription_metric.sql │ │ │ │ ├── create_api_metric_partition.sql │ │ │ │ ├── create_api_metric_partition_index.sql │ │ │ │ ├── delete_account_activity_date.sql │ │ │ │ ├── delete_api_metrics_by_date.sql │ │ │ │ ├── delete_stt_transcription_by_date.sql │ │ │ │ ├── get_account_activity_by_date.sql │ │ │ │ ├── get_api_metrics_for_date.sql │ │ │ │ ├── get_core_metric_by_device.sql │ │ │ │ ├── get_core_timing_metrics_by_date.sql │ │ │ │ ├── get_tts_transcription_by_account.sql │ │ │ │ ├── increment_accounts_added.sql │ │ │ │ ├── increment_accounts_deleted.sql │ │ │ │ ├── increment_activity.sql │ │ │ │ ├── increment_members_added.sql │ │ │ │ ├── increment_members_expired.sql │ │ │ │ ├── increment_open_dataset_added.sql │ │ │ │ └── increment_open_dataset_deleted.sql │ │ │ └── stt.py │ │ ├── repository_base.py │ │ ├── skill/ │ │ │ ├── __init__.py │ │ │ ├── entity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── display.py │ │ │ │ ├── skill.py │ │ │ │ └── skill_setting.py │ │ │ └── repository/ │ │ │ ├── __init__.py │ │ │ ├── display.py │ │ │ ├── setting.py │ │ │ ├── settings_display.py │ │ │ ├── skill.py │ │ │ └── sql/ │ │ │ ├── add_device_skill.sql │ │ │ ├── add_settings_display.sql │ │ │ ├── add_skill.sql │ │ │ ├── delete_device_skill.sql │ │ │ ├── delete_settings_display.sql │ │ │ ├── get_display_data_for_skill.sql │ │ │ ├── get_display_data_for_skills.sql │ │ │ ├── get_settings_definition_by_gid.sql │ │ │ ├── get_settings_display_id.sql │ │ │ ├── get_settings_for_skill_family.sql │ │ │ ├── get_skill_by_global_id.sql │ │ │ ├── get_skill_setting_by_device.sql │ │ │ ├── get_skills_for_account.sql │ │ │ ├── remove_skill_by_gid.sql │ │ │ ├── update_device_skill_settings.sql │ │ │ └── upsert_skill_display_data.sql │ │ ├── tagging/ │ │ │ ├── __init__.py │ │ │ ├── entity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── file_designation.py │ │ │ │ ├── file_location.py │ │ │ │ ├── file_tag.py │ │ │ │ ├── tag.py │ │ │ │ ├── tag_value.py │ │ │ │ ├── tagger.py │ │ │ │ └── wake_word_file.py │ │ │ └── repository/ │ │ │ ├── __init__.py │ │ │ ├── file_designation.py │ │ │ ├── file_location.py │ │ │ ├── file_tag.py │ │ │ ├── session.py │ │ │ ├── sql/ │ │ │ │ ├── add_file_location.sql │ │ │ │ ├── add_session.sql │ │ │ │ ├── add_tagger.sql │ │ │ │ ├── add_tagging_session.sql │ │ │ │ ├── add_wake_word_file.sql │ │ │ │ ├── add_wake_word_file_designation.sql │ │ │ │ ├── add_wake_word_file_tag.sql │ │ │ │ ├── change_account_file_status.sql │ │ │ │ ├── change_file_location.sql │ │ │ │ ├── change_file_status.sql │ │ │ │ ├── get_active_session.sql │ │ │ │ ├── get_designation_candidates.sql │ │ │ │ ├── get_designations_from_date.sql │ │ │ │ ├── get_file_location_id.sql │ │ │ │ ├── get_taggable_wake_word_file.sql │ │ │ │ ├── get_tagger_by_entity.sql │ │ │ │ ├── get_tags.sql │ │ │ │ ├── get_wake_word_files.sql │ │ │ │ ├── remove_file_location.sql │ │ │ │ ├── remove_wake_word_file.sql │ │ │ │ └── update_session_end_ts.sql │ │ │ ├── tag.py │ │ │ ├── tagger.py │ │ │ └── wake_word_file.py │ │ └── wake_word/ │ │ ├── __init__.py │ │ ├── entity/ │ │ │ ├── __init__.py │ │ │ ├── pocketsphinx_settings.py │ │ │ └── wake_word.py │ │ └── repository/ │ │ ├── __init__.py │ │ ├── sql/ │ │ │ ├── add_wake_word.sql │ │ │ ├── get_wake_word_id.sql │ │ │ ├── get_wake_words_for_web.sql │ │ │ └── remove_wake_word.sql │ │ └── wake_word.py │ ├── testing/ │ │ ├── __init__.py │ │ ├── account.py │ │ ├── account_activity.py │ │ ├── account_geography.py │ │ ├── account_preference.py │ │ ├── agreement.py │ │ ├── api.py │ │ ├── device.py │ │ ├── device_skill.py │ │ ├── membership.py │ │ ├── skill.py │ │ ├── tagging.py │ │ ├── test_db.py │ │ ├── text_to_speech.py │ │ └── wake_word.py │ └── util/ │ ├── __init__.py │ ├── auth.py │ ├── cache.py │ ├── db/ │ │ ├── __init__.py │ │ ├── connection.py │ │ ├── connection_pool.py │ │ ├── cursor.py │ │ └── transaction.py │ ├── email/ │ │ ├── __init__.py │ │ ├── email.py │ │ └── templates/ │ │ ├── account_not_found.html │ │ ├── base.html │ │ ├── email_change.html │ │ ├── email_verification.html │ │ ├── metrics.html │ │ ├── password_change.html │ │ └── reset_password.html │ ├── exceptions.py │ ├── github.py │ ├── log.py │ ├── payment/ │ │ ├── __init__.py │ │ └── stripe.py │ └── ssh/ │ ├── __init__.py │ ├── sftp.py │ └── ssh.py └── setup.py