studyctl 2.0.0__tar.gz → 2.2.0__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.
- {studyctl-2.0.0 → studyctl-2.2.0}/.gitignore +24 -1
- {studyctl-2.0.0 → studyctl-2.2.0}/PKG-INFO +9 -5
- {studyctl-2.0.0 → studyctl-2.2.0}/pyproject.toml +20 -7
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/__init__.py +1 -1
- studyctl-2.2.0/src/studyctl/agent_launcher.py +585 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/__init__.py +23 -14
- studyctl-2.2.0/src/studyctl/cli/__main__.py +5 -0
- studyctl-2.2.0/src/studyctl/cli/_backup.py +153 -0
- studyctl-2.2.0/src/studyctl/cli/_clean.py +158 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_content.py +85 -43
- studyctl-2.2.0/src/studyctl/cli/_doctor.py +148 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_review.py +64 -209
- studyctl-2.2.0/src/studyctl/cli/_session.py +308 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_setup.py +6 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_shared.py +2 -5
- studyctl-2.2.0/src/studyctl/cli/_study.py +686 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_sync.py +1 -1
- studyctl-2.2.0/src/studyctl/cli/_topics.py +240 -0
- studyctl-2.2.0/src/studyctl/cli/_upgrade.py +291 -0
- studyctl-2.2.0/src/studyctl/cli/_web.py +87 -0
- studyctl-2.2.0/src/studyctl/data/tmux-studyctl.conf +23 -0
- studyctl-2.2.0/src/studyctl/db.py +33 -0
- studyctl-2.2.0/src/studyctl/doctor/__init__.py +66 -0
- studyctl-2.2.0/src/studyctl/doctor/agents.py +308 -0
- studyctl-2.2.0/src/studyctl/doctor/config.py +201 -0
- studyctl-2.2.0/src/studyctl/doctor/core.py +124 -0
- studyctl-2.2.0/src/studyctl/doctor/database.py +139 -0
- studyctl-2.2.0/src/studyctl/doctor/deps.py +73 -0
- studyctl-2.2.0/src/studyctl/doctor/models.py +38 -0
- studyctl-2.2.0/src/studyctl/doctor/updates.py +112 -0
- studyctl-2.2.0/src/studyctl/history/__init__.py +57 -0
- studyctl-2.2.0/src/studyctl/history/_connection.py +55 -0
- studyctl-2.2.0/src/studyctl/history/bridges.py +178 -0
- studyctl-2.2.0/src/studyctl/history/concepts.py +77 -0
- studyctl-2.2.0/src/studyctl/history/medication.py +56 -0
- studyctl-2.2.0/src/studyctl/history/progress.py +173 -0
- studyctl-2.2.0/src/studyctl/history/search.py +127 -0
- studyctl-2.2.0/src/studyctl/history/sessions.py +287 -0
- studyctl-2.2.0/src/studyctl/history/streaks.py +85 -0
- studyctl-2.2.0/src/studyctl/history/teachback.py +132 -0
- studyctl-2.2.0/src/studyctl/logic/backlog_logic.py +223 -0
- studyctl-2.2.0/src/studyctl/logic/break_logic.py +154 -0
- studyctl-2.2.0/src/studyctl/logic/briefing_logic.py +133 -0
- studyctl-2.2.0/src/studyctl/logic/clean_logic.py +99 -0
- studyctl-2.2.0/src/studyctl/logic/streaks_logic.py +171 -0
- studyctl-2.2.0/src/studyctl/logic/topic_resolver.py +99 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/mcp/tools.py +195 -33
- studyctl-2.2.0/src/studyctl/output.py +20 -0
- studyctl-2.2.0/src/studyctl/parking.py +288 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/review_db.py +17 -13
- studyctl-2.2.0/src/studyctl/services/backlog.py +45 -0
- studyctl-2.2.0/src/studyctl/services/flashcard_writer.py +137 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/services/review.py +33 -0
- studyctl-2.2.0/src/studyctl/session/__init__.py +1 -0
- studyctl-2.2.0/src/studyctl/session/cleanup.py +191 -0
- studyctl-2.2.0/src/studyctl/session/orchestrator.py +378 -0
- studyctl-2.2.0/src/studyctl/session/resume.py +113 -0
- studyctl-2.2.0/src/studyctl/session_state.py +186 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/settings.py +93 -74
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/sync.py +5 -1
- studyctl-2.2.0/src/studyctl/tmux.py +349 -0
- studyctl-2.2.0/src/studyctl/topics.py +45 -0
- studyctl-2.2.0/src/studyctl/tui/__init__.py +1 -0
- studyctl-2.2.0/src/studyctl/tui/__main__.py +5 -0
- studyctl-2.2.0/src/studyctl/tui/sidebar.py +545 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/app.py +35 -3
- studyctl-2.2.0/src/studyctl/web/auth.py +75 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/cards.py +9 -16
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/courses.py +5 -23
- studyctl-2.2.0/src/studyctl/web/routes/session.py +516 -0
- studyctl-2.2.0/src/studyctl/web/routes/terminal_proxy.py +165 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/server.py +0 -1
- studyctl-2.2.0/src/studyctl/web/static/components.js +686 -0
- studyctl-2.2.0/src/studyctl/web/static/index.html +1075 -0
- studyctl-2.2.0/src/studyctl/web/static/style.css +1360 -0
- studyctl-2.2.0/src/studyctl/web/static/sw.js +39 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/inter-latin-ext.woff2 +0 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/inter-latin.woff2 +0 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/opendyslexic-latin-400-normal.woff +0 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/opendyslexic-latin-400-normal.woff2 +0 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/css/inter.css +27 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/css/opendyslexic-400.css +8 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/js/alpine-3.14.8.min.js +5 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/js/htmx-2.0.4.min.js +1 -0
- studyctl-2.2.0/src/studyctl/web/static/vendor/js/htmx-ext-sse-2.2.2.js +290 -0
- studyctl-2.2.0/tests/__init__.py +0 -0
- studyctl-2.2.0/tests/_helpers.py +67 -0
- studyctl-2.2.0/tests/harness/__init__.py +36 -0
- studyctl-2.2.0/tests/harness/agents.py +158 -0
- studyctl-2.2.0/tests/harness/study.py +343 -0
- studyctl-2.2.0/tests/harness/terminal.py +231 -0
- studyctl-2.2.0/tests/harness/tmux.py +193 -0
- studyctl-2.2.0/tests/test_agent_launcher.py +746 -0
- studyctl-2.2.0/tests/test_backlog_logic.py +254 -0
- studyctl-2.2.0/tests/test_backup.py +138 -0
- studyctl-2.2.0/tests/test_break_logic.py +217 -0
- studyctl-2.2.0/tests/test_briefing_logic.py +220 -0
- studyctl-2.2.0/tests/test_clean.py +221 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_cli.py +348 -96
- studyctl-2.2.0/tests/test_cli_doctor.py +92 -0
- studyctl-2.2.0/tests/test_cli_session.py +136 -0
- studyctl-2.2.0/tests/test_cli_upgrade.py +171 -0
- studyctl-2.2.0/tests/test_content_cli.py +489 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_notebooklm.py +105 -0
- studyctl-2.2.0/tests/test_doctor_agents.py +178 -0
- studyctl-2.2.0/tests/test_doctor_config.py +174 -0
- studyctl-2.2.0/tests/test_doctor_core.py +86 -0
- studyctl-2.2.0/tests/test_doctor_database.py +83 -0
- studyctl-2.2.0/tests/test_doctor_deps.py +43 -0
- studyctl-2.2.0/tests/test_doctor_integration.py +121 -0
- studyctl-2.2.0/tests/test_doctor_models.py +120 -0
- studyctl-2.2.0/tests/test_doctor_updates.py +99 -0
- studyctl-2.2.0/tests/test_e2e_session_demo.py +552 -0
- studyctl-2.2.0/tests/test_flashcard_writer.py +201 -0
- studyctl-2.2.0/tests/test_harness_matrix.py +383 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_history.py +29 -26
- studyctl-2.2.0/tests/test_install_mentor_prompt.py +33 -0
- studyctl-2.2.0/tests/test_lan_auth.py +246 -0
- studyctl-2.2.0/tests/test_lazy_imports.py +40 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_mcp_tools.py +57 -10
- studyctl-2.2.0/tests/test_migrate_from_empty_db.py +107 -0
- studyctl-2.2.0/tests/test_orchestrator.py +78 -0
- studyctl-2.2.0/tests/test_parking.py +205 -0
- studyctl-2.2.0/tests/test_services_content.py +144 -0
- studyctl-2.2.0/tests/test_services_review.py +265 -0
- studyctl-2.2.0/tests/test_session_db_integration.py +328 -0
- studyctl-2.2.0/tests/test_session_state.py +180 -0
- studyctl-2.2.0/tests/test_sidebar_pilot.py +211 -0
- studyctl-2.2.0/tests/test_streaks_logic.py +161 -0
- studyctl-2.2.0/tests/test_study.py +195 -0
- studyctl-2.2.0/tests/test_study_integration.py +981 -0
- studyctl-2.2.0/tests/test_study_lifecycle.py +209 -0
- studyctl-2.2.0/tests/test_terminal_proxy.py +179 -0
- studyctl-2.2.0/tests/test_tmux.py +228 -0
- studyctl-2.2.0/tests/test_topic_resolver.py +227 -0
- studyctl-2.2.0/tests/test_topics_cli.py +215 -0
- studyctl-2.2.0/tests/test_uat_terminal.py +455 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_web_app.py +4 -3
- studyctl-2.2.0/tests/test_web_cli.py +143 -0
- studyctl-2.2.0/tests/test_web_session.py +375 -0
- studyctl-2.2.0/tests/test_web_sidebar.py +493 -0
- studyctl-2.2.0/tests/test_web_terminal.py +486 -0
- studyctl-2.2.0/tests/test_web_vendor.py +75 -0
- studyctl-2.0.0/src/studyctl/calendar.py +0 -140
- studyctl-2.0.0/src/studyctl/cli/_schedule.py +0 -125
- studyctl-2.0.0/src/studyctl/cli/_state.py +0 -69
- studyctl-2.0.0/src/studyctl/cli/_web.py +0 -228
- studyctl-2.0.0/src/studyctl/history.py +0 -982
- studyctl-2.0.0/src/studyctl/scheduler.py +0 -242
- studyctl-2.0.0/src/studyctl/tui/__main__.py +0 -33
- studyctl-2.0.0/src/studyctl/tui/app.py +0 -395
- studyctl-2.0.0/src/studyctl/tui/study_cards.py +0 -396
- studyctl-2.0.0/src/studyctl/web/static/app.js +0 -853
- studyctl-2.0.0/src/studyctl/web/static/index.html +0 -50
- studyctl-2.0.0/src/studyctl/web/static/style.css +0 -657
- studyctl-2.0.0/src/studyctl/web/static/sw.js +0 -14
- studyctl-2.0.0/tests/test_calendar.py +0 -159
- studyctl-2.0.0/tests/test_scheduler.py +0 -86
- {studyctl-2.0.0 → studyctl-2.2.0}/README.md +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_config.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_lazy.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/__init__.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/markdown_converter.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/models.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/notebooklm_client.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/splitter.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/storage.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/syllabus.py +0 -0
- {studyctl-2.0.0/tests → studyctl-2.2.0/src/studyctl/logic}/__init__.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/maintenance.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/mcp/__init__.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/mcp/server.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/pdf.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/review_loader.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/services/__init__.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/services/content.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/shared.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/state.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/__init__.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/__init__.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/artefacts.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/history.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/static/icon-192.svg +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/static/icon-512.svg +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/static/manifest.json +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_splitter.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_storage.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_syllabus.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_review_db.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_review_loader.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_setup_wizard.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_shared.py +0 -0
- {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_web_artefacts.py +0 -0
|
@@ -475,8 +475,31 @@ site/
|
|
|
475
475
|
*.db-shm
|
|
476
476
|
*.db-journal
|
|
477
477
|
|
|
478
|
-
#
|
|
478
|
+
# Internal/planning docs (kept locally, not published)
|
|
479
|
+
docs/internal/
|
|
480
|
+
docs/local_repo_docs/
|
|
479
481
|
docs/plans/
|
|
482
|
+
docs/architecture/
|
|
483
|
+
|
|
484
|
+
# Demo recordings (large, local-only)
|
|
485
|
+
demos/
|
|
486
|
+
|
|
487
|
+
# Agent workflow artefacts
|
|
488
|
+
code-review-plan-items.md
|
|
489
|
+
TODO.md
|
|
490
|
+
CHANGELOG.md
|
|
480
491
|
|
|
481
492
|
# Artefacts (served from artefact-store, not committed to source repo)
|
|
482
493
|
docs/artefacts/
|
|
494
|
+
pytest-of-*/
|
|
495
|
+
uv-*.lock
|
|
496
|
+
|
|
497
|
+
# Iterate runner artefacts (autoresearch pattern — kept untracked)
|
|
498
|
+
results.tsv
|
|
499
|
+
eval-results.tsv
|
|
500
|
+
.pytest-junit.xml
|
|
501
|
+
docs/reports/
|
|
502
|
+
docs/brainstorms/
|
|
503
|
+
|
|
504
|
+
# Dev-only tooling (autoresearch eval harness — not shipped to users)
|
|
505
|
+
dev/
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: studyctl
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: AuDHD-aware study tool with AI Socratic mentoring, spaced repetition, and content pipeline
|
|
5
|
-
Project-URL: Homepage, https://github.com/NetDevAutomate/
|
|
6
|
-
Project-URL: Repository, https://github.com/NetDevAutomate/
|
|
7
|
-
Project-URL: Issues, https://github.com/NetDevAutomate/
|
|
8
|
-
Project-URL: Documentation, https://github.com/NetDevAutomate/
|
|
5
|
+
Project-URL: Homepage, https://github.com/NetDevAutomate/socratic-study-mentor
|
|
6
|
+
Project-URL: Repository, https://github.com/NetDevAutomate/socratic-study-mentor
|
|
7
|
+
Project-URL: Issues, https://github.com/NetDevAutomate/socratic-study-mentor/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/NetDevAutomate/socratic-study-mentor/tree/main/docs
|
|
9
9
|
Author: Andy Taylor
|
|
10
10
|
License-Expression: MIT
|
|
11
11
|
Keywords: adhd,audhd,flashcards,notebooklm,socratic,spaced-repetition,study
|
|
@@ -23,11 +23,13 @@ Requires-Dist: rich>=13.0
|
|
|
23
23
|
Provides-Extra: all
|
|
24
24
|
Requires-Dist: fastapi>=0.115; extra == 'all'
|
|
25
25
|
Requires-Dist: httpx; extra == 'all'
|
|
26
|
+
Requires-Dist: httpx>=0.27; extra == 'all'
|
|
26
27
|
Requires-Dist: mcp[cli]>=1.0.0; extra == 'all'
|
|
27
28
|
Requires-Dist: notebooklm-py>=0.3.4; extra == 'all'
|
|
28
29
|
Requires-Dist: pymupdf>=1.25; extra == 'all'
|
|
29
30
|
Requires-Dist: textual>=0.80; extra == 'all'
|
|
30
31
|
Requires-Dist: uvicorn[standard]>=0.34; extra == 'all'
|
|
32
|
+
Requires-Dist: websockets>=12.0; extra == 'all'
|
|
31
33
|
Provides-Extra: content
|
|
32
34
|
Requires-Dist: httpx; extra == 'content'
|
|
33
35
|
Requires-Dist: pymupdf>=1.25; extra == 'content'
|
|
@@ -39,7 +41,9 @@ Provides-Extra: tui
|
|
|
39
41
|
Requires-Dist: textual>=0.80; extra == 'tui'
|
|
40
42
|
Provides-Extra: web
|
|
41
43
|
Requires-Dist: fastapi>=0.115; extra == 'web'
|
|
44
|
+
Requires-Dist: httpx>=0.27; extra == 'web'
|
|
42
45
|
Requires-Dist: uvicorn[standard]>=0.34; extra == 'web'
|
|
46
|
+
Requires-Dist: websockets>=12.0; extra == 'web'
|
|
43
47
|
Description-Content-Type: text/markdown
|
|
44
48
|
|
|
45
49
|
# studyctl
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "studyctl"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.2.0"
|
|
4
4
|
description = "AuDHD-aware study tool with AI Socratic mentoring, spaced repetition, and content pipeline"
|
|
5
5
|
requires-python = ">=3.12"
|
|
6
6
|
readme = "README.md"
|
|
@@ -26,7 +26,7 @@ dependencies = [
|
|
|
26
26
|
content = ["pymupdf>=1.25", "httpx"]
|
|
27
27
|
notebooklm = ["notebooklm-py>=0.3.4"]
|
|
28
28
|
tui = ["textual>=0.80"]
|
|
29
|
-
web = ["fastapi>=0.115", "uvicorn[standard]>=0.34"]
|
|
29
|
+
web = ["fastapi>=0.115", "uvicorn[standard]>=0.34", "httpx>=0.27", "websockets>=12.0"]
|
|
30
30
|
mcp = ["mcp[cli]>=1.0.0"]
|
|
31
31
|
all = ["studyctl[content,web,notebooklm,tui,mcp]"]
|
|
32
32
|
|
|
@@ -35,10 +35,10 @@ studyctl = "studyctl.cli:cli"
|
|
|
35
35
|
studyctl-mcp = "studyctl.mcp.server:main"
|
|
36
36
|
|
|
37
37
|
[project.urls]
|
|
38
|
-
Homepage = "https://github.com/NetDevAutomate/
|
|
39
|
-
Repository = "https://github.com/NetDevAutomate/
|
|
40
|
-
Issues = "https://github.com/NetDevAutomate/
|
|
41
|
-
Documentation = "https://github.com/NetDevAutomate/
|
|
38
|
+
Homepage = "https://github.com/NetDevAutomate/socratic-study-mentor"
|
|
39
|
+
Repository = "https://github.com/NetDevAutomate/socratic-study-mentor"
|
|
40
|
+
Issues = "https://github.com/NetDevAutomate/socratic-study-mentor/issues"
|
|
41
|
+
Documentation = "https://github.com/NetDevAutomate/socratic-study-mentor/tree/main/docs"
|
|
42
42
|
|
|
43
43
|
[build-system]
|
|
44
44
|
requires = ["hatchling"]
|
|
@@ -47,7 +47,20 @@ build-backend = "hatchling.build"
|
|
|
47
47
|
[tool.hatch.build.targets.wheel]
|
|
48
48
|
packages = ["src/studyctl"]
|
|
49
49
|
|
|
50
|
+
[tool.pytest.ini_options]
|
|
51
|
+
testpaths = ["tests"]
|
|
52
|
+
addopts = "--tb=short -m 'not integration'"
|
|
53
|
+
markers = [
|
|
54
|
+
"integration: requires external infrastructure (tmux, real DB, network)",
|
|
55
|
+
"e2e: end-to-end browser tests requiring Playwright + web server",
|
|
56
|
+
]
|
|
57
|
+
|
|
50
58
|
[tool.pyright]
|
|
51
59
|
pythonVersion = "3.12"
|
|
52
60
|
typeCheckingMode = "basic"
|
|
53
|
-
exclude = ["src/studyctl/tui", "src/studyctl/content", "src/studyctl/cli/_content.py", "src/studyctl/cli/_web.py", "src/studyctl/web", "src/studyctl/mcp"] # optional deps not in CI
|
|
61
|
+
exclude = ["src/studyctl/tui", "src/studyctl/content", "src/studyctl/cli/_content.py", "src/studyctl/cli/_web.py", "src/studyctl/web", "src/studyctl/mcp", "src/studyctl/eval/llm_client.py"] # optional deps not in CI
|
|
62
|
+
|
|
63
|
+
[dependency-groups]
|
|
64
|
+
dev = [
|
|
65
|
+
"pytest-playwright>=0.7.2",
|
|
66
|
+
]
|