JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 15
  • Score
    100M100P100Q33174F
  • License MIT

A developer widget for debugging, monitoring, and visualizing Gemini CLI operations.

Package Exports

  • xo-gemini-cli-devtools
  • xo-gemini-cli-devtools/dist/style.css
  • xo-gemini-cli-devtools/style.css

Readme

๐Ÿ“˜ Gemini CLI DevTools

Gemini CLI DevTools๋Š” Google Gemini API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น…, ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง, ๊ทธ๋ฆฌ๊ณ  ํ”„๋กฌํ”„ํŠธ ํ˜•์ƒ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜ค๋ฒ„๋ ˆ์ด ์œ„์ ฏ์ž…๋‹ˆ๋‹ค.

๐Ÿ“ฆ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• (NPM Package)

์„ค์น˜

npm install xo-gemini-cli-devtools
# or
yarn add xo-gemini-cli-devtools

์ ์šฉ

React ํ”„๋กœ์ ํŠธ์˜ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ(์˜ˆ: App.tsx ๋˜๋Š” main.tsx)์— ์œ„์ ฏ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์Šคํƒ€์ผ์„ import ํ•˜์„ธ์š”.

import React from 'react';
import { DevToolsWidget } from 'xo-gemini-cli-devtools';
import 'xo-gemini-cli-devtools/style.css'; // ์Šคํƒ€์ผ import ํ•„์ˆ˜

function App() {
  return (
    <div>
      {/* ๊ธฐ์กด ์•ฑ ๋‚ด์šฉ */}
      <MyApplicationContent />
      
      {/* DevTools ์œ„์ ฏ ์ถ”๊ฐ€ */}
      <DevToolsWidget />
    </div>
  );
}

### ํ™˜๊ฒฝ ์„ค์ • (Environment Configuration)

์ด ์œ„์ ฏ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ **๊ฐœ๋ฐœ ํ™˜๊ฒฝ(Development Environment)**์—์„œ๋งŒ ๋ Œ๋”๋ง๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
`process.env.NODE_ENV !== 'production'`์ผ ๋•Œ๋งŒ ํ™”๋ฉด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ(Staging ๋“ฑ)์—์„œ ๊ฐ•์ œ๋กœ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด `enabled` ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

