Thursday, October 15, 2026

[Important - OpenCode] OpenCode ประกาศเปลี่ยนผ่านสู่ V2! สรุปคู่มือ Migration และฟิลด์ที่ถูกลบถาวร

ถ้าใครใช้ OpenCode แล้วจู่ๆ เปิดไฟล์ Config ใน VSCode ขึ้นมาเจอแจ้งเตือน Deprecated ทั้งที่เมื่อวานยังใช้ได้ปกติ ไม่ต้องตกใจไปครับ! บทความนี้จะสรุปสาเหตุ ไทม์ไลน์การย้ายจาก V1 ไป V2 พร้อมวิธีจัดการ Config ให้เข้าที่เข้าทางกันครับ


ทำไมจู่ๆ ถึงขึ้นเตือน Deprecated? (Timeline & Migration)

สาเหตุหลักไม่ได้เกิดจากโปรแกรม OpenCode Runtime มีปัญหา แต่เป็นเพราะไทม์ไลน์การอัปเดตของตัวระบบ, Schema ฝั่ง Server และ VSCode ดังนี้ครับ:

  • ปล่อย V2 เวอร์ชันใหม่: OpenCode V2 เริ่มปล่อย Beta ช่วงต้นเดือนกรกฎาคม 2026 และเปิดตัวเวอร์ชัน 2.0 อย่างเป็นทางการเมื่อประมาณ 20 กรกฎาคม 2026
  • ช่วง Push Phase (30 ก.ย. – 6 ต.ค. 2026): ในเวอร์ชัน v1.18.34 / v1.18.35 / v1.19.0 ตัวคำสั่ง /update ถูกเปลี่ยน Endpoint จากเดิมที่เคยดึง Patch ย่อยของ V1 ให้หันไปโหลดและติดตั้ง V2 แทน โดยจะไม่มีการ Auto-update บังคับข้ามเวอร์ชัน และไม่มี Hard EOL ตัดการทำงานเด็ดขาด
  • Server อัปเดต Schema (14 ต.ค. 2026): ในเวอร์ชัน V2 2.0.29 ตัว Schema กลางบน Server ถูกอัปเดตให้ระบุว่าฟิลด์ V1 ติดสถานะ Deprecated
  • VSCode ดึง Schema ใหม่มาตรวจ: พอ VSCode รีสตาร์ทหรือเคลียร์แคช ตัว Editor เลยไปดึง Schema ใหม่จาก URL ($schema: https://opencode.ai/config.json) มาเช็ก ทำให้แสดงเตือน Deprecated บนฟิลด์เดิมทันที

สรุปสั้นๆ: ตัวโปรแกรมกับ Schema กลางเปลี่ยนเป็น V2 แล้ว ฟิลด์ V1 ในไฟล์ JSON เดิมเลยโดนเตือนใน Editor แต่ตัว OpenCode V2 Runtime ยังใจดี อ่านและแปลงค่าเดิมแบบ In-memory normalization ให้ทำงานต่อได้ตามปกติครับ


3 จุดใหญ่ที่มี Breaking Changes (Intentional Breaking Changes)

  1. Plugins: ปรับไปใช้ Plugin API รูปแบบใหม่ ทำให้ Plugin เดิมของ V1 รันตรงๆ ไม่ได้อีกต่อไป
  2. Server API & Clients: ปรับปรุงข้อตกลงและสัญญาการเชื่อมต่อ (Revised contracts) ใหม่
  3. Terminal Client: เลิกระบบแยกชั้นไฟล์ tui.json(c) แล้วรวมเป็นไฟล์ Config เดี่ยว cli.json แบบ Global (ระบบย้ายให้อัตโนมัติ)

ฟิลด์ที่โดนลบถาวร (Final Deletions Verified - 15 ต.ค. 2026)

จากการตรวจสอบไฟล์ Config ล่าสุด มีฟิลด์ที่เลิกใช้แล้วและต้องลบออก (DELETE) ดังนี้:

  • small_model → ลบออก (DELETE): V2 ไม่มีฟิลด์นี้ในระดับ Top-level แล้ว ตัวระบบจะ auto-select โมเดลสำหรับงาน Maintenance ให้เอง
  • compaction.prune:true → ลบออก (DELETE): กลายเป็นค่าค้างไว้เฉยๆ ไม่ส่งผลอะไร (no-op) ใน V2 ให้เปลี่ยนไปใช้ keep.tokens+buffer หรือเหลือไว้แค่ auto:true ก็พอ
  • mcp.servers.context7.oauth:false → ลบออก (DELETE): ให้ลบออกตอนสถานะเป็น disabled:true (ค่อยใส่กลับมาตอนเปิดใช้ API-key server พร้อมใส่ headers + oauth:false)

ตารางเปลี่ยนชื่อฟิลด์ (Field Migrations V1 → V2)

Category โครงสร้างเดิม (V1) โครงสร้างใหม่ (V2)
Share autoshare: bool share: manual|auto|disabled
Permissions permission:{bash,task}
tools:{websearch:false}
permissions:[{action,resource,effect}]
(bash → shell, task → subagent, write+patch → edit)
Agents agent:{prompt,disable,variant,maxSteps,permission}
และ mode map
agents:{system,disabled,model#variant,steps,permissions,request.body}
(prompt → system, disable → disabled, maxSteps → steps, temperature/top_p/options → request.body)
Snapshots snapshot snapshots (ค่า bool เหมือนเดิม)
Media attachment->{image} media->{image}
MCP mcp.<name>/{enabled,timeout:NN,clientId...}
experimental.mcp_timeout
mcp.servers.<name>/{disabled (ตรงข้าม enabled),timeout:{catalog,execution},client_id...}
mcp.timeout.catalog/execution
Providers provider.{npm:@ai-sdk/...,options.baseURL} providers.{package:@opencode/ai/providers/*,settings.baseURL,env,headers/body}
เหมือนเดิม shell, model, default_agent, share

แนวทางย้ายระบบที่แนะนำ (Recommended Path)

  1. ทดสอบก่อน: สำรองหรือเก็บไฟล์ Config เดิมไว้ แล้วลองรันบน V2 ดูว่า Models, Credentials, Agents, Permissions และ MCP ยังทำงานถูกต้องไหม
  2. Port ส่วนเสริม: พอร์ต Plugins และระบบที่ต่อกับ Server API ให้เข้ากับโครงสร้าง V2
  3. Convert อัตโนมัติ (Optional): สั่งแปลงไฟล์ Config ทั้งหมดเป็น V2 Native ได้ง่ายๆ ด้วยการส่ง Prompt ให้ AI:
    "Migrate my OpenCode configuration, including file-based definitions, from V1 to native V2. Preserve behavior."

No comments:

Post a Comment