clitrigger 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +124 -100
  2. package/README_KR.md +243 -0
  3. package/dist/client/assets/index-BiXO2oR3.js +541 -0
  4. package/dist/client/assets/index-tGOot928.css +1 -0
  5. package/dist/client/index.html +2 -2
  6. package/dist/server/data/cli-models-registry.json +34 -0
  7. package/dist/server/db/queries.d.ts +95 -48
  8. package/dist/server/db/queries.d.ts.map +1 -1
  9. package/dist/server/db/queries.js +328 -129
  10. package/dist/server/db/queries.js.map +1 -1
  11. package/dist/server/db/schema.d.ts.map +1 -1
  12. package/dist/server/db/schema.js +67 -35
  13. package/dist/server/db/schema.js.map +1 -1
  14. package/dist/server/index.d.ts.map +1 -1
  15. package/dist/server/index.js +27 -13
  16. package/dist/server/index.js.map +1 -1
  17. package/dist/server/lib/git.d.ts +3 -0
  18. package/dist/server/lib/git.d.ts.map +1 -0
  19. package/dist/server/lib/git.js +7 -0
  20. package/dist/server/lib/git.js.map +1 -0
  21. package/dist/server/routes/{pipelines.d.ts → analytics.d.ts} +1 -1
  22. package/dist/server/routes/analytics.d.ts.map +1 -0
  23. package/dist/server/routes/analytics.js +102 -0
  24. package/dist/server/routes/analytics.js.map +1 -0
  25. package/dist/server/routes/cli-status.d.ts +3 -0
  26. package/dist/server/routes/cli-status.d.ts.map +1 -0
  27. package/dist/server/routes/cli-status.js +28 -0
  28. package/dist/server/routes/cli-status.js.map +1 -0
  29. package/dist/server/routes/discussions.js +5 -5
  30. package/dist/server/routes/discussions.js.map +1 -1
  31. package/dist/server/routes/execution.d.ts.map +1 -1
  32. package/dist/server/routes/execution.js +9 -5
  33. package/dist/server/routes/execution.js.map +1 -1
  34. package/dist/server/routes/images.d.ts +21 -0
  35. package/dist/server/routes/images.d.ts.map +1 -1
  36. package/dist/server/routes/images.js +163 -1
  37. package/dist/server/routes/images.js.map +1 -1
  38. package/dist/server/routes/logs.js +3 -3
  39. package/dist/server/routes/logs.js.map +1 -1
  40. package/dist/server/routes/models.d.ts.map +1 -1
  41. package/dist/server/routes/models.js +2 -0
  42. package/dist/server/routes/models.js.map +1 -1
  43. package/dist/server/routes/planner.d.ts +3 -0
  44. package/dist/server/routes/planner.d.ts.map +1 -0
  45. package/dist/server/routes/planner.js +344 -0
  46. package/dist/server/routes/planner.js.map +1 -0
  47. package/dist/server/routes/projects.d.ts.map +1 -1
  48. package/dist/server/routes/projects.js +159 -1
  49. package/dist/server/routes/projects.js.map +1 -1
  50. package/dist/server/routes/schedules.d.ts.map +1 -1
  51. package/dist/server/routes/schedules.js +39 -0
  52. package/dist/server/routes/schedules.js.map +1 -1
  53. package/dist/server/routes/sessions.d.ts +3 -0
  54. package/dist/server/routes/sessions.d.ts.map +1 -0
  55. package/dist/server/routes/sessions.js +200 -0
  56. package/dist/server/routes/sessions.js.map +1 -0
  57. package/dist/server/routes/todos.d.ts.map +1 -1
  58. package/dist/server/routes/todos.js +16 -4
  59. package/dist/server/routes/todos.js.map +1 -1
  60. package/dist/server/services/claude-manager.d.ts.map +1 -1
  61. package/dist/server/services/claude-manager.js +63 -28
  62. package/dist/server/services/claude-manager.js.map +1 -1
  63. package/dist/server/services/cli-adapters.d.ts +60 -0
  64. package/dist/server/services/cli-adapters.d.ts.map +1 -1
  65. package/dist/server/services/cli-adapters.js +123 -5
  66. package/dist/server/services/cli-adapters.js.map +1 -1
  67. package/dist/server/services/cli-status.d.ts +8 -0
  68. package/dist/server/services/cli-status.d.ts.map +1 -0
  69. package/dist/server/services/cli-status.js +57 -0
  70. package/dist/server/services/cli-status.js.map +1 -0
  71. package/dist/server/services/discussion-orchestrator.d.ts.map +1 -1
  72. package/dist/server/services/discussion-orchestrator.js +33 -6
  73. package/dist/server/services/discussion-orchestrator.js.map +1 -1
  74. package/dist/server/services/log-streamer.d.ts +12 -0
  75. package/dist/server/services/log-streamer.d.ts.map +1 -1
  76. package/dist/server/services/log-streamer.js +117 -31
  77. package/dist/server/services/log-streamer.js.map +1 -1
  78. package/dist/server/services/model-sync.d.ts +22 -0
  79. package/dist/server/services/model-sync.d.ts.map +1 -0
  80. package/dist/server/services/model-sync.js +181 -0
  81. package/dist/server/services/model-sync.js.map +1 -0
  82. package/dist/server/services/orchestrator.d.ts +18 -0
  83. package/dist/server/services/orchestrator.d.ts.map +1 -1
  84. package/dist/server/services/orchestrator.js +81 -11
  85. package/dist/server/services/orchestrator.js.map +1 -1
  86. package/dist/server/services/pty-output-filter.d.ts.map +1 -1
  87. package/dist/server/services/pty-output-filter.js +91 -8
  88. package/dist/server/services/pty-output-filter.js.map +1 -1
  89. package/dist/server/services/session-manager.d.ts +22 -0
  90. package/dist/server/services/session-manager.d.ts.map +1 -0
  91. package/dist/server/services/session-manager.js +249 -0
  92. package/dist/server/services/session-manager.js.map +1 -0
  93. package/dist/server/services/worktree-manager.d.ts +11 -1
  94. package/dist/server/services/worktree-manager.d.ts.map +1 -1
  95. package/dist/server/services/worktree-manager.js +128 -32
  96. package/dist/server/services/worktree-manager.js.map +1 -1
  97. package/dist/server/websocket/events.d.ts +13 -22
  98. package/dist/server/websocket/events.d.ts.map +1 -1
  99. package/dist/server/websocket/index.d.ts.map +1 -1
  100. package/dist/server/websocket/index.js +17 -1
  101. package/dist/server/websocket/index.js.map +1 -1
  102. package/package.json +3 -3
  103. package/README_EN.md +0 -219
  104. package/dist/client/assets/index-B4peRpUi.js +0 -134
  105. package/dist/client/assets/index-Bjyoy6lB.css +0 -1
  106. package/dist/server/routes/pipelines.d.ts.map +0 -1
  107. package/dist/server/routes/pipelines.js +0 -315
  108. package/dist/server/routes/pipelines.js.map +0 -1
  109. package/dist/server/services/pipeline-orchestrator.d.ts +0 -43
  110. package/dist/server/services/pipeline-orchestrator.d.ts.map +0 -1
  111. package/dist/server/services/pipeline-orchestrator.js +0 -503
  112. package/dist/server/services/pipeline-orchestrator.js.map +0 -1
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="src/client/public/logo.svg">
5
- <source media="(prefers-color-scheme: light)" srcset="src/client/public/logo.svg">
6
- <img alt="CLITrigger" src="src/client/public/logo.svg" width="360">
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
6
+ <img alt="CLITrigger" src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg" width="360">
7
7
  </picture>
