Commit Graph

  • be5d067af9 auth_cache negative 缓存加上限防 DoS + relay/flared 删除重复 authenticateAccessToken 改用 agent 共享缓存版 ryan 2026-08-26 09:34:12 +08:00
  • 3e5f3cc562 autoresearch: 记录 #29-#38 实验日志(unconvert 修复、a11y 审计、未授权面安全修复) ryan 2026-08-26 09:11:03 +08:00
  • d73aa5f9f0 公开密码登录口按 IP 限制 10 分钟内最多 20 次失败,堵住未授权爆破。metric 持平 8。 ryan 2026-08-25 23:11:05 +08:00
  • c9fc9c0eea 公开 OAuth 登录/授权入口按会话限制 10 分钟内最多 20 个 state,堵住未授权 Redis 洪水。metric 持平 8。 ryan 2026-08-25 23:05:27 +08:00
  • cdc7474d7e 注册开关读取失败时改为关闭,堵住配置缺失时未授权开注册;OAuth 自动注册同样 fail-closed。metric 持平 8。 ryan 2026-08-25 22:59:20 +08:00
  • 983cce3e80 去掉公开 CAP 口硬编码默认密钥;SessionSecret 为空时拒绝签发/核销,防止未授权伪造 PoW。metric 持平 8。 ryan 2026-08-25 22:52:22 +08:00
  • 76e9d5b0e7 登录/注册/OAuth 回调统一走 SetLoginSession,保存前清空 Redis 会话 ID,堵住未授权会话固定。metric 持平 8。 ryan 2026-08-25 22:44:19 +08:00
  • 6b75706b8e 未授权登录口补哑 bcrypt 比较,用户不存在与密码错误耗时对齐;禁用账号不再返回不同文案,堵住用户枚举。metric 持平 8。 ryan 2026-08-25 22:30:37 +08:00
  • 59fd8cda7b 公开登录/注册邮箱验证码比较改为 SHA-256 后恒定时间 Compare,堵住未授权口的计时侧信道。metric 持平 8。 ryan 2026-08-25 22:21:01 +08:00
  • cb94081ebd 未授权 Agent 注册口的 discovery token 改为 SHA-256 后恒定时间比较,堵住计时侧信道;空 token / 末字节翻转用例同步补上。metric 持平 8。 ryan 2026-08-25 22:16:41 +08:00
  • 3de0a54d47 feat(a11y): 设置页无障碍审计并修复开关可访问名称 ryan 2026-08-17 00:02:51 +08:00
  • e7b8fb2f99 docs(i18n): 同步 24 篇旧英文文档与中文最新内容 ryan 2026-08-16 23:27:18 +08:00
  • 454542c1d0 docs(i18n): 恢复并补齐英文版 vitepress,README 默认改为英文 ryan 2026-08-16 23:18:29 +08:00
  • 580c51a73a refactor(i18n): ci ryan 2026-08-16 22:55:08 +08:00
  • 6b7df5a6b5 refactor(i18n): ci ryan 2026-08-16 22:51:06 +08:00
  • 497edfd564 refactor(i18n): fragments 为唯一源,主包改为生成物 ryan 2026-08-16 22:38:50 +08:00
  • d7d510ec97 chore(i18n): simplify cleanup and previewPublish labels in ops files ryan 2026-08-16 21:53:50 +08:00
  • f4ec58c0e6 Revert "chore(i18n): simplify cleanup and previewPublish labels in ops files" ryan 2026-08-16 21:53:23 +08:00
  • 2ba28417b3 chore(i18n): simplify cleanup and previewPublish labels in ops files ryan 2026-08-16 21:52:50 +08:00
  • 3f97193280 chore(docs): purge ryan 2026-08-16 21:44:28 +08:00
  • 2aa0a70762 chore(i18n): simplify cleanup and previewPublish labels in ops files ryan 2026-08-16 21:42:04 +08:00
  • 55c1fcd5f9 chore: format ryan 2026-08-16 21:39:25 +08:00
  • e5d2e4b6d5 fix(linux): cast stat.Bsize to int64 for accurate calculations ryan 2026-08-16 21:38:59 +08:00
  • 4f360cc7a9 Merge finalize branch: 03-frontend-any-cleanup ryan 2026-08-16 21:29:29 +08:00
  • da43de56ac Merge finalize branch: 02-axe-a11y-audit ryan 2026-08-16 21:29:29 +08:00
  • f538670e1f Merge finalize branch: 01-quality-sweep ryan 2026-08-16 21:29:29 +08:00
  • 2f60329886 后端与全仓代码质量清理(golangci 扩展集 · 测试质量 · 并发安全 · 文档同步) ryan 2026-08-16 21:23:37 +08:00
  • c76c5a697b 前端显式 any 类型清理 ryan 2026-08-16 21:23:38 +08:00
  • 9609bec8b0 前端 axe 可访问性审计 ryan 2026-08-16 21:23:37 +08:00
  • 9b89d3c630 Merge branch 'autoresearch/code-quality-2026-08-16' ryan 2026-08-16 21:15:13 +08:00
  • e87f445218 chore(quality): 记录 run #28 实验结果 ryan 2026-08-16 21:15:10 +08:00
  • 40eee778ac 前端显式 any 类型清理 2→0:Slot children?: any → ReactNode | MotionValue 联合(motion 真实类型),顺带修复潜在崩溃(原代码在 isValidElement 前访问 children.type,缺失时 TypeError,现无效 children 返回 null,hooks 无条件合规);useControlledState Rest extends any[] → unknown[]。两处 eslint-disable 注释删除。tsc/eslint/vitest 121 全绿。 ryan 2026-08-16 21:14:46 +08:00
  • 6c128e0be5 axe a11y 审计扩展到最复杂认证路径:注册页开启人机验证(CapWidget 自动求解→已通过状态 + 完整表单),mock getCapToken 避免 jsdom 无 Worker 环境限制。零违规。vitest 120→121 全绿。 ryan 2026-08-16 21:05:36 +08:00
  • 7d03154a8a axe a11y 审计扩展到登录 OTP 验证表单(input-otp 分段输入,FieldLabel htmlFor 正确关联,零违规)与人机验证小部件手动模式(零违规)。环境修复:tests/setup.ts 加 ResizeObserver mock(input-otp 依赖,jsdom 未内置)。vitest 118→120 全绿。 ryan 2026-08-16 20:58:24 +08:00
  • 7f8e257d33 前端真实 a11y 审计:新增 axe-core(devDep)+ tests/a11y.test.tsx,对登录页与注册页渲染完整表单后运行 axe 结构性规则(label/button-name/heading-order/landmark/aria),两页均零违规。摸清并处理了渲染依赖(UserProvider 会话检查、publicConfigQuery 门控、configBool 字符串语义)。vitest 116→118 全绿。 ryan 2026-08-16 20:49:55 +08:00
  • 4d78bc1c38 chore(quality): 会话收敛收尾 — 更新 prompt/ideas 记录最终状态 ryan 2026-08-16 20:15:08 +08:00
  • 1813bbdba3 chore(quality): checks.sh 增加 license-check 门禁(防 SPDX 头再缺失) ryan 2026-08-16 20:11:15 +08:00
  • aa4faddade 补齐 131 个 .go 文件的 SPDX license 头(repo 自带 make license 约定,早于约定新增的文件含 2 个生产文件;纯注释插入零行为影响),make license-check 转绿。go mod tidy -diff 确认干净。 ryan 2026-08-16 20:09:24 +08:00
  • ab70633e9f checks.sh 新增并发密集包 -race 门禁(8 个快速包,全仓 -race 清零后纳入防回归;frpc/frps 慢套件留作周期全量验证)。核查 7 处 t.Skip 均为合法环境门控。 ryan 2026-08-16 20:01:40 +08:00
  • e1b439d6a5 全仓 go test -race 扫描(93 包)→ 全绿。修复 6 类数据竞争:frpc/frps 测试的锁外读与并发 Wait;oauth/repository 4 个 Pub/Sub 监听器 goroutine 读可变包变量(局部捕获 + done 通道等待);oauth 测试换 db.Redis 前停监听器;【真实生产 bug】tls 响应快照与异步续签 goroutine 并发写 cert 竞争(先快照再起 goroutine);upload/cache 监听器 goroutine 内读 db.Redis(调用方捕获)。 ryan 2026-08-16 19:56:19 +08:00
  • 4962bf90d1 两处真实质量修复:(1) 过期 swagger 文档重新生成(status_2xx/4xx/5xx_count 字段随 a4dd5ca9 加入后未同步 docs,违反 repo 约定,swag init 后差异仅真实新增字段);(2) generate-themes.js 输出补尾换行,themes.json 构建可复现(此前每次 build 弄脏工作树)。验证 next build 成功、musttag/tagalign 调查无真实问题。 ryan 2026-08-16 19:19:04 +08:00
  • c455be3002 基准扩展第 5 维度(文档化):前端 vitest 失败数纳入 total_issues(vitest_failed=0, total=116)。5 维全部处于下限,total=8 不变。 ryan 2026-08-16 19:11:59 +08:00
  • ab0e5fecf2 chore(quality): 基准扩展第 5 维度 — 前端 vitest(全绿后纳入防回归) ryan 2026-08-16 19:09:58 +08:00
  • f5c9da03f4 前端测试套件 44 失败→全绿:10 个测试文件补 NextIntlClientProvider 包装(含 React19 createElement 类型修复、.ts→.tsx 重命名);修复真实 i18n ICU bug(githubUrlInvalid 的 {owner}/{repo} 未转义导致生产渲染成 key,zh/en + fragment 4 文件同步转义);更新 2 处过期测试期望。vitest 116/116 + tsc + eslint 全绿,checks.sh 增加前端测试门禁。 ryan 2026-08-16 19:08:21 +08:00
  • a16be014d4 修复 frpc 进程生命周期真 bug(agent 生产代码):exec.CommandContext 默认只杀直接子进程,被杀 shell 的孤儿 sleep 继续持有 stderr 管道,cmd.Wait() 阻塞到其自然退出(Stop/重启可挂起秒级)。改 Setpgid 进程组 + Kill(-pid) 整组击杀。连带修复两个测试 bug(Manager 拥有 Cmd 的并发 Wait 竞态 → Signal(0) 探测;ssl_renew 用 miniredis 替代 init() 创建的真实 redis 客户端)。go test ./internal/... ./pkg/... 全绿,checks.sh 升级为真实测试门禁。 ryan 2026-08-16 18:47:46 +08:00
  • c85373ff47 unparam 死代码清理 12→2(保留 2 处 objectstore 构造函数统一签名):移除 10 处恒 nil error / 从未使用的结果(getPoWConfigForRoute 的恒 nil *PoWConfig、getSQLiteOverview/getPostgresOverview/getStatus/loadKumaConfig/filterExpectedRoutes 的恒 nil error、rawJSONString/parsePositiveInt 的弃用 bool、buildProxyRoute 的弃用 []ZoneDomain、getLocked 的恒 nil error),同步简化 12+ 处调用方与死错误检查。9 个受影响包测试通过。metric 持平 8(改进在基准之外)。 ryan 2026-08-16 18:29:51 +08:00
  • d7b8f44f90 修复 geoip/runtime.go 真死代码:ensureServerMMDB 的 os.Stat 错误被 if-init 遮蔽,err != nil && !os.IsNotExist(err) 恒为 false(外层 err 恒 nil),防御检查从未生效;改为显式捕获 statErr,stat 非 not-exist 错误现在正确返回。基准新增第 4 维度 govet nilness+unusedwrite(文档化扩展),当前 0。 ryan 2026-08-16 18:25:49 +08:00
  • 85321888e0 chore(quality): 会话收尾 — 更新 prompt/ideas 记录 14 个实验结论与刻意保留项 ryan 2026-08-16 18:21:01 +08:00
  • 65c02ef7a5 基准扩展 exhaustive(文档化)+ 12→0:枚举 switch 补显式 case(全部与现有 default 行为等价,fail-explicit 防未来枚举静默落入 default);source_tasks.go 为控制复杂度合并两个等价校验条件。 ryan 2026-08-16 18:19:08 +08:00
  • 63a24da9ee 测试代码质量 25→0:assert↔require 一致性(fail-fast)、float 精确比较→InDelta、Equal("",x)→Empty、Equal(len)→Len、errors.Is/As→ErrorIs/ErrorAs、JSON 字符串→JSONEq、handler goroutine 内 require→assert(真健壮性修复)、t.Helper()、os.MkdirTemp→t.TempDir()(符合 repo AGENTS 约束)。 ryan 2026-08-16 18:12:58 +08:00
  • e5f6b0ad90 基准扩展(文档化):新增测试代码质量维度 25 处(testifylint 20 + thelper 3 + usetesting 2),生产代码 8 处刻意保留不变。新基线 total=33。 ryan 2026-08-16 18:05:44 +08:00
  • 111d2900d7 eslint 1→0:pages-source-card useEffect 补 t 依赖(next-intl 稳定引用)。modernize 补 1 处 time.Time omitzero。剩余 8 全部为刻意保留项。 ryan 2026-08-16 18:02:58 +08:00
  • 73d8173018 recvcheck 7→1:6 个 GORM 模型 TableName 改为指针接收者(GORM 源码确认 reflect.New 判定 Tabler,兼容;模型单测通过)。MillisecondDuration 刻意保留(encoding/json 要求 Marshal 值/Unmarshal 指针的混合)。 ryan 2026-08-16 18:00:45 +08:00
  • 4ecec2cf1b forcetypeassert 6→0(缓存 list 断言、relay/flared 中间件契约断言、图片压缩 flight 断言,全部带检查+安全失败路径);errname 1→0;prealloc 2 处(另 1 处与 repo mnd 冲突,用命名常量解决)。nilnil 保留(not-found/可选结果惯例,含接口契约注释)。 ryan 2026-08-16 17:58:03 +08:00
  • 86fad02c41 errorlint 12→1:3 处 cmd 入口 err!=context.Canceled→errors.Is(防御性,当前 runner 不 wrap 语义不变);2 处 strconv.NumError 断言、1 处 viper 断言、2 处 ==io.EOF、2 处 ==redis.Nil、1 处 ==gorm.ErrRecordNotFound→errors.As/Is;8 处 %v→%w 保留错误链。刻意保留 telegram.go 单处 %v(原始错误仅作上下文文本,wrap 会改变 errors.Is 匹配语义)。 ryan 2026-08-16 17:52:03 +08:00
  • 600a7acdfb docs: 核查并润色文档,对齐项目实际实现 ryan 2026-08-16 17:49:57 +08:00
  • 288b74d104 intrange 3→0 + modernize 5→3:for i:=0;i<len/N;i++ → range len/N(8 处);time.Time 字段 omitempty→omitzero(wire 输出一致);SplitSeq;min() 简化。刻意保留 lark.go omitzero(会改变 wire 行为)。 ryan 2026-08-16 17:47:09 +08:00
  • ce28f63659 wastedassign 7→0:删除 7 处死初始化(snapshot.go 三连、push 三件套 content、format.go numStr),改 var 声明,零行为变化。 ryan 2026-08-16 17:44:45 +08:00
  • d0414b402a canonicalheader 8→0 + usestdlibvars 3→0:header key 改为 Go 规范大小写(wire 格式本就如此,纯代码修正)、HTTP 方法常量替代字符串字面量。 ryan 2026-08-16 17:38:18 +08:00
  • 699e95f12c perfsprint 18→0:strconv.Itoa/FormatInt/FormatUint/FormatBool 替代 fmt.Sprintf、无动词 fmt.Errorf→errors.New、纯字符串拼接。全部语义等价(已核对 diff)。修正 fixer 遗留的 import 问题(引入 goimports 统一整理)。 ryan 2026-08-16 17:34:44 +08:00
  • 4e3d79c001 fix(frontend): 修复 useEffect 缺失依赖导致 code-check 失败 ryan 2026-08-16 17:29:14 +08:00
  • 5aaaf8f197 fix(frontend): 修复静态导出下切换语言无效的问题 ryan 2026-08-16 17:29:14 +08:00
  • b76f707c8b modernize 37→5(-32):interface{}→any、内置 max/min、slices/maps 辅助、strings.Cut/SplitSeq、strings.Builder(修复 mail.go O(n²) 拼接)。逐 hunk 核对语义等价;omitzero 冲突修复被自动跳过(wire 格式不变);手动清 4 处遗留 sort import + 2 处 QF1012。 ryan 2026-08-16 17:28:22 +08:00
  • f1f6bb858a 修复 internal/apps/edge/observability/linux.go 的 2 个 gosec G115 整数溢出转换:helper 改为接收 int64 b,用 gosec 认可的饱和乘法模式(uint64 域乘积 + 上界比较),去掉原 //nolint:gosec,语义不变(Bsize 恒为正)。repo 自带 gate 首次全绿。 ryan 2026-08-16 17:21:04 +08:00
  • 305d609d0d chore(quality): 启动代码质量 autoresearch 会话 ryan 2026-08-16 17:10:28 +08:00
  • 5a8722ff07 feat(frontend): 控制台 next-intl 中英双语 ryan 2026-08-16 16:49:16 +08:00
  • b66cf3ae9c feat(log): PG 分区清理与 logstore import-lint ryan 2026-08-16 16:48:15 +08:00
  • a8fcf6087a chore(message-gateway): swagger and format ryan 2026-08-16 12:27:03 +08:00
  • 30acdb91e8 feat(message-gateway): add profile bot pairing card ryan 2026-08-16 12:23:44 +08:00
  • 124ce9bebb feat(message-gateway): add admin channel cards and per-type forms ryan 2026-08-16 12:22:28 +08:00
  • 635c1760ad feat(message-gateway): add user bind and unbind APIs ryan 2026-08-16 12:19:32 +08:00
  • 69d39d906f feat(message-gateway): add admin channel CRUD APIs ryan 2026-08-16 12:17:05 +08:00
  • 09ec9d0af3 feat(message-gateway): run adapters on worker and handle pairing inbound ryan 2026-08-16 12:14:17 +08:00
  • 7ca6dbe272 feat(message-gateway): add QQ official C2C botgo adapter ryan 2026-08-16 12:10:15 +08:00
  • ef97ca5c7e feat(message-gateway): add Telegram private-chat telebot adapter ryan 2026-08-16 12:06:03 +08:00
  • cc86370e50 feat(message-gateway): emit message_gateway.inbound domain events ryan 2026-08-16 12:04:55 +08:00
  • 60afdf7c7b feat(message-gateway): add channel, binding, and pairing repositories ryan 2026-08-16 12:04:14 +08:00
  • 9b1ef1cf7f feat(message-gateway): add w_message_* models and goose migrations ryan 2026-08-16 12:03:23 +08:00
  • 8ea4c7e13e feat(message-gateway): add channel types, registry, and pairing codes ryan 2026-08-16 12:01:52 +08:00
  • a4db79e9bd chore: ignore local git worktrees directory ryan 2026-08-16 12:00:42 +08:00
  • 8b1eb9ca0d docs(message-gateway): add Wavelet message gateway implementation plan ryan 2026-08-16 11:59:59 +08:00
  • e36db8a56c docs(message-gateway): add Wavelet inbound channel gateway design spec ryan 2026-08-16 11:55:57 +08:00
  • 37d5a87c9b chore: docs ryan 2026-08-16 11:32:46 +08:00
  • 64fbaa7ef1 chore: docs ryan 2026-08-16 11:32:13 +08:00
  • e52592b16d feat(log): 解耦用户访问日志存储,支持切换日志主库 ryan 2026-08-16 11:17:55 +08:00
  • 6a53619dd2 feat(framework): 回灌 OpenFlare 分层、安全与运行时改进 ryan 2026-08-16 11:07:20 +08:00
  • fa689aedbc feat(sync): 同步 Wavelet 推送审计、OTel schema 与前端字体 ryan 2026-08-16 11:06:54 +08:00
  • b9b42e3174 ci: make canary ryan 2026-08-16 10:13:39 +08:00
  • 20830d31bd chore: guideline ryan 2026-08-16 10:01:56 +08:00
  • f960511cc0 chore(release): v3.5.3 v3.5.3 ryan 2026-08-13 11:36:44 +08:00
  • 465440fa5b fix(access-logs): 修复状态码自定义 ryan 2026-08-13 11:29:15 +08:00
  • a4dd5ca9e1 feat(dashboard): 首页请求趋势拆分状态码并合并容量到业务流量 ryan 2026-08-13 10:57:21 +08:00
  • a9e4237bbf feat(access-logs): 状态码支持手动输入,新增时间范围筛选 ryan 2026-08-13 10:27:40 +08:00
  • 75d1fcf345 feat(access-logs): 日志明细支持按状态码筛选并折叠次要搜索项,修复首页来源分布无数据 ryan 2026-08-13 09:59:32 +08:00
  • 284eec54f7 chore: guideline ryan 2026-08-12 12:40:06 +08:00
  • a3ad0d2c97 chore: rename .agent to .agents and update skill path references ryan 2026-08-12 12:39:15 +08:00
  • 92322c7a22 feat(push): log upstream webhook response in task history ryan 2026-08-12 12:22:09 +08:00
  • f499645cdc chore: guideline ryan 2026-08-12 12:02:14 +08:00
  • f1577bf092 fix(openresty): 修复源站错误页「仅针对 GET 请求」覆盖非 GET 原始报错数据 ryan 2026-08-09 19:38:44 +08:00
  • 01ed2c5e36 chore(release): v3.5.2 v3.5.2 ryan 2026-08-09 14:08:04 +08:00