{"_id":"@callakrsos/mycli","name":"@callakrsos/mycli","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@callakrsos/mycli","version":"1.0.0","description":"My cli service.","main":"index.js","type":"module","scripts":{"start":"node index.js","test":"node test/test-new-features.js","test:integration":"node test/test-integration.js","test:all":"node test/test-new-features.js && node test/test-integration.js","test:coverage":"c8 --reporter=text --reporter=html --include=index.js --include=lib/**/*.js node test/test-new-features.js"},"keywords":[],"author":"","license":"ISC","dependencies":{"@langchain/classic":"^1.0.15","@langchain/core":"^1.1.19","@langchain/google-genai":"^2.1.15","@langchain/ollama":"^1.2.2","@langchain/openai":"^1.2.5","chalk":"^5.6.2","commander":"^14.0.3","dotenv":"^17.2.4","express":"^4.17.1","glob":"^13.0.1","inquirer":"^13.2.2","zod":"^4.3.6"},"bin":{"mycli":"index.js"},"devDependencies":{"c8":"^11.0.0"},"gitHead":"30ce15990675bf291313be7c69b8971fa39fc12f","_id":"@callakrsos/mycli@1.0.0","_nodeVersion":"22.14.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-4YlPDlJpHP5KUc+6fg+XxztHLKPDdt6Wv+v3/5RXtBKAaGZoQ78p3Fuxs1QxqNhiAYbNaNj7qyG39Bck3VDSVw==","shasum":"b466a843a614da158ae3e1fd59a65e6cf802561e","tarball":"https://registry.npmjs.org/@callakrsos/mycli/-/mycli-1.0.0.tgz","fileCount":25,"unpackedSize":168025,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBh8t4pmU3Duxn/OcGTMSmh3DS+1UE0849NMJVYY4Y5MAiAddfybBMFevYEBtUSw3aJHMssGkt8KONKNo9j1Z5rDzg=="}]},"_npmUser":{"name":"callakrsos","email":"callakrsos@naver.com"},"directories":{},"maintainers":[{"name":"callakrsos","email":"callakrsos@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mycli_1.0.0_1775354022049_0.323435939494765"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-05T01:53:41.976Z","1.0.0":"2026-04-05T01:53:42.208Z","modified":"2026-04-05T01:53:42.393Z"},"maintainers":[{"name":"callakrsos","email":"callakrsos@naver.com"}],"description":"My cli service.","keywords":[],"license":"ISC","readme":"# MyCLI - AI 기반 CLI 에이전트\n\n`MyCLI`는 LangChain.js를 기반으로 구축된 대화형 AI 커맨드 라인 에이전트입니다. Google Gemini, OpenAI, Ollama 등 다양한 언어 모델을 지원하며, 파일 시스템 탐색·수정, 코드 직접 실행, 셸 명령어 실행, MCP 서버 연동, 스킬 시스템 등 개발 작업에 필요한 도구를 제공합니다.\n\n## 프로젝트 구조\n\n```\nmycli/\n├── index.js              # 메인 진입점 (REPL 루프, @ 파일 첨부, 멀티라인 입력)\n├── lib/\n│   ├── agent.js          # LLM 모델 팩토리, AgentExecutor 생성\n│   ├── commands.js       # 슬래시 명령어 등록 (/help, /model, /plan 등)\n│   ├── tools.js          # AI 도구 정의 (read/write/edit/grep/git/execute_code 등)\n│   ├── ui.js             # 스피너, readline 프롬프트, Tab 자동완성\n│   ├── code-manager.js   # 파일 변경 이력, undo 관리\n│   ├── diff.js           # LCS 기반 라인 diff 렌더링\n│   ├── state.js          # 공유 상태 (BASE_DIR, planModeState, readFileState)\n│   ├── utils.js          # 보안 유틸리티 (getSafePath, getTimestamp)\n│   ├── history.js        # 명령어 히스토리 (↑↓ 탐색)\n│   ├── skills.js         # 스킬 시스템 (SKILL.md 로드·실행)\n│   ├── context.js        # 프로젝트 컨텍스트 파일 로드 (mycli.md)\n│   ├── mcp.js            # MCP(Model Context Protocol) 클라이언트\n│   └── ux-manager.js     # 별칭(alias), 명령어 추천, 페이지네이션\n├── mcps/                 # MCP 서버 설정 파일 (*.json)\n├── search/               # @ 파일 선택 UI (inquirer/search 기반)\n├── docs/                 # 개발 문서\n└── .mycli/\n    └── skills/           # 로컬 스킬 디렉터리\n```\n\n## ✨ 주요 기능\n\n### AI 도구\n\n| 도구 | 설명 |\n|------|------|\n| `read_file` | 파일 내용을 읽습니다. `offset`/`limit`으로 줄 범위 지정 가능 |\n| `write_file` | 파일 생성·전체 수정. read-before-write 강제, diff 미리보기 후 확인 |\n| `edit_file` | 파일의 특정 문자열만 교체. `replace_all` 옵션 지원 |\n| `glob_files` | 글로브 패턴으로 파일 검색 (최근 수정 순 정렬) |\n| `grep_files` | 정규식으로 파일 내용 검색. ripgrep 우선, JS 폴백 |\n| `execute_shell_command` | 안전 모드에서 셸 명령어 실행 |\n| `execute_code` | Node.js 코드를 직접 작성하여 샌드박스에서 실행 |\n| `install_package` | npm 패키지를 샌드박스에 설치 |\n| `git_status` | git 상태 확인 |\n| `git_diff` | git diff 출력 |\n| `git_log` | git 커밋 로그 출력 |\n| `enter_plan_mode` / `exit_plan_mode` | 계획 모드 진입/종료. 계획 모드에서는 파일 수정·명령 실행이 차단됨 |\n| `use_skill` | 등록된 스킬을 AI가 직접 호출 |\n\n### 슬래시 명령어\n\n| 명령어 | 설명 |\n|--------|------|\n| `/help` | 사용 가능한 명령어 목록 출력 |\n| `/status` | BASE_DIR, 모델, 스킬 등 현재 상태 출력 |\n| `/model [provider]` | 모델 전환 (`gemini` \\| `gpt` \\| `ollama`) |\n| `/clear` | 대화 기록 초기화 및 화면 지우기 |\n| `/compact` | 대화 기록을 AI로 요약하여 압축 |\n| `/list` | 현재 세션 대화 기록 출력 |\n| `/save` | 대화 내용을 Markdown 파일로 저장 |\n| `/session-save [name]` | 세션을 JSON으로 저장 |\n| `/session-load [name]` | 저장된 세션 불러오기 (생략 시 목록) |\n| `/basedir <path>` | 작업 디렉터리(BASE_DIR) 변경 |\n| `/plan` | 계획 모드 진입 |\n| `/plan-exit` | 계획 모드 종료 및 계획 제출 |\n| `/plan-status` | 계획 모드 상태 확인 |\n| `/recent [n]` | 최근 파일 작업 이력 출력 (기본 15건) |\n| `/undo` | 마지막 파일 수정 되돌리기 |\n| `/tree [path]` | 디렉터리 트리 출력 (`--depth N` 지원) |\n| `/alias [name] [cmd]` | 별칭 조회·등록 (`-d name`으로 삭제) |\n| `/<skill-name>` | 스킬 직접 실행 |\n| `/exit` | CLI 종료 |\n\n### 파일 컨텍스트 대화 (`@`)\n\n`@` 기호로 파일을 첨부하여 AI와 대화할 수 있습니다.\n\n```\nKYJ_AI > @package.json 이 파일의 의존성을 분석해줘\n```\n\n- 입력 중 `@`를 타이핑하면 즉시 파일 선택 UI가 열립니다.\n- 여러 파일을 동시에 첨부할 수 있습니다: `@index.js @lib/tools.js 비교해줘`\n\n### 멀티라인 입력\n\n`\"\"\"` 를 단독으로 입력하면 멀티라인 모드로 전환됩니다. 끝내려면 다시 `\"\"\"` 를 입력합니다.\n\n```\nKYJ_AI > \"\"\"\n  (멀티라인 모드: 입력 완료 후 새 줄에 \"\"\" 입력)\n  ... 긴 프롬프트를 여러 줄로 작성\n  ... \"\"\"\n```\n\n### execute_code — AI 코드 실행\n\nAI가 직접 Node.js 코드를 작성하고 격리된 샌드박스(`os.tmpdir()/mycli-sandbox/`)에서 실행합니다. 파일 변환, 데이터 가공 등 기존 도구로 처리하기 어려운 작업에 활용됩니다.\n\n```\nKYJ_AI > AI_report.md 파일을 Word 문서로 변환해줘\n```\n\nAI가 코드를 실행하기 전에 내용을 미리보기로 보여주고 확인을 요청합니다.\n\n### 스킬 시스템\n\n`~/.mycli/skills/` 또는 `./.mycli/skills/` 디렉터리에 스킬을 등록합니다.\n\n```\n.mycli/skills/\n└── my-skill/\n    └── SKILL.md\n```\n\n`SKILL.md` 형식:\n```markdown\n---\nname: my-skill\ndescription: 스킬 설명\ndisable-model-invocation: false\n---\n\n$ARGUMENTS 에 대해 분석해주세요.\n```\n\n- `$ARGUMENTS`: 슬래시 명령어 실행 시 인자로 치환됩니다.\n- `disable-model-invocation: true`: AI 자동 호출 비활성화 (수동 `/명령어`로만 실행).\n\n### MCP 서버 연동\n\n`mcps/` 디렉터리에 JSON 설정 파일을 추가하면 MCP 서버의 도구가 자동으로 로드됩니다.\n\n```json\n{\n  \"name\": \"my-server\",\n  \"command\": \"node my-mcp-server.js\",\n  \"args\": []\n}\n```\n\n로드된 MCP 도구는 `mcp_<서버명>_<도구명>` 형태로 AI에게 제공됩니다.\n\n### 계획 모드 (Plan Mode)\n\n복잡한 작업 전에 AI가 먼저 코드베이스를 탐색하고 구현 계획을 수립하도록 강제합니다.\n\n- 계획 모드 진입 시 `write_file`, `execute_shell_command`, `execute_code` 차단\n- AI가 `exit_plan_mode`로 계획을 제출하면 사용자가 **승인 / 거절 / 피드백** 선택\n- 승인 후에만 실제 구현 진행\n\n## ⚙️ 요구 사항\n\n- Node.js v18 이상\n- npm\n\n## 🚀 설치 및 설정\n\n### npm으로 전역 설치\n\n```bash\nnpm install -g mycli\n```\n\n### 소스에서 직접 실행\n\n```bash\ngit clone <repository-url>\ncd mycli\nnpm install\n```\n\n### 환경 변수 설정\n\n`.env` 파일을 생성합니다 (`.env_example` 참고):\n\n```env\n# AI 공급자 선택 (gemini | gpt | ollama), 기본값: gemini\nMYCLI_PROVIDER=gemini\n\n# Google Gemini (기본값)\nGOOGLE_API_KEY=YOUR_GEMINI_API_KEY\n\n# OpenAI\nOPENAI_API_KEY=YOUR_OPENAI_API_KEY\n\n# Ollama (로컬)\nOLLAMA_BASE_URL=http://localhost:11434\nOLLAMA_MODEL=gemma2:9b\n\n# 작업 디렉터리 (미설정 시 CLI 실행 경로)\nMYCLI_WORKDIR=C:\\Users\\yourname\\workspace\n```\n\n## ▶️ 사용법\n\n```bash\n# npm 전역 설치 후\nmycli\n\n# 소스에서 직접 실행\nnode index.js\n```\n\n## 🔒 보안\n\n- `BASE_DIR` 외부 경로 접근 차단 (경로 탈출 방지)\n- `rm -rf`, `del`, `sudo`, `shutdown` 등 위험 명령어 차단\n- 파일 수정 시 read-before-write 강제 및 외부 수정 감지 (mtime 기반)\n- `execute_code`는 격리된 샌드박스 디렉터리에서만 실행\n- 계획 모드에서 파일 수정·명령 실행 차단\n\n## 📄 라이선스\n\n이 프로젝트는 [Apache 2.0 License](LICENSE.txt)를 따릅니다.\n","readmeFilename":"README.md","_rev":"1-8ce5f22c4ff6cc307ada1d994fa2139a"}