8
8
 
9
9
  **AI-Powered Parallel Worktree Automation**
@@ -11,8 +11,8 @@
11
11
  *Write tasks. Let AI execute them in parallel. Review and merge.*
12
12
 
13
13
  <p align="center">
14
- <a href="README.md">한국어</a> ·
15
- <a href="README_EN.md">English</a>
14
+ <a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README.md">English</a> ·
15
+ <a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README_KR.md">한국어</a>
16
16
  </p>
17
17
 
18
18
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
@@ -25,195 +25,219 @@
25
25
 
26
26
  ---
27
27
 
28
- > AI 코드를 짜는 시대, 개발자의 역할이 바뀌고 있다.
29
- > 하지만 **이해 없는 바이브 코딩**은 결국 한계에 부딪힌다.
30
- > CLITrigger AI 병렬로 돌리면서도, 개발자가 맥락을 잃지 않도록 설계되었다.
28
+ > In the age of AI-generated code, the developer's role is shifting toward supervision and review.
29
+ > But **vibe coding without understanding** eventually hits a wall.
30
+ > CLITrigger lets you run AI in parallel while keeping you in full context of what's happening.
31
31
 
32
32
  <div align="center">
33
- <img src="docs/images/screenshot-tasks.png" alt="Tasks — 병렬 워크트리 실행" width="800">
34
- <p><em>병렬 워크트리에서 AI CLI가 동시에 작업을 처리하는 모습</em></p>
33
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — Parallel worktree execution" width="800">
34
+ <p><em>AI CLIs working simultaneously across isolated git worktrees</em></p>
35
35
  </div>
36
36
 
37
37
  ---
38
38
 
39
- ## CLITrigger인가?
39
+ ## Why CLITrigger?
40
40
 
41
- Claude Code 제작자 Boris Cherny는 **병렬 실행(Parallelism)** 강조한다. 터미널 하나에서 하나씩 기다리는 AI 시대의 병목이다.
41
+ Boris Cherny, creator of Claude Code, emphasizes **parallelism** as the key to AI-assisted development. Waiting for one task to finish before starting the next is the new bottleneck.
42
42
 
43
- 동시에 많은 AI 서비스는 **시간당 토큰 한도**를 가지고 있다. 낮에 한도를 쓰면 밤에 아무것도 한다.
43
+ At the same time, most AI services have **rate limits** you can burn through your daily quota by noon and be stuck waiting until midnight.
44
44
 
45
- CLITrigger 문제를 동시에 해결한다:
45
+ CLITrigger solves both problems:
46
46
 
47
- - **지금 당장**여러 작업을 격리된 worktree에서 Claude / Gemini / Codex 병렬로 처리
48
- - **한도 걱정 없이**새벽, 특정 시각에 예약 실행으로 토큰을 최대한 활용
49
- - **더 나은 결과** 여러 AI 에이전트가 서로 토론한 구현, 혼자 코드보다 품질이 높아진다
47
+ - **Right now**Multiple tasks run in isolated git worktrees, with Claude / Gemini / Codex executing in parallel
48
+ - **Without hitting limits**Schedule tasks for off-peak hours to make the most of your token quota
49
+ - **Better output**Multiple AI agents debate and review before implementation, producing higher-quality results than a single AI working alone
50
50
 
