{"id":49012983,"url":"https://github.com/samplec0de/alice-ticktick","last_synced_at":"2026-04-19T00:16:17.243Z","repository":{"id":341286882,"uuid":"1169510198","full_name":"samplec0de/alice-ticktick","owner":"samplec0de","description":"Навык Яндекс Алисы для управления задачами в TickTick голосом","archived":false,"fork":false,"pushed_at":"2026-03-14T23:34:39.000Z","size":725,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-15T09:26:51.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/samplec0de.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-28T19:49:48.000Z","updated_at":"2026-03-14T23:21:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/samplec0de/alice-ticktick","commit_stats":null,"previous_names":["samplec0de/alice-ticktick"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/samplec0de/alice-ticktick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samplec0de%2Falice-ticktick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samplec0de%2Falice-ticktick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samplec0de%2Falice-ticktick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samplec0de%2Falice-ticktick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samplec0de","download_url":"https://codeload.github.com/samplec0de/alice-ticktick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samplec0de%2Falice-ticktick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31989325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"ssl_error","status_checked_at":"2026-04-18T20:23:29.375Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-19T00:16:14.165Z","updated_at":"2026-04-19T00:16:16.404Z","avatar_url":"https://github.com/samplec0de.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ТикТик — навык Алисы для TickTick\n\nГолосовое управление задачами и привычками [TickTick](https://ticktick.com) через [Яндекс Алису](https://alice.yandex.ru).\n\n\u003e «Алиса, запусти навык ТикТик»\n\n## Возможности\n\n- Создание, редактирование, удаление задач голосом\n- Просмотр задач на сегодня, завтра и произвольную дату\n- Фильтрация по приоритету и диапазону дат\n- Просроченные задачи\n- Нечёткий поиск (смешанный рус/англ текст)\n- Подзадачи и чеклисты\n- Повторяющиеся задачи\n- Встречи и события с длительностью\n- Напоминания\n- Приоритеты\n- Проекты: просмотр, создание, фильтрация задач\n- Перемещение задач между проектами\n- Утренний и вечерний брифинг\n\n## Примеры голосовых команд\n\n### Создание задач\n\n```\nсоздай задачу купить молоко\nдобавь задачу позвонить маме на завтра\nсоздай задачу отчёт с приоритетом высокий\nзапиши задачу купить подарок на 5 марта\nсоздай задачу презентация в проект работа\n```\n\n### Задачи с длительностью (встречи)\n\n```\nсоздай встречу совещание завтра в 10 на 2 часа\nдобавь встречу ланч завтра в 12 на час\nсоздай встречу стендап завтра в 10 на полчаса\nсоздай задачу митинг с 14 до 16\n```\n\n\n### Повторяющиеся задачи\n\n```\nсоздай задачу зарядка каждый день\nсоздай задачу совещание каждый понедельник\nсоздай задачу отчёт ежемесячно\nсоздай задачу уборка каждые 2 недели\nсоздай задачу оплата каждое 15 число\n```\n\n### Задачи с напоминаниями\n\n```\nсоздай задачу встреча с напоминанием за час\nсоздай задачу звонок с напоминанием за 30 минут\n```\n\n### Просмотр задач\n\n```\nкакие задачи на сегодня\nчто у меня на завтра\nпокажи задачи на послезавтра\nчто запланировано на 5 марта\n```\n\n### Просроченные задачи\n\n```\nкакие задачи просрочены\nчто я пропустил\nпросроченные задачи\n```\n\n### Поиск\n\n```\nнайди задачу купить молоко\nпоищи задачу отчёт\nгде задача про презентацию\n```\n\n### Завершение задач\n\n```\nотметь задачу купить молоко\nвыполни задачу позвонить маме\nзаверши задачу написать отчёт\n```\n\n### Редактирование задач\n\n```\nперенеси задачу купить молоко на завтра\nпоменяй приоритет задачи отчёт на высокий\nпереименуй задачу купить хлеб в купить батон\nизмени задачу презентация на понедельник\nперемести задачу отчёт в проект работа\n```\n\n### Повторение и напоминания у существующих задач\n\n```\nпоменяй повторение задачи зарядка на ежедневно\nубери повторение у задачи уборка\nпоставь напоминание задачи встреча за 30 минут\nубери напоминание у задачи звонок\nнапомни о задаче встреча за час\n```\n\n### Удаление задач\n\n```\nудали задачу купить молоко\nубери задачу написать отчёт\nсотри задачу оплатить счёт\n```\n\n### Фильтрация задач\n\n```\nпокажи задачи на эту неделю с высоким приоритетом\nкакие срочные задачи на завтра\nзадачи с низким приоритетом на следующую неделю\n```\n\n### Проекты\n\n```\nпокажи мои проекты\nзадачи в проекте работа\nсоздай проект учёба\n```\n\n### Брифинги\n\n```\nдоброе утро\nвечерний брифинг\nчто у меня на сегодня кратко\n```\n\n### Подзадачи\n\n```\nдобавь подзадачу купить муку к задаче испечь торт\nсоздай подзадачу написать введение к задаче отчёт\nпокажи подзадачи задачи подготовить отчёт\nкакие подзадачи у задачи релиз\n```\n\n### Чеклисты\n\n```\nдобавь пункт молоко в чеклист задачи покупки\nдобавь хлеб в список задачи магазин\nпокажи чеклист задачи поход в магазин\nотметь пункт молоко в задаче покупки\nудали пункт хлеб из чеклиста задачи магазин\n```\n\n## Установка\n\n```bash\nuv sync --extra dev\n```\n\n## Разработка\n\n```bash\nuv run pytest -v              # тесты\nuv run ruff check .           # линтинг\nuv run ruff format .          # форматирование\nuv run mypy alice_ticktick/   # проверка типов\n```\n\n## E2E тестирование\n\nE2E тесты проверяют полный пайплайн: **Яндекс NLU → webhook → TickTick API**.\nТесты работают через внутренний API страницы тестирования Яндекс Диалогов (httpx, без браузера).\n\n### Первый запуск (авторизация)\n\n```bash\nuv sync --extra dev --extra e2e\npython -m playwright install chromium\nuv run pytest tests/e2e/ --setup-yandex-auth -v -s\n```\n\nОткроется браузер → залогиньтесь в Яндексе → браузер закроется автоматически.\nCookies сохранятся в `.yandex_auth/` (в `.gitignore`).\nФлаг `-s` нужен, чтобы видеть инструкции в терминале.\n\n### Последующие запуски\n\n```bash\nuv run pytest -m e2e -v                # все 116 E2E тестов\nuv run pytest tests/e2e/test_e2e_misc.py -v  # только один файл\nuv run pytest -m \"not e2e\" -v          # только unit тесты\n```\n\n### Если cookies протухли\n\n```bash\nuv run pytest tests/e2e/ --setup-yandex-auth -v -s\n```\n\n### Структура тестов\n\n| Файл | Раздел | Тестов |\n|------|--------|--------|\n| `test_e2e_greeting.py` | Приветствие | 1 |\n| `test_e2e_create.py` | Создание задач | 23 |\n| `test_e2e_list.py` | Просмотр + фильтрация + просроченные | 13 |\n| `test_e2e_complete.py` | Завершение | 5 |\n| `test_e2e_search.py` | Поиск | 4 |\n| `test_e2e_edit.py` | Редактирование | 16 |\n| `test_e2e_delete.py` | Удаление (multi-turn) | 4 |\n| `test_e2e_recurring.py` | Повторяющиеся | 8 |\n| `test_e2e_reminders.py` | Напоминания | 5 |\n| `test_e2e_subtasks.py` | Подзадачи | 4 |\n| `test_e2e_checklists.py` | Чеклисты | 6 |\n| `test_e2e_projects.py` | Проекты | 3 |\n| `test_e2e_briefings.py` | Брифинги | 2 |\n| `test_e2e_misc.py` | Помощь + fallback | 8 |\n| `test_e2e_edge.py` | Edge cases | 7 |\n| `test_e2e_regression.py` | Регрессия (known bugs) | 7 |\n| **Итого** | | **116** |\n\nПодробные сценарии: [`docs/CHROME_TESTING.md`](docs/CHROME_TESTING.md).\n\n## Лицензия\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamplec0de%2Falice-ticktick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamplec0de%2Falice-ticktick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamplec0de%2Falice-ticktick/lists"}