github Tencent/WeKnora v0.9.0

4 hours ago

What's Changed

  • fix(docs): stabilize anchor navigation and link release topics by @lyingbug in #4287
  • feat(agent): persist human-in-the-loop prompts with a shared broker by @lyingbug in #4250
  • feat(search): add RRF controls in a tabbed settings popover by @lyingbug in #4300
  • docs(swagger): document the real request and response types by @lyingbug in #4304
  • feat(agent): add the built-in WeKnora assistant with an operation catalog by @lyingbug in #4302
  • feat(agent): let the WeKnora assistant read the bundled documentation by @lyingbug in #4303
  • fix(ui): compact resource list headers in Lite mode by @lyingbug in #4316
  • fix(agent): admit catalog operations only from knowledge API areas by @lyingbug in #4317
  • fix(agent): let the WeKnora assistant search without its own rerank model by @lyingbug in #4315
  • feat(frontend): open the WeKnora assistant from anywhere with page context by @lyingbug in #4314
  • feat(agent): open more workspace operations to the WeKnora assistant by @lyingbug in #4318
  • feat(agent): let the assistant delete and move documents in batches by @lyingbug in #4319
  • docs(site): add the model leaderboard page by @begoniezhao in #4333
  • feat(agent): let the assistant manage FAQ entries by @lyingbug in #4327
  • feat(assistant): side panel, access levels and role-aware operations by @lyingbug in #4342
  • feat(assistant): manage agents and skills, separate history, refresh pages by @lyingbug in #4344
  • fix(assistant): reject restored ordinary sessions by @hahahahahayesyeseys in #4356
  • feat(assistant): let the assistant manage knowledge bases by @lyingbug in #4353
  • refactor(image): turn the hard-coded image flow into configurable pipelines by @tayadwx in #3746
  • feat(datasource): deep-adapt Feishu/Lark sync with folder mirror, block parsing and embedded objects by @Greenplumwine in #3497
  • fix(im): cap IM callback bodies before any adapter reads them by @Tong-bit-art in #4369
  • fix(web-search): bound provider response bodies instead of buffering them whole by @Tong-bit-art in #4370
  • fix(mcp): avoid replaying tools after ambiguous call failures by @Guo-Yixin in #4124
  • fix(embedding): read the pool's first-error guard under its own mutex by @Tong-bit-art in #4014
  • fix(chat): persist failed quick-answer turns so errors survive refresh by @AstonKrss in #4306
  • fix(data-analysis): resolve workspace storage backends in quick answers by @kerthans in #4214
  • fix(mcp): separate SSE connection lifetime from request timeouts by @yeliheng-010 in #4140
  • fix(docparser): bound MinerU result packages and their expansion by @Tong-bit-art in #4396
  • fix(embed): hide host context in user messages by @LuckVd in #4388
  • fix(embed): send images when an OpenAI-compatible row declares them by @JSJ189 in #4389
  • fix(models/api): cap non-streaming provider response bodies by @Tong-bit-art in #4397
  • fix(tools): reject legacy binary .xls with an actionable error by @Jay0130-a in #4374
  • build(docker): mount the Go build cache when building the app image by @tayadwx in #4320
  • feat(assistant): trial runs, session grants, page links, and MCP/model/skill management by @lyingbug in #4375
  • fix(frontend): cap concurrent status requests in upload polling by @ignity21 in #4348
  • fix(frontend): label the parser engine the backend will actually pick by @NIU-123370 in #4354
  • fix(knowledge): leave the root span open while a retry is left by @NIU-123370 in #4357
  • feat(assistant): expand management operations and polish interaction UI by @lyingbug in #4427
  • feat(assistant): let the assistant find skills and MCP services on the web by @lyingbug in #4429
  • fix(anydoc): upgrade patched zip dependency to 9 by @lyingbug in #4437
  • fix(docreader): keep a pipe inside an HTML table cell in that cell by @L4XB in #4433
  • fix(agent): share one configurable budget for web_fetch by @Frank-zhu2000 in #4432
  • fix(docparser): keep JSON numbers and <, >, & as written in JSON uploads by @L4XB in #4436
  • fix(knowledge): 文件夹树显示递归文档数,不再把有子目录的文件夹显示成 0 by @linus-liu-web in #4428
  • fix(chat): 消息历史与搜索的 limit 补上下界,limit=-1 不再取消 SQL LIMIT by @linus-liu-web in #4409
  • fix(wiki): 列 wiki 页面的 page_size 补上界,与兄弟路径一致 by @linus-liu-web in #4407
  • fix(models): 图片解析复用仓储层的 provider scheme 表,对象存储上的图片不再原样交给厂商 by @linus-liu-web in #4405
  • fix(mcp): clarify read_document query and pagination semantics by @Jarvis636431 in #4403
  • fix(search): preserve chunk types in tool results by @Jarvis636431 in #4402
  • fix(feishu): keep nested text in native table cells by @davien in #4400
  • feat(graph): add standalone JSON graph search API by @ZXLyyds100 in #4395
  • fix(docparser): keep every row and cell of a CSV upload in its table by @L4XB in #4435
  • fix(wiki): read scanned-page OCR when the text chunks are only images by @wangrui19971019 in #4430
  • feat(resource): 相同图片字节复用一个 handle,不再重复写字节与重复注册 by @linus-liu-web in #4419
  • fix(docreader): Excel 百分比被读小 100 倍 —— 加开关(默认关) by @linus-liu-web in #4423
  • fix(helm): make the data-files claim access modes configurable by @Jay0130-a in #4425
  • feat(datasource/dingtalk): 保留来源目录结构(开关控制,默认关) by @linus-liu-web in #4422
  • fix(datasource/dingtalk): Validate 只校验所选范围,不再扫全租户 by @linus-liu-web in #4421
  • fix(datasource): 数据源类型图标的 alt 用本地化显示名,不再用裸 type by @linus-liu-web in #4420
  • fix(yuque): 两处 offset 分页补跳数上限、重复页检测与 meta.total 提前结束 by @linus-liu-web in #4415
  • fix(notion): 附件下载失败中止本轮不再推进游标,附件不再永久缺失 by @linus-liu-web in #4413
  • fix(notion): 递归子块分页补重复游标与跳数上限,兜底不再被空页绕过 by @linus-liu-web in #4411
  • test(mcp): cover read_document query and pagination contract by @Activer007 in #4426
  • fix(frontend): bundle PDF.js wasm decoders by @LuckVd in #4382
  • feat(docreader): 上传 HTML 只索引正文,与 URL 导入路径对齐(开关,默认关) by @linus-liu-web in #4424
  • fix(feishu): stop logging tenant access token fragments by @davien in #4399
  • feat(assistant): add durable multi-agent collaboration and live task views by @lyingbug in #4438
  • fix(agent): let open_page finish the turn with the answer above it by @lyingbug in #4472
  • style(assistant): tone down the running child agent highlight by @lyingbug in #4476
  • fix: reject invalid image inputs before multimodal extraction by @lyingbug in #4489
  • feat(agent): unified agent permission model with grants and run modes by @lyingbug in #4490
  • fix: preserve business session identity in model requests by @lyingbug in #4491
  • feat(chat): fold long streaming timelines and steady their height by @lyingbug in #4496
  • feat(automation): scheduled agent runs with in-app notifications by @lyingbug in #4492
  • feat(sandbox): 双模式沙箱分配的基础(门控关闭,线上行为不变) by @nullptr-error in #4507
  • fix(automation): enforce execution identity, cancellation, and scheduling limits by @lyingbug in #4506
  • feat(sandbox): 按分配记录定位共享沙箱(门控仍关闭) by @nullptr-error in #4509
  • feat(sandbox): 共享机器的用户模式闭环(删除、回收、管理与桌面) by @nullptr-error in #4510
  • feat(automation): improve model settings, task controls, and notification inbox by @lyingbug in #4514
  • fix(agent): route new knowledge through document ingestion by @lyingbug in #4525
  • refactor(automation): run scheduled tasks through the assistant by @lyingbug in #4522
  • fix: preserve source references and refine chat automation UI by @lyingbug in #4534
  • feat(chat): animate active timeline icons by @lyingbug in #4535
  • fix(settings): keep direct settings closes inside the app by @jiangjiang248 in #4524
  • feat(sandbox): 共享沙箱短会话目录 + 移除工具层目录限制 by @nullptr-error in #4533
  • fix(mcp): invalidate stale OAuth dialog requests by @dakjdakd in #4531
  • perf(sourceloc): index align matches in one document scan by @sun-sh in #4544
  • fix(auth): let retrieve-scoped API keys discover shared knowledge bases by @u7-u7 in #4523
  • fix(datasource): enforce sync log retention policies by @dakjdakd in #4532
  • fix(qa): resolve shared KB chat models in their owner tenant by @lyingbug in #4557
  • fix(web_fetch): decode non-UTF-8 HTML pages by declared charset by @kerthans in #4556
  • fix(db): stop logging bound parameters in GORM slow-query logs by @Frank-zhu2000 in #4561
  • fix(export): sort conversation messages by timestamp instants by @fengyue-xve in #4559
  • fix(citations): match canonically equivalent Unicode text by @fengyue-xve in #4560
  • fix(datasource): truncate failed sync detail at rune boundary by @kerthans in #4555
  • fix(router): truncate dead-letter knowledge errors at rune boundary by @kerthans in #4554
  • fix(agent): show legacy empty MCP config as all in editor by @wzxsdf in #4558
  • fix(automation): reject nonexistent one-shot local times by @fengyue-xve in #4551
  • feat(confluence): support personal access token authentication by @Jarvis636431 in #4549
  • fix(rerank): preserve literal fenced code in model passages by @mmhh256 in #4521
  • fix(rerank): accept bare array responses from self-hosted runtimes by @u7-u7 in #4518
  • fix(download): honor language tags in extended filenames by @fengyue-xve in #4517
  • fix(preview): distinguish image and audio ISO media brands by @fengyue-xve in #4515
  • fix(postgres): 兼容 pgsearch 关键词评分函数 by @panjiedev in #4502
  • fix(im): resolve resource URLs through bound storage backends by @lyingbug in #4578
  • feat(image): add opt-in, bounded preprocessing before OCR by @tayadwx in #4381
  • fix(web-search): keep error previews valid UTF-8 by @sun-sh in #4583
  • fix(faq): preserve disabled state when importing entries by @Jarvis636431 in #4581
  • feat(background): shared background-work runtime by @nullptr-error in #4579
  • feat(shell): async shell jobs for web and Lite by @nullptr-error in #4580
  • fix(frontend): ignore stale document detail responses by @dakjdakd in #4627
  • fix(rss): preserve full text during article refresh failures by @dakjdakd in #4625
  • fix(knowledge): preserve shared resources during clone rollback by @dakjdakd in #4623
  • fix(gallery): cancel stale image fetches before Blob allocation by @Jarvis636431 in #4588
  • fix(ui): avoid full list reloads while awaiting batch reparse by @jiangjiang248 in #4618
  • fix(datasource): truncate connector error previews at rune boundaries by @yetuge in #4614
  • fix(errors): truncate error messages at rune boundaries by @sun-sh in #4609
  • fix(import): accept formats advertised by parser engines by @Jarvis636431 in #4602
  • fix(feishu): 支持知识库快捷方式子文档同步 by @Lyang77 in #4565
  • fix(wiki): restore rewritten wkimg placeholders instead of persisting broken links by @u7-u7 in #4552
  • fix(agent): reject oversized sandbox appends before reading by @icearia0219 in #4577
  • fix(agent): honor read_file match limits when searching by @icearia0219 in #4575
  • fix(data-analysis): allow safe scalar casts in SQL validation by @kerthans in #4215
  • fix(openaicompletions): keep streamed tool calls without an index apart by @pcbeingused333 in #4593
  • fix(googlegenai): map the remaining safety finish reasons to content_filter by @pcbeingused333 in #4592
  • fix(agent): treat model_context_window_exceeded as a length finish reason by @pcbeingused333 in #4589
  • fix(logger): namespace log format configuration and isolate log tests by @lyingbug in #4639
  • fix(agent): preserve multimodal content during message sanitization by @icearia0219 in #3949
  • fix(docparser): treat anydoc resource limits as permanent parse failures by @Frank-zhu2000 in #4573
  • fix(retriever): bound vector indexing memory with saved windows by @mmhh256 in #4584
  • fix(docreader): crop the original image after detecting on a probe by @tayadwx in #4586
  • fix: store inline images and apply AI budget in document order by @jacentsao in #4121
  • fix(frontend): preserve numeric literals in JSON preview by @Zicheng-Xie in #4620
  • fix(preview): reject invalid UTF-8 before decoding CSV by @XY-code1 in #4479
  • fix(wiki): support similar page lookup on SQLite by @huong8373tt-beep in #4605
  • fix(docreader): release raw PDF images after encoding by @uhhgxg in #4562
  • fix(sandbox): rebind when attachment staging loses its container by @wangrui19971019 in #4220
  • feat(faq): add list view toggle by @Arc10p in #4566
  • fix(lite): reclaim superseded reparse chunks by @huong8373tt-beep in #4595
  • fix(im): only reply to Feishu group messages mentioning this bot by @johnnyjy in #3505
  • fix(vectorstore): clarify PostgreSQL requirements by @huong8373tt-beep in #4655
  • fix(knowledge): keep document toolbar actions inside the pane by @Jarvis636431 in #4653
  • fix(datasource): escape filenames in generated multipart uploads by @sun-sh in #4647
  • perf(wiki): coalesce graph label updates and skip hidden SVG layout by @Jarvis636431 in #4646
  • fix(login): keep the sign-in form visible on phones by @huong8373tt-beep in #4645
  • fix(datasource): honor skip conflict strategy by @LuckVd in #4643
  • perf(chunker): avoid quadratic protected span sorting by @po-et in #4633
  • fix(docreader): keep Markdown block structure in EPUB chapters by @MaxFreedomPollard in #4632
  • fix(docreader): reclaim memory after large read requests by @helloxjade in #4628
  • fix(knowledge): hide parser hint for read-only users by @LuckVd in #4487
  • fix(search): isolate multi-KB embedding dimensions by @sun-sh in #4659
  • fix(mcp): offload chat metadata lookups from event loop by @Linxiushen in #4499
  • fix(docreader): preserve transparency in PPTX fallback images by @LingYi-Liang in #4678
  • fix(docreader): preserve external EPUB image references by @po-et in #4676
  • fix(wiki): respect word boundaries in SQLite trigram candidates by @wcy12378 in #4679
  • fix(agent): clear the exhausted-compaction mark when a compaction succeeds by @ydflow in #4677
  • fix(system): keep sandbox deep-check probe previews valid UTF-8 by @ydflow in #4675
  • fix(sandbox): keep stderr previews in user-facing errors valid UTF-8 by @ydflow in #4674
  • fix(agent): truncate tool-call hints by runes, not bytes by @ydflow in #4673
  • fix(agent): compact the unsanitized history on overflow recovery by @ydflow in #4672
  • fix(client): cap SDK error response bodies at 1 MiB by @Tong-bit-art in #4721
  • fix(chat): keep distinct facts in partial-overlap dedup by @Frank-zhu2000 in #4719
  • fix(docparser): recover malformed PDFs with the builtin reader by @acse-bq23 in #4716
  • fix(docreader): bound embedded PDF image selection memory by @acse-bq23 in #4715
  • fix: preserve shared sandboxes across skill updates by @lyingbug in #4729
  • fix(settings): preserve retrieval changes during autosave by @wuning159 in #4722
  • fix: show async postprocess duration in trace by @FOWEPJF255 in #4711
  • fix(rerank): describe score scales by endpoint output by @mmhh256 in #4701
  • fix(sqlite): support organization and wiki searches by @wzxsdf in #4698
  • fix(knowledge): cap the knowledge-base definition body at 1 MiB by @yetuge in #4730
  • docs(api): document VLM setup when creating a knowledge base by @Linxiushen in #4695
  • fix(knowledge): configurable question-generation token budget by @LuckVd in #4690
  • fix(knowledge): feed OCR chunks to auto-tag classification by @LuckVd in #4689
  • fix(organization): ignore stale member search responses by @wuning159 in #4726
  • fix(cli): trim env credentials in auth token output by @ydflow in #4696
  • fix(docreader): prevent XLSX chunking timeouts by @wzxsdf in #4683
  • fix(agent): stop repeated failed tool calls by @LuckVd in #4334
  • fix(docreader): report the file size limit in MB by @LingYi-Liang in #4670
  • fix(cli): carry --modified-args/--reason in the exit-10 retry argv by @ydflow in #4686
  • fix(docparser): budget the CSV table render before padding it out by @ydflow in #4702
  • fix(knowledge): cap the hybrid-search body at 1 MiB by @yetuge in #4731
  • fix(docreader): preserve regex semantics when splitting text by @LingYi-Liang in #4669
  • fix(docreader): preserve declared XLSX shared string parts by @LingYi-Liang in #4666
  • fix(skills): truncate a downloaded skill error body at a rune boundary by @yetuge in #4665
  • fix(docreader): bound streamed PDF image memory by @LuckVd in #4664
  • fix(memory): resolve shared-agent memory in the caller's workspace by @cainbit in #4663
  • fix(agent): treat model_context_window_exceeded as a length stop in compaction by @ydflow in #4681
  • fix(modelcontext): preserve citations in JSON strings by @errpunk in #4733
  • fix(models): ask Claude for summarized thinking in adaptive mode by @pcbeingused333 in #4184
  • fix(agent): preserve native integer literals during parameter casting by @icearia0219 in #4483
  • fix(agent): normalize Python physical newlines before quote checks by @icearia0219 in #4482
  • fix(docparser): escape standalone image filenames in Markdown by @Jarvis636431 in #4475
  • fix(settings): ignore stale member list search responses by @wuning159 in #4735
  • fix(docparser): attach api key in MinerU protocol detection by @JSJ189 in #4470
  • fix(search): keep vector hits when keyword retrieval fails by @LuckVd in #4459
  • feat(assistant): add contextual entry points and guided actions by @lyingbug in #4757
  • feat(assistant): tailor welcome questions to the current page by @lyingbug in #4758
  • fix(mcp): add VS Code setup and pin the stdio fallback by @playb0t in #4363
  • fix(multimodal): fall back to knowledge base VLM when document model is unavailable by @LuckVd in #4743
  • fix(feishu-drive): skip OS metadata files instead of failing the sync by @u7-u7 in #4738
  • fix(web-fetch): report a Chromium deadline as a retryable timeout by @wangrui19971019 in #4468
  • fix(feishu): checkpoint sync rounds that skip every node by @u7-u7 in #4736
  • fix(helm): derive safe app rollout strategy for RWO storage by @wzxsdf in #4756
  • fix(models): prevent heartbeats from restoring released concurrency leases by @ydflow in #4755
  • fix(cli): classify keychain read failures as keychain_denied, not token_expired by @ydflow in #4684
  • fix(im): preserve attachment filenames by @sun-sh in #4752
  • fix(client): expose knowledge-base parser engine rules by @jiangjiang248 in #4753
  • fix(sandbox): rebind a file op when the container has already stopped by @wangrui19971019 in #4749
  • fix(modelcontext): keep literal ref text out of citation expansion by @wangrui19971019 in #4748
  • fix(metric): keep every sentence in BLEU and ROUGE scores by @xiashao in #4746
  • refactor(wiki): remove unused string truncation helper by @xiashao in #4744
  • fix(docparser): 限制 CSV 转换膨胀并支持取消 by @Jarvis636431 in #4485
  • fix(parser): route PPTX vector media through docreader by @mmhh256 in #4705
  • fix(googlegenai): count tool-use prompt tokens as input tokens by @pcbeingused333 in #4594
  • fix(web-search): truncate the DuckDuckGo result title at a rune boundary by @yetuge in #4615
  • fix(knowledge): bound batch polling and ignore stale responses by @wuning159 in #4648
  • feat(server): allow explicit frontend directory in standard edition by @alikatgh in #4637
  • fix(docreader): honor explicit MHTML root parts by @po-et in #4636
  • fix(docreader): preserve code fences during table normalization by @fengyue-xve in #4494
  • feat(vlm): make max_tokens configurable via VLM_MAX_TOKENS by @OUAO-FRANK in #4478
  • feat(mcp): support document-scoped knowledge search by @Jarvis636431 in #4463
  • fix(chat): generate concise sidebar session titles by @Annabelle0726 in #4465
  • fix(web-search): make default provider changes atomic by @hahahahahayesyeseys in #4454
  • fix(docreader): keep spreadsheet cells that say N/A, None or NULL by @L4XB in #4452
  • fix(docreader): keep the text of DOCX content controls and tracked insertions by @L4XB in #4448
  • fix(docreader): keep the footer rows of an HTML table in that table by @L4XB in #4441
  • fix(preview): 知识库文档预览的 Markdown 排版(标题层级/间距/代码块/去重标题) by @linus-liu-web in #4439
  • fix(agent): describe uploads when the chat model cannot see images by @wangrui19971019 in #4219
  • fix(data-analysis): read legacy xls workbooks by @wangrui19971019 in #4218
  • fix(client): close the response body on the duplicate-URL path by @Tong-bit-art in #4202
  • fix(cli): emit bool retry_argv flags in the form pflag can parse back by @Tong-bit-art in #4197
  • fix(frontend): distinguish graph availability errors from disabled state by @yeungmingyik in #4172
  • fix(docreader): keep Excel header labels unique by @ranjianghong526-hash in #4160
  • feat(helm): support app.extraVolumes and app.extraVolumeMounts by @kalandramo in #4332
  • fix(housekeeping): scan the queues once per sweep, not once per row by @ignity21 in #4360
  • fix(docreader): preserve numeric rows in PDF text extraction by @dvd233 in #3228
  • fix(frontend): tolerate malformed EPUB paths and clean up failed previews by @Jarvis636431 in #4324
  • perf(search): reuse fixed query-expansion regexps by @xiashao in #4309
  • fix(audit_log): stop the retention loop in the ticker cadence test by @AnonymousLesserPanda in #4308
  • fix(repository): SearchUsers 兼容 SQLite 方言并转义 LIKE 通配符 by @Winoren in #3996
  • fix(agent): preserve user requests during context overflow recovery by @yeliheng-010 in #4280
  • fix(ui): preserve explicit zero chunk_overlap when loading KB settings by @Li-john1021 in #4274
  • fix(frontend): keep distinct reasoning visible beside final answers by @rudycelekli in #4267
  • fix(docreader): preserve all modern XMind topic groups by @rudycelekli in #4266
  • fix(frontend): release queued refreshes when browser storage fails by @rudycelekli in #4265
  • fix(client): preserve agent reasoning effort during updates by @rudycelekli in #4264
  • test: cover qdrant copy pagination by @Goodnight77 in #4162
  • test(security): cover NAT64 encodings in TestIsRestrictedIP_IPv6 (fixes #4092) by @RerankerGuo in #4263
  • fix(mcp): honor a leading UTF-8 BOM in chat streams by @rudycelekli in #4262
  • fix(cli): report chunk truncation only when rows are omitted by @rudycelekli in #4260
  • fix(cli): reject invalid jq syntax before polling by @rudycelekli in #4258
  • fix(cli): preserve raw MCP document download bytes by @rudycelekli in #4256
  • fix(client): encode file type filters as a comma-separated value by @xili-ytl in #4240
  • fix(ui): allow Owner to demote themselves on the members page by @Li-john1021 in #4213
  • fix(knowledge): drop generated questions when the switch is off by @wangrui19971019 in #4096
  • fix(embed): keep allowed_origins when a channel update omits it by @VictorMaznyuk in #4205
  • fix(skills): explain unfederated skills.sh imports by @tsumon in #4196
  • fix(agent): invalidate context checkpoints when rewinding steered turns by @yeliheng-010 in #4143
  • fix(session): cap text attachments at 32 KiB instead of failing on long lines by @Jinzhengxu in #4148
  • fix(frontend): 通用选择器创建临时数据源前先校验可创建 by @linus-liu-web in #4050
  • fix: reject missing qdrant embeddings by @Goodnight77 in #4165
  • fix qdrant collection matching by @Goodnight77 in #3089
  • fix(chat): lazy-load noVNC only when opening sandbox desktop by @JYao-Chen in #4034
  • fix(build): inject version metadata into compose-built app images by @DerrickLinus in #4123
  • fix(embed): preserve draft when attachment read fails by @hahahahahayesyeseys in #4118
  • fix(sandbox): support Docker Desktop socket permissions by @helloxjade in #3088
  • fix(lite): load dotenv files before server startup by @tsumon in #3618
  • fix(chat): preselect the answer's knowledge base when saving to a KB by @Yi-111-a in #3853
  • fix(agent): validate graph relation evidence in every query scope by @knqiufan in #3955
  • fix(mineru): split large Cloud PDFs without checkpoint storage by @JYao-Chen in #4030
  • fix(download): preserve existing files when transfers fail by @LeonSGP43 in #3988
  • fix(agent): retain new file paths when compaction tracking is full by @icearia0219 in #4003
  • fix(agent): reject overlapping matches in unique sandbox edits by @icearia0219 in #4002
  • feat(assistant): give each settings page its own starter questions by @lyingbug in #4762
  • fix(datasource): make knowledge replacement transactional by @younggglcy in #4473
  • fix(datasource): retain retry cursors on ingestion failure by @yeliheng-010 in #3852
  • fix(automation): prevent premature SQLite automation claims by @LuckVd in #4501
  • fix(agent): recover final-answer context overflow and propagate synthesis errors by @rtmalikian in #4629
  • fix(models): preserve string fields in streamed tool arguments by @rudycelekli in #4253
  • fix(models): assemble multiline provider SSE packets by @rudycelekli in #4255
  • fix(chat-pipeline): honor normalized graph search targets by @dakjdakd in #4530
  • fix(kb-delete): give wiki cleanup its own longer timeout budget by @tsumon in #4292
  • fix(sandbox): 被超时杀掉的文件系统操作不再误报为请求错误 by @Goodeve0 in #3921
  • fix(knowledge): add missing POST /knowledge-bases/:id/rebuild-index route by @tsumon in #4621
  • fix(docparser): decode GBK and UTF-16 text files in the simple reader by @L4XB in #4446
  • fix(docreader): recognize Unicode BOMs before legacy decoding by @fengyue-xve in #4498
  • fix(chunker): preserve explicit zero chunk_overlap on ingest by @Li-john1021 in #4276
  • fix(knowledge): strip think blocks from generated questions and summaries by @stanleys12 in #4691
  • fix(chat): retry history loading after transient failures by @hahahahahayesyeseys in #4186
  • fix(tenant): honor default storage quota across creation paths by @tianhaotian in #3213
  • fix(datasource): 保留钉钉超限文件失败后的定时同步 by @panjiedev in #4505
  • fix(ui): keep knowledge folders readable and shrink tag editing by @lyingbug in #4765
  • fix(agent): discard failed stream drafts before retry by @sun-sh in #4780
  • fix(mcp): reject malformed knowledge base selectors by @ydflow in #4773
  • fix(config): reject malformed environment-expanded YAML by @xiashao in #4770
  • fix(models): preserve Responses API refusal text by @ydflow in #4766
  • fix(agent): show matches in long file search lines by @ydflow in #4774
  • fix(metric): normalize MAP by all relevant documents by @xiashao in #4771
  • feat(lite): ask before host deletes and widen the sandbox on approval by @nullptr-error in #4076
  • fix(frontend): 持久化审批卡片直接显示后台等待 by @lyingbug in #4824
  • feat: add workspace default settings for models and web search by @lyingbug in #4822
  • fix(openaicompletions): recover leaked DSML tool calls safely by @lyingbug in #4851
  • fix(agent): preserve manual markdown whitespace by @ydflow in #4844
  • fix(mcp): reject chat streams without completion by @ydflow in #4843
  • fix(vlm): bound WeKnoraCloud vision response bodies by @Tong-bit-art in #4806
  • fix(agent): disable thinking during final answer synthesis by @errpunk in #4783
  • fix(chat): carry Ollama's done_reason on the final stream chunk by @pcbeingused333 in #4845
  • fix(metric): preserve zero precision in unsmoothed BLEU by @xiashao in #4833
  • fix(metric): normalize NDCG against the full ideal ranking by @xiashao in #4832
  • fix(lite): skip empty tokenized FTS queries by @u7-u7 in #4819
  • feat: prepare v0.9.0 release with assistant onboarding by @lyingbug in #4836
  • docs: finalize v0.9.0 release notes and upgrade guidance by @lyingbug in #4864

New Contributors

  • @JSJ189 made their first contribution in #4389
  • @ignity21 made their first contribution in #4348
  • @NIU-123370 made their first contribution in #4354
  • @davien made their first contribution in #4400
  • @ZXLyyds100 made their first contribution in #4395
  • @Activer007 made their first contribution in #4426
  • @jiangjiang248 made their first contribution in #4524
  • @dakjdakd made their first contribution in #4531
  • @sun-sh made their first contribution in #4544
  • @u7-u7 made their first contribution in #4523
  • @fengyue-xve made their first contribution in #4559
  • @wzxsdf made their first contribution in #4558
  • @mmhh256 made their first contribution in #4521
  • @panjiedev made their first contribution in #4502
  • @Zicheng-Xie made their first contribution in #4620
  • @XY-code1 made their first contribution in #4479
  • @huong8373tt-beep made their first contribution in #4605
  • @uhhgxg made their first contribution in #4562
  • @Arc10p made their first contribution in #4566
  • @johnnyjy made their first contribution in #3505
  • @wcy12378 made their first contribution in #4679
  • @ydflow made their first contribution in #4677
  • @wuning159 made their first contribution in #4722
  • @FOWEPJF255 made their first contribution in #4711
  • @errpunk made their first contribution in #4733
  • @playb0t made their first contribution in #4363
  • @xiashao made their first contribution in #4746
  • @alikatgh made their first contribution in #4637
  • @OUAO-FRANK made their first contribution in #4478
  • @Annabelle0726 made their first contribution in #4465
  • @yeungmingyik made their first contribution in #4172
  • @ranjianghong526-hash made their first contribution in #4160
  • @kalandramo made their first contribution in #4332
  • @AnonymousLesserPanda made their first contribution in #4308
  • @Winoren made their first contribution in #3996
  • @Li-john1021 made their first contribution in #4274
  • @rudycelekli made their first contribution in #4267
  • @RerankerGuo made their first contribution in #4263
  • @xili-ytl made their first contribution in #4240
  • @Yi-111-a made their first contribution in #3853
  • @rtmalikian made their first contribution in #4629
  • @Goodeve0 made their first contribution in #3921
  • @stanleys12 made their first contribution in #4691
  • @tianhaotian made their first contribution in #3213

Full Changelog: v0.8.3...v0.9.0

Don't miss a new WeKnora release

NewReleases is sending notifications on new releases.