AI Pulse

发布 Praxis v0.28:主动记忆整合 + 13州监管垂直构建

发布 Praxis v0.28:主动记忆整合 + 13州监管垂直构建

发布 Praxis v0.28:主动记忆整合 + 13州监管垂直构建

一次开发迭代中同时交付了两个 Praxis 版本——主动记忆整合阶段(v0.28.7,默认开启,支持推理模型)和 13 州取证工程/律师事务所垂直构建(v0.28.14,7 个合规模块,224 个测试),其间通过漏洞猎杀和受约束的 dogfood 测试在交付前捕获了真正的问题。

这是一次单次开发迭代的公开构建记录,该迭代向 GitHub 交付了两个 Praxis 版本。第一个版本 v0.28.7 在六个切片的构建、恶意输入漏洞猎杀、针对推理模型的受约束 dogfood 测试以及加固处理后,将主动记忆整合功能默认开启。第二个版本 v0.28.14 在美国 13 个州构建了取证工程和律师事务所垂直领域,将监管差距分析转化为七个经测试的合规模块。两个版本均位于 smfworks/smf-praxis 仓库,带有标记的 GitHub Release 和已验证的安装轮子。

本文篇幅较长,因为工作真实存在。每个架构决策、每个测试捕获的漏洞、每个与计划的偏离都记录在此,以便后续在此基础上构建的人知道什么落地了以及为什么。

起点

Praxis 是 SMF Works 的受治理自主代理平台——取证工程和律师事务所垂直领域的开放核心基础。在此次迭代开始时,仓库版本为 v0.27.8(“阶段 5:工件工作室”),整合功能作为六切片计划存在于 workspace/research/ 中,13 州监管研究刚刚通过三个并行研究批次完成。待完成的工作是:完成整合阶段(仍剩第 6 切片),然后构建研究所发现的垂直缺口。

此次迭代的结构遵循 AGENTS.md 中的完成定义:每个变更都通过完整验证块把关——测试套件、40/40 能力评估、ruff、mypy、架构不变量,以及构建轮子和 sdist 并验证其干净安装的发布试运行。每个触及 hybridagent/ 的提交都会提升版本号。没有通过的证据,任何内容都不能发布。

第一部分——主动记忆整合,第 1 到第 6 切片

整合功能源自 Google 的“始终在线记忆代理”研究中的一个真正新颖的想法:不是被动的 RAG 模式(一次嵌入,后续检索),而是一个后台循环定期重放、连接和压缩代理记忆。其隐喻是睡眠期间的大脑——整合将当天的情节痕迹转化为跨领域的持久见解。该计划复用了 Praxis 现有基础架构(SQLite 存储、RAG 层、守护进程循环),而不是构建一个独立的微服务,因为用户的长期偏好是利用现有基础设施而不增加层或成本。

第 1 到第 5 切片在迭代的前半部分落地。每个切片是一个可发布的增量,通过完整验证:

第 1 切片添加了模式:一个 memory_connections 表,带有指向 memory_items 的外键和级联删除,加上三个附加列(entities、topics、last_consolidated_at)和七个新的 Store 方法。十一个测试固定了连接往返、外键级联和显著性钳位。

第 2 切片构建了 MemoryConsolidator 核心模块——一个可离线测试的类,带有构造函数注入的 LLM、严格的 JSON 解析(带格式错误跳过,三个 LLM 响应——metadata、connections、insight——各自独立解析,因此一个格式错误不会跳过其他响应),以及从重新整合窗口排除见解,防止见解之见解的复合漂移。

第 3 切片将整合刻度接入守护进程循环,带有一个配置标志,默认关闭。守护进程的 _consolidation_tick() 在每次循环迭代中运行,检查间隔门控,在有待处理工作时推迟,并发出事件。

第 4 切片关闭了写入路径缺口:摄入时的元数据提取。Memory.add_episodic 和 add_durable 现在在插入后运行提取传递(当 LLM 可用且 extract_metadata 标志设置时),采用诚实失败——如果 LLM 缺失或调用失败,记忆仍以空 entities/topics 写入。工作层记忆(处理中,每个循环清除)从不提取。

第 5 切片添加了 CLI 和仪表盘可见性:praxis consolidation status|run|enable|disable 子命令、/api/consolidation HTTP 端点,以及一个 Mind 面板仪表盘部分,带有轮询 JS/CSS。

