spawn-agent: อะแดปเตอร์ที่ทำให้เอเจนต์เขียนโค้ดบนเครื่องโลคัลทำงานเหมือนโมเดลของ Vercel AI SDK
(github.com/millionco)โปรเจกต์นี้เป็นไลบรารีอะแดปเตอร์ที่เรียกใช้งานเอเจนต์เขียนโค้ดหลายตัวที่ติดตั้งอยู่แล้วในคอมพิวเตอร์ของผู้ใช้ (Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Factory Droid, Pi) ในรูปแบบ child process แล้วซ่อนไว้หลังอินเทอร์เฟซ LanguageModelV3 ของ Vercel AI SDK การสื่อสารยึดตาม Agent Client Protocol (ACP) ซึ่งเป็นสเปกสาธารณะโดยตรง และรับส่งข้อความ JSON-RPC แบบ NDJSON บน standard input/output โครงสร้างเป็น pnpm monorepo และนอกจากตัวไลบรารีหลักแล้ว ยังแยกสภาพแวดล้อมสำหรับเดโมและทดสอบที่มี ACP fixture แบบ deterministic และ WebSocket bridge ออกเป็นอีก workspace หนึ่งโดยเฉพาะ
- การออกแบบเพื่อการทำงานร่วมกัน: ไม่ได้สร้างโปรโตคอลของตัวเอง แต่ใช้มาตรฐาน ACP ตรง ๆ ทำให้ CLI ที่พูด ACP ได้โดยตรงอย่าง Cursor, Copilot, Gemini, OpenCode, Droid และ Pi เชื่อมต่อได้ทันที ส่วน Claude Code และ Codex จะถูกรวมเข้ามาภายใต้อินเทอร์เฟซเดียวกันผ่านแพ็กเกจแปลงเฉพาะของแต่ละตัว สำหรับ ACP implementation แบบกำหนดเองที่ไม่มีในสเปก สามารถแทรกเข้าไปได้ในรูปของ custom adapter
- รูปแบบการรวมกับ AI SDK: เปิดใช้งานทั้งโหมดแบบครั้งเดียวที่สร้าง child process ใหม่ทุกครั้งที่เรียก และโหมด session ที่คง child process และ ACP session เดิมไว้เพื่อเก็บหน่วยความจำบทสนทนาสำหรับการเรียกครั้งถัดไป โดยเปิดให้ใช้ผ่านอินเทอร์เฟซโมเดลเดียวกัน วัตถุ session รองรับ
AsyncDisposableจึงบังคับการคืนทรัพยากรได้ด้วยไวยากรณ์await usingและช่วยให้ปิดการทำงานได้โดยไม่รั่วแม้ในบทสนทนาแบบหลายรอบ - นโยบายการจัดการ child process: standard error จะเก็บไว้เฉพาะช่วงท้ายตามขนาดที่กำหนดเพื่อใช้วินิจฉัยเมื่อโปรเซสจบผิดปกติ ส่วนบรรทัดที่ไม่ใช่ NDJSON ที่หลุดออกมาทาง standard output จะถูกแยกเป็น noise แล้วส่งไปยังช่อง standard error ในขั้นตอนปิดระบบจะส่ง SIGTERM ก่อน แล้วรอช่วงผ่อนผันค่าเริ่มต้น 2 วินาทีก่อนส่ง SIGKILL และการพยายามส่งอินพุตไปยังโปรเซสที่ตายไปแล้วจะถูกแยกเป็นข้อผิดพลาดอีกประเภทหนึ่ง มีทั้ง watchdog ตรวจความไม่เคลื่อนไหวค่าเริ่มต้น 3 นาที การรู้จำแพตเทิร์นข้อความสำหรับกรณียืนยันตัวตนล้มเหลวและเกินโควตาการใช้งาน รวมถึงการแม็ปรหัสตอบกลับประเภทต้องยืนยันตัวตนและไม่พบเมธอดตามที่ ACP กำหนดไว้
- การต่อรองสิทธิ์และความสามารถ: นโยบายสิทธิ์มีพรีเซ็ต 4 แบบคือ
auto-allow,auto-allow-once,auto-reject,streamและยังรองรับรูปแบบฟังก์ชันที่รับคำขอสิทธิ์มาแล้วสร้างคำตอบกลับเองได้ ฟีเจอร์เสริมอย่าง filesystem, terminal และ additional working directory จะถูกโฆษณาเป็นความสามารถของ ACP ก็ต่อเมื่อโฮสต์มี handler ให้เท่านั้น เพื่อลดพื้นผิวสิทธิ์ และหากมีการเรียกใช้ฟีเจอร์ที่ไม่ได้โฆษณาไว้ หรือมี prompt content ที่ไม่ตรงกับความสามารถ ก็จะถูกปฏิเสธด้วยข้อผิดพลาดคนละประเภท - ระบบจัดหมวดหมู่ข้อผิดพลาด: มีข้อผิดพลาด 16 ชนิดที่จัดเป็นลำดับชั้นภายใต้คลาสแม่เดียว และสามารถแยกประเภทได้ด้วยฟิลด์ tag ทำให้ฝั่งที่เรียกใช้งานแตกนโยบาย retry ได้ง่าย ข้อผิดพลาดจากการจบทำงานผิดปกติจะใส่ exit code, signal และส่วนท้ายของ standard error ไว้ในข้อความด้วย เพื่อช่วยในการวิเคราะห์ย้อนหลัง
- โครงสร้างการทดสอบ: แยกดูแล 27 ด้านผ่านไฟล์ทดสอบแต่ละชุด เช่น การเริ่มต้นระบบ, สิทธิ์, การยกเลิก, session พร้อมกันหลายชุด, wire fuzz, การลองยืนยันตัวตนใหม่, watchdog, การตรวจจับสัญญาณร้ายแรงจาก standard error และความเข้ากันได้เมื่ออัปเกรด SDK ภายนอก โมดูล mock agent ถูกเปิดเป็น entry point แยกของไลบรารี จึงนำ deterministic fixture เดิมไปใช้ในโค้ดฝั่งผู้ใช้ได้โดยตรง และ echo agent ในสภาพแวดล้อมเดโมก็ถูกออกแบบมาเพื่อตรวจสอบทั้ง communication pipeline กับ child process จริงโดยไม่ต้องพึ่ง LLM CLI ที่มีน้ำหนักมาก
- สถานะปัจจุบัน: ทั้ง root และแพ็กเกจยังเป็นเวอร์ชัน
0.0.1และคอมมิตล่าสุดก็ยังวนซ้ำกับเวอร์ชันเดียวกัน จึงดูเหมือนอยู่ในช่วงเก็บรายละเอียดก่อนเผยแพร่บน npm แบบสาธารณะ กำหนด peer เป็นai@^6.0.0และต้องใช้ Node 22 ขึ้นไป กับ pnpm 8 ขึ้นไป
สรุปคือ spawn-agent ไม่ใช่เฟรมเวิร์กเอเจนต์ตัวใหม่ แต่เป็นอะแดปเตอร์เชิงปฏิบัติสำหรับงานจริงที่วางนโยบายการปฏิบัติการหนาแน่นทับอยู่บนมาตรฐาน ACP ที่ใช้กันอยู่แล้วและชุดทรัพยากร CLI สำหรับงานเขียนโค้ดที่กระจัดกระจาย จุดอย่าง permission gate, watchdog ตรวจความไม่เคลื่อนไหว, ช่วงผ่อนผันก่อนปิด, การต่อรองความสามารถ และการจัดหมวดหมู่ข้อผิดพลาดแบบอิง tag ถูกรวมมาไว้ในที่เดียว และเปิดให้ผู้ใช้ AI SDK เข้าถึงทั้งหมดนี้ผ่านอินเทอร์เฟซโมเดลที่คุ้นเคย ซึ่งดูเป็นคุณค่าด้านการใช้งานที่ชัดเจน
ยังไม่มีความคิดเห็น