Skip to content

Releases: chainreactors/aiscan

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 26 Jul 05:22
06bc32b
  • fix(agent): preload manual assessment rules
  • fix(ci): update tool test paths after package move
  • refactor(commands): remove TUI from runtime command execution
  • refactor: promote tools to top-level packages
  • refactor(output): remove legacy agent timeline models
  • refactor(protocol): route direct tool execution through AOP
  • refactor(runner): centralize runtime control state
  • refactor(web): narrow chat events to domain events
  • refactor(runner): remove unused run replay mechanisms
  • fix(release): stamp and verify binary version
  • fix(web): make terminal reconnect state atomic
  • fix(release): restore portable build profiles
  • fix(lint): clean up converged runtime paths
  • fix(ci): make clean checkouts compile
  • test(scanners): add public functional regressions
  • test(scanners): add functional regression suite
  • fix(scanners): expose proton and stream results
  • feat(web): 支持配置模型上下文与输出上限
  • feat(config): 支持模型限制与显式 Provider 选择
  • feat(agent): 增强上下文管理与模型调用可靠性
  • fix(frontend): restore canonical AOP submodule contract
  • fix(frontend): manage mobile sidebar focus
  • fix(frontend): harden IOA overview polling
  • feat(frontend): refine AOP chat timeline
  • feat(frontend): improve asset browsing
  • feat(frontend): add categorized mention picker
  • build(frontend): align shared UI integration
  • fix(tui): render protocol eval rounds as-is
  • fix(runtime): preserve evaluated run input
  • refactor(runtime): remove legacy execution adapters
  • fix(protocol): use turn id for run correlation
  • refactor(agent): unify runtime around session run command
  • feat(runner): add stable ids and native exec
  • chore(deps): use published pty module
  • fix(repl): restore native scrollback and live composer
  • feat(frontend): subscribe to converged AOP events, localize hub errors
  • feat(web): converge hub dispatch and errors on AOP, single LLM profile form
  • feat(agent): converge agent execution on AOP tool.call sessions
  • ci: stop publishing agent binaries
  • feat(agent): AOP schema codegen, runtime-owned sessions, converged execution
  • feat: load prompt content from existing files
  • fix(ci): preserve generated template dependencies
  • fix(ci): restore portable module and embed inputs
  • feat(frontend): align chat timeline and IOA references
  • build(frontend): exclude test files from hub tsconfig, bump cyber-ui
  • test(agent,runner,web): lock AOP encoder, input, stdio, and replay semantics
  • refactor(web): converge chat tasks on the root session.end event
  • refactor(agent): drop SteerUserMessage, queue TUI input at run boundary
  • fix(scan): emit composite results to asset pipeline
  • fix(webagent): persist scanner assets from chat nodes
  • feat(web): add live IOA console coverage
  • refactor(aop): adopt AOP as the single agent semantics carrier
  • feat(commands): accept per-call timeout in bash tool
  • feat(aop): execute runner tools over canonical events
  • test(webagent): cover tool node wire interop with cairn bridge dialect
  • refactor(runner): drop cairnrunner, expose tool-only node via webagent
  • refactor(stdio): accept plain request and stream raw AOP
  • refactor(commands): unify execution with PTY sessions
  • refactor(pty): use canonical frames across transports
  • fix(build): package frontend and generate CLI help
  • build: restore portable libcstx profile
  • build: drop superseded pty checksums
  • fix: close native runner CI gaps
  • build: add linux yaml module checksums
  • build: align go.mod with linux tidy
  • build: keep local module replaces out of CI
  • build(aop): pin IOA and cyber-ui protocol updates
  • refactor(aop): unify transport identity and execution paths
  • build: use local libcstx during integration
  • fix(web): replace replayed AOP session history
  • feat(web): group asset table by SCO type
  • fix(web): restore structured scanner results
  • fix(web): auto-start local agent and restore chat UI
  • test(aop): remove versioned envelope fixtures
  • feat(aop): make AOP the single agent transport
  • refactor(harness): keep AOP data typed
  • refactor(agent): unify harness on webproto stdio
  • feat(agent): expose webproto stdio execution
  • feat: switch to AOP event protocol + unify chat with cyber-ui viewer
  • refactor: decouple agent, tool, and web layers
  • fix(ci): skip remaining race-sensitive and browser E2E tests
  • fix(ci): skip race-sensitive and browser-dependent tests in CI
  • build: update go-re2 with glibc isoc23 compat shim
  • fix(ci): remove unused const, suppress false-positive gosec G120
  • fix(ci): resolve lint errors and go generate flag
  • fix(ci): go mod tidy + embed directive + remove local replace
  • build: pin go-re2 fork to latest with static CGO docs
  • build: switch to go-re2 fork with bundled static RE2
  • build: add re2_cgo to Makefile and CI
  • build: enable native cstx and slim katana
  • refactor(cli): scope flag groups to their subcommands for independent help
  • feat(web): add asset SCO import, mention picker, and i18n for asset panel
  • refactor: migrate SCO types from local sco_gen.ts to @cyber/cstx-easm
  • style(telemetry): simplify startup ready logs
  • fix(tui): exit cleanly on double ctrl-c
  • fix(tui): isolate split-mode input rendering
  • fix: stabilize agent console completion and logs
  • feat: add /compact command with eval-path unification and auto-suggest
  • fix repl ux and startup logging
  • refactor: migrate cstx dependency from utils/cstx to libcstx/go
  • refactor: clean up legacy intermediate types, deprecated flags, and dead code
  • feat: SCO sidecar + DataBus pipeline for standalone tool calls + @cyber/cstx-easm
  • refactor: 简化 toolEnvelope/报告 i18n/scan card 状态机/anchor prop 透传
  • refactor(web): 删除扫描结果改版后的遗留死代码
  • revert(agent): 移除误提交的 CyberHub 浏览器插件 WASM 代码
  • feat(scan): integrate cstx SCO standardized output
  • fix: add unified recover to all tool Execute methods + bump gogo/neutron
  • feat(web): 移动端适配 — 安全区/dvh/16px 输入/触屏交互
  • feat(web): 扫描结果内联自足,移除详情抽屉
  • feat(web): 侦察报告重写并按语言渲染,scan_complete 落库 marker
  • fix(scan): 保留 http/https 同源为独立资产并采集 content_type/redirect_url
  • fix(web): 本地 Agent 携带 access key 认证 /api/agent/ws
  • feat(web): 静态资源按指纹永久缓存,index.html 不缓存
  • feat(wasm): __aiscanLLM 增加 per-run 上下文参数
  • feat(agent): 对齐 CyberHub Copilot 的 WASM 通信协议
  • feat(agent): 增加 agent-core 的 JS/WASM 入口(RFC #189 方案 A 验证)
  • fix(agent): improve LLM retry mechanism (#57)
  • feat(web): QuickConnect 版本对齐 + 架构选择 + 中国镜像 + 跳过引擎加载
  • build(deps): bump sdk 到 dcad8620 + 适配 API 变更
  • build(deps): bump chainreactors/utils 系列到 master (8aa6ca29)
  • fix(ci): 修 lint QF1008 + 跳过 -race 下 flaky MITM 测试
  • feat: 统一认证 — IOA/Web 概念模糊化 + QuickConnect 快速接入
  • feat(web): 统一 access key 认证 + SlashSpec→CommandSpec 重命名
  • chore: 移除临时分析文档 docs/mechanisms.md
  • chore(web): 移除所有嵌入字体,回归系统字体栈 (static 1.2MB)
  • chore(web): 移除 MiSans 中文字体,改用系统字体 (static -4.4MB)
  • refactor(web-ui): 简化前端数据流 + 消除死代码 + 组件复用
  • refactor: 简化实现 — probe 归位 + 删冗余类型/字段 + 消除重复调用
  • refactor: 删除 slashcmd 包 + 修正确性 bug + 去重简化 (-229 行)
  • chore(web): 重建内嵌前端静态资源
  • refactor(web): 简化本地 Agent 启动配置
  • fix(tui): 修复状态面板宽度与 IOA URL 脱敏
  • test(proxy,webagent): 放宽时序 flaky 测试的墙钟 deadline
  • fix(proton): 修复密钥扫描大面积漏报 + JSON 字段名
  • chore(web): 更新 cyber-ui 子模块指针
  • feat(truncate): 增加行级裁剪辅助函数
  • fix(tools): 恢复扫描工具数据事件桥接
  • chore(web): 重建内嵌静态资源
  • fix(web-ui): Tailwind 扫描 cyber-ui 子模块源码,补齐子模块内 utility
  • refactor(web-ui): 消费 cyber-ui 第二刀原子 + terminal 迁子模块
  • fix(web-chat): REPL/! 命令多行输出用代码围栏渲染,避免塌成一行
  • build(deps): tidy go.sum after sdk bump
  • fix(ci): 源头修 golangci-lint 报错(errcheck/nilerr/gosec/misspell/unused/SA1019)
  • build(deps): bump chainreactors/sdk to the merged ChainExec fix
  • refactor(web-ui): 从 cyber-ui 子模块消费原子组件(ui/theme)
  • chore(web): 重建内嵌静态资源
  • feat(web-ui): agent 控制台前端重构(i18n / 主题 / viewer / 原子组件)
  • feat(web): 后端会话/SSE/store/配置热重载/webagent
  • refactor(tools): 扫描采集/spray/gogo/zombie 与输出渲染精简
  • refactor(agent): 评估器结构化断言、事件 JSON、上下文截断
  • feat(slashcmd): 统一 slash 命令目录,固定盒子渲染 TUI 面板
  • feat(probe): 连接与 LLM 主动探活
  • fix(provider): LLM 协议推断/model 覆盖/能力对齐
  • chore: 移除 cyber-ui submodule,收敛 .gitignore
  • chore: add aiscan.yaml to gitignore (leaked API key cleanup)
  • chore: expand .gitignore to prevent junk file commits
  • chore: remove large test binaries from tracking
  • chore: remove all local replaces, update deps
  • fix: adapt proton command to Scanner.FindAll and ScanGroup.Templates()
  • chore: update all deps, remove local replace
  • chore: update proton/utils dependencies, remove local replace
  • feat: match/extract graded output and stats fix for proton command
  • chore: release v0.2.8
  • refactor: reorganize scattered tests into source-aligned files
  • chore: remove unused record query abstractions
  • refactor: unify JSONL and WS event format as Record
  • refactor(web): inline record conversion, remove core/runner/records.go
  • feat(web): unified record telemetry for agent events and scan results
  • refactor(web): migrate chat to composable timeline renderer registry
  • fix(web): persist upload success message
  • feat: file upload through agent channel
  • refactor(web): import chat components from @aspect/viewer, add viewer to tsconfig
  • Fix web chat REPL session handling
  • feat(web): chat sessions, agent event forwarding, and build refresh
  • refactor(web): replace local UI with cyber-ui submodule
  • feat(web): configuration center — web server distributes config to agents
  • refactor: remove line numbers from read tool output
  • refactor(web): deepen cyber-ui adoption — Tooltip, Tabs, Select, Badge, Spinner, ThemeProvider
  • refactor(web): migrate UI components to @aspect/ui and @aspect/theme from cyber-ui
  • refactor: migrate from reeflective/readline,console to chainreactors/tui sub-modules
  • Use console paste references in TUI
  • fix: embed quick-reference docs in system prompt to reduce agent trial-and-error
  • chore: update v0.2.7 changelog, fix MITM lint and flaky test
  • refactor: extract scanner Base struct, unify tool registration, split console.go
  • fix: address code quality issues from post-v0.2.6 review
  • feat: integrate utils/cert atomic primitives, remove local replace
  • chore: update go.mod after utils/cert refactor
  • chore: add utils/cert transitive dependency, ...
Read more

v0.0.0-nightly.20260725

Pre-release

Choose a tag to compare

Changelog

  • fed2aec test(webagent): cover tool node wire interop with cairn bridge dialect
  • 0830f8e test(scanners): add public functional regressions
  • 5e55fc2 test(scanners): add functional regression suite
  • 807f088 test(aop): remove versioned envelope fixtures
  • 1b2aa07 test(agent,runner,web): lock AOP encoder, input, stdio, and replay semantics
  • feafd4b refactor: decouple agent, tool, and web layers
  • e517401 refactor(web): converge chat tasks on the root session.end event
  • d1c26a1 refactor(stdio): accept plain request and stream raw AOP
  • 66e9fa6 refactor(runtime): remove legacy execution adapters
  • 44b1f3a refactor(runner): drop cairnrunner, expose tool-only node via webagent
  • 9f099e7 refactor(pty): use canonical frames across transports
  • 6ad465f refactor(harness): keep AOP data typed
  • b96d020 refactor(commands): unify execution with PTY sessions
  • e6651a5 refactor(aop): unify transport identity and execution paths
  • 45fc21b refactor(aop): adopt AOP as the single agent semantics carrier
  • 558bfbb refactor(agent): unify runtime around session run command
  • a321e03 refactor(agent): unify harness on webproto stdio
  • 7b6a7ae refactor(agent): drop SteerUserMessage, queue TUI input at run boundary
  • 9c88c98 fix: close native runner CI gaps
  • 85ea7ee fix(webagent): persist scanner assets from chat nodes
  • 9dedd4d fix(web): restore structured scanner results
  • b71b9e6 fix(web): replace replayed AOP session history
  • 745feca fix(web): make terminal reconnect state atomic
  • b12c81c fix(web): auto-start local agent and restore chat UI
  • 45b6dc0 fix(tui): render protocol eval rounds as-is
  • 2756cfc fix(scanners): expose proton and stream results
  • f5c70a2 fix(scan): emit composite results to asset pipeline
  • 7d55e89 fix(runtime): preserve evaluated run input
  • 1fb11da fix(repl): restore native scrollback and live composer
  • 4f4c8a7 fix(release): stamp and verify binary version
  • 8247e44 fix(release): restore portable build profiles
  • 49958d5 fix(protocol): use turn id for run correlation
  • 41a0f84 fix(lint): clean up converged runtime paths
  • 8871ea4 fix(frontend): restore canonical AOP submodule contract
  • 57604a0 fix(frontend): manage mobile sidebar focus
  • 57a5489 fix(frontend): harden IOA overview polling
  • 0d6bc40 fix(ci): restore portable module and embed inputs
  • 9427ff6 fix(ci): preserve generated template dependencies
  • e09c2c5 fix(ci): make clean checkouts compile
  • 2390f1c fix(build): package frontend and generate CLI help
  • 47fa41a feat: switch to AOP event protocol + unify chat with cyber-ui viewer
  • fbb1abb feat: load prompt content from existing files
  • f0e9567 feat(web): 支持配置模型上下文与输出上限
  • bd3eaca feat(web): group asset table by SCO type
  • 70c081c feat(web): converge hub dispatch and errors on AOP, single LLM profile form
  • 02ad0a7 feat(web): add live IOA console coverage
  • 8878f05 feat(runner): add stable ids and native exec
  • aadbd67 feat(frontend): subscribe to converged AOP events, localize hub errors
  • 3fde722 feat(frontend): refine AOP chat timeline
  • 8e47f46 feat(frontend): improve asset browsing
  • cbeb5c1 feat(frontend): align chat timeline and IOA references
  • 51e8b5c feat(frontend): add categorized mention picker
  • 151665b feat(config): 支持模型限制与显式 Provider 选择
  • b1f0ae8 feat(commands): accept per-call timeout in bash tool
  • d9a7fc7 feat(aop): make AOP the single agent transport
  • 8046a1f feat(aop): execute runner tools over canonical events
  • 8e5042d feat(agent): 增强上下文管理与模型调用可靠性
  • 4653912 feat(agent): expose webproto stdio execution
  • d36efcc feat(agent): converge agent execution on AOP tool.call sessions
  • 30e8ac6 feat(agent): AOP schema codegen, runtime-owned sessions, converged execution
  • 8d8c96a ci: stop publishing agent binaries
  • c62320f chore(deps): use published pty module
  • 5a8e7d9 build: use local libcstx during integration
  • 9626944 build: restore portable libcstx profile
  • 7b487a9 build: keep local module replaces out of CI
  • 2e9690a build: drop superseded pty checksums
  • 4239248 build: align go.mod with linux tidy
  • 82d2251 build: add linux yaml module checksums
  • cbe3528 build(frontend): exclude test files from hub tsconfig, bump cyber-ui
  • bcb3b31 build(frontend): align shared UI integration
  • f8f6d2d build(aop): pin IOA and cyber-ui protocol updates
  • 4e2abcf Merge pull request #62 from chainreactors/feat/aop-single-transport

v0.2.8

Choose a tag to compare

@github-actions github-actions released this 01 Jul 09:54

v0.2.8 — 外部 API 工具错误治理 + 文件上传 + Agent 提示优化

New Features

文件上传

  • 支持通过 agent 通道直接上传文件

--tavily-key flag

  • Tavily web search 现在可通过 CLI flag 配置,不再仅限 config 文件和环境变量
aiscan agent --tavily-key tvly-xxx -p "search CVE-2024-1234"

Improvements

外部 API 工具错误治理

未配置 API key 时,passiveweb_searchsearch cyberhub 等工具之前要么不注册(agent 看不到),要么返回模糊错误导致 agent 反复重试。现在统一为:始终注册,缺 key 时返回一次性明确错误,列出所有配置方式(flag / env / config),agent 不会再重复调用。

passive: no recon credentials configured.
  Set via flags (--fofa-key, --hunter-api-key),
  env (FOFA_KEY, HUNTER_API_KEY),
  or config file (recon.fofa_key, recon.hunter_api_key).
  Do not retry until credentials are provided

Agent 工具调用准确率提升

  • 将 quick-reference 文档嵌入 system prompt,减少 agent 对扫描工具的试错调用
  • read tool 输出移除冗余行号前缀,降低 token 消耗

Bug Fixes

  • 修复 CI 构建失败:移除 go.mod 中 tui/consoletui/readline 的本地 replace 指令,改用远程发布版本

Dependencies

  • zombie v1.2.3v1.3.0
  • spray v1.3.2v1.3.3
  • protonv0.3.1
  • ioa v0.1.1v0.1.2
  • tui/consoletui/readline — 迁移到 chainreactors/tui,替代 reeflective fork
  • utils 全子模块升级到 20260630,新增 utils/parsers 子模块
  • 所有 chainreactors 依赖升级到 master 最新

v0.2.7

Choose a tag to compare

@github-actions github-actions released this 25 Jun 16:00

v0.2.7 — MITM 流量捕获 + Proton 敏感信息扫描 + /loop 循环任务 + TUI 交互增强

MITM 透明流量拦截(proxy mitm 子命令族);Proton 敏感信息扫描器(SDK 引擎 + 197 条内嵌规则 + 双向管道);/loop 循环任务调度;TUI 交互全面增强(verbosity 切换、中断控制、文件补全、实时 token 用量);多 Provider 列表配置格式;FOFA key-only 认证支持。

New Features

Proton — 敏感信息扫描器

  • 内嵌 197 条 YAML 检测规则(API key、token、credential、私钥、数据库连接串等),覆盖 AWS/GitHub/Stripe/GCP 等 156+ 模板
  • 基于 SDK proton.Engine 构建,从硬编码规则迁移为模板引擎 + ResourceProvider 架构
  • 对齐 neutron CLI 模式:-l/--list 多目标输入、--stats/--silent 输出控制、--template-list 模板列表
  • 支持代理(WithProxy()/SetProxy()),自动接入 deps.ScannerProxy
# 扫描目录
proton -i /path/to/project

# 管道组合 — shell 输出 → proton
curl http://target/api/config | proton
cat .env.production | proton

# 管道组合 — proton 输出 → shell
proton -i . | grep critical

# 指定模板标签
spray -u http://target | proton --tags spray

双向管道支持

  • Pseudo-command → Shell:伪命令输出通过 buffer 管道到 sh -c 执行的 shell pipeline
  • Shell → Pseudo-command:shell 输出经临时文件通过 StdinReceiver 接口传递给伪命令
  • 安全约束:仅支持单管道 |,拒绝 ||>&&; 防止沙箱逃逸
# 双向管道示例
scan -i target -j | head -20       # pseudo → shell
cat targets.txt | spray -u stdin   # shell → pseudo

/loop — 循环任务调度(cron 表达式)

  • loop 作为 bash pseudo-command 注册,agent 通过 bash(command="loop ...") 直接调用
  • 支持标准 5 字段 cron 表达式(*/5 * * * *)和 Go duration 简写(30s/5m/1h
  • /loop REPL 快捷命令直接执行,不经 LLM 中转
  • 内置 cron 解析器,支持 */*/step/range/range/step/list 全部语法
# cron 表达式
/loop */5 * * * * check scan progress         # 每 5 分钟
/loop 0 */2 * * * review findings             # 每 2 小时

# duration 简写
/loop 30s check status
/loop 5m monitor targets

# 管理
/loop list
/loop stop loop-a1b2c3d4

MITM 流量捕获

透明 HTTP/HTTPS 流量拦截,集成 utils/mitmproxy 到 proxy 命令组。扫描引擎(gogo/spray/zombie/neutron)自动路由到本地 MITM 代理;若已有外部代理(trojan/vless/clash)则作为上游透传。

  • mitm start [--addr]:启动本地 MITM 代理,自动切换扫描引擎代理
  • mitm stop:停止 MITM 并恢复之前的代理设置
  • mitm status:查看状态和 flow 计数
  • mitm flows [--host/--status/--type/--last]:按条件查询捕获的 HTTP 流
  • mitm flow <id>:查看单个 flow 详情
  • mitm clear:清空 flow 存储
  • mitm analyze [--host/--last]:结构化输出供 AI 分析
# 启动 MITM 拦截
mitm start --addr 127.0.0.1:8888

# 正常执行扫描(流量自动经过 MITM)
scan -i target

# 查看捕获的流量
mitm flows --last 20
mitm flow 42

# AI 分析捕获的请求
mitm analyze --host target.com

# 停止并恢复
mitm stop

Improvements

TUI 交互增强

  • Ctrl+O 切换 verbosity:四级循环(quiet → default → tools → thinking),运行中动态调整
  • Ctrl+C / Esc 中断:Ctrl+C 中断当前任务(双击退出),Esc 中断并区分 escape 序列
  • @ 文件补全:基于 carapace 的 @ 前缀文件路径自动补全
  • Spinner 快捷键提示:agent 执行中展示 Esc interrupt Ctrl+O verbosity 提示
  • Thinking 渲染稳定化:reasoning/content 流分离,避免混合输出时终端闪烁
  • Agent 实时状态统一LiveStatus 集中管理 thinking/tooling/talking 状态和并行工具追踪
  • 累计 token 用量实时展示:显示 context window 占用百分比,跨 turn 累计 prompt/completion/total

并发工具执行 OOM 防护

  • 信号量限流:MaxParallelTools 默认 16 并发槽位,防止无限并行导致 OOM
  • 移除 ExecParallel/ExecSequential 模式,统一为共享信号量队列

多 Provider 列表配置

  • 新增 llm.providers 列表格式作为主要配置方式,providers[0] 为主 provider,其余为降级链
  • 向后兼容:单 provider 字段(provider/api_key/model)仍可使用,优先级高于列表
  • 两种格式可混用:单字段 + 列表 = 单字段为主,列表为降级备选
# 新格式 — 多 provider 列表
llm:
  providers:
    - provider: deepseek
      api_key: sk-...
      model: deepseek-chat
    - provider: openai
      api_key: sk-...
      model: gpt-4o

Bug Fixes

  • FOFA key-only 认证:FOFA 2023 年简化认证后只需 API key,但 aiscan 仍要求 email+key 双字段才注册 fofa 引擎。修复后仅 FofaKey 即可使用 passive -s fofa,同时兼容旧版 email:key 格式(#41
  • 修复测试中的 Stripe key 触发 GitHub push protection(替换为假 key)
  • 修复 cumulative usage 事件发射,确保跨 turn token 统计正确
  • 修复 agent live status 渲染不一致
  • 修复并发 data race:TUI 测试 stderr buffer、zombie OutputCh、spray/logs concurrent logger

Dependencies

  • spray v1.3.1:mask 表达式支持所有请求字段、--keys 插件内嵌 156 条 proton 模板、extract severity 分级 + 上下文捕获、修复 crawl-only 提前 drain 和 OutputCh panic
  • utils/cert:集成 utils/cert 原子化证书原语(CA 生成、子证书签发、随机 Subject、PEM 工具函数),移除本地 replace
  • bump SDK、zombie、logs、utils/pty 修复上游 data race

Breaking Changes

  • 配置文件名变更config.yamlaiscan.yaml,需手动重命名现有配置文件
  • /reset 重命名为 /clear

What's Changed

  • fix(recon): support FOFA key-only auth in passive recon by @wuchulonly in #42
  • feat: integrate utils/cert, remove local replace by @M09Ic in #45

Full Changelog: v0.2.6...v0.2.7

v0.2.6

Choose a tag to compare

@github-actions github-actions released this 23 Jun 07:32

v0.2.6 — Session 持久化 + 多模型容错 + 输出格式统一 + 命令架构重组

Session 会话持久化(--resume/--save-session);非视觉模型图片容错(三层防御:静态模型注册表 + 请求清洗 + 运行时自动恢复);统一输出记录格式;命令架构重组为 aiscan/aiscan-agent/web 三入口。

New Features

Session 持久化

  • --save-session:自动保存 agent 对话到 .aiscan/sessions/,每次 run 后持久化
  • --resume:恢复最近一次保存的 session
  • --resume <path>:从指定 session 文件恢复
# 自动保存对话
aiscan agent -p "scan target" --save-session

# 恢复最近 session 继续
aiscan agent --resume -p "now check the results"

# 从指定文件恢复
aiscan agent --resume .aiscan/sessions/2026-06-22_scan.json

Config 路径 Fallback 链

  • 配置文件查找顺序:-c 指定 > 当前目录 > 二进制所在目录
  • 数据目录(.aiscan/)统一跟随二进制路径

Improvements

多模型图片容错(三层防御)

针对 DeepSeek、Qwen、GLM 等不支持图片的模型,解决了图片内容导致 400 错误后 session 无法恢复的问题:

  1. 静态预防 — 从 Claude Code 的模型注册表提取 30+ 模型族关键词,自动识别 text-only 模型(deepseek/qwen/glm/mistral/llama/kimi/minimax 等),图片在发送前 strip
  2. 请求清洗sanitizeMessages 过滤历史中的空 assistant 消息,防止旧 session 或失败 turn 的遗留消息污染上下文
  3. 运行时自动恢复 — 未知模型遇到图片相关 400 错误时,自动调用 DisableImages() 并重试,后续请求持久生效

输出记录格式统一

  • 所有工具输出统一为 tool-named record 类型
  • 新增 loot flag 标记高价值发现
  • Agent 输出自动包装为结构化记录

命令架构重组

  • 拆分为 aiscan(全功能)、aiscan-agent(最小 agent)、web(子命令)三入口
  • Arsenal 工具始终加载,无需额外 flag

Bug Fixes

  • IsRetryable 从黑名单改为白名单(仅 429/500/502/503/529),防止 400 Bad Request 无限重试
  • 错误路径不再向 transcript 追加空 assistant 消息,防止 session 损坏
  • 统一 panic recovery 覆盖 tool 执行和 scan pipeline
  • 修复 passive scanner 包循环导入
  • PTY 兼容 Windows 7 / Server 2008(utils/pty 更新)

v0.2.5

Choose a tag to compare

@github-actions github-actions released this 21 Jun 16:55
5a1960c

v0.2.5 — Arsenal 工具管理 + TUI 重设计 + 命令接口统一 + PTY 平台整合

新增 Arsenal(crtm)安全工具包管理器;Playwright 新增 -s 全局 session flag;TUI verbose 渲染全面重设计;命令接口统一为全局 OutputWriter;4 平台 PTY 文件整合为单一 go-pty wrapper。

Arsenal — crtm 安全工具包管理器

  • arsenal install/update/remove:幂等操作,manifest 瞬时版本查询
  • bash pseudo-command 执行模型,安装后自动注入 $PATH
!arsenal list                              # 查看所有工具 + 安装状态
!arsenal search subdomain                  # 关键词搜索
!arsenal install httpx                     # 安装(自动下载 + PATH 注入)
!arsenal install nuclei --version v3.3.0   # 指定版本
!httpx -l targets.txt -silent              # 安装后立即可用
!arsenal update httpx                      # 更新到最新
!arsenal add projectdiscovery/subfinder    # 添加第三方仓库

Playwright — -s 全局 session flag

所有子命令支持 -s=<name> 指定目标 session,对齐 playwright-cli 习惯:

playwright -s=mySession click "button"
playwright -s=s1 goto

TUI — verbose 渲染重设计

  • ▸/✓/✗ 标记替代 ⎿/│ 盒线,结构化 key-value 参数展示
  • turn 统计新增 cache hit ratio、耗时颜色编码、并行 tool 标记
  • agent 结束汇总 tool 调用统计,eval verdict 结构化展示
  • -vv 禁用输出截断,显示完整 tool result

Architecture

  • 命令接口统一Command.Execute 移除 io.Writer 参数,全局 OutputWriter + exec hooks
  • PTY 平台整合:4 平台文件 → 单一 go-pty wrapper,finishSession() 去重
  • IOA 简化:8 个导出函数 → 4 个(统一 writer 参数)
  • FetchTool wrapper 移除,死代码清理

Robustness

  • Agent retry 覆盖 HTTP 406 等瞬态错误

Bug Fixes

  • 修复 pseudo-command 输出丢失(缺少 SetExecHooks)
  • 修复 go.mod 本地 replace 路径导致 CI 失败
  • 解决全部 golangci-lint 错误
  • DirectScanner 数据竞争修复

Breaking Changes

  • Command.Execute 签名:Execute(ctx, args) error(移除 io.Writer 参数)
  • FetchTool 移除,fetch 改为普通 Command

Full Changelog: v0.2.3...v0.2.5

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 18 Jun 14:30

v0.2.3 — Playwright 全面升级 + Provider 双协议简化 + TUI 流式渲染 + IOA 架构精简

本版本包含 Breaking Changes。核心变更:Playwright 浏览器自动化对齐 microsoft/playwright-cli 接口,Provider 层简化为 openai/anthropic 双协议,TUI 流式 Markdown 渲染,移除 --loopcheckpoint/loop custom tool。

Breaking Changes

  • --loop 移除: 设置 --ioa-url 即自动启用 IOA worker 模式,不再需要单独的 --loop flag。迁移:aiscan agent --loop --ioa-url http://... --space s1aiscan agent --ioa-url http://... --space s1
  • checkpoint/loop tool 移除: checkpoint 已迁移到 IOA protocol(ioa_send checkpoint),verify/sniper 子 agent 改用 finish tool + 结构化 status header;loop 不再作为 LLM custom tool 暴露,LoopScheduler 内部机制(--heartbeat)保留
  • Provider 简化为双协议: 移除 deepseek/groq/moonshot/ollama/openrouter 等独立 provider type,统一为 openai(OpenAI-compatible)和 anthropic 两种协议,通过 --base-url 指定实际端点
  • -q 静默模式移除: 被 -v/-vv 分级详细度替代

New Features

Playwright — 对齐 microsoft/playwright-cli 接口

  • 新增 cookie-list/cookie-get/cookie-set/cookie-delete/cookie-clear 五个独立 cookie 命令
  • 新增 storage-list/storage-get/storage-set/storage-delete/storage-clear 覆盖 localStorage 和 sessionStorage 完整 CRUD
  • 新增 console:通过 EvalOnNewDocument JS 注入,从 session open 开始自动捕获 console.log/warn/error
  • 新增 snapshot:CDP Accessibility.getFullAXTree 获取可访问性树,支持 --depth 控制层级
  • 新增 requests/request <index>:session open 时自动启动网络捕获,列出全部请求或查看单条详情(headers、post data)
  • 新增 route-liststate-save/state-loaddialog-accept/dialog-dismiss
  • open 新增 --headed(GUI 窗口)和 --cdp <endpoint>(连接已有浏览器)
  • 移除 session GC/TTL 机制,session 持久存活直到 close 或进程退出,LRU 8 上限保留

图像优化 — LLM 视觉输入管线

  • 截图自动优化:缩放至 2000×2000 以内,PNG vs JPEG 双编码取较小,渐进降质直到 base64 < 4.5MB
  • 非视觉模型自动降级:基于 provider type + model 名推断图像支持能力,不支持时替换为文字提示

TUI — 流式 Markdown 渲染 + 分级详细度

  • 段落缓冲式 Markdown 渲染 + chroma 语法高亮(read tool 结果带行号)
  • -v/-vv 分级详细度:默认流式内容 + turn 统计;-v 显示 tool call 详情;-vv 显示 thinking content
  • 每个 turn 结束显示 [turn N | tools=X | input=Y (+ Z cached) output=W | Ns]
  • Agent 结束显示 [agent STATUS | turns=N | input=Y (+ Z cached) output=W | Ns]

Evaluator — Context Window 感知 + inherit_context

  • 内置模型 context window 查询表(Claude/DeepSeek/GPT/Gemini/Qwen/Kimi),未匹配 fallback 128k
  • verdict 新增 inherit_context:evaluator LLM 决定下一轮是否继承对话历史,falseagent.Reset()
  • system prompt 明确阈值:>80% 必须 reset,>50% 建议 reset,<=50% 默认继承

IOA — Token Auth

  • server 端 --ioa-token 设置访问密钥,client 端 http://token@host:port URL 格式自动认证
  • ensureNode 通过 EnsureRegistered type assertion 实现 auth-aware 节点注册

Bug Fixes

  • Anthropic 兼容 API: 第三方端点(如 DeepSeek /anthropic)不识别 type: "custom" tool 类型返回 400。改为仅在 anthropic.com 端点发送该字段,第三方省略
  • 环境变量 provider 推断: 仅设 OPENAI_API_KEYANTHROPIC_API_KEY 时未自动推断 provider,导致 env alias 失效。修复:从 API key env var 存在性推断 provider
  • tmux 增量读取: capture-pane poll 循环意外推进增量游标,导致 --new 读取为空。修复:poll 改用 --full
  • evaluator 历史丢失: evaluator 仅收到当轮消息,重试时丢失前几轮 context。改为传入完整 transcript
  • 非视觉模型图像拒绝: 不支持 multimodal 的 provider 收到 image_url 返回 400。新增 per-provider 图像支持推断 + strip

Full Changelog: v0.2.2...v0.2.3

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 17 Jun 06:23

Changelog

v0.2.2 (2026-06-16)

新增 goal evaluation 闭环机制——独立 LLM 评估 agent 任务完成度并自动注入反馈驱动重试;内嵌 katana 爬虫引擎支持 headless 浏览器;新增多 provider 容错降级链;重构 TUI/REPL 为统一 pkg/tui 模块;大幅整理包结构,aiscan 专用包从 pkg/ 移入 core/。

New Features

goal evaluation — 独立评估 + 反馈重试闭环(核心)

  • 新增 -e / --eval 指定目标评估标准,--eval-model 可选独立评估模型,--eval-retries 控制最大评估轮数(默认 3)
  • 评估机制:agent 完成一轮执行后,独立 evaluator LLM 接收压缩后的 execution trace(tool call 序列 + assistant 摘要 + final output),通过强制 tool call(verdict tool)返回结构化判定(pass/reason/feedback)
  • 闭环重试:verdict.pass=false 时,evaluator 的 feedback 作为新 prompt 注入 agent 继续执行,直到 pass=true 或达到最大评估轮数
  • evaluator 调用失败时降级为通用反馈("请检查你的工作并继续"),不中断主流程
  • trace 压缩策略:仅保留 tool call 序列和 assistant 摘要,不传完整 tool result,最大 16KB 防止 context 膨胀
  • 全程通过 eventbus 发射 GoalEvalStart / GoalEvalEnd / GoalEvalError 事件,TUI 实时展示评估进度和结果

katana — 进程内爬虫 + headless 引擎

  • 将 katana 从外部二进制调用重构为进程内 SDK 集成,通过 goflags 解析参数保持完整 CLI 兼容性,OnResult 回调收集结果
  • 新增 headless/hybrid 引擎支持,根据 -hl/-hh/-cwu 标志自动选择引擎

multi-provider — 容错降级链

  • 当主 provider 重试耗尽后,agent loop 自动切换到降级链中的下一个 provider 并重放当前 turn
  • 配置文件 llm.providers 数组定义降级链,启动时并行初始化(失败跳过)
  • 新增 REPL /provider 命令展示 provider 链的 active/standby 状态

agent — finish tool / thinking block / web search

  • 新增 finish tool:通过 ToolResult.Terminate 显式终止 agent loop
  • 非流式响应支持解析 Anthropic thinking block 为 ReasoningContent
  • 新增 WebSearchProvider 接口,Anthropic 走 web_search_20250305 server tool,OpenAI 走 Responses API;provider 原生搜索失败时回退 Tavily/DDG

heartbeat + tmux 增量监控

  • --heartbeat 接入 LoopScheduler 作为通用周期唤醒
  • tmux 后台命令自动推送增量输出到 agent inbox(每 10s per-session goroutine)
  • capture-pane 新增 -n(末尾 N 行)和 -c(末尾 N 字节)参数

信号处理 — 两阶段 Ctrl+C

  • 第一次 Ctrl+C 停止当前任务,第二次退出 REPL,第三次强制退出

Bug Fixes

  • scanner CLI: aiscan scan / aiscan gogo 等直接命令模式因引擎异步加载导致 "unknown subcommand" 失败。新增 WaitEngines(ctx) 同步等待引擎就绪

Refactoring

  • pkg/app 合并进 core/runner,删除 pkg/app
  • eventbuspidlockresourcesoutputharnesspkg/ 移入 core/
  • TUI/REPL 提取到 pkg/tui,合并 pkg/repl
  • evaluator 使用 tool call 结构化输出替代 JSON text fallback
  • cyberhub 基于 SDK association index 重建,新增结构化查询 flag
  • provider 层简化:移除中间结构体,提取共享 HTTP 工具

Dependencies

  • SDK v0.2.4v0.3.2
  • 新增 SDK panic recovery
  • 42 个 e2e 测试

v0.2.1 — IOA 集成重构 + AI 驱动监听

Choose a tag to compare

@github-actions github-actions released this 09 Jun 17:40

v0.2.1 — IOA 集成重构 + AI 驱动监听

适配 IOA v0.1.0 的统一架构。核心变更:多 Agent 协作从自动推送切换为 AI 主动监听。

Breaking Changes

  • --ai 标志移除 — scan 命令不再支持 --ai 兼容别名。使用 --verify=high --sniper 替代
  • IOA build tag 移除 — 不再需要 -tags sqlite。SQLite、MCP、Auth 始终内置

IOA 协作

AI 驱动的实时监听(替代 push-to-inbox)

旧模式:swarm.Node 自动订阅 SSE → 消息推入 Agent inbox → 打断当前工作流

新模式:AI 自主决定何时监听、监听什么:

# 通过 tmux 启动后台监听(整个 space)
ioa read -s <space_id> --listen --token <token>

# 监听特定 thread(仅关联消息)
ioa read -s <space_id> -m <root_id> --listen --token <token>

# AI 主动查看新消息
tmux peek <session>

侵入性更低——AI 拉取而非被推送,自行控制注意力分配。

方向遍历

ioa_read 新增 --direction 参数,支持单向图查询:

  • --direction downstream — 仅获取后代(root 之后的所有回复)
  • --direction upstream — 仅获取祖先(回溯到 root)

IOA 内置 Server 简化

  • --ioa-db ./ioa.db 持久化(默认),--ioa-db :memory: 内存模式,无需 build tag 切换
  • MCP endpoint(/mcp)始终可用,兼容 Claude / Cursor 等 MCP 客户端
  • 认证通过 --access-key 配置即启用

ioa_send 支持 content_type

ioa_send 新增 --content_type 参数,允许设置消息信封的协议标识(checkpoint / handoff / swarm / team)。

Scan 更新

  • --ai 移除 — 不再作为 --verify=high --sniper 的兼容别名。直接使用具体的 AI skill 标志:--verify--sniper--deep

Skill 更新

  • ioa/SKILL.md — 新增 Background Monitoring 段落:--listen + tmux 后台监听用法;新增 --direction 过滤文档
  • ioa/swarm.md — 加入空间监听步骤,工作阶段从轮询改为 tmux peek

文档

  • README — 更新 scan 示例,使用 --verify/--sniper/--deep 替代 --ai
  • usage.md — 大幅扩充:新增 katana/passive 章节、--trace 调试、-F/--format 资产报告、subagent 用法、--proxy/--llm-proxy 配置
  • quickstart.md — 更新安装和快速上手示例
  • configuration.md — 移除已弃用的 vision 配置段(已合并至 provider 层)

CI

  • Nightly — 自动清理 7 天以上的旧 nightly 构建,发布时不再创建 draft

Full Changelog: v0.2.0...v0.2.1

v0.2.0 — Playwright 浏览器引擎 + Agent/Skill/Pipeline 全面重构

Choose a tag to compare

@github-actions github-actions released this 08 Jun 06:33

v0.2.0 — Playwright 浏览器引擎 + Agent/Skill/Pipeline 全面重构

本版本为架构级大版本更新(148 commits)。核心引入 Playwright 浏览器引擎、TMux 交互式终端、Proxy 代理管理、Passive Recon、Search 搜索等新工具模块,同时对 Agent / Tool / Skill / Scan Pipeline 四大子系统进行全面重构。

Breaking Changes

  • 构建标签统一browserrecon 两个独立 build tag 合并为单一 full tag。此前 -tags browser-tags recon 需改为 -tags full
  • `ioa` 独立二进制移除 — 不再单独发布 `ioa` 可执行文件,功能通过 `aiscan ioa` / `aiscan-full ioa` 子命令访问
  • 发布产物精简 — 每个平台仅产出两个二进制:`aiscan`(基础版)和 `aiscan-full`(含 passive / katana / playwright / sqlite)

Tool 更新

Playwright 浏览器引擎

全新 `pkg/tools/playwright` 模块替代旧 browser 模块,对标 playwright-cli 参数体系:

  • 交互式浏览器会话,支持 context flags / 状态查询 / save-storage / HAR 导出
  • 22 个高安全价值命令(autofill / dialog / navigation / discover 等),覆盖率 87%
  • Session Recorder — 录制浏览器操作自动生成 nuclei headless 模板
  • Headless Protocol Engine — 完整兼容 nuclei headless 模板规范(action / hijack / rules / expressions)

TMux 交互式终端

  • 统一 bash / tmux 执行层 + task manager,完整 PTY 支持
  • 后台执行和跨平台兼容
  • 支持多轮交互式会话,Agent 可通过 tmux 会话执行长时间任务

Proxy 代理管理

  • Clash 订阅解析,支持 trojan / vless / anytls / hy2 / ss 多协议
  • 代理池管理 + 节点选择
  • 与 scan pipeline 集成,支持 `--proxy` / `--llm-proxy` 独立配置

Passive Recon

  • 集成 projectdiscovery/uncover,支持 FOFA / Hunter 网络空间搜索引擎
  • Per-query 资产数量限制 + 独立代理配置
  • `aiscan-full passive` 子命令直接调用

Search & Web 工具

  • WebSearch — 网页搜索工具(Tavily),支持显式代理配置
  • WebFetch — 网页内容抓取
  • CyberhubSearch — CyberHub 资产搜索
  • Multimodal — vision 能力集成至 provider 层

工具系统重构

  • `pkg/scanner` → `pkg/tools`,所有工具通过 `init()` 自注册
  • `CommandRegistry` 工厂模式统一管理
  • 模板加载从 base64 切换至 `go:embed`

Agent 更新

Agent 系统重构

  • 统一 Agent 抽象 — 消除 InProcess / Subprocess 分裂,单一原子化 Agent
  • SubAgent 三模式 — task 内存化 + prompt 上下文注入
  • 模板化 Prompt — `SystemPromptFn` 动态生成 + skill 预加载
  • 统一 EventBus — 替代碎片化的 event / recording 系统
  • Per-turn Token 可观测性 — agent transcript + pipeline 生命周期 token 追踪
  • LLM Prompt Cache — Anthropic / OpenAI 协议统一缓存抽象

Skill 系统

  • YAML Frontmatter — skill 定义改为 frontmatter 索引 + 按需读取内容,启动更快
  • 多级加载 + 覆盖 — 支持 skill 分层加载与优先级覆盖

Scan Pipeline 更新

  • 基于订阅的 DAG Pipeline — 替代全局去重,事件驱动的扫描流程编排
  • 统一 AI Skill 插件架构 — 结构化录制 + scan 主动验证增强
  • Loot 类型统一 — `Finding` / `AISkill` / `CheckpointSink` 合并为 `Loot`
  • 统一 `-f` JSONL 输出格式
  • Katana crawl 集成

IOA & Swarm 更新

  • `protocols/` 动态应用层协议注册
  • Checkpoint 自动同步至 IOA Space
  • IOA 子命令 CLI
  • Swarm 多节点协作调度增强

其他更新

Web UI

  • 资产维度的 Web 扫描界面 + 深度分析视图
  • 扫描结果基于 loot schema 渲染

测试 & 验证

  • LLM-as-Judge — Intent 验证引擎,用 LLM 判定 agent 行为是否符合预期
  • Real-time Agent Monitor — 实时监控 agent 执行状态
  • 完整 CI 流水线:lint / tidy / coverage / generated-test / e2e / tool-tests

配置 & 构建

  • 配置提取:`core/config` + `core/runner` 从 `cmd` 独立
  • GoReleaser v2,构建产物精简为 base + full

Full Changelog: v0.1.0...v0.2.0