CryptozTab — AI Code Autocomplete
CryptozTab คือ VSCode Extension ที่ให้ AI เติมโค้ดเป็น ghost text กด Tab เพื่อยืนยัน — ใช้ Inline Completion API ของ VSCode โดยตรง และเชื่อมต่อกับ OpenAI-compatible API ใดก็ได้ (OpenAI, local LLM, หรือ provider อื่น)
[!NOTE]
ต้องใช้ VS Code เวอร์ชัน 1.90.0 ขึ้นไป (ใช้ global fetch จาก Node 18+)
ฟีเจอร์
- Autocomplete ทุกภาษา ผ่าน OpenAI-compatible
/chat/completions
- ส่ง context รอบ cursor: ก่อน cursor ~2000 ตัวอักษร, หลัง cursor ~500 ตัวอักษร, ชื่อไฟล์/ภาษา (FIM-style prompt)
- Debounce 300ms ต่อ keystroke, ยกเลิก request เก่าเมื่อพิมพ์ต่อ, cache ผลลัพธ์ล่าสุดต่อ (uri, position, prefix)
- Status bar:
$(sparkle) CryptozTab (spinner ระหว่างโหลด, Setting up... ตอน setup) — คลิกเพื่อเปิดเมนู
- Error handling: 401/403 แจ้ง "API key ไม่ถูกต้อง" (cooldown 60s), network error แสดงใน status bar (log ใน output channel
CryptozTab)
- ความปลอดภัย: API key เก็บใน Secret Storage ของ VS Code (ไม่ถูกเก็บลง settings.json)
เริ่มใช้งานแบบไม่มี key (แนะนำ — Ollama)
- ติดตั้ง Ollama — extension ตรวจและติดตั้งให้อัตโนมัติครั้งแรก (ถาม consent ผ่าน modal ก่อนเสมอ, ใช้ winget)
ollama pull qwen2.5-coder:1.5b — extension ดึงให้เองถ้ายังไม่มี
- Provider
ollama เป็น default ตั้งแต่ติดตั้ง — จบ ไม่ต้องใช้ key อะไรเลย
Provider Presets
เลือกผ่าน command CryptozTab: Select Provider หรือคลิก status bar → Select Provider
| Provider |
Base URL |
Default model |
ต้องใช้ key |
ollama (default) |
http://localhost:11434/v1 |
qwen2.5-coder:1.5b |
ไม่ |
openai |
https://api.openai.com/v1 |
gpt-4o-mini |
ใช่ |
openrouter |
https://openrouter.ai/api/v1 |
deepseek/deepseek-chat-v3.1:free |
ใช่ |
groq |
https://api.groq.com/openai/v1 |
llama-3.3-70b-versatile |
ใช่ |
custom |
กรอกเองใน apiBaseUrl |
กรอกเองใน model |
ตาม server |
ผู้ใช้ override model เองได้ทุก provider (โดยตั้ง cryptoztab.model)
การตั้งค่า
เปิด Settings แล้วค้นหา cryptoztab:
| Key |
Default |
คำอธิบาย |
cryptoztab.provider |
ollama |
provider preset (openai/openrouter/groq/ollama/custom) |
cryptoztab.apiBaseUrl |
https://api.openai.com/v1 |
Base URL (ใช้เมื่อ provider = custom) |
cryptoztab.model |
gpt-4o-mini |
ชื่อโมเดล (override default ของ provider) |
cryptoztab.maxTokens |
100 |
token สูงสุดของ completion |
cryptoztab.debounceMs |
300 |
หน่วงก่อนยิง request (ms) |
cryptoztab.timeoutMs |
10000 |
timeout ต่อ request (ms) |
cryptoztab.enabled |
true |
เปิด/ปิด autocomplete |
cryptoztab.apiKey |
"" |
API key (fallback แบบอ่านอย่างเดียว — แนะนำตั้งผ่าน command) |
วิธีใช้
- เลือก provider (default Ollama ไม่ต้องใช้ key / provider อื่นตั้ง key ผ่าน
CryptozTab: Set API Key — เก็บใน Secret Storage)
- เริ่มพิมพ์โค้ด — จะมี ghost text ปรากฏขึ้น กด Tab เพื่อยืนยัน
- เปิด/ปิด เลือก provider หรือตั้ง key ได้จากเมนูเดียว: คลิก status bar หรือ command
CryptozTab: Open Menu
Commands
| Command |
ID |
| CryptozTab: Open Menu |
cryptoztab.menu |
| CryptozTab: Select Provider |
cryptoztab.selectProvider |
| CryptozTab: Set API Key |
cryptoztab.setApiKey |
| CryptozTab: Toggle Enable/Disable |
cryptoztab.toggle |
การพัฒนา (Development)
npm install
npm run compile # build ด้วย tsc (ไม่ใช้ bundler)
npm test # รัน test ผ่าน @vscode/test-electron + mocha
[!TIP]
ถ้า path ของโปรเจกต์มีช่องว่าง อาจพบปัญหากับ @vscode/test-electron บน Windows
(spawn ผ่าน shell แล้วไม่ escape argument) — แนะนำสร้าง junction ที่ไม่มีช่องว่างแล้วรัน npm test ผ่าน path นั้นแทน
โครงสร้างโค้ด
src/extension.ts — entry point, ลงทะเบียน provider/commands
src/inlineProvider.ts — InlineCompletionItemProvider + debounce/cache
src/apiClient.ts — เรียก /chat/completions
src/prompt.ts — สร้าง FIM prompt (unit-testable)
src/statusBar.ts — status bar item
src/config.ts — settings + provider presets (resolveProvider)
src/ollama.ts — Ollama CLI helpers (testable, mock exec ได้)
src/onboarding.ts — auto setup Ollama ครั้งแรก (consent modal + winget/pull)
License
MIT © 2026 CryptozDev
| |