13 Commits
Author SHA1 Message Date
TermiNexus 9e0d12553d feat(viper): 以选中编译器 exe 目录为基准自动发现 includes 目录
Validation / Typecheck (push) Has been cancelled
Validation / Style (push) Has been cancelled
Validation / Test macos-latest (push) Has been cancelled
Validation / Test ubuntu-latest (push) Has been cancelled
Validation / Test windows-latest (push) Has been cancelled
Validation / Build (push) Has been cancelled
Validation / Required (push) Has been cancelled
- 工程未在 .vpj/project.json 声明 includes 时的兜底:从选中编译器 exe 所在目录向上最多 4 层,只查直接子目录 includes/include(不递归),仅收真实存在的绝对路径目录

- 落点 packages/viper/src/api.ts 的 GetCompilerIncludePaths(并加入 ViperApi 接口);由 vscode-vipeye 的 workspace.configuration 中间件追加进 extraPaths(兼容 section 为 viper / viper.analysis 两种回执形状)

- 切换编译器后补发 workspace/didChangeConfiguration,使新搜索根无需重载窗口即生效
2026-10-02 20:31:42 +08:00
TermiNexus 065ab18231 fix(viper): --version 判定跳过 [ 开头的诊断行(ASan traceback 横幅)
用户实测:带 ASan 运行时的编译器 <exe> --version 会先在 stderr 打三行
[traceback] …(stack dump / DbgHelp note / ready 提示),之后才是
"Viper 1.0.5-dev.970 2026-09-28 Non-LTS"。

Node 侧 stdout/stderr 是两条流、到达顺序不定,按"整个缓冲前 5 字符"判定会
误报 PREFIX_ERR。改为 FirstMeaningfulLine:跳过空行与以 [ 开头的行继续往下读,
取第一行有效内容判前缀(同时对行首空白宽容)。VET 把两条流接进同一管道,
不存在该问题,故口径仍是"第一行内容以 Viper 开头"。

已用等价 Node 脚本对真实 exe 实测(脚本已删):
* TransPyV\output\TransPyV.exe:PE 头 5a4d/lfanew=120/4550/magic 20b/
  machine 8664→x86_64,命中 .PRVERSN(rawPtr=4574208/rawSize=512)→
  版本串 0.0.5-dev.479;--version 捕获跳过 3 行 [traceback] 后判定通过。
* notepad.exe → NO_PRVERSN、.js 文本 → NOT_EXE、不存在路径 → NOT_FOUND。

顺带把 ViperCheckResult 改为 import type(类型专用导入,运行时不再 require
./types,便于独立转译/校验)。
2026-10-02 19:48:21 +08:00
TermiNexus 4c30604ecd feat(viper): VET 未启用时仍可校验/选择编译器(TS 模拟 check)
手动「选择编译器…」原先只能走 VET 的 check 通道(stdin 写
{"check": path, "id": N} → stdout 单行回执),该通道依附常驻进程与心跳看门狗:
VET 被禁用 / 手动停止 / 启动失败 / confirmSeconds=0 时选编译器直接失败。

现在 EnvironmentTool.CheckExecutable 先看 CanUseCheckChannel()(要求
state === 'running' && confirmSeconds > 0 && 进程在 && stdin 可写;启动中/重启中
也走本地路径,否则要等它扫完一轮才可能进确认窗口、白等超时),不满足即回退
本地模拟:

* 新增 packages/viper/src/executableProbe.ts(LocalCheckExecutable):
  ① 读 PE:DOS MZ → e_lfanew → PE\0\0 → 可选头 Magic → 节表 → .PRVERSN 段,
     取版本串;COFF Machine → arch。小端字段一律用逐字节「或 + 移位」位操作解码
     (与 VET VPe.ReadU16/ReadU32 同口径)。
  ② 跑 <exe> --version:合并捕获 stdout+stderr、5 秒超时(= VET 的
     VERSION_PROBE_TIMEOUT_MS)、输出前 5 字符须为 Viper。
* 失败原因串与 VET 的 check_msg 逐字一致(NOT_FOUND / NO_PERMISSION / NOT_EXE /
  NO_PRVERSN / PRVERSN_ERR / PREFIX_ERR / TIMEOUT / EXE_ERR,0x<HEX>),故文案与
  选择/回报流程完全复用;本地路径只读,不写缓存、不入库。
* VET 处于 running 时行为不变(仍由 VET 校验并写回它的缓存)。

配套文案:进度标题与提示去掉「VET」前缀(正在检查… / 检查未通过:…);
状态栏 tooltip 增加「VET 未运行,选择时由扩展本地检查该 exe」说明。
2026-10-02 18:57:40 +08:00
TermiNexus b98102b78f feat(viper): 新增「统计项目 LOC」命令与报表 Webview
- 右键 .vpj → Count Project LOC(viper.countLines):递归扫描项目的 source_dir,
  统计文件数 / 总行 / 代码行 / 注释行 / 空行 / 注释率 / 平均行长 / 字符数
- 先打开 Viper LOC Webview 面板再扫描:确定性进度条(先收集文件,再按 N/M 处理
  并显示当前文件),完成后渲染 KPI 卡片、按语言的堆叠条形图(代码/注释/空行,
  以最大语言为基准缩放)、语言筛选(勾选后重算 KPI/图表/表格)与明细表(含合计行)
- 同一份报表以纯文本写入 Viper LOC 输出通道,便于复制
- 计入本扩展注册的语言扩展名 .vp / .vpi / .vpnci / .vpj,并按需求支持 .def
  (; 与 // 行注释、/* */ 块注释,跨行块注释按注释计)
- 跳过项目 build_dir、隐藏目录、node_modules、.git、__pycache__,不跟随符号链接
2026-09-27 12:49:25 +08:00
TermiNexus 70a4405294 chore(viper): 选择列表首项去掉手动指定 exe 路径描述并修正过时注释
该入口已改为文件选择对话框,原描述与输入框取路径等注释不再贴切。
2026-09-20 18:56:16 +08:00
TermiNexus 95a0dbf0ad feat(viper): 选择列表加「选择编译器…」,关闭 VET 后清单与选中仍可用
- 选择列表首项为「选择编译器…」(文件选择对话框 → VET check → 并入清单并切换),其后一条分隔线才是 VET 搜到的环境
- 状态栏在 VET 关闭时显示 VET 已关闭,且点击仍打开选择列表(重启改走命令面板)
- EnvironmentManager 新增 AddEnvironment:check 通过的环境无需等下一轮快照即可选中
- 抽出 PickAndCheckExecutable,去掉 check 命令与该入口的重复实现
2026-09-20 18:54:09 +08:00
TermiNexus ad3fd9810c feat(viper): VET 启动参数加 --first-no-pace,首次扫描不节流
VET 常驻模式默认对扫盘节流(每 16 个目录项 / 64 个文件 Sleep 20ms),首次全盘搜索明显变慢,正是 Viper 搜索很慢的来源。带上该开关后首轮全速、后续轮次仍按 VET 自身节流跑。
2026-09-20 18:54:03 +08:00
TermiNexus 26216889de feat(viper): 新增手动指定 exe 的 VET check 检查
- 新增 viper.checkEnvironment(命令面板 + Environments 视图标题按钮):选择 exe 后经 check 通道校验 PE/.PRVERSN 与 --version 前缀
- 回执按回带的 id 配对;check_msg 九种原因(NOT_FOUND/NO_PRVERSN/TIMEOUT/CHANNEL_UNAVAILABLE 等)映射为可读说明
- stdin 写入改为入队后仅在心跳窗口内逐行送出(check 在前、心跳最后、行间 300ms、按窗口时长限量),规避看门狗对同批多行的读取行为
- 进程退出/停止时唤醒等待中的请求,避免调用方悬挂
2026-09-20 18:19:52 +08:00
TermiNexus 5d6fcf7c82 feat(viper): 接入 VET 环境发现,支持停止/查看输出与粘性选择
- 新增 EnvironmentTool / EnvironmentManager:常驻 scan 进程客户端(启动、心跳确认、快照解析、异常退出的指数退避重启)与全量快照 diff
- 侧边栏新增 Environments 视图(按 source 分组、选中项打勾);状态栏只保留 VET 环境项,移除硬编码 C:\v.exe
- 默认复用上次使用的环境 uuid,VET 未给出该 uuid 时取发现的第一个,一个都没发现时回退配置/兜底路径
- VET 的 stdout 与 stderr 全量转发到 Vipeye VET 输出通道,彻底移除日志文件落盘
- 新增 Stop VET / Restart VET / Show VET Output / Select Environment 命令,并补回被回写覆盖丢失的 contributes
2026-09-20 18:19:18 +08:00
TermiNexus 417bc8a2be "fix(viper): vpjEditor 与命令注册加容错,避免调试双加载时重复注册导致扩展激活失败
Validation / Typecheck (push) Has been cancelled
Validation / Style (push) Has been cancelled
Validation / Test macos-latest (push) Has been cancelled
Validation / Test ubuntu-latest (push) Has been cancelled
Validation / Test windows-latest (push) Has been cancelled
Validation / Build (push) Has been cancelled
Validation / Required (push) Has been cancelled
fix(lsp): 源文件位于执行根之外时仍从同目录解析绝对导入,修复 import lib 无法解析及白色高亮"
2026-08-08 02:16:39 +08:00
TermiNexus 44d83f4235 "chore: migrate Pyright branding to Vipeye/vipeye across docs and tooling
Validation / Typecheck (push) Has been cancelled
Validation / Style (push) Has been cancelled
Validation / Test macos-latest (push) Has been cancelled
Validation / Test ubuntu-latest (push) Has been cancelled
Validation / Test windows-latest (push) Has been cancelled
Validation / Build (push) Has been cancelled
Validation / Required (push) Has been cancelled
Run mypy_primer on push / Run mypy_primer on push (push) Has been cancelled
- Rewrite root README and docs for Vipeye
- Rename pyright-test-policy to vipeye-test-policy
- Update CI/Azure pipelines, perfCompare.py and package metadata
- Keep upstream links, external tool params and # pyright: ignore compat"
2026-08-07 03:33:29 +08:00
TermiNexus 36c3357d9f 将本项目升级到基本可用的状态,正在细化各个方面,初次打包了实验版本 2026-07-30 22:33:23 +08:00
TermiNexus e126548249 Modified Pyright so its highlighting is closer to Viper
Run mypy_primer on push / Run mypy_primer on push (push) Has been cancelled
Validation / Typecheck (push) Has been cancelled
Validation / Style (push) Has been cancelled
Validation / Test macos-latest (push) Has been cancelled
Validation / Test ubuntu-latest (push) Has been cancelled
Validation / Test windows-latest (push) Has been cancelled
Validation / Build (push) Has been cancelled
Validation / Required (push) Has been cancelled
2026-07-28 02:56:01 +08:00