51
51
  ---
52
52
 
53
- ## 어떻게 동작하나?
53
+ ## How It Works
54
54
 
55
55
  ```
56
- [브라우저에서 TODO 작성]
56
+ [Write TODOs in the browser]
57
57
 
58
- ┌────────────────────────────────────────────────────┐
59
- │ TODO 1: 로그인 기능 구현 → worktree/feature-login → Claude CLI → 자동 커밋
60
- │ TODO 2: 회원가입 페이지 → worktree/feature-signup → Gemini CLI → 자동 커밋
61
- │ TODO 3: 대시보드 레이아웃 → worktree/feature-dashboard → Claude CLI → 자동 커밋
62
- └────────────────────────────────────────────────────┘
58
+ ┌──────────────────────────────────────────────────────────────┐
59
+ │ TODO 1: Implement login → worktree/feature-login → Claude CLI → auto-commit
60
+ │ TODO 2: Signup page → worktree/feature-signup → Gemini CLI → auto-commit
61
+ │ TODO 3: Dashboard layout → worktree/feature-dashboard → Claude CLI → auto-commit
62
+ └──────────────────────────────────────────────────────────────┘
63
63
 
64
- [실시간 로그 확인Diff 보기Main에 Merge]
64
+ [Live log streamingReview diffsMerge to main]
65
65
  ```
66
66
 
67
- TODO **독립된 git worktree**에서 실행된다. 서로 충돌하지 않고, 각자의 브랜치에서 커밋이 쌓인다. 개발자는 결과를 검토하고 머지 여부를 결정한다.
67
+ Each TODO runs in its **own isolated git worktree** no conflicts, separate branches, independent commit history. You review the results and decide what to merge.
68
68
 
69
69
  ---
70
70
 
71
- ## 주요 기능
71
+ ## Features
72
72
 
73
- ### 병렬 Worktree 실행
74
- TODO 작성하면 작업마다 격리된 git worktree 자동 생성된다. Claude / Gemini / Codex CLI가 동시에 병렬로 실행되며, 의존성 체인을 설정하면 선행 작업 완료 자동으로 후속 작업이 실행되고 브랜치 병합까지 처리된다.
73
+ ### Parallel Worktree Execution
74
+ Each TODO automatically gets its own git worktree. Claude / Gemini / Codex CLIs execute simultaneously in parallel. Dependency chains let you automatically trigger follow-up tasks and branch merges once prerequisites complete. Per-project worktree toggle plus per-TODO tri-state override (inherit / force-worktree / force-main) give you fine-grained control — main-branch tasks are automatically serialized to avoid conflicts. Drag-and-drop reordering and an iOS-style stack mode keep long task lists manageable.
75
75
 
76
- ### 다중 AI 토론 (Discussion)
77
- 아키텍트, 개발자, 리뷰어 역할이 다른 AI 에이전트들이 라운드 방식으로 토론한 뒤, 합의된 내용을 바탕으로 자동 구현까지 이어진다. 단일 AI 판단보다 훨씬 검증된 설계 결과물이 나온다.
76
+ ### Multi-Agent Discussion
77
+ AI agents with different roles architect, developer, reviewer debate in rounds before implementation. The resulting design is far more robust than a single AI working in isolation. Agents flagged as **Implementers** (`can_implement`) can commit code during their regular turns, while a final implementation round stitches everything together. Auto-implement triggers the code-writing round automatically on consensus.
78
78
 
79
79
  <div align="center">
80
- <img src="docs/images/screenshot-discussions.png" alt="Discussions — 다중 AI 토론" width="800">
81
- <p><em>여러 AI 에이전트가 역할별로 토론하는 Discussion 화면</em></p>
80
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-discussions.png" alt="Discussions — Multi-agent debate" width="800">
81
+ <p><em>Multiple AI agents with different roles debating in the Discussion view</em></p>
82
82
  </div>
83
83
 
84
- ### 예약 실행 (Scheduler)
85
- 토큰 한도를 피해 새벽이나 특정 시각에 작업을 예약 실행할 있다. cron 기반 반복 스케줄과 일회성 예약 모두 지원한다.
84
+ ### Scheduled Execution
85
+ Schedule tasks for off-peak hours to avoid rate limits. Supports recurring cron schedules, one-time scheduled runs, and auto-recovery scheduling on rate-limit events — if the CLI hits a token quota, CLITrigger schedules a retry for the exact reset time.
86
86
 
87
87
  <div align="center">
88
- <img src="docs/images/screenshot-schedules.png" alt="Schedules — 예약 실행" width="800">
89
- <p><em>cron 기반 반복·일회성 예약 실행 설정 화면</em></p>
88
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-schedules.png" alt="Schedules — Scheduled execution" width="800">
89
+ <p><em>Cron-based recurring and one-time scheduled task execution</em></p>
90
90
  </div>
91
91
 
