studyctl 2.0.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 (74) hide show
  1. studyctl-2.0.0/.gitignore +482 -0
  2. studyctl-2.0.0/PKG-INFO +49 -0
  3. studyctl-2.0.0/README.md +5 -0
  4. studyctl-2.0.0/pyproject.toml +53 -0
  5. studyctl-2.0.0/src/studyctl/__init__.py +3 -0
  6. studyctl-2.0.0/src/studyctl/calendar.py +140 -0
  7. studyctl-2.0.0/src/studyctl/cli/__init__.py +56 -0
  8. studyctl-2.0.0/src/studyctl/cli/_config.py +128 -0
  9. studyctl-2.0.0/src/studyctl/cli/_content.py +462 -0
  10. studyctl-2.0.0/src/studyctl/cli/_lazy.py +35 -0
  11. studyctl-2.0.0/src/studyctl/cli/_review.py +491 -0
  12. studyctl-2.0.0/src/studyctl/cli/_schedule.py +125 -0
  13. studyctl-2.0.0/src/studyctl/cli/_setup.py +164 -0
  14. studyctl-2.0.0/src/studyctl/cli/_shared.py +83 -0
  15. studyctl-2.0.0/src/studyctl/cli/_state.py +69 -0
  16. studyctl-2.0.0/src/studyctl/cli/_sync.py +156 -0
  17. studyctl-2.0.0/src/studyctl/cli/_web.py +228 -0
  18. studyctl-2.0.0/src/studyctl/content/__init__.py +5 -0
  19. studyctl-2.0.0/src/studyctl/content/markdown_converter.py +271 -0
  20. studyctl-2.0.0/src/studyctl/content/models.py +31 -0
  21. studyctl-2.0.0/src/studyctl/content/notebooklm_client.py +434 -0
  22. studyctl-2.0.0/src/studyctl/content/splitter.py +159 -0
  23. studyctl-2.0.0/src/studyctl/content/storage.py +105 -0
  24. studyctl-2.0.0/src/studyctl/content/syllabus.py +416 -0
  25. studyctl-2.0.0/src/studyctl/history.py +982 -0
  26. studyctl-2.0.0/src/studyctl/maintenance.py +69 -0
  27. studyctl-2.0.0/src/studyctl/mcp/__init__.py +1 -0
  28. studyctl-2.0.0/src/studyctl/mcp/server.py +58 -0
  29. studyctl-2.0.0/src/studyctl/mcp/tools.py +234 -0
  30. studyctl-2.0.0/src/studyctl/pdf.py +89 -0
  31. studyctl-2.0.0/src/studyctl/review_db.py +277 -0
  32. studyctl-2.0.0/src/studyctl/review_loader.py +375 -0
  33. studyctl-2.0.0/src/studyctl/scheduler.py +242 -0
  34. studyctl-2.0.0/src/studyctl/services/__init__.py +6 -0
  35. studyctl-2.0.0/src/studyctl/services/content.py +39 -0
  36. studyctl-2.0.0/src/studyctl/services/review.py +127 -0
  37. studyctl-2.0.0/src/studyctl/settings.py +367 -0
  38. studyctl-2.0.0/src/studyctl/shared.py +425 -0
  39. studyctl-2.0.0/src/studyctl/state.py +120 -0
  40. studyctl-2.0.0/src/studyctl/sync.py +229 -0
  41. studyctl-2.0.0/src/studyctl/tui/__main__.py +33 -0
  42. studyctl-2.0.0/src/studyctl/tui/app.py +395 -0
  43. studyctl-2.0.0/src/studyctl/tui/study_cards.py +396 -0
  44. studyctl-2.0.0/src/studyctl/web/__init__.py +1 -0
  45. studyctl-2.0.0/src/studyctl/web/app.py +68 -0
  46. studyctl-2.0.0/src/studyctl/web/routes/__init__.py +1 -0
  47. studyctl-2.0.0/src/studyctl/web/routes/artefacts.py +57 -0
  48. studyctl-2.0.0/src/studyctl/web/routes/cards.py +86 -0
  49. studyctl-2.0.0/src/studyctl/web/routes/courses.py +91 -0
  50. studyctl-2.0.0/src/studyctl/web/routes/history.py +69 -0
  51. studyctl-2.0.0/src/studyctl/web/server.py +260 -0
  52. studyctl-2.0.0/src/studyctl/web/static/app.js +853 -0
  53. studyctl-2.0.0/src/studyctl/web/static/icon-192.svg +4 -0
  54. studyctl-2.0.0/src/studyctl/web/static/icon-512.svg +4 -0
  55. studyctl-2.0.0/src/studyctl/web/static/index.html +50 -0
  56. studyctl-2.0.0/src/studyctl/web/static/manifest.json +21 -0
  57. studyctl-2.0.0/src/studyctl/web/static/style.css +657 -0
  58. studyctl-2.0.0/src/studyctl/web/static/sw.js +14 -0
  59. studyctl-2.0.0/tests/__init__.py +0 -0
  60. studyctl-2.0.0/tests/test_calendar.py +159 -0
  61. studyctl-2.0.0/tests/test_cli.py +370 -0
  62. studyctl-2.0.0/tests/test_content_notebooklm.py +312 -0
  63. studyctl-2.0.0/tests/test_content_splitter.py +155 -0
  64. studyctl-2.0.0/tests/test_content_storage.py +196 -0
  65. studyctl-2.0.0/tests/test_content_syllabus.py +351 -0
  66. studyctl-2.0.0/tests/test_history.py +543 -0
  67. studyctl-2.0.0/tests/test_mcp_tools.py +207 -0
  68. studyctl-2.0.0/tests/test_review_db.py +240 -0
  69. studyctl-2.0.0/tests/test_review_loader.py +204 -0
  70. studyctl-2.0.0/tests/test_scheduler.py +86 -0
  71. studyctl-2.0.0/tests/test_setup_wizard.py +313 -0
  72. studyctl-2.0.0/tests/test_shared.py +291 -0
  73. studyctl-2.0.0/tests/test_web_app.py +177 -0
  74. studyctl-2.0.0/tests/test_web_artefacts.py +93 -0
