Skip to content

release: prepare AutoForge v0.1.0 for open source - #1

Merged
renmengkai merged 20 commits into
mainfrom
dev
Aug 9, 2026
Merged

release: prepare AutoForge v0.1.0 for open source#1
renmengkai merged 20 commits into
mainfrom
dev

Conversation

@renmengkai

Copy link
Copy Markdown
Collaborator

Summary

  • synchronize the current dev product state to main
  • add Apache-2.0 licensing and open-source community files
  • add CI, dependency auditing and automated cross-platform release packaging
  • update vulnerable frontend and Rust transitive dependencies

Validation

  • GitHub CI passed on dev
  • frontend production build passed
  • 302 Rust tests passed
  • npm audit reports 0 vulnerabilities
  • RustSec audit passes with documented, non-reachable Windows XML parser exceptions
  • Gitleaks found no secrets across 172 commits or the staged changes

renmengkai1993 and others added 20 commits July 1, 2026 12:53
三份设计(方法论平台=上下文基质、DUAL_HEAD=双头、孵化台深化)整合实施。

Track A 双头/后端解耦:
- M0 泛型 emit + impl EventSink for AppHandle + Arc blanket,10 业务模块从
  tauri::AppHandle 解耦(含 merge 合并唯一入口,行为等价 + 全单测护航)
- M1/M2 机制 core/rpc.rs: Ctx + Principal/Role/authorize(RBAC) + CommandRegistry
  + global_registry + rpc_dispatch(不枚举命令名) + 前端 rpcDispatch

Track B 上下文基质(方法论平台核心):
- 迁移 0081 context_index + models/context_item + core/context.rs
  (register/assemble/select/fetch 7 读取器 + G3 保尾摘要)
- 5 活体填充钩子(issue/code_agent_log/incubator_draft/agent_output/cr_review)
- recall_context Agent 工具 + 5 IPC 命令 + 前端封装
- L4 取景框: core/lens.rs(6 台子/CRUD/装配桥) + pages/Lens.tsx 新 nav 页
- context_ref 块 G4 全链路: 类型/渲染/Rust 生成器 + cite 产出方 + 取景框引用

Track C 孵化台深化:
- 迁移 0082(context_json/eval_json/pending_question) + 草稿进基质
- P1 grounding + P2 追问状态机(断点续跑) + P3 spec_grader critic
  + P4 文档源聚合/doc_refs + 追问卡/评估/关联文档面板/深链跳转

评估: 6 覆盖缺口 + 3 误判(代码证伪)修入统一蓝图 §7/§9。
验证: 272 lib 测试绿 + 前端 tsc 绿,零回归。
剩余(需运行时环境): LLM 行为质量 / M2 逐命令 tauri:dev 回归 / Track D Web 头(设计 Gate)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 迁移 0083: prototype_prompts 加 draft_id + design_mode(按需求归档,旧数据空值向后兼容)
- generate_prototype_prompt 增 design_mode/existing_page_refs: 'existing' 模式读选中的现有
  页面组件源码(read_repo_file 守卫读 + 注入过滤 + 分条/总量封顶)前置进 design_ctx,并指令
  模型在现有页面基础上做增量改动、保持结构/交互/风格一致,而非从零重设计(新页面模式行为不变)
- list_prototype_prompts 增 draft_id 过滤: 从孵化台跳入时按该大需求列出原型
- 前端 Delivery: 新建页/改现有页 seg 切换 + 现有页面组件文件选择器(过滤 tsx/vue 等) +
  「本需求原型」标注 + 按需求过滤列表; 生成传 designMode/existingPageRefs
- 与孵化台→原型深链(携 draftId)形成闭环: 大需求梳理成文档 → 一键跳原型设计 → 按需求生成/归档

273 lib 测试绿(+按需求过滤单测) + 前端 tsc 绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- generate_prototype_prompt 硬约束:空 draft_id 直接拒绝、不落库;
  标题/描述改从必选的孵化台草稿派生(移除 issue/项目名回落)
- 迁移 0084:清理历史遗留未关联需求(draft_id 空)的旧原型提示词
- 交付页设计阶段加「需求」必选选择器 + 生成门禁 + 无需求引导空态
- 大需求输入框 rows 5→10
- 「孵化台」全量改名「需求孵化台」(仅 UI 文案,内部 blueprint_* 不变)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 迁移 0084:conversations 加 deleted_at 列 + 索引
- soft_delete_conversation 命令(直聊/群聊通用,幂等,只打时间戳保留数据)
- list_conversations 过滤 deleted_at IS NULL
- get_badge_counts 未读排除已删对话,避免幽灵角标
- 前端:ConvItem/ConvList 右键菜单 + 软删除确认弹窗 + .bubble-menu .danger 样式

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 迁移 0086:messages 加 deleted_at 列 + 索引
- soft_delete_message 命令(幂等,只打时间戳保留消息本体)
- list_messages / list_conversations 未读与预览 / unread_count / get_badge_counts 均排除已删消息
- 前端:消息气泡右键菜单加「删除」(danger),复用已落地 .bubble-menu .danger 样式
- 撤销上一版对话级软删除的 UI 与 soft_delete_conversation 命令;0085 迁移列作为无害孤列保留

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 移除关联文档勾选面板与「新建/改现有页面」文件选择器(及相关 state/effect/import)
- 未选需求时点生成不再置灰,改为弹提示引导去「需求孵化台」完善当前需求
- 生成仅传 draftId,后端对空 doc_refs/design_mode 自动兜底 DESIGN.md+规格

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
把上下文基质从「push-register 精选5种来源」翻转为「pull-provider 默认全包」:
系统里任何内容表 + .autoforge 文件默认可寻址/可引用/可回灌,只有密钥/基础设施被黑名单挡在外。

后端(P0-P3):
- core/context_providers.rs:SourceProvider trait + 声明式 SOURCES(20 DB 来源) +
  DbTableProvider 通吃 + WorkspaceFileProvider(.autoforge 文件) + NEVER_CONTEXT 黑名单护栏
  + is_safe_ident 标识符校验;chat_message/llm_trace/.autoforge 等你点名来源全部落地。
- core/context.rs:list/get/fetch_content 改接 provider 层活查,context_index 降级为缓存叠加层;
  is_bulky 读 SOURCES 单一真源;get 缓存 miss 反构最小条目。
- orchestration.rs:D1/D2 消费侧——message_to_prompt_text 展开 context_ref 块注入 prompt
  (会议室 AI 任务 + 立即编码 work_context 同一路径),文件类来源从会话补齐 project_id。

前端(P4):
- components/ContextPicker.tsx:复用 mention-pop/Select 的内联引用选择器,按来源筛。
- 融入 4 处:会议室 @(落 context_ref 块,后端展开)/ 孵化台起草 / IntakePanel / Audit 建议。
- 删除独立「取景框」页:Lens.tsx + rail + 路由 + 3 个 lens IPC 命令 + 服务封装
  (保留 core/lens.rs 供 blueprint grounding、context_ref 渲染器、cite 命令)。

契约文档:.autoforge/docs/方法论平台/全量上下文基质·万物可引.md(4 条不变量 + provider 架构 + 安全边界 + 覆盖清单)。

测试:后端 282 通过(新增 provider enumerate/fetch + 黑名单断言 + 标识符校验 + D1 展开 + .autoforge 文件端到端);前端 tsc + vite build 全绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
更新了守护进程的进程号以及启动时间戳,反映当前实际运行状态
改用 .audit-top + .eyebrow(INCUBATOR · 需求孵化台) + btn-sm 主按钮,
与 Projects/Delivery/Audit 等页面头栏保持一致;保留项目选择器与新建按钮。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
来源下拉(Select)弹层经 portal 挂到 document.body,落在 ContextPicker
的 wrapRef 之外,被外部点击处理器误判为「点击外部」而关掉整个引用面板。
外部点击判定改为忽略落在 .csel-pop(portaled Select 弹层)内的点击。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28px logo + 5px padding 居中留白,避免撑满 56px 头栏显得拥挤;
名称/描述超长省略号截断。仅改本实例内联样式,全局 .proj-select 不变。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
来源下拉选项原本从当前已加载 items 推导;选中某 kind 会触发按该 kind
的筛选重取,items 收缩为单一来源,下拉随之只剩「全部来源」+ 该来源,
无法再切到别的来源。改为在未筛选那次加载捕获完整来源集合到独立 allKinds
状态,下拉由它推导,筛选后不再收缩。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
引用上下文面板原本每行只有 kind chip + 标题,同类条目(会议消息/Agent
输出等)标题相近或为原始 JSON,无法区分。

后端(纯 Rust provider,additive 零回归):
- ContextItem 加 preview 字段(#[sqlx(default)],缓存/反构条目回落空串)
- TableSource 加声明式 preview_sql;enumerate 同查取 substr(content,1,200)
  片段,经 clean_preview 折叠/截断,与标题重复时回落空
- chat_message 标题/预览改 json_extract($[0].md/.text/.code) 取可读文本,
  不再吐原始 content_json
- 文件来源 preview=相对路径,区分不同目录同名文件

前端(ContextPicker):
- 行内改双行:标题 + 元信息行(相对时间 · 阶段 · 体积 · 预览片段)
- 新增 relTime/formatBytes/stageLabel 助手,样式复用 .rl + CSS 变量

测试:新增 chat 可读标题、issue 预览两条断言;全量 283/283 绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
归档是会议收尾+消息即将清空的天然学习点:archive_conversation
后台把整段会议用 kb_distill 角色 LLM 蒸馏成可复用经验(distill_meeting
→parse_insights,严格 JSON [{content,trigger}],容忍 fence/散文包裹、≤8 条),
逐条 cmd_remember(scope 感知,无项目→共享库) → kb_evolve → 在清空后的
房间回执"学到 N 条"。fire-and-forget,不阻塞归档、失败不影响归档结果。

innate_core 0.1.16 只有 add/evolve、无"喂原始记录自蒸馏"入口,故提炼由
kb_distill LLM 自己做,沿用 merge.rs 合并后 kb_add+kb_evolve 范式。

开关 knowledge.archive_learning 默认开(KnowledgeSettings 加字段+设置页
Switch);archive_conversation 新增 app: AppHandle 参(前端 invoke 不变)。
未配置蒸馏角色/蒸馏失败/无料可学时静默降级。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
把并发准入从「数 agent」迁到「按核预算 + 相位作用域租约」,封住 N 个并行
claude -p 内部 rustc/tsc 突发把 CPU 打满。禁 Redis 故用 tokio 信号量
acquire_many_owned 等价替换文档的 Redis+Lua+FIFO(原子/FIFO 公平/Drop 自动归还)。

P1 cgroup 硬兜底默认开启:DEFAULT_CPU_BUDGET_PCT 0→90 + 迁移 0087 重置存量。
  能封住不透明 claude -p 内部编译的锁早已实现,只是默认关着。

P2 加权核预算 + 逐 check 相位租约:新增 core/cpu_permits.rs 加权令牌池取代
  state::build_pool。weight_of 按工具判权重(pytest/cargo/build=4 等)、
  clamp 独占不死锁、parallelism_env 经环境变量封顶子进程扇出(不改命令字符串)。
  testing.rs/scan.rs 改逐 check 借还。build_slots 彻底退役为 cpu_permits
  (默认=nproc),迁移 0088 删废弃键。

P3 双层准入 + 可观测:max_slots 保 5 仅改「会话槽位 Tier1」语义;三条收敛信号
  (load_avg_1m / cgroup throttle_stats / 核令牌)经 ConcurrencyConfig 贯通到
  Settings 只读面板。

§10 核预算队列深度背压:cpu_permits 加真实队列深度计数(try_acquire 先行只计真
  阻塞等待者),runner 准入在 queue_depth>total 且已有 agent 时 throttle 降速,
  与 loadavg 闸同形、绝不死锁。

相位租约对不透明 claude -p 执行域不适用,改用 cgroup 硬兜底(文档 §5.2 强制层)。
294 cargo 测绿 + tsc 绿 + 新代码零告警。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
上下文与附件面板新增检索框,按文件名或相对路径实时过滤
工作区文件(当前 tab)与只读上下文文件两个列表;只读文件改为
先全量过滤再截取前 12 条。复用 .chat-search-box 样式,检索无
匹配时给出「无匹配」空态。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 环节产出:移除多余的筛选「重置」按钮
- 环节产出:状态按钮标签改中文(成功/部分/失败),值映射不变
- schema 体检:右侧百分比列加宽到 96px 并禁止换行,修复「77% · 162/211」换行
- partial 两处加原生 title 悬停说明(体检 chip + 筛选按钮)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- M0 注入收敛: DEFAULT_BUDGET_BYTES=48K 兜底 assemble/rpc/lens meeting(Some(0) 仍=显式不限)
- M1 搜索下推: SourceProvider::enumerate 加 query,DB 来源 title LIKE ESCAPE(like_pattern 转义),
  文件来源路径过滤;搜索态排序 (kind_rank, created_at) 让日志/trace 沉底,枚举态零变化
- M2 IPC: list_context_items / ctx.list / listContextItems 加可选 query,向后兼容
- M3 Picker 翻转: 默认态四组候选面板(产物展开每 kind 3 条,过程/配置/外部折叠计数),
  输入 200ms 防抖后端全量召回,底部常显可搜来源提示
- M4 pull 闭环: recall_context 加 query;新增 read_context(id) 取全文,
  belongs_to_project 按 SOURCES scope 活查堵跨项目读洞(反构条目归属为空默认拒绝)
- 附方案文档(.autoforge/docs/待实现功能/),cargo 302 测绿 + tsc 绿

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@renmengkai
renmengkai merged commit b0f25d3 into main Aug 9, 2026
7 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