Commit Graph

110 Commits

Author SHA1 Message Date
lanrtop
b01084c628 chore(blueprint): 能力双投影补载体选择原则——子项目不需要 MCP 2026-07-03 12:26:24 +09:00
lanrtop
ef7c7a4645 chore(blueprint): 能力双投影补工具预算约束——防 tool bloat 的准入分级 2026-07-03 12:19:02 +09:00
lanrtop
8c8423e0a4 feat(mcp): 治理三件套的 agent 投影——能力双投影首次实践
get_blueprint_status / generate_blueprint_prompt / sync_blueprint_rules
注册为 MCP 工具,与 UI 治理按钮共享同一后端函数(统一验证路径空间)。
工具描述声明对应 UI 按钮与使用约束。agent 从此可走正规流程完成
"拿提示词 → 子项目执行 → 验证蓝图"闭环,不再绕道。

Rules-Applied: R01, R10
2026-07-03 11:29:28 +09:00
lanrtop
7b0f8e60bb chore(blueprint): 能力双投影 concept 卡——UI 按钮↔MCP 工具对齐(R12 候选) 2026-07-03 11:21:04 +09:00
lanrtop
d4cb3c0567 fix(blueprint): 提示词嵌入 manifest 硬约束骨架——防子项目 AI 产出非法格式
noteapp 事故:新导入项目执行"更新蓝图描绘"后 manifest 解析失败
(missing field area)——子项目 AI 写出 project:/stable/in-progress/
depends_on 等自造格式。根因:CONVENTIONS 全文 900+ 行随提示词下发,
manifest 规范埋在中间被忽略,且无"现有文件不合法必须重写"指令。

init/sync 双模板注入就近的严格 schema 骨架:合法字段清单、status 枚举、
非法示例点名、强制重写指令。

Rules-Applied: R02, R10
2026-07-03 10:37:18 +09:00
lanrtop
5e2e899075 chore(blueprint): G7 实战复盘——scope/参数命名/大文件三坑与检测盲区 2026-07-03 10:21:01 +09:00
lanrtop
4cd941c975 feat(gitea): G7 一键接线——新建仓库后本地 init/origin/首推一键完成
绑定完成但本地未连通时(无 .git 或无 origin),Gitea 绑定区显示接线引导:
- 无 git → init + 首次提交 + 关联 origin + 推送
- 有 git 无 origin → 关联 origin + 推送当前分支
复用 publish.rs 存量命令(git_init_and_commit/git_remote_set/git_push),
补齐 GitHub 退役时遗落的"本地接线"半程(接线/放风筝边界裁决的落地)。

Rules-Applied: R01
2026-07-03 10:04:31 +09:00
lanrtop
09410cc35f chore(blueprint): 建仓边界裁决(接线/放风筝)+ G7 一键接线卡 2026-07-03 09:56:19 +09:00
lanrtop
a9805f70f9 fix(gitea): giteaUpdateInstance 参数命名不匹配——更新静默失效
前端展开 snake_case 字段(access_token),Tauri 命令层按 camelCase
(accessToken)匹配,参数被静默丢弃,后端视为未提供而跳过更新且返回
成功——UI 显示"已更新"但 DB 未变(改 Token 实测 401 暴露)。
显式映射为 camelCase 修复。

Rules-Applied: R08, R10
2026-07-03 09:45:01 +09:00
lanrtop
b7008a132e fix(gitea): 建仓需 write:user scope——实例支持改 Token + 权限提示补全
- Gitea 的 POST /user/repos 归 write:user scope(403 实测,R10:以实际
  行为为准),此前权限指导只给了 read:user 导致新建仓库失败
- GiteaInstancesSection 新增「改 Token」内联编辑(此前无入口,删除实例
  重建会级联丢失全部仓库绑定)
- 添加实例的 placeholder 补权限要求说明

Rules-Applied: R08, R10
2026-07-03 09:38:31 +09:00
lanrtop
1d068d188c fix(agent-infra): 空契约项目点击生成三件套无反馈——移除静默 return
UI 承诺"未检测到框架特征,可直接生成空模板",但 handleGenerate 遇到
空契约列表直接静默 return,点击无任何反馈(autoforphone 项目实测)。
后端本就支持空 contracts 生成空模板骨架,删除前端多余 guard 即可。