@@ -0,0 +1,482 @@
1
+ # Created by https://www.toptal.com/developers/gitignore/api/python,node,rust,go,typescript,visualstudiocode,macos,linux,windows,zed
2
+ # Edit at https://www.toptal.com/developers/gitignore?templates=python,node,rust,go,typescript,visualstudiocode,macos,linux,windows,zed
3
+
4
+ ### Go ###
5
+ # If you prefer the allow list template instead of the deny list, see community template:
6
+ # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
7
+ #
8
+ # Binaries for programs and plugins
9
+ *.exe
10
+ *.exe~
11
+ *.dll
12
+ *.so
13
+ *.dylib
14
+
15
+ # Test binary, built with `go test -c`
16
+ *.test
17
+
18
+ # Output of the go coverage tool, specifically when used with LiteIDE
19
+ *.out
20
+
21
+ # Dependency directories (remove the comment below to include it)
22
+ # vendor/
23
+
24
+ # Go workspace file
25
+ go.work
26
+
27
+ ### Linux ###
28
+ *~
29
+
30
+ # temporary files which can be created if a process still has a handle open of a deleted file
31
+ .fuse_hidden*
32
+
33
+ # KDE directory preferences
34
+ .directory
35
+
36
+ # Linux trash folder which might appear on any partition or disk
37
+ .Trash-*
38
+
39
+ # .nfs files are created when an open file is removed but is still being accessed
40
+ .nfs*
41
+
42
+ ### macOS ###
43
+ # General
44
+ .DS_Store
45
+ .AppleDouble
46
+ .LSOverride
47
+
48
+ # Icon must end with two \r
49
+ Icon
50
+
51
+ # Thumbnails
52
+ ._*
53
+
54
+ # Files that might appear in the root of a volume
55
+ .DocumentRevisions-V100
56
+ .fseventsd
57
+ .Spotlight-V100
58
+ .TemporaryItems
59
+ .Trashes
60
+ .VolumeIcon.icns
61
+ .com.apple.timemachine.donotpresent
62
+
63
+ # Directories potentially created on remote AFP share
64
+ .AppleDB
65
+ .AppleDesktop
66
+ Network Trash Folder
67
+ Temporary Items
68
+ .apdisk
69
+
70
+ ### macOS Patch ###
71
+ # iCloud generated files
72
+ *.icloud
73
+
74
+ ### Node ###
75
+ # Logs
76
+ logs
77
+ *.log
78
+ npm-debug.log*
79
+ yarn-debug.log*
80
+ yarn-error.log*
81
+ lerna-debug.log*
82
+ .pnpm-debug.log*
83
+
84
+ # Diagnostic reports (https://nodejs.org/api/report.html)
85
+ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
86
+
87
+ # Runtime data
88
+ pids
89
+ *.pid
90
+ *.seed
91
+ *.pid.lock
92
+
93
+ # Directory for instrumented libs generated by jscoverage/JSCover
94
+ lib-cov
95
+
96
+ # Coverage directory used by tools like istanbul
97
+ coverage
98
+ *.lcov
99
+
100
+ # nyc test coverage
101
+ .nyc_output
102
+
103
+ # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
104
+ .grunt
105
+
106
+ # Bower dependency directory (https://bower.io/)
107
+ bower_components
108
+
109
+ # node-waf configuration
110
+ .lock-wscript
111
+
112
+ # Compiled binary addons (https://nodejs.org/api/addons.html)
113
+ build/Release
114
+
115
+ # Dependency directories
116
+ node_modules/
117
+ jspm_packages/
118
+
119
+ # Snowpack dependency directory (https://snowpack.dev/)
120
+ web_modules/
121
+
122
+ # TypeScript cache
123
+ *.tsbuildinfo
124
+
125
+ # Optional npm cache directory
126
+ .npm
127
+
128
+ # Optional eslint cache
129
+ .eslintcache
130
+
131
+ # Optional stylelint cache
132
+ .stylelintcache
133
+
134
+ # Microbundle cache
135
+ .rpt2_cache/
136
+ .rts2_cache_cjs/
137
+ .rts2_cache_es/
138
+ .rts2_cache_umd/
139
+
140
+ # Optional REPL history
141
+ .node_repl_history
142
+
143
+ # Output of 'npm pack'
144
+ *.tgz
145
+
146
+ # Yarn Integrity file
147
+ .yarn-integrity
148
+
149
+ # dotenv environment variable files
150
+ .env
151
+ .env.development.local
152
+ .env.test.local
153
+ .env.production.local
154
+ .env.local
155
+
156
+ # parcel-bundler cache (https://parceljs.org/)
157
+ .cache
158
+ .parcel-cache
159
+
160
+ # Next.js build output
161
+ .next
162
+ out
163
+
164
+ # Nuxt.js build / generate output
165
+ .nuxt
166
+ dist
167
+
168
+ # Gatsby files
169
+ .cache/
170
+ # Comment in the public line in if your project uses Gatsby and not Next.js
171
+ # https://nextjs.org/blog/next-9-1#public-directory-support
172
+ # public
173
+
174
+ # vuepress build output
175
+ .vuepress/dist
176
+
177
+ # vuepress v2.x temp and cache directory
178
+ .temp
179
+
180
+ # Docusaurus cache and generated files
181
+ .docusaurus
182
+
183
+ # Serverless directories
184
+ .serverless/
185
+
186
+ # FuseBox cache
187
+ .fusebox/
188
+
189
+ # DynamoDB Local files
190
+ .dynamodb/
191
+
192
+ # TernJS port file
193
+ .tern-port
194
+
195
+ # Stores VSCode versions used for testing VSCode extensions
196
+ .vscode-test
197
+
198
+ # yarn v2
199
+ .yarn/cache
200
+ .yarn/unplugged
201
+ .yarn/build-state.yml
202
+ .yarn/install-state.gz
203
+ .pnp.*
204
+
205
+ ### Node Patch ###
206
+ # Serverless Webpack directories
207
+ .webpack/
208
+
209
+ # Optional stylelint cache
210
+
211
+ # SvelteKit build / generate output
212
+ .svelte-kit
213
+
214
+ ### Python ###
215
+ # Byte-compiled / optimized / DLL files
216
+ __pycache__/
217
+ *.py[cod]
218
+ *$py.class
219
+
220
+ # C extensions
221
+
222
+ # Distribution / packaging
223
+ .Python
224
+ build/
225
+ develop-eggs/
226
+ dist/
227
+ downloads/
228
+ eggs/
229
+ .eggs/
230
+ lib/
231
+ lib64/
232
+ parts/
233
+ sdist/
234
+ var/
235
+ wheels/
236
+ share/python-wheels/
237
+ *.egg-info/
238
+ .installed.cfg
239
+ *.egg
240
+ MANIFEST
241
+
242
+ # PyInstaller
243
+ # Usually these files are written by a python script from a template
244
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
245
+ *.manifest
246
+ *.spec
247
+
248
+ # Installer logs
249
+ pip-log.txt
250
+ pip-delete-this-directory.txt
251
+
252
+ # Unit test / coverage reports
253
+ htmlcov/
254
+ .tox/
255
+ .nox/
256
+ .coverage
257
+ .coverage.*
258
+ nosetests.xml
259
+ coverage.xml
260
+ *.cover
261
+ *.py,cover
262
+ .hypothesis/
263
+ .pytest_cache/
264
+ cover/
265
+
266
+ # Translations
267
+ *.mo
268
+ *.pot
269
+
270
+ # Django stuff:
271
+ local_settings.py
272
+ db.sqlite3
273
+ db.sqlite3-journal
274
+
275
+ # Flask stuff:
276
+ instance/
277
+ .webassets-cache
278
+
279
+ # Scrapy stuff:
280
+ .scrapy
281
+
282
+ # Sphinx documentation
283
+ docs/_build/
284
+
285
+ # PyBuilder
286
+ .pybuilder/
287
+ target/
288
+
289
+ # Jupyter Notebook
290
+ .ipynb_checkpoints
291
+
292
+ # IPython
293
+ profile_default/
294
+ ipython_config.py
295
+
296
+ # pyenv
297
+ # For a library or package, you might want to ignore these files since the code is
298
+ # intended to run in multiple environments; otherwise, check them in:
299
+ # .python-version
300
+
301
+ # pipenv
302
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
303
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
304
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
305
+ # install all needed dependencies.
306
+ #Pipfile.lock
307
+
308
+ # poetry
309
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
310
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
311
+ # commonly ignored for libraries.
312
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
313
+ #poetry.lock
314
+
315
+ # pdm
316
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
317
+ #pdm.lock
318
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
319
+ # in version control.
320
+ # https://pdm.fming.dev/#use-with-ide
321
+ .pdm.toml
322
+
323
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
324
+ __pypackages__/
325
+
326
+ # Celery stuff
327
+ celerybeat-schedule
328
+ celerybeat.pid
329
+
330
+ # SageMath parsed files
331
+ *.sage.py
332
+
333
+ # Environments
334
+ .venv
335
+ env/
336
+ venv/
337
+ ENV/
338
+ env.bak/
339
+ venv.bak/
340
+
341
+ # Spyder project settings
342
+ .spyderproject
343
+ .spyproject
344
+
345
+ # Rope project settings
346
+ .ropeproject
347
+
348
+ # mkdocs documentation
349
+ /site
350
+
351
+ # mypy
352
+ .mypy_cache/
353
+ .dmypy.json
354
+ dmypy.json
355
+
356
+ # Pyre type checker
357
+ .pyre/
358
+
359
+ # pytype static type analyzer
360
+ .pytype/
361
+
362
+ # Cython debug symbols
363
+ cython_debug/
364
+
365
+ # PyCharm
366
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
367
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
368
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
369
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
370
+ #.idea/
371
+
372
+ ### Python Patch ###
373
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
374
+ poetry.toml
375
+
376
+ # ruff
377
+ .ruff_cache/
378
+
379
+ # LSP config files
380
+ pyrightconfig.json
381
+
382
+ ### Rust ###
383
+ # Generated by Cargo
384
+ # will have compiled files and executables
385
+ debug/
386
+
387
+ # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
388
+ # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
389
+ Cargo.lock
390
+
391
+ # These are backup files generated by rustfmt
392
+ **/*.rs.bk
393
+
394
+ # MSVC Windows builds of rustc generate these, which store debugging information
395
+ *.pdb
396
+
397
+ #!! ERROR: typescript is undefined. Use list command to see defined gitignore types !!#
398
+
399
+ ### VisualStudioCode ###
400
+ .vscode/*
401
+ !.vscode/settings.json
402
+ !.vscode/tasks.json
403
+ !.vscode/launch.json
404
+ !.vscode/extensions.json
405
+ !.vscode/*.code-snippets
406
+
407
+ # Local History for Visual Studio Code
408
+ .history/
409
+
410
+ # Built Visual Studio Code Extensions
411
+ *.vsix
412
+
413
+ ### VisualStudioCode Patch ###
414
+ # Ignore all local history of files
415
+ .history
416
+ .ionide
417
+
418
+ ### Windows ###
419
+ # Windows thumbnail cache files
420
+ Thumbs.db
421
+ Thumbs.db:encryptable
422
+ ehthumbs.db
423
+ ehthumbs_vista.db
424
+
425
+ # Dump file
426
+ *.stackdump
427
+
428
+ # Folder config file
429
+ [Dd]esktop.ini
430
+
431
+ # Recycle Bin used on file shares
432
+ $RECYCLE.BIN/
433
+
434
+ # Windows Installer files
435
+ *.cab
436
+ *.msi
437
+ *.msix
438
+ *.msm
439
+ *.msp
440
+
441
+ # Windows shortcuts
442
+ *.lnk
443
+
444
+ #!! ERROR: zed is undefined. Use list command to see defined gitignore types !!#
445
+
446
+ # End of https://www.toptal.com/developers/gitignore/api/python,node,rust,go,typescript,visualstudiocode,macos,linux,windows,zed
447
+
448
+ # Agentic Agent Files
449
+ .claude/
450
+ CLAUDE.md
451
+ AGENTS.md
452
+ GEMINI.md
453
+ agents/cowork/
454
+ .kiro/
455
+ .crush/
456
+ .opencode/
457
+ .cursor/
458
+ .windsurf/
459
+ .continue/
460
+ .aider/
461
+ .copilot/
462
+ .speckit/
463
+ .openspec/
464
+
465
+ # IDE Files
466
+ .vscode/
467
+ .idea/
468
+ *.code-workspace
469
+ .zed/
470
+ site/
471
+
472
+ # SQLite databases (may contain sensitive AI conversation data)
473
+ *.db
474
+ *.db-wal
475
+ *.db-shm
476
+ *.db-journal
477
+
478
+ # Personal work-in-progress plans
479
+ docs/plans/
480
+
481
+ # Artefacts (served from artefact-store, not committed to source repo)
482
+ docs/artefacts/
@@ -0,0 +1,49 @@
1
+ Metadata-Version: 2.4
2
+ Name: studyctl
3
+ Version: 2.0.0
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
9
+ Author: Andy Taylor
10
+ License-Expression: MIT
11
+ Keywords: adhd,audhd,flashcards,notebooklm,socratic,spaced-repetition,study
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: Education
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Education
19
+ Requires-Python: >=3.12
20
+ Requires-Dist: click>=8.1
21
+ Requires-Dist: pyyaml>=6.0
22
+ Requires-Dist: rich>=13.0
23
+ Provides-Extra: all
24
+ Requires-Dist: fastapi>=0.115; extra == 'all'
25
+ Requires-Dist: httpx; extra == 'all'
26
+ Requires-Dist: mcp[cli]>=1.0.0; extra == 'all'
27
+ Requires-Dist: notebooklm-py>=0.3.4; extra == 'all'
28
+ Requires-Dist: pymupdf>=1.25; extra == 'all'
29
+ Requires-Dist: textual>=0.80; extra == 'all'
30
+ Requires-Dist: uvicorn[standard]>=0.34; extra == 'all'
31
+ Provides-Extra: content
32
+ Requires-Dist: httpx; extra == 'content'
33
+ Requires-Dist: pymupdf>=1.25; extra == 'content'
34
+ Provides-Extra: mcp
35
+ Requires-Dist: mcp[cli]>=1.0.0; extra == 'mcp'
36
+ Provides-Extra: notebooklm
37
+ Requires-Dist: notebooklm-py>=0.3.4; extra == 'notebooklm'
38
+ Provides-Extra: tui
39
+ Requires-Dist: textual>=0.80; extra == 'tui'
40
+ Provides-Extra: web
41
+ Requires-Dist: fastapi>=0.115; extra == 'web'
42
+ Requires-Dist: uvicorn[standard]>=0.34; extra == 'web'
43
+ Description-Content-Type: text/markdown
44
+
45
+ # studyctl
46
+
47
+ Study pipeline management CLI — sync Obsidian notes, spaced repetition scheduling, and cross-machine state sync.
48
+
49
+ Part of [socratic-study-mentor](https://github.com/NetDevAutomate/Socratic-Study-Mentor).
@@ -0,0 +1,5 @@
1
+ # studyctl
2
+
3
+ Study pipeline management CLI — sync Obsidian notes, spaced repetition scheduling, and cross-machine state sync.
4
+
5
+ Part of [socratic-study-mentor](https://github.com/NetDevAutomate/Socratic-Study-Mentor).
@@ -0,0 +1,53 @@
1
+ [project]
2
+ name = "studyctl"
3
+ version = "2.0.0"
4
+ description = "AuDHD-aware study tool with AI Socratic mentoring, spaced repetition, and content pipeline"
5
+ requires-python = ">=3.12"
6
+ readme = "README.md"
7
+ license = "MIT"
8
+ authors = [{name = "Andy Taylor"}]
9
+ keywords = ["study", "flashcards", "spaced-repetition", "audhd", "adhd", "socratic", "notebooklm"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Environment :: Console",
13
+ "Environment :: Web Environment",
14
+ "Intended Audience :: Education",
15
+ "Topic :: Education",
16
+ "Programming Language :: Python :: 3.12",
17
+ "Programming Language :: Python :: 3.13",
18
+ ]
19
+ dependencies = [
20
+ "click>=8.1",
21
+ "rich>=13.0",
22
+ "pyyaml>=6.0",
23
+ ]
24
+
25
+ [project.optional-dependencies]
26
+ content = ["pymupdf>=1.25", "httpx"]
27
+ notebooklm = ["notebooklm-py>=0.3.4"]
28
+ tui = ["textual>=0.80"]
29
+ web = ["fastapi>=0.115", "uvicorn[standard]>=0.34"]
30
+ mcp = ["mcp[cli]>=1.0.0"]
31
+ all = ["studyctl[content,web,notebooklm,tui,mcp]"]
32
+
33
+ [project.scripts]
34
+ studyctl = "studyctl.cli:cli"
35
+ studyctl-mcp = "studyctl.mcp.server:main"
36
+
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"
42
+
43
+ [build-system]
44
+ requires = ["hatchling"]
45
+ build-backend = "hatchling.build"
46
+
47
+ [tool.hatch.build.targets.wheel]
48
+ packages = ["src/studyctl"]
49
+
50
+ [tool.pyright]
51
+ pythonVersion = "3.12"
52
+ 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
@@ -0,0 +1,3 @@
1
+ """studyctl — AuDHD study pipeline CLI."""
2
+
3
+ __version__ = "1.0.0"