92
- ### 파이프라인 (Pipeline)
93
- 여러 작업을 순차 또는 병렬로 묶어 다단계 실행 흐름을 구성한다. 복잡한 릴리스 절차도 자동화할 있다.
92
+ ### Planner
93
+ A lightweight task planner separate from TODOs capture ideas, attach images, tag with colors, sort by any column. Convert any planner item into a TODO or a schedule in one click. JSON export/import lets you move plans across machines or share with teammates.
94
94
 
95
- ### 실시간 로그 & 내장 Git 클라이언트
96
- WebSocket으로 실행 로그를 실시간 스트리밍하고, UI에서 직접 커밋·푸시·머지 등 Git 작업을 처리한다. 개발자는 항상 맥락을 파악할 수 있다.
95
+ <div align="center">
96
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner Lightweight task management" width="800">
97
+ <p><em>Inline editing, color-coded tags, image attachments, and one-click conversion to TODOs or schedules</em></p>
98
+ </div>
99
+
100
+ ### Analytics
101
+ Per-project cost and execution stats powered by Recharts — stacked bar chart by CLI tool, donut chart for status distribution, line chart for cost/token trends. Denormalized cost fields in the DB keep aggregation fast even on long histories.
102
+
103
+ <div align="center">
104
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-analytics.png" alt="Analytics — Execution stats" width="800">
105
+ <p><em>Cost and token usage broken down by CLI, status, and over time</em></p>
106
+ </div>
107
+
108
+ ### Built-in Git Client
109
+ A full Git client lives inside the web UI — commit graph, action toolbar, file-status sidebar, worktree list, branch context menu (checkout / merge / rebase / fetch / pull / push / rename / delete), and a commit detail panel with file-level diff viewer. Non-ASCII filenames (Korean, CJK, emoji) render correctly in diff and status output.
110
+
111
+ <div align="center">
112
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — Built-in client" width="800">
113
+ <p><em>Commit graph, branch actions, file diffs — all in the browser</em></p>
114
+ </div>
115
+
116
+ ### Interactive Sessions
117
+ Long-lived interactive CLI sessions as first-class entities — bring up a Claude / Gemini / Codex session in an embedded terminal, with optional worktree isolation per session. PTY output is filtered for spinner noise and classified into assistant / tool-use blocks so the Chat-mode log viewer stays readable.
118
+
119
+ ### Live Logs (Chat & Raw)
120
+ WebSocket-based real-time log streaming with two view modes — Chat mode renders assistant messages as markdown with collapsible tool-use rows; Raw mode is a flat terminal view. Multi-round continue reuses the same worktree via the CLI's native `--continue` flag.
97
121
 
98
- ### 멀티 CLI & 샌드박스
99
- Claude / Gemini / Codex CLI를 프로젝트·TODO별로 선택한다. 엄격(strict) 샌드박스 모드에서는 CLI 파일 접근을 워크트리 디렉토리로 제한해 안전하게 실행한다.
122
+ ### Multi-CLI & Sandbox Mode
123
+ Select Claude / Gemini / Codex per project, per TODO, or per discussion agent. Strict sandbox mode restricts CLI file access to the worktree directory using each CLI's native sandboxing (Claude settings.json, Codex `--full-auto`, Gemini prompt-level restriction).
100
124
 
101
- ### 플러그인 시스템
102
- Jira, GitHub, Notion 연동과 gstack 스킬 주입 외부 서비스 통합을 플러그인 단위로 추가할 있다.
125
+ ### Plugin System
126
+ Jira, GitHub, Notion integrations and gstack skill injection ship as self-contained plugins. Two plugin categories `external-service` (REST proxy + UI panel) and `execution-hook` (pre-execution hook into the orchestrator). Adding a new integration needs only a manifest and `registerPlugin()` call — no core code changes.
103
127
 
104
- ### 외부 접속
105
- Cloudflare Tunnel 어디서든 폰·노트북으로 제어한다.
128
+ ### Remote Access
129
+ Access and control from anywhere via Cloudflare Tunnel. Browser notifications alert you when tasks or discussions complete, so you can walk away and come back.
106
130
 
107
131
  ---
108
132
 
109
- ## 기술 스택
133
+ ## Tech Stack
110
134
 
111
- | 영역 | 기술 |
112
- |------|------|
135
+ | Layer | Tech |
136
+ |-------|------|
113
137
  | Backend | Node.js · Express · TypeScript · SQLite · WebSocket |
114
- | Frontend | React 18 · Vite · Tailwind CSS |
115
- | AI CLI | Claude · Gemini · Codex (Adapter Pattern) |
116
- | Git | simple-git (worktree 관리) |
117
- | 스케줄링 | node-cron |
118
- | 터미널 | node-pty (TTY 지원) |
119
- | 외부 접속 | Cloudflare Tunnel (선택) |
138
+ | Frontend | React 18 · Vite · Tailwind CSS · Recharts |
139
+ | AI CLIs | Claude · Gemini · Codex (Adapter Pattern) |
140
+ | Git | simple-git (worktree management) |
141
+ | Scheduling | node-cron |
142
+ | Terminal | node-pty (TTY support) |
143
+ | Remote Access | Cloudflare Tunnel (optional) |
120
144
 
121
145
  ---
122
146
 
123
- ## 빠른 시작
147
+ ## Quick Start
124
148
 
125
149
  ```bash
126
150
  npm i -g clitrigger
127
151
  clitrigger
128
152
  ```
129
153
 
