ji ruo
|
e33eedeb17
|
fix: preserve chat height when side panel is closed
|
2026-10-12 12:09:18 +08:00 |
|
ji ruo
|
a908eb28e4
|
fix: show explicit script toggle direction
|
2026-10-12 11:56:09 +08:00 |
|
ji ruo
|
a757ece8c3
|
fix: keep approval script details visible
|
2026-10-12 11:42:41 +08:00 |
|
ji ruo
|
86c376943f
|
fix: render approval details at intrinsic height
|
2026-10-12 11:26:49 +08:00 |
|
ji ruo
|
8b95ad1664
|
fix: prevent approval script panel clipping
|
2026-10-12 11:20:17 +08:00 |
|
ji ruo
|
9b0d1bdb3c
|
feat: expose scripts to review and add approval side chat
|
2026-10-12 11:06:38 +08:00 |
|
ji ruo
|
ee413324c8
|
docs(release): prepare v0.3.17
v0.3.17
|
2026-10-10 09:28:39 +08:00 |
|
RuoJi6
|
5f9d491681
|
Merge pull request #4 from RuoJi6/codex/schedule-date-range
支持计划任务日期范围与日历选择
|
2026-10-10 09:17:42 +08:00 |
|
ji ruo
|
0af7132ab7
|
修复计划暂停来源和时间线刷新
|
2026-10-10 09:16:28 +08:00 |
|
ji ruo
|
87e62fb904
|
支持计划任务批量选择操作
|
2026-10-10 09:01:21 +08:00 |
|
ji ruo
|
96a10878ad
|
重新设计计划任务运行时间线
|
2026-10-10 08:56:13 +08:00 |
|
ji ruo
|
8a1c9debbb
|
让立即运行直接恢复任务
|
2026-10-10 08:50:15 +08:00 |
|
ji ruo
|
8067f3286b
|
修复计划任务立即运行并区分状态颜色
|
2026-10-10 08:45:06 +08:00 |
|
ji ruo
|
a5cfec025f
|
固定显示计划任务时间线入口
|
2026-10-10 08:39:55 +08:00 |
|
ji ruo
|
e52fe67171
|
将计划任务改为字段表格展示
|
2026-10-10 00:47:14 +08:00 |
|
ji ruo
|
aed3062b4d
|
增加计划任务检索分页和时间线
|
2026-10-10 00:38:22 +08:00 |
|
ji ruo
|
30db68a86a
|
优化计划任务列表展示
|
2026-10-10 00:30:51 +08:00 |
|
ji ruo
|
98321d8262
|
支持计划任务日期范围
|
2026-10-09 23:50:05 +08:00 |
|
RuoJi6
|
6a2bba4637
|
Merge pull request #3 from RuoJi6/codex/scheduled-tasks
新增日历式计划任务
|
2026-10-09 23:21:06 +08:00 |
|
ji ruo
|
3254c90a03
|
新增日历式计划任务
|
2026-10-09 23:05:44 +08:00 |
|
ji ruo
|
9adbd54627
|
ci(release): allow replacing release when tag moves
v0.3.16
|
2026-10-09 14:11:39 +08:00 |
|
ji ruo
|
aca6e9a8fb
|
fix(ui): match folder task labels to existing table rows
|
2026-10-09 13:32:57 +08:00 |
|
ji ruo
|
012030b41d
|
fix(ui): align merged folders with existing columns and omit duplicate headers
|
2026-10-09 13:20:53 +08:00 |
|
ji ruo
|
ada09f6c1a
|
fix(ui): restore original controls and limit folders to merged findings
|
2026-10-09 13:12:54 +08:00 |
|
ji ruo
|
d36812b7e1
|
feat(findings): show consolidation across report task and asset views
|
2026-10-09 12:41:46 +08:00 |
|
ji ruo
|
d68594e81a
|
fix(ui): hide completed finding review history from findings page
|
2026-10-09 12:27:54 +08:00 |
|
ji ruo
|
7db7b71cdb
|
fix(findings): protect historical reports and verify consolidation results
|
2026-10-09 12:23:11 +08:00 |
|
ji ruo
|
71ec0f0efd
|
docs(release): prepare v0.3.16
|
2026-10-09 11:14:57 +08:00 |
|
RuoJi6
|
e77c3ae9a3
|
Merge pull request #2 from RuoJi6/codex/finding-folders
feat(findings): 同一漏洞重复上报归并与文件夹展示
|
2026-10-09 11:07:16 +08:00 |
|
RuoJi6
|
444cf6e50a
|
Merge pull request #1 from RuoJi6/codex/http-basic-auth
feat(auth): 添加可选的 HTTP Basic Auth 访问验证
|
2026-10-09 11:05:40 +08:00 |
|
ji ruo
|
24d4726aee
|
feat(findings): consolidate duplicate reports into expandable cases
|
2026-10-09 10:43:53 +08:00 |
|
ji ruo
|
ead58f0983
|
fix(auth): keep config persistence off the request lock
|
2026-10-09 10:39:58 +08:00 |
|
ji ruo
|
04c8c54ff8
|
feat(auth): add optional HTTP Basic Auth access gate
|
2026-10-09 10:12:27 +08:00 |
|
RuoJi6
|
979e1fe4eb
|
Update README.md
|
2026-10-09 09:26:37 +08:00 |
|
RuoJi6
|
735dd61564
|
Update README.md
|
2026-10-09 09:26:23 +08:00 |
|
ji ruo
|
a91b27feb7
|
fix(release): retain upstream version 0.3.15
v0.3.15
|
2026-10-09 09:03:33 +08:00 |
|
ji ruo
|
dfef372b64
|
feat(release): publish standalone repository and Docker Hub images
|
2026-10-09 09:01:25 +08:00 |
|
ji ruo
|
714b00cccb
|
feat(update): publish fork releases for online self-update
|
2026-10-09 08:45:33 +08:00 |
|
Autumn-27
|
e6ec569991
|
docs(changelog): 定版 0.3.15
|
2026-10-07 08:54:02 -04:00 |
|
Autumn
|
fd86f3ceca
|
Merge pull request #197 from Autumn-27/fix/auth-init-fail-open
fix: 密码初始化/登录接口在数据库读失败时 fail closed
|
2026-10-07 19:47:48 +08:00 |
|
Autumn-27
|
a951e4aad3
|
fix bug
|
2026-10-07 07:45:28 -04:00 |
|
Autumn
|
b55ceb1fdd
|
Merge pull request #191 from Autumn-27/feat/judge-token-usage
feat(intercept): 模型兜底审批单独计量 token 并在配置页展示
|
2026-10-04 14:43:54 +08:00 |
|
Autumn-27
|
86729b65dc
|
feat(intercept): 模型兜底审批单独计量 token 并在配置页展示
兜底审批(LLM judge)调模型判定漏网命令,其 token 消耗此前无法单独查看:
usage 行要么无 worker 归属、要么被并进复用的模型 profile 桶里。
- llmrec 增加 WithWorker 上下文覆盖,reviewer 调用前标注 worker='judge',
让审批调用的计量行可被单独筛出(复用现有 llm_usage.worker 列,无需迁移)。
- db.JudgeUsageStats 返回累计总量 + 近 N 天每日序列(WHERE worker='judge')。
- 新增 GET /api/intercept/judge/usage。
- 配置页「模型兜底审批」开关下方新增用量卡片:调用次数 / 输入 / 输出 /
缓存读写 五项统计 + 近 30 天每日消耗迷你柱图 + 刷新。
|
2026-10-04 02:43:26 -04:00 |
|
Autumn
|
d0033724a6
|
Merge pull request #189 from Autumn-27/fix/sse-same-origin
fix(web): SSE 活动流默认同源,修复反代部署连不上 :8787
|
2026-10-03 08:10:35 +08:00 |
|
Autumn-27
|
e2c8a23a98
|
fix(web): SSE 活动流默认同源,修复反代部署连不上 :8787
sseUrl() 原先无条件把 SSE 地址拼成 ${hostname}:8787,连生产静态导出
也带这个硬编码。反代到 443 的部署里页面从 https://域名/ 加载,SSE 却被
指向 https://域名:8787/...,而 8787 未对公网开放,导致活动流连不上、反复重连。
改为用 NODE_ENV 区分:生产默认同源(相对路径),仅 next dev 保留 :8787
以绕过 Next.js /api 反代对 SSE 的缓冲。NEXT_PUBLIC_SSE_BASE 覆盖口保留。
验证:NEXT_EXPORT=1 next build 后生产包里 :8787 分支已被 tree-shake。
补充 README 反向代理部署文档(同源说明 + nginx 关缓冲配置)。
Closes #169
|
2026-10-02 20:10:08 -04:00 |
|
Autumn
|
160fe13c24
|
Merge pull request #187 from Autumn-27/fix/notify-digest-and-mask
fix(notify): 汇总模式退化、目的地留空误判、SMTP 缺 SSRF 守卫
|
2026-10-01 19:00:43 +08:00 |
|
Autumn
|
314105e827
|
Merge pull request #185 from lucksec/feat/vuln-im-push
feat(notify): 漏洞发现支持推送到钉钉/飞书/企业微信等六种渠道
|
2026-10-01 18:58:50 +08:00 |
|
Autumn-27
|
5081d95b99
|
fix(notify): 邮件渠道的 SMTP 拨号补上 SSRF 守卫
emailDial 用的是裸 net.Dialer,没挂 blockInternalDial,Validate 也只检查
host 非空。于是 SMTP 是整套 SSRF 防护里唯一的缺口:host 填 169.254.169.254
或 127.0.0.1 能直接连上,而 smtp.NewClient 握手失败时会把对端返回的那一行
(textproto 的 short response)包进错误、经 last_error 由投递历史接口回显,
正是其它渠道已经关掉的半盲读原语;「连接被拒 vs 超时」的耗时差异还能
用来探测端口。
拨号阶段是最终生效点,也覆盖 DNS 重绑定,与 HTTP 系渠道共用同一道守卫。
RFC1918 私网继续放行,与 isBlockedDialIP 既有的取舍一致——内网自建 SMTP
中继是常见的合法部署。
这个缺口没有测试会发现:本包 TestMain 全局打开了 ARTEX_NOTIFY_ALLOW_LOCAL,
邮件用例无论守卫在不在都会通过。新增的两条用例自己清掉该变量,
并配一条反向用例确认显式放开后本机 SMTP 仍可投递。
|
2026-10-01 06:43:48 -04:00 |
|
Autumn-27
|
77834f0080
|
fix(notify): 目的地字段留空不应被判成地址变更
Telegram 渠道从第二次保存起会永久失败,用户什么都没改也存不上:
新建时 base_url 留空(用官方 API 地址),创建路径直接存下 base_url:""
→ 第一次保存,MergeConfig 把空串当显式清空、delete 掉该键
→ 第二次保存,前端照常提交 base_url:"",而 stored 里已经没这个键
→ sameConfigValue("", nil) 比较 `""` 与 `null`,判为不等 → changed=[base_url]
→ bot_token 是掩码回显值 → 400「目标地址已变更,请同时重新填写凭据字段」
此后每次保存都失败,除非重新粘贴一遍 Bot Token,而错误提示还把人
往「凭据有问题」上引。
根因是 MergeConfig 与 sameConfigValue 对「空」的口径不一致:前者认为
空串就是「该删掉这个键」,后者认为 "" 与键不存在是两个不同的值。
现在比较前先归一化,口径与 MergeConfig 的清空判定对齐。
这是上一轮修「改目标地址、保留凭据」那条凭据外发路径时引入的回归——
守卫本身是对的,只是把一个没变的空字段误判成了地址变更。配套用例覆盖了
两个方向的真实变更(空→自建反代、自建反代→空)仍必须要求重填 Token,
确认防护没有被削弱。
|
2026-10-01 06:43:48 -04:00 |
|
Autumn-27
|
93c1d39df3
|
fix(notify): 汇总模式按消息计量限流,批次大小不再被每轮请求预算掐死
令牌桶的额度此前被同时当成两个量纲用:对实时模式它是「发几条消息」,
对汇总模式却被直接当成「一批装几条漏洞」传给 ClaimDigestBatch。
notifyMaxSendsPerChannelPerTick(=5)是由租约时长倒推的 HTTP 请求预算,
而一个汇总批次只发一次请求,两者本不该相乘。稳态下更糟:rate_per_min=20
的渠道在 3 秒的 tick 里只补得到 1 个令牌,于是每条汇总消息只装 1 个漏洞,
头部还写着「近 30 分钟新增 1 个漏洞」——digest 退化成带汇总文案的实时推送,
MaxDigestBatchSize(500) 永不可达。
改为统一按**消息条数**计量:一批漏洞合成一条消息、消耗一个令牌,
rate_per_min 对 digest 依然生效(每分钟最多这么多条汇总消息),
而批次大小只受 MaxDigestBatchSize 这个内存上界约束。
ClaimDigestBatch 原先的注释声称「单批同时受限流额度与内存上界约束」,
那正是本问题的来源——限流额度本不该充当批次大小。注释一并改掉,
免得下次又按「rate_per_min 对 digest 不生效」把它改回去。
顺带让 takeTokens 接受 want 上限:原先整桶抽空后才由调用方截断,
多出来的令牌(飞书默认 100/min 时是 95 个)直接丢弃,渠道这一轮
没有待发投递时也照扣,注释声称的突发容量在任何情况下都做不到。
决策收在 digestTickPlan 里由新增用例直接钉住。现有端到端用例都手动给
stepDigest 传一个够大的 limit,绕过了 step 里的额度计算,所以覆盖不到这里。
|
2026-10-01 06:43:29 -04:00 |
|