github Tencent/WeKnora v0.8.3

5 hours ago

What's Changed

  • fix(website-docs): serve everything but the homepage from /docs/ by @lyingbug in #3664
  • test(website-docs): update integration test for the v0.8.2 header and release gallery by @lyingbug in #3665
  • fix(session): keep auto-generated titles plain text by @lyingbug in #3633
  • feat(models): add system admin model catalog console by @lyingbug in #3662
  • fix(ui): restore inner padding on form popups by @vinhchuquang in #3673
  • fix(browser): let shared-space agents drive the caller's local browser by @lyingbug in #3670
  • docs: restructure the English and Chinese READMEs by @lyingbug in #3676
  • docs(readme): website-matched design for all four READMEs by @lyingbug in #3679
  • fix(retriever/es): keep vectors and enabled state on CopyIndices by @lyingbug in #3678
  • fix(embed): warn at startup when no signing key is configured by @lyingbug in #3680
  • feat(docparser): support MinerU 4.0 V1 API for self-hosted MinerU by @lyingbug in #3671
  • fix(frontend): link docs to the public docs site instead of GitHub by @lyingbug in #3674
  • feat(retrieval): unify rerank across search APIs and expose diagnostics by @lyingbug in #3675
  • fix(desktop): pair the Lite browser against the local API listener by @nullptr-error in #3677
  • fix(rss): reject oversized responses instead of accepting truncated content by @yeliheng-010 in #3658
  • docs: new intro video, with its source by @lyingbug in #3684
  • feat(lite): install and run skills on the host by @nullptr-error in #3661
  • docs(readme): surface agent tools in the overview and condense feature tables by @lyingbug in #3688
  • fix(retrieval): fix recall correctness, score scales, cost and agent tools by @lyingbug in #3687
  • feat(gallery): add an image gallery tab with schema-driven filters by @tayadwx in #3694
  • feat(gallery): rework the gallery toolbar, header tabs and image viewer by @lyingbug in #3703
  • feat(chat): open cited documents at the cited passage by @lyingbug in #3700
  • fix(knowledge): stop parses from getting stuck in processing or finalizing by @lyingbug in #3696
  • docs(readme): swap in the new intro video by @lyingbug in #3685
  • fix: harden agent tool execution, stream completion and LLM retries by @lyingbug in #3706
  • fix(docparser): make the MinerU parse timeouts configurable by @lyingbug in #3707
  • fix(weaviate): accept a class another worker created first by @po-et in #3689
  • fix(notion): abort incremental sync when resource discovery fails by @yeliheng-010 in #3682
  • fix(feishu): stop Wiki pagination on repeated page tokens by @hahahahahayesyeseys in #3645
  • fix(agent): 合并相邻 assistant 消息时保留 tool_calls,避免孤儿 tool 消息导致整轮 400 by @linus-liu-web in #3574
  • fix(files): accept canonical storage:// paths in bare provider services by @dzc-bit in #3166
  • fix(im): handle unresolved Feishu resource images by @Jonesxq in #2761
  • docs: drop references to source files that no longer exist by @Jinzhengxu in #3631
  • docs(dev): clarify Swagger access in Docker Compose by @yeliheng-010 in #3620
  • fix(container): propagate host project lookup errors by @dvd233 in #3611
  • fix(helm): pin application images to chart version by @dafyy321-pixel in #3669
  • fix(frontend): mount the settings modal only once on /platform/settings by @lyingbug in #3717
  • refactor(frontend): drop TTL resource caches and remove duplicate startup requests by @lyingbug in #3562
  • feat(wiki): 增加跨知识库 Wiki 搜索 POST /wiki-search by @MercuialC in #3535
  • fix(models): stop advertising graded thinking levels the wire format drops by @DerrickLinus in #3552
  • fix(datasource): validate cron schedules and persist manual-only mode by @Perfecto23 in #3653
  • fix(knowledge): reject invalid JSON uploads before async parse by @xiaojunxiang2023 in #3360
  • fix(client): accumulate multiline SSE data by @quan020406 in #2122
  • feat(confluence): add directory sync and private image assets by @jacentsao in #3319
  • fix(docreader): sanitize non-conforming styles.xml fills before openpyxl loads (#3637) by @vicfei in #3638
  • fix(docreader): drop data validation ranges openpyxl cannot parse instead of failing the sheet (#3599) by @po-et in #3608
  • feat(datasource/yuque): preserve TOC folder hierarchy for synced documents by @RichardChengshaojin in #3476
  • fix(frontend): initialize chat citation popover after botmsg props by @lyingbug in #3732
  • feat(plugin): plugin system foundation — builtin plugins, config schemas and workspace switches by @lyingbug in #3711
  • feat(plugin): install declarative plugins — MCP servers, skills and model vendors by @lyingbug in #3716
  • feat(plugin): code plugins — extension protocol, Go SDK, plugin host, web search and data source adapters by @lyingbug in #3720
  • feat(plugin): Host API with a key-value store, and document parsers from plugins by @lyingbug in #3721
  • feat(plugin): remote runtime, Python SDK and python host plugins (P2 batch 3) by @lyingbug in #3724
  • feat(plugin): standalone plugin hosts with Redis discovery (P2 batch 4) by @lyingbug in #3725
  • feat(plugin): sandboxed plugin pages and the @weknora/plugin-ui bridge (P2 batch 5) by @lyingbug in #3727
  • feat(plugin): event delivery and webhooks for plugins (P2 batch 6) by @lyingbug in #3728
  • feat(plugin): dynamic form options, OAuth connections and resource limits (P2 batch 7) by @lyingbug in #3729
  • feat(examples): Jira Cloud plugin with OAuth, dynamic options and a skill by @lyingbug in #3730
  • feat(plugin): agent tools served by plugins, with result views (P2 batch 8) by @lyingbug in #3733
  • revert: take the plugin system back out of main by @lyingbug in #3735
  • fix(dev): propagate dev.sh exit status and pull MinIO from pgsty/minio by @lyingbug in #3738
  • fix(chat): drop stale minimap-target class binding by @lyingbug in #3754
  • fix(citations): 修复原文定位、高亮范围与 DocReader 启动失败 by @lyingbug in #3794
  • test(wiki): 表格夹具改用合成数据 by @linus-liu-web in #3795
  • fix(faq): actually clean FAQ entry payloads before validation and storage by @VictorMaznyuk in #3749
  • test(skills): wait for the host install to release its lock before asserting by @VictorMaznyuk in #3799
  • docs: extract active tenant ID in the API quickstart by @kwsYegar in #3719
  • fix(frontend): label host-sandbox skill secret cards like the sandbox cards by @VictorMaznyuk in #3736
  • fix(chat): clear stale KB scope on session restore by @bigdu332 in #3801
  • fix: skip table-summary tasks for missing documents by @Perfecto23 in #3742
  • fix: reject empty table-summary model responses by @Perfecto23 in #3740
  • fix(sandbox): pass desktop slot timing to the renew goroutine by @VictorMaznyuk in #3744
  • fix(wiki): fan out follow-up triggers so backlogs drain at ingest_max_inflight by @BaiMoHan in #3726
  • fix(server): run ResourceCleaner on signal shutdown instead of racing Fatalf exit by @vicfei in #3804
  • fix(datasource/dingtalk): 跳过不再静默,展开叶子不再报错 by @linus-liu-web in #3784
  • fix(datasource/dingtalk): 块级渲染不再静默丢内容(列表按线上真实形状渲染 + 未建模块类型可见) by @linus-liu-web in #3822
  • fix(gitlab): compare snapshots directly during incremental sync by @yeliheng-010 in #3815
  • fix(feishu): 云盘分页补上 #3645 给 wiki 加的重复 page token 防护 by @linus-liu-web in #3770
  • fix(notion): replace stale content when pages are cleared by @yeliheng-010 in #3756
  • fix(rss): retry full-text resolution after fallback by @yeliheng-010 in #3713
  • fix(models): keep Retry-After on HTTPError and honour it in agent LLM retries by @VictorMaznyuk in #3737
  • fix(compaction): 流因取消而关闭时不得当成空摘要成功返回 by @linus-liu-web in #3772
  • fix(repository): 关键词 LIKE/ILIKE 检索补显式 ESCAPE,修复 Lite 上静默漏结果 by @linus-liu-web in #3761
  • test(weaviate): 消除并发建表用例的随机失败(假服务器在 barrier 之后才采样 exists) by @linus-liu-web in #3759
  • fix(embed): 开启 Host context 后点击追问建议不再返回 400 by @nullptr-error in #3850
  • fix(frontend): normalize style guard paths by @dajiaohuang in #3860
  • fix(docs): spawn nested npm through Node on Windows by @dajiaohuang in #3858
  • fix(frontend): 修复复制模型时模型名称被改写的问题 by @lizijing98 in #3830
  • feat(auth): 新增仅限邀请注册档位 by @lyingbug in #3900
  • fix(sandbox): build real arm64 sandbox images and ship arm64 Cube variants by @nullptr-error in #3897
  • docs(api): 补充模型复制接口说明 by @lizijing98 in #3894
  • fix(auth): 登录时 token 落库失败不再被忽略 by @linus-liu-web in #3892
  • fix(ima): 笔记正文被清空后不再残留旧内容 by @linus-liu-web in #3888
  • fix(gitlab): 仓库文件下载补体积上限,超限报错而不是无界读入 by @linus-liu-web in #3887
  • feat(docparser): upgrade AnyDoc to 0.2.4 and parse assets once by @lyingbug in #3904
  • fix(embed): 内嵌网页只传图片不输入文字时不再返回 400 by @nullptr-error in #3866
  • fix(notion): 查询撞厂商上限被截断时不再静默,截断轮次不下发删除 by @linus-liu-web in #3845
  • fix(dataset): use supported default QA model by @hahahahahayesyeseys in #3965
  • fix(sqlite): 检索后端批量更新索引副本失败不再吞掉错误 by @linus-liu-web in #3768
  • fix(sqlite): 索引行写入失败不再被丢弃,BatchSave 回滚而不是留下「主行在、索引行不在」 by @linus-liu-web in #3843
  • fix(retriever/es): _bulk 的 per-item 失败不再被吞,全部被拒时 BatchSave 返回错误 by @linus-liu-web in #3842
  • fix(retriever): Qdrant/Milvus 关键词检索整批失败返回 error,不再当成「没有匹配」 by @linus-liu-web in #3847
  • fix(milvus): CopyIndices 按源 chunk ID 分批读,不再用 offset 窗口 by @linus-liu-web in #3883
  • fix(agent): query_knowledge_graph 的截断对模型与界面可见 by @linus-liu-web in #3885
  • fix: use consistent qdrant env settings by @Goodnight77 in #3960
  • fix(milvus): validate connections and preserve gRPC resolver defaults by @TaylorChen in #3654
  • fix(graph): preserve relationship direction and document provenance by @knqiufan in #3950
  • fix(faq): preserve chunk content and index state during clone status sync by @yeliheng-010 in #3993
  • fix: keep failed data-analysis table loads retryable by @Perfecto23 in #3745
  • fix(storage): use virtual-hosted addressing for Tencent COS through the S3 driver by @ankit373 in #3722
  • fix(summary): 坏 JSON 不再冒充文档摘要(截断/畸形 JSON 走失败路径,纯文本兜底保留) by @linus-liu-web in #3769
  • fix(chunker): preserve source offsets for table child chunks by @kwsYegar in #3969
  • fix(chunker): count an escaped pipe as cell text when matching table widths by @L4XB in #3979
  • fix(yuque): don't acknowledge failed detail fetches in the incremental cursor by @LuckVd in #3702
  • fix(feishu): 多维表格字段分页补重复 page_token 防护与条数上限 by @linus-liu-web in #3840
  • fix(gitlab): 分页循环补重复页防护与跳数上限 by @linus-liu-web in #3841
  • fix(ima): 三处游标分页补重复游标防护与跳数上限 by @linus-liu-web in #3889
  • fix(docreader): read EPUB chapters in spine order by @L4XB in #3977
  • fix(docparser): anydoc 内嵌 EMF/WMF 图片的扩展名与 Rust 序列化器对齐,不再静默丢图 by @linus-liu-web in #3938
  • fix(models): honor OpenRouter native thinking for legacy defaults by @tsumon in #3807
  • fix(agent): preserve SQL literals during data analysis column reconciliation by @yeliheng-010 in #3812
  • fix(agent): validate tool string lengths by Unicode code points by @icearia0219 in #3937
  • fix(agent): reject incomplete compaction summaries before checkpointing by @yeliheng-010 in #3994
  • fix(agent): 子 goroutine 上的 panic 不再杀死进程(MCP 预热 / 检索扇出 / 看门狗) by @linus-liu-web in #3846
  • fix(chat): clear stale file and tool selections on session restore by @Linxiushen in #3802
  • fix(mcp): keep the client secret from dynamic client registration by @po-et in #3763
  • fix(mcp): reconnect after the server forgets the session by @po-et in #3765
  • fix(mcp): pass embedded resources in tool results to the agent by @po-et in #3766
  • fix(mcp): include shared knowledge bases in endpoint scope by @dajiaohuang in #3848
  • fix(mcp): close legacy chat responses on HTTP errors by @KennyMcSimpson in #3930
  • fix(im/wecom): preserve image in mixed messages with text captions by @loganv in #3901
  • fix(knowledge): retry document processing after transient indexing failures by @yeliheng-010 in #3915
  • fix(knowledge): close spans left open on terminal rows and superseded attempts by @asmh1989 in #3855
  • fix(wiki): preserve pending work when source lookups fail by @hahahahahayesyeseys in #3715
  • fix(wiki): RebuildLinks 写失败不再静默,接口如实返回错误 by @linus-liu-web in #3884
  • chore(deps): bump the cli-deps group in /cli with 2 updates by @dependabot[bot] in #3920
  • fix(docs): make make docs reproduce the committed Swagger again by @VictorMaznyuk in #3751
  • feat(ui): add search to Skills and MCP toolbox lists by @hahahahahayesyeseys in #3731
  • fix(cli): propagate paginated response read errors by @dvd233 in #3983
  • fix(cli): render paginated API results in text mode by @dvd233 in #3984
  • fix(client): make multipart uploads replayable by @LeonSGP43 in #3989
  • fix(cli): apply list limits after filtering and sorting by @LeonSGP43 in #3990
  • fix(cli): preserve integer precision in jq output by @LeonSGP43 in #3991
  • fix(cli): classify wrapped SDK HTTP errors correctly by @LeonSGP43 in #3992
  • fix(client): accept optional spaces in SSE event fields by @fhgffy in #3975
  • fix(skills): skip vendored dep trees in install verification script enumeration by @vicfei in #3943
  • fix(sandbox): reclassify exec races with the idle sweep as NotFound so rebinding heals by @vicfei in #3980
  • fix(asynqdl): truncate dead-letter errors on a rune boundary by @kevin9327 in #3964
  • fix(middleware): stop buffering whole request bodies in the access log by @Tong-bit-art in #3927
  • fix(notion): 超过 block 上限截断时补 Warn,避免内容与子页面静默缺失 by @linus-liu-web in #3771
  • fix(notion): paginatePages 与 GetBlockChildrenFlat 补重复游标防护与页数上限 by @linus-liu-web in #3890
  • fix(docreader): keep the space held by a whitespace-only inline element by @L4XB in #3978
  • fix(data-analysis): skip style-only worksheets before DuckDB loading by @Perfecto23 in #3660
  • fix(frontend): render single tilde literally instead of GFM strikethrough by @MLYoshi in #3963
  • fix(qdrant): CopyIndices 用服务端返回的 next_page_offset 翻页,不再按页尾 id 回填 by @linus-liu-web in #3882
  • fix(dataset): allow selecting the QA answer model by @LingYi-Liang in #3944
  • fix(cli): preserve directory structure in doc upload --recursive by @skywolf123 in #3753
  • fix(multimodal): bound remote image downloads by the file size limit by @SEVEN-us in #3906
  • fix(knowledge): delete written chunks when the storage quota check fails by @huiq777 in #3656
  • fix(agent): preserve untouched numeric tool arguments during casting by @icearia0219 in #3936
  • fix(frontend): keep target="_blank" on sanitized markdown links by @ruanhaiqiang in #3818
  • fix(datasource): 语雀/Notion/IMA/飞书连接器 API 响应体补体积上限 by @yetuge in #3985
  • fix(model): treat 400 as reachable in chat connection test again by @KoulLife in #3929
  • fix(docparser): 云解析超时改为跟随既有配置,不再硬编码 by @linus-liu-web in #3891
  • feat(rerank): support Hugging Face TEI protocol by @bigdu332 in #3956
  • fix(rss): refresh titles and source links when article text is unchanged by @yeliheng-010 in #3824
  • fix(docreader): preserve PPTX fallback image associations by @LingYi-Liang in #3973
  • fix(kb): let the update API set vlm_config by @5quan in #3704
  • fix(chat_pipeline): treat non-JSON model refusals as skipped graph extraction by @LuckVd in #3606
  • fix(frontend): avoid false unsaved changes warnings by @lyingbug in #4019
  • fix(datasource/dingtalk): Validate 不再因为某个工作区读不到就整库判失败 by @linus-liu-web in #3782
  • feat(datasource): add Seafile data source connector by @Zaqqmm in #3616
  • feat(i18n): add Traditional Chinese (zh-TW) locale support by @junhao-ye in #3916
  • fix(i18n): add the zh-TW Seafile strings missing after #3616 and #3916 by @lyingbug in #4027
  • fix(chat): restore citation source navigation and soften highlights by @lyingbug in #4026
  • docs(models): state which rerank limits split requests and which fail the call by @lyingbug in #4033
  • fix(models): emit explicit empty content for assistant tool-call turns by @LuckVd in #3605
  • feat(rerank): support Pinecone Inference protocol by @bigdu332 in #3957
  • docs: count 29 built-in model vendors and list Hugging Face TEI and Pinecone by @lyingbug in #4048
  • feat: index and recall images with multimodal embedding models by @lyingbug in #3683
  • fix(settings): improve modal sizing and integration page layout by @lyingbug in #4052
  • fix(chunker): respect Markdown fences during heading detection by @Guo-Yixin in #3952
  • fix(agent): compare tool enum values without string coercion by @icearia0219 in #3948
  • fix(notion): preserve sync cursor when page block fetching fails by @yeliheng-010 in #3693
  • fix(weaviate): CopyIndices 补游标防护,并修掉 GraphQL 报错时的 panic by @linus-liu-web in #3881
  • fix(im): retry Yunzhijia attachment downloads on timeout by @jacentsao in #3809
  • fix(wiki): resolve titles for unloaded backlinks by @hahahahahayesyeseys in #3931
  • fix(chat): 在模型上下文中标注 FILTER_TOP_K 的子集截断,避免把前 N 条当作全集作答 by @linus-liu-web in #3758
  • fix(wiki): 唯一写出口 UpdatePage 拦住丢表格行的机器重写(agent 整页写入不再静默改短页面) by @linus-liu-web in #3793
  • feat(datasource/dingtalk): 摄取钉钉"上传文件"(docx/pptx/xlsx/pdf) by @linus-liu-web in #3786
  • fix(session): allow tenant admins to manage channel sessions by @helloxjade in #3939
  • fix(docreader): resolve EPUB images relative to their chapters by @SuperSgdk in #3924
  • fix(mcp): report advertised directory failures in connection tests by @helloxjade in #3905
  • fix(knowledge): claim cloned and released document images in the resource catalog by @tayadwx in #3752
  • feat: judge image hits by their image in rerank and show them to vision models by @lyingbug in #4013
  • fix(sandbox): omit env overrides when creating Aliyun E2B sandboxes from snapshots by @nullptr-error in #4054
  • feat: 支持构建时配置 app 与 docreader 下载镜像源 by @lizijing98 in #4073
  • fix(websearch): return results for non-webpage Metaso scopes by @jdzhang1221 in #4010
  • fix(agent): align web_search count limit with the configured maximum by @jdzhang1221 in #4011
  • fix(models): align configuration and multimodal embedding workflows by @lyingbug in #4080
  • fix(sandbox): treat E2B in_progress template builds as building by @lyingbug in #4108
  • fix(frontend): follow configured upload limit in hints by @hahahahahayesyeseys in #4110
  • fix(docker): install CA certificates before the browserskill mirror swap by @wangrui19971019 in #4104
  • fix(chat): keep custom metadata on knowledge-chat references by @Sairaj-24 in #4087
  • refactor: 出站拨号超时默认 5s 并改为 env 可配 (WEKNORA_OUTBOUND_DIAL_TIMEOUT) by @tayadwx in #4122
  • feat(mcp): support 2026-07-28 alongside legacy clients by @Perfecto23 in #4095
  • perf(embedding): batch Qwen3-VL message inputs by @lyingbug in #4126
  • fix(observability): distinguish retrieval diagnostic spans by @lyingbug in #4128
  • fix(gallery): improve image detail panel readability by @lyingbug in #4130
  • fix(ocr): reject invalid output and record extraction failures by @lyingbug in #4132
  • fix(ocr): reject split repetition and preserve no-text responses by @lyingbug in #4135
  • fix(chat): smooth streamed citation reveal cadence by @lyingbug in #4134
  • fix(chat): keep queued follow-up answers attached to their own question by @LaiYuanRong in #4112
  • fix(preview): refine source citation highlights by @lyingbug in #4139
  • feat(embed): support pasting screenshots into chat by @hahahahahayesyeseys in #4114
  • perf(reranking): accelerate MMR selection with sparse postings by @IIHGMII in #4094
  • fix(mcp): isolate slow connection teardown from other services by @yeliheng-010 in #4081
  • fix(mcp): stop advertising read-only endpoint tools as destructive by @wangrui19971019 in #4103
  • test(service): assert RRF ranks ignore retrieval-list arrival order by @iceriverlin in #4089
  • fix(mcp): preserve structured tool results for agents by @Guo-Yixin in #4074
  • fix(im/wecom): accept custom wss long-connection endpoints behind SSRF host checks by @LuckVd in #4070
  • fix(frontend): preserve the caret when outdenting Markdown lists by @dvd233 in #4071
  • fix(datasource/dingtalk): tighten Validate sampling edges by @wangrui19971019 in #4079
  • fix(agent): preserve steering order across persistence failures by @yeliheng-010 in #4078
  • fix(agent): enforce idle timeout while opening model streams by @yeliheng-010 in #4063
  • fix(sqlite): add MCP metadata migration by @hahahahahayesyeseys in #4060
  • fix(qdrant): wait for writes to finish by @Goodnight77 in #4061
  • fix(mcp): preserve disabled state on service creation by @hahahahahayesyeseys in #4059
  • fix(retrieval): skip KB retrieval for summarize intent by @AstonKrss in #4062
  • fix(i18n): correct Korean username rule message to match the pattern by @KoulLife in #4025
  • fix(agent): account for file paths in read pagination budgets by @icearia0219 in #4018
  • test(docreader): add unit tests for utils.split text-splitting helpers by @Jay0130-a in #4020
  • feat(sandbox): Docker 后端支持交互式终端 by @nullptr-error in #4023
  • feat(wiki): improve graph layout, theme captions and group focus by @lyingbug in #4147
  • style: polish sidebar, list pages, toolbox and citation UI by @lyingbug in #4154
  • feat(gallery): replace pagination with infinite masonry scrolling by @lyingbug in #4156
  • feat(system): add platform user management and streamline settings by @desksk in #4153
  • fix(models): stop sending temperature to Claude models that reject it by @pcbeingused333 in #4155
  • fix: align settings layouts and tolerate existing migration objects by @lyingbug in #4164
  • feat(models): add Claude Opus 5.5, Sonnet 5.5 and Haiku 5.5 to the catalog by @pcbeingused333 in #4158
  • fix(deploy): pass WEKNORA_OUTBOUND_DIAL_TIMEOUT through to the app container by @VictorMaznyuk in #4157
  • fix(mcp): close only the authorizing user's connection after OAuth by @ochanism in #4138
  • fix(database_query): preserve owner tenant in shared knowledge scopes by @HelloAndyZhang in #4136
  • fix(deploy): bump paradedb image to v0.25.11-pg17 by @LuckVd in #4120
  • feat(helm): allow Service name overrides with matching consumer references by @Perfecto23 in #4109
  • feat(rerank): add Cohere provider for the v2 rerank API by @kwsYegar in #4090
  • fix(feishu): add shared request pacing and improve HTTP 429 / error 99991400 retries in Feishu Wiki synchronization by @Lyang77 in #4039
  • docs: clarify frontend development proxy configuration by @Jarvis636431 in #4171
  • fix(datasource/gitlab): emptied files no longer leave their old body searchable by @Tong-bit-art in #4008
  • fix(qdrant): accept a collection another worker created first by @Goodnight77 in #3999
  • fix(agent): accept adjacent prefixed Python string literals by @icearia0219 in #4006
  • fix(mcp): bound resource listing pagination by @icearia0219 in #4007
  • docs: refresh LICENSE third-party notices by @lyingbug in #4178
  • docs: explain knowledge upload folder paths by @Jarvis636431 in #4177
  • fix(mcp): ignore discover probe in resource list tests by @lyingbug in #4179
  • feat(gallery): filter images by source document by @tayadwx in #4159
  • refactor(gallery): turn source document filter into a toolbar popover by @lyingbug in #4190
  • docs(api): clarify knowledge-search scope union of knowledge_base_ids and knowledge_ids by @lyingbug in #4191
  • style(frontend): polish knowledge base settings hints and sub-sections by @lyingbug in #4193
  • fix(frontend): respect Markdown indentation selection boundaries by @Jarvis636431 in #4195
  • fix(helm): configure app rollouts and document shared storage by @Jarvis636431 in #4180
  • fix(agent): make agent tool selection match the tools the runtime registers by @ochanism in #4211
  • feat(agent): read chat attachments on demand by @lyingbug in #4203
  • feat(mcp): let callers without a browser obtain MCP OAuth tokens by @ochanism in #4229
  • fix(frontend): preserve inline images in EPUB previews by @Jarvis636431 in #4226
  • fix(frontend): preserve nonempty lists when pressing Enter by @Jarvis636431 in #4224
  • fix(knowledge): make the knowledge base description token budget configurable by @LuckVd in #4230
  • fix(docs): prebundle fastdom when mermaid imports it (#2899) by @Frank-zhu2000 in #4208
  • fix(mcp): keep OAuth token expiry independent of the process time zone by @ochanism in #4207
  • feat(models): add WeMM embedding presets and Transformers serving by @lyingbug in #4238
  • fix(skill): do not fail installs on non-blocking observations by @lyingbug in #4246
  • feat(chat): polish rewind confirm and mark sessions with unread replies by @lyingbug in #4247
  • fix(mcp): offer OAuth prompt after tool approval and tidy tools panel by @lyingbug in #4248
  • feat(chat): add global search to the @ mention menu and align its styling by @lyingbug in #4249
  • feat(agent): name the turn's chat model on the completion event by @ochanism in #4252
  • fix(chat): locate citations in manual Markdown documents by @lyingbug in #4278
  • fix(agent): clarify attachment image paths and chart readings by @lyingbug in #4283
  • chore(release): finalize v0.8.3 website and documentation by @lyingbug in #4285

New Contributors

Full Changelog: v0.8.2...v0.8.3

https://weknora.weixin.qq.com/docs/07-releases/v0.8.3

Don't miss a new WeKnora release

NewReleases is sending notifications on new releases.