Rules-Applied: R08
2026-07-03 09:31:57 +09:00
lanrtop
3692b00480 chore(blueprint): 双工作区诊断错误复盘——用户纠错,git 同源取证,sha 主键边界记录 2026-07-03 09:10:40 +09:00
lanrtop
23de433ee4 fix(agent-infra): 生成结果补 commit 提示 + 合并 enterprise 双 project_id 数据
- AgentInfraPanel 生成结果区新增提示:文件需 git commit 后腐化评分才生效
  (与诊断指引死循环修复同源,闭合最后一处引导缺口)
- 数据修复:enterprise-system 废弃工作区(无路径的重复注册)的 50 条
  commit_metrics 迁移到真实 project_id,跨项目聚合不再把它算成两个项目

Rules-Applied: R11
2026-07-03 09:02:46 +09:00
lanrtop
4f5cf431f6 fix(agent-infra): 腐化诊断修复指引死循环——明示评分基于 git 提交时间
用户按指引"重新生成三件套"两轮无法清除红色诊断:生成只改工作区文件,
而评分比较的是 git 提交时间戳。修复指引现明确要求 commit。
enterprise-system 实测:commit project-context.yaml 后诊断转绿。

Rules-Applied: R11
2026-07-03 08:55:15 +09:00
lanrtop
f3b45d55a3 chore(blueprint): 接入包模板演进分发 concept 卡——存量项目触达缺口 2026-07-03 00:34:46 +09:00
lanrtop
03a430fc78 chore(blueprint): 工作流两档制裁决——/ship 按项目画像分档投放,选择进入置信度体系 2026-07-02 23:01:59 +09:00
lanrtop
f9b02f7a34 chore(blueprint): 本项目应用 AGENTS.md 单一来源结构(规则同步产物) 2026-07-02 20:09:53 +09:00
lanrtop
45ce0ad9be chore: 升级版本号至 0.1.17
All checks were successful
Release / release (push) Successful in 4m33s
2026-07-02 20:06:38 +09:00
lanrtop
f4ff83d94e feat(governance): 规则分发跨工具化——AGENTS.md 成为蓝图工作流单一来源
sync_blueprint_rules 改为双文件写入:
- AGENTS.md:完整蓝图工作流 MANAGED 块(开放标准,Qwen/Cursor/Copilot 均读),
  措辞去 Claude 专属化("Claude 应做的"→"AI 应做的",技能引用改为通用流程描述)
- CLAUDE.md:MANAGED 块瘦身为 @AGENTS.md 薄引用(保留 version marker,
  版本检测不受影响),内容永不分叉
- 抽 upsert_managed_block 公共 helper(created/updated/appended 三态),
  附 tempdir 单元测试;SyncResult 新增 agents_md_action

背景:批量同步后发现所有项目只落 CLAUDE.md,跨工具内容被锁进单一工具
私有文件,违反宪章「跨工具单一来源 = AGENTS.md」。
下次批量同步时全部项目自动迁移到新结构(marker 机制天然幂等)。

Rules-Applied: R01, R07
2026-07-02 19:49:22 +09:00
lanrtop
2074225f79 chore(blueprint): cicd-workflow 注记刷新——Gitea Actions 改造已完成 2026-07-02 19:07:11 +09:00
lanrtop
08986130af chore(onboarding): git-workflow 模板补 Rules-Applied trailer 约定——规则数据源扩展到全部接入项目
- 接入包 git-workflow.md.tmpl 新增 trailer 章节:此前只有炼境自身 commit 携带
  规则命中记录,外部项目无此约定,规则有效性数据源仅覆盖 1 个项目;
  随接入包分发后所有项目的 AI 会话都会回传规则命中
- cicd-workflow 模块注记刷新:Gitea Actions 改造完成(R0 实测)

