Skip to content

v2026.10.19 - #795

Merged
jamon-bodhi merged 33 commits into
mainfrom
dev
Oct 19, 2026
Merged

jamon-bodhi merged 33 commits into
mainfrom
dev

Conversation

@stephamie7

Copy link
Copy Markdown
Contributor

No description provided.

jamon-bodhi and others added 30 commits October 15, 2026 09:37
Add a configurable data retention policy under Preferences with three
independent periods — log, message, and session retention — each
supporting "keep forever" (0 days). Changing the policy triggers an
automatic cleanup of the now-expired data.

Backend: new flocks/retention package (policy / cleanup / scheduler),
storage-authoritative message and session deletion, a log-retention
override applied before Log.init, and three admin-only config endpoints
plus a guard on the generic config update so the policy cannot be changed
without admin. The scheduler runs shortly after startup, every 6 hours,
and on each policy change, serialized by a cross-process file lock.

Frontend: a DataRetentionSection in Settings (admin-only) with preview,
confirmation, cleanup-result polling with timeout and manual refresh, and
zh-CN / en-US i18n.
…etes

Address the final review round on the data retention policy.

- Config: a payload carrying both dataRetention and data_retention could
  slip a policy change past the admin guard: a null camelCase value read as
  "unchanged" while the save (validate -> dump -> re-validate) wrote the
  snake_case one. ConfigInfo now collapses the two spellings into one
  canonical value, so the guard, the saved value and GET always agree.
- Sessions: the retention delete passes a precheck that runs under the
  tree lifecycle locks before the generation bump, using the full busy
  check (a running loop, or a non-idle status such as dreaming or
  compacting). A tree that must be kept is never stopped, cleared, or has
  its generation bumped. Message trimming uses the same busy check.
- WebUI: a failed manual refresh after a polling timeout keeps the
  "status unknown" state and the refresh button instead of falling into a
  blank "never ran" view.
The admin guard on the generic config endpoint resolved the incoming
dataRetention through ConfigInfo (which collapses camelCase/snake_case), but
still hand-picked the on-disk value. With {"dataRetention": null,
"data_retention": {...forever...}} on disk the loader enforces "keep forever"
while the guard compared against the default, so a member could save 30/0/0
unchallenged and the scheduler was not notified. Both sides now go through
one resolver; if the on-disk value cannot be resolved, any concrete change
requires admin.
… (INC-E54483E0)

The what's-new notice reads GET /api/update/current-release, which only
looked up the OSS Core tag on GitHub/Gitee, so a Pro install showed the
Core release notes and never the notes published with its Pro bundle.

- Record the Console release notes in the Pro install marker.
- current-release returns the installed Pro bundle and its notes when the
  marker names a bundle; markers without notes borrow the Console manifest
  only when it is the installed release (bundle, component, build and
  release ids agree; Console core not newer than the recorded core).
- Cache Pro lookups by the whole marker so same-number component updates
  and repacks are picked up at once.
- WebUI titles the notice "Flocks Pro vX" and keys it by bundle, core and
  component versions, like the Pro update dismissal key.
feat(retention): add data retention policy to preferences
…n none is attached

Per the REA plugin PRD v0.7 / prototype v0.10:

- The Rex shortcut, the plugin square's install / use / repair and the in-conversation status
  card only fill the install guide, the analysis prompt or the repair request into the message
  box; no message, conversation or install starts until the user sends it. The prefill goes to
  the conversation it was clicked in. A failed install continues in its install conversation:
  the repair request becomes its draft and the conversation opens in Build mode (filled in
  place when it is the one on screen).
- The install guide ends with "安装执行前请再次和我确认你计划安装哪些模块?"; the analysis prompt is
  now "帮我使用 REA 逆向工具分析上传的附件文件".
- New built-in hook flocks/rea/attachment_guard.py: when a message carries that prompt, names no
  link or path, and the conversation has no file the user attached (archived messages
  included), Rex is told to ask for the file and every tool call of the conversation is stopped
  until the user's next message. It blocks before counting, so a failed or timed-out count keeps
  the block.
- rea_analysis status tells the model how many files the user attached; the tool description
  reads the short prompt as "the attached files".
- Drop the install-session reserve / record routes the shortcut no longer calls; the install
  tool still records the install conversation.
- 有顶栏的页面把 BackendStatusBanner 以 inline 方式放进 Layout 内容列、<main> 之前,占自己的高度把页面往下推,不再和 z-50 的顶栏、抽屉、全屏预览抢层级;App 级的窗口横幅只在没有 Layout 的页面(登录、初始化管理员、强制改密)显示
- 健康检查失败后每 5 秒重查一次,恢复为 connected 或最后一个使用方卸载就停;正常状态仍是每小时一次
- 首次健康检查有结果之前不渲染横幅,加载时不再闪一下黄色「正在连接」
- 深色模式下横幅背景改为不透明色
- 补 BackendStatusBanner、useBackendStatus、Layout 的回归用例
feat(rea): fill REA guides into the message box and ask for files when none is attached
fix(updater): Pro 实例的更新内容通知改用 Pro bundle 自己的发版说明
…1017

feat(provider): 新增 DeepSeek-V4.1-Flash-1017
fix(webui): 后端断连横幅不再被顶栏压住,恢复后自动消失
fix(webui): 普通用户不再看到只有管理员能用的模型测试入口
fix(session): 长任务压缩生效后清零溢出计数,不再在第 4 次溢出时被终止 (INC-A9A3F82F)
fix(webui): 后台保活页面不再把当前页面整体滚走 (INC-1F823A8D)
fix(task): 任务中心默认 10 个并发,运行中的 agent 任务不再被隐藏上限卡住 (INC-DEF74BBD)
…s admin-only (INC-F65C4A6C)

Follow-up to #42. Members get the single-model and batch connection tests back:
test-credentials now accepts any signed-in user for registered LLM providers and
keeps API service (tool credential) tests with administrators. Echoed keys in
upstream errors are masked.

Every way to change model configuration now needs an administrator: model
settings and definitions, custom providers and models, default and fallback
models, the legacy PUT /auth/{provider_id}, and the model keys of
PATCH /api/config/ (a value equal to the current one still passes, so the
Channel page can send back the whole config it read; a key holding a
{env:/secret:/file:} reference needs admin because it expands on reload).

The model page hides those controls from members, shows model details
read-only, and no longer tells members an invalid default model was cleared.
chore(release): bump version to v2026.10.19
…ac96228e0

chore: sync flocksdev dev into dev (2026-10-19)
…n-37505197e688

chore: sync main into dev after main-37505197e688
fix(model): 普通用户可以测模型连通性,模型配置只给管理员改
…26c4e5e5b

chore: sync flocksdev dev into dev (2026-10-19 model permissions)
…rding

fix(models): 首个模型自动设为默认,避免登录反复弹初始化
…b897ad8c1

chore: sync flocksdev dev into dev (first model default)
@jamon-bodhi
jamon-bodhi merged commit 618d682 into main Oct 19, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants