Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
28baac7
config init
eshork May 2, 2026
9a579f6
feat: rename `deaddrop` command to `dd` with `put`/`get` subcommands
eshork May 3, 2026
bcacc90
Add pull request template
eshork May 3, 2026
73892fd
Refactor CLI network config: replace --firewalled with additive boots…
eshork May 3, 2026
48318f8
Add -v/--verbose global flag for tiered output verbosity
eshork May 3, 2026
97e2346
chat work
eshork May 4, 2026
99fc828
CHAT ip discovery mitigation note
eshork May 4, 2026
c677ec6
save game
eshork May 5, 2026
650e069
nearly there
eshork May 5, 2026
c4754ba
specs ready?
eshork May 5, 2026
95b13ee
it made a thing
eshork May 5, 2026
0bc94e8
debug logger
eshork May 5, 2026
26dd00a
better chat performance
eshork May 6, 2026
f0b0d44
names generator for default screen names
eshork May 6, 2026
cb993d3
show profile name in profiles create output
eshork May 6, 2026
53f1623
feat(chat): flexible recipient resolution for dm and friends
eshork May 6, 2026
aca57b2
feat(chat): add SharedKnownUsers module with atomic I/O and mtime cache
eshork May 6, 2026
0733343
refactor(chat): wire reader + nexus writes to shared known_users
eshork May 6, 2026
86989d2
refactor(chat): migrate known_users reads to shared file
eshork May 6, 2026
e3f9c10
feat(chat): integrate known_users cache into display rendering
eshork May 6, 2026
8307cea
refactor(chat): remove deprecated per-profile known_users functions
eshork May 6, 2026
5f40c48
feat(chat): use vendor name as display fallback instead of bare shortkey
eshork May 6, 2026
9c85d04
refactor(chat): derive own profile name from pubkey instead of random…
eshork May 6, 2026
7e4841d
feat(chat): friends add auto-populates alias from wire name or vendor…
eshork May 6, 2026
017795b
refactor(chat): update identity notice format for vendor name era
eshork May 6, 2026
5b2f237
refactor(cli): split deaddrop module into v1 + shared infrastructure
eshork May 7, 2026
df57120
feat(cli): add --v1 flag and version dispatch for dead drop
eshork May 7, 2026
e6c4671
feat(cli): add dead drop v2 core encoding, key derivation, and unit t…
eshork May 7, 2026
f2cfbb3
feat(cli): implement dead drop v2 put/get with parallel data fetch
eshork May 7, 2026
ee963dc
fix(cli): print v2 pickup key before data publish, add index cycle de…
eshork May 7, 2026
294347a
fix(cli): remove accidentally included chat code from deaddrop/v1.rs
eshork May 8, 2026
87af95a
refactor(deaddrop): add unified publish/fetch driver
eshork May 8, 2026
381390b
refactor(deaddrop): pipeline initial v2 put
eshork May 8, 2026
2d0b35a
refactor(deaddrop): pipeline v2 refresh cycle
eshork May 8, 2026
f5eb90f
refactor(deaddrop): pipeline need-list re-publish
eshork May 8, 2026
eea491f
refactor(deaddrop): pipeline v2 get with shared sem
eshork May 8, 2026
505aa3e
chore(deaddrop): remove stale #[allow(dead_code)] from publish_tasks …
eshork May 8, 2026
63e7913
fix(deaddrop): handle ctrl-c during dd put initial publish
eshork May 8, 2026
8543656
fix(deaddrop): stream put progress in real-time
eshork May 8, 2026
e2cb4b9
fix(deaddrop): interleave index/data dispatch in publish_tasks
eshork May 9, 2026
f5ed563
feat(deaddrop): stream get progress in real-time
eshork May 9, 2026
0352d40
docs(deaddrop): align v2 spec with shipped implementation
eshork May 9, 2026
fc12435
docs(peeroxide-cli): update AGENTS.md for deaddrop split and v2 const…
eshork May 9, 2026
3c883c4
feat(dd-v2): add need-list polling + re-announce interval constants
eshork May 9, 2026
e07dc30
refactor(dd-v2): extract compute_need_entries pure helper
eshork May 9, 2026
3e1eb97
test(dd-v2): unit tests for compute_need_entries
eshork May 9, 2026
3ad3507
fix(dd-v2): periodically re-announce need-topic on GET side
eshork May 9, 2026
1b2247c
fix(dd-v2): refresh need-list when missing set changes
eshork May 9, 2026
85bae16
fix(dd-v2): decouple PUT need-list watcher from refresh loop
eshork May 9, 2026
a56ef74
fix(dd-v2): add need-list lifecycle logs
eshork May 9, 2026
2e36680
feat(dd-v2): log PUT need-list lifecycle and surface errors
eshork May 9, 2026
2c968d0
feat(cli): add --no-progress and --json flags to dd, with TTY-aware P…
eshork May 9, 2026
60517d1
feat(cli/dd): introduce ProgressState shared atomic counters and Phas…
eshork May 9, 2026
6fe330a
feat(cli/dd): pure progress formatter (state → rendered string)
eshork May 9, 2026
28ac023
feat(cli/dd): windowed rate/ETA calculator (5s ring buffer, panic-safe)
eshork May 9, 2026
eb61463
feat(cli/dd): JSON event types aligned with docs/src/dd/operations.md…
eshork May 9, 2026
5b50c26
feat(cli/dd): indicatif-driven BarRenderer with MultiProgress for v2 GET
eshork May 9, 2026
dba9050
feat(cli/dd): PeriodicLogRenderer — 2s stderr tick with Notify cancel…
eshork May 9, 2026
f5ecc8d
feat(cli/dd): JsonEmitter — on-demand stdout JSON-Lines event emitter
eshork May 9, 2026
2345b13
feat(cli/dd): ProgressReporter enum facade — dispatches to Bar/Log/Js…
eshork May 9, 2026
58ef0ac
feat(cli/dd): wire ProgressReporter into dd PUT lifecycle (v1+v2)
eshork May 9, 2026
9b0fcb8
feat(cli/dd): wire ProgressReporter into v1 GET sequential fetch
eshork May 9, 2026
f7a1156
feat(cli/dd): wire ProgressReporter into v2 GET parallel fetch
eshork May 9, 2026
38ebb71
fix(cli/dd): use basename (not full path) in PUT progress display
eshork May 9, 2026
e4e3b21
docs(cli): CHANGELOG entry for dd progress UX change
eshork May 9, 2026
5834697
docs(dd): update operations.md with progress UI and full JSON schema
eshork May 9, 2026
311938e
refactor(cli/dd): remove legacy initial-publish/fetch eprintln output…
eshork May 9, 2026
a1a9df3
docs(dd): draft v3 spec — tree-indexed storage protocol
eshork May 10, 2026
4398a25
docs(dd): refine v3 spec — drop K byte, lock canonical tree shape
eshork May 10, 2026
d3445bb
build(cli): add memmap2 dependency for v3 deaddrop I/O
eshork May 10, 2026
b737296
feat(cli/dd): rewrite v2 as tree-indexed protocol per DEADDROP_V3.md
eshork May 10, 2026
3e67957
docs(dd): land v3 spec as the v2 spec; remove draft files
eshork May 10, 2026
8a3b6ce
perf(cli/dd): interleave non-root publishes; bump initial concurrency
eshork May 11, 2026
96d96de
fix(cli/dd): progress bar renders byte counts, not chunk counts
eshork May 11, 2026
6ebda0d
feat(dht,cli/dd): add DHT wire-byte counters and progress wire-stats …
eshork May 11, 2026
7411344
different AIMD controller tune
eshork May 11, 2026
daf4408
better progress bar behavior
eshork May 11, 2026
5214dcc
perf(cli/dd): dedup'd work queue + sliding-window get timeout
eshork May 11, 2026
2b7430d
refactor(cli/dd): force data-chunk salt to 0x00
eshork May 11, 2026
a66f0a0
feat(cli/dd): stall watchdog kicks AIMD off the floor
eshork May 11, 2026
0fe6222
fix(cli/dd): 30s wall-clock timeout per DHT put
eshork May 11, 2026
d2c678d
fix(cli/dd): need-list advertises only attempted-and-failed chunks
eshork May 11, 2026
05c96f3
fix(cli/dd): assured ctrl-c via shared cancel + double-signal escape
eshork May 12, 2026
b431a5b
chore(cli/dd): satisfy clippy 1.95 (is_none_or, div_ceil, useless con…
eshork May 12, 2026
e32d089
fix(cli/chat): reliable in-order delivery on bursts
eshork May 12, 2026
192698b
feat(cli/chat): exit on stdin EOF by default; --stay-after-eof preser…
eshork May 12, 2026
53acc23
fix(cli/chat): per-feed chain anchoring (independent chains per feed_…
eshork May 12, 2026
a2a0dae
feat(cli/chat): interactive TTY UI with status bar and multi-line input
eshork May 13, 2026
bf43ff2
fix(cli/chat): auto line-mode when stdin is not a TTY
eshork May 13, 2026
7f9f19f
feat(cli/chat): preserve terminal scrollback when entering TTY mode
eshork May 13, 2026
8fd7df8
fix(cli/chat): preserve visible chat history across resize / Ctrl-L
eshork May 13, 2026
5e561d5
feat(cli/chat): TUI Ctrl-C semantics — clear buffer, double-press to …
eshork May 13, 2026
72afb81
fix(cli/chat): keep Ctrl-C responsive while publisher channel is back…
eshork May 13, 2026
8ccfecf
feat(cli/chat): inbox monitor + INBOX status bar segment + /inbox sla…
eshork May 13, 2026
e4183ea
refactor(cli/chat): extract NameResolver for pubkey -> display-name r…
eshork May 13, 2026
99231fc
refactor(cli/chat): extract chat::session; chat dm becomes a TUI cons…
eshork May 13, 2026
8d58983
fix(cli/chat): rewrite let-chains for Rust 1.85 MSRV
eshork May 13, 2026
d57d879
docs: comprehensive PR-merge prep — chat subsystem, init, dd v1+v2
eshork May 13, 2026
cbafdd1
docs: refresh README + AGENTS.md files for shipped chat/init/dd-v2 state
eshork May 13, 2026
d4dff44
fix(cli/chat/inbox): clamp poll-interval to >=1; honest doc
eshork May 13, 2026
4ea2626
fix: honest error/banner text; document friends-refresh default-only
eshork May 13, 2026
24f9dd9
fix(cli/chat/nexus): apply both --set-name and --set-bio in one run
eshork May 13, 2026
0b03ee8
docs(chat/user-guide): correct chat nexus summary paragraph
eshork May 13, 2026
695f5d9
chore: retarget in-tree doc pointers to docs/src/; clamp note for inb…
eshork May 13, 2026
ef84ed3
docs(chat): document --batch-size clamp to >=1
eshork May 13, 2026
e8a18cf
docs(chat): correct nexus daemon refresh scope and message display pr…
eshork May 13, 2026
d6676a0
chore: cleanup stale v3 comments + accurate man-page count + working-…
eshork May 13, 2026
8648594
docs: correct chat overview profile/Nexus claims; clarify init globals
eshork May 13, 2026
fe8e1d0
docs: clarify known_users scope; banner all working-doc files
eshork May 13, 2026
2ef7926
docs: correct DM nudge mechanism, v2 done sentinel, need-list semantics
eshork May 13, 2026
8517f3f
docs: correct invite-record write path and v2 need-list timing
eshork May 13, 2026
a63b466
docs: Merkle typo; document dd global flags; drop v3 breadcrumb from …
eshork May 13, 2026
40a095f
docs(dd/operations): add inherited top-level globals paragraph
eshork May 13, 2026
7901094
docs(init): correct bootstrap-resolution to match config.rs override …
eshork May 13, 2026
a4f93b2
docs: align bootstrap-resolution wording across init/overview, AGENTS…
eshork May 13, 2026
2451c94
docs: align cp/concepts bootstrap+firewall claims with shipped behavior
eshork May 13, 2026
ae2ad93
docs+init: honest --public help text, generated config comments; docu…
eshork May 13, 2026
b482237
docs(announce/architecture): drop stale firewall=open-if-public claim
eshork May 13, 2026
0ab2908
docs: fold DHT_REF.md into docs/src/concepts/dht-primitives.md
eshork May 13, 2026
1979ec2
docs(concepts/dht-primitives): document the announce-as-rendezvous pa…
eshork May 13, 2026
80021c4
chore: remove working-design docs; .gitignore + dht-primitives rendez…
eshork May 13, 2026
5bd8810
feat(manpage): consolidate chat subcommands into a single page
eshork May 13, 2026
8f96e23
docs(chat/user-guide): document profile name/bio files + size limit
eshork May 13, 2026
0a6a16e
docs(chat): add Stealth Mode section with threat-model breakdown
eshork May 13, 2026
bbff02e
feat: ASCII banner with claim-audited taglines, embedded in three places
eshork May 13, 2026
159e9dd
docs(changelog): record fix_init branch changes
eshork May 13, 2026
e2d1fcf
docs: surface peeroxide-cli as a published crate; add brew + cargo in…
eshork May 14, 2026
6254950
docs(cli/changelog): tighten 0.2.0 to surface library API consumption…
eshork May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
## Summary

<!-- 1-3 bullet points: what changed and why -->
-

<!-- Link related issues: Closes #N, Resolves #N, Fixes #N -->

## Motivation

<!-- Why is this change needed? What problem does it solve? Delete for trivial fixes. -->

## Changes

<!-- For small PRs: prose description is fine.
For larger PRs: use a table like the one below. -->

| Crate | Change |
|-------|--------|
| | |

## Public API Changes

<!-- DELETE this section if no public API surface is affected.
If API IS affected, you MUST fill this out. -->

<!-- All changes below are: [ ] Additive only (semver-compatible) / [ ] Breaking (requires maintainer approval) -->

| Crate | Symbol | Change |
|-------|--------|--------|
| | | |

## Testing

<!-- How was this verified? Which test suites pass? -->

- [ ] `cargo test --workspace`
- [ ] `cargo test -p peeroxide-cli --test live_commands -- --ignored`
- [ ] `cargo clippy --workspace --all-targets -- -D warnings`

## Notes

<!-- Anything reviewers should pay attention to. Migration steps, known limitations, follow-up work. Delete if empty. -->
9 changes: 5 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
/target/
tests/node/node_modules/
.claude
.sisyphus/
.vogon_poetry/
docs/book/

# ignore local MCP config file
.mcp.json

# Task artifacts — planning docs, Ralph Loop prompts, progress trackers, PR checklists.
# These should never land in git. If you need to commit one, do it explicitly and it
# will still be surfaced by the pre-PR artifact scan described in AGENTS.md.
DOCS_PLAN.md
RALPH_PROMPT.md
REFACTOR_PLAN.md
PR-TODOS.md
*_PLAN.md
*_PROMPT.md
*_TODOS.md
*_TODO.md
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ This is the root of the peeroxide workspace — a Rust implementation of the Hyp
| `peeroxide` | High-level swarm management and topic-based peer discovery | crates.io |
| `peeroxide-dht` | HyperDHT: Kademlia routing, Noise handshakes, hole-punching, relay | crates.io |
| `libudx` | UDX reliable UDP transport with BBR congestion control | crates.io |
| `peeroxide-cli` | CLI toolkit: lookup, announce, ping, cp, deaddrop | binary only |
| `peeroxide-cli` | CLI toolkit (`peeroxide` binary): lookup, announce, ping, cp, dd, chat, init | crates.io + homebrew tap (`rightbracket/peeroxide`) |

The three library crates are published to crates.io and have external users. `peeroxide-cli` is a consumer of those libraries, not a library itself.
All four crates are published to crates.io; the `peeroxide` binary is additionally distributed as a prebuilt via the [`rightbracket/peeroxide` homebrew tap](https://github.com/Rightbracket/homebrew-peeroxide).

## Key Files

Expand Down Expand Up @@ -77,7 +77,7 @@ If you find yourself needing to change a library signature to satisfy a CLI feat
"All tests pass" means all three suites:

1. `cargo test --workspace` — unit tests, integration tests, and the Node.js local interop test (`hyperswarm_cross_language_connect`)
2. `cargo test -p peeroxide-cli --test live_commands -- --ignored` — live public HyperDHT network tests (lookup, announce, cp, deaddrop)
2. `cargo test -p peeroxide-cli --test live_commands -- --ignored` — live public HyperDHT network tests (lookup, announce, cp, dd)

Do not mark work complete until both suites are green.

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This project is a Rust implementation of the Hyperswarm stack, focusing on wire
| `libudx` | Reliable UDP transport with BBR congestion control | crates.io |
| `peeroxide-dht` | Kademlia DHT, Noise handshakes, hole-punching, relay | crates.io |
| `peeroxide` | High-level swarm and topic-based discovery | crates.io |
| `peeroxide-cli` | CLI toolkit: lookup, announce, ping, cp, deaddrop | crates.io (binary) |
| `peeroxide-cli` | CLI toolkit: lookup, announce, ping, cp, dd | crates.io (binary) |

## Development Requirements

Expand Down
Loading
Loading