Rules-Applied: R01
2026-07-02 19:06:21 +09:00
lanrtop
033f556268 chore(blueprint): R0 发版链路完成——v0.1.16 经 Gitea Actions 构建上线 OSS 2026-07-02 18:45:56 +09:00
lanrtop
64a114c221 refactor(ui): 「API 密钥」更名「密钥凭据」——名实一致,承载全部凭据类型 2026-07-02 18:41:17 +09:00
lanrtop
75c3cdd8a9 chore(updater): 更换自动更新签名密钥对
All checks were successful
Release / release (push) Successful in 4m43s
旧钥密码丢失(无任何留痕可寻回),按单人场景换钥方案处理:
新钥密码已双写存储(Gitea Secrets + 炼境密钥库)。
本版本(0.1.16)需手动安装一次以内置新公钥,之后自动更新恢复。
2026-07-02 18:39:28 +09:00
lanrtop
8b7038fd1b chore: 升级版本号至 0.1.16
Some checks failed
Release / release (push) Failing after 3m53s
2026-07-02 17:27:08 +09:00
lanrtop
865cd1b17c chore(cicd): 发版链路迁移至 Gitea Actions——本机 act_runner host 模式
- 新增 .gitea/workflows/release.yml:host 模式精简版(本机工具链直用,
  省去 setup-node/pnpm/rust action 减少故障面),构建+签名+OSS 上传逻辑不变
- 删除 .github/workflows/release.yml 死配置(GitHub 已退役,tag 不再推送触发)
- OSS bucket/endpoint/updater 配置全部不变,存量客户端更新链路无感

Rules-Applied: R01
2026-07-02 17:17:33 +09:00
lanrtop
29ff519627 chore(blueprint): gitea 全链路实测验收通过,销掉 G2-G5 复盘头号遗留 2026-07-02 16:58:21 +09:00
lanrtop
6424c3d033 chore(blueprint): R0 发版链路迁移卡——本机 act_runner 修复自动更新断供 2026-07-02 16:40:57 +09:00
lanrtop
8a64b29445 feat(gitea): G6 远端轮询采集——公网 Gitea + 内网炼境拓扑的观测面方案
- poll_all_repos:后台线程每 10 分钟出站拉取所有绑定仓库最新 commit
  (GET /repos/:owner/:repo/commits),record_commit 幂等写入,与本地
  watcher / 全量导入三路径共存不重复计数
- gitea_poll_now 命令 + GiteaPanel「立即拉取」按钮与拓扑说明
- 决策记录:webhook 仅作同网补充,否决 frp 全端口映射(MCP 路由无鉴权,
  27190 保持零公网暴露);飞轮为统计系统,10 分钟延迟无影响

验证:cargo test 67 passed(新增轮询解析 2 测试)、typecheck 全绿

Rules-Applied: R01, R07
2026-07-02 16:36:18 +09:00
lanrtop
de961d0e95 feat(flywheel): Gitea Actions 模板 + Rules-Applied trailer 自吸——规则有效性闭环接通
Gitea Actions workflow 生成(gitea-integration 收官卡):
- generate_workflow 输出 .gitea/workflows/;tauri_oss 模板去掉 GitHub Release
  步骤(发布走 OSS),构建改 pnpm tauri build + 签名环境变量,runs-on 改
  自建 windows runner 标签;CicdModal Secrets 文案改 Gitea 路径
- 单元测试断言模板无 github.com / GITHUB_TOKEN / gh-release 残留

R1 Rules-Applied trailer 被动自吸(flywheel-intelligence):
- smart-commit 技能:commit message 末尾附 Rules-Applied: R01,R06 trailer
  (仅真实触发的规则,防数据污染)
- commit_metrics 新增 rules_applied 列(增量 migration)+ parse_rules_applied
  解析(token 校验/去重/规范化)+ rule_hit_stats 跨项目"命中×返工"聚合
- 梦核 prompt 新增「规则命中×返工交叉」数据段 + 【规则置信度】分析任务
  (升/降 confidence、按 R11 细化边界)——R01-R10 置信度首次有真实数据来源

验证:cargo test 65 passed(新增 7 测试,其中一个抓到 trailer 解析的
? 提前返回 bug)、typecheck 全绿

