anyscribe 0.16.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 (246) hide show
  1. anyscribe-0.16.0/.claude/launch.json +11 -0
  2. anyscribe-0.16.0/.claude/settings.json +25 -0
  3. anyscribe-0.16.0/.gitattributes +6 -0
  4. anyscribe-0.16.0/.github/workflows/ci.yml +63 -0
  5. anyscribe-0.16.0/.github/workflows/publish.yml +71 -0
  6. anyscribe-0.16.0/.gitignore +44 -0
  7. anyscribe-0.16.0/AGENTS.md +86 -0
  8. anyscribe-0.16.0/BACKLOG.md +484 -0
  9. anyscribe-0.16.0/CLAUDE.md +199 -0
  10. anyscribe-0.16.0/LICENSE +21 -0
  11. anyscribe-0.16.0/PKG-INFO +372 -0
  12. anyscribe-0.16.0/README.md +323 -0
  13. anyscribe-0.16.0/docs/building/COMMIT_CHECKLIST.md +125 -0
  14. anyscribe-0.16.0/docs/building/_index.md +49 -0
  15. anyscribe-0.16.0/docs/building/architecture.md +254 -0
  16. anyscribe-0.16.0/docs/building/downloaders.md +79 -0
  17. anyscribe-0.16.0/docs/building/journal/2026-03-26-initial-architecture.md +67 -0
  18. anyscribe-0.16.0/docs/building/journal/2026-03-26-v020-full-feature-build.md +49 -0
  19. anyscribe-0.16.0/docs/building/journal/2026-03-27-v030-download-media-ux.md +56 -0
  20. anyscribe-0.16.0/docs/building/journal/2026-03-29-v031-documentation-accuracy-audit.md +43 -0
  21. anyscribe-0.16.0/docs/building/journal/2026-03-30-local-file-transcription.md +44 -0
  22. anyscribe-0.16.0/docs/building/journal/2026-03-30-v032-onboard-reconfig-ux.md +41 -0
  23. anyscribe-0.16.0/docs/building/journal/2026-03-30-v041-claude-code-skill.md +48 -0
  24. anyscribe-0.16.0/docs/building/journal/2026-03-30-v050-052-workspace-pypi-flatten.md +64 -0
  25. anyscribe-0.16.0/docs/building/journal/2026-03-31-v053-ytdlp-auto-update.md +53 -0
  26. anyscribe-0.16.0/docs/building/journal/2026-04-01-v054-windows-compatibility.md +77 -0
  27. anyscribe-0.16.0/docs/building/journal/2026-04-05-v060-scribe-rename-mcp.md +76 -0
  28. anyscribe-0.16.0/docs/building/journal/2026-04-16-v070-diarization-deepgram.md +65 -0
  29. anyscribe-0.16.0/docs/building/journal/2026-04-16-v072-config-set-keys-diarize-routing.md +34 -0
  30. anyscribe-0.16.0/docs/building/journal/2026-04-16-v0723-deepgram-hi-latn-nova-fallback.md +56 -0
  31. anyscribe-0.16.0/docs/building/journal/2026-04-18-language-picker-polish.md +59 -0
  32. anyscribe-0.16.0/docs/building/journal/2026-04-18-local-transcription-unified-setup.md +103 -0
  33. anyscribe-0.16.0/docs/building/journal/2026-04-18-menu-bar-tray-companion-plan.md +107 -0
  34. anyscribe-0.16.0/docs/building/journal/2026-04-18-provider-language-lists.md +101 -0
  35. anyscribe-0.16.0/docs/building/journal/2026-04-18-v0741-webui-settings-polish.md +33 -0
  36. anyscribe-0.16.0/docs/building/journal/2026-04-18-v081-onboarding-parity.md +108 -0
  37. anyscribe-0.16.0/docs/building/journal/2026-04-18-web-ui-initial.md +47 -0
  38. anyscribe-0.16.0/docs/building/journal/2026-04-20-v082-upload-autosubmit-fix.md +81 -0
  39. anyscribe-0.16.0/docs/building/journal/2026-04-29-instagram-yt-dlp-migration.md +64 -0
  40. anyscribe-0.16.0/docs/building/journal/2026-05-28-ci-frontend-bundle-line-endings.md +28 -0
  41. anyscribe-0.16.0/docs/building/journal/2026-05-28-publish-readiness-follow-up.md +34 -0
  42. anyscribe-0.16.0/docs/building/journal/2026-05-28-release-workflow-sanity-audit.md +42 -0
  43. anyscribe-0.16.0/docs/building/journal/2026-05-29-web-upload-filename-preservation.md +22 -0
  44. anyscribe-0.16.0/docs/building/journal/2026-06-27-transcription-landscape-and-config-audit.md +203 -0
  45. anyscribe-0.16.0/docs/building/journal/2026-06-29-hinglish-transcript-format-and-llm-consumption.md +90 -0
  46. anyscribe-0.16.0/docs/building/journal/2026-06-29-quality-picker.md +78 -0
  47. anyscribe-0.16.0/docs/building/journal/2026-07-03-audit-fixes-and-lifecycle.md +63 -0
  48. anyscribe-0.16.0/docs/building/journal/2026-07-04-logs-timeout-download-progress.md +101 -0
  49. anyscribe-0.16.0/docs/building/journal/2026-07-04-tray-icon-and-agent-first-landing.md +95 -0
  50. anyscribe-0.16.0/docs/building/journal/2026-07-04-tray-releases-landing.md +63 -0
  51. anyscribe-0.16.0/docs/building/journal/2026-07-14-delete-provider-key.md +114 -0
  52. anyscribe-0.16.0/docs/building/journal/2026-07-16-ponytail-simplification-batch.md +56 -0
  53. anyscribe-0.16.0/docs/building/journal/2026-07-21-rename-to-anyscribe.md +112 -0
  54. anyscribe-0.16.0/docs/building/journal/2026-07-29-config-defaults-redesign.md +61 -0
  55. anyscribe-0.16.0/docs/building/journal/2026-07-29-full-web-config-parity.md +46 -0
  56. anyscribe-0.16.0/docs/building/journal/2026-07-29-model-picker-and-market-refresh.md +122 -0
  57. anyscribe-0.16.0/docs/building/ops/pypi-guide.md +192 -0
  58. anyscribe-0.16.0/docs/building/ops/release-checklist.md +177 -0
  59. anyscribe-0.16.0/docs/building/ops/whats-automated.md +160 -0
  60. anyscribe-0.16.0/docs/building/plans/flatten-workspace-structure.md +113 -0
  61. anyscribe-0.16.0/docs/building/plans/rename-to-anyscribe.md +549 -0
  62. anyscribe-0.16.0/docs/building/plans/v0.1.0-original-plan.md +165 -0
  63. anyscribe-0.16.0/docs/building/providers.md +179 -0
  64. anyscribe-0.16.0/docs/building/web-ui-spec.md +475 -0
  65. anyscribe-0.16.0/docs/superpowers/plans/2026-04-29-instagram-yt-dlp-migration.md +1502 -0
  66. anyscribe-0.16.0/docs/superpowers/plans/2026-07-16-ponytail-simplification-batch.md +785 -0
  67. anyscribe-0.16.0/docs/user/commands.md +1147 -0
  68. anyscribe-0.16.0/docs/user/configuration.md +502 -0
  69. anyscribe-0.16.0/docs/user/getting-started.md +307 -0
  70. anyscribe-0.16.0/docs/user/providers.md +461 -0
  71. anyscribe-0.16.0/install.ps1 +236 -0
  72. anyscribe-0.16.0/install.sh +392 -0
  73. anyscribe-0.16.0/landing/assets/scribe-ui.png +0 -0
  74. anyscribe-0.16.0/landing/index.html +2199 -0
  75. anyscribe-0.16.0/pyproject.toml +88 -0
  76. anyscribe-0.16.0/scripts/rehearse-migration.sh +158 -0
  77. anyscribe-0.16.0/scripts/release.sh +112 -0
  78. anyscribe-0.16.0/src/anyscribe/__init__.py +3 -0
  79. anyscribe-0.16.0/src/anyscribe/__main__.py +12 -0
  80. anyscribe-0.16.0/src/anyscribe/assets/tray-icon.png +0 -0
  81. anyscribe-0.16.0/src/anyscribe/cli/__init__.py +0 -0
  82. anyscribe-0.16.0/src/anyscribe/cli/batch.py +296 -0
  83. anyscribe-0.16.0/src/anyscribe/cli/config_cmd.py +359 -0
  84. anyscribe-0.16.0/src/anyscribe/cli/download.py +167 -0
  85. anyscribe-0.16.0/src/anyscribe/cli/local_cmd.py +303 -0
  86. anyscribe-0.16.0/src/anyscribe/cli/logs_cmd.py +112 -0
  87. anyscribe-0.16.0/src/anyscribe/cli/main.py +343 -0
  88. anyscribe-0.16.0/src/anyscribe/cli/migrate_cmd.py +330 -0
  89. anyscribe-0.16.0/src/anyscribe/cli/models_cmd.py +350 -0
  90. anyscribe-0.16.0/src/anyscribe/cli/onboard.py +896 -0
  91. anyscribe-0.16.0/src/anyscribe/cli/rm.py +59 -0
  92. anyscribe-0.16.0/src/anyscribe/cli/service_cmd.py +79 -0
  93. anyscribe-0.16.0/src/anyscribe/cli/skill_cmd.py +66 -0
  94. anyscribe-0.16.0/src/anyscribe/cli/transcribe.py +261 -0
  95. anyscribe-0.16.0/src/anyscribe/cli/tray_cmd.py +188 -0
  96. anyscribe-0.16.0/src/anyscribe/config/__init__.py +0 -0
  97. anyscribe-0.16.0/src/anyscribe/config/paths.py +61 -0
  98. anyscribe-0.16.0/src/anyscribe/config/settings.py +188 -0
  99. anyscribe-0.16.0/src/anyscribe/core/__init__.py +0 -0
  100. anyscribe-0.16.0/src/anyscribe/core/audio.py +144 -0
  101. anyscribe-0.16.0/src/anyscribe/core/checkpoint.py +109 -0
  102. anyscribe-0.16.0/src/anyscribe/core/config_set.py +190 -0
  103. anyscribe-0.16.0/src/anyscribe/core/dedup.py +49 -0
  104. anyscribe-0.16.0/src/anyscribe/core/deps.py +401 -0
  105. anyscribe-0.16.0/src/anyscribe/core/errors.py +197 -0
  106. anyscribe-0.16.0/src/anyscribe/core/fileutil.py +83 -0
  107. anyscribe-0.16.0/src/anyscribe/core/local_setup.py +357 -0
  108. anyscribe-0.16.0/src/anyscribe/core/migrate.py +222 -0
  109. anyscribe-0.16.0/src/anyscribe/core/onboard_headless.py +283 -0
  110. anyscribe-0.16.0/src/anyscribe/core/orchestrator.py +207 -0
  111. anyscribe-0.16.0/src/anyscribe/core/preflight.py +85 -0
  112. anyscribe-0.16.0/src/anyscribe/core/quality.py +37 -0
  113. anyscribe-0.16.0/src/anyscribe/core/resolve.py +114 -0
  114. anyscribe-0.16.0/src/anyscribe/core/service.py +74 -0
  115. anyscribe-0.16.0/src/anyscribe/core/tray.py +61 -0
  116. anyscribe-0.16.0/src/anyscribe/core/updater.py +276 -0
  117. anyscribe-0.16.0/src/anyscribe/downloaders/__init__.py +0 -0
  118. anyscribe-0.16.0/src/anyscribe/downloaders/base.py +32 -0
  119. anyscribe-0.16.0/src/anyscribe/downloaders/instagram.py +164 -0
  120. anyscribe-0.16.0/src/anyscribe/downloaders/local_file.py +74 -0
  121. anyscribe-0.16.0/src/anyscribe/downloaders/registry.py +37 -0
  122. anyscribe-0.16.0/src/anyscribe/downloaders/youtube.py +83 -0
  123. anyscribe-0.16.0/src/anyscribe/mcp/__init__.py +1 -0
  124. anyscribe-0.16.0/src/anyscribe/mcp/server.py +613 -0
  125. anyscribe-0.16.0/src/anyscribe/providers/__init__.py +114 -0
  126. anyscribe-0.16.0/src/anyscribe/providers/base.py +131 -0
  127. anyscribe-0.16.0/src/anyscribe/providers/deepgram.py +197 -0
  128. anyscribe-0.16.0/src/anyscribe/providers/elevenlabs.py +113 -0
  129. anyscribe-0.16.0/src/anyscribe/providers/groq.py +38 -0
  130. anyscribe-0.16.0/src/anyscribe/providers/languages.py +364 -0
  131. anyscribe-0.16.0/src/anyscribe/providers/local.py +126 -0
  132. anyscribe-0.16.0/src/anyscribe/providers/local_models.py +341 -0
  133. anyscribe-0.16.0/src/anyscribe/providers/openai.py +169 -0
  134. anyscribe-0.16.0/src/anyscribe/providers/openrouter.py +143 -0
  135. anyscribe-0.16.0/src/anyscribe/providers/sargam.py +172 -0
  136. anyscribe-0.16.0/src/anyscribe/skill/SKILL.md +366 -0
  137. anyscribe-0.16.0/src/anyscribe/skill/__init__.py +0 -0
  138. anyscribe-0.16.0/src/anyscribe/skill/references/commands.md +682 -0
  139. anyscribe-0.16.0/src/anyscribe/skill/references/config.md +186 -0
  140. anyscribe-0.16.0/src/anyscribe/skill/references/providers.md +283 -0
  141. anyscribe-0.16.0/src/anyscribe/skill/references/troubleshooting.md +301 -0
  142. anyscribe-0.16.0/src/anyscribe/vault/__init__.py +0 -0
  143. anyscribe-0.16.0/src/anyscribe/vault/index.py +227 -0
  144. anyscribe-0.16.0/src/anyscribe/vault/scaffold.py +65 -0
  145. anyscribe-0.16.0/src/anyscribe/vault/writer.py +237 -0
  146. anyscribe-0.16.0/src/anyscribe/web/__init__.py +1 -0
  147. anyscribe-0.16.0/src/anyscribe/web/app.py +80 -0
  148. anyscribe-0.16.0/src/anyscribe/web/jobs.py +222 -0
  149. anyscribe-0.16.0/src/anyscribe/web/models.py +72 -0
  150. anyscribe-0.16.0/src/anyscribe/web/progress.py +28 -0
  151. anyscribe-0.16.0/src/anyscribe/web/routes/__init__.py +1 -0
  152. anyscribe-0.16.0/src/anyscribe/web/routes/config.py +338 -0
  153. anyscribe-0.16.0/src/anyscribe/web/routes/health.py +22 -0
  154. anyscribe-0.16.0/src/anyscribe/web/routes/history.py +159 -0
  155. anyscribe-0.16.0/src/anyscribe/web/routes/local.py +199 -0
  156. anyscribe-0.16.0/src/anyscribe/web/routes/models.py +221 -0
  157. anyscribe-0.16.0/src/anyscribe/web/routes/onboarding.py +115 -0
  158. anyscribe-0.16.0/src/anyscribe/web/routes/system.py +16 -0
  159. anyscribe-0.16.0/src/anyscribe/web/routes/transcribe.py +159 -0
  160. anyscribe-0.16.0/src/anyscribe/web/static/assets/index-6nMwlEoM.js +100 -0
  161. anyscribe-0.16.0/src/anyscribe/web/static/assets/index-Dv8MANvD.css +2 -0
  162. anyscribe-0.16.0/src/anyscribe/web/static/doodles-desktop-2.png +0 -0
  163. anyscribe-0.16.0/src/anyscribe/web/static/doodles-desktop.png +0 -0
  164. anyscribe-0.16.0/src/anyscribe/web/static/doodles-mobile-2.png +0 -0
  165. anyscribe-0.16.0/src/anyscribe/web/static/doodles-mobile.png +0 -0
  166. anyscribe-0.16.0/src/anyscribe/web/static/favicon.svg +1 -0
  167. anyscribe-0.16.0/src/anyscribe/web/static/index.html +17 -0
  168. anyscribe-0.16.0/src/anyscribe/web/static/kx-logo-white-128.png +0 -0
  169. anyscribe-0.16.0/src/anyscribe/web/static/kx-logo-white-32.png +0 -0
  170. anyscribe-0.16.0/src/anyscribe/web/static/kx-logo-white-64.png +0 -0
  171. anyscribe-0.16.0/tests/__init__.py +0 -0
  172. anyscribe-0.16.0/tests/conftest.py +27 -0
  173. anyscribe-0.16.0/tests/test_audio.py +41 -0
  174. anyscribe-0.16.0/tests/test_batch_timeout.py +83 -0
  175. anyscribe-0.16.0/tests/test_checkpoint.py +72 -0
  176. anyscribe-0.16.0/tests/test_config_dashboard.py +210 -0
  177. anyscribe-0.16.0/tests/test_config_set.py +205 -0
  178. anyscribe-0.16.0/tests/test_dedup.py +68 -0
  179. anyscribe-0.16.0/tests/test_delete.py +99 -0
  180. anyscribe-0.16.0/tests/test_download_cli.py +29 -0
  181. anyscribe-0.16.0/tests/test_errors.py +97 -0
  182. anyscribe-0.16.0/tests/test_fileutil.py +64 -0
  183. anyscribe-0.16.0/tests/test_instagram_downloader.py +156 -0
  184. anyscribe-0.16.0/tests/test_instagram_settings_migration.py +63 -0
  185. anyscribe-0.16.0/tests/test_isolation.py +17 -0
  186. anyscribe-0.16.0/tests/test_local_cli.py +311 -0
  187. anyscribe-0.16.0/tests/test_local_models.py +85 -0
  188. anyscribe-0.16.0/tests/test_local_setup.py +219 -0
  189. anyscribe-0.16.0/tests/test_logs_cli.py +95 -0
  190. anyscribe-0.16.0/tests/test_mcp_providers.py +31 -0
  191. anyscribe-0.16.0/tests/test_migrate_app_home.py +264 -0
  192. anyscribe-0.16.0/tests/test_migrate_cmd.py +382 -0
  193. anyscribe-0.16.0/tests/test_onboard_agent_cli.py +230 -0
  194. anyscribe-0.16.0/tests/test_onboard_headless.py +297 -0
  195. anyscribe-0.16.0/tests/test_orchestrator.py +89 -0
  196. anyscribe-0.16.0/tests/test_preflight.py +68 -0
  197. anyscribe-0.16.0/tests/test_providers.py +636 -0
  198. anyscribe-0.16.0/tests/test_resolve.py +304 -0
  199. anyscribe-0.16.0/tests/test_settings.py +225 -0
  200. anyscribe-0.16.0/tests/test_tray.py +200 -0
  201. anyscribe-0.16.0/tests/test_vault_index.py +21 -0
  202. anyscribe-0.16.0/tests/test_vault_writer.py +170 -0
  203. anyscribe-0.16.0/tests/test_web.py +276 -0
  204. anyscribe-0.16.0/tests/test_web_local.py +278 -0
  205. anyscribe-0.16.0/tests/test_web_onboarding.py +98 -0
  206. anyscribe-0.16.0/tests/test_youtube_downloader.py +148 -0
  207. anyscribe-0.16.0/ui/.gitignore +24 -0
  208. anyscribe-0.16.0/ui/README.md +73 -0
  209. anyscribe-0.16.0/ui/eslint.config.js +23 -0
  210. anyscribe-0.16.0/ui/index.html +16 -0
  211. anyscribe-0.16.0/ui/package-lock.json +3315 -0
  212. anyscribe-0.16.0/ui/package.json +34 -0
  213. anyscribe-0.16.0/ui/public/doodles-desktop-2.png +0 -0
  214. anyscribe-0.16.0/ui/public/doodles-desktop.png +0 -0
  215. anyscribe-0.16.0/ui/public/doodles-mobile-2.png +0 -0
  216. anyscribe-0.16.0/ui/public/doodles-mobile.png +0 -0
  217. anyscribe-0.16.0/ui/public/favicon.svg +1 -0
  218. anyscribe-0.16.0/ui/public/kx-logo-white-128.png +0 -0
  219. anyscribe-0.16.0/ui/public/kx-logo-white-32.png +0 -0
  220. anyscribe-0.16.0/ui/public/kx-logo-white-64.png +0 -0
  221. anyscribe-0.16.0/ui/src/App.tsx +55 -0
  222. anyscribe-0.16.0/ui/src/api/client.ts +179 -0
  223. anyscribe-0.16.0/ui/src/api/models.ts +35 -0
  224. anyscribe-0.16.0/ui/src/api/types.ts +227 -0
  225. anyscribe-0.16.0/ui/src/components/LanguageInput.tsx +96 -0
  226. anyscribe-0.16.0/ui/src/components/Layout.tsx +147 -0
  227. anyscribe-0.16.0/ui/src/components/LocalSetupModal.tsx +316 -0
  228. anyscribe-0.16.0/ui/src/components/Modal.tsx +123 -0
  229. anyscribe-0.16.0/ui/src/components/ModelInput.tsx +84 -0
  230. anyscribe-0.16.0/ui/src/components/OnboardingWizard.tsx +857 -0
  231. anyscribe-0.16.0/ui/src/components/ProgressTracker.tsx +115 -0
  232. anyscribe-0.16.0/ui/src/components/ResultCard.tsx +97 -0
  233. anyscribe-0.16.0/ui/src/components/SetupBanner.tsx +149 -0
  234. anyscribe-0.16.0/ui/src/components/URLInput.tsx +156 -0
  235. anyscribe-0.16.0/ui/src/hooks/useJob.ts +195 -0
  236. anyscribe-0.16.0/ui/src/index.css +126 -0
  237. anyscribe-0.16.0/ui/src/main.tsx +10 -0
  238. anyscribe-0.16.0/ui/src/pages/HistoryPage.tsx +203 -0
  239. anyscribe-0.16.0/ui/src/pages/SettingsPage.tsx +1391 -0
  240. anyscribe-0.16.0/ui/src/pages/TranscribePage.tsx +405 -0
  241. anyscribe-0.16.0/ui/src/pages/TranscriptView.tsx +118 -0
  242. anyscribe-0.16.0/ui/tsconfig.app.json +25 -0
  243. anyscribe-0.16.0/ui/tsconfig.json +7 -0
  244. anyscribe-0.16.0/ui/tsconfig.node.json +24 -0
  245. anyscribe-0.16.0/ui/vite.config.ts +20 -0
  246. anyscribe-0.16.0/vercel.json +7 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": "0.0.1",
