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.
Files changed (193) hide show
  1. {studyctl-2.0.0 → studyctl-2.2.0}/.gitignore +24 -1
  2. {studyctl-2.0.0 → studyctl-2.2.0}/PKG-INFO +9 -5
  3. {studyctl-2.0.0 → studyctl-2.2.0}/pyproject.toml +20 -7
  4. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/__init__.py +1 -1
  5. studyctl-2.2.0/src/studyctl/agent_launcher.py +585 -0
  6. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/__init__.py +23 -14
  7. studyctl-2.2.0/src/studyctl/cli/__main__.py +5 -0
  8. studyctl-2.2.0/src/studyctl/cli/_backup.py +153 -0
  9. studyctl-2.2.0/src/studyctl/cli/_clean.py +158 -0
  10. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_content.py +85 -43
  11. studyctl-2.2.0/src/studyctl/cli/_doctor.py +148 -0
  12. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_review.py +64 -209
  13. studyctl-2.2.0/src/studyctl/cli/_session.py +308 -0
  14. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_setup.py +6 -0
  15. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_shared.py +2 -5
  16. studyctl-2.2.0/src/studyctl/cli/_study.py +686 -0
  17. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_sync.py +1 -1
  18. studyctl-2.2.0/src/studyctl/cli/_topics.py +240 -0
  19. studyctl-2.2.0/src/studyctl/cli/_upgrade.py +291 -0
  20. studyctl-2.2.0/src/studyctl/cli/_web.py +87 -0
  21. studyctl-2.2.0/src/studyctl/data/tmux-studyctl.conf +23 -0
  22. studyctl-2.2.0/src/studyctl/db.py +33 -0
  23. studyctl-2.2.0/src/studyctl/doctor/__init__.py +66 -0
  24. studyctl-2.2.0/src/studyctl/doctor/agents.py +308 -0
  25. studyctl-2.2.0/src/studyctl/doctor/config.py +201 -0
  26. studyctl-2.2.0/src/studyctl/doctor/core.py +124 -0
  27. studyctl-2.2.0/src/studyctl/doctor/database.py +139 -0
  28. studyctl-2.2.0/src/studyctl/doctor/deps.py +73 -0
  29. studyctl-2.2.0/src/studyctl/doctor/models.py +38 -0
  30. studyctl-2.2.0/src/studyctl/doctor/updates.py +112 -0
  31. studyctl-2.2.0/src/studyctl/history/__init__.py +57 -0
  32. studyctl-2.2.0/src/studyctl/history/_connection.py +55 -0
  33. studyctl-2.2.0/src/studyctl/history/bridges.py +178 -0
  34. studyctl-2.2.0/src/studyctl/history/concepts.py +77 -0
  35. studyctl-2.2.0/src/studyctl/history/medication.py +56 -0
  36. studyctl-2.2.0/src/studyctl/history/progress.py +173 -0
  37. studyctl-2.2.0/src/studyctl/history/search.py +127 -0
  38. studyctl-2.2.0/src/studyctl/history/sessions.py +287 -0
  39. studyctl-2.2.0/src/studyctl/history/streaks.py +85 -0
  40. studyctl-2.2.0/src/studyctl/history/teachback.py +132 -0
  41. studyctl-2.2.0/src/studyctl/logic/backlog_logic.py +223 -0
  42. studyctl-2.2.0/src/studyctl/logic/break_logic.py +154 -0
  43. studyctl-2.2.0/src/studyctl/logic/briefing_logic.py +133 -0
  44. studyctl-2.2.0/src/studyctl/logic/clean_logic.py +99 -0
  45. studyctl-2.2.0/src/studyctl/logic/streaks_logic.py +171 -0
  46. studyctl-2.2.0/src/studyctl/logic/topic_resolver.py +99 -0
  47. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/mcp/tools.py +195 -33
  48. studyctl-2.2.0/src/studyctl/output.py +20 -0
  49. studyctl-2.2.0/src/studyctl/parking.py +288 -0
  50. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/review_db.py +17 -13
  51. studyctl-2.2.0/src/studyctl/services/backlog.py +45 -0
  52. studyctl-2.2.0/src/studyctl/services/flashcard_writer.py +137 -0
  53. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/services/review.py +33 -0
  54. studyctl-2.2.0/src/studyctl/session/__init__.py +1 -0
  55. studyctl-2.2.0/src/studyctl/session/cleanup.py +191 -0
  56. studyctl-2.2.0/src/studyctl/session/orchestrator.py +378 -0
  57. studyctl-2.2.0/src/studyctl/session/resume.py +113 -0
  58. studyctl-2.2.0/src/studyctl/session_state.py +186 -0
  59. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/settings.py +93 -74
  60. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/sync.py +5 -1
  61. studyctl-2.2.0/src/studyctl/tmux.py +349 -0
  62. studyctl-2.2.0/src/studyctl/topics.py +45 -0
  63. studyctl-2.2.0/src/studyctl/tui/__init__.py +1 -0
  64. studyctl-2.2.0/src/studyctl/tui/__main__.py +5 -0
  65. studyctl-2.2.0/src/studyctl/tui/sidebar.py +545 -0
  66. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/app.py +35 -3
  67. studyctl-2.2.0/src/studyctl/web/auth.py +75 -0
  68. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/cards.py +9 -16
  69. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/courses.py +5 -23
  70. studyctl-2.2.0/src/studyctl/web/routes/session.py +516 -0
  71. studyctl-2.2.0/src/studyctl/web/routes/terminal_proxy.py +165 -0
  72. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/server.py +0 -1
  73. studyctl-2.2.0/src/studyctl/web/static/components.js +686 -0
  74. studyctl-2.2.0/src/studyctl/web/static/index.html +1075 -0
  75. studyctl-2.2.0/src/studyctl/web/static/style.css +1360 -0
  76. studyctl-2.2.0/src/studyctl/web/static/sw.js +39 -0
  77. studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/inter-latin-ext.woff2 +0 -0
  78. studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/inter-latin.woff2 +0 -0
  79. studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/opendyslexic-latin-400-normal.woff +0 -0
  80. studyctl-2.2.0/src/studyctl/web/static/vendor/css/files/opendyslexic-latin-400-normal.woff2 +0 -0
  81. studyctl-2.2.0/src/studyctl/web/static/vendor/css/inter.css +27 -0
  82. studyctl-2.2.0/src/studyctl/web/static/vendor/css/opendyslexic-400.css +8 -0
  83. studyctl-2.2.0/src/studyctl/web/static/vendor/js/alpine-3.14.8.min.js +5 -0
  84. studyctl-2.2.0/src/studyctl/web/static/vendor/js/htmx-2.0.4.min.js +1 -0
  85. studyctl-2.2.0/src/studyctl/web/static/vendor/js/htmx-ext-sse-2.2.2.js +290 -0
  86. studyctl-2.2.0/tests/__init__.py +0 -0
  87. studyctl-2.2.0/tests/_helpers.py +67 -0
  88. studyctl-2.2.0/tests/harness/__init__.py +36 -0
  89. studyctl-2.2.0/tests/harness/agents.py +158 -0
  90. studyctl-2.2.0/tests/harness/study.py +343 -0
  91. studyctl-2.2.0/tests/harness/terminal.py +231 -0
  92. studyctl-2.2.0/tests/harness/tmux.py +193 -0
  93. studyctl-2.2.0/tests/test_agent_launcher.py +746 -0
  94. studyctl-2.2.0/tests/test_backlog_logic.py +254 -0
  95. studyctl-2.2.0/tests/test_backup.py +138 -0
  96. studyctl-2.2.0/tests/test_break_logic.py +217 -0
  97. studyctl-2.2.0/tests/test_briefing_logic.py +220 -0
  98. studyctl-2.2.0/tests/test_clean.py +221 -0
  99. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_cli.py +348 -96
  100. studyctl-2.2.0/tests/test_cli_doctor.py +92 -0
  101. studyctl-2.2.0/tests/test_cli_session.py +136 -0
  102. studyctl-2.2.0/tests/test_cli_upgrade.py +171 -0
  103. studyctl-2.2.0/tests/test_content_cli.py +489 -0
  104. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_notebooklm.py +105 -0
  105. studyctl-2.2.0/tests/test_doctor_agents.py +178 -0
  106. studyctl-2.2.0/tests/test_doctor_config.py +174 -0
  107. studyctl-2.2.0/tests/test_doctor_core.py +86 -0
  108. studyctl-2.2.0/tests/test_doctor_database.py +83 -0
  109. studyctl-2.2.0/tests/test_doctor_deps.py +43 -0
  110. studyctl-2.2.0/tests/test_doctor_integration.py +121 -0
  111. studyctl-2.2.0/tests/test_doctor_models.py +120 -0
  112. studyctl-2.2.0/tests/test_doctor_updates.py +99 -0
  113. studyctl-2.2.0/tests/test_e2e_session_demo.py +552 -0
  114. studyctl-2.2.0/tests/test_flashcard_writer.py +201 -0
  115. studyctl-2.2.0/tests/test_harness_matrix.py +383 -0
  116. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_history.py +29 -26
  117. studyctl-2.2.0/tests/test_install_mentor_prompt.py +33 -0
  118. studyctl-2.2.0/tests/test_lan_auth.py +246 -0
  119. studyctl-2.2.0/tests/test_lazy_imports.py +40 -0
  120. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_mcp_tools.py +57 -10
  121. studyctl-2.2.0/tests/test_migrate_from_empty_db.py +107 -0
  122. studyctl-2.2.0/tests/test_orchestrator.py +78 -0
  123. studyctl-2.2.0/tests/test_parking.py +205 -0
  124. studyctl-2.2.0/tests/test_services_content.py +144 -0
  125. studyctl-2.2.0/tests/test_services_review.py +265 -0
  126. studyctl-2.2.0/tests/test_session_db_integration.py +328 -0
  127. studyctl-2.2.0/tests/test_session_state.py +180 -0
  128. studyctl-2.2.0/tests/test_sidebar_pilot.py +211 -0
  129. studyctl-2.2.0/tests/test_streaks_logic.py +161 -0
  130. studyctl-2.2.0/tests/test_study.py +195 -0
  131. studyctl-2.2.0/tests/test_study_integration.py +981 -0
  132. studyctl-2.2.0/tests/test_study_lifecycle.py +209 -0
  133. studyctl-2.2.0/tests/test_terminal_proxy.py +179 -0
  134. studyctl-2.2.0/tests/test_tmux.py +228 -0
  135. studyctl-2.2.0/tests/test_topic_resolver.py +227 -0
  136. studyctl-2.2.0/tests/test_topics_cli.py +215 -0
  137. studyctl-2.2.0/tests/test_uat_terminal.py +455 -0
  138. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_web_app.py +4 -3
  139. studyctl-2.2.0/tests/test_web_cli.py +143 -0
  140. studyctl-2.2.0/tests/test_web_session.py +375 -0
  141. studyctl-2.2.0/tests/test_web_sidebar.py +493 -0
  142. studyctl-2.2.0/tests/test_web_terminal.py +486 -0
  143. studyctl-2.2.0/tests/test_web_vendor.py +75 -0
  144. studyctl-2.0.0/src/studyctl/calendar.py +0 -140
  145. studyctl-2.0.0/src/studyctl/cli/_schedule.py +0 -125
  146. studyctl-2.0.0/src/studyctl/cli/_state.py +0 -69
  147. studyctl-2.0.0/src/studyctl/cli/_web.py +0 -228
  148. studyctl-2.0.0/src/studyctl/history.py +0 -982
  149. studyctl-2.0.0/src/studyctl/scheduler.py +0 -242
  150. studyctl-2.0.0/src/studyctl/tui/__main__.py +0 -33
  151. studyctl-2.0.0/src/studyctl/tui/app.py +0 -395
  152. studyctl-2.0.0/src/studyctl/tui/study_cards.py +0 -396
  153. studyctl-2.0.0/src/studyctl/web/static/app.js +0 -853
  154. studyctl-2.0.0/src/studyctl/web/static/index.html +0 -50
  155. studyctl-2.0.0/src/studyctl/web/static/style.css +0 -657
  156. studyctl-2.0.0/src/studyctl/web/static/sw.js +0 -14
  157. studyctl-2.0.0/tests/test_calendar.py +0 -159
  158. studyctl-2.0.0/tests/test_scheduler.py +0 -86
  159. {studyctl-2.0.0 → studyctl-2.2.0}/README.md +0 -0
  160. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_config.py +0 -0
  161. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/cli/_lazy.py +0 -0
  162. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/__init__.py +0 -0
  163. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/markdown_converter.py +0 -0
  164. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/models.py +0 -0
  165. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/notebooklm_client.py +0 -0
  166. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/splitter.py +0 -0
  167. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/storage.py +0 -0
  168. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/content/syllabus.py +0 -0
  169. {studyctl-2.0.0/tests → studyctl-2.2.0/src/studyctl/logic}/__init__.py +0 -0
  170. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/maintenance.py +0 -0
  171. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/mcp/__init__.py +0 -0
  172. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/mcp/server.py +0 -0
  173. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/pdf.py +0 -0
  174. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/review_loader.py +0 -0
  175. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/services/__init__.py +0 -0
  176. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/services/content.py +0 -0
  177. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/shared.py +0 -0
  178. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/state.py +0 -0
  179. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/__init__.py +0 -0
  180. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/__init__.py +0 -0
  181. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/artefacts.py +0 -0
  182. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/routes/history.py +0 -0
  183. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/static/icon-192.svg +0 -0
  184. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/static/icon-512.svg +0 -0
  185. {studyctl-2.0.0 → studyctl-2.2.0}/src/studyctl/web/static/manifest.json +0 -0
  186. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_splitter.py +0 -0
  187. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_storage.py +0 -0
  188. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_content_syllabus.py +0 -0
  189. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_review_db.py +0 -0
  190. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_review_loader.py +0 -0
  191. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_setup_wizard.py +0 -0
  192. {studyctl-2.0.0 → studyctl-2.2.0}/tests/test_shared.py +0 -0
  193. {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
- # Personal work-in-progress plans
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.0.0
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/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
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.0.0"
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/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"
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
+ ]
@@ -1,3 +1,3 @@
1
1
  """studyctl — AuDHD study pipeline CLI."""
2
2
 
3
- __version__ = "1.0.0"
3
+ __version__ = "2.1.0"