18 คะแนน โดย junhoyeo 2025-12-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

TLDR: https://github.com/junhoyeo/tokscale

ที่มา

  • เริ่มจาก Claude Code ที่เปิดตัวในช่วงครึ่งแรกของปีนี้ ตามด้วย OpenAI Codex CLI, Google Gemini CLI และผู้ให้บริการ LLM อีกหลายรายที่เริ่มนำเสนอเครื่องมือ Agentic Coding Tool อย่างจริงจัง ถึงอย่างนั้น งานส่วนใหญ่ก็ยังทำเองอยู่
  • แต่หลังจากเพื่อนแชร์การตั้งค่า OpenCode ให้ ก็เริ่มใช้งานอย่างจริงจังมากขึ้นมาก พอรันหลายเอเจนต์แบบขนานให้รีวิวกันเอง หรือแยกงานเป็นสำรวจ/พัฒนา/ตรวจสอบ (พูดอีกอย่างคือ ยิ่งใช้โทเค็นมากขึ้นเท่าไร...) ประสิทธิภาพก็เพิ่มขึ้นอย่างเห็นได้ชัด หลังจากนั้นเพื่อนก็เปิดซอร์สการตั้งค่าของตัวเองและได้ดาวกว่า 2.5k+ ในนาม Oh-My-OpenCode (https://github.com/code-yeongyu/oh-my-opencode)
  • ภายในเดือนเดียวหลังได้เจอเพื่อน ก็ใช้โทเค็นไปมากกว่า 5 พันล้านและกลายเป็นสาวกเต็มตัว (กำลังใช้โควตารายสัปดาห์ของบัญชี Claude Max plan จนเต็มทุกสัปดาห์ จริง ๆ เคยสร้างบัญชีรองแล้วก็โดนแบนด้วย) และได้รู้ด้วยว่าคนที่ใช้ agentic workflow ยังมีไม่มากอย่างที่คิด

จุดเริ่มต้นของไอเดีย

  • ได้รู้จักเครื่องมือชื่อ ccusage สำหรับติดตามการใช้โทเค็นของ Claude Code

  • พออ่านบทความเกี่ยวกับ "นักพัฒนาที่ใช้ Claude Code มากที่สุดในโลก" (คุณจินฮยอง!) ก็เกิดคำถามว่า "เขารู้ได้ยังไงว่าเป็นอันดับ 1 ของการใช้โทเค็น?" เลยค้นต่อและพบว่ามีเว็บเล็ก ๆ ชื่อ viberank (https://github.com/sculptdotfun/viberank) ซึ่งเป็น leaderboard ที่สร้างจากข้อมูลของ ccusage (ไม่แน่ใจว่าตอนนี้ยังดูแลอยู่หรือเปล่า)

  • แต่ทั้งสองโปรเจ็กต์ยังไม่รองรับข้อมูลจากไคลเอนต์อื่น เช่น OpenCode, Codex CLI (ccusage รองรับบางส่วน), Gemini CLI เป็นต้น

  • พอดีมีความคิดแวบขึ้นมาในห้องอาบน้ำว่า ถ้าเอาปริมาณการสร้างโทเค็นมาแสดงเป็น GitHub Contribution Graph ก็น่าจะดี เพราะนักพัฒนาคุ้นเคยกับ GitHub อยู่แล้ว และส่วนตัวคิดว่ามันเป็นรูปแบบที่ตั้งเป้าหมายเพื่อบีบตัวเองให้ทำต่อได้ง่าย

    • Isometric Contributions (https://github.com/jasonlong/isometric-contributions) - ส่วนขยาย Chrome โอเพนซอร์สอายุถึง 10 ปี ที่เรนเดอร์ GitHub contribution graph แบบ 3D isometric → เอาไอเดียกราฟ 3D มาจากตรงนี้
    • อ้างอิงไอเดียธีมสีต่าง ๆ จาก GitHub contribution graph
    • ฝั่งฟรอนต์เอนด์ใช้ obelisk.js (https://github.com/nicklockwood/obelisk.js) เพื่อทำ 3D isometric rendering
  • เดิมทีก็ชอบทำโปรดักต์แบบแฮ็กกี้ให้เสร็จเร็ว ๆ เพื่อดูปฏิกิริยาและดึงความสนใจอยู่แล้ว (ดูโพสต์ก่อนหน้า)

  • เลยตัดสินใจสร้างแพลตฟอร์มที่มาในรูปแบบ CLI/TUI รันได้ง่ายด้วย bunx (ตัวเทียบเท่า npx ใน ecosystem ของ Bun) และสามารถ submit ไปยัง API server เพื่อแชร์ข้อมูลและเอาชื่อขึ้น leaderboard ได้

ชื่อโปรเจ็กต์: Tokscale

  • ได้แรงบันดาลใจจาก Kardashev Scale (https://ko.wikipedia.org/wiki/Kardashev_scale)

  • เป็นสเกลที่จัดระดับความก้าวหน้าทางเทคโนโลยีของอารยธรรมตามปริมาณการใช้พลังงาน (Type I = ระดับดาวเคราะห์, II = ระดับดาวฤกษ์, III = ระดับดาราจักร)

  • มองว่าในยุค AI โทเค็นคือพลังงานรูปแบบใหม่ คอนเซปต์คือทำให้เห็นเส้นทางการเติบโตจาก "planetary developer" ไปจนถึง "galactic code architect"

  • Elon Musk เคยพูดว่า "Electricity is money"

    • ในยุค AI และดาต้าเซ็นเตอร์ ขีดจำกัดของประสิทธิภาพไม่ได้อยู่ที่คอมพิวต์ แต่อยู่ที่ปริมาณไฟฟ้าที่จ่ายได้
    • มากกว่าประสิทธิภาพ GPU สิ่งที่แข่งขันกันคือการจัดหาไฟฟ้า การระบายความร้อน และประสิทธิภาพโดยรวม
  • แล้วถ้าดึงแนวคิดนี้ลงมาสู่ระดับนักพัฒนารายบุคคลล่ะ?

    • สิ่งที่เราจ่ายเมื่อใช้ LLM API = โทเค็น
    • คนที่ใช้โทเค็นได้มากกว่าและมีประสิทธิภาพกว่าจะผลิตโค้ดได้มากกว่า
    • โทเค็นจะกลายเป็นหน่วยพลังงานส่วนบุคคลในยุค AI
  • ถ้า AI คือเครื่องที่เปลี่ยนไฟฟ้าเป็นเงิน เครื่องมือ agentic coding ก็เป็นเครื่องที่เปลี่ยนโทเค็นเป็นโค้ด

  • ดังนั้น Tokscale = Token + Kardashev Scale

    • คอนเซปต์คือทำให้เห็นการเติบโตจาก "planetary developer" ไปถึง "galactic code architect"
    • วัดระดับการใช้ AI ของนักพัฒนาด้วยปริมาณการใช้โทเค็น

การทำ TUI

  • ใช้ OpenTUI (https://github.com/sst/opentui) เพื่อสร้าง terminal UI
  • OpenTUI เป็น TUI framework ที่พัฒนาโดย SST ต่างจาก Ink ของ React เพราะใช้ Solid.js และมี native Zig engine ที่ให้การเรนเดอร์แบบ zero-flicker (ช่วงหลัง OpenCode กับ
  • มี 4 มุมมอง (Overview, Models, Daily, Stats) พร้อมการนำทางด้วยคีย์บอร์ด/เมาส์
  • ธีมสี 9 แบบสำหรับ contribution graph: Green, Halloween, Teal, Blue, Pink, Purple, Orange, Monochrome, YlGnBu (เป็นธีมที่ชุมชน GitHub contribution graph ทำขึ้น)
  • กราฟเรนเดอร์ด้วยอักขระ Unicode block (▁▂▃▄▅▆▇█) และแสดงแบบสแตกโดยใช้สีต่างกันตามโมเดล

การดึงข้อมูลช้า → โมดูลเนทีฟ Rust

  • ตอนแรกพาร์สไฟล์ JSON ด้วย TypeScript แต่ช้าเกินไป
  • เลยย้ายไปใช้โค้ดเนทีฟ Rust ผ่าน napi-rs (https://napi.rs/)
  • ได้ประสิทธิภาพดีขึ้นประมาณ 8.5 เท่า:
  • ใช้หน่วยความจำลดลงราว 45% ด้วย (streaming parse, zero-copy string handling)
  • เพื่อให้เข้ากับ OpenTUI จึงรองรับ bunx และตัด npx ออก เปลี่ยนเป็นต้องใช้ Bun runtime
    • ใน TypeScript CLI ใช้ Bun.spawn เพื่อรัน subprocess ที่สื่อสารกับโมดูลเนทีฟ Rust และส่งข้อมูล JSON กันผ่าน stdin/stdout
  • (แต่เพราะใช้ OpenCode เยอะเกินไป บนเครื่องผมมันก็ยังช้าลงอยู่ดี T_T)

ปัญหา data retention

  • เครื่องมือ agentic coding จะเรียกประวัติทั้งหมดว่า session และเก็บไว้ใน hidden directory ที่ขึ้นต้นด้วย .
    • Claude Code: ~/.claude/projects/ (JSONL)
    • OpenCode: ~/.local/share/opencode/storage/message/ (JSON แยกไฟล์)
    • Codex CLI: ~/.codex/sessions/ (JSONL แบบ event-based)
    • Gemini CLI: ~/.gemini/tmp/*/chats/ (JSON)
  • Claude Code และ Gemini CLI มี retention period เริ่มต้น 30 วัน และเมื่อครบแล้วข้อมูล session จะถูกลบ
  • หลังรู้เรื่องนี้ คนจำนวนมากรู้สึกเสียดายข้อมูล จึงเขียนวิธีปิดไว้ละเอียดใน README
    • Claude Code: เพิ่ม "cleanupPeriodDays": 9999999999 ใน ~/.claude/settings.json
  • ส่วน OpenCode และ Codex CLI จะเก็บไฟล์ session ทั้งหมดถาวร (ไม่มีฟังก์ชันลบเลย)

การเชื่อมต่อกับ Cursor IDE

  • ตอนนี้เลิกใช้แล้ว แต่เคยใช้ Cursor IDE อยู่ช่วงหนึ่ง (และข้อมูลนี้ก็มีค่าสำหรับผม เลยต้องเชื่อมต่อด้วย)
  • Cursor ไม่ได้ใช้ไฟล์ session ในเครื่อง แต่รองรับการ export CSV ผ่าน API เลยดึงข้อมูลมาได้
  • พบว่าถ้ามี session token (WorkosCursorSessionToken) ก็ยืนยันตัวตนได้ผ่าน developer tools
    • หาได้จาก Cookie header ของคำขอ cursor.com/api/* ในแท็บ Network
    • หรือคัดลอกตรง ๆ จาก Application → Cookies
  • ทำคำสั่งเป็น tokscale cursor login | status | logout เพื่อให้จัดการได้สะอาด

การเชื่อมต่อกับ GitHub (OAuth)

  • ใช้วิธีรับรองตัวตนแบบ Device Flow
  • tokscale login → เปิดเบราว์เซอร์ → กรอกโค้ด → รับโทเค็น
  • อัปโหลดข้อมูลการใช้งานขึ้น leaderboard ด้วย tokscale submit
  • ข้อมูลที่ส่งจะผ่านการตรวจสอบระดับ 1 (ความสอดคล้องทางคณิตศาสตร์, ไม่มีวันที่ในอนาคต, ตรวจจับข้อมูลซ้ำ ฯลฯ)

การคำนวณราคาโทเค็น

  • ดึงข้อมูลราคาแบบเรียลไทม์จากฐานข้อมูลราคาของ LiteLLM (https://github.com/BerriAI/litellm)
  • แคชลงดิสก์ที่ ~/.cache/tokscale/pricing.json โดยมี TTL 1 ชั่วโมง
  • รองรับการคำนวณแยกสำหรับ input/output/cache read/cache write/reasoning token
  • รองรับ tiered pricing ด้วย (เกิน 200k โทเค็น)

Wrapped 2025

  • ฟีเจอร์สร้างภาพสรุปประจำปีที่ได้แรงบันดาลใจจาก Spotify Wrapped (รอติดตามปลายปี)
  • รัน tokscale wrapped แล้วจะสร้างภาพ PNG
  • ใช้ @napi-rs/canvas (https://github.com/Brooooooklyn/canvas) สำหรับเรนเดอร์ภาพ และ @resvg/resvg-js (https://github.com/nicklockwood/resvg-js) สำหรับแปลง SVG → PNG
  • ดาวน์โหลดและแคชฟอนต์ Figtree จาก Google Fonts
  • เนื้อหาที่ใส่: โทเค็นรวม, Top 3 โมเดล, Top 3 ไคลเอนต์, Top 3 เอเจนต์, จำนวนข้อความ, จำนวนวันที่มีการใช้งาน, ค่าใช้จ่าย, สตรีก, contribution graph

คอขวดและเรื่องที่กำลังคิด

  • ตอนนี้ต้องดึงจากเครื่องโลคัลทุกครั้งจึงช้า และการต้องอัปโหลดลงฐานข้อมูลก็ยังหนัก
  • ปัจจุบันกำลังพิจารณา incremental submission แบบอิง diff โดยจะสร้างแฮชรายวันแล้วอัปโหลดเฉพาะส่วนที่เปลี่ยนไป เพื่อเปิดทางให้ข้อมูลของวันในอดีตยังแก้ไขได้

โค้ดทั้งหมดทำโดย Oh-My-OpenCode

  • จริง ๆ แล้วแทบทุกบรรทัดเขียนโดยเอเจนต์
  • มีคอมมิตมากกว่า 423 รายการ รวม README 4 ภาษา (EN, KO, JA, ZH-CN)
  • อัปโหลดสกรีนช็อตหลายรูปขึ้น GitHub เพื่อให้หน้าดูสวย (อันนี้ยอมรับว่ามีมือคนช่วยอยู่บ้าง แต่ก็มั่นใจว่าในช่วงที่สร้างโปรเจ็กต์ทั้งหมด เวลาที่เปิด IDE แล้วลงมือเขียนโค้ดเองนั้นรวมกันยังไม่ถึง 30 นาที)

1 ความคิดเห็น

 
roxie 2025-12-26

อยากทราบว่าได้สั่งงานให้ LLM ไปประมาณกี่ครั้งจนกว่าโปรเจ็กต์จะเสร็จสมบูรณ์