jxxghp
d86d24fc4f
feat(feishu): enhance message handling with file and voice support, add reaction management
2026-05-13 00:34:03 +08:00
jxxghp
0989439d25
feat(feishu): enhance message handling with file and voice support, add reaction management
2026-05-13 00:07:36 +08:00
jxxghp
a46ce24691
feat(venv): add uv compatibility for pip commands and enhance virtual environment setup
2026-05-12 23:01:27 +08:00
jxxghp
57bb67e547
feat(feishu): enhance message target resolution and add user ID type handling
2026-05-12 22:39:10 +08:00
jxxghp
5e5c257b75
fix(tmdb): cache serializable response snapshots
...
Avoid caching raw HTTP response objects in TMDb request helpers so Redis no longer fails on embedded locks. Add an isolated regression test for sync and async request snapshots.
Refs #5763
2026-05-12 22:31:56 +08:00
jxxghp
624862dfc6
feat(notification): add Feishu notification channel support
2026-05-12 21:40:55 +08:00
DDSRem
b172a6d08f
fix(telegram): handle caption messages in group chat mention detection ( #5761 )
...
* fix(telegram): handle caption messages in group chat @mention detection
Telegram media messages (photos, videos, etc.) store their text in
`message.caption` and mention entities in `message.caption_entities`,
not `message.text` / `message.entities`. The previous code only checked
`message.text`, so commands and @mentions sent with media were silently
skipped with "No text..." in the debug log.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
* fix(telegram): use correct entity field pairing and UTF-16 offsets for mention detection
- Explicitly pair message.entities with text messages and caption_entities
with media messages, avoiding false fallthrough on empty entity lists
- Decode mention text via UTF-16-LE encoding to respect Telegram's UTF-16
based offset/length values, fixing incorrect slicing when emojis are present
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 20:57:31 +08:00
DDSRem
10a9e7293a
fix(workflow): use MediaChain instead of SearchChain for recognize_by_meta in fetch_torrents
...
SearchChain does not have a recognize_by_meta method; this belongs to MediaChain.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 18:51:06 +08:00
jxxghp
fc2c77fbf1
fix(agent): refresh LLM runtime config on each call
...
Read the latest LLM connection settings when building runtime clients so Web updates take effect immediately instead of reusing module-import defaults.
Closes #5757
2026-05-12 18:48:31 +08:00
DDSRem
e4721fef0c
fix(plugin): allow non-core dependency upgrades during plugin install
...
When a plugin requires a newer minor version of a non-core dependency
(e.g. sentry-sdk ~=2.59.0 while 2.58.0 is installed), the conflict
check now distinguishes upgrade-only conflicts from downgrade conflicts.
Non-core packages that only need upgrading are allowed through; the
runtime constraints file uses >= instead of == for non-core packages so
pip can satisfy the upgrade without risking a downgrade.
Core packages (fastapi, pydantic, sqlalchemy, etc.) remain strictly
pinned and any version mismatch is still rejected.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-12 17:39:28 +08:00
jxxghp
2c45831714
feat(subscribe): add episode priority tracking for subscription updates
2026-05-12 17:22:50 +08:00
jxxghp
ea88f272a6
feat(system-settings): add unified tools for querying and updating system settings
2026-05-12 13:55:52 +08:00
jxxghp
ac090af606
feat(plugin): enhance dependency management by protecting main program dependencies and refining runtime constraints
2026-05-12 12:38:17 +08:00
InfinityPacer
1c17c0b07e
fix(zspace): honor _sync_libraries when counting medias by views
2026-05-12 11:56:44 +08:00
InfinityPacer
db6321d032
fix(zspace): classify views by sampling first item when CollectionType missing
2026-05-12 11:56:44 +08:00
InfinityPacer
d6270dfb81
fix(zspace): degrade library refresh logs when endpoints return 404
2026-05-12 11:56:44 +08:00
InfinityPacer
cc52bdaaf3
fix(zspace): get_latest queries Users/{uid}/Items sorted by DateCreated
2026-05-12 11:56:44 +08:00
InfinityPacer
cbc8592b49
fix(zspace): sum per-view TotalRecordCount when Items/Counts is unavailable
2026-05-12 11:56:44 +08:00
InfinityPacer
14d648445e
fix(zspace): fall back to Users/{uid}/Views for virtual folders
2026-05-12 11:56:44 +08:00
InfinityPacer
87777343d2
fix(zspace): fall back to Users/{uid}/Views for library folders
2026-05-12 11:56:44 +08:00
InfinityPacer
26aa49f323
fix(zspace): degrade get_user_count log when Users/Query is not implemented
2026-05-12 11:56:44 +08:00
InfinityPacer
ad8b6473fc
fix(zspace): fall back to current user when Users list endpoint is unavailable
2026-05-12 11:56:44 +08:00
InfinityPacer
c32df7446d
fix(zspace): drop Users/Me fallback to avoid mediaUid 400
2026-05-12 11:56:44 +08:00
album
05b34b9c26
feat(transfer): 增加手动整理预览模式(preview mode)
...
- ManualTransferItem/TransferTask 增加 preview 字段,支持同一接口双模式
- /api/v1/transfer/manual 透传 preview,预览时返回结构化结果不落盘
- ChainBase.transfer 增加 preview 参数并透传到 run_module
- TransferChain.do_transfer 预览分支复用完整命名/覆盖判定逻辑(dry-run)
- TransferChain.do_transfer 预览结束后显式 finish_task/fail_task,避免任务残留 running 状态导致重复预览失败
- TransHandler.transfer_media 预览分支跳过实际 copy/move/link/delete,仅返回目标路径
- FileManagerModule.transfer 透传 preview 参数
- 修复 /manual 失败分支 dict 类型导致 Response.message 校验错误
- 兼容性:preview 字段有默认值,旧客户端不传参时行为不变
2026-05-12 10:14:58 +08:00
jxxghp
41477601c7
feat: add test for ILinkClient connection and handle ilink_user_id error gracefully
2026-05-11 22:30:13 +08:00
jxxghp
a6ab9b76c1
feat: refactor ZSpace media server request handling and improve authorization headers
2026-05-11 22:24:15 +08:00
jxxghp
a62b6b6fd5
fix: correct plugin dependency package lookup
2026-05-11 21:24:14 +08:00
jxxghp
a2fa8d6f28
feat: rename methods for clarity in ZSpace media server integration
2026-05-11 18:35:20 +08:00
jxxghp
ed9116d81e
feat: refactor ZSpace media server integration and enhance item management methods
2026-05-11 18:21:21 +08:00
jxxghp
6db1dd2067
feat: add ZSpace media server support with authentication and item management
2026-05-11 18:09:38 +08:00
Aqr-K
0fb11880a4
perf(http): AsyncRequestUtils 默认启用 HTTP/2
...
为 AsyncRequestUtils 增加 http2: bool = True 参数(默认开启),
内部贯穿到 _get_shared_async_transport 与 path C 兜底 AsyncClient。
http2 加入共享 AsyncHTTPTransport 桶 key,让不同 h2 设置自动隔离。
启用基于 TLS ALPN:服务端宣告支持 h2 时切到 HTTP/2 多路复用;
不支持(含明文 HTTP、老 nginx/Apache)透明回落 HTTP/1.1。如个别
站点 h2 实现异常,调用方传 http2=False 单独关闭。
依赖:httpx extras 由 [socks] 扩展为 [socks,http2],引入纯 Python
包 h2 / hpack / hyperframe(无原生扩展)。
真实 TMDB 压测(30 部美剧 × 每部 50 集 = 3060 请求/版本):
HTTP/1.1 52.0s → HTTP/2 27.6s,节省 24.4s(1.88×)。
单请求 p95 由 96.1ms 降至 20.1ms,长尾大幅收敛。
公共 API 表面零变动;插件可按需 http2=False 单点关闭。
2026-05-11 17:15:23 +08:00
jxxghp
b7fc5b0203
feat: refine job handling by filtering active jobs and updating date context in prompts
2026-05-11 13:15:32 +08:00
jxxghp
1b2433f7c2
feat: implement runtime dependency checks and recovery for plugin installations
2026-05-11 08:54:34 +08:00
Aqr-K
c745616495
perf(http): 异步 HTTP 引入共享 AsyncHTTPTransport,复用 TCP/TLS 握手
...
AsyncRequestUtils 使用按事件循环弱引用持有的共享
AsyncHTTPTransport 作为底层连接池与 TLS 会话;每次请求创建轻量
AsyncClient 承载本次 cookie jar、timeout、follow_redirects,
用完即销毁。共享 transport 由 _NonClosingTransportProxy 包装后
注入 AsyncClient,吞掉 AsyncClient 退出时向底层 transport
传播的 __aexit__/aclose,使底层连接池跨调用持久,从而真正复用
TCP/TLS 握手。
设计要点:
- 共享 transport 桶按 (proxy, verify, max_keepalive_connections,
max_connections, keepalive_expiry) 区分;每事件循环 32 桶 LRU
上限,超出后异步关闭最久未用桶;关闭 task 由模块级强引用集合
持有以兼容 Python 3.11+ 的任务 GC 行为。
- 通过 FastAPI lifespan shutdown 调用 aclose_shared_async_transports
集中释放底层 transport,避免 ResourceWarning。
- AsyncRequestUtils.request 走三条 path:用户自管 client / 共享
transport + per-call AsyncClient / 兜底临时 client。三条路径
cookie 语义一致;后两条因 per-call AsyncClient 生命周期局限于
单次调用,天然不积累 Set-Cookie,避免跨调用 jar 演化串扰。
- _make_request 对幂等方法(GET/HEAD/OPTIONS)在
RemoteProtocolError / ReadError / WriteError 时单次重试,
容忍 keep-alive stale 连接命中;非幂等方法不重试,但记录
debug 日志。
- get_stream 使用 httpx.AsyncClient.stream() 标准流式 API,与
request 共用三条 path 的 client 选择逻辑;幂等单次重试;
yield 体异常透传给 stream 的 __aexit__。
公共 API 表面零变动。插件可通过 max_keepalive_connections /
max_connections / keepalive_expiry 三个 limits 参数为自己定制
连接池容量与握手有效期。
TMDB 真实压测(10 部美剧 × 每部 50 集,1020 请求):
61.96s → 18.15s(3.41×),单请求 p95 149.6ms → 38.1ms。
2026-05-11 08:46:40 +08:00
jxxghp
888ccfcfc2
feat: add detailed docstrings for methods in WechatClawBot and related modules
2026-05-11 08:25:25 +08:00
jxxghp
3c9228c2f8
feat: enhance iLink polling logic to support multiple payload formats and improve success determination
2026-05-11 08:02:17 +08:00
jxxghp
3776422634
fix: tighten wechatclawbot poll protocol handling
2026-05-11 07:15:04 +08:00
jxxghp
5021b2c86f
feat: implement message deduplication and enhance error handling in WechatClawBot
2026-05-10 23:40:22 +08:00
jxxghp
412e10972f
fix: optimize client instantiation in message sending logic
2026-05-10 23:00:47 +08:00
jxxghp
d0b1b3d7f0
feat: add QR code URL normalization for compatibility with various formats
2026-05-10 22:10:53 +08:00
jxxghp
f5fea25b41
fix: migrate wechat clawbot login cache on rename
2026-05-10 21:50:33 +08:00
jxxghp
68706d3d5b
feat: add standalone wechat clawbot notifications
2026-05-10 21:47:35 +08:00
jxxghp
c4d3d28491
fix: avoid blocking Ugreen startup on library preload
...
Delay Ugreen library loading until it is needed and cap poster wall pagination so a single Ugreen server cannot hang backend startup.\n\nFixes #5740
2026-05-10 12:19:36 +08:00
jxxghp
1862a7ab4b
feat: expose download save paths in API
...
Return configured download directories as API-ready save_path values so external integrations can choose download destinations without guessing local or remote path syntax.
Fixes #5737
2026-05-10 12:02:22 +08:00
jxxghp
adb7aa6aa9
fix: prevent repeated scans after history-based exits
...
Only mark downloader tasks as organized after a transfer history record exists, including existing-history skips and unrecognized media failures.
2026-05-10 10:25:39 +08:00
jxxghp
79eb128196
refactor: streamline media recognition by removing MetaInfoPath usage
2026-05-10 09:26:13 +08:00
jxxghp
4d132c424a
fix: avoid duplicate image fetch in transfer
...
Keep transfer recognition results ready for scraping without fetching images twice on the same path. Also ensure redo-by-path transfer recognition still populates image data before metadata scraping.
2026-05-10 08:22:27 +08:00
jxxghp
c52327c248
fix: only fetch images for scrape flows
...
Default title and path recognition to skip image fetching, while keeping scrape entrypoints and transfer-to-scrape paths populated with image data. This preserves lightweight recognition behavior without breaking metadata scraping.
2026-05-10 08:14:08 +08:00
jxxghp
1d97f2e043
fix: align media recognition fallback and shared reporting
...
Route title and path lookups through the fallback-aware entrypoints so auxiliary matches can reuse pre-assist keywords without forcing image fetches in lightweight flows. Also reduce noisy agent shutdown logging during cleanup.
2026-05-10 07:54:55 +08:00
Attente
ee9ea54ab7
feat(fanart): 添加异步支持并优化图片处理逻辑
2026-05-10 00:07:28 +08:00