# JUJU 0.7.0 — Coding Assistance + Multimodal

วันที่จัดทำรุ่น: 10 กันยายน 2026 (Asia/Bangkok)

รุ่นนี้เพิ่ม 25 tools จาก npm 0.6.3: ชุดช่วยเขียนโค้ด 5 ตัว และชุดภาพ/สื่อ/เบราว์เซอร์/เกม/workflow 20 ตัว รวม **74 tools** โดยรักษารายการ 49 tools เดิมและลำดับเดิม ไม่เปลี่ยน OAuth, สิทธิ์ client ต่อ workspace, trust mode, sandbox หรือสิทธิ์ desktop ของเจ้าของ

## ติดตั้งหรืออัปเกรด

เมื่อ jobs เดิมเสร็จ ให้หยุดเฉพาะ JUJU instance ที่ต้องการอัปเกรด แล้วรัน:

```bash
npm install -g juju-mcp@0.7.0
juju --version
# ควรแสดง 0.7.0
cd "/absolute/path/to/project"
juju
```

สำหรับ STDIO ให้แอป AI เปิด `juju stdio --root /absolute/path/to/project` ใหม่ ไม่ใช้ bare `juju` เป็น subprocess จากนั้นโหลดรายการ tools ใหม่และเรียก `project_overview` เพื่อรับ workspace ID/epoch ปัจจุบัน

ไม่ต้องลบ config, state DB, signing keys หรือ OAuth clients การ publish บน npm ไม่รีสตาร์ตเซิร์ฟเวอร์หรืออัปเดต global installation ที่กำลังใช้อยู่เอง การเชื่อมต่ออาจต้อง reconnect ตามปกติเมื่อเจ้าของรีสตาร์ต แต่การอัปเกรดไม่เพิกถอน grant เดิม

## สิ่งที่เพิ่ม

| กลุ่ม | เครื่องมือ | ขอบเขตจริง |
|---|---|---|
| บริบทและผลกระทบของโค้ด | `context_for_task`, `analyze_impact` | ค้นและจัดอันดับข้อมูลตามโจทย์ พร้อมไฟล์/บรรทัด/hash; วิเคราะห์ static imports และไฟล์ที่พึ่งพากัน ไม่ใช่ runtime call graph |
| อ่านและแก้ symbol | `read_symbol`, `preview_refactor` | อ่าน function/class/method; preview เปลี่ยน body ของ function/method แบบ block ใน TS/JS แล้วใช้ apply/rollback เดิม |
| ตรวจผลหลังแก้ | `verify_changes` | plan/run/report ของ task ที่เลือกเอง พร้อมผลคำสั่ง หลักฐาน test และตรวจ source drift |
| ภาพหน้าจอ | `screen_observe`, `image_view` | ภาพจริงเป็นชุดสั้น ครอป/ซูม เปรียบเทียบพิกเซล พร้อมเวลาหรือพิกัด ไม่ใช่การเฝ้าจอทั้งวัน |
| วิดีโอและเสียง | `media_open`, `media_extract`, `media_read`, `media_job`, `media_close` | เปิดสำเนาไฟล์ใน workspace ดึงภาพหรือเสียงตามช่วงเวลา ติดตาม/ยกเลิกงาน และคืนสื่อจริง |
| บทพูด ซับ และเสียงตอบ | `media_transcribe`, `media_subtitles`, `media_search`, `speech_synthesize` | Whisper ในเครื่อง, SRT/VTT, ค้นคำพร้อมเวลา และสร้าง WAV จากเสียง macOS |
| เบราว์เซอร์ | `browser_session`, `browser_observe`, `browser_action` | Chromium แยก profile, ภาพและ DOM, กรอก/คลิก/นำทาง, console/network และ play/pause/seek/mute |
| เกมทีละขั้น | `game_session`, `game_step` | ดูภาพ ทำหนึ่ง move แล้วดูผล; กดหลายปุ่ม/ค้างสั้นใน browser, discrete input บน native desktop |
| ขั้นตอนจากตัวอย่าง | `workflow_save`, `workflow_search`, `workflow_run` | เก็บขั้นตอนที่ client/model เขียน ค้นกลับมาใช้ ตรวจ expected-before/after และทำทีละขั้น |
| ความพร้อม | `multimodal_status` | รายงานส่วนประกอบและขอบเขตที่พร้อม โดยไม่เปิด browser/capture/microphone |