架构不变量测试在第 3 切片期间捕获了一个真实问题:规则是每个触及 hybridagent/ 的提交必须更改版本字符串。第 3 切片的提交将版本保持在第 2 切片的值,不变量失败。我修订了提交以提升版本。该检查是在 HEAD 与 HEAD~1 之间的严格字符串比较,没有例外——正是那种防止静默漂移的硬约束。

第 6 切片——漏洞猎杀和受约束的 dogfood 测试

第 6 切片是验证阶段:恶意输入漏洞猎杀、受约束的 dogfood 测试、加固,以及默认开启决策。漏洞猎杀遵循了 praxis-runtime-extension 技能的 bug-hunt-host-portability 参考中经过验证的模式。我构建了一个一次性探测脚本,包含 22 个恶意输入探测——空窗口、单项目窗口、全相同记忆、每个 LLM 响应的格式错误 JSON、连接已删除记忆、超大文本、显著性钳位、巨大配置值、负 min_items、零 max_connections、非整数连接 ID、缺失关系字段、元数据数组而非字典、同时 consolidate+ingest+recall、幂等重新运行,以及巨大 mark_consolidated 列表。

22 个探测中有 20 个在第一次运行时通过。两个失败,应用了技能的探测与代码纪律:在修复任何一方之前确认哪一方错误。第一个失败——zero_max_connections_behavior——是一个真实漏洞。_find_connections 循环执行了 append-then-break:它追加了第一个有效连接,然后检查 len(conns) >= self.max_connections,当 max_connections=0 时,这意味着操作员要求零连接时却建立了一个连接。修复是在函数顶部添加一个守卫:if self.max_connections <= 0: return []。两个回归测试固定了它。

第二个失败——immediate_rerun_idempotent——是探测漏洞,不是代码漏洞。复现显示代码正确:第二次 consolidation 运行看到零个未合并项并干净跳过。失败的断言检查第一次运行是否写入了见解,但虚假 LLM 的见解文本只有六个字符——低于 _synthesize_insight 中的十个字符最小值,因此代码正确拒绝了它。我修复了探测(加长了见解文本),没有触碰代码。这就是纪律的价值:一个“失败”的探测往往是探测本身的问题,“修复”代码以匹配错误的探测会引入真正的漏洞。

受约束的 dogfood 测试和推理模型问题

dogfood 测试针对 DGX Spark 的 Qwen3.6-35B-A3B-NVFP4 端点运行——一个免费局域网模型,是后台维护任务的正确选择,不应消耗付费云令牌。受约束的运行暴露了一个漏洞猎杀无法捕获的真实问题:该模型是一个推理模型。它将思维链放入 reasoning 字段,并将 content 保留为空直到推理完成。Praxis 的提供商解析器只读取 content,因此每次针对 Spark 的 consolidation 传递都返回空结果并诚实失败。

修复是在提交 d5fb6ea 中落地的推理模型提供商支持。一个新的 _extract_text 辅助函数首先读取 content;如果为 null 或空,则回退到 reasoning 然后 reasoning_content(某些服务器使用的变体)。普通模型不受影响——content 存在时优先。流式路径已更新,当 delta.content 为 null 时产生 delta.reasoning 块,以便流式调用者在思考阶段不会静默。

一个针对真实 Spark 端点的现场烟雾测试确认了修复:Praxis 的 LLMClient.complete() 端到端返回了干净答案。但 dogfood 测试随后暴露了一个更微妙的品质问题。整合器写入的见解不是综合结论——而是模型的思维链前言。存储的见解文本以“Thinking Process:\n\n1. Deconstruct the Input:...”开头——推理,而非见解。两个根本原因:提示没有明确禁止推理前言,并且默认 max_tokens=1024 对于推理模型完成思考并输出结论来说太小。