130
- 실행 비밀번호 설정 여부를 물어보고, 바로 서버가 시작된다.
131
- 브라우저에서 `http://localhost:3000` 접속 프로젝트 등록TODO 작성 → Start.
154
+ On first run, you'll be prompted to set a password. Then the server starts immediately.
155
+ Open `http://localhost:3000` → Register a project Write TODOsClick Start.
132
156
 
133
157
  ```bash
134
- # 설정 변경
135
- clitrigger config port 8080 # 포트 변경
136
- clitrigger config password # 비밀번호 변경
158
+ # Change settings
159
+ clitrigger config port 8080 # Change port
160
+ clitrigger config password # Change password
137
161
  ```
138
162
 
139
- > **사전 요구사항**: Node.js 20+, Git, 사용할 AI CLI (Claude / Gemini / Codex 중 하나 이상)
163
+ > **Prerequisites**: Node.js 20+, Git, at least one AI CLI (Claude / Gemini / Codex)
140
164
  >
141
- > **지원 플랫폼**: Windows · macOS · Linux — 모든 핵심 코드가 크로스 플랫폼 대응되어 있다.
142
- > macOS에서는 네이티브 모듈 빌드를 위해 `xcode-select --install`이 필요할 있다.
165
+ > **Supported Platforms**: Windows · macOS · Linux — all core code is cross-platform compatible.
166
+ > On macOS, you may need `xcode-select --install` for native module compilation.
143
167
 
144
- ### 소스에서 직접 실행 (개발용)
168
+ ### Run from Source (for development)
145
169
 
146
170
  <details>
147
- <summary>클릭하여 펼치기</summary>
171
+ <summary>Click to expand</summary>
148
172
 
149
173
  ```bash
150
- # 1. 클론 & 설치
174
+ # 1. Clone & install
151
175
  git clone https://github.com/OSgoodYZ/CLITrigger.git
152
176
  cd CLITrigger
153
177
  npm install
154
178
  cd src/client && npm install && cd ../..
155
179
 
156
- # 2. 환경 설정
180
+ # 2. Configure environment
157
181
  cp .env.example .env
158
- # .env 열어서 AUTH_PASSWORD 설정
182
+ # Edit .env and set AUTH_PASSWORD
159
183
 
160
- # 3. 실행
184
+ # 3. Run
161
185
  npm run dev
162
186
  ```
163
187
 
164
- 브라우저에서 `http://localhost:5173` 접속.
188
+ Open `http://localhost:5173`.
165
189
 
166
- #### Windows 원클릭 실행
190
+ #### Windows One-Click Scripts
167
191
 
168
- `scripts/` 폴더의 bat 파일을 더블클릭하면 명령어 입력 없이 바로 실행된다.
192
+ Double-click any bat file in `scripts/` no terminal needed.
169
193
 
170
- | 파일 | 기능 |
171
- |------|------|
172
- | `install.bat` | 의존성 설치 (처음 한 번) |
173
- | `dev.bat` | 개발 모드 실행 |
174
- | `build.bat` | 빌드 |
175
- | `start.bat` | 프로덕션 서버 실행 |
176
- | `start-tunnel.bat` | 터널 모드 실행 |
177
- | `test.bat` | 전체 테스트 |
194
+ | File | Action |
195
+ |------|--------|
196
+ | `install.bat` | Install dependencies (first time) |
197
+ | `dev.bat` | Start development mode |
198
+ | `build.bat` | Build project |
199
+ | `start.bat` | Start production server |
200
+ | `start-tunnel.bat` | Start with Cloudflare Tunnel |
201
+ | `test.bat` | Run all tests |
178
202
 
179
203
  #### macOS / Linux
180
204
 
181
- `npm run` 명령어가 모든 플랫폼에서 동일하게 동작한다. `.bat` 스크립트 대신 터미널에서 직접 실행하면 된다.
205
+ `npm run` commands work identically on all platforms. Use the terminal instead of `.bat` scripts.
182
206
 
183
207
  ```bash
184
- npm run dev # 개발 모드
185
- npm run build # 빌드
186
- npm run start # 프로덕션 실행
187
- npm test # 테스트
208
+ npm run dev # Development mode
209
+ npm run build # Build
210
+ npm run start # Production server
211
+ npm test # Run tests
188
212
  ```
189
213
 
190
214
  </details>
191
215
 
192
- ### 외부 접속 (Cloudflare Tunnel)
216
+ ### Remote Access (Cloudflare Tunnel)
193
217
 
194
218
  ```bash
195
- # cloudflared 설치
219
+ # Install cloudflared
196
220
  winget install cloudflare.cloudflared # Windows
197
221
  brew install cloudflared # macOS
198
222
 
199
- # .env에서 TUNNEL_ENABLED=true 설정
223
+ # Set TUNNEL_ENABLED=true in .env, then:
200
224
  npm run start:tunnel
201
- # → 콘솔에 https://xxxx.trycloudflare.com 출력
225
+ # → Outputs https://xxxx.trycloudflare.com in the console
202
226
  ```
203
227
 
204
228
  ---
205
229
 
206
- ## 문서
230
+ ## Documentation
207
231
 