รายละเอียด input/output อยู่ใน `schemas/tools.json` และคู่มือ [Task Assistance](ASSISTANCE.md) / [Multimodal](MULTIMODAL.md)

## เตรียมส่วนประกอบสื่อแบบเลือกติดตั้ง

แพ็กเกจมี `sharp@0.35.4`, `playwright@1.63.0` และคำสั่ง `juju-media-setup` อยู่แล้ว แต่ไม่รวมไฟล์ Chromium, FFmpeg, Whisper หรือโมเดลขนาดใหญ่ และไม่ติดตั้งส่วนเหล่านี้ด้วย install hook ของ JUJU

จากโฟลเดอร์โปรเจกต์ที่จะใช้:

```bash
juju-media-setup --check
# บน macOS ที่มี Homebrew: ติดตั้งเมื่อยังไม่มี
brew install ffmpeg whisper-cpp
# ติดตั้ง browser ของ Playwright รุ่นที่ JUJU ใช้ และโมเดลที่ตรวจ SHA-256
juju-media-setup --install-browser --download-model
```

`--check` และการเรียกโดยไม่ใส่ flags เป็นการตรวจเท่านั้น โมเดลเขียนลง **models/ggml-tiny.bin ในโฟลเดอร์ปัจจุบัน** ไม่เขียน config หรือเปลี่ยนสิทธิ์ของ JUJU Chromium ใช้ cache ของ Playwright ไม่ใช้ cookies/profile ส่วนตัว

เรียก `media_transcribe` ด้วย `modelFile: "models/ggml-tiny.bin"` สำหรับ workspace ที่ติดตั้งโมเดลไว้ โมเดล tiny เป็นจุดเริ่มต้น ไม่ใช่การรับประกันความแม่นยำทุกภาษา คำเฉพาะ เสียงรบกวน หรือผู้พูดหลายคน ผล ASR และซับมี provenance แยกกัน

ส่วน desktop ใช้การอนุญาตรายแอปและ macOS Screen Recording/Accessibility ที่เจ้าของตั้งไว้เดิม การติดตั้งสื่อไม่เปิดสิทธิ์เหล่านั้น การสร้างเสียงส่งกลับ WAV ให้ client ไม่เปิดลำโพงเครื่องเอง

## ตัวอย่างลำดับงาน

**แก้โค้ด:** `project_overview` → `context_for_task` → `analyze_impact` → `read_symbol` / อ่านไฟล์ → `preview_refactor` / edit เดิม → apply → `verify_changes`

**สรุปคลิป:** `multimodal_status` → `media_open` → `media_extract` เลือกเฟรม → `media_read` ดูภาพจริง → `media_transcribe` / `media_subtitles` → `media_search` → อ่านหลักฐานช่วงที่เกี่ยวข้อง → โมเดลสรุปพร้อมเวลา → `media_close`

**ทดสอบเว็บ:** เปิด `browser_session` แบบ workspace กับไฟล์ HTML → `browser_observe` → `browser_action` ด้วย selector/observation ล่าสุด → ตรวจภาพและ DOM หลังทำ → ปิด session

**จำวิธีทำ:** โมเดลดูตัวอย่างและเขียนขั้นตอน → `workflow_save` → `workflow_search` → `workflow_run` ผูก revision ที่ตรวจแล้ว → ทำ `next` ทีละขั้น ระบบไม่ถือว่าบันทึกเก่าคือการอนุญาตใหม่

ทุก tool นอกจาก `project_overview` ต้องส่ง workspaceId และ workspaceEpoch ปัจจุบัน การทำงานที่มีผลข้างเคียงใช้ idempotency key ตาม schema; ข้อผิดพลาด `RECOVERY_REQUIRED` ต้องตรวจผลก่อน ไม่ส่ง key ใหม่เพื่อทำซ้ำโดยอัตโนมัติ

