Repository navigation
Description
Confirmed feature scope — 2026-09-30
Feature Project: IM Identities & Messaging; provider parent: #48. Cross-platform binding is allowed; initially one account per platform per PersonaBot and one platform Bot account bound to one local PersonaBot. The Human must be able to select/verify that binding in the first real vertical path. Historical #30 is retired; current local Messaging/Inbox baseline must be reused.
Parent
What to build
交付 outbound-first dsh-im Provider Adapter tracer。BotHarness 复用 same-Host public dshIm Service 和可选 dshImClient setup surface,让一个 PersonaBot 向 Human 已在 dsh-im 中测试并保存的目标发送一条主动纯文本消息。
本票只证明 Provider Registration、Bridge Connection/Binding、Human Service Grant、Outbox 和 lifecycle seam。真实 inbound consumer、Bot Inbox wake 与 Feishu/Lark DM reply 由 #12 拥有。
Production-shaped path
Human configures/tests dsh-im bot + target
→ BotHarness discovers opaque botId/targetId
→ Human creates PersonaBot Binding + proactive Service Grant
→ Messaging writes Outbox Intent
→ adapter calls same-Host dshIm.send()
→ provider-accepted / failure / unknown-outcome fact
→ UI shows honest outcome and rebind state
Stable boundaries
- Adapter is a Consumer of dsh-im services and a Provider of Messaging: external ingress, Provider contracts and Outbox #46's application-defined Messaging Provider Registration.
- dsh-im remains optional. Missing/incompatible service removes the Registration and affected Binding becomes unavailable; other providers and BotHarness core continue.
- BotHarness stores opaque bot/target references plus verified account fingerprint and health/capability snapshots; never secrets or private dsh-im JSON.
- Provider capability is not authorization. Binding and Service Grant are validated at action acceptance and immediately before execution.
- Every send persists Outbox Intent before the external call.
sent: truemeans provider accepted, not delivered/read. - timeout or ambiguous failure becomes
unknown-outcome; no blind automatic retry. - deleted/recreated bot or target becomes degraded/rebind-required; no display-name/App-ID/recent-item fallback.
- Fiber disposal revokes Registration/operations and cleans listeners.
- Client may link/embed dsh-im management UI for provider setup, but PersonaBot Binding/Grant remains BotHarness authority.
- No unauthenticated dsh-im HTTP delivery endpoint and no import of dsh-im private
src/**.
Acceptance criteria
- Pin and compatibility-check the dsh-im package/upstream revision against the project DSH profile.
- Optional adapter Plugin/Fiber registers and disposes cleanly; dsh-im absence fails closed.
- Human can select a tested opaque bot/target and create a PersonaBot Binding without copying credentials.
- proactive send validates archive/recovery state, Binding, capability and Service Grant twice.
- Outbox Intent precedes the call; provider-accepted, failure, cancellation and unknown-outcome are distinct.
- restart preserves durable Outbox/Binding facts without treating transport memory as authority.
- remove/recreate/rebind paths are explicit and auditable.
- fake dsh-im contract tests cover lifecycle, unavailable service, unknown bot/target, timeout and cleanup.
- Human can send one proactive text in a real Profile and see an honest provider-accepted outcome.
Blocked by
- Messaging: external ingress, Provider contracts and Outbox #46 Messaging Provider Registry, Binding/Grant and Outbox authority.
Out of scope
- inbound subscription or exclusive external-consumer mode。
- provider DM → Source Event → Bot Inbox → Orchestrator。
- trusted inbound Reply Route acceptance。
- Slack/Discord second-provider proof。
- claims of final delivery/read or exactly-once。
References
- [Retired] Post-M4: Messaging / Bot Inbox / Orchestrator / Assignments #30、Messaging: external ingress, Provider contracts and Outbox #46、IM identities and messaging: provider coordination #48
- IM tracer: work-group @Bot → PersonaBot Inbox → same-topic reply #12 real inbound Feishu/Lark tracer
- docs/research/2026-09-21-dsh-im-integration-strategy.md
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
- StatusShow more project fieldsDone
Activity
[-]Spec: dsh-im-backed PersonaBot messaging provider(outbound first, inbound consumer gate)[/-][+]Tracer A: dsh-im outbound PersonaBot messaging adapter[/+][-]Tracer A: dsh-im outbound PersonaBot messaging adapter[/-][+]IM tracer: dsh-im outbound adapter and explicit Bot binding[/+]15 remaining items
DoodleBears commentedon Sep 30, 2026
Agent work outcome
codex/local/01a0f14c-5338-7020-853b-0fe54b87aa95(not a DSH Session)a3d88bbab25d2479ae435c9a8c1441c747cea20eThe Human bound the real Lark account/destination in Profile, sent a text and confirmed receipt, then authorized merge. Exact final head
db2ce29cddb4406c0d8240373aa71526a992807dpassed GitHub lint/format/typecheck/test/build/docs and CodeRabbit checks; local integration was 1462 pass / 1 skip. Canonical grant, intent and one settled accepted attempt were verified without another external send. Main integration retains the concurrent Human Inbox reply, usage and Host file actions.Released legacy dsh-im remains disabled. The compatible authenticated-account/checked-send contract is proposed in xmanrui/dsh-im#293 and has not been accepted or released. This does not complete #117's compatible pinned artifact or #46/#78's inbound scope.
The Human clarified work-group collaboration as the priority. #12 now verifies work-group @bot → the bound PersonaBot Inbox/Orchestrator → trusted same-group/topic reply; DM is a compatibility follow-up. See #12 (comment).
DoodleBears commentedon Sep 30, 2026
Agent work claim — compatible provider adoption
codex/local/01a0f14c-5338-7020-853b-0fe54b87aa95(not a DSH Session)codex/117-compatible-provider#587 delivered the Human-accepted outbound behavior. #607 now merged at
bdecd0da167e450e1ac65da981f22dcce0bd7204, qualifying the pinned public consumer/reply proposal. #117 still owns compatible-artifact adoption, which is a native blocker of #12. Complete this narrow repeatable artifact path before expanding the integrated Inbox tracer. Upstream #293 remains unaccepted/unreleased; a temporary qualified fork is labelled explicitly and its exit condition must stay visible.docs(im): align send evidence with baseline theme
DoodleBears commentedon Oct 1, 2026
Agent work outcome — Human QA gate
codex/local/01a0f14c-5338-7020-853b-0fe54b87aa95(not a DSH Session)a9e5d56c5951c304031b0ad833aee49b6448c678The optional isolated launcher installs the qualified public-contract fork at full Git SHA, checks runtime identity before boot, and leaves upstream-release/production gates explicit. A fresh real Profile exercised account/group grant selection and actual UI sends; exactly two accepted BotHarness attempts and the same Binding/Grant/Intents survived restart without replay. The PR includes native before/after screenshots and public-safe provenance. Platform accepted is verified; visible group receipt, delivery and read are unverified because read surfaces lacked authorization or a valid client login. No Human credentials entered BotHarness and no permission was expanded.
Local integration: lint/format/typecheck/build/docs pass, 1569 tests pass / 1 skip with four workers. The earlier unchanged source-policy timeout and passing isolated rerun are retained as separate evidence. Exact-head GitHub CI status is visible on the PR.
Goal is paused as instructed after this issue PR. Await Human QA before merge or #12 implementation. #12 remains the integrated work-group @bot → PersonaBot Inbox/Orchestrator → trusted reply tracer; #612 / #613 / #614 are the approved later slices in Project 10 / v1.1. Upstream dsh-im PR #293 remains pending and no provider package or Release was published.
DoodleBears commentedon Oct 1, 2026
Agent work claim — Human-approved merge
codex/local/01a0f14c-5338-7020-853b-0fe54b87aa95(not a DSH Session)codex/117-compatible-providerThe Human explicitly authorized merging PR #624. Its final head is
a9e5d56c5951c304031b0ad833aee49b6448c678; GitHub reports clean/mergeable with successful integrated CI and CodeRabbit. Existing evidence distinguishes provider acceptance from unverified external receipt/read. Upstream publication and production enablement remain separate gates.DoodleBears commentedon Oct 1, 2026
Agent work outcome — Human-approved merge completed
codex/local/01a0f14c-5338-7020-853b-0fe54b87aa95(not a DSH Session)a9e5d56c5951c304031b0ad833aee49b6448c6787d17563a475b23c21658e2334449ac5f45fa7291The Human explicitly authorized merge after QA. Exact-head integrated GitHub CI and CodeRabbit passed; the PR was clean/mergeable and was squash-merged with a head guard. #117 is now closed. Existing native UI/send/restart screenshots and provenance remain in the PR; the verified send outcome remains provider acceptance, without upgrading unverified receipt/read evidence. The unreleased upstream proposal and production gate are unchanged.
The qualified optional artifact prerequisite is complete. #12 remains the next integrated work-group mention → PersonaBot Inbox/Orchestrator → same-source reply tracer. The Human has approved including #629's #634–#639 slices in a new IM delivery goal, alongside #612/#613/#614, with real E2E evidence and a Human QA pause after each issue PR. No new #12 implementation claim is made by this merge outcome.