Releases: chainreactors/cyber-harness
Release list
v1.0.0-rc4
rc4 首先收敛了编译方式和能力组合:Makefile 与 editions.env 成为构建入口和 edition 规则的事实来源,官方 standard 与 full 发行版均不依赖 libcstx 或 native RE2,并可在启用或关闭 CGO 时编译;运行时则统一为一套显式的 Extension 生命周期和静态 Profile。基于这两个边界,Go 只归档 scanner-native Artifact,Web 通过 CSTX TypeScript/WASM 构建资产关系,不再让后端承担重复的数据模型与处理链路。
New Features
编译链路与发行版简化
standard 与 full 现在共享一条纯 Go 编译链路。full 虽然包含 Web、浏览器和深度扫描能力,但其默认 RE2 后端仍是纯 Go,且两个 edition 都不再链接 Go 侧 libcstx;CGO_ENABLED=0 和 CGO_ENABLED=1 下均可构建和运行。只有显式选择 record edition 时才需要 CGO 和 recorder SDK。
aiscan包含 Agent、核心扫描器、代理、Skills 和 IOA,适合服务器、脚本和无浏览器环境aiscan-full在 standard 基础上增加 Web、Chromium 复用、Katana 和被动测绘能力- standard/full ZIP 不包含录屏 SDK,也不会在启动时加载 native CSTX Extension
- record SDK 由
chainreactors/nativeRelease 提供,并校验固定版本、SHA-256、manifest 和 ABI header - Linux、macOS、Windows 的 amd64/arm64 由同一份 edition 定义和 GoReleaser 配置生成
go.mod、AOP 子模块和公开包路径统一从aiscan重命名为cyber
Makefile 是本地构建入口,editions.env 是 build tags 与 CGO 策略的唯一事实来源。CI 直接校验 edition 组合和 CGO 开关;GoReleaser 负责跨平台编译,release workflow 负责打包、UPX、checksum 和产物启动验证。
单一 Extension 与静态 Profile 组合
运行时能力统一由一套 Extension 生命周期和显式 Profile 组合,不再依赖包级 init、全局注册表或多套 runner/workspace 包装。自定义发行版可以从 pkg/base.New 取得最小能力集;希望复用官方产品组合的嵌入方可以直接调用 pkg/aiscan.New。
- Web、PTY、进程、prompt、scanner、IOA client 和 application dispatch 分别声明 capability 与依赖
- standard、full、record 的可选能力由构建 edition 显式选择,加载顺序和关闭顺序由同一 Extension Set 管理
- IOA 拆为独立 client/server Extension;Web 通过同源
/ioa/bridge 保留身份,Agent 使用--ioa-url接入 - process registry 统一拥有命令、PTY、tmux 和后台任务,工具资源从
core移到其实际所属的tools领域 - 删除旧 root workspace、重复 harness/runner 组合和 product architecture 包装,不保留兼容别名
浏览器端 CSTX 资产链路
Go 服务不再解析 CSTX、生成 SCO 报告 DTO,或维护一套与原始扫描结果重复的数据表。它只负责接收、归档和同步 scanner-native Artifact,并通过 Artifact RPC 交给 Web。cyber-ui 使用 @cyber/cstx 0.5.0 的 TypeScript/WASM ABI,在浏览器中完成 parse、merge、link 和节点规范化。
- 资产面板直接从归档 Artifact 构建主机、端口、服务、应用、URL 和漏洞关系
- 支持 Artifact 导入、分页、类型筛选、字段搜索、关系图、详情和导出
- 扫描完成后,会话时间线显示扫描摘要卡片,并可在刷新或重启后恢复对应资产
- 删除旧 CSTX 解析结果、SCO 查询服务、报告转发层及相关数据库表
- 当前 Artifact protobuf/ABI 是唯一事实来源,不再携带 v1/v2/v3 兼容 DTO、sink、pending 或 wire 转发层
保留的 native CSTX Extension 只供 SDK 或自定义组合使用,aiscan 和 aiscan-full 的产品 Profile 都不会加载它。
Web Hub 与可脚本化 CLI
aiscan-full web 提供带认证的内嵌工作台,也可以通过 --no-agent 只作为远程执行 Hub。Web、Agent 和直接 scanner 现在使用同一条 ConnectRPC/AOP/Artifact 数据路径;CLI 的帮助、参数归属和机器可读输出也与实际 edition 能力保持一致。
- Web 默认监听
127.0.0.1:8080,启动时打印访问地址、access key 和 Agent 接入命令 - 没有执行节点时,
--no-agentHub 以FAILED_PRECONDITION拒绝扫描且不创建虚假记录;排队后离线的任务会明确失败 - 快速接入命令读取当前 Web space 与短期所需 Agent token,不把 access key 写入 URL、浏览器存储或可缓存响应
- standard 的命令目录只显示实际可用 scanner,并补充此前遗漏的纯 Go
curl - scanner 命令后的
-o归 scanner 自己;全局 AOP JSONL 使用命令前的-o,例如aiscan -o events.jsonl gogo ... -o jl gogo -o jl和scan --json只向 stdout 输出严格 JSONL;gogo -j <file>继续表示历史结果输入curl --write-out支持%{http_code}、%{url_effective}和%{num_redirects}等常用变量
Improvements
Web 与 Agent 体验
- 聊天、会话恢复、Agent 状态、PTY、IOA Console、工具目录、配置和 Artifact 详情统一使用当前 Connect/AOP 路径
- 命令面板和
/help从客户端命令目录生成;扫描卡片、资产表格、连接提示和错误通知提供中英文文本 - 320px 宽度下仍保留资产、IOA、Agent、工具、快速连接、设置和退出入口,侧栏与关闭按钮不再和顶栏重叠
- SPA 路由回退到当前
index.html;入口禁止缓存,指纹化静态资源使用长期缓存 - goal loop 使用自然语言 pacing;compaction、budget、evaluator、命令结果和失败回合在时间线中只出现一次
流量与进程边界
- 流量工具统一使用 canonical protobuf
traffic.Flow/traffic.Exchange - MITM Hub 按实际 operation 订阅流量、限制单体与总体捕获大小,并将响应 body 流式写入有界持久文件
- Flow 淘汰同步删除归属 body,启动时清理遗留
.part;代理切换、取消和尾随 Artifact 不再依赖时间窗口 - 纯 Go
curl支持重定向、表单、cookie jar、代理、--resolve、超时、HTTP 版本、trace 和输出文件,并经过统一 egress/HTTP 观察链
Bug Fixes
- 修复 scan 完成卡片无法可靠关联会话、刷新后丢失,以及 Connect JSON 无法解码未知
AnyExtension 的问题 - 修复无 Agent Hub 静默回退本地扫描、节点离线后任务状态悬空,以及快速连接加入错误 space 的问题
- 修复 direct scanner 的
-o被根 CLI 截获、gogo JSONL 混入进度行和 spray banner 的问题 - 修复本地
--skill <path>无法按规范化路径选中已加载 Skill 的问题 - 修复失败回合和命令结果重复显示、
/compact无消息分支不可见、重连后消息 ID 冲突等时间线问题 - 修复 IOA access key 被错误当作 bearer token、配置探活成功但实际 Agent 无法注册的问题
- 修复移动端顶栏操作被挤出视口、会话侧栏关闭按钮遮挡和命令弹层 Enter 失效的问题
Breaking Changes
- 旧 Go SCO/report RPC、SCO 数据库表和
proto/*/sco.proto已移除;客户端需重新生成 protobuf 并改用 Artifact RPC - 自定义发行版不再注册全局 sink、pending 或 wire 适配器;能力应作为 Extension 显式加入 Profile
- 依赖
pkg/runner、pkg/tui、pkg/types、pkg/web/api/report、旧cmd/runner或旧临时 loot/file-range 编码的嵌入方需要迁移到当前公开入口 - 普通
aiscan不包含 Web;执行web会返回明确的 capability 缺失。需要 Web 时请下载aiscan-full - 本次 pre-v1 重构不保留 v1/v2/v3 schema 或旧 Go 包路径的兼容层,latest schema 即当前事实来源
Release Matrix
| 产物 | Linux | macOS | Windows | 数量 |
|---|---|---|---|---|
aiscan |
amd64、arm64 | amd64、arm64 | amd64、arm64 | 6 |
aiscan-full |
amd64、arm64 | amd64、arm64 | amd64、arm64 | 6 |
aiscan_checksums.txt |
- | - | - | 1 |
发布门禁覆盖 Go 单元测试与竞态测试、架构和依赖检查、go vet、lint、Web 前端构建、Playwright E2E、scanner 功能测试、headless record/replay、Windows CGO/非 CGO 编译、两套 GoReleaser 矩阵,以及 Windows、Linux amd64、Linux arm64 发布包的 checksum 与启动验证。
最终 Release 包含 12 个 ZIP 和 1 个 checksum 文件。发布后重新下载并验证了 Windows amd64 的 aiscan 与 aiscan-full:普通版 CLI、严格 JSONL、curl 重定向变量和真实本地扫描均通过;full 版的 /health、登录认证、HttpOnly 会话、ConnectRPC、快速接入和浏览器存储边界均通过真实浏览器测试。
v1.0.0-rc3
v1.0.0-rc3 — 流量、curl 和 Web 工作台更新
具体修改
- 流量模型新增
Exchange,一条 Flow 同时保存 request 和 response;代理层支持按订阅选择 Flow,并把超过内存预算的 response body 写入文件。 - 修复代理捕获中的 Host 丢失问题;切换代理出口只影响新连接,已有连接继续完成;MITM body 文件在 Flow 删除后回收。
- curl 工具新增
-x/--proxy、-F/--form、--data-urlencode、ASCII trace;补充--http1.0/--http1.1/--http2、HEAD 请求校验、超时返回码 28、TLS/resolve 处理和失败输出保留。 - 工具结果新增 64 KiB 内联上限;JSONL 文件和每个会话的 SQLite 事件数量有上限;取消任务后迟到的 Artifact 不再写入会话。
- 失败的 Agent turn 不再自动重复执行;AOP 文本在协议边界统一清洗为合法 UTF-8。
- Web 资产列表改为分页;聊天时间线和回复完成时间使用新的时间字段;curl、gogo、scan 统一使用 Web 资产摘要。
- 取消远程扫描通过运行时控制通道立即处理;前台 shell 命令继承调用方工作目录。
- Agent 重连后,已打开的终端会重新发送
pty.list;Agent 断线向浏览器发送pty.detached;连接关闭时丢弃排队发送。 - 更新 cyber-ui 子模块、聊天时间线和 IOA 控制台的协议生成代码,修复前后端版本漂移。
发布产物
aiscan:Linux、macOS、Windows 的 amd64/arm64,共 6 个 ZIP。aiscan-full:Linux、macOS 的 amd64/arm64 和 Windows amd64,共 5 个 ZIP。aiscan_checksums.txt包含 11 个 ZIP 的 SHA-256;runner仅用于构建验证,不作为 Release 附件。
v1.0.0-rc2
v1.0.0-rc2 重点重构了 AIScan 的流量出口:所有工具共用常驻代理 Hub,可动态切换代理和 MITM 捕获状态,并把 HTTP/HTTPS 流量准确关联到具体任务。文件访问、扫描结果和发布流程也补齐了明确的审计与稳定性边界。
New Features
统一 MITM 流量捕获
- 所有工具流量统一经过常驻 Proxy Hub,HTTP 请求和 HTTPS 解密流量进入同一份捕获记录,不再为单次命令重复启动代理。
- 捕获默认开启;
--mitm=false或配置mitm: false会切换为纯代理路由,不解密、不记录,也不要求工具信任 CA。 - AOP traffic namespace 可动态切换 capture/relay、修改上游代理、查询状态,并按任务返回 Flow;切换过程无需重启监听器,也不会打断正在执行的命令。
- 每条连接携带任务调用标识,并发扫描产生的流量可以准确归因,不再依赖容易重叠的时间窗口。
开启捕获后,可直接查看和分析工具产生的流量:
mitm flows --host example.com --last 20
mitm flow <id>
mitm analyze --host example.comHTTPS 捕获会向 curl、Git、Node.js、Python requests 等常用客户端注入当前 Hub CA。严格校验证书的工具访问裸 IP 时可能因证书没有 IP SAN 而失败,此时应优先使用主机名,或关闭 MITM 仅保留代理路由。
动态代理路由
代理节点、订阅和单命令代理现在共用同一条实时出口链。切换节点后,新连接立即使用新出口,运行中的连接保持不受影响。
proxy auto <subscription-url> --country HK,JP --strategy adaptive
proxy switch 3
proxy socks5://127.0.0.1:1080 gogo -i 10.0.0.1 -p top2支持 socks5、trojan、vless、anytls、hysteria2、shadowsocks 和 Clash 订阅;proxy current、proxy test、proxy clear 可用于检查和恢复出口。
文件访问审计
- read、write、edit 和远程文件 RPC 会写入任务级文件审计;shell 命令通过工作目录快照记录文件变化,并标记记录来源。
- 审计不会阻塞任务,发生丢弃时会给出数量。shell 中未修改文件的读取无法由快照推断,因此不会被误报为已审计读取。
Web 快速连接
Web 会自动取得 Agent token,并根据远程执行节点的系统、架构和全球/中国下载源生成安装与连接命令;聊天输入框也会根据当前上下文给出操作入口。
Improvements
远程 Node 连接稳定性
- 每个 Node 进程携带独立实例标识,并通过存活 deadline 及时发现失效连接。
- WebSocket 会区分连接失败原因并显示 enrollment 拒绝信息;稳定连接后会重置重连退避。
- 连接、keep-alive 与 producer 生命周期收敛到 session,减少命令结束或重连时的遗留状态。
扫描结果与运行时边界
- scanner-native Artifact 在产生处执行体积预算;工具结束或取消后到达的尾随 Artifact 会被丢弃,避免大结果或晚到结果污染后续会话。
- AOP 工具文本在 UTF-8 边界清洗,截断内容不会产生无效字符。
- shell 命令默认保持前台执行;设置
wait: N后,运行超过 N 秒的命令才会转入后台并通过 inbox 返回进度。默认timeout为 600 秒,显式设为0表示不限时。 - harness prompt 与 scan skill 分离;Katana 升级到 v1.7.0,并修正 gogo/scan 文档中无效的
top100/top1000端口 preset。 - record 改为显式 opt-in;默认 full 和官方 Release 不再下载或链接 recorder SDK。
- Go module 可在独立 checkout 中解析,不再依赖相邻仓库的本地目录结构;新增 Agent 架构文档,运行时与协议边界更明确。
CI 与发布
- CI 执行
go vet、lint 和 integration-tag 编译,并验证冷缓存 protobuf 生成。 - 修复 headless 初始化竞态和 CDP deadline;Playwright 浏览器安装绕过易挂起的 apt mirror,并增加超时与重试。
- release build 与发布权限分离;PR 和 master 都使用正式矩阵构建、生成 checksum,并对 Windows 产物执行启动 smoke test。
- Release notes 会读取本文件中对应版本的章节,并以上一个 prerelease 作为回退日志基线。
Bug Fixes
- 子进程退出时会排空 PTY 尾部输出,修复
tmux capture-pane -c偶发返回空结果。 - inbox 会在所有 producer 结束时正确唤醒;LoopScheduler 统一注册 producer,loop 生命周期绑定 session 而非单次命令 context。
- 修复 integration 回归中的静态分析错误,以及 cyber-ui 文件访问协议版本未固定导致的生成漂移。
Release Matrix
| 产物 | Linux | macOS | Windows | 数量 |
|---|---|---|---|---|
aiscan |
amd64、arm64 | amd64、arm64 | amd64、arm64 | 6 |
aiscan-full |
amd64、arm64 | amd64、arm64 | amd64 | 5 |
checksums.txt |
— | — | — | 1 |
Release 只包含 aiscan、aiscan-full 和 checksum。
v0.0.0-nightly.20260818
- fix: upgrade katana to v1.7.0
- fix(toolargs): enforce hard artifact data budget
- fix(toolargs): bound scanner-native artifacts at their sole birth point
- test(node): websocket 存活测试并入 proto_connection_test
- fix(node): 尾随 artifact 按"已结算 call"丢弃,并覆盖取消路径
- fix(node): 工具 terminal 后丢弃流式工具的尾随 artifact
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries
v0.0.0-nightly.20260817
- fix: upgrade katana to v1.7.0
- fix(toolargs): enforce hard artifact data budget
- fix(toolargs): bound scanner-native artifacts at their sole birth point
- test(node): websocket 存活测试并入 proto_connection_test
- fix(node): 尾随 artifact 按"已结算 call"丢弃,并覆盖取消路径
- fix(node): 工具 terminal 后丢弃流式工具的尾随 artifact
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries
v0.0.0-nightly.20260816
- fix: upgrade katana to v1.7.0
- fix(toolargs): enforce hard artifact data budget
- fix(toolargs): bound scanner-native artifacts at their sole birth point
- test(node): websocket 存活测试并入 proto_connection_test
- fix(node): 尾随 artifact 按"已结算 call"丢弃,并覆盖取消路径
- fix(node): 工具 terminal 后丢弃流式工具的尾随 artifact
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries
v0.0.0-nightly.20260815
- fix(toolargs): enforce hard artifact data budget
- fix(toolargs): bound scanner-native artifacts at their sole birth point
- test(node): websocket 存活测试并入 proto_connection_test
- fix(node): 尾随 artifact 按"已结算 call"丢弃,并覆盖取消路径
- fix(node): 工具 terminal 后丢弃流式工具的尾随 artifact
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries
v0.0.0-nightly.20260814
- fix(toolargs): enforce hard artifact data budget
- fix(toolargs): bound scanner-native artifacts at their sole birth point
- test(node): websocket 存活测试并入 proto_connection_test
- fix(node): 尾随 artifact 按"已结算 call"丢弃,并覆盖取消路径
- fix(node): 工具 terminal 后丢弃流式工具的尾随 artifact
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries
v0.0.0-nightly.20260813
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries
v0.0.0-nightly.20260812
- fix(runner): sanitize AOP tool text at UTF-8 boundary
- refactor(agent): separate harness prompt from scan skill
- refactor(node): derive websocket recovery timings
- refactor(node): simplify websocket connection lifecycle
- feat(web): automate agent quick connect
- feat(web): add contextual chat input guide
- fix(node): surface enrollment rejection reasons
- feat(node): advertise runner process instance identity
- fix(node): classify websocket connection failures
- fix(node): enforce websocket liveness deadlines
- fix(node): reset reconnect backoff after stable sessions
- fix(deps): pin race-free zombie runner
- test(tmux): isolate offset reads from PTY timing
- fix(build): strip local release-profile binaries
- test(web): synchronize terminal reconnect teardown
- test(arch): follow portable recorder shell contract
- chore(release): finalize v1 gates and cleanup
- chore: ignore local agent and browser artifacts
- fix(web): update cyber-ui record card focus
- build: align full profile with static re2
- refactor: clean v1 compatibility and package boundaries
- fix(ci): unify nightly and release workflows
- fix(ci): export Windows recorder link environment
- fix(build): fetch x264 from GitHub mirror
- fix(ci): fall back to building recorder SDK
- fix(build): detect Windows MSYS hosts
- feat(browser): expand reusable headless automation
- refactor(record): consolidate native SDK tooling
- ci: validate native RE2 and name Windows artifacts
- fix(build): restore static native RE2 for full artifacts
- fix(ci): persist recorder link environment on Windows
- fix(ci): export Windows recorder SDK paths
- feat(record): add native desktop capture tool
- fix(node): clean up panicked operations before reporting
- fix(runner): make run wait include cleanup
- fix(protocol): pin canonical loot and file range schemas
- feat(record): add native media capture transport
- feat(skills): add ioa finding publishing convention
- test: stabilize concurrent PTY option isolation
- refactor: make shell command adapter transparent
- fix: reclaim exited Windows bridge runtimes
- refactor: keep command bridge as a PTY adapter
- feat: add optional shell command bridge
- feat(config): reuse shared LLM environment
- feat(scan): emit native artifacts with correlated loot
- fix embedded IOA and tool panic boundaries