Claude Code: สถาปัตยกรรมระบบ Command

🇹🇭 Thai claude-codecommandsarchitectureanalysisthai
📋 Table of Contents (14 sections)
  1. ระบบคำสั่ง (Commands System)
  2. ภาพรวม
  3. โครงสร้างคำสั่ง
  4. รูปแบบการลงทะเบียนคำสั่ง
  5. หมวดหมู่คำสั่ง
  6. การไหลของการดำเนินการคำสั่ง
  7. การค้นหาคำสั่ง
  8. แนวปฏิบัติที่ดีของคำสั่ง
  9. ตัวอย่างคำสั่ง
  10. การกรองคำสั่ง
  11. แนวปฏิบัติที่ดีของคำสั่ง
  12. ข้อควรพิจารณาด้านความปลอดภัย
  13. กลไกการค้นหาคำสั่ง
  14. การผสานรวมคำสั่งกับเครื่องมือ

ระบบคำสั่ง (Commands System)

ภาพรวม

ระบบคำสั่งให้ ~85 คำสั่ง slash สำหรับการโต้ตอบของผู้ใช้ คำสั่งถูกเรียกใช้ด้วยไวยากรณ์ /command ในอินเทอร์เฟซ terminal

โครงสร้างคำสั่ง

src/commands/
├── commitCommand.ts - การอัตโนมัติ commit ของ Git
├── mcpCommand.ts - การจัดการเซิร์ฟเวอร์ MCP
├── memoryCommand.ts - การจัดการหน่วยความจำ
├── reviewCommand.ts - การอัตโนมัติ review โค้ด
├── [85+ ไฟล์คำสั่ง]
└── index.ts - การลงทะเบียนคำสั่ง

รูปแบบการลงทะเบียนคำสั่ง

ทุกคำสั่งใช้รูปแบบการลงทะเบียนที่สม่ำเสมอ:

// ตัวอย่าง: commitCommand.ts
import { buildCommand } from '../commands.js';

export const commitCommand = buildCommand({
  name: 'commit',
  description: 'สร้าง commit ของ Git ด้วยความช่วยเหลือของ AI',
  parameters: z.object({
    message: z.string().optional(),
    amend: z.boolean().optional(),
  }),
  async handler(args, context) {
    // ตรรกะการดำเนินการของคำสั่ง
    await performCommit(args, context);
  },
});

หมวดหมู่คำสั่ง

คำสั่งสำหรับควบคุมเวอร์ชัน

  • /commit - สร้าง commit ของ Git
  • /diff - แสดงความแตกต่างของไฟล์
  • /status - ภาพรวมสถานะ Git

คำสั่ง MCP

  • /mcp add - เพิ่มเซิร์ฟเวอร์ MCP
  • /mcp list - แสดงรายการเซิร์ฟเวอร์ MCP
  • /mcp remove - ลบเซิร์ฟเวอร์ MCP

คำสั่งหน่วยความจำ

  • /memory add - เพิ่มในหน่วยความจำ
  • /memory list - แสดงรายการในหน่วยความจำ
  • /memory clear - ล้างหน่วยความจำ

คำสั่งการดีบัก

  • /debug - เปิดโหมดดีบัก
  • /profile - การโปรไฟล์ประสิทธิภาพ

คำสั่งระบบ

  • /help - แสดงความช่วยเหลือ
  • /tips - แสดงเคล็ดลับการใช้งาน
  • /version - แสดงข้อมูลเวอร์ชัน

การไหลของการดำเนินการคำสั่ง

1. ผู้ใช้พิมพ์ /command [args]
2. ระบบคำสั่งวิเคราะห์ input
3. พารามิเตอร์ถูกตรวจสอบตาม schema
4. handler() ดำเนินการตรรกะของคำสั่ง
5. ผลลัพธ์แสดงแก่ผู้ใช้
6. สถานะถูกอัปเดต (ถ้ามี)

การค้นหาคำสั่ง

คำสั่งถูกค้นหาและลงทะเบียนผ่าน:

// src/commands.ts
export function getCommands(): Command[] {
  const commands: Command[] = [];
  commands.push(commitCommand);
  commands.push(mcpCommand);
  commands.push(memoryCommand);
  // ... คำสั่งอื่นๆ ทั้งหมด
  return commands;
}

