Not in the top 1,000 by GitHub stars

Moore-developers/moore-wechat-article-downloader

本地优先的微信内容情报库:同步公众号文章,保存精选评论和互动数据,供 Codex/Claude Code 做内容研究。

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

dea919bdd639 → dea919bdd639

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → dea919bdd639

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit dea919bdd6397e56ad8ec31654fa12b7113db0db

296GitHub stars
0stars in 7 days
1skill in this repository
0commits in 30 days

Heat

0.4
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 27, 2026296

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

moore-wechat-article-downloader

When your agent uses it

当用户要下载或管理微信公众号文章时使用本技能。支持订阅同步、微信收藏和链接导入;互动数据仅在用户微信短时会话有效时补充指标与精选评论。优先本地运行;不要扩展成内容改写、总结、SaaS 或云服务。

What it loads into context

Frontmatter

80 tokens

Always available to the agent

SKILL.md

6,062 tokens

When the skill is activated

Reference documents

27,976 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 场景判断
  2. 范围
  3. 执行护栏
  4. 场景 1:直接下载已知文章
  5. 场景 2:公众号历史文章
  6. 场景 3:多账号订阅 + 定时同步
  7. Exporter 登录
  8. 路径和输出
  9. 输出约定
  10. 参考文件

Scripts executed separately

  • evals/test_credential_broker.py
  • evals/test_exporter_contract.py
  • evals/test_snapshot_attach_contract.py
  • evals/test_video_download_contract.py
  • evals/test_wizard_contract.py
  • scripts/inspect_context.py
  • scripts/validate_outputs.py
  • scripts/wechat_credential_broker.py
  • scripts/wechat_downloader.py
  • scripts/wechat_exporter.py
  • scripts/wechat_history_mitm_addon.py
  • scripts/wechat_video_crypto.py
  • scripts/wechat_video_downloader.py
  • scripts/wechat_video_models.py
  • scripts/wechat_video_registry.py
  • scripts/wechat_video_service.py
  • scripts/wechat_wizard.py

Files

  • .gitignoreasset162 bytes
  • LICENSEasset1,073 bytes
  • README.mddoc8,330 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • SKILL.mdcore23,234 bytes
  • docs/plans/2026-07-06-unified-wizard-gates.mddoc25,321 bytes
  • docs/plans/2026-07-08-skill-scenario-redesign.mddoc6,641 bytes
  • docs/plans/2026-07-09-proxy-snapshot-validation-plan.mddoc7,801 bytes
  • docs/plans/2026-07-10-wechat-collection-architecture.mddoc19,691 bytes
  • docs/plans/2026-07-10-wechat-collection-implementation-tasks.mddoc9,583 bytes
  • evals/evals.jsonasset4,349 bytes
  • evals/fixtures/exporter_fixture.jsonasset1,424 bytes
  • evals/fixtures/html/demo-url-article-1.htmlasset768 bytes
  • evals/fixtures/html/demo-url-article-2.htmlasset719 bytes
  • evals/fixtures/html/demo-url-article-content-noencode.htmlasset923 bytes
  • evals/test_credential_broker.pyruns8,233 bytes
  • evals/test_exporter_contract.pyruns60,638 bytes
  • evals/test_snapshot_attach_contract.pyruns4,891 bytes
  • evals/test_video_download_contract.pyruns4,760 bytes
  • evals/test_wizard_contract.pyruns103,014 bytes
  • prompts/completion-report-template.mddoc452 bytes
  • references/backend-design.mddoc8,462 bytes
  • references/compliance.mddoc1,309 bytes
  • references/output-formats.mddoc4,996 bytes
  • references/skill-cli-flow.mddoc13,963 bytes
  • references/troubleshooting.mddoc4,383 bytes
  • scripts/inspect_context.pyruns1,086 bytes
  • scripts/validate_outputs.pyruns3,749 bytes
  • scripts/wechat_credential_broker.pyruns19,522 bytes
  • scripts/wechat_downloader.pyruns247,746 bytes
  • scripts/wechat_exporter.pyruns209,327 bytes
  • scripts/wechat_history_mitm_addon.pyruns78,380 bytes
  • scripts/wechat_video_crypto.pyruns4,099 bytes
  • scripts/wechat_video_downloader.pyruns5,267 bytes
  • scripts/wechat_video_models.pyruns6,427 bytes
  • scripts/wechat_video_registry.pyruns1,832 bytes
  • scripts/wechat_video_service.pyruns2,991 bytes
  • scripts/wechat_wizard.pyruns109,126 bytes
Read SKILL.md

# 公众号归档器

## 场景判断

| 用户意图 | 场景 | 入口 |
|---------|------|------|
| 提供了完整文章 URL | 场景 1:直接下载 | `wechat_wizard.py run "下载:<url>"` |
| 给公众号名 / 样例 URL,想要历史文章 | 场景 2A:Exporter(默认) | `wechat_wizard.py run "历史文章:<名称或URL>"` |
| 明确说"不登录"或"用代理" | 场景 2B:代理(备选) | `wechat_wizard.py run "代理历史:<url>"` |
| 想抓评论/阅读/点赞/页面风格 | 场景 2C:微信收藏 | `wechat_downloader.py proxy-enhancer-session-start --yes` |
| 管理多个公众号 / 定时同步 | 场景 3:订阅同步 | 见场景 3 |

统一入口优先。wizard 返回以下 gate 时按表处理,不要立刻降级为底层命令:
View the complete source on GitHub

Skills included

  • moore-wechat-article-downloader

Repository facts

License
MIT
Created
Jul 8, 2026
Last pushed
Aug 1, 2026
Forks
47
Open issues
1
Project activity
Slowing

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 4, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 35 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 498 signals by file

.gitignore

  • Access to secretsline 9
    [Credential-related source omitted]

README.md

  • Network accessline 50
    mkdir -p ~/.codex/skills git clone https://github.com/Moore-developers/moore-wechat-article-downloader.git \
  • Network accessline 51
    git clone https://github.com/Moore-developers/moore-wechat-article-downloader.git \
  • Network accessline 58
    mkdir -p ~/.claude/skills git clone https://github.com/Moore-developers/moore-wechat-article-downloader.git \
  • Network accessline 59
    git clone https://github.com/Moore-developers/moore-wechat-article-downloader.git \
  • Network accessline 68
    结合最近 5 篇文章的精选评论和互动数据,判断读者真正买账的点 开启微信收藏会话,边看边把正文、评论和互动信号保存到本地 把这些公众号文章链接导入本地:https://mp.weixin.qq.com/s/xxx
  • Network accessline 70
    把这些公众号文章链接导入本地:https://mp.weixin.qq.com/s/xxx
  • Network accessline 132
    把这些公众号文章链接导入本地:https://mp.weixin.qq.com/s/xxx

SKILL.md

  • Network accessline 103
    **硬性规则**: - 必须使用旧版历史入口:`https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=<biz>&scene=124#wechat_redirect`
  • Network accessline 104
    - 必须使用旧版历史入口:`https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=<biz>&scene=124#wechat_redirect`
  • Access to secretsline 333
    [Credential-related source omitted]

docs/plans/2026-07-06-unified-wizard-gates.md

  • Network accessline 107
    下载这些公众号文章: https://mp.weixin.qq.com/s/xxx
  • Network accessline 108
    https://mp.weixin.qq.com/s/xxx
  • Network accessline 109
    https://mp.weixin.qq.com/s/yyy
  • Network accessline 174
    历史文章列表下载:https://mp.weixin.qq.com/s/xxx
  • Access to secretsline 270
    [Credential-related source omitted]
  • Access to secretsline 385
    [Credential-related source omitted]
  • Access to secretsline 506
    [Credential-related source omitted]
  • Access to secretsline 727
    [Credential-related source omitted]

docs/plans/2026-07-09-proxy-snapshot-validation-plan.md

  • Network accessline 86
    - POST 到 `https://mp.weixin.qq.com/__moore_capture`

