Repository navigation
v2026.10.30 - #800
Open
stephamie7 wants to merge 178 commits into
Open
v2026.10.30#800stephamie7 wants to merge 178 commits into
stephamie7 wants to merge 178 commits into
Conversation
按用户决定,把 feat/arch_v2 工作区当前的全部改动合成一个提交,其中包括多条线并行、尚未单独提交的工作。仓库内文档的两个配套 PDF(packaging/linux/README.pdf、webui/UI_SPEC.pdf)没有纳入。 - 数据库:新增 flocks/db 抽象(连接、方言、参数、结果、全文检索、同步查询,SQLite / PostgreSQL 两个后端和 registry),SQLite 到 PostgreSQL 的迁移(db/migrate.py、scripts/migrate_legacy_task_tables.py),storage / vector / session_search 调整,知识库 PostgreSQL 存储(flocks/knowledge) - 出站代理:flocks/net(proxy / http / aio),配置路由和 WebUI 网络代理设置面板 - 会话、任务与工作流:会话归属与消息分页(session/ownership、message_pages),任务租约与节点(task/lease、node),工作流归属与 SOC 存储,记忆同步归属 - 服务端路由:config、mcp、provider、onboarding、session、workspace、license 等 - 渠道:钉钉、飞书、Slack 等(入站媒体、去重、transport) - 工具与 CLI:bash / 文件工具、设备凭证、CLI 服务管理和各子命令 - WebUI:UI 规范 v1.4 语义 token 迁移和门禁(scripts/ui_spec_check.py 及基线),工作流、任务、工具、会话等页面,文件预览;审计、升级、安全配置等 Pro 页面和接口已移到 flockspro overlay(flockspro 提交 be8951b),这里删除 - TUI:斜杠命令匹配、默认键位、同步数据、SDK v2 客户端和服务端;删除旧的提示词文件和 task 工具 - 插件:flockshub 的 SOC、AI 红队、代码审计工作台组件与索引 - Linux 打包:离线安装包构建、安装脚本、PostgreSQL 预检、冒烟和安装校验 - 开源边界检查:scripts/oss_boundary_check.py 及基线 - 测试:大量新增和更新 已知问题: - UI 规范门禁未通过:webui/src/components/common/SessionChat.tsx 有 714 处违规,基线只允许 694 处,多出 20 处裸色板和字面颜色,开 PR 前要改成语义 token。 - TUI 用 tsc 检查时,源码文件有 88 个错误,HEAD 上已有 87 个;新增的 1 个在测试夹具 tui/sdk/v2/__fixtures__/fake-flocks.ts(顶层 await 但没有 import/export),bun 执行不受影响。 - webui 全量 vitest 1478 条里有 1 条在并发负载下偶发失败(Workspace 的 Markdown 预览),单独跑 3 次都通过。 提交前检查:Python 语法 583 个文件全过;webui tsc 0 错误;webui vitest 1477 / 1478(见上);敏感信息按新增行完整扫描为 0 命中,误报已逐条核过。没有跑 Python 全量 pytest。 Claude-Session: https://claude.ai/code/session_013kcyn3UBVycxsdw13fFGvZ
语音输入(原在 flockspro,现随 Core 发行) - 新增 flocks/voice:PCM16 音量统计与小声增益、豆包 bigasr 流式协议、设置读写、浏览器与豆包之间的 WebSocket 转发;路由 /api/voice - WebUI:输入框语音按钮、设置 → 语音输入页、识别错误弹窗、PCM 录音与重采样;设置页和弹窗配色改用 UI_SPEC 语义 token 与 ui-* 类,开关旁显示"已开启/已关闭" - 依赖:新增 filelock,websockets 提到 >=15.0 会话、后台任务、PTY - 会话归属只认稳定的 owner_user_id,删号后同名重建的账号不再继承旧会话 - 挂子会话时在同一个 PG 事务里锁住父会话再校验归属和状态;通用 update 不能改会话拓扑 - 后台任务 id 用完整 ULID;任务结束后释放句柄;wait 超时不再连带取消任务 - PTY 列表/详情/WebSocket、任务队列暂停/恢复改为仅管理员 - delegate_task 只在同一轮用户消息内复用相同结果 插件与 hooks - 装了声明 flocks.plugins.critical 入口的插件时,关键入口失败或加载中途中断,HTTP/WebSocket 入口返回 503(健康检查除外),工作流服务的 /health 也报不可用 - 没有任何 critical 声明时,加载中断(比如 plugins/tools 下有读不了的目录)只记 warning,沿用上一轮完整加载的结论继续服务;插件显式抛 CriticalPluginEntrypointFailure 仍按失败处理 - 失败标志只在一轮加载结束时更新,热重载进行中不会先清后置 - HookPipeline 改为快照 + RLock,服务线程与工作流线程同时加载不会串到别的项目 工作流、工作区、文件接口 - 工作流 LLM 节点每次调用单独建 provider 客户端,用完关闭;非流式 chat 不再继承会话的 thinking / max_tokens 选项 - 按账号划分的 outputs 目录不允许软链到 scope 外,单用户共享 outputs 可以软链挪盘(WorkspaceManager.isolates_accounts 由 Pro 置 True) - /file 的 list/search/status 过滤移出事件循环,每个请求只解析一次 workspace;软链环不再让整个列表 500 - tdp_alert_triage 的 receive_alert 节点代码修正 \n 与 \b 的 JSON 转义(原来是语法错误和退格符) - 迁移时 TEXT 列的 CURRENT_TIMESTAMP 默认值保留 SQLite 的 UTC 秒格式 工程 - 新增 scripts/dev_baseline.py 只读开发预检 - CI:加预检、tests/voice、前端 Vitest;触发改为所有 PR 和手动
Use semantic design tokens across shared components and pages, standardize controls and responsive dialogs, and preserve focus through nested menus and Agent list refreshes. Strengthen design-token conformance checks and add interaction regressions. Verified with 1626 Core tests, 23 scanner tests, lint, production builds, and desktop/mobile browser checks.
- 识别端点改用 bigmodel_nostream,去掉 enable_nonstream,模型仍是 Seed ASR 2.0 - 新增识别场景 recognition_scene(general / security_internet),以固定主题背景作为 corpus.context 发给 ASR,不上传聊天历史;设置页可选,旧服务端没返回该字段时按 general 处理 - 新增可选的语音会话诊断 flocks/voice/diagnostics.py:只有服务器上存在标记文件时才录制原始 PCM、增益后 PCM 和转写,目录 0700、文件 0600,最多保留 5 个会话且不超过 24 小时;到达速率不再把第一帧算进时间跨度 - WebUI 连接时上报麦克风实际采集参数,服务端按白名单过滤,只写进诊断记录 - pcmRecorder 的 stop 改为幂等,worklet flush 超时(2 秒)按采集失败处理,不再提交半截录音 - quietSpeechGain 对量化后会整帧归零的极弱音频做补救增益 - 录音时显示状态气泡,提示整句说完或停止后才出字 - 补充语音路由、诊断录制(含取消和断开时的记录)与前端录音相关测试;路由测试每次重置配置缓存,不再落到开发机真实的配置目录
- 智能体协作改用 dev 的 AgentInbox 和异步 delegate_task;inbox 唤醒放到会话执行租约释放之后,租约被占时有界重试;委派子任务的回执脱离已结束的父执行租约再写入 - 工具门禁按 dev 的设计只在 registry 里跑一次;hook 拿到参数的深拷贝,旧式 hook 原地改写只接受脱敏位置(Pro 恢复的密码),其余字段以 validated_input_patch 为准 - 新增知识库(RAGFlow):连接设置只给管理员,出站走 flocks/net 的代理策略 - 工作流 LLM 并发预算按 scope 计数;内联执行工具时同时交还 provider 和工作流预算 - 设备插件分组迁移改成 PostgreSQL 的 ALTER TABLE ... ADD COLUMN IF NOT EXISTS - 技能分组 PATCH 与编辑、删除用同一写入边界,~/.claude/skills 下技能的分组只读 - flocks serve 显式单进程(workers=1),不受 WEB_CONCURRENCY 影响 - 安装器迁移旧实例时,拷过来的 SQLite 数据会提示显式导入 PostgreSQL 的命令 - WebUI:dev 新页面改用 v2 语义 token 和 Tabler 图标,修复分组按钮挤占布局等 6 处排版 - 版本升到 v2026.9.23
flocks-dev 的 20261010-032943-dev-merge-v2 就是用这份源码树发的版。 - 新增 soc_case_manage 工具(1.0.2):事件、证据、调查假设、处置计划、人工审批、受控执行、效果核验和复盘改善,数据存在 PostgreSQL 的 soc_cases / soc_case_records / soc_case_events / soc_case_requests - 新增事件响应页面 soc-cases,告警详情可以直接升级为事件;soc_ui 升到 1.2.3 - 新增 soc-investigator Agent 和 soc_case_investigation 工作流,soc-workspace 组件(1.1.1)把这三个子插件纳入安装 - 告警快照和执行回执里的 HTTP 凭据(Authorization、Cookie、Set-Cookie 等)会脱敏,手工提交的事件数据带凭据直接拒绝 - 执行动作时被取消也会写回结果,不再留下一直 running 的动作;参数在提案时就按设备工具的 schema 校验,执行前被预检拒绝记为 unsupported - 版本冲突刷新后,编辑框跟着最新记录走,已经失效的审批选项要重新选 - Core:ToolContext 增加 validated_input_guard,执行前核对最终参数;sync_query 支持事务隔离级别;工作流线程池里的节点保留调用方的 ContextVar;HTTP 调用工作流时校验父会话写权限和消息归属;Postgres JSON 驱动可以从指定列取 source row id - 测试:tests/hub/test_soc_case_manage.py、tests/workflow/test_workflow_auth_context.py、webui/src/utils/socCasesPageRuntime.style.test.tsx,并更新 hub 目录和 access 驱动用例
- _create 原来用 row_id=? OR record_id=? 查 alert_records。record_id 没有索引,每次都全表扫描:本机 PostgreSQL 17、30 万行合成表上 58ms;改成先按主键 row_id 查后 0.03ms,record_id 只在 row_id 没命中时兜底 - 一个值同时是某条告警的 row_id 和另一条的 record_id 时,直接取 row_id 那条,不再报 ambiguous_alert;record_id 重复仍然报 - soc_case_manage 升到 1.0.3,已安装的副本可以通过 Hub 更新拿到 - 新增用例 test_an_alert_row_id_is_matched_before_any_record_id
用户决定界面以 dev(51f70297)为准,v2 的 UI_SPEC v1.4 停用;架构和功能仍按 v2。 - 主题:tailwind.config.js、index.css 换回 dev 版本;tokens.css 保留变量名、取值改成 dev 配色,只给 v2 新增界面和 Hub 插件页面用 - 图标:@tabler/icons-react 换回 lucide-react 0.562.0 - 页面:按 dev 同名文件合并类名和图标,保留 v2 的窄屏修正;开关、确认框、通知弹窗、PillGroup、分组按钮、工作流节点配色、任务状态等恢复 dev 写法 - 修移植带出的问题:模型详情启用开关变成空元素、工具详情抽屉窄屏超宽、任务筛选容器样式丢失、通知弹窗蓝色副标题写成底色 - 补充:开关和下拉框加键盘焦点环;智能体卡片按容器宽度排列;通道详情标题区窄屏换行;通知弹窗蓝 / 绿配色补深色变体 - 测试改成 dev 的断言;CI 去掉 ui_spec_check.py,UI_SPEC.md 标为停用,README 同步
- stream_alert_triage / tdp_alert_triage:情报工具按 threatbook_mcp_*、threatbook_* 的顺序找,只有适配器原文 "Tool not found: '<名字>'" 才换下一个;找到的名字在本次执行内复用,IP、域名、漏洞工具都没注册时每次执行打一行 WARNING。原来调的 threatbook_ip_query、__mcp_vuln_query 在默认服务名 threatbook_mcp 下都不存在,run_safe 又不报错,每条告警都没有情报。stream_alert_triage 升到 1.1.2 - SOC 总览(soc_ui 1.2.4):alert_records 的行同时作为研判来源,按模型写入的研判字段统计;删掉 _simulate_triage_from_denoise 的估算和正弦合成曲线,时间序列改成按日期的真实计数。待处理只按结论为未知计一次;结果字段按态势页 SQL 投影的优先级读,兼容旧的 attack_success / attack_failed 写法;只统计带研判标记的行 - soc_case_manage 1.0.4:运行中的 agent(缺失时看会话记录)是 soc-investigator 时,execute_action、close、reopen 返回 403 operator_required;人工和其他 Agent 不受影响 - 测试:新增 tests/workflow/test_triage_intel_tools.py(8 条),tests/hub/test_soc_overview_postgres.py、tests/hub/test_soc_case_manage.py 补回归用例
dev 从 51f7029 到 6610993 共 25 个提交,按 v2 架构适配: - 界面换成 dev 的新外壳:固定顶栏、工作区切换、全局历史会话、账户菜单、设置页横向页签、原生确认框、右上角提示条。Pro 入口继续走扩展注册表,开源侧不出现商业版名称,保留 v2 的窄屏修正;hideDefault 仍认旧分组 id(aiWorkbench / agentHub / customPages) - 专属智能体会话:策略校验放进 PostgreSQL 事务;循环每一步执行前复查声明和上下文里的用户消息;认领会话和写新用户消息共用消息页状态锁(先锁页状态、再锁会话文档),跨进程只有一方成功;认领基于锁住的行合并 metadata - flocks exec 写入、工作流运行指定会话时按声明校验,冲突返回 409;被拒的用户消息不进缓存;metadata=None 的通用更新不再误报 - 读取工具支持列模式(流式、有界);工作流存储 init/close 共用生命周期锁;轮询保留防重叠并记录触发器 id - 测试按 dev 的新机制调整:可调用工具白名单、假 agent 的专属会话字段、循环出错返回 error
研判工作流改用 threatbook_mcp_* 情报工具(旧服务名 threatbook_* 兜底);SOC 总览按模型研判字段统计,不再估算;soc-investigator 不能执行处置、结案和重开。stream_alert_triage 1.1.2、soc_ui 1.2.4、soc_case_manage 1.0.4。
配合 flockspro 的场景套件授权(flockspro docs/suite-licenses.md): - 授权:Pro 下每个 pro 套件的页面、接口、数据合同、安装和更新都问它自己的授权 (scene_suite:<套件 id>),查不清页面属于哪个套件时拒绝;开源版不装 pro 套件,运行时不拦 - 页面归属按页面 id 认,独立副本和重新导入的同 id 页面也算;归属缓存按加密包、hub index、 安装记录的签名作废,最多 10 秒过期,撤权最多晚 10 秒生效 - 加密包:扩展可注册加密来源(flocks/hub/sealed.py),插件只在安装过程中解包到临时目录, 装下来只有编译产物;来源答不上来时,开源 hub 公告为加密的插件不从别的明文列表安装或预览 - 未授权的 pro 套件工作区锁定(locked、licensed=false),导航不列,界面退回场景管理 - 代码审计、AI 红队两个套件在开源 hub 里只留公告,页面源码移出开源仓库
界面布局按 dev 对齐;Core 测试套件 138 条既有失败清零,测试只认 Core 自己的入口插件。 产品修复: - TDP / OneSEC 技能 CLI 默认输出 JSON;qwen3.7-plus / flash 声明思考档位;语音场景不再提商业版名字。 - 密钥文件加锁、原子替换;onboarding 和 MCP 配置失败回滚只撤销本次写过的键(SecretChanges),别处同时写的保留。 - 启动时 PostgreSQL 本会跳过的建表、建索引、加列、改类型语句不再发送,不再和正在写的进程抢表锁;记忆索引写入遇死锁重试一次。 - 新增 ConfigWriter.update_config_section,onboarding 技能的四段渠道脚本可用。 - 文件工具:路径核验之后被换成链接时不读、不列、不写,审批请求和报错不带出别人的数据;copy 把源目录里的链接按链接复制。 - MCP CLI 去掉重复的 _configured_servers,流式增量按前缀走快路。
- 新增 flocks/tool/nofollow.py:路径从根目录起逐级打开、每级都不跟随链接 (openat + O_NOFOLLOW),读写、建目录、删除、复制、移动都在打开的目录句柄里做; 没有 *at 调用的平台(Windows)走按路径的后备。 - read、write、edit、apply_patch、mkdir、delete、copy、move 换到这一层上。 copy、delete、move 只处理审批时列出的条目,delete、move 发现多出条目时什么都不动; copy 拒绝目标是源的一部分(硬链接、复制到上一级目录、检查后挪进目标的源文件); 目录移动逐个条目用不覆盖的原子改名挪过去;跨文件系统移动和清理先改名到私有名、 核对后才删,放回原名用不覆盖的原子改名,放不回就报保留位置。 - grep、glob 不再跟进链接,结果逐个对照打开的搜索目录复核;取消时结束 rg 并读完管道再回收。 - doc_parser 走 resolve_tool_path(沙箱、策略绑定),写之前要 edit 审批,只读沙箱里拒绝写; 沙箱里默认输出到沙箱工作区 outputs/<日期>/;输入不跟随链接读成私有临时副本再解析。 - 用例:tests/tool/test_nofollow.py(78)、tests/tool/test_file_tools_no_follow.py(30)、 tests/helpers/filesystem_races.py;test_session_write_limits.py 改 3 条注入点, test_windows_shell_and_paths.py 改 1 条打补丁的位置。
- 只加 Tailwind max-md:(<768px)变体和 styles/index.css 末尾一个手机媒体块, 不删原有类、不改 DOM 结构。电脑端(>=768px)不变:编译后的 CSS 去掉手机媒体块 后与改前逐条相同。 - 页头按钮在手机上换到标题下一行;表格外框横向滚动、表格给最小宽度;左右分栏改成 上下排或横向滑动的列表;EntitySheet、任务详情等抽屉全宽;工作流右侧面板和节点 面板全宽覆盖;顶栏下拉菜单固定在屏内;悬停才出现的行操作在手机上常显; markdown 表格横滑;会话页头像在手机上隐藏、内边距收窄。 - 逻辑改动只有一处:usePluginViewMode 没有存过视图偏好时,手机默认卡片视图 (工具、技能原来默认列表);usePluginViewMode.test.tsx 补一条用例。
- 安全:受管模式各轴锁 enforce、接口 409;OSS 自动审批在受管安装下恒关 - 内容改由 Go 提供:content/managed、cli/managed、agent/managed - OSS 去 Pro 痕迹:删 console_upgrade / flockspro_license 路由及对应 UI 和测试,更新器只认 OSS 源 - 数据与共享状态:db/health、db/singleton;记忆同步(embedding、sync/mirror、ownership);console/outbox 跨进程待发队列加锁 - 离线打包:packaging/linux 离线构建、安装、冒烟与校验脚本 - 手机端适配只用 max-md:(<768 才生效,电脑端不变) 两边判定对照、单元与全量测试均过;Codex 三组审查(原生/Go升级、OSS 离线、策略第一步)末轮必须修 0。
Consolidate SOC scenes and system settings navigation, update account and header controls, and keep suite availability independent. Add resizable sidebar and history panels, revise session pagination, restore navigation styling, and clean up interrupted history drags.
…n-618d6825a952 chore: sync main into dev after main-618d6825a952
Send REA and alert-operation shortcuts through the current chat. Move scene management into the module bar and fix returning to the workbench after cloud login.
Onboarding writes model credentials, the default model, ThreatBook API services and MCP servers, so members may not run it: POST /api/onboarding/validate and /apply require an administrator again, and the home entry, the automatic first-run prompt and the open-onboarding event only apply to administrators. The status endpoint stays readable. API-token clients are administrators and keep working. Reverses the access part of 2ddf55c now that members may not change any model configuration.
冲突按 v2 解:只用 PostgreSQL、开源侧不点名商业版、通用配置写入只给管理员,手机端 max-md: 类原样保留。 数据保留(dev #38): - 批量删消息走 session_message_pages 目录并推进 revision,删掉的消息不会在分页和后续写入里回来。 - 删除前拿会话执行租约、删除事务里核对;手动压缩、/shell、回退、取消回退也持同一把租约,任何进程正在用的会话不会被删。 - 策略存共享版本 data_retention:policy_version,每次删除在版本行的共享锁下进行,别的进程保存新策略后立刻停删。 - 过期日志只由调度器删:preload 之后日志器启动和日切都不删,调度器停止也不交还。 REA(dev #37、#43): - 每个对话一条独立的 REA 连接,每进程最多 4 条;全忙时返回暂时性错误,不计入连续失败;服务移除或重连时退役全部连接。 - 安装和卸载用主机文件锁 data/rea/operation.lock 互斥,进度快照存 PG;锁交接时被取消也会释放。 - 调用 rea_* 前同步服务注册,读不到状态或正在卸载时拦下;后台安装脱离会话和任务租约;任务引用的盐存 PG。 - REA 卡片按钮在途防重。
…e settings tabs on the Pro page (INC-EDC6ECE3)
…ved files
{secret:...}, {env:...} and {file:...} references are expanded when the
config is loaded, so the in-memory config holds real credentials. Three
paths leaked them:
- GET /api/config returned the expanded config to every signed-in user.
- Every generic config save rewrote flocks.json from the expanded config,
replacing stored references with plaintext secrets; the channel page
sends the whole config back when it saves.
- References written by members (display name, any generic field, agent
group overrides) were expanded on reload; the display name is public.
Config.update now writes only the fields that changed against the config in
force into flocks.json as stored, references unexpanded (apply_changes). A
changed list keeps the stored text of every item it can match by value; a
save that would still carry a reference's value in plaintext, or cannot tell
two equal references apart, is refused with 400. Templates written outside
strings are written back unquoted, and the new text is validated the way it
will load.
Non-admins read a masked view: every place a loaded file stores a reference,
and every string holding a reference's expanded value, is masked whole, as
are credential-looking keys and MCP credentials. Masked values sent back
unchanged keep the stored value; moved masks are refused. Members may not
write references; display names and agent groups never take them.
Known limitations, accepted for now: reordering object lists that hold
references, references under the deprecated mode in another config file,
and a {file:...} reference rotating while the config loads can still write
an expanded value.
fix(config): 普通用户读不到配置里的密钥,保存不再把引用写成明文
v2 架构(feat/arch_v2)合入 dev
两条路径都会让同一台机器上后起的实例把先起的实例当成自己的停掉: - 控制接口:Windows 上所有实例共用 127.0.0.1:48765,CLI 不看运行根。 守护进程改为由系统分配端口、记在本实例 run/service-daemon.port, CLI 按 FLOCKS_CONTROL_PORT → 端口记录 → 旧的 48765 找端口,连上后核对 /status 的 daemon.log_path 是不是本实例的;Windows 上独占绑定端口。 - 残留清理:本运行根还没有 pid 记录时,Unix 用 CLI 自己的 HOME 认默认根, Windows 直接认领本安装的全部守护进程。守护进程命令行带运行根摘要 --runtime-root-id;会杀进程的清理和升级交接选 pid 只认证实属于本根的, Windows 上没有标记的老守护进程要旧控制端口证实才清。
Codex/workflow reliability dev
service:Windows 上第二个实例不再停掉第一个实例
数据目录里有 config/deployment.json 声明 managed 时,开源 CLI 自己的 supervisor 命令不再另起一份服务,也不再报「没在运行」:五个命令在开头 以 2 退出,提示用该安装提供的 flocks 命令或它的服务管理器。全局回调对 这五个命令跳过日志初始化(不往受管的数据目录写日志,换个账号跑时也不 报误导的权限错),--help 照常显示。 - flocks/cli/managed.py:managed_service_message、refuse_service_command_when_managed - flocks/cli/main.py:_SERVICE_COMMANDS,全局回调和五个命令里的调用 - tests/cli/test_v12_managed_cli.py:受管时拒绝、非受管照旧、日志初始化之前拒绝、--help 照常
feat(cli): 受管安装上 start/stop/restart/status/logs 说明原因后退出
老 Python 企业版(开源 + flockspro 包)的机器执行 flocks update 后,老包照常加载, 但 #81 删掉了开源网页里的「Flocks Pro」页面和账号菜单入口,用户以为企业版丢了; 离线包加企业版的机器,新开源离线包直接拒绝覆盖。 - 默认扩展注册表放回账号菜单的 Flocks Pro 入口、/settings/flockspro 分区和 Console 登录回调(企业版构建用自己的注册表,这些条目不进企业版);页面显示老 企业版和它的授权,向 Console 要这份授权的新企业版安装包(manifest 的 installers 字段),下载核对 sha256 后本账号能装就脱离本服务运行,systemd 管 的机器给 root 命令;下载、安装途中刷新页面会接着跟进度 - flocks/updater/enterprise.py、/api/enterprise-upgrade 四个接口(管理员,开始 升级走 SSE);页面和 Console 请求用同一处解析授权编号(FLOCKS_ROOT、home 的 .flocks、老包自己的状态) - flocks update 开头说明企业版换成了单独的安装包、怎么升 - 离线安装包:老企业版标记不再拒绝,老包(优先当前 venv 里的版本,其次 bundle 里最新的 wheel)先放临时目录,用新版自己的 PluginLoader 预跑它的入口点,全部 通过才移进新 venv,任何一步失败都撤回、不留残余;切过 PostgreSQL 的改为指向 企业版安装包
feat(webui,updater): 放回「Flocks Pro」页面和升级入口,离线包不再拒绝老企业版
侧栏每个菜单项会回到上次停留的地址;在菜单项自己的子页面里,这个地址就是 当前页,点了不动。代码漏洞审计工作区的项目详情里点「项目列表」回不到列表, 工作流详情里点「工作流」也一样。现在点当前所在的菜单项去它自己的地址,从别 的菜单切过来仍回到上次停留的地方。
fix(webui): 在子页面里点当前菜单项回到它自己的页面
企业版受管安装的运行环境是发布包里签过名的程序树,核心每次拉起 Python 前都按清单原样校验。以 root 用后台装法装时,root 不受程序树只读权限的限制:技能依赖里 kind 为 pip 的项、工作流的 requirements 会把包装进这棵树,下次重启核心发现多出文件,拒绝启动。普通账号和 systemd 装法写不进去,只会报 pip 的权限错。 受管安装(FLOCKS_DEPLOY_MODE=managed,或 deployment.json 声明 managed)里两处入口都先核对:要求已满足(包、版本都在,带 extras 的连同 extras 加的依赖都在)就跳过,不起安装进程;缺了就直接报缺哪一个。版本读不出、解析不了、带 URL 的都算没满足。和 REA 在受管安装里不装不卸的做法一致;非受管安装照旧。
fix(skill,workflow): 受管安装不往运行环境装 Python 包
fix(webui): bundle the compiler for plugin installs and updates
fix: 支持普通聊天上传 ZIP 附件
chore(release): bump version to v2026.10.30
jamon-bodhi
approved these changes
Oct 30, 2026
jamon-bodhi
approved these changes
Oct 30, 2026
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.
No description provided.