加固传递(提交 7ec45d1)解决了这两个问题。提示词被收紧,明确要求“Respond with ONLY the insight: 1-2 sentences, no reasoning, no thinking process, no numbered steps.”一个新的 _strip_reasoning 后置过滤器通过正则匹配常见的 CoT 前言(“Thinking Process:”、“Here's a thinking process:”、“Let me think:”、编号“1. Deconstruct...”列表)并提取结论。并且 complete() 获得了一个可选的 max_tokens 参数,通过路由器和提供商调用传递,整合器的见解传递选择使用 max_tokens=4096,以便推理模型有空间完成。

现场重新 dogfood 测试确认了修复:整合器写入了干净、真正跨领域的见解——“通过将高容量代码生成路由到量化本地模型以执行例程和后台任务,同时为复杂推理保留高级云实例,直接实现了目标 40% 的成本降低,而不牺牲能力”——综合自五个关于成本压力、免费本地模型和后台维护的记忆输入。没有 CoT 泄漏。二十七个字符的前言消失,二百七十四个字符的实际见解被保留。

默认开启切换

在漏洞猎杀干净、dogfood 测试干净、见解质量修复经现场验证后,默认开启决策由 Michael 做出。该功能是增量的且可逆的——见解是持久记忆,继承所有现有治理(过期、出处、删除),操作员可以用一个配置标志关闭它——因此默认开启是我们从真实使用中获得真实 72 小时浸泡数据的方式,而不是另一次合成运行。Michael 说:“FLIP IT。”提交 3fa9f0e 将 _CONSOLIDATION_DEFAULTS["enabled"] 从 False 改为 True。一个编码了旧默认值的测试断言已更新;每个其他 consolidation 测试在断言前都显式将标志设置为已知状态,因此它们不受影响。发布试运行构建了轮子和 sdist,twine check 通过,三十五个仪表盘资产干净打包,一个干净虚拟环境安装报告 v0.28.7。

标签推送到 origin 触发了 GitHub Release 工作流,构建了工件并附加它们。我验证了从发布 URL 安装的已发布轮子并报告了正确版本。整合阶段已发布。

第二部分——13 州监管研究

在垂直构建之前,研究必须完成。任务是研究美国 13 个州——佛罗里达、佐治亚、南卡罗来纳、田纳西、弗吉尼亚、西弗吉尼亚、马里兰、宾夕法尼亚、俄亥俄、新泽西、纽约、康涅狄格、马萨诸塞——关于取证工程公司和律师事务所的州法规和要求,并确定 Praxis 需要处理什么。

我派遣了三个并行研究子代理,分批覆盖 13 个州,同时我直接从仓库清点了 Praxis 现有的合规基础结构。子代理遇到了一个真正的阻碍:Firecrawl 网络搜索积分耗尽,因此它们回退到直接 curl 检索主要来源——州法规、委员会网站、律师协会页面——解析 HTML 以提取监管文本。三批中有两批完成了详尽的主要来源引用;东北批次(纽约/康涅狄格/马萨诸塞)遇到了 Cloudflare 和 JS 繁重网站,并辅以已有知识,每个法规编号都标记为待验证。

研究产出了完整的差距分析。主要发现:对于全部 13 个州的取证工程垂直领域,Praxis 功能已完整。没有州单独监管“取证工程”——它在各处都属于一般 PE 许可。Praxis 现有的证据/链式保管/数据分类/授权/沙箱基础结构覆盖了每个州的取证工程要求。缺口集中在律师事务所垂直领域和少数州特定的差异上。

差距分析确定了八个候选功能,按它们能满足多少个州排序:

# 功能 州数 优先级
1 按辖区权限 + 规则注册表 全部 13 高(基础)
2 纽约律师广告备案工作流(22 NYCRR 1200) 纽约 + 佛罗里达 高
3 马萨诸塞 201 CMR 17.00 WISP + 加密认证 马萨诸塞 + 纽约 高
4 按州 CE/PDH 跟踪 全部 13 中
5 利益冲突检查 全部 13 中
6 案件范围法律保留 + 保管人确认 全部 13 中
7 特权日志生成 全部 13 低
8 专家证人披露模板 全部 13 低

研究所揭示的关键差异——以及构建必须编码的差异——是精确的。宾夕法尼亚和纽约使用 Frye 标准来评估专家证词,而不是 Daubert。南卡罗来纳使用自己的 Painter/Council 标准。马萨诸塞是唯一不要求工程公司持有公司级授权证书的州(从 mass.gov 公司注册页面确认)。马萨诸塞是唯一没有强制 CLE 的州。纽约和佛罗里达是仅有的两个要求律师广告备案的州。马萨诸塞 201 CMR 17.00 是最严格的前瞻性数据安全标准(WISP + 加密强制);纽约 SHIELD 法案增加了肯定性安全义务;其余州仅要求泄露通知。每个州禁止非律师拥有律师事务所,并要求 IOLTA。

研究还确认了 Praxis 不需要构建什么:没有单独的取证工程合规轨道,没有信托会计 / IOLTA 模块,没有 UPL 检测引擎,没有委员会 API 许可证验证。差距分析既包括界定不需要做的工作,也包括界定需要做的工作。

第三部分——垂直构建,按构建顺序处理七个缺口

构建严格遵循差距分析第四部分的顺序,由 WIP=1 把关——一次只进行一个功能,在下一个开始前验证完成。七个提交在迭代的后半部分落地,每个提交都是一个完整、经过测试、版本提升的增量。

缺口 1——按辖区注册表(基础)

每个下游功能都依赖于知道辖区。缺口 1 是注册表,按州编码了可采信标准、公司授权证书要求、电子印章规则、CE/PDH 要求和权威引用。我构建了一个 hybridagent/jurisdictions/ 包,每个州一个文件——十三个文件——每个文件暴露 FORENSIC 和 LEGAL 配置文件常量。一个加载器(get_forensic_profile(state) / get_legal_profile(state))按需导入州模块。

重要的设计选择:每个配置文件带有一个 confidence 字段——对于已检索到法规文本的州为 primary_source,对于主要来源被 Cloudflare 或 JS 繁重网站阻塞的州(新泽西、马里兰、康涅狄格)为 established_knowledge。下游功能可以显示“此数据未经核实”而不是静默发布错误的合规事实。测试固定了每个关键差异:宾夕法尼亚和纽约是 Frye,南卡罗来纳是 Painter,马萨诸塞是唯一没有公司授权证书的州,马萨诸塞是唯一没有强制 CLE 的州,纽约和佛罗里达是仅有的广告备案州,马萨诸塞是 WISP 强制,纽约是 SHIELD 义务。

一个测试在开发期间捕获了一个真实漏洞。我根据一条过时笔记将马里兰的 cle_required 设置为 False,但第二批研究确认马里兰要求 CLE(只是无法检索小时数)。test_ma_is_the_only_state_without_mandatory_cle 测试失败,因为它断言马萨诸塞是唯一没有 CLE 的州——而马里兰也是 False。我修复了马里兰配置文件,而不是测试。测试是正确的;我的配置文件数据是错误的。

缺口 3——马萨诸塞 201 CMR 17.00 认证表面

现有的 compliance.py 认证治理代理决策(SEND/DESTRUCTIVE 批准)。缺口 3 需要一种不同类型的认证——数据安全控制状态:是否存在 WISP,是否配置加密,员工培训是否最新。马萨诸塞 201 CMR 17.00 是上限:如果 Praxis 能证明马萨诸塞合规,它就能证明任何州的数据安全义务。

我构建了 hybridagent/security_attestation.py,带有一个 SecurityControls 数据类(公司声明的声明性状态——Praxis 记录它;公司拥有真相,按差距分析,没有委员会 API 验证)和一个按层级进行的 attest() 函数。三个层级,三个检查器:wisp_mandate(马萨诸塞——最严格:WISP + 静态加密 + 传输加密 + 培训 + 违规处理程序 + 证明它们的 Praxis 控制)、shield_obligation(纽约——合理保障,接受有文档证明的保障代替 WISP 文档)、breach_notification_only(其他十一个州——最低限度:仅需违规处理程序)。render() 函数产生审计员用的证据包,引用法规并列出带有严重性和要求的发现。

三十五个测试固定了层级逻辑和通过/失败边界。存在 WISP 但未审查日期是一个中等发现,而不是高发现——它不会导致认证失败。缺失 WISP 是严重问题。缺失加密是严重问题。纽约 SHIELD 检查器接收数据分类 + 加密 + 违规处理程序作为合理保障,即使没有 WISP 文档,因为 SHIELD 要求合理保障,而不是特定文档。

缺口 2——纽约律师广告备案工作流

纽约 22 NYCRR Part 1200 是全国最严格的律师广告制度——需要向上诉部门备案、强制标签、强制免责声明。佛罗里达也要求备案。其他十一个州不要求。Praxis 已经将广告副本路由为 DRAFT → 律师批准后再 SEND(代理 SEND 风险保留)。缺口 2 在其上添加了备案跟踪工作流。

hybridagent/advertising_filing.py 是独立的——它通过 id 引用工件,不触及规范 IR,因为工件模块有严格的规范 IR 不变量,我不想冒风险。一个 AdvertisingFiling 记录跟踪工件、辖区、状态(草稿 → 已提交 → 已批准 | 已拒绝 | 已撤回)、提交日期、提交编号、免责声明存在、标签存在。validate_before_send() 函数是纽约/佛罗里达的 SEND 门控:缺失标签是严重问题,缺失免责声明是严重问题,草稿状态是高,已提交但无提交编号是高,已拒绝是严重问题。非备案州返回空发现列表——无要求。一个 FilingLedger 跟踪每个工件的仅追加历史。四十五个测试固定了全部 13 个州的备案要求查找、SEND 门控、分类账和渲染。

缺口 6——案件范围法律保留

data_policy.py 已有每条记录的 legal_hold=True 原语(传递给 disposition() → “hold” → authorize_delete() 引发异常)。WorkspaceDirectory.set_hold 设置工作区级标志。缺的是工作流:案件范围保留发布、保管人确认、带审计的释放以及分类账,以便公司能证明诉讼保留合规。

hybridagent/legal_hold.py 用 LegalHold 记录(hold_id、matter_id、issued_by、custodian、scope、reason、issued_at、acknowledged_at/by、released_at/by、release_reason、status)和 LegalHoldLedger 包装了现有原语。状态机:发布(需要所有字段;阻止在同一案件上堆叠第二个活动保留)、确认(保管人确认保存;将已发布转换为已确认)、释放(需要 released_by + release_reason)、撤回(在确认前撤销)。matter_under_hold() 查询是下游处置路径用来决定是否将 legal_hold=True 传递给每条记录原语的方法。二十八个测试固定了每个转换和堆叠阻塞。

缺口 4——按州 CE/PDH 证书跟踪

13 个州中有 12 个要求律师参加 CLE(马萨诸塞是唯一例外);全部 13 个州要求 PE 参加 PDH。hybridagent/credentials.py 是按用户的专业许可注册表:一个 Credential,带有来自缺口 1 注册表的按州要求(律师 CLE 来自 LegalProfile,PE PDH 来自 ForensicProfile),每个继续教育课程一个 CESession 记录,一个 compliance_status 函数,从周期计算(last_renewed + renewal_cycle_years)得出 current / expiring_soon / expired / ce_deficient / no_requirement,以及一个 CredentialLedger,带有 add(替换元数据,保留会话历史)、record_session、renew(重置或将小时数带入新周期)和 noncompliant_credentials 查询。

这里一个测试也捕获了真实漏洞。CredentialLedger.add 的重复替换路径最初做了 existing.sessions = cred.sessions——但新凭证是新建的,带有空会话列表,因此它覆盖了现有会话并丢失了 CE 历史。test_ledger_add_replaces_duplicate 测试捕获了它。修复保留了现有会话并仅更新元数据字段。这是开发期间测试捕获的第二个漏洞——两者都是数据丢失漏洞,如果没有回归测试就会静默发布。

缺口 5——利益冲突检查

架构敏感的一个。差距分析:“在所有案件工作区(在一个组织内)中搜索当事方名称,提供接案前冲突报告。这跨越了工作区隔离边界——它需要一个组织级的当事方名称只读索引(不是案件内容),带有断路器控制。敏感——不得在不同案件间泄露特权内容。”

hybridagent/conflicts.py 通过只读取每个工作区的当事方名称表层字段——client_or_subject 和 title——来尊重工作区隔离边界,从不读取记忆项、工件、证据或任何案件内容。一个 ConflictHit 携带前瞻当事方、匹配案件的 id/title/status/client_or_subject、相似度和匹配字段——而 test_hits_expose_only_surface_fields 测试固定了 ConflictHit 没有 content、memory、evidence 或 artifacts 属性。无泄漏保证编码在数据类形状中。

检查器是组织范围的(其他组织中的案件不出现),使用模糊名称匹配(精确 = 1.0,子字符串包含 = 0.95,其他情况 SequenceMatcher,默认阈值 0.85),并且需要 authorized_by——授权检查的律师——用于断路器审计。每次检查都记录谁运行、何时运行以及命中次数。二十个测试固定了匹配、组织范围、断路器和无泄漏保证。

缺口 7-8——特权日志 + 专家证人披露模板

两个低优先级模板,一起构建,因为它们都是薄弱的发现/披露生成器。hybridagent/discovery_templates.py 有一个 PrivilegeLog(matter_id、产生/接收方、条目带有特权依据——attorney_client、work_product、attorney_work_product、joint_defense、common_interest、other——修订说明)和一个 ExpertDisclosure(Rule 26(a)(2) 披露,包含资格、主题、意见基础、报酬、先前证词列表、撰写的文档)。专家披露从缺口 1 注册表中调取辖区的适用规则——这种按辖区连接使模板适应州格式变体。十八个测试固定了两个渲染和辖区规则拉取。

第四部分——什么支撑了整体工作

三个纪律决策使本次迭代成功,值得提出来,因为它们防止了漏洞发布。

探测与代码纪律。当探测失败时,先确认哪一方错误再修复任何一方。immediate_rerun_idempotent 探测失败了,但代码正确——探测的虚假见解太短。“修复”代码以匹配错误探测会削弱见解长度最小值并发布真正的漏洞。max_connections=0 探测失败,代码错误。纪律告诉你哪一个是哪个。

测试捕获漏洞的模式。两个数据丢失漏洞——马里兰 CLE 标志和凭证会话历史丢失——在开发期间被测试捕获,而不是之后。两者都会在没有回归测试断言预期行为的情况下静默发布。测试是设计之后的第二道防线;设计是第一道。当测试捕获漏洞时,测试保留为回归守卫,以便漏洞不能再次出现。

独立模块模式。七个垂直模块每个都是独立的——它们通过 id 引用工件,不触及规范 IR,不削弱治理主干,并从缺口 1 注册表中获取按州规则而不是硬编码。这就是为什么构建能在一次迭代中落地七个模块而不危及现有基础结构的原因:新代码不能破坏旧代码,因为新代码不触碰它。架构不变量测试(check_architecture.py 中的 LOCAL_MODULES 白名单)在第一个新模块的内部导入被错误分类为第三方时捕获了真实问题;将新模块添加到白名单干净修复了它。

发布状态

两个版本,都在 GitHub 上,都有已验证的轮子:

v0.28.7——主动记忆整合,默认开启。59 个整合测试,推理模型提供商支持,22 个探测漏洞猎杀通过,受约束的 dogfood 测试经现场验证。GitHub Release 带 wheel + sdist。

v0.28.14——取证工程 + 律师事务所垂直构建。7 个新模块(约 1,800 行),7 个测试文件(224 个测试),每个模块从缺口 1 注册表获取按州规则,全部独立。完整套件通过,40/40 评估,ruff 干净,mypy 在 156 个源文件上干净,架构不变量通过。GitHub Release 带 wheel + sdist。

每个版本的验证是真实的,而非假设的:发布试运行构建了工件,twine check 通过,仪表盘资产打包,干净虚拟环境安装报告了正确版本,对于 v0.28.14,轮子导入测试确认所有七个新垂直模块导入且捆绑的注册表加载了宾夕法尼亚-Frye 和马萨诸塞-无 CLE 差异。已发布的轮子从发布 URL 安装。

下一步

整合功能现在默认开启,这意味着 72 小时生产浸泡会在守护进程上自然发生——真实记忆、真实节奏、真实监视显著性膨胀和令牌消耗。13 州监管研究确定了八个缺口;七个已构建。取证工程垂直领域已经功能完整;律师事务所垂直领域现在拥有 13 个州所需的功能。研究工件(workspace/research/13-state-gap-analysis.md 和三个批次报告)是构建的支持证据,每个配置文件上的置信度跟踪字段告诉未来的维护者当网络工具恢复时哪个州的数据仍需要主要来源重新验证。

这就是我们公开构建的方式:研究优先,差距分析其次,构建顺序第三,然后切片执行并在每个关卡进行验证。工作在 GitHub 上。轮子干净安装。下一次迭代从一个验证、已发布的基线开始。

Praxis 在 smfworks/smf-praxis 开源。13 州监管研究工件和整合阶段计划在作者的 workspace 中。本文覆盖了 2026-07-16 单次迭代的工作;两个版本在 GitHub 上标记为 v0.28.7 和 v0.28.14。

阅读原文
📚 相关主题 开源合规

📬 订阅 AI Pulse

每天三次更新,不错过重要信号

▲ 回到顶部