Repository navigation
0.1.9
0.1.9
0.1.8 把索引交给 agent,并让它记得自己描述的是哪个提交。0.1.9 做的是另一件事:让索引和引擎说清楚自己知道什么、不知道什么——流程数旁边写清预算,版本不一致时写清是跨线还是出界;顺带把 Git 活动面板修到能用(文件时间线点哪开哪、顶栏真切分支)。
新增
流程预算(图质量说真话)
索引清单里的 processDetection(maxProcesses / maxProcessBranching / maxProcessTraceDepth / maxEntryPointCandidates)现在被读出来,和 stats.processes 一起解释:
- 被预算截断:流程数达到
maxProcesses,或分析器记录了分支/深度/入口候选上限 —— 卡片写「可能漏报,不代表流程只有这些」。 - 全程未见:0 条流程但入口点候选 > 0 —— 写「本次没有流程进入排名;不代表仓库里没有流程」,不再把 0 读成「没有流程」。
- 确实没有 / 没有预算:两者分开。旧版分析器的清单没有
processDetection,写「该索引未记录流程检测预算;N 条流程的完整性无法判断」,不是「没有上限」。 - 文本输出(
bin/gitnexus-coverage.js)在图例行后追加process budgets: …,只在该结论不是「完整」时出现。
实测本仓库:{"maxProcesses":null,"maxProcessBranching":4,"maxProcessTraceDepth":10,"maxEntryPointCandidates":200},315 条流程 → budget-limited,文案「流程 315 条——在分支 ≤4、深度 ≤10、入口候选 ≤200 的预算内得到;可能漏报,不代表流程只有这些。」
版本线(跨线不是错误)
runnerIdentity.cliVersion 与当前 CLI 的比较不再只给「一致 / 不一致」:
- 新增
src/gitnexus/version-lines.ts:解析版本、比较(含 prerelease 数字段,rc.159 > rc.9)、判定stable/candidate/other/unknown,并把一对版本归为same/cross-line/index-out-of-range/cli-out-of-range/out-of-range/unknown。 readCompatibility的status保持字符串相等(match/mismatch/unknown),新增supportedRange、relation、indexedLine、installedLine;message三分支:一致、跨线(「两者都在受支持范围内(^1.6.12 || >=1.6.13-rc.0 <2.0.0),属跨线,不是版本错误」)、出界(「查询/刷新行为可能不一致」)。- 面板在「索引/CLI」指标下渲染这一行:跨线与一致是弱提示,只有一方出界才标琥珀色。
- 「语义搜索」不可用时不再只显示「不可用」:写明「未建向量索引时语义检索退化为精确扫描(上限 10.0k 块)」——上限来自 provider 的
exactScanLimit,没有报上限就不臆造。 - 不引 semver:
^1.6.12的上界是 2.0.0,1.6.14-rc.1按 npm 规则不在范围内——这套判定不依赖 semver 库就能说清楚。
顶栏切换分支(真 git checkout)
- 顶部栏项目选择器旁新增分支下拉(多于一个分支才出现),当前项标注「(当前)」。
- 选中即
POST /api/gitnexus/checkout?repo=…,服务端跑git checkout <branch> --(唯一会写工作树的路由,走写守卫),成功后重读报告。 - 不做任何自动处置:不 stash、不 rebase、不切换前检查脏工作区;git 拒绝(冲突、未提交改动)就把 git 的原话显示在顶栏,按钮恢复可用。
dubious ownership(Windows 上常见的“仓库属主不同”)只对这一条路径做一次-c safe.directory=<repo>重试,不写全局配置。- 卡片里的只读分支视图和「回到当前分支」一并删除——切换就是切换。
文件时间线点哪开哪
- 点文件行的「时间线」,提交时间线展开在被点的那一行下面,滚动仅滚到最近边缘,不把卡片顶上去。
- 同一文件同时出现在「自基线以来」「最近改动」「索引缺失」多个列表时,先点的那个列表负责承载;再点一次收起,换列表点则移动。
- 表头选择器选中的文件,时间线渲染在卡片顶部(没有行可挂)。
顶栏置顶且不透明
- 项目头部(项目名、分支下拉、刷新)改为 sticky 顶栏,背景取宿主
--dsw-alias-bg-base,卡片滚过去不会从背后透出来;根容器的顶部内边距挪进顶栏,消除 12px 缝隙。
活动卡片降密度
- 四个文件列表(基线以来 / 改动最频繁 / 最近改动 / 应被索引缺失)合并成一个分段控件,同一时刻只渲染一个列表,计数放在控件标签里;交叉表与提交者收进「更多统计」折叠区。卡片高度约减半,不再三次重复同一路径。
提交改动块
- 展开提交后的 patch 从纯彩色
<pre>改为带边框的代码块:头部显示改动 · 语言与+A −R计数、可复制整段补丁;正文按 unified diff 解析出新旧两列行号、hunk 分隔条,增删行以背景着色 + 左侧色条标记;超过 60 行时折叠为「显示其余 N 行」,不再嵌套滚动。
点击项统一成按钮
- 新增共享样式
INLINE_BUTTON(src/client/primitives.ts):细边框、淡填充、圆角、指针光标,供「行尾动作」使用。 - 活动文件行、提交行都改为带边框的按钮行(不可点击的行保持纯文本);行尾
时间线 / 收起 / 改动是带边框的小按钮。 - 提交时间线折叠、
更多统计、技术详情、查看原始输出、服务输出等由纯文本role="button"改为真按钮样式;diff 的复制与显示其余 N 行同样。 - 顶部工作区选择器从无边框
select改为带边框填充的选择器(保留原生箭头),搜索命中行的「打开」区域也套上按钮外壳。
修复
- 时间线「打开跑上面去了」:曾把时间线钉在卡片顶部,离所点行很远。现在按行内展开,并记住来源列表。
- 点上面列表、下面列表展开:块的位置原按路径推导,同一路径在多个列表出现时会挂到错误的列表。现在记录来源(路径 + 列表),只在被点的列表渲染。
- 只在上方列表出现的文件点了没反应:基线列表原先不渲染块,现在也渲染。
- 文件列表突然全空:修复「活动窗口天数」曾经改从
/api/gitnexus/activity当前分支重读、因缺索引分类而把所有行判为excluded的回归。现在天数随 coverage 请求下发(一次扫描既分类又限窗),缓存键带上天数。 - hook 顺序违规:
GitActivitySection的useEffect原先写在if (view === null) return之后,空报告时 hook 数量会变;现在所有 hook 提前。 - 触发
已停止切换:分支操作曾走宿主命令通道,被判定为「Scoped 命令不可用」后 provider 停止。现在走 HTTP 路由。
内部整理
- 新增
src/gitnexus/version-lines.ts、src/routes/checkout.ts、test/suites/checkout-route.mjs、test/suites/version-lines.mjs;src/routes/activity.ts(只读分支视图)删除。 readIndexMeta增processDetection;analyzeCoverage的graph增processDetection/processCoverage;readCompatibility增四个字段。- 客户端新增
processCoverageLine/compatibilityLine(src/client/format.ts,随src/client/index.ts导出),ClientGraph/ClientCompatibility补齐可选字段。 - 测试从 1045 项到 1167 项(807 引擎 / 81 插件 / 279 客户端),新增
version-lines与checkout-route两个套件。引擎侧有 3 项 smoke 检查依赖本机索引记录过提交,未记录时为 804。 - 版本号
package.json、package-lock.json→ 0.1.9;README 的功能清单、测试计数同步更新。
验证
npm run build→lib/client.js320 018 字节。npm test:807 / 81 / 279 = 1167 passed, 0 failed。- 真仓库:
readIndexMeta('.')读出四个预算字段;analyzeCoverage→processes 315 / budget-limited;readCompatibility→match / same。 - 两版 manifest 夹具(含
processDetection的 rc 清单、不含的旧清单)断言processCoverage与compatibility.relation不同——即「两份清单文案不同」的验收。
已知限制
detect-changes仍不能在受限环境跑(git diff走管道 →EPERM);发布前需在非受限终端补一次。- 切换分支只执行
git checkout:有未提交改动、冲突或 detached HEAD 时由 git 决定成败,插件不代为处理。 - 切换后索引仍描述旧分支,直到刷新;面板不会自动刷新索引(刷新是分钟级操作,不该藏在切换里)。
- 流程预算只在清单记录了
processDetection时可判定;旧索引一律unknown。 - 版本线识别只认「1.6.12 稳定线」与「1.6.13-rc 候选线」;其它版本落
other,按出界告警。