[English](../../../releases/v0.1.41.md) | [Tiếng Việt](./v0.1.41.md) | [简体中文](../../../releases/v0.1.41.md) | [한국어](../../../releases/v0.1.41.md)

# clisbot v0.1.41

Phát hành: `2026-04-19`

`v0.1.41` làm cho hành vi hướng tới operator trung thực hơn và dễ suy luận hơn nhiều.

Hai chủ đề lớn nhất của bản này là:

- chính sách DM của Slack và Telegram giờ có contract chặt và an toàn hơn
- cách target loop và message reply từ operator CLI rõ hơn, tường minh hơn, và gần với channel model thật hơn

## Gói gọn trong một câu

`clisbot` giờ tách bạch tốt hơn giữa admission và behavior trong DM, đồng thời giúp operator hiểu rõ hơn cách target Slack thread, Slack DM, và Telegram topic từ CLI.

## Cảm giác khác đi ở đâu

### 1. Hành vi DM an toàn hơn và bớt nhập nhằng

- Admission của DM giờ do `dm:*` sở hữu, nên một wildcard route điều khiển ai được vào Slack hoặc Telegram direct message.
- Exact DM route như `dm:U123` hoặc `dm:1276408333` giữ vai trò override hành vi, thay vì âm thầm mang theo ngữ nghĩa kiểm soát truy cập.
- Pairing approval giờ được scope theo `channel + botId`, nên phê duyệt trên một bot sẽ không làm rò admission sang bot khác.
- Guardrail của route CLI giờ từ chối các auth mutation không hợp lệ trên exact DM route, thay vì để operator tạo config dễ gây hiểu nhầm.

### 2. Cách target loop từ CLI giờ tường minh hơn nhiều

- `clisbot loops` giờ hỗ trợ routing tới Slack channel hoặc group, Slack DM, Slack thread hiện có, và cả thread mới do Slack tạo thông qua một đường địa chỉ hóa dùng chung.
- Việc target loop trong Telegram giờ dùng `--topic-id` thay vì nhồi nhét vào `--thread-id`.
- Slack giờ hỗ trợ `--new-thread` để tạo managed loop thread mới trong cả channel lẫn DM.
- `status` và `cancel` theo scope của loop giờ hoạt động đúng cho Slack DM thread thay vì dồn vào nhầm ngữ cảnh chat.
- Hành vi Telegram forum-group được mô tả trung thực hơn: bỏ `--topic-id` nghĩa là target ngữ cảnh chat cha, và việc gửi sau đó đi theo hành vi Telegram bình thường khi không có `message_thread_id`, tức là deliver vào General topic nếu forum đó có.

### 3. Hướng dẫn trả lời của message-tool chính xác hơn

- Prompt hướng dẫn trả lời của agent giờ hiển thị `--topic-id` cho Telegram thay vì gợi ý một cờ thread mơ hồ.
- `message send` và `message poll` help giờ nói thẳng sự khác nhau giữa Slack và Telegram:
  - `--thread-id` cho Slack thread
  - `--topic-id` cho Telegram topic
- Operator docs giờ giải thích `--target` rõ hơn cho Slack channel, group, DM user id, và DM channel id.

### 4. Hướng dẫn cho operator quanh CLI runner mạnh hơn

- `README.md` giờ có ghi chú vận hành riêng cho Codex, Claude, và Gemini.
- Đã thêm các guide riêng theo từng CLI:
  - `docs/user-guide/codex-cli.md`
  - `docs/user-guide/claude-cli.md`
  - `docs/user-guide/gemini-cli.md`
- DX docs giờ có luồng trust và readiness report dễ lặp lại hơn cho các CLI runner được attach, nhất là quanh hành vi trust workspace của Codex và Claude.

## Điểm nhấn

- Auth wildcard cho DM và override hành vi ở exact DM giờ hoạt động cùng nhau mà không trộn admission với mode state.
- Pairing approval ghi vào đúng DM wildcard route theo scope của bot.
- Loop CLI giờ có một đường target dùng chung cho Slack và Telegram thay vì các special case phân mảnh.
- Slack có thể provision trực tiếp một managed loop thread mới từ operator CLI.
- Telegram dùng `--topic-id` nhất quán cho cả loop lẫn message surfaces.
- Help, user guide, control docs, và agent prompt injection đã được căn chỉnh về cùng một contract target.

## Ghi chú schema và contract

Phiên bản schema giờ là `0.1.41`.

Contract DM từ `0.1.39` sang `0.1.41` là:

- giữ `bots.<provider>.defaults.directMessages."dm:*"` làm DM fallback ở mức provider
- giữ `bots.<provider>.<botId>.directMessages."dm:*"` làm DM fallback ở mức bot
- coi `bots.<provider>.<botId>.directMessages."dm:<userId>"` là override hành vi thuần túy
- không lưu các trường admission DM trên exact DM route:
  - `policy`
  - `allowUsers`
  - `blockUsers`
  - effective DM enabled-state semantics
- pairing approval giờ điền người được duyệt vào `directMessages."dm:*".allowUsers` của bot đang yêu cầu

Template backup lịch sử:

- `config/clisbot.json.v0.1.39.template`

Template hiện tại:

- `config/clisbot.json.template`

## Ghi chú nâng cấp

- Nếu trước đây bạn dùng exact DM route để chứa `policy`, `allowUsers`, hoặc `blockUsers`, hãy chuyển các giá trị đó sang `dm:*`.
- Các override hành vi trên exact DM hiện có vẫn tiếp tục hoạt động cho các trường như `agentId`, `streaming`, `responseMode`, `additionalMessageMode`, `followUp`, `verbose`, và `timezone`.
- Pairing approval không còn ghi vào store allow-from cũ ở mức provider để làm nguồn admission truth nữa; người được duyệt sẽ được áp dụng vào DM wildcard route của chính bot đang yêu cầu.
- Nếu bạn từng tự động hóa Telegram CLI reply hoặc workflow của operator bằng `--thread-id`, hãy chuyển sang `--topic-id`.
- Nếu muốn một Slack loop thread mới hoàn toàn, hãy dùng `--new-thread` thay vì tự nghĩ ra một thread ts giả.

## Kiểm chứng

Đã validate bằng full repo gate:

- `bun run check`

Và được chống lưng bởi các regression test mục tiêu cho:

- chuẩn hóa config và version template
- phân giải DM route
- guardrail của route CLI
- lưu pairing và luồng phê duyệt từ pairing CLI
- loop CLI create, status, cancel theo route và target Slack DM thread
- target Telegram topic trong message CLI
- render reply-command trong prompt của agent

## Tài liệu nên đọc sau bản phát hành này

- [Mục lục release notes](README.md)
- [Hướng dẫn sử dụng](../user-guide/README.md)
- [CLI Commands](../../../../docs/user-guide/cli-commands.md)
- [Codex CLI Guide](../../../../docs/user-guide/codex-cli.md)
- [Claude CLI Guide](../../../../docs/user-guide/claude-cli.md)
- [Gemini CLI Guide](../../../../docs/user-guide/gemini-cli.md)
- [Loops CLI](../../../../docs/features/control/loops-cli.md)
