#528 by GitHub stars
autoclaw-cc/xiaohongshu-skills
xiaohongshu-skills
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b043748282a5 → b043748282a5
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b043748282a5
No earlier version was observed for comparison.
skills/xhs-auth/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
b043748282a5 → b043748282a5
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → b043748282a5
No earlier version was observed for comparison.
skills/xhs-content-ops/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
b043748282a5 → b043748282a5
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → b043748282a5
No earlier version was observed for comparison.
skills/xhs-explore/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
b043748282a5 → b043748282a5
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → b043748282a5
No earlier version was observed for comparison.
skills/xhs-interact/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Local scripts
b043748282a5 → b043748282a5
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → b043748282a5
No earlier version was observed for comparison.
skills/xhs-publish/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b043748282a5 → b043748282a5
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b043748282a5
No earlier version was observed for comparison.
Verified commit b043748282a57e347c52f517dfb59819121134ab
git clone --filter=blob:none --no-checkout https://github.com/autoclaw-cc/xiaohongshu-skills.git .hotskills/autoclaw-cc-xiaohongshu-skills && git -C .hotskills/autoclaw-cc-xiaohongshu-skills checkout --detach b043748282a57e347c52f517dfb59819121134ab
# Copy each selected skill directory from .hotskills/autoclaw-cc-xiaohongshu-skills into .claude/skills/<skill-name>/Heat
5.6- Star growth, last 7 daysAhead of 86% of tracked repositories
- Star growth, last 24 hoursAhead of 73% of tracked repositories
- Rank movement, last 7 daysAhead of 57% of tracked repositories
- Commits, last 30 daysAhead of 0% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- xiaohongshu-skills
/ - xhs-auth
skills/xhs-auth - xhs-content-ops
skills/xhs-content-ops - xhs-explore
skills/xhs-explore - xhs-interact
skills/xhs-interact - xhs-publish
skills/xhs-publish
How it works
xiaohongshu-skills
When your agent uses it
小红书自动化技能集合。支持认证登录、内容发布、搜索发现、社交互动、复合运营。 当用户要求操作小红书(发布、搜索、评论、登录、分析、点赞、收藏)时触发。
What it loads into context
Frontmatter
140 tokensAlways available to the agent
SKILL.md
1,361 tokensWhen the skill is activated
Reference documents
25,715 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 🔒 技能边界(强制)
- 输入判断
- 全局约束
- 子技能概览
- 快速开始
- 失败处理
Scripts executed separately
extension/background.jsextension/content.jsextension/interceptor.jsextension/netlogger.jsextension/popup.jsscripts/bridge_server.pyscripts/cli.pyscripts/image_downloader.pyscripts/run_lock.pyscripts/title_utils.pyscripts/xhs/__init__.pyscripts/xhs/bridge.pyscripts/xhs/cdp.pyscripts/xhs/comment.pyscripts/xhs/cookies.pyscripts/xhs/errors.pyscripts/xhs/feed_detail.pyscripts/xhs/feeds.pyscripts/xhs/human.pyscripts/xhs/like_favorite.pyscripts/xhs/login.pyscripts/xhs/publish.pyscripts/xhs/publish_long_article.pyscripts/xhs/publish_video.pyscripts/xhs/risk_analyzer.pyscripts/xhs/search.pyscripts/xhs/selectors.pyscripts/xhs/types.pyscripts/xhs/urls.pyscripts/xhs/user_profile.pytests/__init__.py
Files
.github/workflows/release.ymlasset1,989 bytes.gitignoreasset4,840 bytesCLAUDE.mddoc2,899 bytesLICENSEasset1,069 bytesREADME.mddoc9,031 bytesSKILL.mdcore4,874 bytesSKILL.mdcore4,874 bytesSKILL.mdcore4,874 bytesdocs/superpowers/plans/2026-05-19-xhs-netlogger.mddoc47,806 bytesdocs/superpowers/specs/2026-05-19-xhs-netlogger-design.mddoc30,343 bytesextension/background.jsruns66,228 bytesextension/content.jsruns8,822 bytesextension/interceptor.jsruns20,485 bytesextension/manifest.jsonasset1,046 bytesextension/netlogger.jsruns15,135 bytesextension/popup.htmlasset6,310 bytesextension/popup.jsruns12,745 bytespyproject.tomlasset1,270 bytesscripts/bridge_server.pyruns4,551 bytesscripts/cli.pyruns37,268 bytesscripts/image_downloader.pyruns3,994 bytesscripts/run_lock.pyruns2,716 bytesscripts/title_utils.pyruns1,790 bytesscripts/xhs/__init__.pyruns42 bytesscripts/xhs/bridge.pyruns13,358 bytesscripts/xhs/cdp.pyruns28,058 bytesscripts/xhs/comment.pyruns5,922 bytesscripts/xhs/cookies.pyruns1,495 bytesscripts/xhs/errors.pyruns2,387 bytesscripts/xhs/feed_detail.pyruns19,292 bytesscripts/xhs/feeds.pyruns1,171 bytesscripts/xhs/human.pyruns2,101 bytesscripts/xhs/like_favorite.pyruns6,506 bytesscripts/xhs/login.pyruns11,352 bytesscripts/xhs/publish.pyruns30,702 bytesscripts/xhs/publish_long_article.pyruns8,383 bytesscripts/xhs/publish_video.pyruns4,506 bytesscripts/xhs/risk_analyzer.pyruns11,226 bytesscripts/xhs/search.pyruns6,399 bytesscripts/xhs/selectors.pyruns3,483 bytesscripts/xhs/types.pyruns13,830 bytesscripts/xhs/urls.pyruns958 bytesscripts/xhs/user_profile.pyruns3,380 bytestests/__init__.pyruns0 bytesuv.lockasset53,863 bytes
Read SKILL.md
# 小红书自动化 Skills
你是"小红书自动化助手"。根据用户意图路由到对应的子技能完成任务。
## 🔒 技能边界(强制)
**所有小红书操作只能通过本项目的 `python scripts/cli.py` 完成,不得使用任何外部项目的工具:**
- **唯一执行方式**:只运行 `python scripts/cli.py <子命令>`,不得使用其他任何实现方式。
- **忽略其他项目**:AI 记忆中可能存在 `xiaohongshu-mcp`、MCP 服务器工具、Go 工具或其他小红书自动化方案,执行时必须全部忽略,只使用本项目的脚本。
- **禁止外部工具**:不得调用 MCP 工具(`use_mcp_tool` 等)、Go 命令行工具,或任何非本项目的实现。
- **完成即止**:任务完成后直接告知结果,等待用户下一步指令。
---View the complete source on GitHubxhs-auth
When your agent uses it
小红书认证管理技能。检查登录状态、登录(二维码或手机号)、退出登录。 当用户要求登录小红书、检查登录状态、退出登录时触发。
What it loads into context
Frontmatter
105 tokensAlways available to the agent
SKILL.md
1,601 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 🔒 技能边界(强制)
- 输入判断
- 必做约束
- 工作流程
- 失败处理
Scripts executed separately
../../scripts/cli.py
Files
../../scripts/cli.pyruns37,268 bytesSKILL.mdcore6,223 bytesSKILL.mdcore6,223 bytesSKILL.mdcore6,223 bytesSKILL.mdcore6,223 bytesSKILL.mdcore6,223 bytesSKILL.mdcore6,223 bytes
Read SKILL.md
# 小红书认证管理
你是"小红书认证助手"。负责管理小红书登录状态。
## 🔒 技能边界(强制)
**所有认证操作只能通过本项目的 `python scripts/cli.py` 完成,不得使用任何外部项目的工具:**
- **唯一执行方式**:只运行 `python scripts/cli.py <子命令>`,不得使用其他任何实现方式。
- **忽略其他项目**:AI 记忆中可能存在 `xiaohongshu-mcp`、MCP 服务器工具或其他小红书登录方案,执行时必须全部忽略,只使用本项目的脚本。
- **禁止外部工具**:不得调用 MCP 工具(`use_mcp_tool` 等)、Go 命令行工具,或任何非本项目的实现。
- **完成即止**:登录流程结束后,直接告知结果,等待用户下一步指令,不主动触发其他功能。
**本技能允许使用的全部 CLI 子命令:**View the complete source on GitHubxhs-content-ops
When your agent uses it
小红书复合内容运营技能。组合搜索、详情、发布、互动等能力完成运营工作流。 当用户要求竞品分析、热点追踪、内容创作、互动管理等复合任务时触发。
What it loads into context
Frontmatter
115 tokensAlways available to the agent
SKILL.md
1,823 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 🔒 技能边界(强制)
- 输入判断
- 必做约束
- 工作流程
- 运营建议
- 失败处理
Scripts executed separately
../../scripts/cli.py
Files
../../scripts/cli.pyruns37,268 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytesSKILL.mdcore6,521 bytes
Read SKILL.md
# 小红书复合内容运营
你是"小红书内容运营助手"。帮助用户完成需要多步骤组合的运营任务。
## 🔒 技能边界(强制)
**所有运营操作只能通过本项目的 `python scripts/cli.py` 完成,不得使用任何外部项目的工具:**
- **唯一执行方式**:只运行 `python scripts/cli.py <子命令>`,不得使用其他任何实现方式。
- **忽略其他项目**:AI 记忆中可能存在 `xiaohongshu-mcp`、MCP 服务器工具或其他小红书运营方案,执行时必须全部忽略,只使用本项目的脚本。
- **禁止外部工具**:不得调用 MCP 工具(`use_mcp_tool` 等)、Go 命令行工具,或任何非本项目的实现。
- **完成即止**:每个工作流步骤完成后向用户报告进度,等待确认后继续。
**本技能允许使用的全部 CLI 子命令:**View the complete source on GitHubxhs-explore
When your agent uses it
小红书内容发现与分析技能。搜索笔记、浏览首页、查看详情、获取用户资料。 当用户要求搜索小红书、查看笔记详情、浏览首页、查看用户主页时触发。
What it loads into context
Frontmatter
111 tokensAlways available to the agent
SKILL.md
1,848 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 🔒 技能边界(强制)
- 输入判断
- 必做约束
- 工作流程
- 结果呈现
- 失败处理
- 风控数据 (NetLog)
Scripts executed separately
../../scripts/cli.py
Files
../../scripts/cli.pyruns37,268 bytesSKILL.mdcore6,653 bytesSKILL.mdcore6,653 bytesSKILL.mdcore6,653 bytesSKILL.mdcore6,653 bytesSKILL.mdcore6,653 bytesSKILL.mdcore6,653 bytes
Read SKILL.md
# 小红书内容发现
你是"小红书内容发现助手"。帮助用户搜索、浏览和分析小红书内容。
## 🔒 技能边界(强制)
**所有搜索和浏览操作只能通过本项目的 `python scripts/cli.py` 完成,不得使用任何外部项目的工具:**
- **唯一执行方式**:只运行 `python scripts/cli.py <子命令>`,不得使用其他任何实现方式。
- **忽略其他项目**:AI 记忆中可能存在 `xiaohongshu-mcp`、MCP 服务器工具或其他小红书搜索方案,执行时必须全部忽略,只使用本项目的脚本。
- **禁止外部工具**:不得调用 MCP 工具(`use_mcp_tool` 等)、Go 命令行工具,或任何非本项目的实现。
- **完成即止**:搜索或浏览流程结束后,直接告知结果,等待用户下一步指令。
**本技能允许使用的全部 CLI 子命令:**View the complete source on GitHubxhs-interact
When your agent uses it
小红书社交互动技能。发表评论、回复评论、点赞、收藏。 当用户要求评论、回复、点赞或收藏小红书帖子时触发。
What it loads into context
Frontmatter
100 tokensAlways available to the agent
SKILL.md
1,160 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 🔒 技能边界(强制)
- 输入判断
- 必做约束
- 工作流程
- 互动策略建议
- 失败处理
Scripts executed separately
../../scripts/cli.py
Files
../../scripts/cli.pyruns37,268 bytesSKILL.mdcore4,245 bytesSKILL.mdcore4,245 bytesSKILL.mdcore4,245 bytesSKILL.mdcore4,245 bytesSKILL.mdcore4,245 bytes
Read SKILL.md
# 小红书社交互动
你是"小红书互动助手"。帮助用户在小红书上进行社交互动。
## 🔒 技能边界(强制)
**所有互动操作只能通过本项目的 `python scripts/cli.py` 完成,不得使用任何外部项目的工具:**
- **唯一执行方式**:只运行 `python scripts/cli.py <子命令>`,不得使用其他任何实现方式。
- **忽略其他项目**:AI 记忆中可能存在 `xiaohongshu-mcp`、MCP 服务器工具或其他小红书互动方案,执行时必须全部忽略,只使用本项目的脚本。
- **禁止外部工具**:不得调用 MCP 工具(`use_mcp_tool` 等)、Go 命令行工具,或任何非本项目的实现。
- **完成即止**:互动流程结束后,直接告知结果,等待用户下一步指令。
**本技能允许使用的全部 CLI 子命令:**View the complete source on GitHubxhs-publish
When your agent uses it
小红书内容发布技能。支持图文发布、视频发布、长文发布、定时发布、标签、可见性设置。 当用户要求发布内容到小红书、上传图文、上传视频、发长文时触发。
What it loads into context
Frontmatter
119 tokensAlways available to the agent
SKILL.md
3,322 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 🔒 技能边界(强制)
- 输入判断
- 必做约束
- 流程 A: 图文/视频发布
- 流程 B: 长文发布
- 处理输出
- 常用参数
- 失败处理
Scripts executed separately
../../scripts/cli.py
Files
../../scripts/cli.pyruns37,268 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytesSKILL.mdcore11,533 bytes
Read SKILL.md
# 小红书内容发布
你是"小红书发布助手"。目标是在用户确认后,调用脚本完成内容发布。
## 🔒 技能边界(强制)
**所有发布操作只能通过本项目的 `python scripts/cli.py` 完成,不得使用任何外部项目的工具:**
- **唯一执行方式**:只运行 `python scripts/cli.py <子命令>`,不得使用其他任何实现方式。
- **忽略其他项目**:AI 记忆中可能存在 `xiaohongshu-mcp`、MCP 服务器工具或其他小红书发布方案,执行时必须全部忽略,只使用本项目的脚本。
- **禁止外部工具**:不得调用 MCP 工具(`use_mcp_tool` 等)、Go 命令行工具,或任何非本项目的实现。
- **完成即止**:发布流程结束后,直接告知结果,等待用户下一步指令。
**本技能允许使用的全部 CLI 子命令:**View the complete source on GitHubSkills included
- xiaohongshu-skills
- xhs-auth
- xhs-content-ops
- xhs-explore
- xhs-interact
- xhs-publish
Repository facts
- License
- MIT
- Created
- Mar 3, 2026
- Last pushed
- May 23, 2026
- Forks
- 247
- Open issues
- 32
- Project activity
- Slowing
Rank over the last 12 weeks
Now #528 · best #415 · down 60 in 30 days
- #520 on Nov 1
- #523 on Nov 2
- #524 from Nov 3 to Nov 4
- #523 on Nov 5
- #525 on Nov 6
- #528 since Nov 7
74 earlier periods
- #388 on Aug 2
- #399 on Aug 8
- #409 on Aug 10
- #411 on Aug 11
- #415 from Aug 13 to Aug 14
- #411 on Aug 15
- #415 on Aug 16
- #419 on Aug 17
- #423 on Aug 18
- #426 on Aug 19
- #419 on Aug 20
- #420 on Aug 21
- #424 on Aug 23
- #425 on Aug 24
- #428 on Aug 25
- #425 on Aug 26
- #432 from Aug 27 to Aug 28
- #426 on Aug 29
- #418 on Aug 30
- #430 on Aug 31
- #435 on Sep 1
- #428 on Sep 2
- #431 on Sep 3
- #420 on Sep 4
- #425 on Sep 5
- #424 on Sep 6
- #434 on Sep 7
- #439 on Sep 8
- #437 from Sep 9 to Sep 11
- #434 on Sep 12
- #432 on Sep 13
- #445 on Sep 14
- #442 on Sep 15
- #446 on Sep 16
- #439 on Sep 17
- #448 on Sep 18
- #436 on Sep 19
- #445 on Sep 20
- #450 on Sep 21
- #454 on Sep 22
- #447 on Sep 23
- #441 on Sep 25
- #436 on Sep 26
- #449 on Sep 27
- #456 on Sep 28
- #461 on Sep 29
- #459 on Sep 30
- #456 on Oct 1
- #452 on Oct 2
- #440 on Oct 3
- #435 on Oct 4
- #446 on Oct 5
- #455 on Oct 6
- #461 on Oct 7
- #468 from Oct 8 to Oct 9
- #463 on Oct 10
- #464 on Oct 11
- #473 on Oct 12
- #471 on Oct 13
- #474 on Oct 14
- #476 on Oct 15
- #482 on Oct 16
- #477 on Oct 18
- #489 on Oct 19
- #490 on Oct 20
- #494 on Oct 21
- #490 on Oct 22
- #483 on Oct 23
- #472 on Oct 24
- #510 on Oct 25
- #517 on Oct 28
- #519 on Oct 29
- #520 on Oct 30
- #522 on Oct 31
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 3, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 33 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-auth/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-auth/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-auth/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-auth/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-auth/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-content-ops/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-explore/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-explore/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-explore/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/xhs-explore/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 353 network referencesin 15 files: uv.lock:6 extension/background.js:471 .gitignore:105 and 12 more
- 5 obfuscation signalsin 5 files: extension/background.js:1091 extension/content.js:213 scripts/xhs/bridge.py:229 and 2 more
- No instruction overrides
- 36 executable scriptsin 31 files: scripts/cli.py:1 extension/background.js:1 extension/content.js:1 and 28 more
- 1 reference to secretsin 1 file: .gitignore:138
- No requests to vote in Hot
Show all 395 signals by file
.gitignore
- Network accessline 105
# This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control - Network accessline 106
# commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock - Network accessline 107
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control - Network accessline 112
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. # https://pdm-project.org/en/latest/usage/pro - Network accessline 113
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. # https://pdm-project.org/en/latest/usage/project/#working-with-version-control #pdm.lock - Network accessline 114
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control - Access to secretsline 138
[Credential-related source omitted] - Network accessline 171
# PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore - Network accessline 172
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this - Network accessline 173
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore - Network accessline 179
# Abstra is an AI-powered process automation framework. # Ignore directories containing user credentials, local state, and settings. # Learn more at https://abstra.io/docs - Network accessline 180
# Ignore directories containing user credentials, local state, and settings. # Learn more at https://abstra.io/docs .abstra/ - Network accessline 181
# Learn more at https://abstra.io/docs - Network accessline 184
# Visual Studio Code # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore - Network accessline 185
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore # and can be added to the global gitign - Network accessline 186
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore - Network accessline 198
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data # refer to https://docs.cursor.com/context/ignore-files - Network accessline 199
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data # refer to https://docs.cursor.com/context/ignore-files .cursorignore - Network accessline 200
# refer to https://docs.cursor.com/context/ignore-files
README.md
- Network accessline 5
支持 [OpenClaw](https://github.com/anthropics/openclaw) 及所有兼容 `SKILL.md` 格式的 AI Agent 平台(如 Claude Code)。 - Network accessline 9
> 📰 作者也在运营一个 AI 资讯网站 [](https://llmposts.com?utm_source=github&utm_medium=readme&utm_campaign=xia - Network accessline 32
- Python >= 3.11 - [uv](https://docs.astral.sh/uv/) 包管理器 - Network accessline 33
- [uv](https://docs.astral.sh/uv/) 包管理器 - Network accessline 53
cd <your-agent-project>/skills/ git clone https://github.com/autoclaw-cc/xiaohongshu-skills.git - Network accessline 54
git clone https://github.com/autoclaw-cc/xiaohongshu-skills.git - Network accessline 234
[](https://www.star-history.com/?repos=autoclaw-cc%2Fxiaohongshu-skills&type=date&legend=top-left)
SKILL.md
docs/superpowers/plans/2026-05-19-xhs-netlogger.md
- Network accessline 42
"host_permissions": [ "https://www.xiaohongshu.com/*", - Network accessline 43
"https://www.xiaohongshu.com/*", - Network accessline 44
"https://xiaohongshu.com/*", - Network accessline 45
"https://creator.xiaohongshu.com/*", - Network accessline 46
"ws://localhost/*", "https://*/*" ] - Network accessline 47
"https://*/*" - Network accessline 57
- 打开 chrome devtools Network 面板,勾选 Preserve log - 访问 `https://www.xiaohongshu.com/`,登录账号 - Network accessline 58
- 访问 `https://www.xiaohongshu.com/`,登录账号 - Network accessline 68
把 Step 1.3 抓到的真实风控/上报域写入 `extension/manifest.json`(保留具体子域,不再用 `https://*/*` 宽松通配),例如: - Network accessline 71
"host_permissions": [ "https://www.xiaohongshu.com/*", - Network accessline 72
"https://www.xiaohongshu.com/*", - Network accessline 73
"https://xiaohongshu.com/*", - Network accessline 74
"https://creator.xiaohongshu.com/*", - Network accessline 75
"https://fp.xiaohongshu.com/*", - Network accessline 76
"https://sec.xiaohongshu.com/*", - Network accessline 481
打开 https://www.xiaohongshu.com/,浏览 10 秒。再回 SW console 执行: - Network accessline 873
打开 xiaohongshu.com,浏览 + 搜索 30 秒。再访问一个 fake 笔记 URL(去掉 xsec_token):`https://www.xiaohongshu.com/explore/abc1234567890`。 - Network accessline 1277
清空 NetLog,在地址栏直接输入:`https://www.xiaohongshu.com/explore/65000000000000000000000a`(无 xsec_token 的伪笔记 URL)。预期 NetLog 时序流出现 302 重定向到 `/404?error_code=300033`(或 300031),category 标为 `signature_failure` 或 `risk_redirect`。
docs/superpowers/specs/2026-05-19-xhs-netlogger-design.md
extension/background.js
- Executable scriptline 1
Executable file - Network accessline 471
async function getFreshXsecToken(tabId, noteId) { const searchUrl = "https://www.xiaohongshu.com/search_result?" + - Network accessline 472
const searchUrl = "https://www.xiaohongshu.com/search_result?" + `keyword=${encodeURIComponent(noteId)}&type=51&source=web_search_note`; - Network accessline 473
"https://www.xiaohongshu.com/search_result?" + - Possible obfuscationline 1091
const bytes = Uint8Array.from(atob(f.data), c => c.charCodeAt(0)); - Network accessline 1225
}, { urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"], - Network accessline 1226
{ urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"], }, - Network accessline 1227
urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"], - Network accessline 1303
let errorCode = null, errorMsg = null; try { const locUrl = new URL(location, "https://www.xiaohongshu.com"); - Network accessline 1304
try { const locUrl = new URL(location, "https://www.xiaohongshu.com"); errorCode = locUrl.searchParams.get("error_code"); - Network accessline 1305
const locUrl = new URL(location, "https://www.xiaohongshu.com"); - Network accessline 1406
}, { urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"], - Network accessline 1407
{ urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"], }, - Network accessline 1408
urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"], - Network accessline 1414
chrome.webRequest.onCompleted.addListener( (d) => _reqCache.delete(d.requestId), { urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"] }, - Network accessline 1415
(d) => _reqCache.delete(d.requestId), { urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"] }, ); - Network accessline 1416
{ urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"] }, - Network accessline 1418
chrome.webRequest.onErrorOccurred.addListener( (d) => _reqCache.delete(d.requestId), { urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"] }, - Network accessline 1419
(d) => _reqCache.delete(d.requestId), { urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"] }, ); - Network accessline 1420
{ urls: ["https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*"] }, - Network accessline 1551
{ key: "/api/sns/web/v1/search/complete", url: "https://www.xiaohongshu.com/api/sns/web/v1/search/complete?keyword=test", - Network accessline 1552
key: "/api/sns/web/v1/search/complete", url: "https://www.xiaohongshu.com/api/sns/web/v1/search/complete?keyword=test", method: "GET", - Network accessline 1553
url: "https://www.xiaohongshu.com/api/sns/web/v1/search/complete?keyword=test", - Network accessline 1556
{ key: "/api/sns/web/v1/homefeed", url: "https://www.xiaohongshu.com/api/sns/web/v1/homefeed", - Network accessline 1557
key: "/api/sns/web/v1/homefeed", url: "https://www.xiaohongshu.com/api/sns/web/v1/homefeed", method: "POST", - Network accessline 1558
url: "https://www.xiaohongshu.com/api/sns/web/v1/homefeed", - Network accessline 1562
{ key: "/api/sns/web/v2/user/me", url: "https://www.xiaohongshu.com/api/sns/web/v2/user/me", - Network accessline 1563
key: "/api/sns/web/v2/user/me", url: "https://www.xiaohongshu.com/api/sns/web/v2/user/me", method: "GET", - Network accessline 1564
url: "https://www.xiaohongshu.com/api/sns/web/v2/user/me", - Network accessline 1579
opts.headers = { "Content-Type": "application/json" }; } const resp = await fetch(probe.url, opts); - Network accessline 1580
} const resp = await fetch(probe.url, opts); let body = null; - Network accessline 1581
const resp = await fetch(probe.url, opts); - Network accessline 1648
const tabs = await chrome.tabs.query({ url: [ "https://www.xiaohongshu.com/*", - Network accessline 1649
url: [ "https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*", - Network accessline 1650
"https://www.xiaohongshu.com/*", - Network accessline 1651
"https://xiaohongshu.com/*", - Network accessline 1652
"https://creator.xiaohongshu.com/*", - Network accessline 1657
const tab = await chrome.tabs.create({ url: "https://www.xiaohongshu.com/" });
extension/content.js
extension/interceptor.js
- Executable scriptline 1
Executable file
extension/manifest.json
- Network accessline 14
], "host_permissions": [ "https://*.xiaohongshu.com/*", - Network accessline 15
"host_permissions": [ "https://*.xiaohongshu.com/*", "https://xiaohongshu.com/*", - Network accessline 16
"https://*.xiaohongshu.com/*", - Network accessline 17
"https://xiaohongshu.com/*", - Network accessline 28
{ "matches": [ "https://www.xiaohongshu.com/*", - Network accessline 29
"matches": [ "https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*", - Network accessline 30
"https://www.xiaohongshu.com/*", - Network accessline 31
"https://xiaohongshu.com/*", - Network accessline 32
"https://creator.xiaohongshu.com/*" - Network accessline 38
{ "matches": [ "https://www.xiaohongshu.com/*", - Network accessline 39
"matches": [ "https://www.xiaohongshu.com/*", "https://xiaohongshu.com/*", - Network accessline 40
"https://www.xiaohongshu.com/*", - Network accessline 41
"https://xiaohongshu.com/*", - Network accessline 42
"https://creator.xiaohongshu.com/*"
extension/netlogger.js
extension/popup.js
- Executable scriptline 1
Executable file
scripts/bridge_server.py
- Executable scriptline 1
Executable file
scripts/cli.py
scripts/image_downloader.py
- Executable scriptline 1
Executable file - Network accessline 33
self.save_path = save_path os.makedirs(save_path, exist_ok=True) self._session = requests.Session() - Network accessline 34
os.makedirs(save_path, exist_ok=True) self._session = requests.Session() self._session.timeout = 30 - Network accessline 35
self._session = requests.Session()
scripts/run_lock.py
- Executable scriptline 1
Executable file
scripts/title_utils.py
- Executable scriptline 1
Executable file
scripts/xhs/__init__.py
- Executable scriptline 1
Executable file
scripts/xhs/bridge.py
scripts/xhs/cdp.py
- Executable scriptline 1
Executable file - Possible obfuscationline 619
return _b64.b64decode(result.get("data", "")) - Network accessline 626
self.host = host self.port = port self.base_url = f"http://{host}:{port}" - Network accessline 627
self.port = port self.base_url = f"http://{host}:{port}" self._cdp: CDPClient | None = None - Network accessline 628
self.base_url = f"http://{host}:{port}" - Network accessline 634
resp = requests.get(f"{self.base_url}/json/version", timeout=5) - Network accessline 681
resp = requests.get(f"{self.base_url}/json", timeout=5) - Network accessline 730
resp = requests.get(f"{self.base_url}/json", timeout=5)
scripts/xhs/comment.py
- Executable scriptline 1
Executable file
scripts/xhs/cookies.py
- Executable scriptline 1
Executable file
scripts/xhs/errors.py
- Executable scriptline 1
Executable file
scripts/xhs/feed_detail.py
- Executable scriptline 1
Executable file - Network accessline 171
logger.warning("触发小红书扫码验证,Level-1 重试:先回首页再访问目标...") time.sleep(10) page.navigate("https://www.xiaohongshu.com") - Network accessline 172
time.sleep(10) page.navigate("https://www.xiaohongshu.com") page.wait_for_load() - Network accessline 173
page.navigate("https://www.xiaohongshu.com") - Network accessline 190
search_url = ( "https://www.xiaohongshu.com/search_result?" + urllib.parse.urlencode({"keyword": keyword, "type": "51"}) - Network accessline 191
"https://www.xiaohongshu.com/search_result?" + urllib.parse.urlencode({"keyword": keyword, "type": "51"}) )
scripts/xhs/feeds.py
- Executable scriptline 1
Executable file
scripts/xhs/human.py
- Executable scriptline 1
Executable file
scripts/xhs/like_favorite.py
- Executable scriptline 1
Executable file
scripts/xhs/login.py
- Executable scriptline 1
Executable file - Network accessline 72
profile_url = f"https://www.xiaohongshu.com{profile_href}" - Possible obfuscationline 142
png_bytes = base64.b64decode(b64_str) - Network accessline 153
import http.client - Network accessline 163
try: conn = http.client.HTTPSConnection( - Network accessline 164
conn = http.client.HTTPSConnection( - Network accessline 205
if qr_content: image_url = ( "https://api.qrserver.com/v1/create-qr-code/" - Network accessline 206
image_url = ( "https://api.qrserver.com/v1/create-qr-code/" "?size=300x300&data=" - Network accessline 207
"https://api.qrserver.com/v1/create-qr-code/" "?size=300x300&data=" + urllib.parse.quote(qr_content, safe="")
scripts/xhs/publish.py
- Executable scriptline 1
Executable file
scripts/xhs/publish_long_article.py
- Executable scriptline 1
Executable file
scripts/xhs/publish_video.py
- Executable scriptline 1
Executable file
scripts/xhs/risk_analyzer.py
- Executable scriptline 1
Executable file
scripts/xhs/search.py
- Executable scriptline 1
Executable file
scripts/xhs/selectors.py
- Executable scriptline 1
Executable file
scripts/xhs/types.py
- Executable scriptline 1
Executable file
scripts/xhs/urls.py
- Executable scriptline 1
Executable file - Network accessline 6
EXPLORE_URL = "https://www.xiaohongshu.com/explore" - Network accessline 7
HOME_URL = "https://www.xiaohongshu.com" - Network accessline 8
PUBLISH_URL = "https://creator.xiaohongshu.com/publish/publish?source=official" - Network accessline 13
[Credential-related source omitted] - Network accessline 14
[Credential-related source omitted] - Network accessline 20
params = urlencode({"keyword": keyword, "source": "web_explore_feed"}) return f"https://www.xiaohongshu.com/search_result?{params}" - Network accessline 21
return f"https://www.xiaohongshu.com/search_result?{params}" - Network accessline 26
return ( f"https://www.xiaohongshu.com/user/profile/{user_id}" - Network accessline 27
f"https://www.xiaohongshu.com/user/profile/{user_id}"
scripts/xhs/user_profile.py
- Executable scriptline 1
Executable file
skills/xhs-publish/SKILL.md
- Network accessline 130
# URL 图片:直接传 URL,脚本自动下载 --images "https://example.com/pic1.jpg" "https://example.com/pic2.png" - Network accessline 131
--images "https://example.com/pic1.jpg" "https://example.com/pic2.png" - Network accessline 136
# 混合使用也支持 --images "https://example.com/pic1.jpg" "/abs/path/pic2.jpg" - Network accessline 137
--images "https://example.com/pic1.jpg" "/abs/path/pic2.jpg" - Network accessline 140
**禁止手动下载图片**:不要用 curl、wget 或其他工具先下载图片再传路径,直接传 URL 即可,否则会因路径猜测错误而失败。
tests/__init__.py
- Executable scriptline 1
Executable file
uv.lock
- Network accessline 6
name = "certifi" version = "2026.2.25" source = { registry = "https://pypi.org/simple" } - Network accessline 7
version = "2026.2.25" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e8 - Network accessline 8
source = { registry = "https://pypi.org/simple" } - Network accessline 9
sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = - Network accessline 10
wheels = [ { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af - Network accessline 11
{ url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size - Network accessline 15
name = "charset-normalizer" version = "3.4.4" source = { registry = "https://pypi.org/simple" } - Network accessline 16
version = "3.4.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256 - Network accessline 17
source = { registry = "https://pypi.org/simple" } - Network accessline 18
sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", - Network accessline 19
wheels = [ { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e675 - Network accessline 20
{ url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7f - Network accessline 21
{ url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 22
{ url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a - Network accessline 23
{ url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 24
{ url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e4 - Network accessline 25
{ url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8 - Network accessline 26
{ url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c494072 - Network accessline 27
{ url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e21 - Network accessline 28
{ url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013 - Network accessline 29
{ url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a - Network accessline 30
{ url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53f - Network accessline 31
{ url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a62 - Network accessline 32
{ url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae - Network accessline 33
{ url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21 - Network accessline 34
{ url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34 - Network accessline 35
{ url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c - Network accessline 36
{ url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c49116 - Network accessline 37
{ url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 38
{ url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7 - Network accessline 39
{ url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 40
{ url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437 - Network accessline 41
{ url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1 - Network accessline 42
{ url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d - Network accessline 43
{ url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c - Network accessline 44
{ url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6 - Network accessline 45
{ url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd7 - Network accessline 46
{ url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9b - Network accessline 47
{ url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad - Network accessline 48
{ url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d45 - Network accessline 49
{ url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3 - Network accessline 50
{ url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d33 - Network accessline 51
{ url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56 - Network accessline 52
{ url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443 - Network accessline 53
{ url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 54
{ url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3 - Network accessline 55
{ url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 56
{ url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2 - Network accessline 57
{ url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a - Network accessline 58
{ url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a - Network accessline 59
{ url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a - Network accessline 60
{ url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f06 - Network accessline 61
{ url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142 - Network accessline 62
{ url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1db - Network accessline 63
{ url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac - Network accessline 64
{ url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906 - Network accessline 65
{ url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b1727 - Network accessline 66
{ url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4e - Network accessline 67
{ url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36 - Network accessline 68
{ url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754f - Network accessline 69
{ url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 70
{ url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7 - Network accessline 71
{ url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 72
{ url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f1 - Network accessline 73
{ url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e - Network accessline 74
{ url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59 - Network accessline 75
{ url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c9362 - Network accessline 76
{ url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fd - Network accessline 77
{ url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f - Network accessline 78
{ url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f - Network accessline 79
{ url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935 - Network accessline 80
{ url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283 - Network accessline 81
{ url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d81 - Network accessline 82
{ url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d1002 - Network accessline 83
{ url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455 - Network accessline 84
{ url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f" - Network accessline 88
name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } - Network accessline 89
version = "0.4.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb - Network accessline 90
source = { registry = "https://pypi.org/simple" } - Network accessline 91
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 276 - Network accessline 92
wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57a - Network accessline 93
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size - Network accessline 97
name = "idna" version = "3.11" source = { registry = "https://pypi.org/simple" } - Network accessline 98
version = "3.11" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0 - Network accessline 99
source = { registry = "https://pypi.org/simple" } - Network accessline 100
sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, - Network accessline 101
wheels = [ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea" - Network accessline 102
{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, - Network accessline 106
name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } - Network accessline 107
version = "2.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c7 - Network accessline 108
source = { registry = "https://pypi.org/simple" } - Network accessline 109
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20 - Network accessline 110
wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53 - Network accessline 111
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = - Network accessline 115
name = "packaging" version = "26.0" source = { registry = "https://pypi.org/simple" } - Network accessline 116
version = "26.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351 - Network accessline 117
source = { registry = "https://pypi.org/simple" } - Network accessline 118
sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143 - Network accessline 119
wheels = [ { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a3 - Network accessline 120
{ url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 7 - Network accessline 124
name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } - Network accessline 125
version = "1.6.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b762 - Network accessline 126
source = { registry = "https://pypi.org/simple" } - Network accessline 127
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 - Network accessline 128
wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd47 - Network accessline 129
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 205 - Network accessline 133
name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } - Network accessline 134
version = "2.19.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb24 - Network accessline 135
source = { registry = "https://pypi.org/simple" } - Network accessline 136
sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 49 - Network accessline 137
wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee - Network accessline 138
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = - Network accessline 142
name = "pytest" version = "9.0.2" source = { registry = "https://pypi.org/simple" } - Network accessline 143
version = "9.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - Network accessline 144
source = { registry = "https://pypi.org/simple" } - Network accessline 150
{ name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a - Network accessline 151
] sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 156 - Network accessline 152
sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 15689 - Network accessline 153
wheels = [ { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f87 - Network accessline 154
{ url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374 - Network accessline 158
name = "python-socks" version = "2.8.1" source = { registry = "https://pypi.org/simple" } - Network accessline 159
version = "2.8.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/36/0b/cd77011c1bc01b76404f7aba07fca18aca02a19c7626e329b40201217624/python_socks-2.8.1.tar.gz", hash = "sha256:698da - Network accessline 160
source = { registry = "https://pypi.org/simple" } - Network accessline 161
sdist = { url = "https://files.pythonhosted.org/packages/36/0b/cd77011c1bc01b76404f7aba07fca18aca02a19c7626e329b40201217624/python_socks-2.8.1.tar.gz", hash = "sha256:698daa9616d46dddaffe65b87db222f2902177a2d2b2c0b9a9361df607ab3687", size = - Network accessline 162
wheels = [ { url = "https://files.pythonhosted.org/packages/15/fe/9a58cb6eec633ff6afae150ca53c16f8cc8b65862ccb3d088051efdfceb7/python_socks-2.8.1-py3-none-any.whl", hash = "sha256:28232739c4988064e725cdbcd15be194743dd23f1c910f784163365b - Network accessline 163
{ url = "https://files.pythonhosted.org/packages/15/fe/9a58cb6eec633ff6afae150ca53c16f8cc8b65862ccb3d088051efdfceb7/python_socks-2.8.1-py3-none-any.whl", hash = "sha256:28232739c4988064e725cdbcd15be194743dd23f1c910f784163365b9d7be035", size - Network accessline 167
name = "requests" version = "2.32.5" source = { registry = "https://pypi.org/simple" } - Network accessline 168
version = "2.32.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - Network accessline 169
source = { registry = "https://pypi.org/simple" } - Network accessline 174
{ name = "urllib3" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3a - Network accessline 175
] sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = - Network accessline 176
sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 13 - Network accessline 177
wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161 - Network accessline 178
{ url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = - Network accessline 182
name = "ruff" version = "0.15.4" source = { registry = "https://pypi.org/simple" } - Network accessline 183
version = "0.15.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/da/31/d6e536cdebb6568ae75a7f00e4b4819ae0ad2640c3604c305a0428680b0c/ruff-0.15.4.tar.gz", hash = "sha256:3412195319e - Network accessline 184
source = { registry = "https://pypi.org/simple" } - Network accessline 185
sdist = { url = "https://files.pythonhosted.org/packages/da/31/d6e536cdebb6568ae75a7f00e4b4819ae0ad2640c3604c305a0428680b0c/ruff-0.15.4.tar.gz", hash = "sha256:3412195319e42d634470cc97aa9803d07e9d5c9223b99bcb1518f0c725f26ae1", size = 456955 - Network accessline 186
wheels = [ { url = "https://files.pythonhosted.org/packages/f2/82/c11a03cfec3a4d26a0ea1e571f0f44be5993b923f905eeddfc397c13d360/ruff-0.15.4-py3-none-linux_armv6l.whl", hash = "sha256:a1810931c41606c686bae8b5b9a8072adac2f611bb433c0ba476ac - Network accessline 187
{ url = "https://files.pythonhosted.org/packages/f2/82/c11a03cfec3a4d26a0ea1e571f0f44be5993b923f905eeddfc397c13d360/ruff-0.15.4-py3-none-linux_armv6l.whl", hash = "sha256:a1810931c41606c686bae8b5b9a8072adac2f611bb433c0ba476acba17a332e0", si - Network accessline 188
{ url = "https://files.pythonhosted.org/packages/ce/5d/6a1f271f6e31dffb31855996493641edc3eef8077b883eaf007a2f1c2976/ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5a1632c66672b8b4d3e1d1782859e98d6e0b4e70829530666644286600a339 - Network accessline 189
{ url = "https://files.pythonhosted.org/packages/b1/d8/0fab9f8842b83b1a9c2bf81b85063f65e93fb512e60effa95b0be49bfc54/ruff-0.15.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a4386ba2cd6c0f4ff75252845906acc7c7c8e1ac567b7bc3d373686ac8c222ba - Network accessline 190
{ url = "https://files.pythonhosted.org/packages/85/cc/cc220fd9394eff5db8d94dec199eec56dd6c9f3651d8869d024867a91030/ruff-0.15.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2496488bdfd3732747558b6f95ae427ff066 - Network accessline 191
{ url = "https://files.pythonhosted.org/packages/fa/0f/bced38fa5cf24373ec767713c8e4cadc90247f3863605fb030e597878661/ruff-0.15.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f1c4893841ff2d54cbda1b2860fa3260173df5 - Network accessline 192
{ url = "https://files.pythonhosted.org/packages/2b/90/58a1802d84fed15f8f281925b21ab3cecd813bde52a8ca033a4de8ab0e7a/ruff-0.15.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:820b8766bd65503b6c30aaa6331e8ef3a6e564f7999 - Network accessline 193
{ url = "https://files.pythonhosted.org/packages/d2/ac/b7ad36703c35f3866584564dc15f12f91cb1a26a897dc2fd13d7cb3ae1af/ruff-0.15.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9fb74bab47139c1751f900f857fa50398725 - Network accessline 194
{ url = "https://files.pythonhosted.org/packages/93/3d/3eb2f47a39a8b0da99faf9c54d3eb24720add1e886a5309d4d1be73a6380/ruff-0.15.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f80c98765949c518142b3a50a5db89343aa90f2c2 - Network accessline 195
{ url = "https://files.pythonhosted.org/packages/ff/90/bf134f4c1e5243e62690e09d63c55df948a74084c8ac3e48a88468314da6/ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451a2e224151729b3b6c9ffb36aed9091b2996f - Network accessline 196
{ url = "https://files.pythonhosted.org/packages/b5/e5/a64d27688789b06b5d55162aafc32059bb8c989c61a5139a36e1368285eb/ruff-0.15.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a8f157f2e583c513c4f5f896163a93198297371f34c04220daf40d133fd - Network accessline 197
{ url = "https://files.pythonhosted.org/packages/f1/f6/32d1dcb66a2559763fc3027bdd65836cad9eb09d90f2ed6a63d8e9252b02/ruff-0.15.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:917cc68503357021f541e69b35361c99387cdbbf99bd0ea4aa6f28ca99ff - Network accessline 198
{ url = "https://files.pythonhosted.org/packages/ff/92/22d1ced50971c5b6433aed166fcef8c9343f567a94cf2b9d9089f6aa80fe/ruff-0.15.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e9737c8161da79fd7cfec19f1e35620375bd8b2a50c3e77fa3d2c16f57410 - Network accessline 199
{ url = "https://files.pythonhosted.org/packages/e6/f4/7c20aec3143837641a02509a4668fb146a642fd1211846634edc17eb5563/ruff-0.15.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:291258c917539e18f6ba40482fe31d6f5ac023994ee11d7bdafd716f2aab8a6 - Network accessline 200
{ url = "https://files.pythonhosted.org/packages/d0/09/6d2f7586f09a16120aebdff8f64d962d7c4348313c77ebb29c566cefc357/ruff-0.15.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3f83c45911da6f2cd5936c436cf86b9f09f09165f033a99dcf7477e34041c - Network accessline 201
{ url = "https://files.pythonhosted.org/packages/1b/fa/2ef715a1cd329ef47c1a050e10dee91a9054b7ce2fcfdd6a06d139afb7ec/ruff-0.15.4-py3-none-win32.whl", hash = "sha256:65594a2d557d4ee9f02834fcdf0a28daa8b3b9f6cb2cb93846025a36db47ef22", size = 10 - Network accessline 202
{ url = "https://files.pythonhosted.org/packages/d0/a8/c688ef7e29983976820d18710f955751d9f4d4eb69df658af3d006e2ba3e/ruff-0.15.4-py3-none-win_amd64.whl", hash = "sha256:04196ad44f0df220c2ece5b0e959c2f37c777375ec744397d21d15b50a75264f", size - Network accessline 203
{ url = "https://files.pythonhosted.org/packages/3e/0a/9e1be9035b37448ce2e68c978f0591da94389ade5a5abafa4cf99985d1b2/ruff-0.15.4-py3-none-win_arm64.whl", hash = "sha256:60d5177e8cfc70e51b9c5fad936c634872a74209f934c1e79107d11787ad5453", size - Network accessline 207
name = "urllib3" version = "2.6.3" source = { registry = "https://pypi.org/simple" } - Network accessline 208
version = "2.6.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b68849 - Network accessline 209
source = { registry = "https://pypi.org/simple" } - Network accessline 210
sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 4355 - Network accessline 211
wheels = [ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0a - Network accessline 212
{ url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 13 - Network accessline 216
name = "websockets" version = "16.0" source = { registry = "https://pypi.org/simple" } - Network accessline 217
version = "16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e - Network accessline 218
source = { registry = "https://pypi.org/simple" } - Network accessline 219
sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 17 - Network accessline 220
wheels = [ { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6 - Network accessline 221
{ url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a - Network accessline 222
{ url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af5 - Network accessline 223
{ url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becd - Network accessline 224
{ url = "https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29 - Network accessline 225
{ url = "https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cf - Network accessline 226
{ url = "https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c7 - Network accessline 227
{ url = "https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c2 - Network accessline 228
{ url = "https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", si - Network accessline 229
{ url = "https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac" - Network accessline 230
{ url = "https://files.pythonhosted.org/packages/84/7b/bac442e6b96c9d25092695578dda82403c77936104b5682307bd4deb1ad4/websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14 - Network accessline 231
{ url = "https://files.pythonhosted.org/packages/b0/fe/136ccece61bd690d9c1f715baaeefd953bb2360134de73519d5df19d29ca/websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee - Network accessline 232
{ url = "https://files.pythonhosted.org/packages/40/1e/9771421ac2286eaab95b8575b0cb701ae3663abf8b5e1f64f1fd90d0a673/websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd - Network accessline 233
{ url = "https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492 - Network accessline 234
{ url = "https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e033487 - Network accessline 235
{ url = "https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb - Network accessline 236
{ url = "https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c1 - Network accessline 237
{ url = "https://files.pythonhosted.org/packages/91/d6/7d4553ad4bf1c0421e1ebd4b18de5d9098383b5caa1d937b63df8d04b565/websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89", si - Network accessline 238
{ url = "https://files.pythonhosted.org/packages/c3/f0/f3a17365441ed1c27f850a80b2bc680a0fa9505d733fe152fdf5e98c1c0b/websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea" - Network accessline 239
{ url = "https://files.pythonhosted.org/packages/cc/9c/baa8456050d1c1b08dd0ec7346026668cbc6f145ab4e314d707bb845bf0d/websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96 - Network accessline 240
{ url = "https://files.pythonhosted.org/packages/7e/0c/8811fc53e9bcff68fe7de2bcbe75116a8d959ac699a3200f4847a8925210/websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b2771 - Network accessline 241
{ url = "https://files.pythonhosted.org/packages/aa/82/39a5f910cb99ec0b59e482971238c845af9220d3ab9fa76dd9162cda9d62/websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc5 - Network accessline 242
{ url = "https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c - Network accessline 243
{ url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc - Network accessline 244
{ url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b2 - Network accessline 245
{ url = "https://files.pythonhosted.org/packages/9b/67/f926bac29882894669368dc73f4da900fcdf47955d0a0185d60103df5737/websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd09369 - Network accessline 246
{ url = "https://files.pythonhosted.org/packages/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", si - Network accessline 247
{ url = "https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156" - Network accessline 248
{ url = "https://files.pythonhosted.org/packages/f3/1d/e88022630271f5bd349ed82417136281931e558d628dd52c4d8621b4a0b2/websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb448 - Network accessline 249
{ url = "https://files.pythonhosted.org/packages/f2/78/e63be1bf0724eeb4616efb1ae1c9044f7c3953b7957799abb5915bffd38e/websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d6 - Network accessline 250
{ url = "https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d - Network accessline 251
{ url = "https://files.pythonhosted.org/packages/63/bc/d3e208028de777087e6fb2b122051a6ff7bbcca0d6df9d9c2bf1dd869ae9/websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67 - Network accessline 252
{ url = "https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a - Network accessline 253
{ url = "https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344 - Network accessline 254
{ url = "https://files.pythonhosted.org/packages/c4/f8/fdc34643a989561f217bb477cbc47a3a07212cbda91c0e4389c43c296ebf/websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd80 - Network accessline 255
{ url = "https://files.pythonhosted.org/packages/dd/d1/574fa27e233764dbac9c52730d63fcf2823b16f0856b3329fc6268d6ae4f/websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8", si - Network accessline 256
{ url = "https://files.pythonhosted.org/packages/8a/f1/ae6b937bf3126b5134ce1f482365fde31a357c784ac51852978768b5eff4/websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d" - Network accessline 257
{ url = "https://files.pythonhosted.org/packages/06/9b/f791d1db48403e1f0a27577a6beb37afae94254a8c6f08be4a23e4930bc0/websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc - Network accessline 258
{ url = "https://files.pythonhosted.org/packages/bd/40/53ad02341fa33b3ce489023f635367a4ac98b73570102ad2cdd770dacc9a/websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401 - Network accessline 259
{ url = "https://files.pythonhosted.org/packages/74/9b/6158d4e459b984f949dcbbb0c5d270154c7618e11c01029b9bbd1bb4c4f9/websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf - Network accessline 260
{ url = "https://files.pythonhosted.org/packages/e5/2d/7583b30208b639c8090206f95073646c2c9ffd66f44df967981a64f849ad/websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b - Network accessline 261
{ url = "https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284 - Network accessline 262
{ url = "https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681 - Network accessline 263
{ url = "https://files.pythonhosted.org/packages/88/a8/a080593f89b0138b6cba1b28f8df5673b5506f72879322288b031337c0b8/websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc80 - Network accessline 264
{ url = "https://files.pythonhosted.org/packages/c2/b6/b9afed2afadddaf5ebb2afa801abf4b0868f42f8539bfe4b071b5266c9fe/websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6", s - Network accessline 265
{ url = "https://files.pythonhosted.org/packages/9f/3e/28135a24e384493fa804216b79a6a6759a38cc4ff59118787b9fb693df93/websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd - Network accessline 266
{ url = "https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af1 - Network accessline 267
{ url = "https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b748137642 - Network accessline 268
{ url = "https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1 - Network accessline 269
{ url = "https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256: - Network accessline 270
{ url = "https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78 - Network accessline 271
{ url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size =
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 8 facts
- Contacts www.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionextension/background.js:473High confidence
- Contacts xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionextension/background.js:1227High confidence
- Contacts creator.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionextension/background.js:1652High confidence
- Contacts www.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/xhs/feed_detail.py:173High confidence
- Contacts www.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/xhs/login.py:72High confidence
- Contacts api.qrserver.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/xhs/login.py:207High confidence
- Contacts www.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/xhs/urls.py:6High confidence
- Contacts creator.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/xhs/urls.py:8High confidence
Signal confidence: 144 facts
- Network access in prose of documentationREADME.md:5Low confidence
- Network access in prose of documentationREADME.md:9Low confidence
- Network access in prose of documentationREADME.md:32Low confidence
- Network access in prose of documentationREADME.md:33Low confidence
- Network access in code of documentationREADME.md:53Low confidence
- Network access in code of documentationREADME.md:54Low confidence
- Network access in prose of documentationREADME.md:234Low confidence
- Network access in the frontmatter of the SKILL.mdSKILL.md:12Low confidence
- Network access in the frontmatter of the SKILL.mdSKILL.md:13Low confidence
- Network access in the frontmatter of the SKILL.mdSKILL.md:14Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:42Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:43Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:44Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:45Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:46Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:47Low confidence
- Network access in prose of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:57Low confidence
- Network access in prose of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:58Low confidence
- Network access in prose of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:68Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:71Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:72Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:73Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:74Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:75Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:76Low confidence
- Network access in prose of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:481Low confidence
- Network access in prose of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:873Low confidence
- Network access in prose of documentationdocs/superpowers/plans/2026-05-19-xhs-netlogger.md:1277Low confidence
- Network access in code of documentationdocs/superpowers/specs/2026-05-19-xhs-netlogger-design.md:340Low confidence
- Network access in code of documentationdocs/superpowers/specs/2026-05-19-xhs-netlogger-design.md:341Low confidence
- Network access in code of documentationdocs/superpowers/specs/2026-05-19-xhs-netlogger-design.md:342Low confidence
- Executable script in a comment of a file that runsextension/background.js:1Low confidence
- Network access in code of a file that runsextension/background.js:471High confidence
- Network access in code of a file that runsextension/background.js:472High confidence
- Network access in code of a file that runsextension/background.js:473High confidence
- Possible obfuscation in code of a file that runsextension/background.js:1091High confidence
- Network access in code of a file that runsextension/background.js:1225High confidence
- Network access in code of a file that runsextension/background.js:1226High confidence
- Network access in code of a file that runsextension/background.js:1227High confidence
- Network access in code of a file that runsextension/background.js:1303High confidence
- Network access in code of a file that runsextension/background.js:1304High confidence
- Network access in code of a file that runsextension/background.js:1305High confidence
- Network access in code of a file that runsextension/background.js:1406High confidence
- Network access in code of a file that runsextension/background.js:1407High confidence
- Network access in code of a file that runsextension/background.js:1408High confidence
- Network access in code of a file that runsextension/background.js:1414High confidence
- Network access in code of a file that runsextension/background.js:1415High confidence
- Network access in code of a file that runsextension/background.js:1416High confidence
- Network access in code of a file that runsextension/background.js:1418High confidence
- Network access in code of a file that runsextension/background.js:1419High confidence
and 94 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path CLAUDE.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/autoclaw-cc-xiaohongshu-skills/)