# TaskStop

หยุด task เบื้องหลังที่กำลังรันอยู่ — คำสั่ง shell, agent ที่ถูก dispatch, หรือ session ระยะไกล — โดย runtime handle ใช้เพื่อคืน resource ยกเลิกงานที่ไม่มีประโยชน์แล้ว หรือกู้คืนเมื่อ task ค้าง

## เมื่อใดควรใช้

- คำสั่ง shell เบื้องหลังรันนานกว่าที่คาดและคุณไม่ต้องการผลลัพธ์อีกต่อไป
- Agent ในเครื่องวนซ้ำหรือหยุดชะงักและต้องถูกตัดสั้น
- ผู้ใช้เปลี่ยนทิศทางและงานเบื้องหลังสำหรับทิศทางก่อนหน้าควรถูกละทิ้ง
- Session ระยะไกลกำลังจะ timeout หรือกำลังยึด resource ที่คุณต้องการ
- คุณต้องการ slate ว่างก่อนเริ่มการรันใหม่ของ task เดียวกัน

ชอบให้งานเบื้องหลังอายุสั้นทำเสร็จเอง `TaskStop` สำหรับกรณีที่การทำงานต่อไม่มีค่าหรือเป็นอันตราย

## พารามิเตอร์

- `task_id` (string, required): runtime handle ที่ส่งคืนเมื่อ task เบื้องหลังเริ่มต้น นี่คือตัวระบุเดียวกันที่ `TaskOutput` รับ ไม่ใช่ `taskId` ของ task-list

## ตัวอย่าง

### ตัวอย่างที่ 1

หยุดคำสั่ง shell เบื้องหลังที่ไม่หยุด

```
TaskStop(task_id: "bash_01HXYZ...")
```

คำสั่งได้รับ terminate signal; output ที่ buffer ไว้เขียนจนถึงขณะนี้ยังอ่านได้ที่ path output

### ตัวอย่างที่ 2

ยกเลิก agent ที่ถูก dispatch หลังการแก้ทิศทางของผู้ใช้

```
TaskStop(task_id: "agent_01ABCD...")
```

## หมายเหตุ

- `TaskStop` ขอการ terminate; ไม่รับประกันการ shutdown ทันที Task ที่ทำงานดีจะออกอย่างรวดเร็ว แต่ process ที่ทำ blocking I/O อาจใช้เวลาสักครู่ในการ unwind
- การหยุด task ไม่ลบ output ของมัน สำหรับ task shell เบื้องหลัง ไฟล์ output บน disk จะถูกรักษาและยังอ่านได้ด้วย `Read` สำหรับ agent และ session output ใดก็ตามที่จับก่อนการหยุดยังเข้าถึงได้ผ่าน `TaskOutput`
- `task_id` ที่ไม่รู้จักหรือ task ที่เสร็จแล้วจะคืน error หรือ no-op สิ่งนี้ปลอดภัย — คุณสามารถเรียก `TaskStop` แบบป้องกันโดยไม่ตรวจสอบสถานะก่อน
- หากคุณตั้งใจจะ restart งานเดียวกัน ให้หยุด task เก่าก่อน dispatch ตัวใหม่เพื่อหลีกเลี่ยงการรันขนานสองตัวแข่งกันบน resource ร่วม (ไฟล์, port, database row)
- `TaskStop` ไม่ส่งผลต่อ entry ใน task list ของทีม เพื่อยกเลิก task ที่ถูกติดตาม อัปเดตสถานะเป็น `deleted` ด้วย `TaskUpdate`