Rules-Applied: R01, R05, R06, R07
2026-07-02 15:10:26 +09:00
lanrtop
bf697b5e28 feat(ui): 功能区重构阶段二——洞察页 + 全局/项目层级归位(N3/N4/N5)
N3 洞察页三 tab(飞轮/健康中心/全局治理):
   - FlywheelPanel(版本队列/阻塞/停转归档/Git质量/梦核)整体迁出 BlueprintModal
     ——跨项目内容不再寄生单项目弹窗,BlueprintModal 减重 414 行
   - CONVENTIONS 规则来源 + 应用梦核建议迁至全局治理 tab(影响所有项目的操作归全局层)
   - BlueprintModal 侧板只留单项目内容(模块详情/余票/可派发/项目治理)
N4 Gitea 层级归位:实例管理(全局配置)拆为 GiteaInstancesSection 挂设置页;
   项目绑定+webhook 留治理面板,无实例时提示去设置页添加;共用 queryKey 缓存
N5 仓库注册表并入 项目→管理→仓库 tab(RegistryTab 复用),Sidebar 底部入口
   与弹窗死壳移除;总览页更名对齐"跨项目行动项"定位

至此 ui-restructure N1-N5 全部完成:三条公理(名实一致/层级对齐/频率分层)落地。
零后端变更,typecheck 全绿。
2026-07-02 14:51:43 +09:00
lanrtop
bc07dd41bf feat(ui): 功能区重构阶段一——六组导航 + 资源/工具一级页 + 卡片操作分层
信息架构按三公理重排(名实一致/层级对齐/频率分层,设计见 ui-restructure 模块):
- Sidebar 六组:总览/项目/资源/洞察/工具/设置
- 新增资源页(服务器/软件仓库/云产品/API密钥/源码库 5 tab),从"项目管理"
  拆出寄生的资源类 tabs;新增工具页(开发环境/WSL代理 合并)
- Dashboard 看板只留产品组/独立项目;洞察页阶段一暂挂健康中心(N3 扩充)
- ProjectCard 底部 10 个平铺操作收敛为:🗺️蓝图/🎓导师/编辑/动态 + ⋯更多下拉
  (带文字标签收纳 Claude配置/备忘/服务器/CICD/环境扫描/工具管理)

零后端变更:纯组件挂载点迁移,面板组件与 queryKey 原样复用。
阶段二(N3 洞察页扩充 / N4 Gitea 实例迁设置 / N5 仓库注册表归位)已拆卡待启动。
2026-07-02 14:33:55 +09:00
lanrtop
d14b348845 feat(gitea): G2-G5 全链路——建仓/迁移/绑定 + webhook 收发 + 治理面板
G2 控制面:gitea_create_repo / gitea_migrate_repo / gitea_link_repo,
   upsert 绑定(换绑自动重置 webhook 字段),API 错误提取 Gitea message 可读返回
G3 观测面:MCP Server 新增 POST /webhook/gitea/:project_id——HMAC-SHA256 验签
   (X-Gitea-Signature,兼容 X-Hub-Signature-256)→ 解析 commits → 批量
   record_commit(sha 幂等,与本地 watcher 双路径不重复计数);验签失败记 log_event
G4 webhook 注册:gitea_setup_webhook 生成随机 secret 注册 push hook(重设先删旧)、
   gitea_unlink_repo 解绑顺带清理 Gitea 侧 hook
G5 治理面板:GiteaPanel——实例管理(添加/测试/删除)、当前项目三种绑定方式、
   webhook 注册与可复制回调地址、全部绑定概览

依赖:新增 hmac + sha2;project_id 与 commit_metrics 同源(Project.id),
避免双路径冲突复发;R10 修正设计文档错误签名头

验证:cargo test 58 passed(新增 upsert 换绑重置 + hmac 正反向 + payload 解析 5 测试)、
typecheck 全绿
2026-07-02 14:22:49 +09:00
lanrtop
29a066e7e3 chore(conventions): v1.9.0 自洽体检——规则边界结构 + R11 + 状态词汇统一
- CONVENTIONS 1.9.0:规则新增 boundaries/failure_cases 可选字段(失败定边界,
  经验细化为变体而非推翻);新增 R11 自动执行规则失效时必须记录失败案例;
  模块状态表补 abandoned 定义(何时更新蓝图章节早已引用但表中缺失)
- 状态词汇统一:github-auth/github-publish 的 deprecated(未定义状态)→ abandoned,
  BlueprintModal 状态色表补 abandoned 渲染