```tsx
// ํ•ญ์ƒ ํ™œ์„ฑํ™” (์ฃผ์˜: ์‹ค์ œ ์„œ๋น„์Šค ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ)
<DevToolsWidget enabled={true} />

// ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ ํ™œ์„ฑํ™” (์˜ˆ: ๊ด€๋ฆฌ์ž)
<DevToolsWidget enabled={isAdminUser} />

๐Ÿ›  ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ

์ด ํŒจํ‚ค์ง€๋Š” NPM ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ๋ฏธ๋ฆฌ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋นŒ๋“œ (dist ํด๋” ์ƒ์„ฑ)
npm run build

# NPM ๋ฐฐํฌ (๋กœ๊ทธ์ธ ํ•„์š”)
npm publish

1. ์‹œ์ž‘ํ•˜๊ธฐ

์œ„์ ฏ ์‹คํ–‰

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋ฉด ํ™”๋ฉด ์šฐ์ธก ํ•˜๋‹จ์— ์ปค๋งจ๋“œ(Command) ์•„์ด์ฝ˜ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ DevTools ํŒจ๋„์„ ์—ด๊ฑฐ๋‚˜ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด ์„ค์ • (Localization)

์œ„์ ฏ ์ƒ๋‹จ์˜ KO/EN ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ํ•œ๊ตญ์–ด์™€ ์˜์–ด ๋ชจ๋“œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

API ํ‚ค ์„ค์ •

  • ์‹ค์ œ ๋™์ž‘ ๋ชจ๋“œ: .env ํŒŒ์ผ์— API_KEY๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์‹ค์ œ Gemini API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ชจ๋“œ: ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๊ฐ€์ƒ์˜ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ UI/UX๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ƒ๋‹จ์— ๐ŸŸก ๋…ธ๋ž€์ƒ‰ ์—ด์‡  ์•„์ด์ฝ˜์œผ๋กœ ํ‘œ์‹œ๋จ)

2. ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ’ฌ ์ฑ„ํŒ… ๋ฐ ์ปค๋งจ๋“œ ๊ด€๋ฆฌ (Chat & Command Library)

๋‹จ์ˆœํ•œ 1ํšŒ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ๋„˜์–ด, ๋Œ€ํ™”ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ž์ฃผ ์“ฐ๋Š” ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ €์žฅ/๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  1. ์ฑ„ํŒ… (Chat Interface)

    • ํ™”๋ฉด ํ•˜๋‹จ์˜ ์ž…๋ ฅ์ฐฝ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๊ณ  Enter ๋˜๋Š” ์ „์†ก(Send) ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Gemini์™€ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด์ „ ๋Œ€ํ™” ๋‚ด์—ญ์ด ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋ธ ์„ ํƒ: ์ƒ๋‹จ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ gemini-2.5-flash, gemini-3-pro ๋“ฑ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปค๋งจ๋“œ ์ €์žฅ (ํ˜•์ƒ ๊ด€๋ฆฌ)

    • ์ž…๋ ฅ์ฐฝ์— ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž…๋ ฅ์ฐฝ ์šฐ์ธก ํ•˜๋‹จ์— ์ €์žฅ(๐Ÿ’พ) ์•„์ด์ฝ˜์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
    • ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๊ณ  **์ปค๋งจ๋“œ ์ด๋ฆ„(์˜ˆ: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ…œํ”Œ๋ฆฟ)**์„ ์ž…๋ ฅํ•œ ๋’ค + ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  3. ์ปค๋งจ๋“œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋ฐ ๊ด€๋ฆฌ

    • ์ขŒ์ธก์˜ ์ฑ…(๐Ÿ“–) ์•„์ด์ฝ˜ ์‚ฌ์ด๋“œ๋ฐ”์— ์ €์žฅ๋œ ์ปค๋งจ๋“œ ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • ์ €์žฅ๋œ ํ•ญ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด ์ž…๋ ฅ์ฐฝ์— ํ•ด๋‹น ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ฆ‰์‹œ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
    • ๋ถˆํ•„์š”ํ•œ ์ปค๋งจ๋“œ๋Š” ํ•ญ๋ชฉ ์šฐ์ธก์˜ ํœด์ง€ํ†ต ์•„์ด์ฝ˜์„ ๋ˆŒ๋Ÿฌ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Ÿ ์ฝ˜์†” (Console)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Gemini API ๊ฐ„์˜ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ํ•„ํ„ฐ๋ง: ์ƒ๋‹จ์˜ ๊ฒ€์ƒ‰๋ฐ”๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜, INFO, ERROR ๋“ฑ์˜ ๋ ˆ๋ฒจ ๋ฒ„ํŠผ์œผ๋กœ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ™•์ธ: ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด ์ „์†ก๋œ ํ”„๋กฌํ”„ํŠธ ๋‚ด์šฉ, ํ† ํฐ ์ˆ˜, ์—๋Ÿฌ ์ƒ์„ธ ๋‚ด์šฉ ๋“ฑ ์ˆจ๊ฒจ์ง„ JSON ๋ฐ์ดํ„ฐ๋ฅผ ํŽผ์ณ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™ ์Šคํฌ๋กค: ์ƒˆ๋กœ์šด ๋กœ๊ทธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ž๋™์œผ๋กœ ์ตœํ•˜๋‹จ์œผ๋กœ ์Šคํฌ๋กค๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ์ง€ํ‘œ (Metrics)

API ํ˜ธ์ถœ ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • Latency Chart: API ์‘๋‹ต ์†๋„(ms) ์ถ”์ด๋ฅผ ๊บพ์€์„  ๊ทธ๋ž˜ํ”„๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • Token Usage: ์š”์ฒญ๋ณ„ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์•ฝ ์ •๋ณด: ์ด ์š”์ฒญ ์ˆ˜, ํ‰๊ท  ์ง€์—ฐ ์‹œ๊ฐ„, ์ด ์‚ฌ์šฉ ํ† ํฐ ์ˆ˜ ๋“ฑ์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โš™๏ธ ์ƒํƒœ (State)

CLI ๋ฐ ์œ„์ ฏ์˜ ๋‚ด๋ถ€ ์ƒํƒœ(State)๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋‚ ๊ฒƒ ๊ทธ๋Œ€๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ์‹œ ํ˜„์žฌ ์ƒํƒœ ๊ฐ’์ด ๊ผฌ์˜€๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


3. ๋‹จ์ถ•ํ‚ค ๋ฐ ํŒ

  • ์ „์†ก: ์ž…๋ ฅ์ฐฝ์—์„œ Enter
  • ์ค„๋ฐ”๊ฟˆ: ์ž…๋ ฅ์ฐฝ์—์„œ Shift + Enter
  • ๋กœ๊ทธ ๋น„์šฐ๊ธฐ: ์ฝ˜์†” ํƒญ ์ƒ๋‹จ์˜ ํœด์ง€ํ†ต ์•„์ด์ฝ˜
  • ์ฐฝ ์ตœ์†Œํ™”: ์œ„์ ฏ ์ƒ๋‹จ์˜ - ์•„์ด์ฝ˜ (์ž‘์€ ๋ฐ”๋กœ ์ถ•์†Œ๋˜์–ด ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉํ•ด๋ฅผ ์ตœ์†Œํ™”ํ•จ)