## ข้อจำกัดที่สำคัญ

JUJU เป็นเครื่องมือให้โมเดลใช้ ไม่ใช่โมเดล vision หรือ game agent ใหม่ ความเข้าใจภาพ/เสียงและการเลือก action ขึ้นกับโมเดลและ client ที่รองรับ image/audio content blocks ยังไม่ใช่การรับรอง ChatGPT/Claude/Codex ทุกเวอร์ชันผ่าน tunnel จริง

สื่อเริ่มจากไฟล์ใน workspace สูงสุด 512 MiB ต่อไฟล์ มีเพดาน cache และอายุ handle การดึงเฟรมมีขอบเขตต่อครั้ง การถอดเสียงไม่เกิน 10 นาทีต่อครั้ง หนังใหญ่ต้องแบ่งเป็นช่วง ไม่มีการดาวน์โหลดจากทุกเว็บไซต์ ปลด DRM หรือเปิดไมโครโฟน/เสียงระบบสด การอ่านซับไม่ได้พิสูจน์ว่าได้ดูทุกเฟรม

Browser แบบ workspace เป็น static resources แบบ offline ไม่ใช่การเชื่อม localhost dev server ทุกพอร์ต Browser แบบ public ต้องใช้ allowWebFetch ที่เจ้าของเปิดไว้เดิมและ origins ที่ระบุชัดเจน; ไม่เปลี่ยน setting เพื่อเปิดให้เอง ไม่รองรับทุกเว็บไซต์ที่พึ่ง WebSocket, popup, download, profile ส่วนตัวหรือ DRM

เกมเป็น observe/act/observe ทีละขั้น ไม่ใช่ระบบ low-latency FPS หรือเล่นต่อเองหลังจบแชต Workflow เป็นบันทึกขั้นตอน ไม่ใช่ฝึกน้ำหนักโมเดลจากคลิป ไม่มีเครื่องมือใหม่ให้อนุมัติสิทธิ์ตัวเอง

ภาพ/เสียงถูกเตรียมในเครื่อง แต่เมื่อคืนให้โมเดลคลาวด์ ข้อมูลที่เลือกก็ส่งออกผ่าน client ต้องคำนึงถึงข้อมูลส่วนตัวในสื่อด้วย Native desktop และ speech synthesis เป็น macOS-specific; Windows ยังไม่รองรับ และผล Linux/Node24/macOS Intel ในรุ่นนี้ยังไม่ถูกอ้างว่าได้ทดสอบจริง

## ผลตรวจ release

`npm run build && npm run test:all` ผ่าน: typecheck, lint, 363 unit/integration/security/compatibility tests และ 11 packaging tests รวม **374 tests ใน 44 ไฟล์** โดยไม่มี skipped tests ใน gate ที่บันทึก

ทดสอบวิดีโอ/เสียง/Whisper/Chromium จริงใน fixtures รวม seek/play/pause, form actions, browser game key release, workflow และ HTTP/STDIO content blocks ส่วน desktop extension ใช้ OS adapter จำลองกับภาพจริง ไม่ใช่การเล่นเกมบนหน้าต่างส่วนตัวของเจ้าของ

เพิ่ม packaging regression ยืนยันว่าคู่มือและตัวช่วยติดตั้งอยู่ใน tarball, ไม่มีโมเดล/ไฟล์สื่อ/state และ helper --check/--help ไม่ติดตั้งโมเดลหรือเปลี่ยน config ตรวจ dependency ใช้งานด้วย npm audit เมื่อ 10 กันยายน 2026: ไม่พบช่องโหว่ที่ registry รายงานในรอบนั้น ไม่ใช่หลักประกันว่าไม่มีช่องโหว่ที่ยังไม่ถูกรายงาน

ดู [TEST_REPORT](TEST_REPORT.md), [COMPATIBILITY](COMPATIBILITY.md), [SECURITY](SECURITY.md) และ [RELEASE_NOTES](RELEASE_NOTES.md) สำหรับขอบเขตและประวัติรุ่น