3
+ "configurations": [
4
+ {
5
+ "name": "landing",
6
+ "runtimeExecutable": "python3",
7
+ "runtimeArgs": ["-m", "http.server", "8899", "--directory", "landing"],
8
+ "port": 8899
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm run:*)",
5
+ "Bash(curl -s http://127.0.0.1:8457/api/health)",
6
+ "Bash(python3 -m json.tool)",
7
+ "Read(//tmp/**)",
8
+ "Read(//private/tmp/**)",
9
+ "Bash(curl -s http://127.0.0.1:8457/api/config)",
10
+ "Bash(xargs ls:*)",
11
+ "Bash(xargs cat:*)",
12
+ "Read(//Users/rish/labs/projects/anyscribecli/**)",
13
+ "Bash(git status:*)",
14
+ "Read(//Users/rish/labs/oss/KraftedX-Labs/kx-tess/**)",
15
+ "Bash(mv \"128x128 - White.png\" kx-logo-white-128.png)",
16
+ "Bash(mv \"64x64 - White.png\" kx-logo-white-64.png)",
17
+ "Bash(mv \"32x32 - White.png\" kx-logo-white-32.png)",
18
+ "Bash(mv \"Footer Horizontal.png\" doodles-desktop.png)",
19
+ "Bash(mv \"Footer Horizontal 2.0.png\" doodles-desktop-2.png)"
20
+ ]
21
+ },
22
+ "enabledPlugins": {
23
+ "ponytail@ponytail": true
24
+ }
25
+ }
@@ -0,0 +1,6 @@
1
+ * text=auto
2
+
3
+ ui/**/* text eol=lf
4
+ src/anyscribe/web/static/**/*.html text eol=lf
5
+ src/anyscribe/web/static/**/*.css text eol=lf
6
+ src/anyscribe/web/static/**/*.js text eol=lf
@@ -0,0 +1,63 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+
8
+ jobs:
9
+ python:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ python-version: ["3.10", "3.12"]
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: ${{ matrix.python-version }}
20
+
21
+ - name: Install package and dev tools
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ python -m pip install -e ".[dev]"
25
+ python -m pip install build
26
+
27
+ - name: Lint
28
+ run: ruff check src tests
29
+
30
+ - name: Test
31
+ run: pytest
32
+
33
+ - name: Build package
34
+ run: python -m build
35
+
36
+ - name: Rehearse migration (fake HOME, throwaway venv)
37
+ run: bash scripts/rehearse-migration.sh
38
+
39
+ frontend:
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+
44
+ - uses: actions/setup-node@v4
45
+ with:
46
+ node-version: "22"
47
+ cache: npm
48
+ cache-dependency-path: ui/package-lock.json
49
+
50
+ - name: Install frontend dependencies
51
+ working-directory: ui
52
+ run: npm ci
53
+
54
+ - name: Lint frontend
55
+ working-directory: ui
56
+ run: npm run lint
57
+
58
+ - name: Build frontend
59
+ working-directory: ui
60
+ run: npm run build
61
+
62
+ - name: Verify committed static bundle is current
63
+ run: git diff --exit-code -- src/anyscribe/web/static
@@ -0,0 +1,71 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: write
12
+ id-token: write # Required for trusted publishing
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+
20
+ - uses: actions/setup-node@v4
21
+ with:
22
+ node-version: "22"
23
+ cache: npm
24
+ cache-dependency-path: ui/package-lock.json
25
+
26
+ - name: Install build tools
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ python -m pip install -e ".[dev]"
30
+ python -m pip install build
31
+
32
+ - name: Lint
33
+ run: ruff check src tests
34
+
35
+ - name: Test
36
+ run: pytest
37
+
38
+ - name: Install frontend dependencies
39
+ working-directory: ui
40
+ run: npm ci
41
+
42
+ - name: Lint frontend
43
+ working-directory: ui
44
+ run: npm run lint
45
+
46
+ - name: Build frontend
47
+ working-directory: ui
48
+ run: npm run build
49
+
50
+ - name: Verify committed static bundle is current
51
+ run: git diff --exit-code -- src/anyscribe/web/static
52
+
53
+ - name: Build package
54
+ run: python -m build
55
+
56
+ - name: Verify version matches tag
57
+ run: |
58
+ TAG="${GITHUB_REF#refs/tags/v}"
59
+ PKG_VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
60
+ if [ "$TAG" != "$PKG_VERSION" ]; then
61
+ echo "::error::Tag v$TAG does not match package version $PKG_VERSION"
62
+ exit 1
63
+ fi
64
+
65
+ - name: Publish to PyPI
66
+ uses: pypa/gh-action-pypi-publish@release/v1
67
+
68
+ - name: Create GitHub Release
69
+ env:
70
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71
+ run: gh release create "${GITHUB_REF_NAME}" --title "${GITHUB_REF_NAME}" --generate-notes
@@ -0,0 +1,44 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ dist/
7
+ build/
8
+ .venv/
9
+ *.egg
10
+
11
+ # Environment and secrets
12
+ .env
13
+ *.env.local
14
+
15
+ # Media files (downloaded content)
16
+ *.mp3
17
+ *.mp4
18
+ *.m4a
19
+ *.wav
20
+ *.ogg
21
+ *.flac
22
+ *.webm
23
+
24
+ # Claude Code (local-only working state; skills + settings are shared)
25
+ .claude/settings.local.json
26
+
27
+ # Node.js (frontend build tooling)
28
+ ui/node_modules/
29
+ ui/dist/
30
+
31
+ # IDE
32
+ .vscode/
33
+ .idea/
34
+
35
+ # OS
36
+ .DS_Store
37
+ Thumbs.db
38
+
39
+ # App runtime (these live in ~/.anyscribe/)
40
+ sessions/
41
+ tmp/
42
+ logs/
43
+ .vercel
44
+ .env*.local
@@ -0,0 +1,86 @@
1
+ # anyscribe — Agent Directives
2
+
3
+ ## Before Starting Work
4
+
5
+ 1. Read `CLAUDE.md` for architecture and patterns
6
+ 2. Read `docs/building/_index.md` for recent project history
7
+ 3. If your task touches providers or downloaders, read the relevant living doc
8
+ 4. Check `docs/building/journal/` for any recent entries related to your task area
9
+
10
+ ## Memory Layer
11
+
12
+ `docs/building/journal/` is the project memory. It exists so that agents in future sessions have context about past decisions, bugs, and research.
13
+
14
+ ### Reading memory (before work)
15
+
16
+ - Scan `docs/building/_index.md` — it's a newest-first table of all entries
17
+ - Read any entries tagged with your task area
18
+ - This prevents re-investigating solved problems or re-debating settled decisions
19
+
20
+ ### Writing memory (after work)
21
+
22
+ After completing significant work, create a journal entry:
23
+
24
+ ```
25
+ docs/building/journal/YYYY-MM-DD-<descriptive-slug>.md
26
+ ```
27
+
28
+ With frontmatter:
29
+ ```yaml
30
+ ---
31
+ type: decision|research|troubleshooting|learning
32
+ tags: [relevant, tags]
33
+ tldr: "One-line summary"
34
+ ---
35
+ ```
36
+
37
+ Then prepend a row to `docs/building/_index.md`.
38
+
39
+ ## Post-Commit Checklist
40
+
41
+ **After every significant commit**, follow `docs/building/COMMIT_CHECKLIST.md`. It has per-scenario checklists (new command, new provider, new downloader, version bump) and grep commands to catch stale references. This is mandatory.
42
+
43
+ ## Documentation Requirements
44
+
45
+ ### Developer docs (`docs/building/`)
46
+ - Every PR or significant change MUST include a building doc update
47
+ - If you changed architecture: update `docs/building/architecture.md`
48
+ - If you added/changed a provider: update `docs/building/providers.md`
49
+ - If you added/changed a downloader: update `docs/building/downloaders.md`
50
+ - If you made a non-trivial decision: write a journal entry explaining why
51
+
52
+ ### User docs (`docs/user/`)
53
+ - If you added/changed a user-facing command or flag: update `docs/user/commands.md`
54
+ - If you changed config options: update `docs/user/configuration.md`
55
+ - If you changed the onboarding flow: update `docs/user/getting-started.md`
56
+ - User docs target semi-technical users new to CLI — explain jargon, show examples, include troubleshooting
57
+ - Every user doc has frontmatter: `summary`, `read_when`, `title`
58
+
59
+ ## Quick Context
60
+
61
+ - CLI entry point: `src/anyscribe/cli/main.py`
62
+ - Onboarding + provider info: `src/anyscribe/cli/onboard.py`
63
+ - Config/providers commands: `src/anyscribe/cli/config_cmd.py`
64
+ - Download command: `src/anyscribe/cli/download.py`
65
+ - Batch processing: `src/anyscribe/cli/batch.py`
66
+ - Config loading: `src/anyscribe/config/settings.py`
67
+ - Path constants: `src/anyscribe/config/paths.py`
68
+ - Provider ABC + registry: `src/anyscribe/providers/base.py`, `providers/__init__.py`
69
+ - Downloader ABC + registry: `src/anyscribe/downloaders/base.py`, `downloaders/registry.py`
70
+ - Core flow: `src/anyscribe/core/orchestrator.py`
71
+ - Dependency checker: `src/anyscribe/core/deps.py`
72
+ - Update system: `src/anyscribe/core/updater.py`
73
+ - Web UI backend: `src/anyscribe/web/app.py` (FastAPI factory + static serving)
74
+ - Web UI routes: `src/anyscribe/web/routes/` (transcribe, history, config, health, system)
75
+ - Web UI job manager: `src/anyscribe/web/jobs.py` (ThreadPoolExecutor + asyncio bridge)
76
+ - Frontend source: `ui/` (React + TypeScript + Vite, builds to `web/static/`)
77
+
78
+ ## Key Dependencies
79
+
80
+ - `beaupy` — arrow-key selectors in onboarding wizard
81
+ - `yt-dlp` — YouTube + Instagram downloader (subprocess; cookies via `--cookies-from-browser` for IG)
82
+ - `faster-whisper` — local transcription (optional, only for `local` provider)
83
+
84
+ ## Cross-Platform
85
+
86
+ All code must work on macOS and Linux. Use `pathlib.Path` everywhere. No platform-specific assumptions.