- 文档防腐:CLAUDE.md 技术栈改为 Gitea(GitHub 已退役);cicd-workflow 模块
  加改造中指针(单一事实来源指向 gitea-integration 的 Gitea Actions 卡)
- 蓝图:R2 卡完成解锁(分发随下次发版生效)
2026-07-02 14:09:09 +09:00
lanrtop
f4dd0e4ea0 chore(blueprint): 蓝图↔Gitea 分工裁决 + R1/R2 飞轮卡 + Gitea Actions 卡升格可派发 2026-07-02 13:35:07 +09:00
lanrtop
289b558278 refactor(github): GitHub 全面退役——免登录 + 发布/导入/同步链路移除 + 凭据去 GitHub 化
D1 免登录改造:App 启动直接进主界面,删 LoginPage/github.rs/OAuth 全套命令、
   Sidebar 账户区与 GitHub OAuth 设置弹窗、健康检查 GitHub Token 项
D2 移除发布/导入/PR/CI 入口:删 PublishModal/ImportRepoModal、ProjectCard 的
   PR compare 链接与 Actions 状态灯、RepoRegistryModal 同步 tab、CicdModal runs tab、
   publish.rs 的 github_create_repo/git_push_to_github
D3 spacesSync 单机化:删 spacesSync/useSpacesSync/SpacesPage/DiscoveryPanel,
   拆除 App→Dashboard→ProjectCard 的 spacesJson 链
D4 git_ops 凭据链重写:ssh agent → git credential helper → gitea_instances token
   前缀匹配 → default,不再依赖 github_token

保留:server_software GitHub 镜像(Releases 下载加速)、gitea_migrate 迁移入口、
cicd.rs(待 Gitea Actions 改造卡);DB 表不删(R05 migration 兼容)

顺带:修复 servers.rs 两个存量测试的 schema 漂移(测试建表缺 deploy_type 列);
      包含会话前未提交的 agent-infra F3(get_agent_health 健康诊断,与 lib.rs/
      commands.ts 物理耦合无法拆分提交)

验证:cargo test 53 passed / typecheck 全绿 / vitest passWithNoTests
2026-07-02 13:15:56 +09:00
lanrtop
dcbf1f9355 feat(gitea): G1 DB schema + 实例 CRUD + 连接测试
新增 gitea_instances / gitea_repos 两张表(db.rs migrate);
实现 save/list/delete/update/test_connection 命令(ureq 调 GET /api/v1/user 验证 token);
gitea_list_linked_repos / gitea_get_repo_link 查询绑定状态;
前端 commands.ts 完整类型封装;4 个单元测试全绿。
2026-06-30 17:44:39 +09:00
lanrtop
6fdac2ec2f chore(blueprint): gitea-integration 架构设计 + 5 张可执行任务卡 2026-06-30 17:32:48 +09:00
lanrtop
b13dc83b90 fix(flywheel): 补全项目名解析——project_profiles prof- 关联 + 路径末段提取
之前 get_all_commit_health 只有两条名称解析路径,导致:
1. 孤儿 UUID(blueprint_buffs 记录已删但 commit_metrics 数据保留)显示为 UUID 字符串
2. blueprint_buffs 有路径但 projects 表无对应项目时显示完整路径

本次新增第三条路径:LEFT JOIN project_profiles ON id = 'prof-' + UUID,
可解析 makemd-2026、enterprise-system、beast-mode、my-docs、yljt-index 等 10 个孤儿 UUID;
Rust 端对最终名称进行路径末段提取,将剩余路径字符串(react-phone-apps、ReadBorne 等)清理为目录名。
2026-06-29 21:30:43 +09:00
lanrtop
d41e0f1707 fix(flywheel): 修复 commit_metrics project_id 双路径冲突,表格能显示所有项目
blueprint_buffs 用 UUID 写 commit_metrics,全量导入用名称字符串写,
同一 sha 在 sha PRIMARY KEY 约束下只能存一条,导致全量导入被 INSERT OR IGNORE 全部跳过,
表格无法查到 UUID 格式的历史数据。