แนวปฏิบัติที่ดีของคำสั่ง

  1. การออกแบบโมดูลาร์: แต่ละคำสั่งแยกออกมาเป็นอิสระ
  2. การตรวจสอบพารามิเตอร์: การบังคับใช้ schema ที่เข้มงวด
  3. การอัปเดตสถานะ: คำสั่งสามารถอัปเดตสถานะของแอป
  4. การจัดการข้อผิดพลาด: การลดผลกระทบจากข้อผิดพลาดอย่างนุ่มนวล
  5. การผสานรวมกับ UI: คำสั่งสามารถเรียกใช้ส่วนประกอบ UI

ตัวอย่างคำสั่ง

คำสั่ง Git Commit

export const commitCommand = buildCommand({
  name: 'commit',
  description: 'สร้าง commit ของ Git ด้วยความช่วยเหลือของ AI',
  parameters: z.object({
    message: z.string().optional().describe('ข้อความ commit'),
    amend: z.boolean().optional().describe('แก้ไข commit ก่อนหน้า'),
  }),
  async handler(args, context) {
    // Stage การเปลี่ยนแปลง
    await execGitCommand('git add .');
    
    // สร้าง commit
    const msg = args.message || 'Auto-commit';
    const flag = args.amend ? '--amend' : '';
    await execGitCommand(`git commit -m "${msg}" ${flag}`);
    
    // อัปเดตสถานะ
    context.setAppState(prev => ({
      ...prev,
      lastCommitMessage: msg,
    }));
  },
});

คำสั่ง MCP Add

export const mcpAddCommand = buildCommand({
  name: 'mcp add',
  description: 'เพิ่มการตั้งค่าเซิร์ฟเวอร์ MCP',
  parameters: z.object({
    name: z.string().describe('ชื่อเซิร์ฟเวอร์'),
    command: z.string().describe('คำสั่งของเซิร์ฟเวอร์'),
  }),
  async handler(args, context) {
    const serverConfig = {
      name: args.name,
      command: args.command,
    };
    
    // เพิ่มในค่าการตั้งค่า MCP
    await addMcpServer(serverConfig);
    
    // รีเฟรช clients ของ MCP
    await refreshMcpClients();
  },
});

การกรองคำสั่ง

คำสั่งสามารถถูกกรองตามบริบทเฉพาะ:

// กรองคำสั่งสำหรับโหมด remote
export function filterCommandsForRemoteMode(commands: Command[]): Command[] {
  return commands.filter(cmd =>
    !cmd.name.startsWith('local-')
  );
}

แนวปฏิบัติที่ดีของคำสั่ง

  1. การออกแบบโมดูลาร์: แต่ละคำสั่งแยกออกมาเป็นอิสระ
  2. การตรวจสอบพารามิเตอร์: การบังคับใช้ schema ที่เข้มงวด
  3. การอัปเดตสถานะ: คำสั่งสามารถแก้ไขสถานะของแอป
  4. การลดผลกระทบจากข้อผิดพลาด: การจัดการข้อผิดพลาดอย่างนุ่มนวล
  5. การตอบกลับของ UI: คำสั่งให้การตอบกลับแบบภาพ

ข้อควรพิจารณาด้านความปลอดภัย

  1. การตรวจสอบ Permission: คำสั่งเคารพโหมด permission
  2. ไดเรกทอรีการทำงาน: คำสั่งเคารพข้อจำกัดของ cwd
  3. Feature Flags: ความพร้อมใช้งานของคำสั่งตามเงื่อนไข
  4. Lazy Loading: โหลดคำสั่งหนักเมื่อต้องการ
  5. ขอบเขตข้อผิดพลาด: การจัดการข้อผิดพลาดแบบแยกออกมา

กลไกการค้นหาคำสั่ง

คำสั่งถูกค้นหาอัตโนมัติจากไดเรกทอรี commands:

// การโหลดคำสั่งอัตโนมัติ
const commandFiles = glob('src/commands/*.ts');
for (const file of commandFiles) {
  const command = require(file).default;
  commands.push(command);
}

การผสานรวมคำสั่งกับเครื่องมือ

คำสั่งสามารถเรียกใช้เครื่องมือ:

async handler(args, context) {
  // เรียกใช้เครื่องมือจากในคำสั่ง
  const result = await context.tools.find(t => t.name === 'BashTool')
    .call({ command: 'git status' }, context);
  
  // แสดงผลลัพธ์
  context.setAppState(prev => ({
    ...prev,
    commandOutput: result,
  }));
}
← Back to claudecodeanalysis