3.2.0#955
Merged
Merged
Conversation
- Add passkey login as alternative authentication method - Support multiple passkeys per user with custom names - Backend: WebAuthn service, auth strategy pattern, API endpoints - Frontend: passkey management UI in settings, login option - Fix: convert downloader check from sync requests to async httpx to prevent blocking the event loop when downloader unavailable Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace pip + requirements.txt with uv for dependency management. - Multi-stage Dockerfile using ghcr.io/astral-sh/uv builder image - CI updated to use astral-sh/setup-uv@v4 - Ruff config moved to [tool.ruff.lint] (fixes deprecation) - Transitive deps removed, missing direct deps added (requests, PySocks, urllib3) - Database layer migrated to async (AsyncSession + aiosqlite) - Tests updated to match async database interface Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…accessibility Implement a comprehensive UI overhaul using CSS custom properties for theming, scoped SCSS for all components and pages, dark/light mode toggle with flash prevention, page transitions, ARIA accessibility attributes, and responsive layout fixes. Fix VueUse auto-import configuration and dev proxy target. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add passkey login as alternative authentication method - Support multiple passkeys per user with custom names - Backend: WebAuthn service, auth strategy pattern, API endpoints - Frontend: passkey management UI in settings, login option - Fix: convert downloader check from sync requests to async httpx to prevent blocking the event loop when downloader unavailable Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix aaguid type (str not bytes) in registration verification - Fix missing credential_backup_eligible field (use credential_device_type) - Remove invalid credential_id param from verify_authentication_response - Fix origin detection to use browser Origin header for WebAuthn verification - Add async database engine support (aiosqlite) for passkey operations - Convert UserDatabase to async-compatible with sync/async session detection - Update Database class to support both sync and async context managers Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
# Conflicts: # webui/src/components/ab-bangumi-card.vue # webui/src/components/ab-container.vue # webui/src/components/ab-fold-panel.vue # webui/src/components/ab-search-bar.vue # webui/src/components/basic/ab-search.vue # webui/src/components/basic/ab-tag.vue # webui/src/components/layout/ab-topbar.vue # webui/src/pages/index.vue # webui/src/pages/index/bangumi.vue # webui/src/pages/index/config.vue # webui/src/pages/index/player.vue # webui/src/pages/login.vue # webui/types/dts/auto-imports.d.ts # webui/vite.config.ts
- Add secondary button type to ab-button with proper styling - Fix small button sizing (min-width instead of fixed width) - Add btn-content wrapper for icon+text alignment in buttons - Add config-passkey panel to settings page - Improve WebAuthn error messages with DOMException handling - Prevent duplicate error messages from axios interceptor - Fix Vite proxy to preserve Origin header for WebAuthn Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The previous refactoring broke backward compatibility by converting Database from Session-extending sync class to a standalone async class. This broke RSSEngine, startup code, and auth flows. - Restore Database(Session) with sync interface for legacy code - Restore UserDatabase to sync methods - Restore security/api.py and auth.py to sync calls - Passkey API now uses async_session_factory directly - PasskeyAuthStrategy uses async sessions independently - Remove unused db_session from engine.py Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add minimal test server for passkey development (no downloader check) - Add changelog for version 3.2 features Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add weekly broadcast schedule page showing subscribed anime grouped by day-of-week. Backend fetches air_weekday from Bangumi.tv calendar API and matches titles. Frontend displays responsive grid (desktop) and vertical list (mobile). Edit popup moved to parent layout to fix KeepAlive conflicts, and restyled with purple theme. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Restyle config components (ab-container, ab-fold-panel, ab-label, ab-setting) and all config-* setting panels to use the new design system. Add empty state guides with setup steps for downloader and player pages. Simplify log page layout. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
# Conflicts: # backend/requirements.txt
# Conflicts: # backend/pyproject.toml # backend/requirements.txt # backend/src/module/api/passkey.py # backend/src/module/database/combine.py # backend/src/module/database/engine.py # backend/src/module/security/auth_strategy.py # backend/src/module/security/webauthn.py # webui/src/components/setting/config-passkey.vue # webui/src/hooks/usePasskey.ts # webui/src/pages/index/config.vue # webui/src/pages/login.vue # webui/src/services/webauthn.ts
Change program.startup() to run via asyncio.create_task() so uvicorn accepts connections immediately while downloader check runs in background. Also add .claude/ project settings. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix search store exports to match component expectations (inputValue, bangumiList, onSearch) and transform data to SearchResult format - Fix poster endpoint path check that incorrectly blocked all requests - Add resolvePosterUrl utility to handle both external URLs and local paths - Move tags into hover overlay on homepage cards and calendar cards - Show title and tags on poster hover with dark semi-transparent styling - Add downloader API, store, and page - Update backend to async patterns and uv migration changes - Remove .claude/settings.local.json from tracking Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename "Experimental Setting" to "LLM Settings" with cleaner labels - Replace jarring yellow warning banner with subtle themed notice - Only show config fields when LLM is enabled (slide-fade transition) - Add gpt-4o and gpt-4o-mini to model options - Use scoped CSS instead of UnoCSS utility classes for the section - Update i18n labels for both en and zh-CN Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The database classes (BangumiDatabase, TorrentDatabase, RSSDatabase) use synchronous Session, but tests were incorrectly using AsyncSession with await calls, causing AttributeError on coroutine objects. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
Previously the build pipeline only ran after a PR was merged to main. Now it also runs as a test build (push: false) when a PR is opened or updated from a *-dev branch, allowing build verification before merge. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
v3 is deprecated and GitHub now rejects it, causing build-webui to fail. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
The uv builder image (ghcr.io/astral-sh/uv:0.5-python3.12-alpine) only supports amd64 and arm64, not arm/v7. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
Include async migration, calendar view, downloader API, CI changes, and all bugfixes based on actual commit history. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
When subtitle groups change their naming convention mid-season (e.g., "LoliHouse" → "LoliHouse&动漫国"), AutoBangumi was creating duplicate entries. This adds a title alias system that: - Detects semantic duplicates (same official_title, dpi, subtitle, source, and similar group name) - Merges them as aliases instead of creating new entries - Updates match_torrent() and match_list() to check aliases - Adds title_aliases field to Bangumi model (JSON list) - Includes migration v8 for the new column - Adds 10 new tests for the feature - Fixes cache invalidation bug in disable_rule() Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Generates concise release notes showing only changes between beta versions: - Auto-detects previous beta tag - Groups commits by type (feat, fix, perf, docs) - Excludes chore/refactor/test commits from notes - Includes link to full changelog comparison Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend: - Add API test files for auth, program, downloader, config, log, bangumi extended, search, and passkey endpoints - Update conftest.py with new fixtures (app, authed_client, unauthed_client, mock_program, mock_webauthn, mock_download_client) - Update factories.py with make_config and make_passkey functions Frontend: - Setup vitest testing infrastructure with happy-dom environment - Add test setup file with mocks for axios, router, i18n, localStorage - Add mock API data for testing - Add tests for API logic, store logic, hooks, and basic components - Add @vue/test-utils and happy-dom dev dependencies Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use RSS type instead of non-existent RSSItem/RSSResponse - Add expire field to mockLoginSuccess - Replace offset with episode_offset/season_offset in mockBangumiAPI - Add needs_review_reason field to mockBangumiAPI - Add missing RSS fields (connection_status, last_checked_at, last_error) - Fix generic types in test utilities Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update requires-python to >=3.13 in pyproject.toml - Update ruff and black target versions to py313 - Update Dockerfile to use python:3.13-alpine - Add explicit Python 3.13 setup in CI workflow - Regenerate uv.lock for Python 3.13 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pydantic V2: - Replace @validator with @field_validator in models/config.py - Replace .dict() with .model_dump() in Config, Settings, and BangumiDatabase - Replace .parse_obj() with .model_validate() in Settings and tests - Replace Field(example=) with Field(json_schema_extra=) in response models Datetime: - Replace datetime.utcnow() with datetime.now(timezone.utc) in jwt.py - Update factories.py to use timezone-aware datetime FastAPI: - Migrate from deprecated @router.on_event() to lifespan context manager - Move startup/shutdown handlers from program.py to main.py Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add common.selectAll and common.items translations - Add theme.light and theme.dark translations - Update ab-mobile-nav to use i18n for theme toggle label - Remove hardcoded fallback in ab-data-list Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… redirects URLs entered without http:// or https:// were being treated as relative paths by the browser. Added normalizeUrl() function that prepends http:// when no protocol is present. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The media library path is now taken directly from the downloader path field, eliminating the unnecessary separate step. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Allow setup in dev mode even if settings differ from defaults - Add mock downloader type for development testing - Only check sentinel file in dev mode for need_setup status Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Path is now synced directly through downloaderData.path. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Standardize form element dimensions for visual consistency: - Input height: 48px → 44px (matches button height) - Input font: 16px → 14px (consistent with form elements) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add filter section with group, resolution, subtitle, season categories - Implement multi-select filters with smart disabling for incompatible options - Display result variant tags as non-clickable colored pills - Unify tag styling (pill shape, 12px font) across filters and results - Add expand/collapse for filter categories and variant overflow - Normalize tag values (resolution: FHD/HD/4K, subtitle: 简/繁/双语) - Calculate poster height to match 4 rows of variant chips (168px) - Add click-outside-to-close for modal Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
AutoBangumi 3.2.0
主要新功能 / Key Features
🎨 全新 UI 设计 / UI Redesign
🔍 搜索面板重新设计 / Search Panel Redesign
📱 移动端优化 / Mobile Interface
🧙 设置向导 / Setup Wizard
🗄️ 番剧归档 / Bangumi Archive
🔢 季度/集数偏移自动检测 / Season/Episode Offset Auto-Detection
🏷️ 标题别名系统 / Title Alias System
📥 种子管理 / Torrent Management
⚙️ 搜索源配置 / Search Provider Config
%s占位符📅 日历页分组 / Calendar Grouping
📡 RSS 连接状态追踪 / RSS Connection Status
⚡ 性能优化 / Performance
Backend
Frontend
shallowRef优化大数组computeduseIntervalFn替代setInterval)🐛 Bug 修复 / Bug Fixes
Backend
add_all()缺少去重检查导致重复添加番剧规则air_weekday列的问题'dict' object has no attribute 'files'错误disable_rule()未清除缓存导致匹配异常schema_version表确保数据库迁移可靠执行Frontend
🧪 测试 / Tests
新增全面的测试套件,覆盖核心业务逻辑:
📝 API 变更 / API Changes
新增端点:
PATCH /bangumi/archive/{id}- 归档番剧PATCH /bangumi/unarchive/{id}- 取消归档GET /bangumi/refresh/metadata- 刷新元数据GET /bangumi/suggest-offset/{id}- 获取建议的剧集偏移量POST /bangumi/detect-offset- 检测季度/集数偏移PATCH /bangumi/dismiss-review/{id}- 忽略偏移检查提醒GET /search/provider/config- 获取搜索源配置PUT /search/provider/config- 更新搜索源配置📦 数据库迁移 / Database Migrations
rssitem表添加连接状态字段bangumi表添加archived字段bangumi表添加title_aliases字段bangumi表添加needs_review和needs_review_reason字段schema_version表追踪迁移版本🤖 Generated with Claude Code