修复点:
- ingest_full_git_history 自动查 blueprint_buffs,若该路径已有 UUID project_id 则优先用 UUID
- 新增 get_all_commit_health 命令,SQL 关联 blueprint_buffs / projects 解析名称,不需要前端传 project_ids
- FlywheelPanel 切换到 getAllCommitHealth,表格直接用后端返回的 project_name,无需前端 lookup
2026-06-29 21:21:23 +09:00
lanrtop
78d4ad1f4b chore(blueprint): flywheel-intelligence 进度更新至 95%(F1+F2 完成) 2026-06-29 21:03:29 +09:00
lanrtop
532e28c421 feat(flywheel-L0): F2 飞轮面板 Git 健康度区块 + 全量导入按钮
- FlywheelPanel 新增「Git 执行质量」卡片:表格展示 commits/规范化率/返工率/TOP scope
- 「全量导入」按钮对所有接入项目触发 ingest_full_git_history,完成后刷新健康度数据
- 颜色编码:规范化率 ≥80% 绿/≥50% 黄/其余红,返工率 >20% 红/>10% 黄
2026-06-29 20:58:05 +09:00
lanrtop
9c2064e3d0 feat(flywheel-L0): F1 全量历史导入 + 跨项目 Git 健康度聚合
- ingest_full_git_history: 最多 500 条历史,INSERT OR IGNORE 幂等,事务批量写入
- get_project_commit_health: 直接聚合 commit_metrics,返回规范化率/返工率/top_scopes
- 前端 commands.ts 补 IngestResult/ProjectCommitHealth/ScopeActivity 封装
- 新增 4 个单元测试(空项目排除、聚合正确性、scope 排序、写入幂等)
2026-06-29 20:55:11 +09:00
lanrtop
cc5d4a219b feat(agent-infra): monorepo 扫描支持——子包依赖采集 + apps/* 路径检测 2026-06-29 20:33:56 +09:00
lanrtop
a0f0cee790 feat(agent-infra): 生成 doc-freshness 路径注入规则(炼境自身) 2026-06-29 20:26:36 +09:00
lanrtop
dfb4f74c5c fix(agent-infra): Tauri 项目 Cargo.toml 路径回退 + Axum 路由精准检测
- detect_contracts() 先查根目录 Cargo.toml,失败回退 src-tauri/Cargo.toml
- tauri_commands_path / tauri_frontend_ts 按实际路径动态选择
- Axum 路由检测优先查 src-tauri/src/mcp_server.rs(炼境 MCP 内嵌服务器场景)
- 删除临时自验证测试 self_scan_lianjing_project(已完成使命)
2026-06-29 18:48:56 +09:00
lanrtop
1651b21743 feat(agent-infra): 卡D+E——栈确认UI + 看板腐化指示器
卡D:AgentInfraPanel——扫描→确认契约→生成三件套,嵌入 GovernancePanel
卡E:ProjectCard 加腐化评分小圆点(读缓存,不触发扫描)
agent-infrastructure 模块全部 5 张卡完成,status→done
2026-06-29 18:31:38 +09:00
lanrtop
0c5730381d feat(agent-infra): 卡C——文档腐化评分 + doc_freshness_cache 表
scan_doc_freshness():git log 读取契约路径 vs project-context.yaml
时间戳差值,project-context.yaml 不存在直接 RED;结果写入 DB 缓存。
get_doc_freshness_cache():看板读缓存不触发扫描。
10 条单元测试全过。
2026-06-29 18:26:47 +09:00
lanrtop
5e824027e5 feat(agent-infra): 卡B——三件套文件生成
generate_agent_infra_files():
- 生成 docs/ai-context/project-context.yaml(含确认后的契约路径)
- 注入 AGENTS.md 元规则段落(已有则跳过,幂等)
- 生成 .claude/rules/doc-freshness.md(含项目特定 globs)
7 条单元测试全过(含生成+幂等验证)
2026-06-29 18:11:30 +09:00
lanrtop
2246df8e2a feat(agent-infra): 卡A——框架层扫描 + 契约路径推断
新增 agent_infra.rs:从 package.json(serde_json)和 Cargo.toml
识别 Drizzle/Prisma/Hono/Axum/tRPC/pnpm-monorepo 等框架,
返回带 confidence 的 DetectedContract 列表;6 条单元测试全过。
前端封装:scanAgentInfraStack(projectPath)
2026-06-29 18:07:40 +09:00