208
- | 문서 | 내용 |
209
- |------|------|
210
- | [SETUP.md](docs/SETUP.md) | 상세 설치 사용 가이드 |
211
- | [CHANGELOG.md](docs/CHANGELOG.md) | 버전별 변경 이력 |
212
- | [CICD.md](docs/CICD.md) | GitHub Actions CI/CD 설정 |
213
- | [TESTING.md](docs/TESTING.md) | 테스트 가이드 |
232
+ | Doc | Content |
233
+ |-----|---------|
234
+ | [SETUP.md](docs/SETUP.md) | Detailed installation and usage guide |
235
+ | [CHANGELOG.md](docs/CHANGELOG.md) | Version history |
236
+ | [CICD.md](docs/CICD.md) | GitHub Actions CI/CD setup |
237
+ | [TESTING.md](docs/TESTING.md) | Testing guide |
214
238
 
215
239
  ---
216
240
 
217
- ## 라이선스
241
+ ## License
218
242
 
219
- [MIT](LICENSE) — 자유롭게 사용, 수정, 배포하세요.
243
+ [MIT](LICENSE) — Free to use, modify, and distribute.
package/README_KR.md ADDED
@@ -0,0 +1,243 @@
1
+ <div align="center">
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
6
+ <img alt="CLITrigger" src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg" width="360">
7
+ </picture>
8
+
9
+ **AI-Powered Parallel Worktree Automation**
10
+
11
+ *Write tasks. Let AI execute them in parallel. Review and merge.*
12
+
13
+ <p align="center">
14
+ <a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README.md">English</a> ·
15
+ <a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README_KR.md">한국어</a>
16
+ </p>
17
+
18
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
19
+ [![npm](https://img.shields.io/npm/v/clitrigger.svg)](https://www.npmjs.com/package/clitrigger)
20
+ [![Node.js](https://img.shields.io/badge/Node.js-20%2B-green.svg)](https://nodejs.org)
21
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org)
22
+ [![React](https://img.shields.io/badge/React-18-61dafb.svg)](https://react.dev)
23
+
24
+ </div>
25
+
26
+ ---
27
+
28
+ > AI가 코드를 짜는 시대, 개발자의 역할이 바뀌고 있다.
29
+ > 하지만 **이해 없는 바이브 코딩**은 결국 한계에 부딪힌다.
30
+ > CLITrigger는 AI를 병렬로 돌리면서도, 개발자가 맥락을 잃지 않도록 설계되었다.
31
+
32
+ <div align="center">
33
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — 병렬 워크트리 실행" width="800">
34
+ <p><em>병렬 워크트리에서 AI CLI가 동시에 작업을 처리하는 모습</em></p>
35
+ </div>
36
+
37
+ ---
38
+
39
+ ## 왜 CLITrigger인가?
40
+
41
+ Claude Code 제작자 Boris Cherny는 **병렬 실행(Parallelism)** 을 강조한다. 터미널 하나에서 하나씩 기다리는 건 AI 시대의 병목이다.
42
+
43
+ 동시에 많은 AI 서비스는 **시간당 토큰 한도**를 가지고 있다. 낮에 한도를 다 쓰면 밤에 아무것도 못 한다.
44
+
45
+ CLITrigger는 이 두 문제를 동시에 해결한다:
46
+
47
+ - **지금 당장** — 여러 작업을 격리된 worktree에서 Claude / Gemini / Codex가 병렬로 처리
48
+ - **한도 걱정 없이** — 새벽, 특정 시각에 예약 실행으로 토큰을 최대한 활용
49
+ - **더 나은 결과** — 여러 AI 에이전트가 서로 토론한 뒤 구현, 혼자 짠 코드보다 품질이 높아진다
50
+
51
+ ---
52
+
53
+ ## 어떻게 동작하나?
54
+
55
+ ```
56
+ [브라우저에서 TODO 작성]
57
+
58
+ ┌────────────────────────────────────────────────────┐
59
+ │ TODO 1: 로그인 기능 구현 → worktree/feature-login → Claude CLI → 자동 커밋 │
60
+ │ TODO 2: 회원가입 페이지 → worktree/feature-signup → Gemini CLI → 자동 커밋 │
61
+ │ TODO 3: 대시보드 레이아웃 → worktree/feature-dashboard → Claude CLI → 자동 커밋 │
62
+ └────────────────────────────────────────────────────┘
63
+
64
+ [실시간 로그 확인 → Diff 보기 → Main에 Merge]
65
+ ```
66
+
67
+ 각 TODO는 **독립된 git worktree**에서 실행된다. 서로 충돌하지 않고, 각자의 브랜치에서 커밋이 쌓인다. 개발자는 결과를 검토하고 머지 여부를 결정한다.
68
+
69
+ ---
70
+
71
+ ## 주요 기능
72
+
73
+ ### 병렬 Worktree 실행
74
+ TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된다. Claude / Gemini / Codex CLI가 동시에 병렬로 실행되며, 의존성 체인을 설정하면 선행 작업 완료 후 자동으로 후속 작업이 실행되고 브랜치 병합까지 처리된다. 프로젝트별 워크트리 토글에 더해 TODO별 3단계 오버라이드(상속 / 강제 워크트리 / 강제 메인)로 세밀한 제어가 가능하고, 메인 브랜치 작업은 자동 직렬화되어 충돌을 막는다. 드래그 앤 드롭으로 순서를 바꾸고, iOS 스타일 스택 모드로 긴 목록도 깔끔하게 관리할 수 있다.
75
+
76
+ ### 다중 AI 토론 (Discussion)
77
+ 아키텍트, 개발자, 리뷰어 등 역할이 다른 AI 에이전트들이 라운드 방식으로 토론한 뒤, 합의된 내용을 바탕으로 자동 구현까지 이어진다. 단일 AI의 판단보다 훨씬 검증된 설계 결과물이 나온다. **구현자(Implementer, `can_implement`)** 로 표시된 에이전트는 일반 턴에서도 코드를 커밋할 수 있고, 마지막 구현 라운드가 남은 작업을 정리해 마무리한다. 자동 구현(Auto-implement) 옵션을 켜면 토론 완료 즉시 코드 작성 라운드가 자동 실행된다.
78
+
79
+ <div align="center">
80
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-discussions.png" alt="Discussions — 다중 AI 토론" width="800">
81
+ <p><em>여러 AI 에이전트가 역할별로 토론하는 Discussion 화면</em></p>
82
+ </div>
83
+
84
+ ### 예약 실행 (Scheduler)
85
+ 토큰 한도를 피해 새벽이나 특정 시각에 작업을 예약 실행할 수 있다. cron 기반 반복 스케줄, 일회성 예약, 그리고 **한도 초과 자동 복구 예약**까지 지원한다 — CLI가 토큰 한도에 걸리면 CLITrigger가 리셋 시각을 파싱해 자동으로 재시도를 예약한다.
86
+
87
+ <div align="center">
88
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-schedules.png" alt="Schedules — 예약 실행" width="800">
89
+ <p><em>cron 기반 반복·일회성 예약 실행 설정 화면</em></p>
90
+ </div>
91
+
92
+ ### Planner (플래너)
93
+ TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적고, 이미지를 첨부하고, 색상 태그로 분류하고, 열 단위로 정렬할 수 있다. 플래너 항목을 한 번의 클릭으로 TODO나 예약 스케줄로 변환할 수 있다. JSON Export / Import로 다른 머신에 옮기거나 팀원과 공유할 수 있다.
94
+
95
+ <div align="center">
96
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — 경량 작업 관리" width="800">
97
+ <p><em>인라인 편집, 컬러 태그, 이미지 첨부, 원클릭 TODO/스케줄 변환</em></p>
98
+ </div>
99
+
100
+ ### Analytics (분석)
101
+ 프로젝트별 비용·실행 통계를 Recharts 기반 차트로 시각화 — CLI 도구별 누적 막대, 상태별 도넛, 시간에 따른 비용/토큰 라인 차트를 제공한다. DB에 비정규화된 비용 컬럼을 두어 긴 실행 이력에서도 집계가 빠르다.
102
+
103
+ <div align="center">
104
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-analytics.png" alt="Analytics — 실행 통계" width="800">
105
+ <p><em>CLI·상태·시간 축으로 나눠 보는 비용과 토큰 사용량</em></p>
106
+ </div>
107
+
108
+ ### 내장 Git 클라이언트
109
+ 웹 UI 안에 풀 Git 클라이언트가 내장되어 있다 — 커밋 그래프, 액션 툴바, 파일 상태 사이드바, 워크트리 목록, 브랜치 컨텍스트 메뉴(체크아웃 / 머지 / 리베이스 / 페치 / 풀 / 푸시 / 이름 변경 / 삭제), 파일 단위 diff 뷰어가 붙은 커밋 상세 패널까지. 한글·CJK·이모지 등 비-ASCII 파일명도 diff / status 출력에 제대로 표시된다.
110
+
111
+ <div align="center">
112
+ <img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — 내장 클라이언트" width="800">
113
+ <p><em>커밋 그래프, 브랜치 작업, 파일 diff까지 브라우저 안에서</em></p>
114
+ </div>
115
+
116
+ ### 인터랙티브 세션 (Sessions)
117
+ 긴 생애주기의 인터랙티브 CLI 세션을 1급 엔티티로 관리 — Claude / Gemini / Codex 세션을 내장 터미널로 띄우고, 세션별로 워크트리 격리 여부를 선택할 수 있다. PTY 출력에서 스피너 노이즈를 걸러내고 assistant / tool-use 블록으로 분류해, Chat 모드 로그 뷰어에서도 깔끔하게 읽힌다.
118
+
119
+ ### 실시간 로그 (Chat & Raw)
120
+ WebSocket으로 실행 로그를 실시간 스트리밍하며 두 가지 뷰를 지원한다 — Chat 모드는 assistant 메시지를 마크다운으로 렌더링하고 tool-use 행을 접을 수 있으며, Raw 모드는 플랫 터미널 뷰다. 다중 라운드 Continue는 CLI의 네이티브 `--continue` 플래그를 사용해 동일 워크트리를 재사용한다.
121
+
122
+ ### 멀티 CLI & 샌드박스
123
+ Claude / Gemini / Codex CLI를 프로젝트·TODO·토론 에이전트별로 선택한다. 엄격(strict) 샌드박스 모드에서는 각 CLI의 네이티브 샌드박싱(Claude `settings.json`, Codex `--full-auto`, Gemini 프롬프트 단 제한)을 사용해 파일 접근을 워크트리 디렉토리로 제한한다.
124
+
125
+ ### 플러그인 시스템
126
+ Jira, GitHub, Notion 연동과 gstack 스킬 주입이 자가 완결형 플러그인으로 제공된다. `external-service`(REST 프록시 + 패널 탭)와 `execution-hook`(오케스트레이터 사전 실행 훅) 두 카테고리를 지원한다. 새 통합을 추가하려면 매니페스트와 `registerPlugin()` 호출만 있으면 되고, 코어 코드를 건드릴 필요가 없다.
127
+
128
+ ### 외부 접속
129
+ Cloudflare Tunnel로 어디서든 폰·노트북으로 제어한다. 작업이나 토론이 완료되면 브라우저 알림이 울리므로, 자리를 비워도 상태를 놓치지 않는다.
130
+
131
+ ---
132
+
133
+ ## 기술 스택
134
+
135
+ | 영역 | 기술 |
136
+ |------|------|
137
+ | Backend | Node.js · Express · TypeScript · SQLite · WebSocket |
138
+ | Frontend | React 18 · Vite · Tailwind CSS · Recharts |
139
+ | AI CLI | Claude · Gemini · Codex (Adapter Pattern) |
140
+ | Git | simple-git (worktree 관리) |
141
+ | 스케줄링 | node-cron |
142
+ | 터미널 | node-pty (TTY 지원) |
143
+ | 외부 접속 | Cloudflare Tunnel (선택) |
144
+
145
+ ---
146
+
147
+ ## 빠른 시작
148
+
149
+ ```bash
150
+ npm i -g clitrigger
151
+ clitrigger
152
+ ```
153
+
154
+ 첫 실행 시 비밀번호 설정 여부를 물어보고, 바로 서버가 시작된다.
155
+ 브라우저에서 `http://localhost:3000` 접속 → 프로젝트 등록 → TODO 작성 → Start.
156
+
157
+ ```bash
158
+ # 설정 변경
159
+ clitrigger config port 8080 # 포트 변경
160
+ clitrigger config password # 비밀번호 변경
161
+ ```
162
+
163
+ > **사전 요구사항**: Node.js 20+, Git, 사용할 AI CLI (Claude / Gemini / Codex 중 하나 이상)
164
+ >
165
+ > **지원 플랫폼**: Windows · macOS · Linux — 모든 핵심 코드가 크로스 플랫폼 대응되어 있다.
166
+ > macOS에서는 네이티브 모듈 빌드를 위해 `xcode-select --install`이 필요할 수 있다.
167
+
168
+ ### 소스에서 직접 실행 (개발용)
169
+
170
+ <details>
171
+ <summary>클릭하여 펼치기</summary>
172
+
173
+ ```bash
174
+ # 1. 클론 & 설치
175
+ git clone https://github.com/OSgoodYZ/CLITrigger.git
176
+ cd CLITrigger
177
+ npm install
178
+ cd src/client && npm install && cd ../..
179
+
180
+ # 2. 환경 설정
181
+ cp .env.example .env
182
+ # .env 열어서 AUTH_PASSWORD 설정
183
+
184
+ # 3. 실행
185
+ npm run dev
186
+ ```
187
+
188
+ 브라우저에서 `http://localhost:5173` 접속.
189
+
190
+ #### Windows 원클릭 실행
191
+
192
+ `scripts/` 폴더의 bat 파일을 더블클릭하면 명령어 입력 없이 바로 실행된다.
193
+
194
+ | 파일 | 기능 |
195
+ |------|------|
196
+ | `install.bat` | 의존성 설치 (처음 한 번) |
197
+ | `dev.bat` | 개발 모드 실행 |
198
+ | `build.bat` | 빌드 |
199
+ | `start.bat` | 프로덕션 서버 실행 |
200
+ | `start-tunnel.bat` | 터널 모드 실행 |
201
+ | `test.bat` | 전체 테스트 |
202
+
203
+ #### macOS / Linux
204
+
205
+ `npm run` 명령어가 모든 플랫폼에서 동일하게 동작한다. `.bat` 스크립트 대신 터미널에서 직접 실행하면 된다.
206
+
207
+ ```bash
208
+ npm run dev # 개발 모드
209
+ npm run build # 빌드
210
+ npm run start # 프로덕션 실행
211
+ npm test # 테스트
212
+ ```
213
+
214
+ </details>
215
+
216
+ ### 외부 접속 (Cloudflare Tunnel)
217
+
218
+ ```bash
219
+ # cloudflared 설치
220
+ winget install cloudflare.cloudflared # Windows
221
+ brew install cloudflared # macOS
222
+
223
+ # .env에서 TUNNEL_ENABLED=true 설정 후
224
+ npm run start:tunnel
225
+ # → 콘솔에 https://xxxx.trycloudflare.com 출력
226
+ ```
227
+
228
+ ---
229
+
230
+ ## 문서
231
+
232
+ | 문서 | 내용 |
233
+ |------|------|
234
+ | [SETUP.md](docs/SETUP.md) | 상세 설치 및 사용 가이드 |
235
+ | [CHANGELOG.md](docs/CHANGELOG.md) | 버전별 변경 이력 |
236
+ | [CICD.md](docs/CICD.md) | GitHub Actions CI/CD 설정 |
237
+ | [TESTING.md](docs/TESTING.md) | 테스트 가이드 |
238
+
239
+ ---
240
+
241
+ ## 라이선스
242
+
243
+ [MIT](LICENSE) — 자유롭게 사용, 수정, 배포하세요.