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.
- anyscribe-0.16.0/.claude/launch.json +11 -0
- anyscribe-0.16.0/.claude/settings.json +25 -0
- anyscribe-0.16.0/.gitattributes +6 -0
- anyscribe-0.16.0/.github/workflows/ci.yml +63 -0
- anyscribe-0.16.0/.github/workflows/publish.yml +71 -0
- anyscribe-0.16.0/.gitignore +44 -0
- anyscribe-0.16.0/AGENTS.md +86 -0
- anyscribe-0.16.0/BACKLOG.md +484 -0
- anyscribe-0.16.0/CLAUDE.md +199 -0
- anyscribe-0.16.0/LICENSE +21 -0
- anyscribe-0.16.0/PKG-INFO +372 -0
- anyscribe-0.16.0/README.md +323 -0
- anyscribe-0.16.0/docs/building/COMMIT_CHECKLIST.md +125 -0
- anyscribe-0.16.0/docs/building/_index.md +49 -0
- anyscribe-0.16.0/docs/building/architecture.md +254 -0
- anyscribe-0.16.0/docs/building/downloaders.md +79 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-26-initial-architecture.md +67 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-26-v020-full-feature-build.md +49 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-27-v030-download-media-ux.md +56 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-29-v031-documentation-accuracy-audit.md +43 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-30-local-file-transcription.md +44 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-30-v032-onboard-reconfig-ux.md +41 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-30-v041-claude-code-skill.md +48 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-30-v050-052-workspace-pypi-flatten.md +64 -0
- anyscribe-0.16.0/docs/building/journal/2026-03-31-v053-ytdlp-auto-update.md +53 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-01-v054-windows-compatibility.md +77 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-05-v060-scribe-rename-mcp.md +76 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-16-v070-diarization-deepgram.md +65 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-16-v072-config-set-keys-diarize-routing.md +34 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-16-v0723-deepgram-hi-latn-nova-fallback.md +56 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-language-picker-polish.md +59 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-local-transcription-unified-setup.md +103 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-menu-bar-tray-companion-plan.md +107 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-provider-language-lists.md +101 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-v0741-webui-settings-polish.md +33 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-v081-onboarding-parity.md +108 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-18-web-ui-initial.md +47 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-20-v082-upload-autosubmit-fix.md +81 -0
- anyscribe-0.16.0/docs/building/journal/2026-04-29-instagram-yt-dlp-migration.md +64 -0
- anyscribe-0.16.0/docs/building/journal/2026-05-28-ci-frontend-bundle-line-endings.md +28 -0
- anyscribe-0.16.0/docs/building/journal/2026-05-28-publish-readiness-follow-up.md +34 -0
- anyscribe-0.16.0/docs/building/journal/2026-05-28-release-workflow-sanity-audit.md +42 -0
- anyscribe-0.16.0/docs/building/journal/2026-05-29-web-upload-filename-preservation.md +22 -0
- anyscribe-0.16.0/docs/building/journal/2026-06-27-transcription-landscape-and-config-audit.md +203 -0
- anyscribe-0.16.0/docs/building/journal/2026-06-29-hinglish-transcript-format-and-llm-consumption.md +90 -0
- anyscribe-0.16.0/docs/building/journal/2026-06-29-quality-picker.md +78 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-03-audit-fixes-and-lifecycle.md +63 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-04-logs-timeout-download-progress.md +101 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-04-tray-icon-and-agent-first-landing.md +95 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-04-tray-releases-landing.md +63 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-14-delete-provider-key.md +114 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-16-ponytail-simplification-batch.md +56 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-21-rename-to-anyscribe.md +112 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-29-config-defaults-redesign.md +61 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-29-full-web-config-parity.md +46 -0
- anyscribe-0.16.0/docs/building/journal/2026-07-29-model-picker-and-market-refresh.md +122 -0
- anyscribe-0.16.0/docs/building/ops/pypi-guide.md +192 -0
- anyscribe-0.16.0/docs/building/ops/release-checklist.md +177 -0
- anyscribe-0.16.0/docs/building/ops/whats-automated.md +160 -0
- anyscribe-0.16.0/docs/building/plans/flatten-workspace-structure.md +113 -0
- anyscribe-0.16.0/docs/building/plans/rename-to-anyscribe.md +549 -0
- anyscribe-0.16.0/docs/building/plans/v0.1.0-original-plan.md +165 -0
- anyscribe-0.16.0/docs/building/providers.md +179 -0
- anyscribe-0.16.0/docs/building/web-ui-spec.md +475 -0
- anyscribe-0.16.0/docs/superpowers/plans/2026-04-29-instagram-yt-dlp-migration.md +1502 -0
- anyscribe-0.16.0/docs/superpowers/plans/2026-07-16-ponytail-simplification-batch.md +785 -0
- anyscribe-0.16.0/docs/user/commands.md +1147 -0
- anyscribe-0.16.0/docs/user/configuration.md +502 -0
- anyscribe-0.16.0/docs/user/getting-started.md +307 -0
- anyscribe-0.16.0/docs/user/providers.md +461 -0
- anyscribe-0.16.0/install.ps1 +236 -0
- anyscribe-0.16.0/install.sh +392 -0
- anyscribe-0.16.0/landing/assets/scribe-ui.png +0 -0
- anyscribe-0.16.0/landing/index.html +2199 -0
- anyscribe-0.16.0/pyproject.toml +88 -0
- anyscribe-0.16.0/scripts/rehearse-migration.sh +158 -0
- anyscribe-0.16.0/scripts/release.sh +112 -0
- anyscribe-0.16.0/src/anyscribe/__init__.py +3 -0
- anyscribe-0.16.0/src/anyscribe/__main__.py +12 -0
- anyscribe-0.16.0/src/anyscribe/assets/tray-icon.png +0 -0
- anyscribe-0.16.0/src/anyscribe/cli/__init__.py +0 -0
- anyscribe-0.16.0/src/anyscribe/cli/batch.py +296 -0
- anyscribe-0.16.0/src/anyscribe/cli/config_cmd.py +359 -0
- anyscribe-0.16.0/src/anyscribe/cli/download.py +167 -0
- anyscribe-0.16.0/src/anyscribe/cli/local_cmd.py +303 -0
- anyscribe-0.16.0/src/anyscribe/cli/logs_cmd.py +112 -0
- anyscribe-0.16.0/src/anyscribe/cli/main.py +343 -0
- anyscribe-0.16.0/src/anyscribe/cli/migrate_cmd.py +330 -0
- anyscribe-0.16.0/src/anyscribe/cli/models_cmd.py +350 -0
- anyscribe-0.16.0/src/anyscribe/cli/onboard.py +896 -0
- anyscribe-0.16.0/src/anyscribe/cli/rm.py +59 -0
- anyscribe-0.16.0/src/anyscribe/cli/service_cmd.py +79 -0
- anyscribe-0.16.0/src/anyscribe/cli/skill_cmd.py +66 -0
- anyscribe-0.16.0/src/anyscribe/cli/transcribe.py +261 -0
- anyscribe-0.16.0/src/anyscribe/cli/tray_cmd.py +188 -0
- anyscribe-0.16.0/src/anyscribe/config/__init__.py +0 -0
- anyscribe-0.16.0/src/anyscribe/config/paths.py +61 -0
- anyscribe-0.16.0/src/anyscribe/config/settings.py +188 -0
- anyscribe-0.16.0/src/anyscribe/core/__init__.py +0 -0
- anyscribe-0.16.0/src/anyscribe/core/audio.py +144 -0
- anyscribe-0.16.0/src/anyscribe/core/checkpoint.py +109 -0
- anyscribe-0.16.0/src/anyscribe/core/config_set.py +190 -0
- anyscribe-0.16.0/src/anyscribe/core/dedup.py +49 -0
- anyscribe-0.16.0/src/anyscribe/core/deps.py +401 -0
- anyscribe-0.16.0/src/anyscribe/core/errors.py +197 -0
- anyscribe-0.16.0/src/anyscribe/core/fileutil.py +83 -0
- anyscribe-0.16.0/src/anyscribe/core/local_setup.py +357 -0
- anyscribe-0.16.0/src/anyscribe/core/migrate.py +222 -0
- anyscribe-0.16.0/src/anyscribe/core/onboard_headless.py +283 -0
- anyscribe-0.16.0/src/anyscribe/core/orchestrator.py +207 -0
- anyscribe-0.16.0/src/anyscribe/core/preflight.py +85 -0
- anyscribe-0.16.0/src/anyscribe/core/quality.py +37 -0
- anyscribe-0.16.0/src/anyscribe/core/resolve.py +114 -0
- anyscribe-0.16.0/src/anyscribe/core/service.py +74 -0
- anyscribe-0.16.0/src/anyscribe/core/tray.py +61 -0
- anyscribe-0.16.0/src/anyscribe/core/updater.py +276 -0
- anyscribe-0.16.0/src/anyscribe/downloaders/__init__.py +0 -0
- anyscribe-0.16.0/src/anyscribe/downloaders/base.py +32 -0
- anyscribe-0.16.0/src/anyscribe/downloaders/instagram.py +164 -0
- anyscribe-0.16.0/src/anyscribe/downloaders/local_file.py +74 -0
- anyscribe-0.16.0/src/anyscribe/downloaders/registry.py +37 -0
- anyscribe-0.16.0/src/anyscribe/downloaders/youtube.py +83 -0
- anyscribe-0.16.0/src/anyscribe/mcp/__init__.py +1 -0
- anyscribe-0.16.0/src/anyscribe/mcp/server.py +613 -0
- anyscribe-0.16.0/src/anyscribe/providers/__init__.py +114 -0
- anyscribe-0.16.0/src/anyscribe/providers/base.py +131 -0
- anyscribe-0.16.0/src/anyscribe/providers/deepgram.py +197 -0
- anyscribe-0.16.0/src/anyscribe/providers/elevenlabs.py +113 -0
- anyscribe-0.16.0/src/anyscribe/providers/groq.py +38 -0
- anyscribe-0.16.0/src/anyscribe/providers/languages.py +364 -0
- anyscribe-0.16.0/src/anyscribe/providers/local.py +126 -0
- anyscribe-0.16.0/src/anyscribe/providers/local_models.py +341 -0
- anyscribe-0.16.0/src/anyscribe/providers/openai.py +169 -0
- anyscribe-0.16.0/src/anyscribe/providers/openrouter.py +143 -0
- anyscribe-0.16.0/src/anyscribe/providers/sargam.py +172 -0
- anyscribe-0.16.0/src/anyscribe/skill/SKILL.md +366 -0
- anyscribe-0.16.0/src/anyscribe/skill/__init__.py +0 -0
- anyscribe-0.16.0/src/anyscribe/skill/references/commands.md +682 -0
- anyscribe-0.16.0/src/anyscribe/skill/references/config.md +186 -0
- anyscribe-0.16.0/src/anyscribe/skill/references/providers.md +283 -0
- anyscribe-0.16.0/src/anyscribe/skill/references/troubleshooting.md +301 -0
- anyscribe-0.16.0/src/anyscribe/vault/__init__.py +0 -0
- anyscribe-0.16.0/src/anyscribe/vault/index.py +227 -0
- anyscribe-0.16.0/src/anyscribe/vault/scaffold.py +65 -0
- anyscribe-0.16.0/src/anyscribe/vault/writer.py +237 -0
- anyscribe-0.16.0/src/anyscribe/web/__init__.py +1 -0
- anyscribe-0.16.0/src/anyscribe/web/app.py +80 -0
- anyscribe-0.16.0/src/anyscribe/web/jobs.py +222 -0
- anyscribe-0.16.0/src/anyscribe/web/models.py +72 -0
- anyscribe-0.16.0/src/anyscribe/web/progress.py +28 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/__init__.py +1 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/config.py +338 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/health.py +22 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/history.py +159 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/local.py +199 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/models.py +221 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/onboarding.py +115 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/system.py +16 -0
- anyscribe-0.16.0/src/anyscribe/web/routes/transcribe.py +159 -0
- anyscribe-0.16.0/src/anyscribe/web/static/assets/index-6nMwlEoM.js +100 -0
- anyscribe-0.16.0/src/anyscribe/web/static/assets/index-Dv8MANvD.css +2 -0
- anyscribe-0.16.0/src/anyscribe/web/static/doodles-desktop-2.png +0 -0
- anyscribe-0.16.0/src/anyscribe/web/static/doodles-desktop.png +0 -0
- anyscribe-0.16.0/src/anyscribe/web/static/doodles-mobile-2.png +0 -0
- anyscribe-0.16.0/src/anyscribe/web/static/doodles-mobile.png +0 -0
- anyscribe-0.16.0/src/anyscribe/web/static/favicon.svg +1 -0
- anyscribe-0.16.0/src/anyscribe/web/static/index.html +17 -0
- anyscribe-0.16.0/src/anyscribe/web/static/kx-logo-white-128.png +0 -0
- anyscribe-0.16.0/src/anyscribe/web/static/kx-logo-white-32.png +0 -0
- anyscribe-0.16.0/src/anyscribe/web/static/kx-logo-white-64.png +0 -0
- anyscribe-0.16.0/tests/__init__.py +0 -0
- anyscribe-0.16.0/tests/conftest.py +27 -0
- anyscribe-0.16.0/tests/test_audio.py +41 -0
- anyscribe-0.16.0/tests/test_batch_timeout.py +83 -0
- anyscribe-0.16.0/tests/test_checkpoint.py +72 -0
- anyscribe-0.16.0/tests/test_config_dashboard.py +210 -0
- anyscribe-0.16.0/tests/test_config_set.py +205 -0
- anyscribe-0.16.0/tests/test_dedup.py +68 -0
- anyscribe-0.16.0/tests/test_delete.py +99 -0
- anyscribe-0.16.0/tests/test_download_cli.py +29 -0
- anyscribe-0.16.0/tests/test_errors.py +97 -0
- anyscribe-0.16.0/tests/test_fileutil.py +64 -0
- anyscribe-0.16.0/tests/test_instagram_downloader.py +156 -0
- anyscribe-0.16.0/tests/test_instagram_settings_migration.py +63 -0
- anyscribe-0.16.0/tests/test_isolation.py +17 -0
- anyscribe-0.16.0/tests/test_local_cli.py +311 -0
- anyscribe-0.16.0/tests/test_local_models.py +85 -0
- anyscribe-0.16.0/tests/test_local_setup.py +219 -0
- anyscribe-0.16.0/tests/test_logs_cli.py +95 -0
- anyscribe-0.16.0/tests/test_mcp_providers.py +31 -0
- anyscribe-0.16.0/tests/test_migrate_app_home.py +264 -0
- anyscribe-0.16.0/tests/test_migrate_cmd.py +382 -0
- anyscribe-0.16.0/tests/test_onboard_agent_cli.py +230 -0
- anyscribe-0.16.0/tests/test_onboard_headless.py +297 -0
- anyscribe-0.16.0/tests/test_orchestrator.py +89 -0
- anyscribe-0.16.0/tests/test_preflight.py +68 -0
- anyscribe-0.16.0/tests/test_providers.py +636 -0
- anyscribe-0.16.0/tests/test_resolve.py +304 -0
- anyscribe-0.16.0/tests/test_settings.py +225 -0
- anyscribe-0.16.0/tests/test_tray.py +200 -0
- anyscribe-0.16.0/tests/test_vault_index.py +21 -0
- anyscribe-0.16.0/tests/test_vault_writer.py +170 -0
- anyscribe-0.16.0/tests/test_web.py +276 -0
- anyscribe-0.16.0/tests/test_web_local.py +278 -0
- anyscribe-0.16.0/tests/test_web_onboarding.py +98 -0
- anyscribe-0.16.0/tests/test_youtube_downloader.py +148 -0
- anyscribe-0.16.0/ui/.gitignore +24 -0
- anyscribe-0.16.0/ui/README.md +73 -0
- anyscribe-0.16.0/ui/eslint.config.js +23 -0
- anyscribe-0.16.0/ui/index.html +16 -0
- anyscribe-0.16.0/ui/package-lock.json +3315 -0
- anyscribe-0.16.0/ui/package.json +34 -0
- anyscribe-0.16.0/ui/public/doodles-desktop-2.png +0 -0
- anyscribe-0.16.0/ui/public/doodles-desktop.png +0 -0
- anyscribe-0.16.0/ui/public/doodles-mobile-2.png +0 -0
- anyscribe-0.16.0/ui/public/doodles-mobile.png +0 -0
- anyscribe-0.16.0/ui/public/favicon.svg +1 -0
- anyscribe-0.16.0/ui/public/kx-logo-white-128.png +0 -0
- anyscribe-0.16.0/ui/public/kx-logo-white-32.png +0 -0
- anyscribe-0.16.0/ui/public/kx-logo-white-64.png +0 -0
- anyscribe-0.16.0/ui/src/App.tsx +55 -0
- anyscribe-0.16.0/ui/src/api/client.ts +179 -0
- anyscribe-0.16.0/ui/src/api/models.ts +35 -0
- anyscribe-0.16.0/ui/src/api/types.ts +227 -0
- anyscribe-0.16.0/ui/src/components/LanguageInput.tsx +96 -0
- anyscribe-0.16.0/ui/src/components/Layout.tsx +147 -0
- anyscribe-0.16.0/ui/src/components/LocalSetupModal.tsx +316 -0
- anyscribe-0.16.0/ui/src/components/Modal.tsx +123 -0
- anyscribe-0.16.0/ui/src/components/ModelInput.tsx +84 -0
- anyscribe-0.16.0/ui/src/components/OnboardingWizard.tsx +857 -0
- anyscribe-0.16.0/ui/src/components/ProgressTracker.tsx +115 -0
- anyscribe-0.16.0/ui/src/components/ResultCard.tsx +97 -0
- anyscribe-0.16.0/ui/src/components/SetupBanner.tsx +149 -0
- anyscribe-0.16.0/ui/src/components/URLInput.tsx +156 -0
- anyscribe-0.16.0/ui/src/hooks/useJob.ts +195 -0
- anyscribe-0.16.0/ui/src/index.css +126 -0
- anyscribe-0.16.0/ui/src/main.tsx +10 -0
- anyscribe-0.16.0/ui/src/pages/HistoryPage.tsx +203 -0
- anyscribe-0.16.0/ui/src/pages/SettingsPage.tsx +1391 -0
- anyscribe-0.16.0/ui/src/pages/TranscribePage.tsx +405 -0
- anyscribe-0.16.0/ui/src/pages/TranscriptView.tsx +118 -0
- anyscribe-0.16.0/ui/tsconfig.app.json +25 -0
- anyscribe-0.16.0/ui/tsconfig.json +7 -0
- anyscribe-0.16.0/ui/tsconfig.node.json +24 -0
- anyscribe-0.16.0/ui/vite.config.ts +20 -0
- anyscribe-0.16.0/vercel.json +7 -0
|
@@ -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,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.
|