evals/evals.json

  • Network accessline 4
    {       "id": 1,       "prompt": "帮我下载这篇公众号文章,只要 Markdown 和图片:https://mp.weixin.qq.com/s/example",
  • Network accessline 5
    "id": 1,       "prompt": "帮我下载这篇公众号文章,只要 Markdown 和图片:https://mp.weixin.qq.com/s/example",       "expected_output": "优先调用 scripts/wechat_wizard.py run 进入 URL 模式,执行输入、模式、环境、下载、验证门禁;输出到 ~/Downloads/wechat-articles/<run-id>/ 或用户指定目录,包含 index.c
  • Network accessline 6
    "prompt": "帮我下载这篇公众号文章,只要 Markdown 和图片:https://mp.weixin.qq.com/s/example",
  • Network accessline 22
    {       "id": 4,       "prompt": "我想下载某个公众号的历史文章,这是其中一篇样例文章:https://mp.weixin.qq.com/s/example",
  • Network accessline 23
    "id": 4,       "prompt": "我想下载某个公众号的历史文章,这是其中一篇样例文章:https://mp.weixin.qq.com/s/example",       "expected_output": "优先调用 scripts/wechat_wizard.py run 进入 history 模式,生成旧版 profile_ext?action=home 历史入口并停在 need_proxy_confirm;只有用户确认后才用 history-pro
  • Network accessline 24
    "prompt": "我想下载某个公众号的历史文章,这是其中一篇样例文章:https://mp.weixin.qq.com/s/example",
  • Network accessline 46
    {       "id": 8,       "prompt": "下载这几篇公众号文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b,自动去重并给我 Markdown 输出目录。",
  • Network accessline 47
    "id": 8,       "prompt": "下载这几篇公众号文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b,自动去重并给我 Markdown 输出目录。",       "expected_output": "优先调用 scripts/wechat_wizard.py run 进入统一 URL wizard;执行输入、模式、环境、下载、验证门禁;输出 task_id、run_id、output_
  • Network accessline 48
    "prompt": "下载这几篇公众号文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b,自动去重并给我 Markdown 输出目录。",

evals/fixtures/exporter_fixture.json

  • Network accessline 4
    "nickname": "哥飞",     "alias": "gefei7",     "round_head_img": "https://mmbiz.qpic.cn/demo/avatar.jpg",
  • Network accessline 5
    "alias": "gefei7",     "round_head_img": "https://mmbiz.qpic.cn/demo/avatar.jpg",     "signature": "AI 工具与出海实践"
  • Network accessline 6
    "round_head_img": "https://mmbiz.qpic.cn/demo/avatar.jpg",
  • Network accessline 15
    "author_name": "哥飞",       "digest": "一篇关于 AI 工具增长的文章",       "link": "https://mp.weixin.qq.com/s/demo-exporter-article-1",
  • Network accessline 16
    "digest": "一篇关于 AI 工具增长的文章",       "link": "https://mp.weixin.qq.com/s/demo-exporter-article-1",       "cover": "https://mmbiz.qpic.cn/demo/cover1.jpg",
  • Network accessline 17
    "link": "https://mp.weixin.qq.com/s/demo-exporter-article-1",
  • Network accessline 18
    "cover": "https://mmbiz.qpic.cn/demo/cover1.jpg",
  • Network accessline 27
    "author_name": "哥飞",       "digest": "一篇关于公众号运营的文章",       "link": "https://mp.weixin.qq.com/s/demo-exporter-article-2",
  • Network accessline 28
    "digest": "一篇关于公众号运营的文章",       "link": "https://mp.weixin.qq.com/s/demo-exporter-article-2",       "cover": "https://mmbiz.qpic.cn/demo/cover2.jpg",
  • Network accessline 29
    "link": "https://mp.weixin.qq.com/s/demo-exporter-article-2",
  • Network accessline 30
    "cover": "https://mmbiz.qpic.cn/demo/cover2.jpg",
  • Network accessline 39
    "author_name": "哥飞",       "digest": "一篇关于智能体工作流的文章",       "link": "https://mp.weixin.qq.com/s/demo-exporter-article-3",
  • Network accessline 40
    "digest": "一篇关于智能体工作流的文章",       "link": "https://mp.weixin.qq.com/s/demo-exporter-article-3",       "cover": "https://mmbiz.qpic.cn/demo/cover3.jpg",
  • Network accessline 41
    "link": "https://mp.weixin.qq.com/s/demo-exporter-article-3",
  • Network accessline 42
    "cover": "https://mmbiz.qpic.cn/demo/cover3.jpg",

evals/fixtures/html/demo-url-article-1.html

  • Network accessline 4
    <meta property="og:title" content="离线单篇下载测试">   <meta property="og:article:author" content="测试公众号">   <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-1">
  • Network accessline 5
    <meta property="og:article:author" content="测试公众号">   <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-1">   <title>离线单篇下载测试 - 微信公众平台</title>
  • Network accessline 6
    <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-1">
  • Network accessline 19
    <h2>第一节</h2>     <p>这是离线 fixture 文章正文。</p>     <p><a href="https://example.com">参考链接</a></p>
  • Network accessline 20
    <p>这是离线 fixture 文章正文。</p>     <p><a href="https://example.com">参考链接</a></p>   </div>
  • Network accessline 21
    <p><a href="https://example.com">参考链接</a></p>

evals/fixtures/html/demo-url-article-2.html

  • Network accessline 4
    <meta property="og:title" content="离线多篇下载测试">   <meta property="og:article:author" content="测试公众号">   <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-2">
  • Network accessline 5
    <meta property="og:article:author" content="测试公众号">   <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-2">   <title>离线多篇下载测试 - 微信公众平台</title>
  • Network accessline 6
    <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-2">

evals/fixtures/html/demo-url-article-content-noencode.html

  • Network accessline 4
    <meta property="og:title" content="贴图公众号正文提取测试">   <meta property="og:article:author" content="贴图测试公众号">   <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-content-noencode">
  • Network accessline 5
    <meta property="og:article:author" content="贴图测试公众号">   <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-content-noencode">   <title>贴图公众号正文提取测试 - 微信公众平台</title>
  • Network accessline 6
    <meta property="og:url" content="https://mp.weixin.qq.com/s/demo-url-article-content-noencode">
  • Network accessline 14
    title: '贴图公众号正文提取测试',       item_show_type: '8' * 1,       content_noencode: '\x3csection\x3e\x3ch2\x3e隐藏字段正文\x3c/h2\x3e\x3cp\x3e这是从 content_noencode 提取的完整正文。\x3c/p\x3e\x3cp\x3eUnicode:\u6b63\u6587 \uD83D\uDDBC\x3c/p\x3e\x3cimg data-src=\x2
  • Network accessline 15
    item_show_type: '8' * 1,       content_noencode: '\x3csection\x3e\x3ch2\x3e隐藏字段正文\x3c/h2\x3e\x3cp\x3e这是从 content_noencode 提取的完整正文。\x3c/p\x3e\x3cp\x3eUnicode:\u6b63\u6587 \uD83D\uDDBC\x3c/p\x3e\x3cimg data-src=\x22https://mmbiz.qpic.cn/test.
  • Network accessline 16
    content_noencode: '\x3csection\x3e\x3ch2\x3e隐藏字段正文\x3c/h2\x3e\x3cp\x3e这是从 content_noencode 提取的完整正文。\x3c/p\x3e\x3cp\x3eUnicode:\u6b63\u6587 \uD83D\uDDBC\x3c/p\x3e\x3cimg data-src=\x22https://mmbiz.qpic.cn/test.png\x22 alt=\x22正文配图\x22\x3e\x3

evals/test_credential_broker.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 30
    [Credential-related source omitted]
  • Network accessline 31
    [Credential-related source omitted]
  • Network accessline 32
    [Credential-related source omitted]
  • Network accessline 49
    def test_expired_credential_is_removed(self) -> None:         broker = WeChatCredentialBroker(self.tmp / "expired.sock", "session", "capability-test", ttl_seconds=60)         broker.capture("https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=
  • Network accessline 50
    broker = WeChatCredentialBroker(self.tmp / "expired.sock", "session", "capability-test", ttl_seconds=60)         broker.capture("https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12", {"cookie": "x"})         broker._credentials["MzDemo"]["e
  • Network accessline 51
    broker.capture("https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12", {"cookie": "x"})
  • Network accessline 64
    broker = WeChatCredentialBroker(self.tmp / "engagement.sock", "session", "capability-test", http_get=fake_get)         broker.capture(             "https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12&key=key-secret&pass_ticket=ticket-secret
  • Network accessline 65
    [Credential-related source omitted]
  • Network accessline 66
    [Credential-related source omitted]
  • Network accessline 69
    result = broker.fetch_engagement(             "MzDemo",             [{"article_id": 7, "msgid": "msg-7", "idx": 1, "comment_id": "comment-7", "url": "https://mp.weixin.qq.com/s/demo"}],
  • Network accessline 70
    "MzDemo",             [{"article_id": 7, "msgid": "msg-7", "idx": 1, "comment_id": "comment-7", "url": "https://mp.weixin.qq.com/s/demo"}],         )
  • Network accessline 71
    [{"article_id": 7, "msgid": "msg-7", "idx": 1, "comment_id": "comment-7", "url": "https://mp.weixin.qq.com/s/demo"}],
  • Network accessline 85
    broker = WeChatCredentialBroker(self.tmp / "capture.sock", "session", "capability-test")         captured = broker.capture(             "https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12&key=key-secret&pass_ticket=ticket-secret",
  • Network accessline 86
    captured = broker.capture(             "https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12&key=key-secret&pass_ticket=ticket-secret",             {"cookie": "wap_sid2=cookie-secret"},
  • Network accessline 87
    "https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12&key=key-secret&pass_ticket=ticket-secret",
  • Network accessline 105
    broker = WeChatCredentialBroker(self.tmp / "safe.sock", "session", "capability-test", http_get=fake_get)         broker.capture(             "https://mp.weixin.qq.com/s/demo?__biz=MzDemo&uin=12&key=key-secret&pass_ticket=ticket-secret&appms
  • Network accessline 106
    [Credential-related source omitted]
  • Network accessline 107
    [Credential-related source omitted]
  • Network accessline 109
    )         invalid = broker.fetch_engagement(             "MzDemo", [{"article_id": 1, "msgid": "m", "idx": 1, "comment_id": "c", "url": "https://example.com/collect"}]
  • Network accessline 110
    invalid = broker.fetch_engagement(             "MzDemo", [{"article_id": 1, "msgid": "m", "idx": 1, "comment_id": "c", "url": "https://example.com/collect"}]         )
  • Network accessline 111
    "MzDemo", [{"article_id": 1, "msgid": "m", "idx": 1, "comment_id": "c", "url": "https://example.com/collect"}]
  • Network accessline 112
    )         rejected = broker.fetch_engagement(             "MzDemo", [{"article_id": 2, "msgid": "m", "idx": 1, "comment_id": "c", "url": "https://mp.weixin.qq.com/s/demo"}]
  • Network accessline 113
    rejected = broker.fetch_engagement(             "MzDemo", [{"article_id": 2, "msgid": "m", "idx": 1, "comment_id": "c", "url": "https://mp.weixin.qq.com/s/demo"}]         )
  • Network accessline 114
    "MzDemo", [{"article_id": 2, "msgid": "m", "idx": 1, "comment_id": "c", "url": "https://mp.weixin.qq.com/s/demo"}]
  • Network accessline 130
    article = {"article_id": 7, "msgid": "msg-7", "idx": 1, "comment_id": "comment-7", "url": "https://mp.weixin.qq.com/s/demo"}
  • Network accessline 133
    [Credential-related source omitted]
  • Network accessline 134
    [Credential-related source omitted]
  • Network accessline 135
    [Credential-related source omitted]
  • Network accessline 162
    broker.start()         try:             with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
  • Network accessline 163
    try:             with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:                 client.connect(str(path))
  • Network accessline 164
    with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:

evals/test_exporter_contract.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 37
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 218
    {                 "login_id": login_id,                 "base_url": "https://down.mptext.top",
  • Network accessline 219
    "login_id": login_id,                 "base_url": "https://down.mptext.top",                 "qrcode_path": str(qrcode_path),
  • Network accessline 220
    "base_url": "https://down.mptext.top",
  • Network accessline 414
    payload = self.run_cli(             "exporter-wizard",             "根据这篇文章 URL 找公众号并列出历史文章:https://mp.weixin.qq.com/s/demo-exporter-article-1",
  • Network accessline 415
    "exporter-wizard",             "根据这篇文章 URL 找公众号并列出历史文章:https://mp.weixin.qq.com/s/demo-exporter-article-1",             "--list-only",
  • Network accessline 416
    "根据这篇文章 URL 找公众号并列出历史文章:https://mp.weixin.qq.com/s/demo-exporter-article-1",
  • Network accessline 440
    {                         "title": "含下划线短链",                         "link": "https://mp.weixin.qq.com/s/a_b",
  • Network accessline 441
    "title": "含下划线短链",                         "link": "https://mp.weixin.qq.com/s/a_b",                         "update_time": 1783000000,
  • Network accessline 442
    "link": "https://mp.weixin.qq.com/s/a_b",
  • Network accessline 450
    code, payload = self.run_cli_allow_fail(             "exporter-wizard",             "根据这篇文章 URL 找公众号并列出历史文章:https://mp.weixin.qq.com/s/acb",
  • Network accessline 451
    "exporter-wizard",             "根据这篇文章 URL 找公众号并列出历史文章:https://mp.weixin.qq.com/s/acb",             "--list-only",
  • Network accessline 452
    "根据这篇文章 URL 找公众号并列出历史文章:https://mp.weixin.qq.com/s/acb",
  • Network accessline 460
    [Credential-related source omitted]
  • Network accessline 462
    [Credential-related source omitted]
  • Network accessline 509
    {                         "title": "第二账号文章",                         "link": "https://mp.weixin.qq.com/s/second-account-article",
  • Network accessline 510
    "title": "第二账号文章",                         "link": "https://mp.weixin.qq.com/s/second-account-article",                         "update_time": 1783000000,
  • Network accessline 511
    "link": "https://mp.weixin.qq.com/s/second-account-article",
  • Network accessline 636
    {                     "title": f"分页文章 {number}",                     "link": f"https://mp.weixin.qq.com/s/page-{number}",
  • Network accessline 637
    "title": f"分页文章 {number}",                     "link": f"https://mp.weixin.qq.com/s/page-{number}",                     "update_time": 1783000000 - number,
  • Network accessline 638
    "link": f"https://mp.weixin.qq.com/s/page-{number}",
  • Network accessline 714
    "idx": 1,                     "title": "另一篇文章",                     "url": "https://mp.weixin.qq.com/s/other",
  • Network accessline 715
    "title": "另一篇文章",                     "url": "https://mp.weixin.qq.com/s/other",                     "digest": "",
  • Network accessline 716
    "url": "https://mp.weixin.qq.com/s/other",
  • Network accessline 863
    context = wechat_exporter.extract_wechat_article_context(             "var __biz = 'MzIxNTA1MDEwNg=='; var comment_id = '12345'; var key = 'secret';",             "https://mp.weixin.qq.com/s/demo?pass_ticket=secret",
  • Network accessline 864
    "var __biz = 'MzIxNTA1MDEwNg=='; var comment_id = '12345'; var key = 'secret';",             "https://mp.weixin.qq.com/s/demo?pass_ticket=secret",         )
  • Network accessline 865
    "https://mp.weixin.qq.com/s/demo?pass_ticket=secret",
  • Network accessline 1193
    "warning",             detail={                 "url": "https://mp.weixin.qq.com/s/demo?pass_ticket=secret-ticket&key=secret-key",
  • Network accessline 1194
    detail={                 "url": "https://mp.weixin.qq.com/s/demo?pass_ticket=secret-ticket&key=secret-key",                 "cookie": "secret-cookie",
  • Network accessline 1195
    "url": "https://mp.weixin.qq.com/s/demo?pass_ticket=secret-ticket&key=secret-key",

evals/test_snapshot_attach_contract.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 36
    "publish_time": "2026年7月9日 20:00",                 "captured_at": "2026-07-09T12:00:00Z",                 "url": "https://mp.weixin.qq.com/s?__biz=testbiz&mid=1&idx=1&sn=abc",
  • Network accessline 37
    "captured_at": "2026-07-09T12:00:00Z",                 "url": "https://mp.weixin.qq.com/s?__biz=testbiz&mid=1&idx=1&sn=abc",                 "js_content_html": "<p>正文第一段</p>",
  • Network accessline 38
    "url": "https://mp.weixin.qq.com/s?__biz=testbiz&mid=1&idx=1&sn=abc",
  • Network accessline 64
    "title": "页面数据测试",             "account_name": "测试号",             "url": "https://mp.weixin.qq.com/s?__biz=testbiz&mid=1&idx=1&sn=abc",
  • Network accessline 65
    "account_name": "测试号",             "url": "https://mp.weixin.qq.com/s?__biz=testbiz&mid=1&idx=1&sn=abc",         }
  • Network accessline 66
    "url": "https://mp.weixin.qq.com/s?__biz=testbiz&mid=1&idx=1&sn=abc",

evals/test_video_download_contract.py

  • Executable scriptline 1
    Executable file
  • Network accessline 32
    "media": [                     {                         "url": "https://finder.video.qq.com/video.mp4?encfilekey=a",
  • Network accessline 33
    [Credential-related source omitted]
  • Network accessline 34
    "url": "https://finder.video.qq.com/video.mp4?encfilekey=a",
  • Network accessline 40
    [Credential-related source omitted]
  • Network accessline 41
    [Credential-related source omitted]
  • Network accessline 42
    [Credential-related source omitted]
  • Network accessline 65
    "idx": 1,                     "title": "视频文章",                     "url": "https://mp.weixin.qq.com/s/video-demo",
  • Network accessline 66
    "title": "视频文章",                     "url": "https://mp.weixin.qq.com/s/video-demo",                     "digest": "",
  • Network accessline 67
    "url": "https://mp.weixin.qq.com/s/video-demo",
  • Access to secretsline 91
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Access to secretsline 94
    [Credential-related source omitted]
  • Access to secretsline 95
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 102
    [Credential-related source omitted]
  • Access to secretsline 104
    [Credential-related source omitted]
  • Access to secretsline 106
    [Credential-related source omitted]

evals/test_wizard_contract.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 51
    [Credential-related source omitted]
  • Network accessline 173
    wechat_downloader.reset_wechat_webview_process = lambda: {"ok": True, "found": False}             wechat_downloader.choose_proxy_port = lambda port=None: 23555             wechat_downloader.resolve_upstream_proxy = lambda value, port, base=
  • Network accessline 174
    wechat_downloader.choose_proxy_port = lambda port=None: 23555             wechat_downloader.resolve_upstream_proxy = lambda value, port, base=None: "http://127.0.0.1:10808"             wechat_downloader.start_proxy_enhancer = lambda base, p
  • Network accessline 175
    wechat_downloader.resolve_upstream_proxy = lambda value, port, base=None: "http://127.0.0.1:10808"
  • Network accessline 198
    self.assertEqual(result["port"], 23555)         self.assertEqual(calls["start_port"], 23555)         self.assertEqual(calls["start_upstream"], "http://127.0.0.1:10808")
  • Network accessline 199
    self.assertEqual(calls["start_port"], 23555)         self.assertEqual(calls["start_upstream"], "http://127.0.0.1:10808")         self.assertEqual(calls["enable_port"], 23555)
  • Network accessline 200
    self.assertEqual(calls["start_upstream"], "http://127.0.0.1:10808")
  • Network accessline 224
    def test_proxy_enhancer_restart_preserves_active_port_and_upstream(self) -> None:         state = {"pid": 1234, "port": 23555, "upstream_proxy": "http://127.0.0.1:10808"}
  • Network accessline 225
    state = {"pid": 1234, "port": 23555, "upstream_proxy": "http://127.0.0.1:10808"}
  • Network accessline 267
    "set:127.0.0.1:10808",                 "stop:1234:23555",                 "start:23555:http://127.0.0.1:10808",
  • Network accessline 268
    "stop:1234:23555",                 "start:23555:http://127.0.0.1:10808",                 "set:127.0.0.1:23555",
  • Network accessline 269
    "start:23555:http://127.0.0.1:10808",
  • Network accessline 383
    code, payload = self.run_cli(             "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 384
    "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",             "--dry-run",
  • Network accessline 385
    "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 408
    _code, payload = self.run_cli(             "run",             "下载这篇公众号文章:https://mp.weixin.qq.com/s/demo-url-article-1",
  • Network accessline 409
    "run",             "下载这篇公众号文章:https://mp.weixin.qq.com/s/demo-url-article-1",             "--output-dir",
  • Network accessline 410
    "下载这篇公众号文章:https://mp.weixin.qq.com/s/demo-url-article-1",
  • Network accessline 438
    _code, payload = self.run_cli(             "run",             "下载这篇公众号文章:https://mp.weixin.qq.com/s/demo-url-article-content-noencode",
  • Network accessline 439
    "run",             "下载这篇公众号文章:https://mp.weixin.qq.com/s/demo-url-article-content-noencode",             "--output-dir",
  • Network accessline 440
    "下载这篇公众号文章:https://mp.weixin.qq.com/s/demo-url-article-content-noencode",
  • Network accessline 459
    self.assertIn("这是从 content_noencode 提取的完整正文。", markdown)         self.assertIn("Unicode:正文 🖼", markdown)         self.assertIn("![正文配图](https://mmbiz.qpic.cn/test.png)", markdown)
  • Network accessline 460
    self.assertIn("Unicode:正文 🖼", markdown)         self.assertIn("![正文配图](https://mmbiz.qpic.cn/test.png)", markdown)         self.assertLess(markdown.index("![正文配图]"), markdown.index("这是从 content_noencode 提取的完整正文。"))
  • Network accessline 461
    self.assertIn("![正文配图](https://mmbiz.qpic.cn/test.png)", markdown)
  • Network accessline 468
    _code, payload = self.run_cli(             "run",             "下载这些公众号文章:https://mp.weixin.qq.com/s/demo-url-article-1 https://mp.weixin.qq.com/s/demo-url-article-2",
  • Network accessline 469
    "run",             "下载这些公众号文章:https://mp.weixin.qq.com/s/demo-url-article-1 https://mp.weixin.qq.com/s/demo-url-article-2",             "--output-dir",
  • Network accessline 470
    "下载这些公众号文章:https://mp.weixin.qq.com/s/demo-url-article-1 https://mp.weixin.qq.com/s/demo-url-article-2",
  • Network accessline 499
    _code, payload = self.run_cli(             "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 500
    "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",             "--dry-run",
  • Network accessline 501
    "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 530
    _code, payload = self.run_cli(             "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 531
    "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",             "--dry-run",
  • Network accessline 532
    "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 544
    _code, overridden = self.run_cli(             "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",
  • Network accessline 545
    "run",             "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",             "--dry-run",
  • Network accessline 546
    "下载这些文章:https://mp.weixin.qq.com/s/a https://mp.weixin.qq.com/s/b",             "--dry-run",             "--download-assets",
  • Network accessline 597
    wechat_downloader.download_one_markdown_only = fake_download             manifest = wechat_downloader.run_markdown_only_download(                 ["https://mp.weixin.qq.com/s/a", "https://mp.weixin.qq.com/s/b"],
  • Network accessline 598
    manifest = wechat_downloader.run_markdown_only_download(                 ["https://mp.weixin.qq.com/s/a", "https://mp.weixin.qq.com/s/b"],                 self.tmp / "parallel",
  • Network accessline 599
    ["https://mp.weixin.qq.com/s/a", "https://mp.weixin.qq.com/s/b"],
  • Network accessline 617
    [Credential-related source omitted]
  • Network accessline 618
    [Credential-related source omitted]
  • Network accessline 619
    [Credential-related source omitted]
  • Network accessline 636
    _code, payload = self.run_cli(             "run",             "用这篇文章 URL 获取公众号历史文章:https://mp.weixin.qq.com/s/a?__biz=MzIxNTA1MDEwNg==",
  • Network accessline 637
    "run",             "用这篇文章 URL 获取公众号历史文章:https://mp.weixin.qq.com/s/a?__biz=MzIxNTA1MDEwNg==",             "--dry-run",
  • Network accessline 638
    "用这篇文章 URL 获取公众号历史文章:https://mp.weixin.qq.com/s/a?__biz=MzIxNTA1MDEwNg==",
  • Network accessline 682
    "history-preflight",             "--url",             "https://mp.weixin.qq.com/s/a?__biz=MzIxNTA1MDEwNg==",
  • Network accessline 683
    "--url",             "https://mp.weixin.qq.com/s/a?__biz=MzIxNTA1MDEwNg==",         )
  • Network accessline 684
    "https://mp.weixin.qq.com/s/a?__biz=MzIxNTA1MDEwNg==",
  • Network accessline 1108
    {                     "article_id": "article-ok",                     "source_url": "https://mp.weixin.qq.com/s/ok",
  • Network accessline 1109
    "article_id": "article-ok",                     "source_url": "https://mp.weixin.qq.com/s/ok",                     "status": "success",
  • Network accessline 1110
    "source_url": "https://mp.weixin.qq.com/s/ok",
  • Network accessline 1116
    "failed": [                 {                     "source_url": "https://mp.weixin.qq.com/s/fail?pass_ticket=secret",
  • Network accessline 1117
    {                     "source_url": "https://mp.weixin.qq.com/s/fail?pass_ticket=secret",                     "status": "failed",
  • Network accessline 1118
    "source_url": "https://mp.weixin.qq.com/s/fail?pass_ticket=secret",
  • Network accessline 1139
    def test_url_mode_skips_already_downloaded_for_same_task(self) -> None:         task_id = "task_skip"         url = "https://mp.weixin.qq.com/s/already"
  • Network accessline 1140
    task_id = "task_skip"         url = "https://mp.weixin.qq.com/s/already"         previous_dir = self.tmp / "previous"
  • Network accessline 1141
    url = "https://mp.weixin.qq.com/s/already"
  • Network accessline 1191
    def test_url_mode_skips_cross_task_previous_success_with_evidence(self) -> None:         url = "https://mp.weixin.qq.com/s/cross-task"
  • Network accessline 1192
    url = "https://mp.weixin.qq.com/s/cross-task"
  • Network accessline 1243
    result = wechat_wizard.verify_run(output_dir, {"success_count": 0, "skipped": [{"source_url": "https://mp.weixin.qq.com/s/no-proof"}]})
  • Network accessline 1261
    "skipped": [                     {                         "source_url": "https://mp.weixin.qq.com/s/no-proof",
  • Network accessline 1262
    {                         "source_url": "https://mp.weixin.qq.com/s/no-proof",                         "previous_run_id": "fake-run",
  • Network accessline 1263
    "source_url": "https://mp.weixin.qq.com/s/no-proof",
  • Network accessline 1279
    (output_dir / "articles.json").write_text("[]\n", encoding="utf-8")         (output_dir / "errors.json").write_text("[]\n", encoding="utf-8")         url = "https://mp.weixin.qq.com/s/proof"
  • Network accessline 1280
    (output_dir / "errors.json").write_text("[]\n", encoding="utf-8")         url = "https://mp.weixin.qq.com/s/proof"         wechat_wizard.record_download_manifest(
  • Network accessline 1281
    url = "https://mp.weixin.qq.com/s/proof"
  • Network accessline 1314
    def test_retry_failed_urls_uses_failed_items(self) -> None:         task_id = "task_retry"         url = "https://mp.weixin.qq.com/s/retry-me"
  • Network accessline 1315
    task_id = "task_retry"         url = "https://mp.weixin.qq.com/s/retry-me"         intent = wechat_wizard.parse_intent(f"下载:{url}")
  • Network accessline 1316
    url = "https://mp.weixin.qq.com/s/retry-me"
  • Network accessline 1358
    finally:             db.close()         intent = wechat_wizard.parse_intent("下载:https://mp.weixin.qq.com/s/locked")
  • Network accessline 1359
    db.close()         intent = wechat_wizard.parse_intent("下载:https://mp.weixin.qq.com/s/locked")         wechat_wizard.decide_mode(intent)
  • Network accessline 1360
    intent = wechat_wizard.parse_intent("下载:https://mp.weixin.qq.com/s/locked")
  • Access to secretsline 1388
    [Credential-related source omitted]
  • Network accessline 1617
    "success_count": 1,                 "failure_count": 0,                 "articles": [{"source_url": "https://mp.weixin.qq.com/s/a", "status": "success"}],
  • Network accessline 1618
    "failure_count": 0,                 "articles": [{"source_url": "https://mp.weixin.qq.com/s/a", "status": "success"}],                 "failed": [],
  • Network accessline 1619
    "articles": [{"source_url": "https://mp.weixin.qq.com/s/a", "status": "success"}],
  • Network accessline 1712
    "port": 8899,                 "proxy": "127.0.0.1:8899",                 "upstream_proxy": "http://127.0.0.1:10808",
  • Network accessline 1713
    "proxy": "127.0.0.1:8899",                 "upstream_proxy": "http://127.0.0.1:10808",                 "log": str(self.tmp / "old.proxy.log"),
  • Network accessline 1714
    "upstream_proxy": "http://127.0.0.1:10808",
  • Network accessline 1720
    try:             wechat_downloader.history_proxy_process_running = lambda pid, port: int(pid) == 1234 and int(port) == 8899             wechat_downloader.resolve_upstream_proxy = lambda value, port, base=None: "http://127.0.0.1:10808"
  • Network accessline 1721
    wechat_downloader.history_proxy_process_running = lambda pid, port: int(pid) == 1234 and int(port) == 8899             wechat_downloader.resolve_upstream_proxy = lambda value, port, base=None: "http://127.0.0.1:10808"             result = w
  • Network accessline 1722
    wechat_downloader.resolve_upstream_proxy = lambda value, port, base=None: "http://127.0.0.1:10808"
  • Network accessline 1749
    8899,             1234,             "http://127.0.0.1:10808",
  • Network accessline 1750
    1234,             "http://127.0.0.1:10808",             wechat_downloader.session_proxy_state_path(self.tmp, "new-session"),
  • Network accessline 1751
    "http://127.0.0.1:10808",
  • Access to secretsline 1818
    [Credential-related source omitted]
  • Access to secretsline 1819
    [Credential-related source omitted]
  • Access to secretsline 1820
    [Credential-related source omitted]
  • Access to secretsline 1822
    [Credential-related source omitted]
  • Access to secretsline 1823
    [Credential-related source omitted]
  • Access to secretsline 1824
    [Credential-related source omitted]
  • Access to secretsline 1831
    [Credential-related source omitted]
  • Access to secretsline 1833
    [Credential-related source omitted]
  • Access to secretsline 1835
    [Credential-related source omitted]
  • Access to secretsline 1837
    [Credential-related source omitted]
  • Access to secretsline 1839
    [Credential-related source omitted]
  • Access to secretsline 1841
    [Credential-related source omitted]
  • Access to secretsline 1849
    [Credential-related source omitted]
  • Access to secretsline 1850
    [Credential-related source omitted]
  • Access to secretsline 1852
    [Credential-related source omitted]
  • Access to secretsline 1853
    [Credential-related source omitted]
  • Access to secretsline 1858
    [Credential-related source omitted]
  • Access to secretsline 1860
    [Credential-related source omitted]
  • Access to secretsline 1862
    [Credential-related source omitted]
  • Access to secretsline 1864
    [Credential-related source omitted]
  • Access to secretsline 1882
    [Credential-related source omitted]
  • Access to secretsline 1883
    [Credential-related source omitted]
  • Access to secretsline 1885
    [Credential-related source omitted]
  • Access to secretsline 1886
    [Credential-related source omitted]
  • Access to secretsline 1891
    [Credential-related source omitted]
  • Access to secretsline 1893
    [Credential-related source omitted]
  • Access to secretsline 1895
    [Credential-related source omitted]
  • Access to secretsline 1897
    [Credential-related source omitted]
  • Network accessline 1898
    [Credential-related source omitted]
  • Network accessline 1899
    [Credential-related source omitted]
  • Network accessline 1900
    " https://finder.video.qq.com/media.mp4?key=secret"
  • Network accessline 1902
    self.assertEqual(             links,             ["https://channels.weixin.qq.com/web/pages/feed?finderUsername=demo"],
  • Network accessline 1903
    links,             ["https://channels.weixin.qq.com/web/pages/feed?finderUsername=demo"],         )
  • Network accessline 1904
    ["https://channels.weixin.qq.com/web/pages/feed?finderUsername=demo"],
  • Network accessline 1906
    self.assertEqual(addon.sanitize_channels_url("https://channels.weixin.qq.com/static/app.js"), "")
  • Access to secretsline 1919
    [Credential-related source omitted]
  • Access to secretsline 1920
    [Credential-related source omitted]
  • Access to secretsline 1921
    [Credential-related source omitted]
  • Access to secretsline 1923
    [Credential-related source omitted]
  • Access to secretsline 1924
    [Credential-related source omitted]
  • Access to secretsline 1925
    [Credential-related source omitted]
  • Network accessline 1932
    [Credential-related source omitted]
  • Network accessline 1933
    [Credential-related source omitted]
  • Network accessline 1934
    [Credential-related source omitted]
  • Network accessline 1935
    "digest": "摘要",                             "cover": "https://mmbiz.qpic.cn/cover",                             "multi_app_msg_item_list": [
  • Network accessline 1936
    "cover": "https://mmbiz.qpic.cn/cover",
  • Network accessline 1938
    {                                     "title": "首页次篇",                                     "content_url": "https://mp.weixin.qq.com/s/def?pass_ticket=hidden&idx=2",
  • Network accessline 1939
    "title": "首页次篇",                                     "content_url": "https://mp.weixin.qq.com/s/def?pass_ticket=hidden&idx=2",                                 }
  • Network accessline 1940
    "content_url": "https://mp.weixin.qq.com/s/def?pass_ticket=hidden&idx=2",
  • Network accessline 1949
    rows = addon.rows_from_any_payload(                 extracted,                 {"account_name": "测试号", "account_id": "biz", "sample_url": "https://mp.weixin.qq.com/s/source"},
  • Network accessline 1950
    extracted,                 {"account_name": "测试号", "account_id": "biz", "sample_url": "https://mp.weixin.qq.com/s/source"},                 "biz",
  • Network accessline 1951
    {"account_name": "测试号", "account_id": "biz", "sample_url": "https://mp.weixin.qq.com/s/source"},
  • Access to secretsline 1956
    [Credential-related source omitted]
  • Access to secretsline 1958
    [Credential-related source omitted]
  • Access to secretsline 1960
    [Credential-related source omitted]
  • Access to secretsline 1962
    [Credential-related source omitted]
  • Access to secretsline 1964
    [Credential-related source omitted]
  • Access to secretsline 1966
    [Credential-related source omitted]
  • Network accessline 1974
    result = wechat_downloader.prepare_history_capture(             self.tmp,             "https://mp.weixin.qq.com/s/sample",
  • Network accessline 1975
    self.tmp,             "https://mp.weixin.qq.com/s/sample",             8899,
  • Network accessline 1976
    "https://mp.weixin.qq.com/s/sample",
  • Network accessline 2006
    "ok": True,                 "session_id": session_id,                 "open_url": "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=biz&scene=124#wechat_redirect",
  • Network accessline 2007
    "session_id": session_id,                 "open_url": "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=biz&scene=124#wechat_redirect",                 "copied_to_clipboard": copy,
  • Network accessline 2008
    "open_url": "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=biz&scene=124#wechat_redirect",
  • Network accessline 2013
    "ok": True,                 "pid": 1234,                 "upstream_proxy": "http://127.0.0.1:10808",
  • Network accessline 2014
    "pid": 1234,                 "upstream_proxy": "http://127.0.0.1:10808",                 "reused_existing_proxy": False,
  • Network accessline 2015
    "upstream_proxy": "http://127.0.0.1:10808",
  • Network accessline 2025
    result = wechat_downloader.prepare_history_capture(                 self.tmp,                 "https://mp.weixin.qq.com/s/sample",
  • Network accessline 2026
    self.tmp,                 "https://mp.weixin.qq.com/s/sample",                 8899,
  • Network accessline 2027
    "https://mp.weixin.qq.com/s/sample",
  • Network accessline 2044
    self.assertEqual(result["account_name"], "测试号")         self.assertIn("profile_ext?action=home", result["open_url"])         self.assertEqual(result["upstream_proxy"], "http://127.0.0.1:10808")
  • Network accessline 2045
    self.assertIn("profile_ext?action=home", result["open_url"])         self.assertEqual(result["upstream_proxy"], "http://127.0.0.1:10808")         self.assertFalse(result["proxy_already_enabled"])
  • Network accessline 2046
    self.assertEqual(result["upstream_proxy"], "http://127.0.0.1:10808")
  • Network accessline 2067
    "account_id": "biz",                 "title": "历史文章",                 "url": "https://mp.weixin.qq.com/s/a",
  • Network accessline 2068
    "title": "历史文章",                 "url": "https://mp.weixin.qq.com/s/a",                 "publish_time": "2026-07-06 10:00:00",
  • Network accessline 2069
    "url": "https://mp.weixin.qq.com/s/a",
  • Network accessline 2071
    "digest": "",                 "cover": "",                 "source_article_url": "https://mp.weixin.qq.com/s/source",
  • Network accessline 2072
    "cover": "",                 "source_article_url": "https://mp.weixin.qq.com/s/source",                 "fetch_method": "wechat-history-proxy",
  • Network accessline 2073
    "source_article_url": "https://mp.weixin.qq.com/s/source",

references/backend-design.md

  • Access to secretsline 71
    [Credential-related source omitted]
  • Access to secretsline 192
    [Credential-related source omitted]

references/output-formats.md

  • Network accessline 48
    author: "..." publish_time: "..." source_url: "https://mp.weixin.qq.com/s/..."
  • Network accessline 49
    publish_time: "..." source_url: "https://mp.weixin.qq.com/s/..." downloaded_at: "..."
  • Network accessline 50
    source_url: "https://mp.weixin.qq.com/s/..."
  • Access to secretsline 171
    [Credential-related source omitted]

references/skill-cli-flow.md

  • Network accessline 89
    https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=<biz>&scene=124#wechat_redirect
  • Network accessline 114
    Use `--upstream-proxy http://host:port` only for an explicit override. Use `--upstream-proxy none` only when direct outbound traffic is desired.
  • Access to secretsline 377
    [Credential-related source omitted]

scripts/inspect_context.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/validate_outputs.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/wechat_credential_broker.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 85
    except FileNotFoundError:             pass         server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  • Network accessline 86
    pass         server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)         server.bind(str(self.socket_path))
  • Network accessline 87
    server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  • Network accessline 197
    headers = {             "Cookie": raw["cookie"],             "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 198
    "Cookie": raw["cookie"],             "Referer": "https://mp.weixin.qq.com/",             "User-Agent": "Mozilla/5.0 MicroMessenger",
  • Network accessline 199
    "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 252
    if buffer:                 request_params["buffer"] = buffer             text = self._http_get("https://mp.weixin.qq.com/mp/appmsg_comment?" + urllib.parse.urlencode(request_params), headers)
  • Network accessline 253
    request_params["buffer"] = buffer             text = self._http_get("https://mp.weixin.qq.com/mp/appmsg_comment?" + urllib.parse.urlencode(request_params), headers)             payload = json.loads(text)
  • Network accessline 254
    text = self._http_get("https://mp.weixin.qq.com/mp/appmsg_comment?" + urllib.parse.urlencode(request_params), headers)
  • Network accessline 327
    @staticmethod     def _default_http_get(url: str, headers: dict[str, str]) -> str:         request = urllib.request.Request(url, headers=headers)
  • Network accessline 328
    def _default_http_get(url: str, headers: dict[str, str]) -> str:         request = urllib.request.Request(url, headers=headers)         class NoRedirect(urllib.request.HTTPRedirectHandler):
  • Network accessline 329
    request = urllib.request.Request(url, headers=headers)
  • Network accessline 418
    return {"ok": False, "status": "unavailable", "error": "credential broker is not running"}     try:         with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
  • Network accessline 419
    try:         with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:             client.settimeout(timeout_seconds)
  • Network accessline 420
    with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:

scripts/wechat_downloader.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 163
    class NoRedirectHandler(urllib.request.HTTPRedirectHandler):     def redirect_request(self, req: urllib.request.Request, fp: Any, code: int, msg: str, headers: Any, newurl: str) -> None:
  • Network accessline 164
    def redirect_request(self, req: urllib.request.Request, fp: Any, code: int, msg: str, headers: Any, newurl: str) -> None:
  • Access to secretsline 436
    [Credential-related source omitted]
  • Network accessline 454
    if fixture:         return fixture.read_text(encoding="utf-8")     req = urllib.request.Request(
  • Network accessline 455
    return fixture.read_text(encoding="utf-8")     req = urllib.request.Request(         url,
  • Network accessline 456
    req = urllib.request.Request(
  • Network accessline 458
    headers={             "User-Agent": ua or WECHAT_HISTORY_USER_AGENT,             "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 459
    "User-Agent": ua or WECHAT_HISTORY_USER_AGENT,             "Referer": "https://mp.weixin.qq.com/",             "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  • Network accessline 460
    "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 462
    },     )     with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 463
    )     with urllib.request.urlopen(req, timeout=timeout) as resp:         raw = resp.read()
  • Network accessline 464
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 880
    return None     digest = hashlib.sha256(url.encode()).hexdigest()[:16]     req = urllib.request.Request(
  • Network accessline 881
    digest = hashlib.sha256(url.encode()).hexdigest()[:16]     req = urllib.request.Request(         url,
  • Network accessline 882
    req = urllib.request.Request(
  • Network accessline 884
    headers={             "User-Agent": "Mozilla/5.0",             "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 885
    "User-Agent": "Mozilla/5.0",             "Referer": "https://mp.weixin.qq.com/",         },
  • Network accessline 886
    "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 914
    if not allowed:         return None, reason     req = urllib.request.Request(
  • Network accessline 915
    return None, reason     req = urllib.request.Request(         url,
  • Network accessline 916
    req = urllib.request.Request(
  • Network accessline 918
    headers={             "User-Agent": "Mozilla/5.0",             "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 919
    "User-Agent": "Mozilla/5.0",             "Referer": "https://mp.weixin.qq.com/",         },
  • Network accessline 920
    "Referer": "https://mp.weixin.qq.com/",
  • Network accessline 1175
    }         )         return f"https://mp.weixin.qq.com/mp/profile_ext?{query}#wechat_redirect", "profile_history"
  • Network accessline 1176
    )         return f"https://mp.weixin.qq.com/mp/profile_ext?{query}#wechat_redirect", "profile_history"     raise ValueError("cannot build legacy profile_ext history URL because __biz was not extracted from the sample article")
  • Network accessline 1177
    return f"https://mp.weixin.qq.com/mp/profile_ext?{query}#wechat_redirect", "profile_history"
  • Network accessline 1521
    "x5": first_query_value(values, "x5") or "0",     }     return "https://mp.weixin.qq.com/mp/profile_ext?" + urllib.parse.urlencode(query)
  • Network accessline 1523
    return "https://mp.weixin.qq.com/mp/profile_ext?" + urllib.parse.urlencode(query)
  • Network accessline 1526
    def fetch_json_url(url: str, referer: str, timeout: int = 20) -> dict[str, Any]:     req = urllib.request.Request(
  • Network accessline 1527
    req = urllib.request.Request(
  • Network accessline 1534
    },     )     with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 1535
    )     with urllib.request.urlopen(req, timeout=timeout) as resp:         raw = resp.read()
  • Network accessline 1536
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 1554
    url = "https:" + url     elif url.startswith("/"):         url = "https://mp.weixin.qq.com" + url
  • Network accessline 1555
    elif url.startswith("/"):         url = "https://mp.weixin.qq.com" + url     return safe_display_url(url)
  • Network accessline 1556
    url = "https://mp.weixin.qq.com" + url
  • Network accessline 1738
    SELECT url, title, last_visit_time                     FROM urls                     WHERE url LIKE 'https://mp.weixin.qq.com/s/%'
  • Network accessline 1739
    FROM urls                     WHERE url LIKE 'https://mp.weixin.qq.com/s/%'                       AND last_visit_time >= ?
  • Network accessline 1740
    WHERE url LIKE 'https://mp.weixin.qq.com/s/%'
  • Network accessline 1900
    if port < PROXY_PORT_MIN or port > PROXY_PORT_MAX:         return False     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
  • Network accessline 1901
    return False     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  • Network accessline 1902
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
  • Network accessline 1994
    parsed = urllib.parse.urlsplit(value)     if parsed.scheme not in {"http", "https"} or not parsed.hostname or not parsed.port:         raise ValueError("upstream proxy must look like http://host:port")
  • Network accessline 1995
    if parsed.scheme not in {"http", "https"} or not parsed.hostname or not parsed.port:         raise ValueError("upstream proxy must look like http://host:port")     return urllib.parse.urlunsplit((parsed.scheme, parsed.netloc, "", "", ""))
  • Network accessline 1996
    raise ValueError("upstream proxy must look like http://host:port")
  • Network accessline 2020
    continue         try:             return normalize_upstream_proxy(f"http://{server}:{proxy_port}")
  • Network accessline 2021
    try:             return normalize_upstream_proxy(f"http://{server}:{proxy_port}")         except ValueError:
  • Network accessline 2022
    return normalize_upstream_proxy(f"http://{server}:{proxy_port}")
  • Network accessline 2043
    if server in {"127.0.0.1", "localhost"} and proxy_port == str(port):         return upstream_from_saved_proxy_state(base, port)     return normalize_upstream_proxy(f"http://{server}:{proxy_port}")
  • Network accessline 2045
    return normalize_upstream_proxy(f"http://{server}:{proxy_port}")
  • Access to secretsline 2235
    [Credential-related source omitted]
  • Network accessline 2319
    else "No upstream proxy is configured; mitmproxy connects directly."         ),         "certificate_step": "With the proxy enabled, open http://mitm.it in a browser and install/trust the mitmproxy certificate if you have not done this befo
  • Network accessline 2320
    ),         "certificate_step": "With the proxy enabled, open http://mitm.it in a browser and install/trust the mitmproxy certificate if you have not done this before.",     }
  • Network accessline 2321
    "certificate_step": "With the proxy enabled, open http://mitm.it in a browser and install/trust the mitmproxy certificate if you have not done this before.",
  • Network accessline 3283
    try:             if sys.platform == "darwin":                 subprocess.run(["open", "http://mitm.it"], check=True)
  • Network accessline 3284
    if sys.platform == "darwin":                 subprocess.run(["open", "http://mitm.it"], check=True)                 opened = True
  • Network accessline 3285
    subprocess.run(["open", "http://mitm.it"], check=True)
  • Network accessline 3295
    "install_result": install_result,         "proxy": f"127.0.0.1:{port}",         "cert_page": "http://mitm.it",
  • Network accessline 3296
    "proxy": f"127.0.0.1:{port}",         "cert_page": "http://mitm.it",         "cert_files": cert_files,
  • Network accessline 3297
    "cert_page": "http://mitm.it",
  • Network accessline 3301
    "open_error": open_error,         "next_step": (             "Start history-proxy-start, enable the proxy, then open http://mitm.it and trust the certificate."
  • Network accessline 3302
    "next_step": (             "Start history-proxy-start, enable the proxy, then open http://mitm.it and trust the certificate."             if mitmdump
  • Network accessline 3303
    "Start history-proxy-start, enable the proxy, then open http://mitm.it and trust the certificate."
  • Network accessline 6042
    "--upstream-proxy",         default="auto",         help="Upstream HTTP proxy for mitmproxy, e.g. http://host:port. Use auto to chain the current macOS HTTP proxy, or none to disable.",
  • Network accessline 6043
    default="auto",         help="Upstream HTTP proxy for mitmproxy, e.g. http://host:port. Use auto to chain the current macOS HTTP proxy, or none to disable.",     )
  • Network accessline 6044
    help="Upstream HTTP proxy for mitmproxy, e.g. http://host:port. Use auto to chain the current macOS HTTP proxy, or none to disable.",
  • Network accessline 6051
    p.add_argument("--install", action="store_true", help="Install mitmproxy with Homebrew if mitmdump is missing")     p.add_argument("--yes", action="store_true", help="Actually run brew install mitmproxy when --install is set")     p.add_arg
  • Network accessline 6052
    p.add_argument("--yes", action="store_true", help="Actually run brew install mitmproxy when --install is set")     p.add_argument("--open-cert-page", action="store_true", help="Open http://mitm.it in the default browser")     p.set_defaults
  • Network accessline 6053
    p.add_argument("--open-cert-page", action="store_true", help="Open http://mitm.it in the default browser")

scripts/wechat_exporter.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 63
    DEFAULT_BASE_URL = "https://down.mptext.top"
  • Access to secretsline 167
    [Credential-related source omitted]
  • Access to secretsline 405
    [Credential-related source omitted]
  • Access to secretsline 577
    [Credential-related source omitted]
  • Access to secretsline 578
    [Credential-related source omitted]
  • Access to secretsline 583
    [Credential-related source omitted]
  • Access to secretsline 588
    [Credential-related source omitted]
  • Access to secretsline 603
    [Credential-related source omitted]
  • Access to secretsline 651
    [Credential-related source omitted]
  • Access to secretsline 652
    [Credential-related source omitted]
  • Access to secretsline 654
    [Credential-related source omitted]
  • Access to secretsline 655
    [Credential-related source omitted]
  • Access to secretsline 660
    [Credential-related source omitted]
  • Access to secretsline 666
    [Credential-related source omitted]
  • Access to secretsline 671
    [Credential-related source omitted]
  • Access to secretsline 672
    [Credential-related source omitted]
  • Access to secretsline 734
    [Credential-related source omitted]
  • Network accessline 767
    ) -> tuple[bytes, dict[str, Any], list[str], str]:     url = normalize_base_url(base_url) + path     req = urllib.request.Request(
  • Network accessline 768
    url = normalize_base_url(base_url) + path     req = urllib.request.Request(         url,
  • Network accessline 769
    req = urllib.request.Request(
  • Network accessline 1055
    if query:         url += "?" + query     req = urllib.request.Request(
  • Network accessline 1056
    url += "?" + query     req = urllib.request.Request(         url,
  • Network accessline 1057
    req = urllib.request.Request(
  • Network accessline 1063
    },     )     with urllib.request.urlopen(req, timeout=30) as resp:
  • Network accessline 1064
    )     with urllib.request.urlopen(req, timeout=30) as resp:         raw = resp.read()
  • Network accessline 1065
    with urllib.request.urlopen(req, timeout=30) as resp:
  • Network accessline 1951
    if not port:         return {"ok": False, "status": "needs_capture", "error": "no active proxy-enhancer session"}     proxy = f"http://127.0.0.1:{port}"
  • Network accessline 1952
    return {"ok": False, "status": "needs_capture", "error": "no active proxy-enhancer session"}     proxy = f"http://127.0.0.1:{port}"     opener = urllib.request.build_opener(urllib.request.ProxyHandler({"http": proxy, "https": proxy}))
  • Network accessline 1953
    proxy = f"http://127.0.0.1:{port}"     opener = urllib.request.build_opener(urllib.request.ProxyHandler({"http": proxy, "https": proxy}))     data = None
  • Network accessline 1958
    data = json.dumps(payload, ensure_ascii=False).encode("utf-8")         headers["Content-Type"] = "application/json"     req = urllib.request.Request(f"http://channels.weixin.qq.com{path}", data=data, headers=headers, method=method)
  • Network accessline 1959
    headers["Content-Type"] = "application/json"     req = urllib.request.Request(f"http://channels.weixin.qq.com{path}", data=data, headers=headers, method=method)     try:
  • Network accessline 1960
    req = urllib.request.Request(f"http://channels.weixin.qq.com{path}", data=data, headers=headers, method=method)
  • Access to secretsline 3436
    [Credential-related source omitted]
  • Network accessline 3588
    if (completed) return;       try {{         const resp = await fetch('/login/status?login_id=' + encodeURIComponent(loginId));
  • Network accessline 3589
    try {{         const resp = await fetch('/login/status?login_id=' + encodeURIComponent(loginId));         const data = await resp.json();
  • Network accessline 3590
    const resp = await fetch('/login/status?login_id=' + encodeURIComponent(loginId));
  • Network accessline 3791
    server = ThreadingHTTPServer((host, port), ExporterHandler)     server.runtime_base = base  # type: ignore[attr-defined]     url = f"http://{host}:{port}/"
  • Network accessline 3792
    server.runtime_base = base  # type: ignore[attr-defined]     url = f"http://{host}:{port}/"     if open_browser:
  • Network accessline 3793
    url = f"http://{host}:{port}/"
  • Access to secretsline 3832
    [Credential-related source omitted]
  • Access to secretsline 3890
    [Credential-related source omitted]
  • Access to secretsline 3891
    [Credential-related source omitted]

scripts/wechat_history_mitm_addon.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 121
    }   function refresh(btn) {     fetch('/__moore_video_status').then(function (r) { return r.json(); }).then(function (data) {
  • Network accessline 122
    function refresh(btn) {     fetch('/__moore_video_status').then(function (r) { return r.json(); }).then(function (data) {       var videos = data.videos || [];
  • Network accessline 123
    fetch('/__moore_video_status').then(function (r) { return r.json(); }).then(function (data) {
  • Network accessline 146
    }       setText(btn, '下载中');       fetch('/__moore_video_download', {
  • Network accessline 147
    setText(btn, '下载中');       fetch('/__moore_video_download', {         method: 'POST',
  • Network accessline 148
    fetch('/__moore_video_download', {
  • Network accessline 178
    try{       if(!objectDesc||!objectDesc.media)return;       fetch('/__moore_video_register',{
  • Network accessline 179
    if(!objectDesc||!objectDesc.media)return;       fetch('/__moore_video_register',{         method:'POST',
  • Network accessline 180
    fetch('/__moore_video_register',{
  • Network accessline 196
    function logClient(event, data) {     try {       fetch('/__moore_log', {
  • Network accessline 197
    try {       fetch('/__moore_log', {         method: 'POST',
  • Network accessline 198
    fetch('/__moore_log', {
  • Network accessline 361
    setButtonState('loading');     setTimeout(function () {       fetch('/__moore_capture', {
  • Network accessline 362
    setTimeout(function () {       fetch('/__moore_capture', {         method: 'POST',
  • Network accessline 363
    fetch('/__moore_capture', {
  • Network accessline 664
    url = "https:" + url     elif url.startswith("/"):         url = "https://mp.weixin.qq.com" + url
  • Network accessline 665
    elif url.startswith("/"):         url = "https://mp.weixin.qq.com" + url     parsed = urllib.parse.urlsplit(url)
  • Network accessline 666
    url = "https://mp.weixin.qq.com" + url     parsed = urllib.parse.urlsplit(url)     if parsed.netloc.lower() != "mp.weixin.qq.com":
  • Access to secretsline 1173
    [Credential-related source omitted]
  • Access to secretsline 1174
    [Credential-related source omitted]
  • Access to secretsline 1175
    [Credential-related source omitted]
  • Access to secretsline 1316
    [Credential-related source omitted]

scripts/wechat_video_crypto.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/wechat_video_downloader.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 36
    def request(url: str, method: str, headers: dict[str, str], timeout: int = 30) -> urllib.request.Request:
  • Network accessline 37
    return urllib.request.Request(url, method=method, headers=headers)
  • Network accessline 40
    def open_no_proxy(req: urllib.request.Request, timeout: int = 30):

scripts/wechat_video_models.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/wechat_video_registry.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/wechat_video_service.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/wechat_wizard.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 1508
    [Credential-related source omitted]
  • Network accessline 2255
    def smoke_history_preflight(base: Path, sample_url: str) -> dict[str, Any]:     url = sample_url or "https://mp.weixin.qq.com/s/offline-smoke?__biz=MzIxNTA1MDEwNg=="
  • Network accessline 2256
    url = sample_url or "https://mp.weixin.qq.com/s/offline-smoke?__biz=MzIxNTA1MDEwNg=="
  • Network accessline 2304
    task_id = "smoke_url_" + hashlib.sha256(utc_now().encode("utf-8")).hexdigest()[:12]     output_dir = base / "smoke" / "url-fixture" / task_id     url = "https://mp.weixin.qq.com/s/demo-url-article-1"
  • Network accessline 2305
    output_dir = base / "smoke" / "url-fixture" / task_id     url = "https://mp.weixin.qq.com/s/demo-url-article-1"     intent = parse_intent(f"下载这篇公众号文章:{url}")
  • Network accessline 2306
    url = "https://mp.weixin.qq.com/s/demo-url-article-1"
  • Access to secretsline 2310
    [Credential-related source omitted]
  • Access to secretsline 2311
    [Credential-related source omitted]
  • Access to secretsline 2316
    [Credential-related source omitted]
  • Access to secretsline 2318
    [Credential-related source omitted]
  • Access to secretsline 2508
    [Credential-related source omitted]

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: 3 facts
Signal confidence: 458 facts

and 408 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.