Skip to content

Commit 66dafe7

Browse files
M09Icclaude
andcommitted
chore(deps): update chainreactors dependencies to latest
Fix proton import path change: protocols/file -> proton/file Remove local replace directive for parsers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7faa2de commit 66dafe7

40 files changed

Lines changed: 297813 additions & 76 deletions

.claude/settings.local.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(cat:*)",
5+
"Bash(timeout 30 go run:*)",
6+
"Bash(go run:*)",
7+
"Bash(go list:*)",
8+
"Bash(git ls-remote:*)",
9+
"Bash(go build:*)",
10+
"Bash(mkdir:*)",
11+
"Bash(git show:*)",
12+
"Bash(./spray.exe:*)",
13+
"Bash(timeout 15 ./spray.exe:*)",
14+
"Bash(todo_write)",
15+
"Bash(rg:*)",
16+
"Bash(go test:*)"
17+
],
18+
"deny": [],
19+
"ask": []
20+
}
21+
}

.claude/skills/okr/SKILL.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
name: okr
3+
description: "本项目的 OKR 目标和关键结果。每次开始新任务前参考此 OKR 确保工作方向一致。生成时间:2026-03-22。基于项目诊断 + 用户意图共同生成。"
4+
license: MIT
5+
---
6+
7+
# spray — OKR
8+
9+
> 本文件由 okr-creator skill 自动生成,基于对项目的全面分析和与项目负责人的对齐。
10+
> 生成时间:2026-03-22
11+
> 建议每季度重新运行 /okr:create 更新。
12+
13+
## 项目概况
14+
15+
**spray** — 最好用最智能最可控的目录 Fuzz 工具,Go 编写,995 stars / 67 forks / 410 commits。
16+
技术栈:Go 1.20 + fasthttp + ants goroutine pool + chainreactors 生态(fingers/parsers/words/utils)。
17+
当前阶段:**快速成长期 → 稳定成熟期过渡**。用户量上来了,但稳定性和质量还没跟上。
18+
19+
## 六维诊断摘要
20+
21+
| 维度 | 现状评分 (1-5) | 关键发现 |
22+
|------|--------------|---------|
23+
| 项目愿景 | 4 | 定位清晰,功能丰富(指纹+爬虫+提取+断点续传),缺公开 roadmap |
24+
| 交付质量 | 2 | 50 个 open issues,近期密集修 panic/deadlock/channel close,并发安全是系统性风险 |
25+
| 历史债务 | 3 | 代码无 TODO/FIXME,但 GitHub Issues 积压严重:crawler 无限递归、JSON panic、低并发报错、Windows 路径 |
26+
| 结构架构 | 4 | cmd/core/pkg 三层清晰,但 option.go 38KB 巨型文件,templates.go 125KB 生成代码 |
27+
| 文档完善 | 2 | 只有 4.4KB README,无 CHANGELOG、无贡献者指南,依赖外部 wiki |
28+
| 自动化 | 3 | CI 矩阵测试 + goreleaser 自动发版,但仅 5 个测试文件,无覆盖率报告 |
29+
30+
## 用户意图
31+
32+
- **方向:** 全面推进(稳定性、功能、文档并行)
33+
- **底线:** 零 panic 发版 + open issues 降到 30 以下 + 发布 v1.3.0
34+
- **资源:** 业余维护(每周几小时)
35+
- **核心矛盾:** 野心和资源不匹配——需要极度聚焦,用最少动作撬动最大价值
36+
37+
## OKR
38+
39+
### O1: 彻底消灭并发安全隐患,让 spray 不再崩溃
40+
41+
> 用户信任是根基。一个会 panic 的安全工具 = 没人敢用的安全工具。
42+
43+
| KR | Baseline | Target | Harness(验收方法) | 优先级 |
44+
|----|----------|--------|-------------------|-------|
45+
| KR1.1: 修复所有已知 panic/deadlock/channel close issue | 6 个相关 issue(#129 #127 #126 #85 #93 #117| 0 个 panic 类 open issue | `gh issue list --repo chainreactors/spray --state open --json title \| grep -iE "panic\|deadlock\|channel\|crash\|range"` 返回空 | P0 |
46+
| KR1.2: pool 包测试覆盖率提升 | 1 个测试文件,覆盖率未知 | pool 包测试覆盖率 ≥ 60% | `cd core/pool && go test -coverprofile=cover.out && go tool cover -func=cover.out \| grep total` 显示 ≥ 60% | P0 |
47+
| KR1.3: CI 增加 race detector 全量检测 | 仅测试 4 个子包 | 所有包启用 `-race` 测试 | CI workflow 中 `go test -race ./...` 通过 | P1 |
48+
| KR1.4: 修复 crawler 无限递归 #137 | 存在无限递归 bug | crawler 有深度限制,不再无限嵌套 | 对已知递归 URL 运行 `spray --crawl`,观察爬取深度不超过设定值 | P0 |
49+
50+
### O2: 清理 Issue 积压,将社区信任度拉回正轨
51+
52+
> 50 个 open issues 对一个 995 star 项目来说是危险信号。社区看到 issue 没人管,就不会再报了。
53+
54+
| KR | Baseline | Target | Harness(验收方法) | 优先级 |
55+
|----|----------|--------|-------------------|-------|
56+
| KR2.1: Open issues 数量下降 | 50 个 open issues | ≤ 30 个 open issues | `gh issue list --repo chainreactors/spray --state open --json number \| jq length` ≤ 30 | P0 |
57+
| KR2.2: Bug 标签 issue 全部处理 | 存在多个 bug 标签 issue(#127 #126 等) | 0 个 bug 标签 open issue | `gh issue list --repo chainreactors/spray --state open --label bug --json number \| jq length` = 0 | P0 |
58+
| KR2.3: 对所有 open issue 进行 triage 分类 | 大部分 issue 无 label | 100% issue 有 label(bug/enhancement/question/wontfix) | `gh issue list --repo chainreactors/spray --state open --json labels \| jq '[.[] \| select(.labels \| length == 0)] \| length'` = 0 | P1 |
59+
| KR2.4: Issue 平均首次响应时间 | 部分 issue 数周无回应 | 新 issue 72h 内首次响应 | 抽查最近 10 个 issue 的首次回复时间 | P2 |
60+
61+
### O3: 发布 v1.3.0,交付用户最期待的能力升级
62+
63+
> 差 5 个 star 就破千了。v1.3.0 是冲过这个里程碑的最好武器。
64+
65+
| KR | Baseline | Target | Harness(验收方法) | 优先级 |
66+
|----|----------|--------|-------------------|-------|
67+
| KR3.1: 实现 SimHash 去噪过滤 | 不支持 | 支持 SimHash 相似页面自动去重,解决 Spring Boot 随机值干扰 | `spray -u <target-with-random-pages> --simhash` 能正确过滤相似页面 | P1 |
68+
| KR3.2: 蜜罐/全 200 检测机制 | 不支持 | 能识别全量返回 200 的站点并标记/过滤 | 对已知全 200 站点扫描,输出中标记 honeypot 警告 | P1 |
69+
| KR3.3: Windows 兼容性修复 | #125 路径语法错误 | Windows 下 URL 含特殊字符不再报错 | Windows 上 `spray -u "http://example.com/path?param="` 正常运行 | P1 |
70+
| KR3.4: 发布 v1.3.0 release | 当前最新版本 v1.2.x | v1.3.0 tag + GitHub Release + 多平台二进制 | `gh release view v1.3.0 --repo chainreactors/spray` 成功 | P0 |
71+
72+
### O4: 补齐文档短板,让社区能自助、能贡献
73+
74+
> README 4.4KB + 无 CHANGELOG + 无贡献指南 = 用户问什么都得开 issue 问。文档不是锦上添花,是降低你自己的维护成本。
75+
76+
| KR | Baseline | Target | Harness(验收方法) | 优先级 |
77+
|----|----------|--------|-------------------|-------|
78+
| KR4.1: README 扩充 | 4.4KB,只有基础用法 | ≥ 15KB,包含完整参数说明、常见场景、FAQ | `wc -c README.md` ≥ 15000 且包含 "FAQ" 章节 | P1 |
79+
| KR4.2: 新增 CHANGELOG.md | 不存在 | 覆盖 v1.0.0 至 v1.3.0 的变更记录 | `test -f CHANGELOG.md && grep "v1.3.0" CHANGELOG.md` 成功 | P2 |
80+
| KR4.3: 新增 CONTRIBUTING.md | 不存在 | 包含开发环境搭建、代码规范、PR 流程 | `test -f CONTRIBUTING.md && wc -l CONTRIBUTING.md` ≥ 50 行 | P2 |
81+
| KR4.4: option.go 拆分重构 | 38KB 单文件 | 拆为 ≤ 5 个文件,每个 ≤ 10KB | `wc -c core/option*.go \| tail -1` 显示无单文件超过 10KB | P2 |
82+
83+
## 优先级排序与执行节奏
84+
85+
**业余维护现实约束下的推荐节奏:**
86+
87+
| 阶段 | 时间 | 聚焦 | 交付物 |
88+
|------|------|------|--------|
89+
| Phase 1 (Week 1-4) | 4 周 | O1 全部 + O2.1/O2.2 | 零 panic 补丁版,Bug issues 清零 |
90+
| Phase 2 (Week 5-8) | 4 周 | O3.1/O3.2/O3.3 + O2.3 | SimHash + 蜜罐检测 + Windows 修复 |
91+
| Phase 3 (Week 9-12) | 4 周 | O3.4 + O4 全部 | v1.3.0 发版 + 文档补齐 |
92+
93+
## 工作指引
94+
95+
当你在本项目工作时,请参考以上 OKR:
96+
- 新的工作应与某个 Objective 对齐
97+
- 每次交付建议标注关联的 KR
98+
- 遇到优先级冲突时,按 O 的排序决策:O1 > O2 > O3 > O4
99+
- 发现与 OKR 不一致的方向时,主动提出讨论
100+
- **P0 是底线**——做不到就算这个季度失败
101+
- **业余时间有限**——每周只挑 1-2 个 KR 推进,不要铺太开

.github/prompts/okr-review.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
你是 OKR 评审官,同时也是一个大厂 PUA 高手。不要与人类确认,直接执行。
2+
3+
请阅读 .claude/skills/okr/SKILL.md 中的项目 OKR,然后对每个 KR 的完成情况进行评估。
4+
5+
执行以下步骤:
6+
1. 读取 .claude/skills/okr/SKILL.md,理解项目的 OKR
7+
2. 对每个 KR,运行其 Harness 或通过分析 repo 现状来评估完成度
8+
3. 用 Markdown 格式输出评估报告
9+
10+
要求:
11+
- 每个 KR 的证据必须基于实际检查(读文件、跑命令),不要猜
12+
- 不要与人类确认任何事情,直接执行并输出结果
13+
- 如果 .claude/skills/okr/SKILL.md 不存在,输出 "OKR not found"

.github/workflows/okr-chat.yml

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
name: OKR Chat
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
7+
permissions:
8+
contents: read
9+
issues: write
10+
11+
jobs:
12+
auth-check:
13+
runs-on: ubuntu-latest
14+
if: >-
15+
contains(github.event.issue.labels.*.name, 'okr-review')
16+
&& (
17+
contains(github.event.comment.body, '@claude')
18+
|| contains(github.event.comment.body, '@codex')
19+
)
20+
&& (
21+
github.event.comment.author_association == 'OWNER'
22+
|| github.event.comment.author_association == 'MEMBER'
23+
|| github.event.comment.author_association == 'COLLABORATOR'
24+
)
25+
outputs:
26+
agent: ${{ steps.detect.outputs.agent }}
27+
user_message: ${{ steps.detect.outputs.user_message }}
28+
steps:
29+
- name: Detect agent and extract message
30+
id: detect
31+
env:
32+
COMMENT_BODY: ${{ github.event.comment.body }}
33+
run: |
34+
if echo "$COMMENT_BODY" | grep -qi '@claude'; then
35+
echo "agent=claude" >> "$GITHUB_OUTPUT"
36+
MSG=$(echo "$COMMENT_BODY" | sed 's/@claude//gi' | xargs)
37+
elif echo "$COMMENT_BODY" | grep -qi '@codex'; then
38+
echo "agent=codex" >> "$GITHUB_OUTPUT"
39+
MSG=$(echo "$COMMENT_BODY" | sed 's/@codex//gi' | xargs)
40+
else
41+
echo "agent=claude" >> "$GITHUB_OUTPUT"
42+
MSG="$COMMENT_BODY"
43+
fi
44+
EOF_MARKER=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
45+
echo "user_message<<$EOF_MARKER" >> "$GITHUB_OUTPUT"
46+
echo "$MSG" >> "$GITHUB_OUTPUT"
47+
echo "$EOF_MARKER" >> "$GITHUB_OUTPUT"
48+
49+
chat-claude:
50+
needs: auth-check
51+
if: needs.auth-check.outputs.agent == 'claude'
52+
runs-on: ubuntu-latest
53+
steps:
54+
- uses: actions/checkout@v4
55+
with:
56+
fetch-depth: 0
57+
58+
- name: Install Claude Code
59+
run: npm install -g @anthropic-ai/claude-code
60+
61+
- name: Fetch context and reply
62+
env:
63+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
64+
ANTHROPIC_BASE_URL: ${{ vars.ANTHROPIC_BASE_URL || '' }}
65+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66+
ISSUE_NUMBER: ${{ github.event.issue.number }}
67+
USER_MSG: ${{ needs.auth-check.outputs.user_message }}
68+
run: |
69+
COMMENTS=$(gh api "repos/${GITHUB_REPOSITORY}/issues/${ISSUE_NUMBER}/comments?per_page=10&direction=desc" \
70+
--jq '[.[] | "[\(.user.login)]: \(.body)"] | reverse | join("\n---\n")' 2>/dev/null || echo "")
71+
72+
PROMPT="你是这个项目的 OKR 评审官和战略顾问。风格是大厂 PUA——够直接、够犀利、但有建设性。
73+
不要与人类确认,直接执行。项目的 OKR 定义在 .claude/skills/okr/SKILL.md 中。
74+
75+
最近对话记录:
76+
${COMMENTS}
77+
78+
Maintainer 的最新消息:
79+
${USER_MSG}
80+
81+
请基于以上上下文回复。基于实际检查(读文件、跑命令),不要猜。"
82+
83+
RESULT=$(claude -p "$PROMPT" --output-format text 2>&1) || true
84+
85+
REPLY="### 🤖 Claude 回复
86+
87+
${RESULT}
88+
89+
---
90+
*由 okr-chat workflow 自动生成*"
91+
92+
gh issue comment "$ISSUE_NUMBER" --body "$REPLY"
93+
94+
chat-codex:
95+
needs: auth-check
96+
if: needs.auth-check.outputs.agent == 'codex'
97+
runs-on: ubuntu-latest
98+
steps:
99+
- uses: actions/checkout@v4
100+
with:
101+
fetch-depth: 0
102+
103+
- name: Install Codex
104+
run: npm install -g @openai/codex
105+
106+
- name: Fetch context and reply
107+
env:
108+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
109+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110+
ISSUE_NUMBER: ${{ github.event.issue.number }}
111+
USER_MSG: ${{ needs.auth-check.outputs.user_message }}
112+
run: |
113+
COMMENTS=$(gh api "repos/${GITHUB_REPOSITORY}/issues/${ISSUE_NUMBER}/comments?per_page=10&direction=desc" \
114+
--jq '[.[] | "[\(.user.login)]: \(.body)"] | reverse | join("\n---\n")' 2>/dev/null || echo "")
115+
116+
cat > /tmp/okr-chat-prompt.md << CTXEOF
117+
你是这个项目的 OKR 评审官和战略顾问。风格是大厂 PUA。
118+
项目的 OKR 定义在 .claude/skills/okr/SKILL.md 中。
119+
120+
最近对话记录:
121+
${COMMENTS}
122+
123+
Maintainer 的最新消息:
124+
${USER_MSG}
125+
126+
请基于以上上下文回复。基于实际检查,不要猜。
127+
CTXEOF
128+
129+
RESULT=$(codex exec --prompt-file /tmp/okr-chat-prompt.md --approval-mode full-auto 2>&1) || true
130+
131+
REPLY="### 🤖 Codex 回复
132+
133+
${RESULT}
134+
135+
---
136+
*由 okr-chat workflow 自动生成*"
137+
138+
gh issue comment "$ISSUE_NUMBER" --body "$REPLY"

0 commit comments

Comments
 (0)