#939 by GitHub stars
Yeachan-Heo/clawhip
claw + whip: Event-to-channel notification router — bypasses gateway sessions to avoid context pollution
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
04a883f86536 → 04a883f86536
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 04a883f86536
No earlier version was observed for comparison.
skills/memory-offload/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
04a883f86536 → 04a883f86536
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 04a883f86536
No earlier version was observed for comparison.
skills/omc/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
04a883f86536 → 04a883f86536
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 04a883f86536
No earlier version was observed for comparison.
skills/omx/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
04a883f86536 → 04a883f86536
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 04a883f86536
No earlier version was observed for comparison.
Verified commit 04a883f86536eef73d8e6e31c261985982a72528
git clone --filter=blob:none --no-checkout https://github.com/Yeachan-Heo/clawhip.git .hotskills/yeachan-heo-clawhip && git -C .hotskills/yeachan-heo-clawhip checkout --detach 04a883f86536eef73d8e6e31c261985982a72528
# Copy each selected skill directory from .hotskills/yeachan-heo-clawhip into .agents/skills/<skill-name>/Heat
1.4- Star growth, last 7 daysAhead of 6% of tracked repositories
- Star growth, last 24 hoursAhead of 0% of tracked repositories
- Rank movement, last 7 daysAhead of 1% of tracked repositories
- Commits, last 30 daysAhead of 90% 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
- clawhip
/ - memory-offload
skills/memory-offload - omc
skills/omc - omx
skills/omx
How it works
clawhip
When your agent uses it
Attach/install/use clawhip as a daemon-first notification gateway runtime for OpenClaw / Clawdbot
What it loads into context
Frontmatter
28 tokensAlways available to the agent
SKILL.md
1,156 tokensWhen the skill is activated
Reference documents
33,139 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Intent
- Prerequisites
- Primary install flow
- Runtime surface
- Lifecycle surface
- Discord bot token (recommended setup)
- Config scaffold expectations
- Dynamic template opt-in
- Filesystem-offloaded memory pattern
- Verification surface
- Attachment summary
Scripts executed separately
install.shintegrations/git/install-hooks.shintegrations/git/post-checkout.shintegrations/git/post-commit.shintegrations/tmux/notify-keyword.shintegrations/tmux/scan-keywords.shintegrations/tmux/stale-check.shplugins/claude-code/bridge.shplugins/codex/bridge.shscripts/internal-pr-format-gate.shscripts/live-verify-default-presets.shtests/install_star_prompt.rs
Files
.github/workflows/ci.ymlasset9,656 bytes.github/workflows/release.ymlasset17,059 bytes.gitignoreasset126 bytesAGENTS.mddoc1,149 bytesARCHITECTURE.mddoc5,346 bytesCHANGELOG.mddoc19,744 bytesCargo.lockasset58,523 bytesCargo.tomlasset1,393 bytesLICENSEasset1,068 bytesREADME.mddoc61,303 bytesSKILL.mdcore4,319 bytesSKILL.mdcore4,319 bytesSKILL.mdcore4,319 bytesSKILL.mdcore4,319 bytesartifacts/issue-360-qa.jsonasset2,795 bytesassets/clawhip-mascot.jpgasset73,237 bytesbuild.rsasset5,846 bytesbuild/gitdir.rsasset7,144 bytesdeploy/clawhip.serviceasset244 bytesdist-workspace.tomlasset683 bytesdocs/canonical-contract-cleanup.mddoc1,850 bytesdocs/event-contract-v1.mddoc3,718 bytesdocs/event-ledger.mddoc5,848 bytesdocs/examples/MEMORY.example.mddoc1,159 bytesdocs/examples/memory/README.example.mddoc817 bytesdocs/examples/memory/channels/example-channel.mddoc404 bytesdocs/examples/memory/daily/2026-03-10.mddoc445 bytesdocs/examples/memory/projects/clawhip.mddoc266 bytesdocs/examples/memory/topics/lessons.mddoc193 bytesdocs/examples/memory/topics/rules.mddoc141 bytesdocs/geobench.mddoc872 bytesdocs/gjc-sdk-event-bridge.mddoc8,070 bytesdocs/gjc-sdk-integration.mddoc7,895 bytesdocs/live-verification.mddoc7,719 bytesdocs/memory-offload-architecture.mddoc6,408 bytesdocs/memory-offload-guide.mddoc6,189 bytesdocs/native-event-contract.mddoc5,003 bytesgeobench/clawhip.yamlasset2,500 bytesinstall.shruns8,420 bytesintegrations/git/install-hooks.shruns476 bytesintegrations/git/post-checkout.shruns648 bytesintegrations/git/post-commit.shruns443 bytesintegrations/omx/README.mddoc457 bytesintegrations/tmux/notify-keyword.shruns507 bytesintegrations/tmux/scan-keywords.shruns1,403 bytesintegrations/tmux/stale-check.shruns1,697 bytesplugins/claude-code/bridge.shruns76 bytesplugins/claude-code/plugin.tomlasset109 bytesplugins/codex/bridge.shruns70 bytesplugins/codex/plugin.tomlasset97 bytesscripts/internal-pr-format-gate.shruns1,271 bytesscripts/live-verify-default-presets.shruns3,431 bytessrc/binding_verify.rsasset49,253 bytessrc/build_info.rsasset6,664 bytessrc/cli.rsasset83,005 bytessrc/client.rsasset22,030 bytessrc/config.rsasset280,620 bytessrc/core/circuit_breaker.rsasset4,735 bytessrc/core/dlq.rsasset1,787 bytessrc/core/mod.rsasset79 bytessrc/core/rate_limit.rsasset2,604 bytessrc/core/timer_wheel.rsasset4,647 bytessrc/cron.rsasset62,333 bytessrc/daemon.rsasset250,103 bytessrc/deployment.rsasset15,638 bytessrc/discord.rsasset70,106 bytessrc/discord_watch.rsasset37,047 bytessrc/dispatch.rsasset102,479 bytessrc/dynamic_tokens.rsasset5,420 bytessrc/event/body.rsasset4,592 bytessrc/event/compat.rsasset39,525 bytessrc/event/mod.rsasset2,917 bytessrc/events.rsasset86,754 bytessrc/gajae.rsasset103,252 bytessrc/gateway_allowlist.rsasset14,473 bytessrc/gjc/api.rsasset19,998 bytessrc/gjc/cli.rsasset10,657 bytessrc/gjc/control.rsasset74,039 bytessrc/gjc/mod.rsasset562 bytessrc/gjc/model.rsasset26,726 bytessrc/gjc/transport.rsasset20,548 bytessrc/gjc_lane.rsasset228,098 bytessrc/gjc_sdk.rsasset108,789 bytessrc/gjc_sdk_events.rsasset85,889 bytessrc/hooks/mod.rsasset13,354 bytessrc/hooks/prompt_deliver.rsasset46,098 bytessrc/keyword_window.rsasset92,425 bytessrc/lane.rsasset30,122 bytessrc/ledger.rsasset53,489 bytessrc/lib.rsasset1 bytessrc/lifecycle.rsasset17,007 bytessrc/main.rsasset59,770 bytessrc/memory.rsasset46,674 bytessrc/monitor.rsasset68 bytessrc/native_hooks.rsasset63,417 bytessrc/native_observability.rsasset20,544 bytessrc/plugins.rsasset7,343 bytessrc/provenance.rsasset9,094 bytessrc/release_preflight.rsasset16,832 bytessrc/render/default.rsasset71,727 bytessrc/render/mod.rsasset247 bytessrc/router.rsasset113,832 bytessrc/sender_identity.rsasset12,704 bytessrc/sink/discord.rsasset669 bytessrc/sink/http.rsasset62,076 bytessrc/sink/local_file.rsasset4,931 bytessrc/sink/mod.rsasset1,136 bytessrc/sink/slack.rsasset576 bytessrc/slack.rsasset4,356 bytessrc/source/git.rsasset51,193 bytessrc/source/github.rsasset415,993 bytessrc/source/github_notifications.rsasset101,321 bytessrc/source/github_pr_activity_metadata_tests.rsasset20,294 bytessrc/source/github_status.rsasset27,673 bytessrc/source/mod.rsasset1,253 bytessrc/source/subscription.rsasset42,015 bytessrc/source/tmux.rsasset195,136 bytessrc/source/workspace.rsasset38,377 bytessrc/source_checkout.rsasset45,078 bytessrc/telemetry.rsasset10,826 bytessrc/tmux_wrapper.rsasset84,406 bytessrc/update.rsasset10,105 bytestests/build_rs_worktree.rsasset25,800 bytestests/common/gjc_fake_server.rsasset19,367 bytestests/common/gjc_wire.rsasset12,128 bytestests/common/mod.rsasset283 bytestests/config_backup_cleanup.rsasset12,133 bytestests/event_ledger_e2e.rsasset6,162 bytestests/gajae_profile_install_stdin.rsasset26,964 bytestests/gjc_fake_server_contract.rsasset15,947 bytestests/gjc_sdk_event_bridge.rsasset16,704 bytestests/gjc_sdk_full_loop_e2e.rsasset30,542 bytestests/gjc_sdk_transport.rsasset30,094 bytestests/install_star_prompt.rsruns14,059 bytestests/lane_thread_verification.rsasset78,431 bytestests/provider_native_docs_regression.rsasset1,887 bytestests/runtime_config.rsasset805 bytestests/sender_identity_verification.rsasset17,708 bytestests/setup_bind_legacy_route_only.rsasset2,438 bytes
Read SKILL.md
# clawhip skill attachment surface
## Intent
Use this repo as:
- executable/runtime repo
- daemon process for Discord notification routing
- attachable skill surface for OpenClaw / Clawdbot
## Prerequisites
⭐ If you want to support clawhip, star this repository. The interactive repo-local installer and `clawhip install` can offer an optional post-install GitHub star prompt via authenticated `gh api` access when `gh` is installed and authenticated. Skip it with `--skip-star-prompt` or `CLAWHIP_SKIP_STAR_PROMPT=1`.
```bashView the complete source on GitHubWhen your agent uses it
What it loads into context
Frontmatter
0 tokensAlways available to the agent
SKILL.md
427 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
- What you get
- Read order
- Write order
- Default shard map
- Offload triggers
- Start here
Files
SKILL.mdcore1,733 bytes
Read SKILL.md
# clawhip × filesystem-offloaded memory
Use this skill when you want a Claw OS-style memory system where `MEMORY.md` stays small and points into a structured `memory/` tree.
## What you get
- a clear role for `MEMORY.md` as pointer/index/current-beliefs layer
- a practical read/write workflow for agents
- guidance for sharding memory by time, channel, project, topic, and handoff
- migration guidance away from monolithic memory files
## Read order
1. Read `MEMORY.md` first.
2. Follow the pointer to the smallest relevant shard.View the complete source on GitHubWhen your agent uses it
What it loads into context
Frontmatter
0 tokensAlways available to the agent
SKILL.md
178 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
Files
SKILL.mdcore826 bytesSKILL.mdcore826 bytesSKILL.mdcore826 bytes
Read SKILL.md
# Legacy wrapper helper note
This helper directory is no longer the recommended public workflow.
Use provider-native Codex or Claude hooks, rely on git repo/worktree context for routing identity,
and send local verification payloads through:
```bash
clawhip native hook --provider codex --file payload.json
clawhip native hook --provider claude --file payload.json
```
tmux monitoring remains available for keyword/stale alerts, but provider-native hook registration
is now the primary integration path.
View the complete source on GitHubWhen your agent uses it
What it loads into context
Frontmatter
0 tokensAlways available to the agent
SKILL.md
178 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
Files
SKILL.mdcore826 bytesSKILL.mdcore826 bytesSKILL.mdcore826 bytes
Read SKILL.md
# Legacy wrapper helper note
This helper directory is no longer the recommended public workflow.
Use provider-native Codex or Claude hooks, rely on git repo/worktree context for routing identity,
and send local verification payloads through:
```bash
clawhip native hook --provider codex --file payload.json
clawhip native hook --provider claude --file payload.json
```
tmux monitoring remains available for keyword/stale alerts, but provider-native hook registration
is now the primary integration path.
View the complete source on GitHubSkills included
- clawhip
Repository facts
- License
- MIT
- Created
- Mar 8, 2026
- Last pushed
- Oct 22, 2026
- Forks
- 166
- Open issues
- 0
- Project activity
- Active
Rank over the last 12 weeks
Now #939 · best #630 · down 240 in 30 days
- #920 on Nov 1
- #930 on Nov 2
- #935 on Nov 3
- #934 on Nov 4
- #937 on Nov 5
- #939 since Nov 6
22 earlier periods
- #565 on Aug 2
- #564 on Aug 5
- #601 on Aug 11
- #640 on Aug 27
- #661 on Aug 28
- #630 on Sep 4
- #675 on Sep 8
- #652 on Sep 11
- #682 on Sep 16
- #671 on Sep 20
- #693 on Sep 27
- #699 on Sep 28
- #724 on Oct 10
- #752 on Oct 15
- #787 on Oct 21
- #768 on Oct 22
- #773 on Oct 23
- #891 on Oct 25
- #903 on Oct 28
- #908 on Oct 29
- #912 on Oct 30
- #916 on Oct 31
Before you install
Network or broad shellAutomated 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 8 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsrc/source/github.rs:10380Analysis incomplete: regex work limit reachedskills/omc/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/omc/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/omx/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/omx/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 31 dangerous shell commandsin 7 files: .github/workflows/ci.yml:44 install.sh:176 .github/workflows/release.yml:81 and 4 more
- 1,914 network referencesin 45 files: Cargo.lock:6 src/source/github.rs:4626 src/source/github_notifications.rs:521 and 42 more
- No hidden or obfuscated text
- No instruction overrides
- 12 executable scriptsin 12 files: install.sh:1 integrations/git/install-hooks.sh:1 integrations/git/post-checkout.sh:1 and 9 more
- 49 references to secretsin 16 files: src/sink/http.rs:1449 src/gjc/control.rs:908 src/source/subscription.rs:36 and 13 more
- No requests to vote in Hot
Show all 2,006 signals by file
.github/workflows/ci.yml
- Dangerous shell operationline 44
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 45
apt_get=(sudo apt-get) - Dangerous shell operationline 93
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 94
apt_get=(sudo apt-get) - Dangerous shell operationline 155
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 156
apt_get=(sudo apt-get) - Dangerous shell operationline 205
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 206
apt_get=(sudo apt-get) - Dangerous shell operationline 255
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 256
apt_get=(sudo apt-get)
.github/workflows/release.yml
- Network accessline 1
# This file was autogenerated by dist: https://axodotdev.github.io/cargo-dist - Dangerous shell operationline 81
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 82
apt_get=(sudo apt-get) - Dangerous shell operationline 144
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then - Dangerous shell operationline 145
apt_get=(sudo apt-get) - Network accessline 162
# failing. otherwise `sh` won't catch that `curl` returned non-0 shell: bash run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh" - Network accessline 163
shell: bash run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh" - name: Cache dist - Dangerous shell operationline 164
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh" - Network accessline 164
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh" - Network accessline 219
run: | if ! command -v cargo > /dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - Network accessline 220
if ! command -v cargo > /dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y echo "$HOME/.cargo/bin" >> $GITHUB_PATH - Dangerous shell operationline 221
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - Network accessline 221
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - Dangerous shell operationline 360
rm -f artifacts/*-dist-manifest.json - Access to secretsline 377
[Credential-related source omitted]
ARCHITECTURE.md
CHANGELOG.md
- Access to secretsline 43
[Credential-related source omitted]
Cargo.lock
- Network accessline 6
name = "anstream" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 7
version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" - Network accessline 8
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 21
name = "anstyle" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 22
version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - Network accessline 23
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 27
name = "anstyle-parse" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 28
version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" - Network accessline 29
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 36
name = "anstyle-query" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 37
version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" - Network accessline 38
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 45
name = "anstyle-wincon" version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 46
version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" - Network accessline 47
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 56
name = "anyhow" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 57
version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - Network accessline 58
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 62
name = "async-trait" version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 63
version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" - Network accessline 64
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 73
name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 74
version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - Network accessline 75
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 79
name = "axum" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 80
version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" - Network accessline 81
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 115
name = "axum-core" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 116
version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" - Network accessline 117
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 134
name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 135
version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - Network accessline 136
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 140
name = "bitflags" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 141
version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" - Network accessline 142
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 146
name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 147
version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" - Network accessline 148
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 155
name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 156
version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" - Network accessline 157
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 161
name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 162
version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" - Network accessline 163
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 167
name = "cc" version = "1.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 168
version = "1.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" - Network accessline 169
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 177
name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 178
version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - Network accessline 179
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 183
name = "cfg_aliases" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 184
version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - Network accessline 185
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 189
name = "clap" version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 190
version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" - Network accessline 191
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 199
name = "clap_builder" version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 200
version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" - Network accessline 201
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 211
name = "clap_derive" version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 212
version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" - Network accessline 213
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 223
name = "clap_lex" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 224
version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - Network accessline 225
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 254
name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 255
version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - Network accessline 256
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 260
name = "cpufeatures" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 261
version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" - Network accessline 262
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 269
name = "crypto-common" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 270
version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" - Network accessline 271
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 279
name = "data-encoding" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 280
version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" - Network accessline 281
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 285
name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 286
version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" - Network accessline 287
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 294
name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 295
version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" - Network accessline 296
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 304
name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 305
version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" - Network accessline 306
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 315
name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 316
version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - Network accessline 317
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 321
name = "errno" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 322
version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" - Network accessline 323
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 331
name = "fastrand" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 332
version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a043dc74da1e37d6afe657061213aa6f425f855399a11d3463c6ecccc4dfda1f" - Network accessline 333
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 337
name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 338
version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - Network accessline 339
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 343
name = "foldhash" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 344
version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - Network accessline 345
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 349
name = "form_urlencoded" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 350
version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" - Network accessline 351
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 358
name = "fs2" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 359
version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" - Network accessline 360
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 368
name = "futures-channel" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 369
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" - Network accessline 370
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 377
name = "futures-core" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 378
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - Network accessline 379
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 383
name = "futures-executor" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 384
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" - Network accessline 385
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 394
name = "futures-macro" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 395
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" - Network accessline 396
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 405
name = "futures-sink" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 406
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - Network accessline 407
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 411
name = "futures-task" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 412
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - Network accessline 413
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 417
name = "futures-util" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 418
version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" - Network accessline 419
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 431
name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 432
version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" - Network accessline 433
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 441
name = "getrandom" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 442
version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" - Network accessline 443
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 454
name = "getrandom" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 455
version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" - Network accessline 456
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 468
name = "getrandom" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 469
version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" - Network accessline 470
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 481
name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 482
version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" - Network accessline 483
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 490
name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 491
version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - Network accessline 492
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 496
name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 497
version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - Network accessline 498
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 502
name = "http" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 503
version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" - Network accessline 504
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 512
name = "http-body" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 513
version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" - Network accessline 514
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 522
name = "http-body-util" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 523
version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" - Network accessline 524
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 535
name = "httparse" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 536
version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - Network accessline 537
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 541
name = "httpdate" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 542
version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - Network accessline 543
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 547
name = "hyper" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 548
version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" - Network accessline 549
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 568
name = "hyper-rustls" version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 569
version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" - Network accessline 570
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 585
name = "hyper-util" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 586
version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" - Network accessline 587
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 608
name = "icu_collections" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 609
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" - Network accessline 610
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 622
name = "icu_locale_core" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 623
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" - Network accessline 624
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 635
name = "icu_normalizer" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 636
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" - Network accessline 637
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 649
name = "icu_normalizer_data" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 650
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" - Network accessline 651
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 655
name = "icu_properties" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 656
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" - Network accessline 657
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 669
name = "icu_properties_data" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 670
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" - Network accessline 671
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 675
name = "icu_provider" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 676
version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" - Network accessline 677
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 690
name = "id-arena" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 691
version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - Network accessline 692
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 696
name = "idna" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 697
version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" - Network accessline 698
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 707
name = "idna_adapter" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 708
version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" - Network accessline 709
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 717
name = "indexmap" version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 718
version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" - Network accessline 719
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 729
name = "ipnet" version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 730
version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" - Network accessline 731
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 735
name = "iri-string" version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 736
version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" - Network accessline 737
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 745
name = "is_terminal_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 746
version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - Network accessline 747
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 751
name = "itoa" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 752
version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - Network accessline 753
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 757
name = "js-sys" version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 758
version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" - Network accessline 759
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 769
name = "leb128fmt" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 770
version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - Network accessline 771
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 775
name = "libc" version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 776
version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" - Network accessline 777
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 781
name = "linux-raw-sys" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 782
version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - Network accessline 783
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 787
name = "litemap" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 788
version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" - Network accessline 789
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 793
name = "lock_api" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 794
version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" - Network accessline 795
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 802
name = "log" version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 803
version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - Network accessline 804
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 808
name = "lru-slab" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 809
version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - Network accessline 810
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 814
name = "matchit" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 815
version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - Network accessline 816
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 820
name = "memchr" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 821
version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - Network accessline 822
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 826
name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 827
version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - Network accessline 828
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 832
name = "mio" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 833
version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" - Network accessline 834
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 843
name = "num-conv" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 844
version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" - Network accessline 845
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 849
name = "once_cell" version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 850
version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - Network accessline 851
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 855
name = "once_cell_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 856
version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - Network accessline 857
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 861
name = "parking_lot" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 862
version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" - Network accessline 863
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 871
name = "parking_lot_core" version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 872
version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" - Network accessline 873
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 884
name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 885
version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - Network accessline 886
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 890
name = "pin-project-lite" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 891
version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - Network accessline 892
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 896
name = "potential_utf" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 897
version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" - Network accessline 898
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 905
name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 906
version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - Network accessline 907
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 911
name = "ppv-lite86" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 912
version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" - Network accessline 913
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 920
name = "prettyplease" version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 921
version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" - Network accessline 922
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 930
name = "proc-macro2" version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 931
version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" - Network accessline 932
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 939
name = "quinn" version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 940
version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" - Network accessline 941
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 959
name = "quinn-proto" version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 960
version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" - Network accessline 961
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 980
name = "quinn-udp" version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 981
version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" - Network accessline 982
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 994
name = "quote" version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 995
version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" - Network accessline 996
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1003
name = "r-efi" version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1004
version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - Network accessline 1005
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1009
name = "r-efi" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1010
version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - Network accessline 1011
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1015
name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1016
version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" - Network accessline 1017
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1025
name = "rand_chacha" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1026
version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" - Network accessline 1027
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1035
name = "rand_core" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1036
version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" - Network accessline 1037
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1044
name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1045
version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" - Network accessline 1046
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1053
name = "reqwest" version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1054
version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" - Network accessline 1055
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1091
name = "ring" version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1092
version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" - Network accessline 1093
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1105
name = "rustc-hash" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1106
version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" - Network accessline 1107
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1111
name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1112
version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" - Network accessline 1113
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1124
name = "rustls" version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1125
version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" - Network accessline 1126
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1138
name = "rustls-pki-types" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1139
version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" - Network accessline 1140
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1148
name = "rustls-webpki" version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1149
version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" - Network accessline 1150
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1159
name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1160
version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - Network accessline 1161
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1165
name = "ryu" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1166
version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - Network accessline 1167
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1171
name = "scc" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1172
version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" - Network accessline 1173
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1180
name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1181
version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - Network accessline 1182
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1186
name = "sdd" version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1187
version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - Network accessline 1188
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1192
name = "semver" version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1193
version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - Network accessline 1194
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1198
name = "serde" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1199
version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" - Network accessline 1200
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1208
name = "serde_core" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1209
version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" - Network accessline 1210
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1217
name = "serde_derive" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1218
version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" - Network accessline 1219
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1228
name = "serde_json" version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1229
version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" - Network accessline 1230
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1241
name = "serde_path_to_error" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1242
version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" - Network accessline 1243
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1252
name = "serde_spanned" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1253
version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" - Network accessline 1254
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1261
name = "serde_urlencoded" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1262
version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" - Network accessline 1263
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1273
name = "serial_test" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1274
version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" - Network accessline 1275
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1288
name = "serial_test_derive" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1289
version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" - Network accessline 1290
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1299
name = "sha1" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1300
version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" - Network accessline 1301
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1310
name = "sha2" version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1311
version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" - Network accessline 1312
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1321
name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1322
version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - Network accessline 1323
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1327
name = "signal-hook-registry" version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1328
version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" - Network accessline 1329
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1337
name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1338
version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - Network accessline 1339
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1343
name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1344
version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - Network accessline 1345
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1349
name = "socket2" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1350
version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" - Network accessline 1351
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1359
name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1360
version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - Network accessline 1361
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1365
name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1366
version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - Network accessline 1367
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1371
name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1372
version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - Network accessline 1373
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1377
name = "syn" version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1378
version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" - Network accessline 1379
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1388
name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1389
version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - Network accessline 1390
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1397
name = "synstructure" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1398
version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" - Network accessline 1399
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1408
name = "tempfile" version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1409
version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" - Network accessline 1410
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1421
name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1422
version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" - Network accessline 1423
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1430
name = "thiserror-impl" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1431
version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" - Network accessline 1432
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1441
name = "time" version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1442
version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" - Network accessline 1443
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1456
name = "time-core" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1457
version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - Network accessline 1458
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1462
name = "time-macros" version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1463
version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" - Network accessline 1464
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1472
name = "tinystr" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1473
version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" - Network accessline 1474
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1482
name = "tinyvec" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1483
version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" - Network accessline 1484
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1491
name = "tinyvec_macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1492
version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - Network accessline 1493
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1497
name = "tokio" version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1498
version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bd1c4c0fc4a7ab90fc15ef6daaa3ec3b893f004f915f2392557ed23237820cd" - Network accessline 1499
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1514
name = "tokio-macros" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1515
version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" - Network accessline 1516
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1525
name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1526
version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" - Network accessline 1527
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1535
name = "tokio-tungstenite" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1536
version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" - Network accessline 1537
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1551
name = "tokio-tungstenite" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1552
version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" - Network accessline 1553
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1563
name = "toml" version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1564
version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" - Network accessline 1565
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1575
name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1576
version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - Network accessline 1577
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1584
name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1585
version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" - Network accessline 1586
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1598
name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1599
version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - Network accessline 1600
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1604
name = "tower" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1605
version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" - Network accessline 1606
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1620
name = "tower-http" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1621
version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" - Network accessline 1622
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1638
name = "tower-layer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1639
version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - Network accessline 1640
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1644
name = "tower-service" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1645
version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - Network accessline 1646
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1650
name = "tracing" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1651
version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" - Network accessline 1652
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1661
name = "tracing-core" version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1662
version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" - Network accessline 1663
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1670
name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1671
version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - Network accessline 1672
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1676
name = "tungstenite" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1677
version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" - Network accessline 1678
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1695
name = "tungstenite" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1696
version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" - Network accessline 1697
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1712
name = "typenum" version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1713
version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" - Network accessline 1714
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1718
name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1719
version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - Network accessline 1720
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1724
name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1725
version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - Network accessline 1726
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1730
name = "untrusted" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1731
version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - Network accessline 1732
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1736
name = "url" version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1737
version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" - Network accessline 1738
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1748
name = "utf-8" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1749
version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - Network accessline 1750
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1754
name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1755
version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - Network accessline 1756
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1760
name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1761
version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - Network accessline 1762
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1766
name = "uuid" version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1767
version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" - Network accessline 1768
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1777
name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1778
version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - Network accessline 1779
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1783
name = "want" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1784
version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" - Network accessline 1785
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1792
name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1793
version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - Network accessline 1794
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1798
name = "wasip2" version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1799
version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" - Network accessline 1800
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1807
name = "wasip3" version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1808
version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" - Network accessline 1809
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1816
name = "wasm-bindgen" version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1817
version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" - Network accessline 1818
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1829
name = "wasm-bindgen-futures" version = "0.4.67" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1830
version = "0.4.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" - Network accessline 1831
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1839
name = "wasm-bindgen-macro" version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1840
version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" - Network accessline 1841
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1849
name = "wasm-bindgen-macro-support" version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1850
version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" - Network accessline 1851
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1862
name = "wasm-bindgen-shared" version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1863
version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" - Network accessline 1864
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1871
name = "wasm-encoder" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1872
version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" - Network accessline 1873
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1881
name = "wasm-metadata" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1882
version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" - Network accessline 1883
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1893
name = "wasmparser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1894
version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" - Network accessline 1895
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1905
name = "web-sys" version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1906
version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" - Network accessline 1907
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1915
name = "web-time" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1916
version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" - Network accessline 1917
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1925
name = "webpki-roots" version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1926
version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" - Network accessline 1927
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1934
name = "webpki-roots" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1935
version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" - Network accessline 1936
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1943
name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1944
version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" - Network accessline 1945
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1953
name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1954
version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - Network accessline 1955
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1959
name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1960
version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - Network accessline 1961
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1965
name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1966
version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - Network accessline 1967
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1971
name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1972
version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" - Network accessline 1973
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1980
name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1981
version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" - Network accessline 1982
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1989
name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1990
version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" - Network accessline 1991
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1998
name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 1999
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" - Network accessline 2000
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2014
name = "windows-targets" version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2015
version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" - Network accessline 2016
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2031
name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2032
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - Network accessline 2033
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2037
name = "windows_aarch64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2038
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - Network accessline 2039
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2043
name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2044
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - Network accessline 2045
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2049
name = "windows_aarch64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2050
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - Network accessline 2051
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2055
name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2056
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - Network accessline 2057
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2061
name = "windows_i686_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2062
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - Network accessline 2063
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2067
name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2068
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - Network accessline 2069
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2073
name = "windows_i686_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2074
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - Network accessline 2075
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2079
name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2080
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - Network accessline 2081
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2085
name = "windows_i686_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2086
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - Network accessline 2087
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2091
name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2092
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - Network accessline 2093
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2097
name = "windows_x86_64_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2098
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - Network accessline 2099
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2103
name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2104
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - Network accessline 2105
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2109
name = "windows_x86_64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2110
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - Network accessline 2111
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2115
name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2116
version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - Network accessline 2117
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2121
name = "windows_x86_64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2122
version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - Network accessline 2123
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2127
name = "winnow" version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2128
version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" - Network accessline 2129
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2136
name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2137
version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" - Network accessline 2138
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2145
name = "wit-bindgen-core" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2146
version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" - Network accessline 2147
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2156
name = "wit-bindgen-rust" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2157
version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" - Network accessline 2158
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2172
name = "wit-bindgen-rust-macro" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2173
version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" - Network accessline 2174
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2187
name = "wit-component" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2188
version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" - Network accessline 2189
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2206
name = "wit-parser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2207
version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" - Network accessline 2208
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2224
name = "writeable" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2225
version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" - Network accessline 2226
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2230
name = "yoke" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2231
version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" - Network accessline 2232
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2241
name = "yoke-derive" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2242
version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" - Network accessline 2243
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2253
name = "zerocopy" version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2254
version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" - Network accessline 2255
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2262
name = "zerocopy-derive" version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2263
version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" - Network accessline 2264
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2273
name = "zerofrom" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2274
version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" - Network accessline 2275
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2282
name = "zerofrom-derive" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2283
version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" - Network accessline 2284
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2294
name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2295
version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - Network accessline 2296
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2300
name = "zerotrie" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2301
version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" - Network accessline 2302
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2311
name = "zerovec" version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2312
version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" - Network accessline 2313
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2322
name = "zerovec-derive" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2323
version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" - Network accessline 2324
source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2333
name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" - Network accessline 2334
version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - Network accessline 2335
source = "registry+https://github.com/rust-lang/crates.io-index"
Cargo.toml
- Network accessline 5
description = "Event-to-channel notification router for Discord — bypass gateway sessions, just events in, messages out" license = "MIT" repository = "https://github.com/Yeachan-Heo/clawhip" - Network accessline 6
license = "MIT" repository = "https://github.com/Yeachan-Heo/clawhip" keywords = ["discord", "notifications", "tmux", "github", "devops"] - Network accessline 7
repository = "https://github.com/Yeachan-Heo/clawhip"
README.md
- Network accessline 13
<p align="center"> <a href="https://crates.io/crates/clawhip"><img src="https://img.shields.io/crates/v/clawhip.svg" alt="crates.io" /></a> - Network accessline 14
<a href="https://crates.io/crates/clawhip"><img src="https://img.shields.io/crates/v/clawhip.svg" alt="crates.io" /></a> - Network accessline 15
<a href="https://github.com/Yeachan-Heo/clawhip/stargazers"><img src="https://img.shields.io/github/stars/Yeachan-Heo/clawhip?style=social" alt="GitHub stars" /></a> - Network accessline 18
> **⭐ Optional support:** the interactive repo-local install paths (`./install.sh` and `clawhip install` from a clone) can offer to star this repo after a successful install when `gh` is installed and authenticated. Skip it with `--skip-sta - Network accessline 19
> **Community:** Join the clawhip Discord at https://discord.gg/wSyUQYfhAw. - Network accessline 127
Just tag @openclaw and say: install this https://github.com/Yeachan-Heo/clawhip - Network accessline 260
Default daemon endpoint: - `http://127.0.0.1:25294` - Network accessline 261
- `http://127.0.0.1:25294` - Network accessline 284
https://github.com/Yeachan-Heo/clawhip - Network accessline 293
1. Create a new bot at [Discord Developer Portal](https://discord.com/developers/applications) (e.g. "CCNotifier") - Network accessline 321
clawhip setup --webhook "https://discord.com/api/webhooks/..." - Network accessline 327
clawhip setup --bot-token "discord-bot-token" --default-channel "1234567890" --default-format alert --daemon-base-url "http://127.0.0.1:25294" - Network accessline 329
--default-channel "1234567890" \ --default-format alert \ --daemon-base-url "http://127.0.0.1:25294" - Network accessline 331
--daemon-base-url "http://127.0.0.1:25294" - Network accessline 365
event = "tmux.keyword" sink = "discord" webhook = "https://discord.com/api/webhooks/..." - Network accessline 367
webhook = "https://discord.com/api/webhooks/..." - Network accessline 374
1. In Slack, open the app settings for your workspace and enable **Incoming Webhooks** 2. Add a new webhook to the channel you want clawhip to notify 3. Copy the generated `https://hooks.slack.com/services/...` URL into a route - Network accessline 376
3. Copy the generated `https://hooks.slack.com/services/...` URL into a route - Network accessline 382
event = "git.commit" filter = { repo = "my-app" } slack_webhook = "https://hooks.slack.com/services/T.../B.../xxx" - Network accessline 383
filter = { repo = "my-app" } slack_webhook = "https://hooks.slack.com/services/T.../B.../xxx" format = "compact" - Network accessline 384
slack_webhook = "https://hooks.slack.com/services/T.../B.../xxx" - Network accessline 388
event = "tmux.keyword" sink = "slack" webhook = "https://hooks.slack.com/services/T.../B.../yyy" - Network accessline 389
sink = "slack" webhook = "https://hooks.slack.com/services/T.../B.../yyy" format = "alert" - Network accessline 390
webhook = "https://hooks.slack.com/services/T.../B.../yyy" - Access to secretsline 403
[Credential-related source omitted] - Network accessline 407
[providers.http] endpoint = "http://127.0.0.1:8644/webhooks/clawhip-controller" - Network accessline 408
endpoint = "http://127.0.0.1:8644/webhooks/clawhip-controller" - Network accessline 911
Credentials use `CLAWHIP_GITHUB_TOKEN`, then `monitors.github_token`, then `gh auth token`. GitHub's [notifications REST documentation](https://docs.github.com/en/rest/activity/notifications) - Network accessline 912
[Credential-related source omitted] - Access to secretsline 912
[Credential-related source omitted] - Network accessline 1202
Published at [crates.io/crates/clawhip](https://crates.io/crates/clawhip). Requires Rust toolchain. - Dangerous shell operationline 1207
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Yeachan-Heo/clawhip/releases/latest/download/clawhip-installer.sh | sh - Network accessline 1207
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Yeachan-Heo/clawhip/releases/latest/download/clawhip-installer.sh | sh - Network accessline 1264
curl -s localhost:25294/health | jq .build - Network accessline 1296
curl -s localhost:25294/health | jq .deployment - Network accessline 1408
clawhip includes a [`geobench`](https://github.com/NomaDamas/geobench) product spec for measuring LLM hit rate, MRR, share of voice, and citations for event-to-channel AI-agent operations queries. - Network accessline 1421
- `https://www.githubstatus.com/api/v2/summary.json` - Network accessline 1422
- `https://www.githubstatus.com/api/v2/status.json` - Network accessline 1423
- `https://www.githubstatus.com/api/v2/components.json` - Network accessline 1424
- `https://www.githubstatus.com/api/v2/incidents.json` - Network accessline 1430
enabled = true # Public Statuspage API; no token. Override only for tests/mirrors. api_base = "https://www.githubstatus.com/api/v2" - Network accessline 1431
# Public Statuspage API; no token. Override only for tests/mirrors. api_base = "https://www.githubstatus.com/api/v2" components = ["Actions"] - Network accessline 1432
api_base = "https://www.githubstatus.com/api/v2"
SKILL.md
- Network accessline 28
@openclaw install https://github.com/Yeachan-Heo/clawhip - Network accessline 46
http://127.0.0.1:25294 - Network accessline 89
Setup: 1. Go to [Discord Developer Portal](https://discord.com/developers/applications) - Network accessline 90
1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
docs/geobench.md
- Network accessline 3
clawhip ships a [`geobench`](https://github.com/NomaDamas/geobench) product spec to measure whether LLM answer surfaces mention and cite the router when users ask about event-to-channel automation for AI-agent operations. - Network accessline 7
- Product spec: [`../geobench/clawhip.yaml`](../geobench/clawhip.yaml) - Repository: <https://github.com/Yeachan-Heo/clawhip> - Network accessline 8
- Repository: <https://github.com/Yeachan-Heo/clawhip> - Network accessline 9
- Project page: <https://blog.gaebal-gajae.dev/projects/clawhip.html>
docs/live-verification.md
- Network accessline 16
export CLAWHIP_REPO=Yeachan-Heo/clawhip export CLAWHIP_CHANNEL=TEST_CHANNEL_ID export CLAWHIP_DAEMON_URL=http://127.0.0.1:25294 - Network accessline 17
[Credential-related source omitted] - Network accessline 18
export CLAWHIP_DAEMON_URL=http://127.0.0.1:25294 - Access to secretsline 19
[Credential-related source omitted] - Network accessline 149
- local daemon health/status returned ok on `http://127.0.0.1:25294`
geobench/clawhip.yaml
- Network accessline 23
- "automation engineers building notification loops" discovery_sources: - "https://github.com/Yeachan-Heo/clawhip" - Network accessline 24
discovery_sources: - "https://github.com/Yeachan-Heo/clawhip" - "https://blog.gaebal-gajae.dev/projects/clawhip.html" - Network accessline 25
- "https://github.com/Yeachan-Heo/clawhip" - Network accessline 26
- "https://blog.gaebal-gajae.dev/projects/clawhip.html"
install.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 5
INVOCATION_CWD="$(pwd -P)" GITHUB_REPO="Yeachan-Heo/clawhip" INSTALLER_URL="${CLAWHIP_INSTALLER_URL:-https://github.com/${GITHUB_REPO}/releases/latest/download/clawhip-installer.sh}" - Network accessline 6
GITHUB_REPO="Yeachan-Heo/clawhip" INSTALLER_URL="${CLAWHIP_INSTALLER_URL:-https://github.com/${GITHUB_REPO}/releases/latest/download/clawhip-installer.sh}" CARGO_HOME="${CARGO_HOME:-$HOME/.cargo}" - Network accessline 7
INSTALLER_URL="${CLAWHIP_INSTALLER_URL:-https://github.com/${GITHUB_REPO}/releases/latest/download/clawhip-installer.sh}" - Network accessline 161
install_prebuilt_binary() { if ! command -v curl >/dev/null 2>&1; then - Network accessline 162
if ! command -v curl >/dev/null 2>&1; then - Network accessline 163
log "curl is not installed; skipping prebuilt binary download" - Network accessline 169
log "attempting prebuilt binary install from ${INSTALLER_URL}" - Network accessline 174
if ! curl --proto '=https' --tlsv1.2 -LsSf "$INSTALLER_URL" -o "$installer"; then - Dangerous shell operationline 176
rm -f "$installer" - Dangerous shell operationline 181
rm -f "$installer" - Dangerous shell operationline 186
rm -f "$installer" - Network accessline 194
[clawhip] A prebuilt binary was not available and Cargo is not installed. [clawhip] Install Rust with rustup, then rerun this installer: [clawhip] curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Network accessline 195
[clawhip] Install Rust with rustup, then rerun this installer: [clawhip] curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh [clawhip] source "$HOME/.cargo/env" - Dangerous shell operationline 196
[clawhip] curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Network accessline 196
[clawhip] curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Dangerous shell operationline 234
rm -rf "$target_dir" - Network accessline 274
log "webhook config scaffolded at $config_path" else log "recommended quick start: clawhip setup --webhook 'https://discord.com/api/webhooks/...'" - Network accessline 275
else log "recommended quick start: clawhip setup --webhook 'https://discord.com/api/webhooks/...'" log "bot-token mode is still supported via ~/.clawhip/config.toml" - Network accessline 276
log "recommended quick start: clawhip setup --webhook 'https://discord.com/api/webhooks/...'" - Dangerous shell operationline 289
sudo install -m 755 "$binary_path" /usr/local/bin/clawhip - Dangerous shell operationline 314
sudo cp deploy/clawhip.service /etc/systemd/system/clawhip.service - Dangerous shell operationline 315
sudo systemctl daemon-reload - Dangerous shell operationline 316
sudo systemctl enable --now clawhip
integrations/git/install-hooks.sh
- Executable scriptline 1
#!/usr/bin/env bash
integrations/git/post-checkout.sh
- Executable scriptline 1
#!/usr/bin/env bash
integrations/git/post-commit.sh
- Executable scriptline 1
#!/usr/bin/env bash
integrations/tmux/notify-keyword.sh
- Executable scriptline 1
#!/usr/bin/env bash
integrations/tmux/scan-keywords.sh
- Executable scriptline 1
#!/usr/bin/env bash
integrations/tmux/stale-check.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/claude-code/bridge.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/codex/bridge.sh
- Executable scriptline 1
#!/usr/bin/env bash
scripts/internal-pr-format-gate.sh
- Executable scriptline 1
#!/usr/bin/env bash
scripts/live-verify-default-presets.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 18
CLAWHIP_CHANNEL Discord test channel id CLAWHIP_BOT_TOKEN Discord bot token CLAWHIP_DAEMON_URL e.g. http://127.0.0.1:25294 - Network accessline 19
CLAWHIP_BOT_TOKEN Discord bot token CLAWHIP_DAEMON_URL e.g. http://127.0.0.1:25294 Optional: - Network accessline 20
CLAWHIP_DAEMON_URL e.g. http://127.0.0.1:25294 - Access to secretsline 32
[Credential-related source omitted] - Network accessline 36
fetch_messages() { curl -fsS \ - Network accessline 37
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Network accessline 38
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Network accessline 39
-H 'Content-Type: application/json' \ "https://discord.com/api/v10/channels/$CLAWHIP_CHANNEL/messages?limit=20" } - Network accessline 40
"https://discord.com/api/v10/channels/$CLAWHIP_CHANNEL/messages?limit=20"
src/cli.rs
- Network accessline 1736
"setup", "--webhook", "https://discord.com/api/webhooks/123/abc", - Network accessline 1737
"--webhook", "https://discord.com/api/webhooks/123/abc", ]); - Network accessline 1738
"https://discord.com/api/webhooks/123/abc", - Network accessline 1745
assert_eq!( args.webhook.as_deref(), Some("https://discord.com/api/webhooks/123/abc") - Network accessline 1746
args.webhook.as_deref(), Some("https://discord.com/api/webhooks/123/abc") ); - Network accessline 1747
Some("https://discord.com/api/webhooks/123/abc") - Network accessline 1756
"setup", "--webhook", "https://discord.com/api/webhooks/123/abc", - Network accessline 1757
"--webhook", "https://discord.com/api/webhooks/123/abc", "--bot-token", - Network accessline 1758
"https://discord.com/api/webhooks/123/abc", - Network accessline 1764
"alert", "--daemon-base-url", "http://127.0.0.1:31337", - Network accessline 1765
"--daemon-base-url", "http://127.0.0.1:31337", ]); - Network accessline 1766
"http://127.0.0.1:31337", - Network accessline 1773
assert_eq!( args.webhook.as_deref(), Some("https://discord.com/api/webhooks/123/abc") - Network accessline 1774
args.webhook.as_deref(), Some("https://discord.com/api/webhooks/123/abc") ); - Network accessline 1775
Some("https://discord.com/api/webhooks/123/abc") - Network accessline 1780
assert_eq!( args.daemon_base_url.as_deref(), Some("http://127.0.0.1:31337") - Network accessline 1781
args.daemon_base_url.as_deref(), Some("http://127.0.0.1:31337") ); - Network accessline 1782
Some("http://127.0.0.1:31337")
src/client.rs
- Network accessline 512
let remote = DaemonClient { http: reqwest::Client::new(), base_url: "http://example.com".into(), - Network accessline 513
http: reqwest::Client::new(), base_url: "http://example.com".into(), }; - Network accessline 514
base_url: "http://example.com".into(), - Network accessline 516
let ipv4 = DaemonClient { http: reqwest::Client::new(), base_url: "http://127.0.0.1:8080".into(), - Network accessline 517
http: reqwest::Client::new(), base_url: "http://127.0.0.1:8080".into(), }; - Network accessline 518
base_url: "http://127.0.0.1:8080".into(), - Network accessline 520
let ipv6 = DaemonClient { http: reqwest::Client::new(), base_url: "http://[::1]:8080".into(), - Network accessline 521
http: reqwest::Client::new(), base_url: "http://[::1]:8080".into(), }; - Network accessline 522
base_url: "http://[::1]:8080".into(), - Network accessline 529
#[test] fn lane_detail_path_segments_escape_unsafe_session_text() { let mut url = reqwest::Url::parse("http://127.0.0.1:8080").unwrap(); - Network accessline 530
fn lane_detail_path_segments_escape_unsafe_session_text() { let mut url = reqwest::Url::parse("http://127.0.0.1:8080").unwrap(); url.path_segments_mut() - Network accessline 531
let mut url = reqwest::Url::parse("http://127.0.0.1:8080").unwrap(); - Network accessline 555
let (mut stream, _) = redirector.accept().await.unwrap(); let response = format!( "HTTP/1.1 307 Temporary Redirect\r\nLocation: http://{target_address}/private\r\nContent-Length: 0\r\nConnection: close\r\n\r\n" - Network accessline 556
let response = format!( "HTTP/1.1 307 Temporary Redirect\r\nLocation: http://{target_address}/private\r\nContent-Length: 0\r\nConnection: close\r\n\r\n" ); - Network accessline 557
"HTTP/1.1 307 Temporary Redirect\r\nLocation: http://{target_address}/private\r\nContent-Length: 0\r\nConnection: close\r\n\r\n" - Network accessline 564
.build() .unwrap(), base_url: format!("http://{redirector_address}"), - Network accessline 565
.unwrap(), base_url: format!("http://{redirector_address}"), }; - Network accessline 566
base_url: format!("http://{redirector_address}"), - Network accessline 581
let client = DaemonClient { http: reqwest::Client::new(), base_url: "http://example.com".into(), - Network accessline 582
http: reqwest::Client::new(), base_url: "http://example.com".into(), }; - Network accessline 583
base_url: "http://example.com".into(), - Network accessline 597
assert!(request.starts_with("POST /api/subscriptions/safe/start HTTP/1.1")); assert!(request.contains("x-clawhip-local-control: 1\r\n")); assert!(request.contains("origin: http://127.0.0.1:")); - Network accessline 598
assert!(request.contains("x-clawhip-local-control: 1\r\n")); assert!(request.contains("origin: http://127.0.0.1:")); stream - Network accessline 599
assert!(request.contains("origin: http://127.0.0.1:")); - Network accessline 607
let client = DaemonClient { http: reqwest::Client::new(), base_url: format!("http://{address}"), - Network accessline 608
http: reqwest::Client::new(), base_url: format!("http://{address}"), }; - Network accessline 609
base_url: format!("http://{address}"),
src/config.rs
- Network accessline 770
/// /// Uses machine-readable endpoints under `api_base` (default /// `https://www.githubstatus.com/api/v2`). No authentication is required or stored. - Network accessline 771
/// Uses machine-readable endpoints under `api_base` (default /// `https://www.githubstatus.com/api/v2`). No authentication is required or stored. #[derive(Debug, Clone, Serialize, Deserialize)] - Network accessline 772
/// `https://www.githubstatus.com/api/v2`). No authentication is required or stored. - Network accessline 1024
} fn default_base_url() -> String { format!("http://127.0.0.1:{}", default_port()) - Network accessline 1025
fn default_base_url() -> String { format!("http://127.0.0.1:{}", default_port()) } - Network accessline 1026
format!("http://127.0.0.1:{}", default_port()) - Network accessline 1030
} fn default_github_api_base() -> String { "https://api.github.com".to_string() - Network accessline 1031
fn default_github_api_base() -> String { "https://api.github.com".to_string() } - Network accessline 1032
"https://api.github.com".to_string() - Network accessline 1033
} fn default_github_status_api_base() -> String { "https://www.githubstatus.com/api/v2".to_string() - Network accessline 1034
fn default_github_status_api_base() -> String { "https://www.githubstatus.com/api/v2".to_string() } - Network accessline 1035
"https://www.githubstatus.com/api/v2".to_string() - Access to secretsline 2516
[Credential-related source omitted] - Network accessline 2609
); println!( r#"Webhook example: [[routes]] event = "tmux.keyword" webhook = "https://discord.com/api/webhooks/...""# - Network accessline 2610
println!( r#"Webhook example: [[routes]] event = "tmux.keyword" webhook = "https://discord.com/api/webhooks/...""# ); - Network accessline 2611
r#"Webhook example: [[routes]] event = "tmux.keyword" webhook = "https://discord.com/api/webhooks/...""# - Network accessline 4748
routes: vec![RouteRule { event: "tmux.keyword".into(), webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 4749
event: "tmux.keyword".into(), webhook: Some("https://discord.com/api/webhooks/123/abc".into()), ..RouteRule::default() - Network accessline 4750
webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 4767
routes: vec![RouteRule { event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 4768
event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/abc".into()), ..RouteRule::default() - Network accessline 4769
webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 4781
routes: vec![RouteRule { event: "tmux.keyword".into(), slack_webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 4782
event: "tmux.keyword".into(), slack_webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), ..RouteRule::default() - Network accessline 4783
slack_webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 4932
providers: ProvidersConfig { http: HttpConfig { endpoint: Some("http://127.0.0.1:8644/webhooks/clawhip-controller".into()), - Network accessline 4933
http: HttpConfig { endpoint: Some("http://127.0.0.1:8644/webhooks/clawhip-controller".into()), hmac_secret_env: Some("HERMES_CLAWHIP_HMAC_SECRET".into()), - Network accessline 4934
endpoint: Some("http://127.0.0.1:8644/webhooks/clawhip-controller".into()), - Network accessline 4958
r#" [providers.http] endpoint = "http://127.0.0.1:8644/webhooks/clawhip-controller" - Network accessline 4959
[providers.http] endpoint = "http://127.0.0.1:8644/webhooks/clawhip-controller" secret_env = "HERMES_CLAWHIP_HMAC_SECRET" - Network accessline 4960
endpoint = "http://127.0.0.1:8644/webhooks/clawhip-controller" - Network accessline 4972
assert_eq!( config.providers.http.endpoint(), Some("http://127.0.0.1:8644/webhooks/clawhip-controller") - Network accessline 4973
config.providers.http.endpoint(), Some("http://127.0.0.1:8644/webhooks/clawhip-controller") ); - Network accessline 4974
Some("http://127.0.0.1:8644/webhooks/clawhip-controller") - Network accessline 5023
fn http_endpoint_policy_allows_loopback_http_and_https() { for endpoint in [ "http://127.0.0.1:8644/webhooks/clawhip-controller", - Network accessline 5024
for endpoint in [ "http://127.0.0.1:8644/webhooks/clawhip-controller", "http://[::1]:8644/webhooks/clawhip-controller", - Network accessline 5025
"http://127.0.0.1:8644/webhooks/clawhip-controller", - Network accessline 5026
"http://[::1]:8644/webhooks/clawhip-controller", - Network accessline 5027
"http://localhost:8644/webhooks/clawhip-controller", - Network accessline 5028
"https://controller.example/webhooks/clawhip-controller", - Network accessline 5038
[Credential-related source omitted] - Network accessline 5039
[Credential-related source omitted] - Network accessline 5040
[Credential-related source omitted] - Network accessline 5048
let credentials = validate_http_endpoint( "https://user:password@controller.example/webhooks/clawhip-controller", - Network accessline 5049
"https://user:password@controller.example/webhooks/clawhip-controller", - Network accessline 5084
providers: ProvidersConfig { http: HttpConfig { endpoint: Some("https://controller.example/webhook".into()), - Network accessline 5085
http: HttpConfig { endpoint: Some("https://controller.example/webhook".into()), hmac_secret_env: Some("NOT VALID".into()), - Network accessline 5086
endpoint: Some("https://controller.example/webhook".into()), - Network accessline 5110
providers: ProvidersConfig { http: HttpConfig { endpoint: Some("https://controller.example/webhook".into()), - Network accessline 5111
http: HttpConfig { endpoint: Some("https://controller.example/webhook".into()), hmac_secret_env: Some("HERMES_CLAWHIP_HMAC_SECRET".into()), - Network accessline 5112
endpoint: Some("https://controller.example/webhook".into()), - Network accessline 5118
event: "*".into(), sink: "http".into(), webhook: Some("https://must-not-be-used.example/secret".into()), - Network accessline 5119
sink: "http".into(), webhook: Some("https://must-not-be-used.example/secret".into()), ..RouteRule::default() - Network accessline 5120
webhook: Some("https://must-not-be-used.example/secret".into()), - Network accessline 5166
event: "git.commit".into(), sink: "discord".into(), webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 5167
sink: "discord".into(), webhook: Some("https://discord.com/api/webhooks/123/abc".into()), ..RouteRule::default() - Network accessline 5168
webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 5211
sink: "slack".into(), channel: Some("123".into()), webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 5212
channel: Some("123".into()), webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), ..RouteRule::default() - Network accessline 5213
webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 5227
event: "tmux.keyword".into(), sink: "slack".into(), webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 5228
sink: "slack".into(), webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), ..RouteRule::default() - Network accessline 5229
webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 5241
let mut config = AppConfig::default(); config .scaffold_webhook_quickstart(" https://discord.com/api/webhooks/123/abc ".into()) - Network accessline 5242
config .scaffold_webhook_quickstart(" https://discord.com/api/webhooks/123/abc ".into()) .unwrap(); - Network accessline 5243
.scaffold_webhook_quickstart(" https://discord.com/api/webhooks/123/abc ".into()) - Network accessline 5248
assert_eq!( config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/abc") - Network accessline 5249
config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/abc") ); - Network accessline 5250
Some("https://discord.com/api/webhooks/123/abc") - Network accessline 5268
}, daemon: DaemonConfig { base_url: "http://127.0.0.1:25294".into(), - Network accessline 5269
daemon: DaemonConfig { base_url: "http://127.0.0.1:25294".into(), ..DaemonConfig::default() - Network accessline 5270
base_url: "http://127.0.0.1:25294".into(), - Network accessline 5290
config .apply_setup_edits(SetupEdits { webhook: Some("https://discord.com/api/webhooks/123/new".into()), - Network accessline 5291
[Credential-related source omitted] - Network accessline 5292
webhook: Some("https://discord.com/api/webhooks/123/new".into()), - Network accessline 5294
default_channel: Some("alerts".into()), default_format: Some(MessageFormat::Alert), daemon_base_url: Some("http://127.0.0.1:9999".into()), - Network accessline 5295
default_format: Some(MessageFormat::Alert), daemon_base_url: Some("http://127.0.0.1:9999".into()), }) - Network accessline 5296
daemon_base_url: Some("http://127.0.0.1:9999".into()), - Network accessline 5304
assert_eq!(config.defaults.channel.as_deref(), Some("alerts")); assert_eq!(config.defaults.format, MessageFormat::Alert); assert_eq!(config.daemon.base_url, "http://127.0.0.1:9999"); - Network accessline 5305
assert_eq!(config.defaults.format, MessageFormat::Alert); assert_eq!(config.daemon.base_url, "http://127.0.0.1:9999"); assert_eq!(config.routes.len(), 2); - Network accessline 5306
assert_eq!(config.daemon.base_url, "http://127.0.0.1:9999"); - Network accessline 5311
assert_eq!( config.routes[1].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/new") - Network accessline 5312
config.routes[1].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/new") ); - Network accessline 5313
Some("https://discord.com/api/webhooks/123/new") - Network accessline 5320
routes: vec![RouteRule { event: "tmux.keyword".into(), webhook: Some("https://discord.com/api/webhooks/123/original".into()), - Network accessline 5321
event: "tmux.keyword".into(), webhook: Some("https://discord.com/api/webhooks/123/original".into()), mention: Some("<@1>".into()), - Network accessline 5322
webhook: Some("https://discord.com/api/webhooks/123/original".into()), - Network accessline 5332
default_channel: Some("alerts".into()), default_format: Some(MessageFormat::Raw), daemon_base_url: Some("http://127.0.0.1:4444".into()), - Network accessline 5333
default_format: Some(MessageFormat::Raw), daemon_base_url: Some("http://127.0.0.1:4444".into()), ..SetupEdits::default() - Network accessline 5334
daemon_base_url: Some("http://127.0.0.1:4444".into()), - Network accessline 5341
assert_eq!( config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/original") - Network accessline 5342
config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/original") ); - Network accessline 5343
Some("https://discord.com/api/webhooks/123/original") - Network accessline 5352
RouteRule { event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/old".into()), - Network accessline 5353
event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/old".into()), ..RouteRule::default() - Network accessline 5354
webhook: Some("https://discord.com/api/webhooks/123/old".into()), - Network accessline 5357
RouteRule { event: "git.commit".into(), webhook: Some("https://discord.com/api/webhooks/123/other".into()), - Network accessline 5358
event: "git.commit".into(), webhook: Some("https://discord.com/api/webhooks/123/other".into()), mention: Some("<@1>".into()), - Network accessline 5359
webhook: Some("https://discord.com/api/webhooks/123/other".into()), - Network accessline 5367
config .scaffold_webhook_quickstart("https://discord.com/api/webhooks/123/new".into()) - Network accessline 5368
.scaffold_webhook_quickstart("https://discord.com/api/webhooks/123/new".into()) - Network accessline 5372
assert_eq!( config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/new") - Network accessline 5373
config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/new") ); - Network accessline 5374
Some("https://discord.com/api/webhooks/123/new") - Network accessline 5376
assert_eq!( config.routes[1].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/other") - Network accessline 5377
config.routes[1].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/other") ); - Network accessline 5378
Some("https://discord.com/api/webhooks/123/other") - Network accessline 5386
RouteRule { event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/a".into()), - Network accessline 5387
event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/a".into()), ..RouteRule::default() - Network accessline 5388
webhook: Some("https://discord.com/api/webhooks/123/a".into()), - Network accessline 5391
RouteRule { event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/b".into()), - Network accessline 5392
event: "*".into(), webhook: Some("https://discord.com/api/webhooks/123/b".into()), ..RouteRule::default() - Network accessline 5393
webhook: Some("https://discord.com/api/webhooks/123/b".into()), - Network accessline 5400
let error = config .scaffold_webhook_quickstart("https://discord.com/api/webhooks/123/new".into()) - Network accessline 5401
.scaffold_webhook_quickstart("https://discord.com/api/webhooks/123/new".into()) - Network accessline 5407
assert_eq!( config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/a") - Network accessline 5408
config.routes[0].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/a") ); - Network accessline 5409
Some("https://discord.com/api/webhooks/123/a") - Network accessline 5411
assert_eq!( config.routes[1].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/b") - Network accessline 5412
config.routes[1].webhook.as_deref(), Some("https://discord.com/api/webhooks/123/b") ); - Network accessline 5413
Some("https://discord.com/api/webhooks/123/b") - Network accessline 7723
[gjc] enabled = true discovery_roots = ["http://127.0.0.1"] - Network accessline 7724
enabled = true discovery_roots = ["http://127.0.0.1"] "#, - Network accessline 7725
discovery_roots = ["http://127.0.0.1"] - Network accessline 7802
[monitors.github_status] enabled = true api_base = "https://www.githubstatus.com/api/v2" - Network accessline 7803
enabled = true api_base = "https://www.githubstatus.com/api/v2" components = ["Actions"] - Network accessline 7804
api_base = "https://www.githubstatus.com/api/v2" - Network accessline 7825
assert_eq!( config.monitors.github_status.api_base, "https://www.githubstatus.com/api/v2" - Network accessline 7826
config.monitors.github_status.api_base, "https://www.githubstatus.com/api/v2" ); - Network accessline 7827
"https://www.githubstatus.com/api/v2"
src/daemon.rs
- Network accessline 430
let local_addr = listener.local_addr()?; println!( "clawhip daemon v{VERSION} listening on http://{} (token_source: {token_source})", - Network accessline 431
println!( "clawhip daemon v{VERSION} listening on http://{} (token_source: {token_source})", local_addr - Network accessline 432
"clawhip daemon v{VERSION} listening on http://{} (token_source: {token_source})", - Access to secretsline 919
[Credential-related source omitted] - Network accessline 2646
return false; }; reqwest::Url::parse(&format!("http://{host}")) - Network accessline 2647
}; reqwest::Url::parse(&format!("http://{host}")) .ok() - Network accessline 2648
reqwest::Url::parse(&format!("http://{host}")) - Network accessline 3522
parts.headers.insert( axum::http::header::ORIGIN, "http://127.0.0.1:25294".parse().unwrap(), - Network accessline 3523
axum::http::header::ORIGIN, "http://127.0.0.1:25294".parse().unwrap(), ); - Network accessline 3524
"http://127.0.0.1:25294".parse().unwrap(), - Network accessline 3600
Some("127.0.0.1:1"), Some("127.0.0.1:25294"), Some("https://example.invalid"), - Network accessline 3601
Some("127.0.0.1:25294"), Some("https://example.invalid"), Some("1"), - Network accessline 3602
Some("https://example.invalid"), - Network accessline 3618
Some("127.0.0.1:1"), Some("127.0.0.1:25294"), Some("http://127.0.0.1:3000"), - Network accessline 3619
Some("127.0.0.1:25294"), Some("http://127.0.0.1:3000"), Some("1"), - Network accessline 3620
Some("http://127.0.0.1:3000"), - Network accessline 3871
"name": "clawhip 0.6.9", "prerelease": false, "html_url": "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.9" - Network accessline 3872
"prerelease": false, "html_url": "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.9" }, - Network accessline 3873
"html_url": "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.9" - Network accessline 3927
"number": 252, "title": "approval hold events", "html_url": "https://github.com/Yeachan-Heo/clawhip/pull/252", - Network accessline 3928
"title": "approval hold events", "html_url": "https://github.com/Yeachan-Heo/clawhip/pull/252", "merged": true, - Network accessline 3929
"html_url": "https://github.com/Yeachan-Heo/clawhip/pull/252", - Network accessline 4009
.await .unwrap(); let url = format!("http://{}/github", listener.local_addr().unwrap()); - Network accessline 4010
.unwrap(); let url = format!("http://{}/github", listener.local_addr().unwrap()); let app = AxumRouter::new() - Network accessline 4011
let url = format!("http://{}/github", listener.local_addr().unwrap()); - Network accessline 4091
"issue": {"number": 42, "title": "A title", "comments": 7, "user": {"login": "pr-owner"}}, "pull_request": {"number": 42, "title": "A title", "user": {"login": "pr-owner"}}, "comment": {"id": 123, "user": {"login": " - Network accessline 4092
"pull_request": {"number": 42, "title": "A title", "user": {"login": "pr-owner"}}, "comment": {"id": 123, "user": {"login": "commenter"}, "html_url": "https://github.com/owner/repo/pull/42#comment-123", "path": "src/main.rs", "b - Network accessline 4093
"comment": {"id": 123, "user": {"login": "commenter"}, "html_url": "https://github.com/owner/repo/pull/42#comment-123", "path": "src/main.rs", "body": "PRIVATE COMMENT BODY"}, - Network accessline 4094
"review": {"id": 456, "user": {"login": "reviewer"}, "html_url": "https://github.com/owner/repo/pull/42#review-456", "state": "approved", "body": "PRIVATE REVIEW BODY"} - Network accessline 4139
payload["issue"]["pull_request"] = json!({"url": "https://api.github.com/repos/owner/repo/pulls/42"}); - Network accessline 4140
json!({"url": "https://api.github.com/repos/owner/repo/pulls/42"}); - Network accessline 4261
let mut payload = github_activity_payload(); payload["action"] = json!(action); payload["release"] = json!({"tag_name": "v1.0.0", "name": "Release", "prerelease": false, "html_url": "https://github.com/owner/ - Network accessline 4262
payload["action"] = json!(action); payload["release"] = json!({"tag_name": "v1.0.0", "name": "Release", "prerelease": false, "html_url": "https://github.com/owner/repo/releases/tag/v1.0.0"}); payload["pull_re - Network accessline 4263
payload["release"] = json!({"tag_name": "v1.0.0", "name": "Release", "prerelease": false, "html_url": "https://github.com/owner/repo/releases/tag/v1.0.0"}); - Network accessline 4264
payload["pull_request"]["html_url"] = json!("https://github.com/owner/repo/pull/42"); assert_eq!( - Network accessline 4265
json!("https://github.com/owner/repo/pull/42"); - Network accessline 5034
[Credential-related source omitted] - Network accessline 5035
[Credential-related source omitted] - Network accessline 5036
[Credential-related source omitted] - Network accessline 6391
current_version: "0.5.4".into(), latest_version: "0.6.0".into(), release_url: "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 6392
latest_version: "0.6.0".into(), release_url: "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), detected_at: "2026-04-07T00:00:00Z".into(), - Network accessline 6393
release_url: "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 6463
current_version: "0.5.4".into(), latest_version: "0.6.0".into(), release_url: "https://example.com".into(), - Network accessline 6464
latest_version: "0.6.0".into(), release_url: "https://example.com".into(), detected_at: "2026-04-07T00:00:00Z".into(), - Network accessline 6465
release_url: "https://example.com".into(),
src/discord.rs
- Network accessline 190
}; let api_base = std::env::var("CLAWHIP_DISCORD_API_BASE") .unwrap_or_else(|_| "https://discord.com/api/v10".to_string()); - Network accessline 191
let api_base = std::env::var("CLAWHIP_DISCORD_API_BASE") .unwrap_or_else(|_| "https://discord.com/api/v10".to_string()); let webhook_client = reqwest::Client::new(); - Network accessline 192
.unwrap_or_else(|_| "https://discord.com/api/v10".to_string()); - Network accessline 1140
fn webhook_urls_gain_wait_true_by_default() { assert_eq!( webhook_url_with_wait("https://discord.com/api/webhooks/1/abc"), - Network accessline 1141
assert_eq!( webhook_url_with_wait("https://discord.com/api/webhooks/1/abc"), "https://discord.com/api/webhooks/1/abc?wait=true" - Network accessline 1142
webhook_url_with_wait("https://discord.com/api/webhooks/1/abc"), - Network accessline 1143
"https://discord.com/api/webhooks/1/abc?wait=true" - Network accessline 1144
); assert_eq!( webhook_url_with_wait("https://discord.com/api/webhooks/1/abc?thread_id=7"), - Network accessline 1145
assert_eq!( webhook_url_with_wait("https://discord.com/api/webhooks/1/abc?thread_id=7"), "https://discord.com/api/webhooks/1/abc?thread_id=7&wait=true" - Network accessline 1146
webhook_url_with_wait("https://discord.com/api/webhooks/1/abc?thread_id=7"), - Network accessline 1147
"https://discord.com/api/webhooks/1/abc?thread_id=7&wait=true" - Network accessline 1148
); assert_eq!( webhook_url_with_wait("https://discord.com/api/webhooks/1/abc?wait=false"), - Network accessline 1149
assert_eq!( webhook_url_with_wait("https://discord.com/api/webhooks/1/abc?wait=false"), "https://discord.com/api/webhooks/1/abc?wait=false" - Network accessline 1150
webhook_url_with_wait("https://discord.com/api/webhooks/1/abc?wait=false"), - Network accessline 1151
"https://discord.com/api/webhooks/1/abc?wait=false" - Network accessline 1198
client .send( &SinkTarget::DiscordWebhook(format!("http://{addr}/webhook")), - Network accessline 1199
.send( &SinkTarget::DiscordWebhook(format!("http://{addr}/webhook")), &message, - Network accessline 1200
&SinkTarget::DiscordWebhook(format!("http://{addr}/webhook")), - Network accessline 1250
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1251
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1282
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1283
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1321
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1322
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1345
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1346
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1363
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1364
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1381
let client = DiscordClient::for_tests_with_api_base("bad-token", format!("http://{addr}")).unwrap(); - Network accessline 1382
DiscordClient::for_tests_with_api_base("bad-token", format!("http://{addr}")).unwrap(); - Network accessline 1392
// Use a bogus env override so we never hit the real API. unsafe { std::env::set_var("CLAWHIP_DISCORD_API_BASE", "http://127.0.0.1:1"); - Network accessline 1393
unsafe { std::env::set_var("CLAWHIP_DISCORD_API_BASE", "http://127.0.0.1:1"); } - Network accessline 1394
std::env::set_var("CLAWHIP_DISCORD_API_BASE", "http://127.0.0.1:1"); - Network accessline 1415
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1416
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1451
let error = client .send( &SinkTarget::DiscordWebhook(format!("http://{addr}/webhook")), - Network accessline 1452
.send( &SinkTarget::DiscordWebhook(format!("http://{addr}/webhook")), &message, - Network accessline 1453
&SinkTarget::DiscordWebhook(format!("http://{addr}/webhook")), - Network accessline 1463
assert_eq!(dlq[0].retry_count, 3); assert!(dlq[0].target.starts_with("discord:webhook:")); assert!(!dlq[0].target.contains(&format!("http://{addr}/webhook"))); - Network accessline 1464
assert!(dlq[0].target.starts_with("discord:webhook:")); assert!(!dlq[0].target.contains(&format!("http://{addr}/webhook"))); assert_eq!(dlq[0].correlation_id.as_deref(), Some("corr-214")); - Network accessline 1465
assert!(!dlq[0].target.contains(&format!("http://{addr}/webhook"))); - Network accessline 1480
}; let target = SinkTarget::DiscordWebhook( "https://discord.com/api/webhooks/123456/secret-token".into(), - Network accessline 1481
let target = SinkTarget::DiscordWebhook( "https://discord.com/api/webhooks/123456/secret-token".into(), ); - Network accessline 1482
"https://discord.com/api/webhooks/123456/secret-token".into(), - Network accessline 1603
fn poisoned_delivery_state_still_serves_limiter_circuit_and_dlq() { let client = DiscordClient::for_tests_with_api_base("test-token", "http://127.0.0.1:1".to_string()) - Network accessline 1604
let client = DiscordClient::for_tests_with_api_base("test-token", "http://127.0.0.1:1".to_string()) .unwrap(); - Network accessline 1605
DiscordClient::for_tests_with_api_base("test-token", "http://127.0.0.1:1".to_string()) - Network accessline 1639
)); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1640
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); let result = client.list_thread_messages("12345678901234567890").await; - Network accessline 1641
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1658
)); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1659
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); assert!(matches!( - Network accessline 1660
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1701
)); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1702
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); let error = client - Network accessline 1703
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1723
)); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1724
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); let error = client - Network accessline 1725
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1744
)); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1745
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); let error = client - Network accessline 1746
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1761
async fn lane_transport_failure_is_ambiguous_and_never_enters_dlq() { let client = DiscordClient::for_tests_with_api_base("test-token", "http://127.0.0.1:1".into()) - Network accessline 1762
let client = DiscordClient::for_tests_with_api_base("test-token", "http://127.0.0.1:1".into()) .unwrap(); - Network accessline 1763
DiscordClient::for_tests_with_api_base("test-token", "http://127.0.0.1:1".into()) - Network accessline 1793
}); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1794
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); let error = client - Network accessline 1795
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1820
}); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1821
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); for invalid in ["/", "?", "#", "../1", "123456789012345678901", "123"] { - Network accessline 1822
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1848
)); let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); - Network accessline 1849
let client = DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap(); client - Network accessline 1850
DiscordClient::for_tests_with_api_base("test-token", format!("http://{addr}")).unwrap();
src/dispatch.rs
- Network accessline 1581
(format!("http://{addr}/webhook"), request_rx, handle) - Network accessline 1613
(format!("http://{addr}/webhook"), server) - Network accessline 1701
routes: vec![RouteRule { event: "tmux.keyword".into(), slack_webhook: Some(format!("http://{addr}/webhook")), - Network accessline 1702
event: "tmux.keyword".into(), slack_webhook: Some(format!("http://{addr}/webhook")), format: Some(crate::events::MessageFormat::Alert), - Network accessline 1703
slack_webhook: Some(format!("http://{addr}/webhook")), - Network accessline 1828
let mut buf = vec![0_u8; 4096]; let n = stream.read(&mut buf).await.unwrap(); requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); - Network accessline 1829
let n = stream.read(&mut buf).await.unwrap(); requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); stream - Network accessline 1830
requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); - Network accessline 1841
event: "github.ci-*".into(), sink: "discord".into(), webhook: Some(format!("http://{addr}/webhook")), - Network accessline 1842
sink: "discord".into(), webhook: Some(format!("http://{addr}/webhook")), ..RouteRule::default() - Network accessline 1843
webhook: Some(format!("http://{addr}/webhook")), - Network accessline 1862
Some("success".into()), "abcdef1234567".into(), format!("https://github.com/Yeachan-Heo/clawhip/actions/runs/123/jobs/{workflow}"), - Network accessline 1863
"abcdef1234567".into(), format!("https://github.com/Yeachan-Heo/clawhip/actions/runs/123/jobs/{workflow}"), Some("feat/retry".into()), - Network accessline 1864
format!("https://github.com/Yeachan-Heo/clawhip/actions/runs/123/jobs/{workflow}"), - Network accessline 1878
.unwrap() .unwrap(); assert_eq!(requests.len(), 1); - Network accessline 1879
.unwrap(); assert_eq!(requests.len(), 1); assert!(requests[0].contains("2/2 passed")); - Network accessline 1880
assert_eq!(requests.len(), 1); - Network accessline 1924
let request = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 1969
assert!( timeout(Duration::from_millis(250), requests.recv()) - Network accessline 1970
timeout(Duration::from_millis(250), requests.recv()) - Network accessline 2037
// was enqueued second — the routine delivery (tmux.keyword) is still // held by the 30s batch window. let first = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2038
// held by the 30s batch window. let first = timeout(Duration::from_secs(2), requests.recv()) .await - Network accessline 2039
let first = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2049
// the wait, so any second request would indicate a bypass leak. assert!( timeout(Duration::from_millis(50), requests.recv()) - Network accessline 2050
assert!( timeout(Duration::from_millis(50), requests.recv()) .await - Network accessline 2051
timeout(Duration::from_millis(50), requests.recv()) - Network accessline 2059
drop(tx); assert!( timeout(Duration::from_millis(250), requests.recv()) - Network accessline 2060
assert!( timeout(Duration::from_millis(250), requests.recv()) .await - Network accessline 2061
timeout(Duration::from_millis(250), requests.recv()) - Network accessline 2099
Some("success".into()), "abcdef1234567".into(), format!("https://github.com/Yeachan-Heo/clawhip/actions/runs/456/jobs/{workflow}"), - Network accessline 2100
"abcdef1234567".into(), format!("https://github.com/Yeachan-Heo/clawhip/actions/runs/456/jobs/{workflow}"), Some("feat/routine-batch".into()), - Network accessline 2101
format!("https://github.com/Yeachan-Heo/clawhip/actions/runs/456/jobs/{workflow}"), - Network accessline 2110
let request = timeout(Duration::from_millis(250), requests.recv()) - Network accessline 2161
let first = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2163
.unwrap() .unwrap(); let second = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2164
.unwrap(); let second = timeout(Duration::from_secs(2), requests.recv()) .await - Network accessline 2165
let second = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2228
let first = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2230
.unwrap() .unwrap(); let second = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2231
.unwrap(); let second = timeout(Duration::from_secs(2), requests.recv()) .await - Network accessline 2232
let second = timeout(Duration::from_secs(2), requests.recv()) - Network accessline 2266
"number": 86, "sha": "abc", "url": "https://github.com/org/repo/actions/runs/123456789/jobs/42" - Network accessline 2267
"sha": "abc", "url": "https://github.com/org/repo/actions/runs/123456789/jobs/42" }); - Network accessline 2268
"url": "https://github.com/org/repo/actions/runs/123456789/jobs/42" - Network accessline 2300
None, "abc".into(), "https://github.com/org/repo/actions/runs/123/jobs/1".into(), - Network accessline 2301
"abc".into(), "https://github.com/org/repo/actions/runs/123/jobs/1".into(), Some("feat/batch".into()), - Network accessline 2302
"https://github.com/org/repo/actions/runs/123/jobs/1".into(), - Network accessline 2316
Some("success".into()), "abc".into(), "https://github.com/org/repo/actions/runs/123/jobs/1".into(), - Network accessline 2317
"abc".into(), "https://github.com/org/repo/actions/runs/123/jobs/1".into(), Some("feat/batch".into()), - Network accessline 2318
"https://github.com/org/repo/actions/runs/123/jobs/1".into(), - Network accessline 2332
Some("failure".into()), "abc".into(), "https://github.com/org/repo/actions/runs/123/jobs/2".into(), - Network accessline 2333
"abc".into(), "https://github.com/org/repo/actions/runs/123/jobs/2".into(), Some("feat/batch".into()), - Network accessline 2334
"https://github.com/org/repo/actions/runs/123/jobs/2".into(), - Network accessline 2633
let mut all_contents = Vec::new(); for _ in 0..2 { let request = timeout(Duration::from_millis(300), requests.recv()) - Network accessline 2634
for _ in 0..2 { let request = timeout(Duration::from_millis(300), requests.recv()) .await - Network accessline 2635
let request = timeout(Duration::from_millis(300), requests.recv()) - Network accessline 2830
let request = timeout(Duration::from_millis(300), requests.recv())
src/event/compat.rs
- Network accessline 534
author: "reviewer".into(), pr_author: "owner".into(), url: "https://github.com/org/repo/pull/42#comment-7".into(), - Network accessline 535
pr_author: "owner".into(), url: "https://github.com/org/repo/pull/42#comment-7".into(), comment_id: 7, - Network accessline 536
url: "https://github.com/org/repo/pull/42#comment-7".into(), - Network accessline 651
"<new>".into(), "open".into(), "https://example.test/pr/48".into(), - Network accessline 652
"open".into(), "https://example.test/pr/48".into(), None, - Network accessline 653
"https://example.test/pr/48".into(), - Network accessline 660
"open".into(), "merged".into(), "https://example.test/pr/48".into(), - Network accessline 661
"merged".into(), "https://example.test/pr/48".into(), None, - Network accessline 662
"https://example.test/pr/48".into(), - Network accessline 706
Some("failure".into()), "abcdef1234567890".into(), "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 707
"abcdef1234567890".into(), "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), Some("feat/branch".into()), - Network accessline 708
"https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 723
assert_eq!( body.url.as_deref(), Some("https://github.com/Yeachan-Heo/clawhip/actions/runs/1") - Network accessline 724
body.url.as_deref(), Some("https://github.com/Yeachan-Heo/clawhip/actions/runs/1") ); - Network accessline 725
Some("https://github.com/Yeachan-Heo/clawhip/actions/runs/1") - Network accessline 844
"issue_number": 65, "pr_number": 72, "pr_url": "https://github.com/Yeachan-Heo/clawhip/pull/72", - Network accessline 845
"pr_number": 72, "pr_url": "https://github.com/Yeachan-Heo/clawhip/pull/72", "command": "cargo test", - Network accessline 846
"pr_url": "https://github.com/Yeachan-Heo/clawhip/pull/72", - Network accessline 872
issue_number: Some(65), pr_number: Some(72), pr_url: Some("https://github.com/Yeachan-Heo/clawhip/pull/72".into()), - Network accessline 873
pr_number: Some(72), pr_url: Some("https://github.com/Yeachan-Heo/clawhip/pull/72".into()), command: Some("cargo test".into()), - Network accessline 874
pr_url: Some("https://github.com/Yeachan-Heo/clawhip/pull/72".into()), - Network accessline 929
"clawhip 0.6.0".into(), false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 930
false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), Some("Yeachan-Heo".into()), - Network accessline 931
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 958
"clawhip 0.6.0-rc.1".into(), true, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0-rc.1".into(), - Network accessline 959
true, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0-rc.1".into(), None, - Network accessline 960
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0-rc.1".into(), - Network accessline 983
"clawhip 0.5.4".into(), false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.5.4".into(), - Network accessline 984
false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.5.4".into(), Some("Yeachan-Heo".into()), - Network accessline 985
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.5.4".into(),
src/events.rs
- Network accessline 2062
Some("failure".into()), "abcdef1234567890".into(), "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 2063
"abcdef1234567890".into(), "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), Some("feat/branch".into()), - Network accessline 2064
"https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 2069
assert_eq!( event.render_default(&MessageFormat::Compact).unwrap(), "CI failed · clawhip#58 · CI / test · failure · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2070
event.render_default(&MessageFormat::Compact).unwrap(), "CI failed · clawhip#58 · CI / test · failure · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" ); - Network accessline 2071
"CI failed · clawhip#58 · CI / test · failure · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2073
assert_eq!( event.render_default(&MessageFormat::Alert).unwrap(), "🚨 CI failed · clawhip#58 · CI / test · failure · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2074
event.render_default(&MessageFormat::Alert).unwrap(), "🚨 CI failed · clawhip#58 · CI / test · failure · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" ); - Network accessline 2075
"🚨 CI failed · clawhip#58 · CI / test · failure · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2088
None, "abcdef1234567890".into(), "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 2089
"abcdef1234567890".into(), "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), None, - Network accessline 2090
"https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 2095
assert_eq!( event.render_default(&MessageFormat::Compact).unwrap(), "CI started · clawhip#58 · CI / test · in_progress · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2096
event.render_default(&MessageFormat::Compact).unwrap(), "CI started · clawhip#58 · CI / test · in_progress · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" ); - Network accessline 2097
"CI started · clawhip#58 · CI / test · in_progress · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2099
assert_eq!( event.render_default(&MessageFormat::Alert).unwrap(), "🚨 CI started · clawhip#58 · CI / test · in_progress · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2100
event.render_default(&MessageFormat::Alert).unwrap(), "🚨 CI started · clawhip#58 · CI / test · in_progress · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" ); - Network accessline 2101
"🚨 CI started · clawhip#58 · CI / test · in_progress · abcdef1 · https://github.com/Yeachan-Heo/clawhip/actions/runs/1" - Network accessline 2256
"routeKey": "pull-request.created", "phase": "finished", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" - Network accessline 2257
"phase": "finished", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" }, - Network accessline 2258
"summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" - Network accessline 2282
assert_eq!( event.payload["pr_url"], json!("https://github.com/Yeachan-Heo/clawhip/pull/67") - Network accessline 2283
event.payload["pr_url"], json!("https://github.com/Yeachan-Heo/clawhip/pull/67") ); - Network accessline 2284
json!("https://github.com/Yeachan-Heo/clawhip/pull/67") - Network accessline 2301
"toolName": "Bash", "command": "gh pr create", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/71" - Network accessline 2302
"command": "gh pr create", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/71" }, - Network accessline 2303
"summary": "https://github.com/Yeachan-Heo/clawhip/pull/71" - Network accessline 2322
assert_eq!( event.payload["summary"], json!("https://github.com/Yeachan-Heo/clawhip/pull/71") - Network accessline 2323
event.payload["summary"], json!("https://github.com/Yeachan-Heo/clawhip/pull/71") ); - Network accessline 2324
json!("https://github.com/Yeachan-Heo/clawhip/pull/71") - Network accessline 2340
"routeKey": "pull-request.created", "phase": "finished", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" - Network accessline 2341
"phase": "finished", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" }, - Network accessline 2342
"summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" - Network accessline 2352
assert_eq!( event.render_default(&MessageFormat::Compact).unwrap(), "omc issue-65 pr-created (repo=clawhip, issue=#65, pr=#67, summary=https://github.com/Yeachan-Heo/clawhip/pull/67)" - Network accessline 2353
event.render_default(&MessageFormat::Compact).unwrap(), "omc issue-65 pr-created (repo=clawhip, issue=#65, pr=#67, summary=https://github.com/Yeachan-Heo/clawhip/pull/67)" ); - Network accessline 2354
"omc issue-65 pr-created (repo=clawhip, issue=#65, pr=#67, summary=https://github.com/Yeachan-Heo/clawhip/pull/67)" - Network accessline 2372
"issue_number": 65, "pr_number": 71, "pr_url": "https://github.com/Yeachan-Heo/clawhip/pull/71" - Network accessline 2373
"pr_number": 71, "pr_url": "https://github.com/Yeachan-Heo/clawhip/pull/71" } - Network accessline 2374
"pr_url": "https://github.com/Yeachan-Heo/clawhip/pull/71"
src/gajae.rs
- Access to secretsline 2387
[Credential-related source omitted] - Dangerous shell operationline 2872
command: rm -rf /tmp/example - Network accessline 2949
fn profile_command_summary_redacts_raw_command_details() { let event = "github.issue-opened"; let secret_command = "gajae handle github.issue-opened --token secret-token-123 --webhook https://hooks.example/secret --path /hom - Network accessline 2951
let secret_command = "gajae handle github.issue-opened --token secret-token-123 --webhook https://hooks.example/secret --path /home/operator/private"; - Network accessline 2958
assert_eq!(summary, "unsupported command (redacted)"); assert!(!summary.contains("secret-token-123")); assert!(!summary.contains("https://hooks.example/secret")); - Network accessline 2959
assert!(!summary.contains("secret-token-123")); assert!(!summary.contains("https://hooks.example/secret")); assert!(!summary.contains("/home/operator/private")); - Network accessline 2960
assert!(!summary.contains("https://hooks.example/secret"));
src/gateway_allowlist.rs
- Network accessline 407
RouteRule { event: "discord-webhook".into(), webhook: Some("https://discord.com/api/webhooks/secret".into()), - Network accessline 408
event: "discord-webhook".into(), webhook: Some("https://discord.com/api/webhooks/secret".into()), ..RouteRule::default() - Network accessline 409
webhook: Some("https://discord.com/api/webhooks/secret".into()), - Network accessline 413
event: "slack".into(), sink: "slack".into(), slack_webhook: Some("https://hooks.slack.test/secret".into()), - Network accessline 414
sink: "slack".into(), slack_webhook: Some("https://hooks.slack.test/secret".into()), ..RouteRule::default() - Network accessline 415
slack_webhook: Some("https://hooks.slack.test/secret".into()),
src/gjc/control.rs
- Access to secretsline 908
[Credential-related source omitted] - Access to secretsline 936
[Credential-related source omitted] - Access to secretsline 952
[Credential-related source omitted] - Access to secretsline 963
[Credential-related source omitted] - Access to secretsline 993
[Credential-related source omitted] - Access to secretsline 997
[Credential-related source omitted] - Access to secretsline 1003
[Credential-related source omitted] - Access to secretsline 1007
[Credential-related source omitted] - Access to secretsline 1077
[Credential-related source omitted] - Access to secretsline 1097
[Credential-related source omitted] - Access to secretsline 1129
[Credential-related source omitted] - Access to secretsline 1142
[Credential-related source omitted] - Access to secretsline 1207
[Credential-related source omitted]
src/gjc_lane.rs
- Network accessline 2849
fn default_gjc_pr_api_base() -> String { "https://api.github.com".to_string() - Network accessline 2850
"https://api.github.com".to_string() - Access to secretsline 3605
[Credential-related source omitted] - Network accessline 4540
[Credential-related source omitted] - Network accessline 4541
[Credential-related source omitted] - Network accessline 4542
failed.profile = Some("https://endpoint.invalid/private_key".to_string());
src/gjc_sdk.rs
src/gjc_sdk_events.rs
- Access to secretsline 1097
[Credential-related source omitted]
src/ledger.rs
- Network accessline 1062
[Credential-related source omitted] - Network accessline 1063
[Credential-related source omitted] - Network accessline 1064
[Credential-related source omitted] - Network accessline 1110
let mut ledger = EventLedger::open(config(dir.path()), dir.path()).unwrap(); for (index, source_url) in [ "https://discord.com/api/webhooks/123/secret-token", - Network accessline 1111
for (index, source_url) in [ "https://discord.com/api/webhooks/123/secret-token", "https://discord.com/api/v10/webhooks/123/secret-token", - Network accessline 1112
"https://discord.com/api/webhooks/123/secret-token", - Network accessline 1113
"https://discord.com/api/v10/webhooks/123/secret-token", - Network accessline 1114
"https://hooks.slack.com/services/T000/B000/secret", - Network accessline 1115
"https://api.telegram.org/bot123:secret/sendMessage", - Network accessline 1152
"session_id": "s1", "status": "finished", "source_url": "https://github.com/owner/repo/issues/304" - Network accessline 1153
"status": "finished", "source_url": "https://github.com/owner/repo/issues/304" }), - Network accessline 1154
"source_url": "https://github.com/owner/repo/issues/304" - Network accessline 1279
payload: json!({ "event_id": "raw-verify", "source_url": "https://github.com/owner/repo/issues/304", - Network accessline 1280
"event_id": "raw-verify", "source_url": "https://github.com/owner/repo/issues/304", "timestamp": "2026-08-01T12:00:00Z" - Network accessline 1281
"source_url": "https://github.com/owner/repo/issues/304", - Network accessline 1287
let line = fs::read_to_string(&path).unwrap(); let mut record: LedgerRecord = serde_json::from_str(line.trim()).unwrap(); record.source_links = vec!["https://discord.com/api/webhooks/123/secret-token".into()]; - Network accessline 1288
let mut record: LedgerRecord = serde_json::from_str(line.trim()).unwrap(); record.source_links = vec!["https://discord.com/api/webhooks/123/secret-token".into()]; fs::write( - Network accessline 1289
record.source_links = vec!["https://discord.com/api/webhooks/123/secret-token".into()]; - Network accessline 1362
"event_id": "summary-verify", "repo": "owner/repo", "source_url": "https://github.com/owner/repo/issues/304", - Network accessline 1363
"repo": "owner/repo", "source_url": "https://github.com/owner/repo/issues/304", "timestamp": "2026-07-01T00:00:00Z" - Network accessline 1364
"source_url": "https://github.com/owner/repo/issues/304", - Network accessline 1397
format: None, template: None, payload: json!({"event_id":"old","repo":"owner/repo","session_id":"s1","source_url":"https://github.com/owner/repo/issues/304","timestamp":"2026-07-01T00:00:00Z"}), - Network accessline 1398
template: None, payload: json!({"event_id":"old","repo":"owner/repo","session_id":"s1","source_url":"https://github.com/owner/repo/issues/304","timestamp":"2026-07-01T00:00:00Z"}), }; - Network accessline 1399
payload: json!({"event_id":"old","repo":"owner/repo","session_id":"s1","source_url":"https://github.com/owner/repo/issues/304","timestamp":"2026-07-01T00:00:00Z"}),
src/memory.rs
- Network accessline 1352
channel: Some("123456789".into()), channel_name: Some("dev".into()), webhook: Some("https://discord.com/api/webhooks/SECRET".into()), - Network accessline 1353
channel_name: Some("dev".into()), webhook: Some("https://discord.com/api/webhooks/SECRET".into()), slack_webhook: Some("https://hooks.slack.com/services/SECRET".into()), - Network accessline 1354
webhook: Some("https://discord.com/api/webhooks/SECRET".into()), - Network accessline 1355
slack_webhook: Some("https://hooks.slack.com/services/SECRET".into()),
src/native_hooks.rs
- Network accessline 1497
std::fs::write( &fake_clawhip, "#!/bin/sh\ncat >/dev/null\necho 'fake native hook bridge failure' >&2\nexit 7\n", - Network accessline 1498
&fake_clawhip, "#!/bin/sh\ncat >/dev/null\necho 'fake native hook bridge failure' >&2\nexit 7\n", ) - Network accessline 1499
"#!/bin/sh\ncat >/dev/null\necho 'fake native hook bridge failure' >&2\nexit 7\n", - Network accessline 1743
std::fs::write( &fake_clawhip, format!("#!/bin/sh\ncat > '{}'\nexit 0\n", capture_path.display()), - Network accessline 1744
&fake_clawhip, format!("#!/bin/sh\ncat > '{}'\nexit 0\n", capture_path.display()), ) - Network accessline 1745
format!("#!/bin/sh\ncat > '{}'\nexit 0\n", capture_path.display()),
src/native_observability.rs
src/release_preflight.rs
src/render/default.rs
- Network accessline 1396
"clawhip 0.6.0".into(), false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 1397
false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), Some("Yeachan-Heo".into()), - Network accessline 1398
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 1418
"v0.6.0-rc.1".into(), true, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0-rc.1".into(), - Network accessline 1419
true, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0-rc.1".into(), None, - Network accessline 1420
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0-rc.1".into(), - Network accessline 1438
"clawhip 0.6.0".into(), false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 1439
false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), None, - Network accessline 1440
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 1457
"clawhip 0.6.0".into(), false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 1458
false, "https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), None, - Network accessline 1459
"https://github.com/Yeachan-Heo/clawhip/releases/tag/v0.6.0".into(), - Network accessline 1497
"operational".into(), "degraded_performance".into(), "https://www.githubstatus.com".into(), - Network accessline 1498
"degraded_performance".into(), "https://www.githubstatus.com".into(), Some("dev".into()), - Network accessline 1499
"https://www.githubstatus.com".into(), - Network accessline 1518
Some("Mitigated; monitoring".into()), vec!["Actions".into()], "https://stspg.io/example".into(), - Network accessline 1519
vec!["Actions".into()], "https://stspg.io/example".into(), Some("dev".into()), - Network accessline 1520
"https://stspg.io/example".into(), - Network accessline 1548
"status": "in_progress", "conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/1", - Network accessline 1549
"conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/1", })); - Network accessline 1550
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/1", - Network accessline 1563
"branch": "main", "sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/1", - Network accessline 1564
"sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/1", "batched": true, - Network accessline 1565
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/1", - Network accessline 1595
); assert!( rendered.contains("https://github.com/Yeachan-Heo/clawhip/actions/runs/1"), - Network accessline 1596
assert!( rendered.contains("https://github.com/Yeachan-Heo/clawhip/actions/runs/1"), "link missing from bounded output" - Network accessline 1597
rendered.contains("https://github.com/Yeachan-Heo/clawhip/actions/runs/1"), - Network accessline 1617
"status": "completed", "conclusion": "failure", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/2", - Network accessline 1618
"conclusion": "failure", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/2", })); - Network accessline 1619
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/2", - Network accessline 1632
"branch": "fix/issue-313", "sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/2", - Network accessline 1633
"sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/2", "batched": true, - Network accessline 1634
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/2", - Network accessline 1657
assert!(rendered.contains("Yeachan-Heo/clawhip#59")); assert!( rendered.contains("https://github.com/Yeachan-Heo/clawhip/actions/runs/2"), - Network accessline 1658
assert!( rendered.contains("https://github.com/Yeachan-Heo/clawhip/actions/runs/2"), "link missing from bounded failed output" - Network accessline 1659
rendered.contains("https://github.com/Yeachan-Heo/clawhip/actions/runs/2"), - Network accessline 1676
"status": "in_progress", "conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/4", - Network accessline 1677
"conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/4", })); - Network accessline 1678
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/4", - Network accessline 1691
"branch": "main", "sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/4", - Network accessline 1692
"sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/4", "batched": true, - Network accessline 1693
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/4", - Network accessline 1723
let huge_repo = "x".repeat(1_000); let huge_url = format!( "https://github.com/Yeachan-Heo/clawhip/actions/runs/{}", - Network accessline 1724
let huge_url = format!( "https://github.com/Yeachan-Heo/clawhip/actions/runs/{}", "y".repeat(1_000) - Network accessline 1725
"https://github.com/Yeachan-Heo/clawhip/actions/runs/{}", - Network accessline 1795
"branch": "main", "sha": "abcdef1", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3", - Network accessline 1796
"sha": "abcdef1", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3", "batched": true, - Network accessline 1797
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3", - Network accessline 1803
"cancelled_count": 0, "jobs": [ {"workflow": "CI / test", "status": "completed", "conclusion": "success", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3"}, - Network accessline 1804
"jobs": [ {"workflow": "CI / test", "status": "completed", "conclusion": "success", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3"}, {"workflow": "CI / lint", "status": "completed", "c - Network accessline 1805
{"workflow": "CI / test", "status": "completed", "conclusion": "success", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3"}, - Network accessline 1806
{"workflow": "CI / lint", "status": "completed", "conclusion": "success", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/3"}, - Network accessline 1832
"status": "in_progress", "conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/5", - Network accessline 1833
"conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/5", })); - Network accessline 1834
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/5", - Network accessline 1847
"branch": "main", "sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/5", - Network accessline 1848
"sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/5", "batched": true, - Network accessline 1849
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/5",
src/router.rs
- Network accessline 850
[Credential-related source omitted] - Network accessline 851
[Credential-related source omitted] - Network accessline 852
[Credential-related source omitted] - Network accessline 1035
(format!("http://{addr}/webhook"), server) - Network accessline 1670
"routeKey": "pull-request.created", "phase": "finished", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" - Network accessline 1671
"phase": "finished", "summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" }, - Network accessline 1672
"summary": "https://github.com/Yeachan-Heo/clawhip/pull/67" - Network accessline 2051
thread: None, channel_name: None, webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 2052
channel_name: None, webhook: Some("https://discord.com/api/webhooks/123/abc".into()), slack_webhook: None, - Network accessline 2053
webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 2069
assert_eq!( delivery.target, SinkTarget::DiscordWebhook("https://discord.com/api/webhooks/123/abc".into()) - Network accessline 2070
delivery.target, SinkTarget::DiscordWebhook("https://discord.com/api/webhooks/123/abc".into()) ); - Network accessline 2071
SinkTarget::DiscordWebhook("https://discord.com/api/webhooks/123/abc".into()) - Network accessline 2095
thread: None, channel_name: None, webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 2096
channel_name: None, webhook: Some("https://discord.com/api/webhooks/123/abc".into()), slack_webhook: None, - Network accessline 2097
webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 2117
assert_eq!( delivery.target, SinkTarget::DiscordWebhook("https://discord.com/api/webhooks/123/abc".into()) - Network accessline 2118
delivery.target, SinkTarget::DiscordWebhook("https://discord.com/api/webhooks/123/abc".into()) ); - Network accessline 2119
SinkTarget::DiscordWebhook("https://discord.com/api/webhooks/123/abc".into()) - Network accessline 2289
routes: vec![RouteRule { event: "tmux.keyword".into(), slack_webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 2290
event: "tmux.keyword".into(), slack_webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), format: Some(MessageFormat::Alert), - Network accessline 2291
slack_webhook: Some("https://hooks.slack.com/services/T/B/abc".into()), - Network accessline 2303
assert_eq!( delivery.target, SinkTarget::SlackWebhook("https://hooks.slack.com/services/T/B/abc".into()) - Network accessline 2304
delivery.target, SinkTarget::SlackWebhook("https://hooks.slack.com/services/T/B/abc".into()) ); - Network accessline 2305
SinkTarget::SlackWebhook("https://hooks.slack.com/services/T/B/abc".into()) - Network accessline 2320
event: "custom".into(), sink: "slack".into(), webhook: Some("https://hooks.slack.com/services/T/B/generic".into()), - Network accessline 2321
sink: "slack".into(), webhook: Some("https://hooks.slack.com/services/T/B/generic".into()), ..RouteRule::default() - Network accessline 2322
webhook: Some("https://hooks.slack.com/services/T/B/generic".into()), - Network accessline 2334
assert_eq!( delivery.target, SinkTarget::SlackWebhook("https://hooks.slack.com/services/T/B/generic".into()) - Network accessline 2335
delivery.target, SinkTarget::SlackWebhook("https://hooks.slack.com/services/T/B/generic".into()) ); - Network accessline 2336
SinkTarget::SlackWebhook("https://hooks.slack.com/services/T/B/generic".into()) - Network accessline 2496
thread: None, channel_name: None, webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 2497
channel_name: None, webhook: Some("https://discord.com/api/webhooks/123/abc".into()), slack_webhook: None, - Network accessline 2498
webhook: Some("https://discord.com/api/webhooks/123/abc".into()), - Network accessline 2534
routes: vec![RouteRule { event: "custom".into(), slack_webhook: Some(format!("http://{addr}/webhook")), - Network accessline 2535
event: "custom".into(), slack_webhook: Some(format!("http://{addr}/webhook")), ..RouteRule::default() - Network accessline 2536
slack_webhook: Some(format!("http://{addr}/webhook")), - Network accessline 2910
"status": "in_progress", "conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/9", - Network accessline 2911
"conclusion": null, "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/9", })); - Network accessline 2912
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/9", - Network accessline 2925
"branch": "main", "sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/9", - Network accessline 2926
"sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/9", "batched": true, - Network accessline 2927
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/9", - Network accessline 2987
"status": "completed", "conclusion": "failure", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/10", - Network accessline 2988
"conclusion": "failure", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/10", })); - Network accessline 2989
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/10", - Network accessline 3002
"branch": "main", "sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/10", - Network accessline 3003
"sha": "abcdef1234567890", "url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/10", "batched": true, - Network accessline 3004
"url": "https://github.com/Yeachan-Heo/clawhip/actions/runs/10", - Network accessline 3060
channel_name: None, webhook: None, slack_webhook: Some("https://hooks.slack.com/services/test".into()), - Network accessline 3061
webhook: None, slack_webhook: Some("https://hooks.slack.com/services/test".into()), local_path: None, - Network accessline 3062
slack_webhook: Some("https://hooks.slack.com/services/test".into()), - Network accessline 3160
[Credential-related source omitted] - Network accessline 3161
[Credential-related source omitted] - Network accessline 3162
[Credential-related source omitted]
src/sink/http.rs
- Network accessline 1053
[Credential-related source omitted] - Network accessline 1054
[Credential-related source omitted] - Network accessline 1055
[Credential-related source omitted] - Network accessline 1059
[Credential-related source omitted] - Network accessline 1060
[Credential-related source omitted] - Network accessline 1061
[Credential-related source omitted] - Network accessline 1143
[Credential-related source omitted] - Network accessline 1144
[Credential-related source omitted] - Network accessline 1145
[Credential-related source omitted] - Network accessline 1146
); let mut message = message(); message.content = format!("{} https://hooks.example/secret/token", "x".repeat(30_000)); - Network accessline 1148
message.content = format!("{} https://hooks.example/secret/token", "x".repeat(30_000)); - Network accessline 1168
"must-not-leak", "endpoint-secret", "https://controller.example/webhooks/clawhip-controller", - Network accessline 1169
"endpoint-secret", "https://controller.example/webhooks/clawhip-controller", ] { - Network accessline 1170
"https://controller.example/webhooks/clawhip-controller", - Network accessline 1176
#[test] fn notifications_event_body_preserves_public_fields_and_redacts_secrets() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1177
fn notifications_event_body_preserves_public_fields_and_redacts_secrets() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1178
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1181
let expected = json!({"repo": "owner/repo", "thread_id": "12345678901234567890", "reason": "review_requested", "subject_type": "PullRequest", "title": "A PR", "number": 12, "url": "https://github.com/owner/repo/pull/ - Network accessline 1182
"reason": "review_requested", "subject_type": "PullRequest", "title": "A PR", "number": 12, "url": "https://github.com/owner/repo/pull/12", "updated_at": "2026-10-15T00:00:01Z"}); - Network accessline 1183
"number": 12, "url": "https://github.com/owner/repo/pull/12", - Network accessline 1196
#[test] fn top_level_timestamp_prefers_valid_event_timestamp_then_timestamp() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1197
fn top_level_timestamp_prefers_valid_event_timestamp_then_timestamp() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1198
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1216
#[test] fn top_level_timestamp_uses_stable_ingress_and_epoch_fallbacks() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1217
fn top_level_timestamp_uses_stable_ingress_and_epoch_fallbacks() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1218
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1254
(headers, body) }); let endpoint = format!("http://{addr}/webhooks/clawhip-controller"); - Network accessline 1255
}); let endpoint = format!("http://{addr}/webhooks/clawhip-controller"); let target = SinkTarget::HttpEndpoint(endpoint); - Network accessline 1256
let endpoint = format!("http://{addr}/webhooks/clawhip-controller"); - Network accessline 1299
let _ = read_request(&mut stream).await; let response = format!( "HTTP/1.1 302 Found\r\nlocation: http://{target_addr}/redirected\r\ncontent-length: 0\r\nconnection: close\r\n\r\n" - Network accessline 1300
let response = format!( "HTTP/1.1 302 Found\r\nlocation: http://{target_addr}/redirected\r\ncontent-length: 0\r\nconnection: close\r\n\r\n" ); - Network accessline 1301
"HTTP/1.1 302 Found\r\nlocation: http://{target_addr}/redirected\r\ncontent-length: 0\r\nconnection: close\r\n\r\n" - Network accessline 1306
let sink = HttpSink::new(b"secret").unwrap(); let endpoint = SinkTarget::HttpEndpoint(format!( "http://{redirector_addr}/webhooks/clawhip-controller" - Network accessline 1307
let endpoint = SinkTarget::HttpEndpoint(format!( "http://{redirector_addr}/webhooks/clawhip-controller" )); - Network accessline 1308
"http://{redirector_addr}/webhooks/clawhip-controller" - Network accessline 1337
stream.write_all(response.as_bytes()).await.unwrap(); }); let endpoint = format!("http://{addr}/webhooks/private-controller"); - Network accessline 1338
}); let endpoint = format!("http://{addr}/webhooks/private-controller"); let sink = HttpSink::new(b"secret").unwrap(); - Network accessline 1339
let endpoint = format!("http://{addr}/webhooks/private-controller"); - Network accessline 1362
tokio::time::sleep(Duration::from_millis(200)).await; }); let endpoint = format!("http://{addr}/webhooks/private-controller"); - Network accessline 1363
}); let endpoint = format!("http://{addr}/webhooks/private-controller"); let sink = HttpSink::with_request_timeout(b"secret", Duration::from_millis(50)).unwrap(); - Network accessline 1364
let endpoint = format!("http://{addr}/webhooks/private-controller"); - Network accessline 1386
unsafe { std::env::set_var(name, "env-secret") }; let config = HttpConfig { endpoint: Some("http://127.0.0.1:8644/webhooks/clawhip-controller".into()), - Network accessline 1387
let config = HttpConfig { endpoint: Some("http://127.0.0.1:8644/webhooks/clawhip-controller".into()), hmac_secret_env: Some(name.into()), - Network accessline 1388
endpoint: Some("http://127.0.0.1:8644/webhooks/clawhip-controller".into()), - Network accessline 1398
#[test] fn json_shaped_secrets_are_redacted() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1399
fn json_shaped_secrets_are_redacted() { let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1400
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1422
[Credential-related source omitted] - Network accessline 1423
[Credential-related source omitted] - Network accessline 1424
[Credential-related source omitted] - Network accessline 1443
// P1 regression: when a JSON secret starts before the summary limit but // its closing quote falls after truncation, the prefix must be redacted let target = SinkTarget::HttpEndpoint("https://controller.example/events".into - Network accessline 1444
// its closing quote falls after truncation, the prefix must be redacted let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1445
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Access to secretsline 1449
[Credential-related source omitted] - Network accessline 1467
[Credential-related source omitted] - Access to secretsline 1467
[Credential-related source omitted] - Network accessline 1468
// must be redacted, not just simple 'token' and 'secret' let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1469
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Access to secretsline 1472
[Credential-related source omitted] - Access to secretsline 1474
[Credential-related source omitted] - Access to secretsline 1475
[Credential-related source omitted] - Access to secretsline 1486
[Credential-related source omitted] - Access to secretsline 1494
[Credential-related source omitted] - Access to secretsline 1496
[Credential-related source omitted] - Network accessline 1507
// This test verifies that the function completes efficiently (no panic) // and produces valid output for normal text. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1508
// and produces valid output for normal text. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1509
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1531
// like {"id":"123"}, the old code would panic on array indexing. // Verify it now handles this gracefully. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1532
// Verify it now handles this gracefully. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1533
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1550
[Credential-related source omitted] - Network accessline 1551
[Credential-related source omitted] - Access to secretsline 1551
[Credential-related source omitted] - Network accessline 1552
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Access to secretsline 1554
[Credential-related source omitted] - Access to secretsline 1562
[Credential-related source omitted] - Network accessline 1569
// P1 regression: the JSON redactor must use the full is_sensitive_field // predicate, including "cookie", "webhook", and other fields. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1570
// predicate, including "cookie", "webhook", and other fields. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1571
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1573
[Credential-related source omitted] - Network accessline 1574
[Credential-related source omitted] - Network accessline 1575
[Credential-related source omitted] - Dangerous shell operationline 1576
"command":"rm -rf /", - Dangerous shell operationline 1590
assert!(!rendered.contains("rm -rf"), "command value leaked"); - Network accessline 1596
// P1 regression: non-string JSON values like numbers, objects, and arrays // must be redacted, not just quoted strings. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1597
// must be redacted, not just quoted strings. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1598
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Access to secretsline 1604
[Credential-related source omitted] - Access to secretsline 1622
[Credential-related source omitted] - Access to secretsline 1623
[Credential-related source omitted] - Network accessline 1629
// P1 regression: JSON keys with Unicode escapes like {"to\u006ben":"secret"} // represent a "token" field but were not recognized. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1630
// represent a "token" field but were not recognized. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1631
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1649
// P1 regression: if the input begins with ":, the old code would search // backwards for a quote and panic on range 1..0. Now it must guard against this. let target = SinkTarget::HttpEndpoint("https://controller.example/eve - Network accessline 1650
// backwards for a quote and panic on range 1..0. Now it must guard against this. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1651
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1669
// P1 regression: fallback scanner must handle truncated and malformed JSON, // including missing closing braces, unclosed strings, etc. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1670
// including missing closing braces, unclosed strings, etc. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1671
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1690
// lowercase allocations in the primary path. This completes without // quadratic copying overhead. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); - Network accessline 1691
// quadratic copying overhead. let target = SinkTarget::HttpEndpoint("https://controller.example/events".into()); let mut message = message(); - Network accessline 1692
let target = SinkTarget::HttpEndpoint("https://controller.example/events".into());
src/source/git.rs
- Network accessline 973
return Some(rest.to_string()); } if let Some(rest) = trimmed.strip_prefix("https://github.com/") { - Network accessline 974
} if let Some(rest) = trimmed.strip_prefix("https://github.com/") { return Some(rest.to_string()); - Network accessline 975
if let Some(rest) = trimmed.strip_prefix("https://github.com/") { - Network accessline 1047
); assert_eq!( parse_github_repo("https://github.com/bellman/clawhip.git"), - Network accessline 1048
assert_eq!( parse_github_repo("https://github.com/bellman/clawhip.git"), Some("bellman/clawhip".to_string()) - Network accessline 1049
parse_github_repo("https://github.com/bellman/clawhip.git"),
src/source/github.rs
- Access to secretsline 99
[Credential-related source omitted] - Network accessline 4626
client.backoff.lock().unwrap().until = Some(std::time::Instant::now() + Duration::from_secs(60)); let error = github_get(&client, "http://127.0.0.1:1", "rate-limit", &[], "test") - Network accessline 4627
Some(std::time::Instant::now() + Duration::from_secs(60)); let error = github_get(&client, "http://127.0.0.1:1", "rate-limit", &[], "test") .await - Network accessline 4628
let error = github_get(&client, "http://127.0.0.1:1", "rate-limit", &[], "test") - Network accessline 4660
github_get( &successful_client, &format!("http://{addr}"), - Network accessline 4661
&successful_client, &format!("http://{addr}"), "success", - Network accessline 4662
&format!("http://{addr}"), - Network accessline 4678
let error = github_get( &backed_off_client, "http://127.0.0.1:1", - Network accessline 4679
&backed_off_client, "http://127.0.0.1:1", "rate-limit", - Network accessline 4680
"http://127.0.0.1:1", - Network accessline 4802
conclusion: conclusion.map(ToString::to_string), sha: "abcdef1234567890".into(), url: "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 4803
sha: "abcdef1234567890".into(), url: "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), branch: Some("feat/github-ci-events".into()), - Network accessline 4804
url: "https://github.com/Yeachan-Heo/clawhip/actions/runs/1".into(), - Network accessline 4825
conclusion: conclusion.map(ToString::to_string), sha: format!("sha-{run_id}"), url: format!("https://github.com/org/repo/actions/runs/{run_id}"), - Network accessline 4826
sha: format!("sha-{run_id}"), url: format!("https://github.com/org/repo/actions/runs/{run_id}"), branch: Some(branch.into()), - Network accessline 4827
url: format!("https://github.com/org/repo/actions/runs/{run_id}"), - Network accessline 5059
conclusion: Some("success".into()), sha: sha.into(), url: "https://github.com/org/repo/pull/58".into(), - Network accessline 5060
sha: sha.into(), url: "https://github.com/org/repo/pull/58".into(), branch: Some("feat/x".into()), - Network accessline 5061
url: "https://github.com/org/repo/pull/58".into(), - Network accessline 5075
let with_run_id = GitHubCISnapshot { run_id: Some("4242".into()), url: "https://github.com/org/repo/actions/runs/4242".into(), - Network accessline 5076
run_id: Some("4242".into()), url: "https://github.com/org/repo/actions/runs/4242".into(), ..fallback.clone() - Network accessline 5077
url: "https://github.com/org/repo/actions/runs/4242".into(), - Network accessline 5233
let mut buf = vec![0_u8; 4096]; let _ = stream.read(&mut buf).await; let body = r#"{"workflow_runs":[{"id": 9001, "name": "CI", "status": "completed", "conclusion": "success", "head_branch": "main", "head_sha - Network accessline 5234
let _ = stream.read(&mut buf).await; let body = r#"{"workflow_runs":[{"id": 9001, "name": "CI", "status": "completed", "conclusion": "success", "head_branch": "main", "head_sha": "abc", "html_url": "https://github.com/org/re - Network accessline 5235
let body = r#"{"workflow_runs":[{"id": 9001, "name": "CI", "status": "completed", "conclusion": "success", "head_branch": "main", "head_sha": "abc", "html_url": "https://github.com/org/repo/actions/runs/9001", "pull_requests": [], "created_ - Network accessline 5244
let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 5245
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 5753
let request = String::from_utf8_lossy(&buf[..n]).to_string(); let body = if request.contains("/pulls") { r#"[{"number":42,"title":"PR","state":"open","html_url":"https://github.com/org/repo/pull/42","head - Network accessline 5754
let body = if request.contains("/pulls") { r#"[{"number":42,"title":"PR","state":"open","html_url":"https://github.com/org/repo/pull/42","head":{"ref":"feat/pr","sha":"prsha"}}]"#.to_string() } else if re - Network accessline 5755
r#"[{"number":42,"title":"PR","state":"open","html_url":"https://github.com/org/repo/pull/42","head":{"ref":"feat/pr","sha":"prsha"}}]"#.to_string() - Network accessline 5757
check_polls += 1; if check_polls <= 2 { r#"{"check_runs":[{"id":11,"name":"CI","status":"completed","conclusion":"success","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/11","he - Network accessline 5758
if check_polls <= 2 { r#"{"check_runs":[{"id":11,"name":"CI","status":"completed","conclusion":"success","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/11","head_sha":"prsha"}]}"#.to_string() - Network accessline 5759
r#"{"check_runs":[{"id":11,"name":"CI","status":"completed","conclusion":"success","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/11","head_sha":"prsha"}]}"#.to_string() - Network accessline 5760
} else { r#"{"check_runs":[{"id":22,"name":"CI","status":"completed","conclusion":"failure","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/22","head_sha":"prsha"}]}"#.to_string() - Network accessline 5761
r#"{"check_runs":[{"id":22,"name":"CI","status":"completed","conclusion":"failure","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/22","head_sha":"prsha"}]}"#.to_string() - Network accessline 5764
if request.contains("head_sha=prsha") { if check_polls <= 2 { r#"{"workflow_runs":[{"id":4242,"name":"CI","status":"completed","conclusion":"success","head_branch":"feat/pr","head_sha":"pr - Network accessline 5765
if check_polls <= 2 { r#"{"workflow_runs":[{"id":4242,"name":"CI","status":"completed","conclusion":"success","head_branch":"feat/pr","head_sha":"prsha","html_url":"https://github.com/org/repo/actions/runs/4242", - Network accessline 5766
r#"{"workflow_runs":[{"id":4242,"name":"CI","status":"completed","conclusion":"success","head_branch":"feat/pr","head_sha":"prsha","html_url":"https://github.com/org/repo/actions/runs/4242","run_attempt":1,"pull_requests":[{"number":42}]}]} - Network accessline 5767
} else { r#"{"workflow_runs":[{"id":4242,"name":"CI","status":"completed","conclusion":"failure","head_branch":"feat/pr","head_sha":"prsha","html_url":"https://github.com/org/repo/actions/runs/4242","run_attempt" - Network accessline 5768
r#"{"workflow_runs":[{"id":4242,"name":"CI","status":"completed","conclusion":"failure","head_branch":"feat/pr","head_sha":"prsha","html_url":"https://github.com/org/repo/actions/runs/4242","run_attempt":2,"pull_requests":[{"number":42}]}]} - Network accessline 5785
let baseline_path = dir.path().join("github-ci-baseline.json"); let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 5786
let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); config.monitors.git.repos = vec![GitRepoMonitor { - Network accessline 5787
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 5928
#[test] fn issue_317_pagination_cycle_keys_normalize_variants_and_self_cycles() { let first = "https://API.GITHUB.com:443/repos/org/repo/actions/runs/?b=2&a=1#ignored"; - Network accessline 5929
fn issue_317_pagination_cycle_keys_normalize_variants_and_self_cycles() { let first = "https://API.GITHUB.com:443/repos/org/repo/actions/runs/?b=2&a=1#ignored"; let equivalent = "https://api.github.com/repos/org/repo/actions - Network accessline 5930
let first = "https://API.GITHUB.com:443/repos/org/repo/actions/runs/?b=2&a=1#ignored"; - Network accessline 5931
let equivalent = "https://api.github.com/repos/org/repo/actions/runs?a=1&b=2"; - Network accessline 5934
let current = "https://api.github.com/repos/org/repo/actions/runs?page=1"; - Network accessline 5935
let self_cycle = "https://API.GITHUB.com:443/repos/org/repo/actions/runs/?page=1#next"; - Network accessline 7104
let conclusion = if *id == 9_001 { "failure" } else { "success" }; format!( r#"{{"id":{id},"name":"CI","status":"completed","conclusion":"{conclusion}","head_branch":"main","head_sha":"sha - Network accessline 7105
format!( r#"{{"id":{id},"name":"CI","status":"completed","conclusion":"{conclusion}","head_branch":"main","head_sha":"sha-{id}","html_url":"https://github.com/org/repo/actions/runs/{id}","pull_requests":[],"creat - Network accessline 7106
r#"{{"id":{id},"name":"CI","status":"completed","conclusion":"{conclusion}","head_branch":"main","head_sha":"sha-{id}","html_url":"https://github.com/org/repo/actions/runs/{id}","pull_requests":[],"created_at":"2026-01-01T00:00:00Z","run_at - Network accessline 7111
let next = page + 1; let response = format!( "HTTP/1.1 200 OK\r\ncontent-type: application/json\r\nlink: <http://{addr}/repos/org/repo/actions/runs?per_page=100&page={next}>; rel=\"next\"\r\nconnection: c - Network accessline 7112
let response = format!( "HTTP/1.1 200 OK\r\ncontent-type: application/json\r\nlink: <http://{addr}/repos/org/repo/actions/runs?per_page=100&page={next}>; rel=\"next\"\r\nconnection: close\r\ncontent-length: {}\r\n\r\n{bo - Network accessline 7113
"HTTP/1.1 200 OK\r\ncontent-type: application/json\r\nlink: <http://{addr}/repos/org/repo/actions/runs?per_page=100&page={next}>; rel=\"next\"\r\nconnection: close\r\ncontent-length: {}\r\n\r\n{body}", - Network accessline 7124
let baseline_path = dir.path().join("github-ci-baseline.json"); let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 7125
let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); config.monitors.git.repos = vec![GitRepoMonitor { - Network accessline 7126
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 7227
let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 7228
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 7635
.map(|id| { format!( r#"{{"id":{},"name":"CI","status":"completed","conclusion":"success","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/{id}","head_sha":"prsha"}}"#, - Network accessline 7636
format!( r#"{{"id":{},"name":"CI","status":"completed","conclusion":"success","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/{id}","head_sha":"prsha"}}"#, id + 1 - Network accessline 7637
r#"{{"id":{},"name":"CI","status":"completed","conclusion":"success","details_url":"https://github.com/org/repo/actions/runs/4242/jobs/{id}","head_sha":"prsha"}}"#, - Network accessline 7643
let next = page_hits + 1; let response = format!( "HTTP/1.1 200 OK\r\ncontent-type: application/json\r\nlink: <http://{addr}/repos/org/repo/commits/prsha/check-runs?page={next}>; rel=\"next\"\r\nconnectio - Network accessline 7644
let response = format!( "HTTP/1.1 200 OK\r\ncontent-type: application/json\r\nlink: <http://{addr}/repos/org/repo/commits/prsha/check-runs?page={next}>; rel=\"next\"\r\nconnection: close\r\ncontent-length: {}\r\n\r\n{bod - Network accessline 7645
"HTTP/1.1 200 OK\r\ncontent-type: application/json\r\nlink: <http://{addr}/repos/org/repo/commits/prsha/check-runs?page={next}>; rel=\"next\"\r\nconnection: close\r\ncontent-length: {}\r\n\r\n{body}", - Network accessline 7656
title: "PR".into(), status: "open".into(), url: "https://github.com/org/repo/pull/42".into(), - Network accessline 7657
status: "open".into(), url: "https://github.com/org/repo/pull/42".into(), head_branch: "feat/pr".into(), - Network accessline 7658
url: "https://github.com/org/repo/pull/42".into(), - Network accessline 7664
let client = build_github_client(None).unwrap(); let (runs, complete) = fetch_check_runs(&client, &format!("http://{addr}"), "org/repo", 42, &pr) - Network accessline 7665
let (runs, complete) = fetch_check_runs(&client, &format!("http://{addr}"), "org/repo", 42, &pr) .await - Network accessline 7666
fetch_check_runs(&client, &format!("http://{addr}"), "org/repo", 42, &pr) - Network accessline 7880
}; format!( r#"{{"id": {id}, "name": "CI", "status": "completed", "conclusion": "{conclusion}", "head_branch": "main", "head_sha": "sha-{id}", "html_url": "https://github.com/org/repo/actions/runs - Network accessline 7881
format!( r#"{{"id": {id}, "name": "CI", "status": "completed", "conclusion": "{conclusion}", "head_branch": "main", "head_sha": "sha-{id}", "html_url": "https://github.com/org/repo/actions/runs/{id}", "pull_requests" - Network accessline 7882
r#"{{"id": {id}, "name": "CI", "status": "completed", "conclusion": "{conclusion}", "head_branch": "main", "head_sha": "sha-{id}", "html_url": "https://github.com/org/repo/actions/runs/{id}", "pull_requests": []}}"# - Network accessline 7919
let n = stream.read(&mut buf).await.unwrap(); let request = String::from_utf8_lossy(&buf[..n]).to_string(); requests.push(request.clone()); - Network accessline 7920
let request = String::from_utf8_lossy(&buf[..n]).to_string(); requests.push(request.clone()); request_count_for_server.fetch_add(1, Ordering::SeqCst); - Network accessline 7921
requests.push(request.clone()); - Network accessline 7947
let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 7948
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 8042
let requests = server.await.unwrap(); // Four CI polls; issues, pulls, and issue comments add three requests per poll. assert_eq!(requests.len(), 16); - Network accessline 8043
// Four CI polls; issues, pulls, and issue comments add three requests per poll. assert_eq!(requests.len(), 16); assert_eq!( - Network accessline 8044
assert_eq!(requests.len(), 16); - Network accessline 8072
"head_branch": "main", "head_sha": "deadbeef", "html_url": "https://github.com/ultraworkers/claw-code/actions/runs/24007460067", - Network accessline 8073
"head_sha": "deadbeef", "html_url": "https://github.com/ultraworkers/claw-code/actions/runs/24007460067", "pull_requests": [] - Network accessline 8074
"html_url": "https://github.com/ultraworkers/claw-code/actions/runs/24007460067", - Network accessline 8088
let mut config = AppConfig::default(); config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 8089
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 8134
"status": "completed", "conclusion": "failure", "details_url": "https://github.com/org/repo/actions/runs/123/jobs/1", - Network accessline 8135
"conclusion": "failure", "details_url": "https://github.com/org/repo/actions/runs/123/jobs/1", "head_sha": "prsha" - Network accessline 8136
"details_url": "https://github.com/org/repo/actions/runs/123/jobs/1", - Network accessline 8147
"head_branch": "feat/pr", "head_sha": "prsha", "html_url": "https://github.com/org/repo/actions/runs/123", - Network accessline 8148
"head_sha": "prsha", "html_url": "https://github.com/org/repo/actions/runs/123", "run_attempt": 1, - Network accessline 8149
"html_url": "https://github.com/org/repo/actions/runs/123", - Network accessline 8161
"head_branch": "main", "head_sha": "mainsha", "html_url": "https://github.com/org/repo/actions/runs/456", - Network accessline 8162
"head_sha": "mainsha", "html_url": "https://github.com/org/repo/actions/runs/456", "pull_requests": [] - Network accessline 8163
"html_url": "https://github.com/org/repo/actions/runs/456", - Network accessline 8172
let mut buf = vec![0_u8; 4096]; let n = stream.read(&mut buf).await.unwrap(); requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); - Network accessline 8173
let n = stream.read(&mut buf).await.unwrap(); requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); // connection: close prevents reqwest from reusing the TCP - Network accessline 8174
requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); - Network accessline 8201
title: "PR".into(), status: "open".into(), url: "https://github.com/org/repo/pull/42".into(), - Network accessline 8202
status: "open".into(), url: "https://github.com/org/repo/pull/42".into(), head_branch: "feat/pr".into(), - Network accessline 8203
url: "https://github.com/org/repo/pull/42".into(), - Network accessline 8211
let (ci, window_complete) = fetch_ci_statuses( &client, &format!("http://{addr}"), - Network accessline 8212
&client, &format!("http://{addr}"), &GitRepoMonitor::default(), - Network accessline 8213
&format!("http://{addr}"), - Network accessline 8236
let requests = server.await.unwrap(); assert_eq!(requests.len(), 3); - Network accessline 8237
assert_eq!(requests.len(), 3); - Network accessline 8273
assert_eq!( events[0].payload["url"], json!("https://github.com/Yeachan-Heo/clawhip/actions/runs/1") - Network accessline 8274
events[0].payload["url"], json!("https://github.com/Yeachan-Heo/clawhip/actions/runs/1") ); - Network accessline 8275
json!("https://github.com/Yeachan-Heo/clawhip/actions/runs/1") - Network accessline 8426
let _ = client .http .get(format!("http://{}/repos/x/y/pulls", addr)) - Network accessline 8427
.http .get(format!("http://{}/repos/x/y/pulls", addr)) .send() - Network accessline 8428
.get(format!("http://{}/repos/x/y/pulls", addr)) - Network accessline 8473
let mut buf = vec![0_u8; 4096]; let n = stream.read(&mut buf).await.unwrap(); requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); - Network accessline 8474
let n = stream.read(&mut buf).await.unwrap(); requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); request_count_for_server.fetch_add(1, Ordering::SeqCst); - Network accessline 8475
requests.push(String::from_utf8_lossy(&buf[..n]).to_string()); - Network accessline 8483
let mut config = AppConfig::default(); config.monitors.poll_interval_secs = 1; config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 8484
config.monitors.poll_interval_secs = 1; config.monitors.github_api_base = format!("http://{addr}"); config.monitors.git.repos = vec![GitRepoMonitor { - Network accessline 8485
config.monitors.github_api_base = format!("http://{addr}"); - Network accessline 8518
let requests = server.await.unwrap(); assert_eq!(requests.len(), 4); - Network accessline 8519
assert_eq!(requests.len(), 4); - Network accessline 8548
use tokio::io::{AsyncReadExt, AsyncWriteExt}; let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); let base = format!("http://{}", listener.local_addr().unwrap()); - Network accessline 8549
let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); let base = format!("http://{}", listener.local_addr().unwrap()); let requests = Arc::new(Mutex::new(Vec::new())); - Network accessline 8550
let base = format!("http://{}", listener.local_addr().unwrap()); let requests = Arc::new(Mutex::new(Vec::new())); let captured = requests.clone(); - Network accessline 8551
let requests = Arc::new(Mutex::new(Vec::new())); let captured = requests.clone(); let server_base = base.clone(); - Network accessline 8552
let captured = requests.clone(); - Network accessline 8590
fn activity_pr(number: u64, updated_at: &str) -> serde_json::Value { json!({"number": number, "title": "A PR", "state": "open", "html_url": "https://github.com/org/repo/pull/1", - Network accessline 8591
json!({"number": number, "title": "A PR", "state": "open", "html_url": "https://github.com/org/repo/pull/1", - Network accessline 8600
updated_at: &str, ) -> serde_json::Value { json!({"id": id, "issue_url": format!("https://api.github.com/repos/org/repo/issues/{number}"), - Network accessline 8601
) -> serde_json::Value { json!({"id": id, "issue_url": format!("https://api.github.com/repos/org/repo/issues/{number}"), "pull_request_url": format!("https://api.github.com/repos/org/repo/pulls/{number}"), - Network accessline 8602
json!({"id": id, "issue_url": format!("https://api.github.com/repos/org/repo/issues/{number}"), - Network accessline 8603
"pull_request_url": format!("https://api.github.com/repos/org/repo/pulls/{number}"), - Network accessline 8604
"html_url": format!("https://github.com/org/repo/pull/{number}#comment-{id}"), - Network accessline 8609
fn activity_review(id: u64, state: &str, submitted_at: &str) -> serde_json::Value { json!({"id": id, "state": state, "submitted_at": submitted_at, "user": {"login": "reviewer"}, "html_url": format!("https://github.com/or - Network accessline 8610
json!({"id": id, "state": state, "submitted_at": submitted_at, "user": {"login": "reviewer"}, "html_url": format!("https://github.com/org/repo/pull/1#review-{id}"), "body": "private review text"}) - Network accessline 8611
"user": {"login": "reviewer"}, "html_url": format!("https://github.com/org/repo/pull/1#review-{id}"), - Network accessline 8772
let mut comment = activity_comment(id, 10, created, updated); comment["html_url"] = json!(format!( "https://github.com/org/repo/issues/10#issuecomment-{id}" - Network accessline 8773
comment["html_url"] = json!(format!( "https://github.com/org/repo/issues/10#issuecomment-{id}" )); - Network accessline 8774
"https://github.com/org/repo/issues/10#issuecomment-{id}" - Network accessline 8908
{"number": 10, "title": "An issue", "state": "open", "comments": comments}, {"number": 1, "title": "A PR", "state": "open", "comments": comments, "pull_request": {"url": "https://api.github.com/repos - Network accessline 8909
{"number": 1, "title": "A PR", "state": "open", "comments": comments, "pull_request": {"url": "https://api.github.com/repos/org/repo/pulls/1"}} ]), - Network accessline 8910
"pull_request": {"url": "https://api.github.com/repos/org/repo/pulls/1"}} - Network accessline 8936
); assert_eq!( *requests.lock().unwrap(), - Network accessline 8937
assert_eq!( *requests.lock().unwrap(), [ - Network accessline 8938
*requests.lock().unwrap(), - Network accessline 8987
json!({"repo": "repo", "number": 2, "title": "A PR", "author": "commenter", "pr_author": "pr-owner", "comment_id": 2, "url": "https://github.com/org/repo/pull/2#comment-2"}) - Network accessline 8988
"author": "commenter", "pr_author": "pr-owner", "comment_id": 2, "url": "https://github.com/org/repo/pull/2#comment-2"}) ); - Network accessline 8989
"url": "https://github.com/org/repo/pull/2#comment-2"}) - Network accessline 9056
assert!(harness.poll().await.is_empty()); assert_eq!( requests.lock().unwrap().len(), - Network accessline 9057
assert_eq!( requests.lock().unwrap().len(), 4, - Network accessline 9058
requests.lock().unwrap().len(), - Network accessline 9229
assert!(harness.client.backoff.lock().unwrap().until.is_some()); assert!(harness.poll().await.is_empty()); assert_eq!(requests.lock().unwrap().len(), 9); - Network accessline 9230
assert!(harness.poll().await.is_empty()); assert_eq!(requests.lock().unwrap().len(), 9); let activity = &harness.repo_state().activity; - Network accessline 9231
assert_eq!(requests.lock().unwrap().len(), 9); - Network accessline 9300
Some(ACTIVITY_T1) ); let first_poll_requests = requests.lock().unwrap().len(); - Network accessline 9301
); let first_poll_requests = requests.lock().unwrap().len(); assert_eq!(first_poll_requests, 8 + MAX_PR_METADATA_LOOKUPS); - Network accessline 9302
let first_poll_requests = requests.lock().unwrap().len(); - Network accessline 9578
Some(ACTIVITY_T2) ); let requests = requests.lock().unwrap().clone(); - Network accessline 9579
); let requests = requests.lock().unwrap().clone(); let feed = &requests[7]; - Network accessline 9580
let requests = requests.lock().unwrap().clone(); - Network accessline 9894
Some(ACTIVITY_T1) ); let requests = requests.lock().unwrap().clone(); - Network accessline 9895
); let requests = requests.lock().unwrap().clone(); assert!(requests[5].contains("sort=updated") && requests[5].contains("direction=desc")); - Network accessline 9896
let requests = requests.lock().unwrap().clone(); - Network accessline 9948
Some(ACTIVITY_T1) ); let requests = requests.lock().unwrap().clone(); - Network accessline 9949
); let requests = requests.lock().unwrap().clone(); assert!(requests[5].contains("page=1") && requests[6].contains("page=2")); - Network accessline 9950
let requests = requests.lock().unwrap().clone(); - Network accessline 9951
assert!(requests[5].contains("page=1") && requests[6].contains("page=2")); assert_eq!(requests.len(), 12); server.await.unwrap(); - Network accessline 9952
assert_eq!(requests.len(), 12); - Network accessline 10164
(1002..=1101).rev().collect::<VecDeque<_>>() ); assert_eq!(requests.lock().unwrap().len(), 4); - Network accessline 10165
); assert_eq!(requests.lock().unwrap().len(), 4); assert!(requests.lock().unwrap()[3].contains("direction=desc")); - Network accessline 10166
assert_eq!(requests.lock().unwrap().len(), 4); - Network accessline 10167
assert!(requests.lock().unwrap()[3].contains("direction=desc")); - Network accessline 10213
assert!(harness.repo_state().activity.review_scan.is_none()); assert_eq!(harness.repo_state().activity.emitted_review_ids, [1]); assert_eq!(requests.lock().unwrap().len(), 5); - Network accessline 10214
assert_eq!(harness.repo_state().activity.emitted_review_ids, [1]); assert_eq!(requests.lock().unwrap().len(), 5); let events = harness.poll().await; - Network accessline 10215
assert_eq!(requests.lock().unwrap().len(), 5); - Network accessline 10303
let mut comment = activity_comment(id, 2, ACTIVITY_T1, ACTIVITY_T1); comment["html_url"] = json!(format!( "https://github.com/org/repo/issues/2#issuecomment-{id}" - Network accessline 10304
comment["html_url"] = json!(format!( "https://github.com/org/repo/issues/2#issuecomment-{id}" )); - Network accessline 10305
"https://github.com/org/repo/issues/2#issuecomment-{id}"
src/source/github_notifications.rs
- Network accessline 521
.filter(|url| url.host_str() != Some("api.github.com")) .map(|url| url.origin().ascii_serialization()) .unwrap_or_else(|| "https://github.com".into()); - Network accessline 522
.map(|url| url.origin().ascii_serialization()) .unwrap_or_else(|| "https://github.com".into()); let fallback = format!("{web_base}/{repo}"); - Network accessline 523
.unwrap_or_else(|| "https://github.com".into()); - Network accessline 597
"repository": {"full_name": "owner/repo", "private": true}, "subject": {"title": "A PR", "type": "PullRequest", "url": "https://api.github.com/repos/owner/repo/pulls/12", - Network accessline 598
"subject": {"title": "A PR", "type": "PullRequest", "url": "https://api.github.com/repos/owner/repo/pulls/12", "latest_comment_url": "https://api.github.com/repos/owner/repo/issues/comments/123"}, - Network accessline 599
"url": "https://api.github.com/repos/owner/repo/pulls/12", - Network accessline 600
"latest_comment_url": "https://api.github.com/repos/owner/repo/issues/comments/123"}, - Network accessline 651
) -> Server { let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); let base = format!("http://{}", listener.local_addr().unwrap()); - Network accessline 652
let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); let base = format!("http://{}", listener.local_addr().unwrap()); let requests = Arc::new(Mutex::new(Vec::new())); - Network accessline 653
let base = format!("http://{}", listener.local_addr().unwrap()); let requests = Arc::new(Mutex::new(Vec::new())); let captured = requests.clone(); - Network accessline 654
let requests = Arc::new(Mutex::new(Vec::new())); let captured = requests.clone(); let server_base = base.clone(); - Network accessline 655
let captured = requests.clone(); - Network accessline 758
} let path = request.split_whitespace().nth(1).unwrap(); let url = reqwest::Url::parse(&format!("http://localhost{path}")).unwrap(); - Network accessline 759
let path = request.split_whitespace().nth(1).unwrap(); let url = reqwest::Url::parse(&format!("http://localhost{path}")).unwrap(); let query: HashMap<_, _> = url.query_pairs().into_owned().collect(); - Network accessline 760
let url = reqwest::Url::parse(&format!("http://localhost{path}")).unwrap(); - Network accessline 843
state: &mut MonitorState, ) { let start = server.requests.lock().unwrap().len(); - Network accessline 844
) { let start = server.requests.lock().unwrap().len(); let catch_up = state.catch_up.clone(); - Network accessline 845
let start = server.requests.lock().unwrap().len(); - Network accessline 847
let watermark = state.watermark; poll_once(config, client, tx, state).await.unwrap(); let requests = server.requests.lock().unwrap(); - Network accessline 848
poll_once(config, client, tx, state).await.unwrap(); let requests = server.requests.lock().unwrap(); assert!(requests.len() - start <= MAX_PAGES); - Network accessline 849
let requests = server.requests.lock().unwrap(); - Network accessline 850
assert!(requests.len() - start <= MAX_PAGES); - Network accessline 925
json!({"repo": "owner/repo", "thread_id": "1", "reason": "review_requested", "subject_type": "PullRequest", "title": "A PR", "number": 12, "url": "https://github.com/owner/repo/pull/12#issuecomment-123", - Network accessline 926
"reason": "review_requested", "subject_type": "PullRequest", "title": "A PR", "number": 12, "url": "https://github.com/owner/repo/pull/12#issuecomment-123", "updated_at": NEW}) - Network accessline 927
"number": 12, "url": "https://github.com/owner/repo/pull/12#issuecomment-123", - Network accessline 971
poll_once(&config, &client, &tx, &mut state).await.unwrap(); assert!(rx.try_recv().is_err()); let requests = server.requests.lock().unwrap(); - Network accessline 972
[Credential-related source omitted] - Network accessline 973
let requests = server.requests.lock().unwrap(); - Network accessline 1010
assert_eq!(state.interval(60), Duration::from_secs(180)); assert_eq!(state.interval(300), Duration::from_secs(300)); assert!(server.requests.lock().unwrap()[1].contains(OLD_CONDITIONAL)); - Network accessline 1011
assert_eq!(state.interval(300), Duration::from_secs(300)); assert!(server.requests.lock().unwrap()[1].contains(OLD_CONDITIONAL)); } - Network accessline 1012
assert!(server.requests.lock().unwrap()[1].contains(OLD_CONDITIONAL)); - Network accessline 1035
assert!(rx.try_recv().is_err()); assert!( server.requests.lock().unwrap()[1] - Network accessline 1036
assert!( server.requests.lock().unwrap()[1] .contains("if-modified-since: Wed, 14 Oct 2026 23:50:00 GMT") - Network accessline 1037
server.requests.lock().unwrap()[1] - Network accessline 1090
assert!(rx.try_recv().is_err()); } assert_eq!(server.requests.lock().unwrap().len(), 8); - Network accessline 1091
} assert_eq!(server.requests.lock().unwrap().len(), 8); } - Network accessline 1092
assert_eq!(server.requests.lock().unwrap().len(), 8); - Network accessline 1121
assert!(rx.try_recv().is_err()); assert_eq!(state.threads.len(), 4); for request in server.requests.lock().unwrap().iter() { - Network accessline 1122
assert_eq!(state.threads.len(), 4); for request in server.requests.lock().unwrap().iter() { assert!(request.starts_with("GET /notifications?")); - Network accessline 1123
for request in server.requests.lock().unwrap().iter() { - Network accessline 1179
poll_once(&config, &client, &tx, &mut state).await.unwrap(); assert!(rx.try_recv().is_err()); assert!(server.requests.lock().unwrap()[3].contains(OLD_CONDITIONAL)); - Network accessline 1180
assert!(rx.try_recv().is_err()); assert!(server.requests.lock().unwrap()[3].contains(OLD_CONDITIONAL)); } - Network accessline 1181
assert!(server.requests.lock().unwrap()[3].contains(OLD_CONDITIONAL)); - Network accessline 1223
assert!(state.last_modified.is_some()); let baseline = state.watermark; let conditional_start = server.requests.lock().unwrap().len(); - Network accessline 1224
let baseline = state.watermark; let conditional_start = server.requests.lock().unwrap().len(); bounded_poll(&server, &config, &client, &tx, &mut state).await; - Network accessline 1225
let conditional_start = server.requests.lock().unwrap().len(); - Network accessline 1227
assert_eq!(state.watermark, baseline); assert!(rx.try_recv().is_err()); let requests = server.requests.lock().unwrap(); - Network accessline 1228
assert!(rx.try_recv().is_err()); let requests = server.requests.lock().unwrap(); assert!(!requests[0].contains("since=")); - Network accessline 1229
let requests = server.requests.lock().unwrap(); - Network accessline 1230
assert!(!requests[0].contains("since=")); assert!(requests.last().unwrap().contains("since=")); assert!(requests[conditional_start].contains("if-modified-since:")); - Network accessline 1231
assert!(requests.last().unwrap().contains("since=")); - Network accessline 1372
ids.dedup(); assert_eq!(ids.len(), 252, "all tied IDs and fresh head emitted once"); let requests = server.requests.lock().unwrap(); - Network accessline 1373
assert_eq!(ids.len(), 252, "all tied IDs and fresh head emitted once"); let requests = server.requests.lock().unwrap(); assert!( - Network accessline 1374
let requests = server.requests.lock().unwrap(); - Network accessline 1378
.any(|request| request.contains("before=2026-10-15T00%3A00%3A02Z")) ); assert!(requests.iter().any(|request| request.contains("page=6"))); - Network accessline 1379
); assert!(requests.iter().any(|request| request.contains("page=6"))); } - Network accessline 1380
assert!(requests.iter().any(|request| request.contains("page=6"))); - Network accessline 1408
inbox.fail_at = Some(inbox.requests + 2); // head succeeds, backlog fails } let start = server.requests.lock().unwrap().len(); - Network accessline 1409
} let start = server.requests.lock().unwrap().len(); assert!(poll_once(&config, &client, &tx, &mut state).await.is_err()); - Network accessline 1410
let start = server.requests.lock().unwrap().len(); - Network accessline 1411
assert!(poll_once(&config, &client, &tx, &mut state).await.is_err()); assert_eq!(server.requests.lock().unwrap().len() - start, 2); assert_eq!( - Network accessline 1412
assert_eq!(server.requests.lock().unwrap().len() - start, 2); - Network accessline 1428
ids.dedup(); assert_eq!(ids.len(), 252); let requests = server.requests.lock().unwrap(); - Network accessline 1429
assert_eq!(ids.len(), 252); let requests = server.requests.lock().unwrap(); assert_eq!( - Network accessline 1430
let requests = server.requests.lock().unwrap(); - Network accessline 1473
inbox.fail_at = Some(inbox.requests + 3); } let start = server.requests.lock().unwrap().len(); - Network accessline 1474
} let start = server.requests.lock().unwrap().len(); assert!(poll_once(&config, &client, &tx, &mut state).await.is_err()); - Network accessline 1475
let start = server.requests.lock().unwrap().len(); - Network accessline 1476
assert!(poll_once(&config, &client, &tx, &mut state).await.is_err()); assert_eq!(server.requests.lock().unwrap().len() - start, 3); assert_eq!( - Network accessline 1477
assert_eq!(server.requests.lock().unwrap().len() - start, 3); - Network accessline 1634
inbox.fail_at = Some(inbox.requests + MAX_PAGES); } let start = server.requests.lock().unwrap().len(); - Network accessline 1635
} let start = server.requests.lock().unwrap().len(); assert!(poll_once(&config, &client, &tx, &mut state).await.is_err()); - Network accessline 1636
let start = server.requests.lock().unwrap().len(); - Network accessline 1637
assert!(poll_once(&config, &client, &tx, &mut state).await.is_err()); assert_eq!(server.requests.lock().unwrap().len() - start, MAX_PAGES); assert_eq!( - Network accessline 1638
assert_eq!(server.requests.lock().unwrap().len() - start, MAX_PAGES); - Network accessline 1703
} assert_eq!(state.catch_up.as_ref().unwrap().page, 5); let start = server.requests.lock().unwrap().len(); - Network accessline 1704
assert_eq!(state.catch_up.as_ref().unwrap().page, 5); let start = server.requests.lock().unwrap().len(); bounded_poll(&server, &config, &client, &tx, &mut state).await; - Network accessline 1705
let start = server.requests.lock().unwrap().len(); - Network accessline 1706
bounded_poll(&server, &config, &client, &tx, &mut state).await; assert_eq!(server.requests.lock().unwrap().len() - start, 5); assert_eq!(state.catch_up.as_ref().unwrap().page, 9); - Network accessline 1707
assert_eq!(server.requests.lock().unwrap().len() - start, 5); - Network accessline 1737
.threads .retain(|thread| thread["updated_at"] == NEW); let start = server.requests.lock().unwrap().len(); - Network accessline 1738
.retain(|thread| thread["updated_at"] == NEW); let start = server.requests.lock().unwrap().len(); bounded_poll(&server, &config, &client, &tx, &mut state).await; - Network accessline 1739
let start = server.requests.lock().unwrap().len(); - Network accessline 1740
bounded_poll(&server, &config, &client, &tx, &mut state).await; assert_eq!(server.requests.lock().unwrap().len() - start, 5); assert_eq!(state.catch_up.as_ref().unwrap().page, page + 3); - Network accessline 1741
assert_eq!(server.requests.lock().unwrap().len() - start, 5); - Network accessline 1872
assert_eq!(received_ids(&mut rx), ["X"]); assert!( server.requests.lock().unwrap()[2] - Network accessline 1873
assert!( server.requests.lock().unwrap()[2] .contains("if-modified-since: Thu, 15 Oct 2026 00:05:00 GMT") - Network accessline 1874
server.requests.lock().unwrap()[2] - Network accessline 2041
.await .unwrap(); assert!(server.requests.lock().unwrap().is_empty()); - Network accessline 2042
.unwrap(); assert!(server.requests.lock().unwrap().is_empty()); assert!(rx.try_recv().is_err()); - Network accessline 2043
assert!(server.requests.lock().unwrap().is_empty()); - Network accessline 2102
assert_eq!(rx.try_recv().unwrap().payload["thread_id"], "2"); assert!(rx.try_recv().is_err()); let requests = server.requests.lock().unwrap(); - Network accessline 2103
assert!(rx.try_recv().is_err()); let requests = server.requests.lock().unwrap(); assert!(requests[3].contains("if-modified-since:")); - Network accessline 2104
let requests = server.requests.lock().unwrap(); - Network accessline 2223
// The backlog is bounded by the cutoff instead of draining history. let before = server.requests.lock().unwrap().len(); - Network accessline 2224
let before = server.requests.lock().unwrap().len(); - Network accessline 2225
bounded_poll(&server, &config, &client, &tx, &mut state).await; assert_eq!(server.requests.lock().unwrap().len() - before, 2); assert!(state.catch_up.is_none()); - Network accessline 2226
assert_eq!(server.requests.lock().unwrap().len() - before, 2); - Network accessline 2309
server.task.abort(); let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); config.monitors.github_api_base = format!("http://{}", listener.local_addr().unwrap()); - Network accessline 2310
let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); config.monitors.github_api_base = format!("http://{}", listener.local_addr().unwrap()); drop(listener); // Connection refused, without relying on an - Network accessline 2311
config.monitors.github_api_base = format!("http://{}", listener.local_addr().unwrap()); - Network accessline 2358
.to_string(); assert!(error.contains("backoff")); assert_eq!(server.requests.lock().unwrap().len(), 2); - Network accessline 2359
assert!(error.contains("backoff")); assert_eq!(server.requests.lock().unwrap().len(), 2); assert_eq!(state.interval(60), Duration::from_secs(180)); - Network accessline 2360
assert_eq!(server.requests.lock().unwrap().len(), 2); - Network accessline 2377
reply.headers.push(( "Link".into(), "<https://untrusted.example/notifications?page=2>; rel=\"next\"".into(), - Network accessline 2378
"Link".into(), "<https://untrusted.example/notifications?page=2>; rel=\"next\"".into(), )); - Network accessline 2379
"<https://untrusted.example/notifications?page=2>; rel=\"next\"".into(), - Network accessline 2389
.to_string(); assert!(error.contains("unsafe")); assert_eq!(server.requests.lock().unwrap().len(), 1); - Network accessline 2390
assert!(error.contains("unsafe")); assert_eq!(server.requests.lock().unwrap().len(), 1); assert!(state.threads.is_empty() && state.cutoff.is_none()); - Network accessline 2391
assert_eq!(server.requests.lock().unwrap().len(), 1); - Network accessline 2431
fn notifications_subject_links_without_metadata_requests() { let mut value = thread("1", NEW); value["subject"]["url"] = json!("https://api.github.com/repos/owner/repo/issues/12"); - Network accessline 2432
let mut value = thread("1", NEW); value["subject"]["url"] = json!("https://api.github.com/repos/owner/repo/issues/12"); let notification = serde_json::from_value(value.clone()).unwrap(); - Network accessline 2433
value["subject"]["url"] = json!("https://api.github.com/repos/owner/repo/issues/12"); - Network accessline 2434
let notification = serde_json::from_value(value.clone()).unwrap(); assert_eq!( subject_link(¬ification, "https://api.github.com"), - Network accessline 2435
assert_eq!( subject_link(¬ification, "https://api.github.com"), ( - Network accessline 2436
subject_link(¬ification, "https://api.github.com"), - Network accessline 2437
( Some(12), "https://github.com/owner/repo/issues/12#issuecomment-123".into() - Network accessline 2438
Some(12), "https://github.com/owner/repo/issues/12#issuecomment-123".into() ) - Network accessline 2439
"https://github.com/owner/repo/issues/12#issuecomment-123".into() - Network accessline 2441
); value["subject"]["latest_comment_url"] = Value::Null; value["subject"]["url"] = json!("https://api.github.com/repos/owner/repo/commits/abc123"); - Network accessline 2442
value["subject"]["latest_comment_url"] = Value::Null; value["subject"]["url"] = json!("https://api.github.com/repos/owner/repo/commits/abc123"); let notification = serde_json::from_value(value.clone()).unwrap(); - Network accessline 2443
value["subject"]["url"] = json!("https://api.github.com/repos/owner/repo/commits/abc123"); - Network accessline 2444
let notification = serde_json::from_value(value.clone()).unwrap(); assert_eq!( subject_link(¬ification, "https://api.github.com"), - Network accessline 2445
assert_eq!( subject_link(¬ification, "https://api.github.com"), (None, "https://github.com/owner/repo/commit/abc123".into()) - Network accessline 2446
subject_link(¬ification, "https://api.github.com"), - Network accessline 2447
(None, "https://github.com/owner/repo/commit/abc123".into()) - Network accessline 2450
let notification = serde_json::from_value(value.clone()).unwrap(); assert_eq!( subject_link(¬ification, "https://api.github.com"), - Network accessline 2451
assert_eq!( subject_link(¬ification, "https://api.github.com"), (None, "https://github.com/owner/repo".into()) - Network accessline 2452
subject_link(¬ification, "https://api.github.com"), - Network accessline 2453
(None, "https://github.com/owner/repo".into()) - Network accessline 2454
); value["subject"]["url"] = json!("https://git.example/api/v3/repos/owner/repo/pulls/12"); let notification = serde_json::from_value(value).unwrap(); - Network accessline 2455
value["subject"]["url"] = json!("https://git.example/api/v3/repos/owner/repo/pulls/12"); - Network accessline 2456
let notification = serde_json::from_value(value).unwrap(); assert_eq!( subject_link(¬ification, "https://git.example/api/v3"), - Network accessline 2457
assert_eq!( subject_link(¬ification, "https://git.example/api/v3"), (Some(12), "https://git.example/owner/repo/pull/12".into()) - Network accessline 2458
subject_link(¬ification, "https://git.example/api/v3"), - Network accessline 2459
(Some(12), "https://git.example/owner/repo/pull/12".into()) - Network accessline 2492
)); assert!(rx.try_recv().is_err()); assert_eq!(server.requests.lock().unwrap().len(), 2); - Network accessline 2493
assert!(rx.try_recv().is_err()); assert_eq!(server.requests.lock().unwrap().len(), 2); } - Network accessline 2494
assert_eq!(server.requests.lock().unwrap().len(), 2);
src/source/github_pr_activity_metadata_tests.rs
- Network accessline 229
&& event.payload["comment_id"] == poll * 22), "inline must emit within the next poll"); } assert!(requests.lock().unwrap().iter().filter(|path| { - Network accessline 230
} assert!(requests.lock().unwrap().iter().filter(|path| { path.starts_with("/repos/org/repo/pulls/") && !path.contains("comments") - Network accessline 231
assert!(requests.lock().unwrap().iter().filter(|path| { - Network accessline 280
} assert!(harness.poll().await.is_empty()); assert_eq!(requests.lock().unwrap().iter().filter(|path| path.as_str() == "/repos/org/repo/pulls/99").count(), MAX_METADATA_ATTEMPTS); - Network accessline 281
assert!(harness.poll().await.is_empty()); assert_eq!(requests.lock().unwrap().iter().filter(|path| path.as_str() == "/repos/org/repo/pulls/99").count(), MAX_METADATA_ATTEMPTS); server.await.unwrap(); - Network accessline 282
assert_eq!(requests.lock().unwrap().iter().filter(|path| path.as_str() == "/repos/org/repo/pulls/99").count(), MAX_METADATA_ATTEMPTS); - Network accessline 305
assert!(harness.poll().await.is_empty()); assert_eq!(harness.poll().await.len(), 1); assert_eq!(requests.lock().unwrap().iter().filter(|path| path.as_str() == "/repos/org/repo/pulls/99").count(), 1); - Network accessline 306
assert_eq!(harness.poll().await.len(), 1); assert_eq!(requests.lock().unwrap().iter().filter(|path| path.as_str() == "/repos/org/repo/pulls/99").count(), 1); server.await.unwrap(); - Network accessline 307
assert_eq!(requests.lock().unwrap().iter().filter(|path| path.as_str() == "/repos/org/repo/pulls/99").count(), 1);
src/source/github_status.rs
- Network accessline 24
const DEFAULT_PAGE_URL: &str = "https://www.githubstatus.com"; - Network accessline 451
GitHubStatusMonitorConfig { enabled: true, api_base: "https://www.githubstatus.com/api/v2".into(), - Network accessline 452
enabled: true, api_base: "https://www.githubstatus.com/api/v2".into(), components: vec!["Actions".into()], - Network accessline 453
api_base: "https://www.githubstatus.com/api/v2".into(), - Network accessline 488
status: "investigating".into(), impact: "major".into(), shortlink: Some("https://stspg.io/example".into()), - Network accessline 489
impact: "major".into(), shortlink: Some("https://stspg.io/example".into()), last_update_id: Some("upd-1".into()), - Network accessline 490
shortlink: Some("https://stspg.io/example".into()), - Network accessline 503
let events = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 504
&monitor, "https://www.githubstatus.com", &state, - Network accessline 505
"https://www.githubstatus.com", - Network accessline 521
let events = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 522
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 523
"https://www.githubstatus.com", - Network accessline 536
let same = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 537
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 538
"https://www.githubstatus.com", - Network accessline 546
let recovery = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 547
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 548
"https://www.githubstatus.com", - Network accessline 575
status: "investigating".into(), impact: "critical".into(), shortlink: Some("https://stspg.io/rcz3fcm83sff".into()), - Network accessline 576
impact: "critical".into(), shortlink: Some("https://stspg.io/rcz3fcm83sff".into()), last_update_id: Some("upd-1".into()), - Network accessline 577
shortlink: Some("https://stspg.io/rcz3fcm83sff".into()), - Network accessline 585
let opened = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 586
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 587
"https://www.githubstatus.com", - Network accessline 598
let unchanged = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 599
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 600
"https://www.githubstatus.com", - Network accessline 614
let updated = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 615
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 616
"https://www.githubstatus.com", - Network accessline 628
let resolved = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 629
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 630
"https://www.githubstatus.com", - Network accessline 645
let events = collect_events( &monitor, "https://www.githubstatus.com", - Network accessline 646
&monitor, "https://www.githubstatus.com", &previous, - Network accessline 647
"https://www.githubstatus.com", - Network accessline 712
}; let body = json!({ "page": {"url": "https://www.githubstatus.com"}, - Network accessline 713
let body = json!({ "page": {"url": "https://www.githubstatus.com"}, "components": [{ - Network accessline 714
"page": {"url": "https://www.githubstatus.com"}, - Network accessline 733
config.monitors.github_status = GitHubStatusMonitorConfig { enabled: true, api_base: format!("http://{addr}"), - Network accessline 734
enabled: true, api_base: format!("http://{addr}"), components: vec!["Actions".into()], - Network accessline 735
api_base: format!("http://{addr}"), - Network accessline 768
fn parse_live_summary_shape() { let sample = r#"{ "page": {"id":"kctbh9vrtdwd","name":"GitHub","url":"https://www.githubstatus.com"}, - Network accessline 769
let sample = r#"{ "page": {"id":"kctbh9vrtdwd","name":"GitHub","url":"https://www.githubstatus.com"}, "status": {"indicator":"none","description":"All Systems Operational"}, - Network accessline 770
"page": {"id":"kctbh9vrtdwd","name":"GitHub","url":"https://www.githubstatus.com"}, - Network accessline 804
let events = collect_events( &multi, "https://www.githubstatus.com", - Network accessline 805
&multi, "https://www.githubstatus.com", &previous, - Network accessline 806
"https://www.githubstatus.com",
src/source/subscription.rs
- Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 1042
[Credential-related source omitted] - Network accessline 1068
std::fs::write( &script, format!("#!/bin/sh\ncat > /dev/null\necho '{output}'\n"), - Network accessline 1069
&script, format!("#!/bin/sh\ncat > /dev/null\necho '{output}'\n"), ) - Network accessline 1070
format!("#!/bin/sh\ncat > /dev/null\necho '{output}'\n"),
src/telemetry.rs
- Network accessline 207
#[test] fn safe_target_id_redacts_webhook_secret() { let url = "https://discord.com/api/webhooks/123456/secret-token"; - Network accessline 208
fn safe_target_id_redacts_webhook_secret() { let url = "https://discord.com/api/webhooks/123456/secret-token"; let safe = safe_target_id(&SinkTarget::DiscordWebhook(url.into())); - Network accessline 209
let url = "https://discord.com/api/webhooks/123456/secret-token"; - Network accessline 250
[Credential-related source omitted] - Network accessline 251
[Credential-related source omitted] - Network accessline 252
[Credential-related source omitted] - Network accessline 261
[Credential-related source omitted] - Network accessline 262
[Credential-related source omitted] - Network accessline 263
[Credential-related source omitted]
src/update.rs
- Network accessline 14
const GITHUB_API_BASE: &str = "https://api.github.com"; - Network accessline 310
current_version: "0.5.4".into(), latest_version: "0.5.5".into(), release_url: "https://example.com".into(), - Network accessline 311
latest_version: "0.5.5".into(), release_url: "https://example.com".into(), detected_at: "2026-04-07T00:00:00Z".into(), - Network accessline 312
release_url: "https://example.com".into(),
tests/event_ledger_e2e.rs
- Network accessline 95
bind_host = "127.0.0.1" port = {port} base_url = "http://127.0.0.1:{port}" - Network accessline 97
base_url = "http://127.0.0.1:{port}" - Network accessline 160
"session_id": "session-304", "keywords": ["ledger", "verified"], "source_url": "https://github.com/Yeachan-Heo/clawhip/issues/304" - Network accessline 161
"keywords": ["ledger", "verified"], "source_url": "https://github.com/Yeachan-Heo/clawhip/issues/304" } - Network accessline 162
"source_url": "https://github.com/Yeachan-Heo/clawhip/issues/304"
tests/gajae_profile_install_stdin.rs
- Network accessline 828
routes: github.issue-opened: command: gajae handle github.issue-opened --token secret-token-123 --webhook https://hooks.example/secret --path /home/operator/private - Network accessline 829
github.issue-opened: command: gajae handle github.issue-opened --token secret-token-123 --webhook https://hooks.example/secret --path /home/operator/private "#, - Network accessline 830
command: gajae handle github.issue-opened --token secret-token-123 --webhook https://hooks.example/secret --path /home/operator/private - Network accessline 865
); assert!( !combined.contains("https://hooks.example/secret"), - Network accessline 866
assert!( !combined.contains("https://hooks.example/secret"), "leaked webhook URL: {combined}" - Network accessline 867
!combined.contains("https://hooks.example/secret"),
tests/gjc_sdk_event_bridge.rs
- Network accessline 174
bind_host = "{bind_host}" port = {port} base_url = "http://127.0.0.1:{port}" - Network accessline 176
base_url = "http://127.0.0.1:{port}" - Network accessline 500
&[ ("x-clawhip-local-control", "1"), ("Origin", "http://evil.example"), - Network accessline 501
("x-clawhip-local-control", "1"), ("Origin", "http://evil.example"), ], - Network accessline 502
("Origin", "http://evil.example"),
tests/gjc_sdk_full_loop_e2e.rs
- Network accessline 109
bind_host = "127.0.0.1" port = {port} base_url = "http://127.0.0.1:{port}" - Network accessline 111
base_url = "http://127.0.0.1:{port}" - Network accessline 171
bind_host = "127.0.0.1" port = {port} base_url = "http://127.0.0.1:{port}" - Network accessline 173
base_url = "http://127.0.0.1:{port}"
tests/install_star_prompt.rs
- Executable scriptline 1
#![cfg(unix)]
tests/lane_thread_verification.rs
- Network accessline 145
} fn api_base(&self) -> String { format!("http://127.0.0.1:{}", self.port) - Network accessline 146
fn api_base(&self) -> String { format!("http://127.0.0.1:{}", self.port) } - Network accessline 147
format!("http://127.0.0.1:{}", self.port) - Dangerous shell operationline 301
kill-session) rm -f "$S/live" ;; - Network accessline 317
path, &format!( "[daemon]\nbind_host = \"127.0.0.1\"\nport = {port}\nbase_url = \"http://127.0.0.1:{port}\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n\n[defaults]\nformat = \"compact\"\n" - Network accessline 318
&format!( "[daemon]\nbind_host = \"127.0.0.1\"\nport = {port}\nbase_url = \"http://127.0.0.1:{port}\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n\n[defaults]\nformat = \"compact\"\n" ), - Network accessline 319
"[daemon]\nbind_host = \"127.0.0.1\"\nport = {port}\nbase_url = \"http://127.0.0.1:{port}\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n\n[defaults]\nformat = \"compact\"\n" - Network accessline 326
path, &format!( "[daemon]\nbind_host = \"127.0.0.1\"\nport = {port}\nbase_url = \"http://127.0.0.1:{base_port}\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n\n[defaults]\nformat = \"compact\"\n" - Network accessline 327
&format!( "[daemon]\nbind_host = \"127.0.0.1\"\nport = {port}\nbase_url = \"http://127.0.0.1:{base_port}\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n\n[defaults]\nformat = \"compact\"\n" ), - Network accessline 328
"[daemon]\nbind_host = \"127.0.0.1\"\nport = {port}\nbase_url = \"http://127.0.0.1:{base_port}\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n\n[defaults]\nformat = \"compact\"\n" - Network accessline 1012
write_file( &config_path, "[daemon]\nbind_host = \"127.0.0.1\"\nport = 9\nbase_url = \"http://192.0.2.1:9\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n", - Network accessline 1013
&config_path, "[daemon]\nbind_host = \"127.0.0.1\"\nport = 9\nbase_url = \"http://192.0.2.1:9\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n", ); - Network accessline 1014
"[daemon]\nbind_host = \"127.0.0.1\"\nport = 9\nbase_url = \"http://192.0.2.1:9\"\n\n[providers.discord]\ntoken = \"fixture-token\"\n",
tests/sender_identity_verification.rs
- Network accessline 53
(format!("http://{addr}"), rx) - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Network accessline 262
let output = run_verify(&config_path, &format!("http://{dead_addr}"), &temp, true); - Network accessline 318
[[routes]] event = "git.commit" webhook = "https://discord.com/api/webhooks/1/synthetic" - Network accessline 319
event = "git.commit" webhook = "https://discord.com/api/webhooks/1/synthetic" "# - Network accessline 320
webhook = "https://discord.com/api/webhooks/1/synthetic"
tests/setup_bind_legacy_route_only.rs
- Network accessline 35
(format!("http://{addr}"), rx)
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.
No combined signals at this commit.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.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/yeachan-heo-clawhip/)