docs: add plugin-oriented reusable design / 文件補上插件化與多 agent 重用設計
This commit is contained in:
@@ -28,6 +28,8 @@
|
|||||||
- 將使用者選擇映射到對話狀態
|
- 將使用者選擇映射到對話狀態
|
||||||
- 保留使用者直接打字而不按按鈕的能力
|
- 保留使用者直接打字而不按按鈕的能力
|
||||||
|
|
||||||
|
此外,這個專案從一開始就要考慮**插件化**,讓未來不只一個 assistant 可以使用,而是多個 agent / bot / assistant runtime 都可以共用同一套 reply-end-controls 能力。
|
||||||
|
|
||||||
### 專案目標平台
|
### 專案目標平台
|
||||||
|
|
||||||
這個專案目前 **固定只做 Telegram**。
|
這個專案目前 **固定只做 Telegram**。
|
||||||
@@ -160,6 +162,8 @@ This repository is only for the reply-end control feature, including:
|
|||||||
- mapping user choice into conversation state
|
- mapping user choice into conversation state
|
||||||
- preserving the ability to type freely instead of pressing a button
|
- preserving the ability to type freely instead of pressing a button
|
||||||
|
|
||||||
|
From the beginning, this project should also be designed as a **reusable plugin-style component** so multiple agents or assistant runtimes can adopt the same reply-end control behavior instead of implementing it independently.
|
||||||
|
|
||||||
### Target platform
|
### Target platform
|
||||||
|
|
||||||
This project is **Telegram-only** for now.
|
This project is **Telegram-only** for now.
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ This project is Telegram-only.
|
|||||||
|
|
||||||
No Discord, Slack, or cross-channel abstraction is part of V1.
|
No Discord, Slack, or cross-channel abstraction is part of V1.
|
||||||
|
|
||||||
|
However, the internal architecture should still be **plugin-oriented and reusable** so that multiple agents can adopt the same reply-end-controls behavior later without rewriting the logic.
|
||||||
|
|
||||||
## Product behavior
|
## Product behavior
|
||||||
|
|
||||||
At the end of every assistant reply sent to Telegram, attach two inline buttons:
|
At the end of every assistant reply sent to Telegram, attach two inline buttons:
|
||||||
@@ -125,6 +127,75 @@ Responsibility:
|
|||||||
- inspect `lastChoice`
|
- inspect `lastChoice`
|
||||||
- suppress proactive continuation when `stop` is active
|
- suppress proactive continuation when `stop` is active
|
||||||
|
|
||||||
|
## Plugin-oriented design goal
|
||||||
|
|
||||||
|
Even though V1 is Telegram-only, implementation should be split so the feature can be reused by other agents.
|
||||||
|
|
||||||
|
### Required separation
|
||||||
|
|
||||||
|
#### A. Channel-specific layer
|
||||||
|
|
||||||
|
Telegram-only code:
|
||||||
|
|
||||||
|
- inline keyboard rendering
|
||||||
|
- callback query parsing
|
||||||
|
- Telegram message edit/update behavior
|
||||||
|
|
||||||
|
#### B. Agent-neutral control core
|
||||||
|
|
||||||
|
Reusable logic:
|
||||||
|
|
||||||
|
- reply-end choice state model
|
||||||
|
- state persistence rules
|
||||||
|
- Continue/Stop behavior policy
|
||||||
|
- helpers for reading and updating `lastChoice`
|
||||||
|
|
||||||
|
#### C. Agent integration adapter
|
||||||
|
|
||||||
|
Per-agent integration points:
|
||||||
|
|
||||||
|
- how a given agent/runtime appends controls to replies
|
||||||
|
- how a given agent/runtime consults the stored choice before later turns
|
||||||
|
|
||||||
|
This means V1 should not hard-code every behavior directly into Telegram handlers. Telegram should be the transport/integration layer, while the choice model and policy logic should stay reusable.
|
||||||
|
|
||||||
|
## Multi-agent reuse target
|
||||||
|
|
||||||
|
The design should make it possible for future agents to reuse the same core with minimal custom work:
|
||||||
|
|
||||||
|
- Agent A: Telegram assistant using OpenClaw
|
||||||
|
- Agent B: another Telegram bot runtime
|
||||||
|
- Agent C: future Slack/Discord version, if ever needed later
|
||||||
|
|
||||||
|
The shared core should answer:
|
||||||
|
|
||||||
|
- what choice was made?
|
||||||
|
- when was it made?
|
||||||
|
- is the conversation currently in `continue` or `stop` mode?
|
||||||
|
- should the next assistant turn suppress proactive continuation?
|
||||||
|
|
||||||
|
## Recommended code layout
|
||||||
|
|
||||||
|
Suggested V1 layout:
|
||||||
|
|
||||||
|
```text
|
||||||
|
reply-end-controls/
|
||||||
|
├── README.md
|
||||||
|
├── telegram-v1-design.md
|
||||||
|
├── core/
|
||||||
|
│ ├── state-model.md
|
||||||
|
│ ├── policy.md
|
||||||
|
│ └── callback-contract.md
|
||||||
|
├── telegram/
|
||||||
|
│ ├── reply-decorator.md
|
||||||
|
│ ├── callback-handler.md
|
||||||
|
│ └── message-update.md
|
||||||
|
└── adapters/
|
||||||
|
└── openclaw.md
|
||||||
|
```
|
||||||
|
|
||||||
|
V1 does not need all of these files implemented yet, but the structure should guide the implementation so transport-specific code does not swallow the reusable core.
|
||||||
|
|
||||||
## Acceptance criteria for V1
|
## Acceptance criteria for V1
|
||||||
|
|
||||||
V1 is complete when all of the following are true:
|
V1 is complete when all of the following are true:
|
||||||
|
|||||||
Reference in New Issue
Block a user