




















@@ -75,7 +75,7 @@ non-durable policy.
7575- Structured OpenClaw-origin metadata for operational/system output so visible
7676 gateway failures do not re-enter shared bot-enabled rooms as fresh prompts.
777778-## Non Goals
78+## Non goals
79798080- Do not remove `runtime.channel.turn.*` in the first phase.
8181- Do not force every channel into the same native transport behavior.
@@ -84,7 +84,7 @@ non-durable policy.
8484- Do not publish all internal migration helpers as stable SDK API.
8585- Do not make retries replay completed non-idempotent platform operations.
868687-## Reference Model
87+## Reference model
88888989Vercel Chat has a good public mental model:
9090@@ -114,7 +114,7 @@ What OpenClaw needs beyond that model:
114114`thread.post()` style promises are not enough for OpenClaw. They hide the
115115transaction boundary that decides whether a send is recoverable.
116116117-## Core Model
117+## Core model
118118119119The new domain should live under an internal core namespace such as
120120`src/channels/message/*`.
@@ -137,7 +137,7 @@ core.messages.state(...)
137137`state` owns durable intent storage, receipts, idempotency, recovery, locks, and
138138dedupe.
139139140-## Message Terms
140+## Message terms
141141142142### Message
143143@@ -284,7 +284,7 @@ A receipt can describe one platform message or a multi-part delivery. Chunked
284284text, media plus text, voice plus text, and card fallbacks must preserve all
285285platform ids while still exposing a primary id for threading and later edits.
286286287-## Receive Context
287+## Receive context
288288289289Receiving should not be a bare helper call. The core needs a context that knows
290290dedupe, routing, session recording, and platform ack policy.
@@ -382,7 +382,7 @@ source if we need platform-level redelivery beyond OpenClaw's restart
382382watermark. Webhook platforms may need immediate HTTP ack, but they still need
383383inbound dedupe and durable outbound send intents because webhooks can redeliver.
384384385-## Send Context
385+## Send context
386386387387Sending is also context based:
388388@@ -504,7 +504,7 @@ fallback with no durable record for the remaining payloads. Recovery must know
504504which units already have receipts and either replay only missing units or mark
505505the batch `unknown_after_send` until the adapter reconciles it.
506506507-## Live Context
507+## Live context
508508509509Preview, edit, progress, and stream behavior should be one opt-in lifecycle.
510510@@ -552,7 +552,7 @@ This should cover current behavior:
552552- Teams native progress stream.
553553- QQ Bot stream or accumulated fallback.
554554555-## Adapter Surface
555+## Adapter surface
556556557557The public SDK target should be one subpath:
558558@@ -651,7 +651,7 @@ type MessageCapabilities = {
651651};
652652```
653653654-## Public SDK Reduction
654+## Public SDK reduction
655655656656The new public surface should absorb or deprecate these conceptual areas:
657657@@ -672,7 +672,7 @@ Bundled plugins may keep internal helper imports through reserved runtime
672672subpaths while migrating. Public docs should steer plugin authors to
673673`plugin-sdk/channel-message` once it exists.
674674675-## Relationship To Channel Turn
675+## Relationship to channel turn
676676677677`runtime.channel.turn.*` should stay during migration.
678678@@ -699,7 +699,7 @@ After all bundled plugins and known third-party compatibility paths are bridged,
699699published SDK migration path and contract tests proving old plugins still work
700700or fail with a clear version error.
701701702-## Compatibility Guardrails
702+## Compatibility guardrails
703703704704During migration, generic durable delivery is opt-in for any channel whose
705705existing delivery callback has side effects beyond "send this payload".
@@ -775,7 +775,7 @@ Concrete migration hazards to preserve:
775775 Channels must not implement this with visible-text prefix filters except as a
776776 short emergency stopgap; the durable contract is structured origin metadata.
777777778-## Internal Storage
778+## Internal storage
779779780780The durable queue should store message send intents, not reply payloads.
781781@@ -822,7 +822,7 @@ load pending or sending intents
822822The queue should keep enough identity to replay through the same account,
823823thread, target, formatting policy, and media rules after restart.
824824825-## Failure Classes
825+## Failure classes
826826827827Channel adapters classify transport failures into closed categories:
828828@@ -852,7 +852,7 @@ Core policy:
852852 commit becomes `unknown_after_send` unless the adapter can prove the platform
853853 operation did not happen.
854854855-## Channel Mapping
855+## Channel mapping
856856857857| Channel | Target migration |
858858| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -879,7 +879,7 @@ Core policy:
879879| Zalo | Simple receive plus send adapter. |
880880| Zalo Personal | Simple receive plus send adapter. |
881881882-## Migration Plan
882+## Migration plan
883883884884### Phase 1: Internal Message Domain
885885@@ -984,7 +984,7 @@ messages".
984984- Remove or hide old internal helpers only after no bundled plugin needs them
985985 and third-party contracts have a stable replacement.
986986987-## Test Plan
987+## Test plan
988988989989Unit tests:
990990@@ -1067,7 +1067,7 @@ Validation:
10671067- Live or qa-channel smoke for at least one edit-capable channel and one
10681068 simple send-only channel before removing compatibility wrappers.
106910691070-## Open Questions
1070+## Open questions
1071107110721072- Whether Telegram should eventually replace the grammY runner source with a
10731073 fully durable polling source that can control platform-level redelivery, not
@@ -1086,7 +1086,7 @@ Validation:
10861086- Which channels have native origin metadata, which need persisted outbound
10871087 registries, and which cannot offer reliable cross-bot echo suppression.
108810881089-## Acceptance Criteria
1089+## Acceptance criteria
1090109010911091- Every bundled message channel sends final visible output through
10921092`messages.send`.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。