Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
51 changes: 11 additions & 40 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ directories = "6"
futures = "0.3"
futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] }
hex = "0.4"
hmac = "0.13"
hmac = "0.12"
parking_lot = "0.12"
prost = "0.14"
rand = "0.10"
Expand Down
38 changes: 24 additions & 14 deletions docs/porting.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,33 @@ OpenHuman implements `ChannelBackend` in
REST client, session JWT, config persistence, credential storage, health, and
event-bus plumbing.

## Not Yet Ported
## Provider Wire Adapters (ported behind the host boundary)

Provider wire implementations such as Telegram, Discord, Web, Email, Slack,
Yuanbao, and others still depend directly on OpenHuman application services.
Move them only after their app dependencies are reduced to transport/config
traits that can live in this crate without importing OpenHuman internals.
Update 2026-07-17: the provider wire implementations have since been ported.
`src/providers/` now owns dingtalk, discord, email, imessage, irc, lark, linq,
mattermost, qq, signal, slack, telegram, whatsapp, whatsapp_web, and yuanbao.
The app-side dependencies were reduced to a host-owned service boundary
(`src/host/`: HTTP proxy client, approval, voice/STT, pairing, and
conversation-memory contracts) that providers call instead of importing
OpenHuman internals. In OpenHuman the corresponding `channels/providers/*.rs`
files are now one-line re-exports of the crate providers; Telegram keeps only
its host-coupled glue (`remote_control`, `bus`, `approval_surface`).

Per the 2026-07-04 audit, provider portability falls into a ladder:
The original 2026-07-04 portability ladder, now resolved:

- Self-contained today (no cross-module OpenHuman imports): email, irc,
yuanbao, cli, imessage, mattermost, qq, dingtalk, presentation.
- Need only a configured-HTTP-client trait (they import
`build_runtime_proxy_client`): discord, slack, whatsapp, lark, signal.
- Need approval, voice/STT, pairing, and conversation-memory traits first:
telegram.
- Not porting targets (they are the app-side consumers of this crate): the
`runtime/` dispatch engine and the `web` provider.
- Self-contained (no cross-module OpenHuman imports): email, irc, yuanbao,
imessage, mattermost, qq, dingtalk — ported.
- Needed only a configured-HTTP-client trait: discord, slack, whatsapp, lark,
signal — ported via the host proxy-client contract.
- Needed approval, voice/STT, pairing, and conversation-memory traits:
telegram — ported via the host service boundary.
- Not porting targets (app-side consumers of this crate): the `runtime/`
dispatch engine and the `web` provider — unchanged, they stay in OpenHuman.

Remaining provider debt: WhatsApp Web still uses `wacore`'s in-memory session
backend and re-links after restart, pending a rusqlite-backed durable store
(see the remaining-work plan). The finishing slices for the migration are
tracked in [spec/tinychannels-migration-remaining-plan.md](spec/tinychannels-migration-remaining-plan.md).
Comment on lines +51 to +75

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the stale provider-migration status.

This section now states that provider wire adapters have been ported, but the file’s later current-status paragraph still says they are pending. Update that status text so the porting document has one authoritative migration state; only non-relay session-key adoption should remain pending.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/porting.md` around lines 51 - 75, Update the later current-status
paragraph in docs/porting.md to remove stale claims that provider wire adapters
remain pending, aligning it with the resolved migration described near the
provider portability ladder. Keep only non-relay session-key adoption as
pending, while preserving the existing WhatsApp Web durable-session backend debt
if it is still accurate.


## Current Status and Next Steps

Expand Down
11 changes: 11 additions & 0 deletions docs/spec/tinychannels-execution-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@ The companion research spec is
The OpenHuman-side integration plan lives in
`openhuman-4/docs/plans/tinychannels-integration.md`.

> **Update 2026-07-17.** This plan's current-state snapshot below is from
> 2026-07-04 and now understates progress: Phase 6 provider wire adapters have
> largely landed (16 providers under `src/providers/`) behind a new host
> service boundary (`src/host/`), and OpenHuman consumes them as re-export
> shims. The verified current state and the remaining finishing work (repair
> the hmac build break, non-relay `scope_id` session keys, durable WhatsApp Web
> storage, remaining test gates, OpenHuman duplicate-test deletion) are tracked
> in [tinychannels-migration-remaining-plan.md](tinychannels-migration-remaining-plan.md).
> Treat that document as the source of truth for what is left; the phase
> definitions below remain accurate as the design of record.

## Current State (updated 2026-07-04; Phases 0-5 local slices landed)

The crate compiles with zero warnings (`cargo build --all-targets`, clippy
Expand Down
Loading