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

# clisbot v0.1.43

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

Đây là ghi chú công khai đã gộp cho phần việc vốn ban đầu bị tách giữa `v0.1.42` và `v0.1.43`.

`v0.1.43` làm cho runtime recovery bền hơn, làm rõ routed follow-up control, làm cho kiểm tra submit prompt của tmux trung thực hơn, khôi phục queued-start notification trong các luồng message-tool không streaming, và ngăn reply trong Slack thread kế thừa attachment cũ từ root message.

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

`clisbot` giờ recover từ rắc rối runtime và tmux startup một cách trung thực hơn, cho routed conversation phần điều khiển follow-up rõ hơn, và siết chặt việc giao prompt cùng attachment để session trên Slack và Telegram hành xử trung thực hơn dưới tải thật.

## Điểm nhấn

### 1. Runtime recovery mượt hơn và ít bị kẹt vĩnh viễn hơn

- Thang monitor mặc định của runtime giờ đi qua các mức 1 phút, 3 phút, 5 phút, 10 phút, 15 phút, và cuối cùng là 30 phút.
- Khi đạt mức cuối, runtime tiếp tục retry ở độ trễ đó thay vì bỏ cuộc vĩnh viễn.
- Xung đột Telegram polling giờ recover ngay trong runtime thay vì buộc phải hard stop khi có tiến trình khác tạm dùng cùng bot token.
- Cảnh báo trễ cho owner có thể làm lộ ra các lỗi kéo dài giữa runtime và channel ngay cả khi recovery vẫn đang tiếp tục.

### 2. Routed follow-up control và hướng dẫn routed command rõ hơn

- `/mention` giờ là shorthand nhanh cho `/followup mention-only`
- `/mention channel` và `/mention all` lưu mặc định mention-only ở đúng scope, đồng thời áp dụng luôn cho cuộc hội thoại hiện tại
- `/transcript` giờ mặc định trả về ảnh chụp session gần đây ở dạng gọn, còn `/transcript full` vẫn giữ được pane view dài hơn khi cần
- Hướng dẫn cho routed Slack và Telegram giờ lộ rõ hơn các điều khiển follow-up và transcript quan trọng

### 3. Việc giao prompt qua tmux trung thực hơn ở ranh giới paste-vs-submit

- Xác nhận submit giờ lấy baseline dựa trên snapshot của pane sau khi prompt đã được paste và nhìn thấy rõ.
- Điều này đóng đường false positive nơi một prompt đã được paste nhìn thấy được lại bị nhầm là Enter submit thành công.
- Việc capture session-id lúc startup vẫn giữ cooldown nếu delivery prompt thất bại một cách trung thực, giúp đường prompt đầu tiên sau `/status` bớt mong manh hơn.

### 4. Message được queue giờ sẽ báo khi nó thật sự bắt đầu chạy ở nhiều routed chat flow hơn

- Thông báo queued-start giờ có thể hiện ra ở update `running` đầu tiên ngay cả khi route dùng `message-tool` với `streaming: off`
- Điều này đưa Slack và Telegram trở lại đúng với lifecycle queue mong muốn: queued trước, rồi “bây giờ đang chạy”, rồi mới chốt kết quả
- Thay đổi này được giữ hẹp, không mở lại live-preview rộng hơn cho các flow không streaming

### 5. Reply trong Slack thread không còn kế thừa attachment từ root thread message

- Cơ chế hydrate attachment của Slack giờ chỉ nhìn vào inbound message hiện tại khi payload sự kiện không có `files`
- Một reply chỉ có text trong thread sẽ không còn kéo lại ảnh hoặc file cũ từ root thread prompt vào request mới của agent
- Điều này giữ cho phần nhắc tới attachment trung thực với đúng thứ người dùng đã gửi trong message đó

### 6. Hướng dẫn cho message-tool và operator sạch hơn

- `message send` giờ ưu tiên `--file` làm cờ attachment chung, còn `--media` được giữ làm alias tương thích
- Prompt hướng dẫn agent giờ giữ model ở đầu ra markdown bình thường thay vì gợi ý payload thô theo từng nền tảng
- `allowBots` tiếp tục mặc định an toàn là `false`, và ghi chú hiện tại có regression coverage tường minh rằng các message có nguồn gốc từ bot trên route sẽ bị drop trừ khi config đó được bật có chủ ý

## Ghi chú schema và contract

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

Template hiện tại:

- `config/clisbot.json.template`

## Kiểm chứng

Đã validate bằng:

- `bun run check`

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

- hành vi restart backoff của runtime monitor
- trạng thái recovery của runtime process và supervisor
- recovery khi Telegram polling bị conflict
- parse và persist scoped follow-up command
- render transcript compact so với full transcript
- xác nhận submit qua tmux so với trạng thái prompt đã được paste nhìn thấy
- retry và cooldown của startup session-id capture
- queued-start notification trong các flow message-tool không streaming
- reply text-only trong Slack thread khi root thread có file
- enforce ingress `allowBots=false` cho cả Slack lẫn Telegram
