clitrigger 0.1.6 → 0.1.8
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.
- package/README.md +59 -3
- package/README_KR.md +59 -3
- package/bin/clitrigger.js +27 -60
- package/dist/client/assets/{index-tGOot928.css → index-1Jh5SxHD.css} +1 -1
- package/dist/client/assets/{index-BiXO2oR3.js → index-BVi_bF8e.js} +128 -128
- package/dist/client/index.html +2 -2
- package/dist/server/db/queries.d.ts +2 -1
- package/dist/server/db/queries.d.ts.map +1 -1
- package/dist/server/db/queries.js +4 -0
- package/dist/server/db/queries.js.map +1 -1
- package/dist/server/db/schema.d.ts.map +1 -1
- package/dist/server/db/schema.js +1 -0
- package/dist/server/db/schema.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +16 -7
- package/dist/server/index.js.map +1 -1
- package/dist/server/services/discussion-orchestrator.js +1 -1
- package/dist/server/services/discussion-orchestrator.js.map +1 -1
- package/dist/server/services/log-streamer.d.ts.map +1 -1
- package/dist/server/services/log-streamer.js +0 -1
- package/dist/server/services/log-streamer.js.map +1 -1
- package/dist/server/services/orchestrator.js +1 -1
- package/dist/server/services/orchestrator.js.map +1 -1
- package/dist/server/services/session-manager.js +1 -1
- package/dist/server/services/session-manager.js.map +1 -1
- package/dist/server/services/worktree-manager.d.ts +1 -1
- package/dist/server/services/worktree-manager.d.ts.map +1 -1
- package/dist/server/services/worktree-manager.js +9 -5
- package/dist/server/services/worktree-manager.js.map +1 -1
- package/dist/server/websocket/index.d.ts.map +1 -1
- package/dist/server/websocket/index.js +0 -1
- package/dist/server/websocket/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,17 +17,24 @@
|
|
|
17
17
|
|
|
18
18
|
[](LICENSE)
|
|
19
19
|
[](https://www.npmjs.com/package/clitrigger)
|
|
20
|
+
[](https://www.npmjs.com/package/clitrigger)
|
|
21
|
+
[](https://www.npmjs.com/package/clitrigger)
|
|
20
22
|
[](https://nodejs.org)
|
|
21
23
|
[](https://www.typescriptlang.org)
|
|
22
24
|
[](https://react.dev)
|
|
25
|
+
[](https://github.com/HyperAITeam/CLITrigger/stargazers)
|
|
23
26
|
|
|
24
27
|
</div>
|
|
25
28
|
|
|
26
29
|
---
|
|
27
30
|
|
|
28
|
-
>
|
|
29
|
-
>
|
|
30
|
-
>
|
|
31
|
+
> ### While you sleep, your AI is working.
|
|
32
|
+
>
|
|
33
|
+
> In the age of AI-generated code, the developer's role is shifting toward supervision and review. But **vibe coding without understanding** eventually hits a wall.
|
|
34
|
+
>
|
|
35
|
+
> CLITrigger takes the tasks you queued before bed and runs them overnight — multiple AI coding agents (**Claude Code · Codex · Gemini CLI**) working in parallel, each in its own isolated git worktree. Next morning, you just review the stack of diffs and **accept / reject**.
|
|
36
|
+
>
|
|
37
|
+
> **Parallel AI execution — without losing context.**
|
|
31
38
|
|
|
32
39
|
<div align="center">
|
|
33
40
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — Parallel worktree execution" width="800">
|
|
@@ -68,6 +75,33 @@ Each TODO runs in its **own isolated git worktree** — no conflicts, separate b
|
|
|
68
75
|
|
|
69
76
|
---
|
|
70
77
|
|
|
78
|
+
## The Workflow — Hand Off, Then Review
|
|
79
|
+
|
|
80
|
+
**CLITrigger is built for "delegate and review" — not for staring at a progress bar.**
|
|
81
|
+
|
|
82
|
+
### Scenario 1: The AI night shift — hand off at bedtime, pick up in the morning
|
|
83
|
+
Before bed, dump unfinished work and sudden ideas into the Planner, convert them into TODOs or scheduled runs, then close the laptop. While you sleep, Claude / Gemini / Codex burn through your token quota in parallel worktrees. Next morning, sit down with coffee and review the diffs holistically — accept what makes sense, reject what doesn't, merge what's ready.
|
|
84
|
+
|
|
85
|
+
**Your tokens never sleep. Neither does your codebase.**
|
|
86
|
+
|
|
87
|
+
### Scenario 2: The background worker
|
|
88
|
+
Stay focused on your main work while CLITrigger handles side quests in the background. Refactors, test coverage, doc updates, speculative features — the stuff you never have time for — gets done while you ship the critical path. Browser notifications (or phone alerts via Cloudflare Tunnel) surface completed tasks only when they need your attention.
|
|
89
|
+
|
|
90
|
+
### The Core Loop
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Evening Overnight / Sidelined Morning / Break
|
|
94
|
+
─────────── ─────────────────────── ────────────────────
|
|
95
|
+
Capture → AI executes in parallel → Review holistically
|
|
96
|
+
• Planner • Worktree isolation • Diff by diff
|
|
97
|
+
• TODOs • Rate-limit auto-recovery • Log by log
|
|
98
|
+
• Schedules • Multi-agent discussion • Accept / Reject / Merge
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Every feature — Planner, Scheduler, worktree isolation, rate-limit auto-recovery, multi-agent discussion, the built-in Git client — exists to support this loop: **capture → delegate → review**.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
71
105
|
## Features
|
|
72
106
|
|
|
73
107
|
### Parallel Worktree Execution
|
|
@@ -238,6 +272,28 @@ npm run start:tunnel
|
|
|
238
272
|
|
|
239
273
|
---
|
|
240
274
|
|
|
275
|
+
## Contributors
|
|
276
|
+
|
|
277
|
+
Thanks to everyone who has contributed to CLITrigger!
|
|
278
|
+
|
|
279
|
+
<a href="https://github.com/HyperAITeam/CLITrigger/graphs/contributors">
|
|
280
|
+
<img src="https://contrib.rocks/image?repo=HyperAITeam/CLITrigger" alt="Contributors" />
|
|
281
|
+
</a>
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Star History
|
|
286
|
+
|
|
287
|
+
<a href="https://star-history.com/#HyperAITeam/CLITrigger&Date">
|
|
288
|
+
<picture>
|
|
289
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=HyperAITeam/CLITrigger&type=Date&theme=dark" />
|
|
290
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=HyperAITeam/CLITrigger&type=Date" />
|
|
291
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=HyperAITeam/CLITrigger&type=Date" />
|
|
292
|
+
</picture>
|
|
293
|
+
</a>
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
241
297
|
## License
|
|
242
298
|
|
|
243
299
|
[MIT](LICENSE) — Free to use, modify, and distribute.
|
package/README_KR.md
CHANGED
|
@@ -17,17 +17,24 @@
|
|
|
17
17
|
|
|
18
18
|
[](LICENSE)
|
|
19
19
|
[](https://www.npmjs.com/package/clitrigger)
|
|
20
|
+
[](https://www.npmjs.com/package/clitrigger)
|
|
21
|
+
[](https://www.npmjs.com/package/clitrigger)
|
|
20
22
|
[](https://nodejs.org)
|
|
21
23
|
[](https://www.typescriptlang.org)
|
|
22
24
|
[](https://react.dev)
|
|
25
|
+
[](https://github.com/HyperAITeam/CLITrigger/stargazers)
|
|
23
26
|
|
|
24
27
|
</div>
|
|
25
28
|
|
|
26
29
|
---
|
|
27
30
|
|
|
28
|
-
>
|
|
29
|
-
>
|
|
30
|
-
>
|
|
31
|
+
> ### 자는 동안, 당신의 AI는 일합니다.
|
|
32
|
+
>
|
|
33
|
+
> AI가 코드를 짜는 시대, 개발자의 역할이 바뀌고 있다. 하지만 **이해 없는 바이브 코딩**은 결국 한계에 부딪힌다.
|
|
34
|
+
>
|
|
35
|
+
> CLITrigger는 자기 전 큐잉한 작업을 밤새 여러 AI 코딩 에이전트(**Claude Code · Codex · Gemini CLI**)가 각자의 git worktree에서 병렬로 처리하고 — 다음 날 아침 당신은 쌓인 diff를 보고 **accept / reject**만 하면 된다.
|
|
36
|
+
>
|
|
37
|
+
> **AI를 병렬로 돌리되, 개발자는 맥락을 잃지 않는다.**
|
|
31
38
|
|
|
32
39
|
<div align="center">
|
|
33
40
|
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — 병렬 워크트리 실행" width="800">
|
|
@@ -68,6 +75,33 @@ CLITrigger는 이 두 문제를 동시에 해결한다:
|
|
|
68
75
|
|
|
69
76
|
---
|
|
70
77
|
|
|
78
|
+
## 사용 흐름 — 맡겨두고, 나중에 리뷰
|
|
79
|
+
|
|
80
|
+
**CLITrigger는 "위임하고 리뷰"를 위해 설계되었다 — 진행 바를 쳐다보며 기다리는 도구가 아니다.**
|
|
81
|
+
|
|
82
|
+
### 시나리오 1: AI 야간 근무 — 저녁에 맡기고, 아침에 받기
|
|
83
|
+
자기 전에 못다 한 업무나 문득 떠오른 아이디어를 Planner에 던져 넣고, TODO나 예약 실행으로 변환한 뒤 노트북을 닫는다. 당신이 자는 동안 Claude / Gemini / Codex가 병렬 워크트리에서 토큰 한도를 끝까지 써가며 일한다. 다음날 아침 커피 한 잔 들고 책상에 앉아 결과물을 통합적으로 살펴본다 — 마음에 드는 건 accept, 아닌 건 reject, 준비된 건 머지.
|
|
84
|
+
|
|
85
|
+
**당신의 토큰은 잠들지 않는다. 당신의 코드베이스도.**
|
|
86
|
+
|
|
87
|
+
### 시나리오 2: 백그라운드 워커
|
|
88
|
+
메인 작업에 집중하는 동안 CLITrigger가 옆에서 서브 퀘스트를 처리한다. 리팩토링, 테스트 커버리지, 문서 업데이트, 해보고 싶었던 실험적 기능 — 평소 시간이 없어 미뤄둔 일들이 당신이 중요한 경로를 밀고 나가는 동안 끝나 있다. Cloudflare Tunnel + 브라우저 알림으로 작업이 완료되면 알림이 올라오니, 필요한 순간에만 주의를 돌리면 된다.
|
|
89
|
+
|
|
90
|
+
### 핵심 루프
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
저녁 밤새 / 딴 일 하는 동안 아침 / 쉬는 시간
|
|
94
|
+
───────── ──────────────────────── ─────────────────────
|
|
95
|
+
캡처 → AI가 병렬로 실행 → 통합 리뷰
|
|
96
|
+
• Planner • 워크트리 격리 • Diff 하나하나
|
|
97
|
+
• TODO • 한도 초과 자동 복구 • 로그 하나하나
|
|
98
|
+
• 예약 • 다중 AI 토론 • Accept / Reject / Merge
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
CLITrigger의 모든 기능 — Planner, Scheduler, 워크트리 격리, 한도 초과 자동 복구, 다중 AI 토론, 내장 Git 클라이언트 — 이 루프를 지원하려고 존재한다: **캡처 → 위임 → 리뷰**.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
71
105
|
## 주요 기능
|
|
72
106
|
|
|
73
107
|
### 병렬 Worktree 실행
|
|
@@ -238,6 +272,28 @@ npm run start:tunnel
|
|
|
238
272
|
|
|
239
273
|
---
|
|
240
274
|
|
|
275
|
+
## 기여자 (Contributors)
|
|
276
|
+
|
|
277
|
+
CLITrigger에 기여해 주신 모든 분들께 감사드립니다!
|
|
278
|
+
|
|
279
|
+
<a href="https://github.com/HyperAITeam/CLITrigger/graphs/contributors">
|
|
280
|
+
<img src="https://contrib.rocks/image?repo=HyperAITeam/CLITrigger" alt="Contributors" />
|
|
281
|
+
</a>
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Star History
|
|
286
|
+
|
|
287
|
+
<a href="https://star-history.com/#HyperAITeam/CLITrigger&Date">
|
|
288
|
+
<picture>
|
|
289
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=HyperAITeam/CLITrigger&type=Date&theme=dark" />
|
|
290
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=HyperAITeam/CLITrigger&type=Date" />
|
|
291
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=HyperAITeam/CLITrigger&type=Date" />
|
|
292
|
+
</picture>
|
|
293
|
+
</a>
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
241
297
|
## 라이선스
|
|
242
298
|
|
|
243
299
|
[MIT](LICENSE) — 자유롭게 사용, 수정, 배포하세요.
|
package/bin/clitrigger.js
CHANGED
|
@@ -4,7 +4,6 @@ import fs from 'fs';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import os from 'os';
|
|
6
6
|
import { createInterface } from 'readline/promises';
|
|
7
|
-
import { execSync, spawn } from 'child_process';
|
|
8
7
|
|
|
9
8
|
const CONFIG_DIR = path.join(os.homedir(), '.clitrigger');
|
|
10
9
|
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
@@ -16,10 +15,8 @@ if (args[0] === 'config') {
|
|
|
16
15
|
} else if (args[0] === '--help' || args[0] === '-h') {
|
|
17
16
|
printHelp();
|
|
18
17
|
} else {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
await startServer();
|
|
22
|
-
}
|
|
18
|
+
checkForUpdateAsync();
|
|
19
|
+
await startServer();
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
async function startServer() {
|
|
@@ -164,61 +161,31 @@ function isNewerVersion(latest, current) {
|
|
|
164
161
|
return false;
|
|
165
162
|
}
|
|
166
163
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
// npm registry에서 최신 버전 조회 (5초 타임아웃)
|
|
194
|
-
const controller = new AbortController();
|
|
195
|
-
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
196
|
-
const res = await fetch('https://registry.npmjs.org/clitrigger/latest', {
|
|
197
|
-
signal: controller.signal,
|
|
198
|
-
});
|
|
199
|
-
clearTimeout(timeout);
|
|
200
|
-
|
|
201
|
-
if (!res.ok) return false;
|
|
202
|
-
const data = await res.json();
|
|
203
|
-
const latestVersion = data.version;
|
|
204
|
-
|
|
205
|
-
if (!isNewerVersion(latestVersion, currentVersion)) return false;
|
|
206
|
-
|
|
207
|
-
console.log(`\nUpdate available: v${currentVersion} -> v${latestVersion}, updating...`);
|
|
208
|
-
execSync('npm i -g clitrigger@latest', { stdio: 'inherit' });
|
|
209
|
-
console.log(`Updated to v${latestVersion}. Restarting...\n`);
|
|
210
|
-
|
|
211
|
-
// 업데이트된 코드로 재시작
|
|
212
|
-
const child = spawn(process.argv[0], process.argv.slice(1), {
|
|
213
|
-
stdio: 'inherit',
|
|
214
|
-
env: { ...process.env, CLITRIGGER_UPDATED: '1' },
|
|
215
|
-
});
|
|
216
|
-
child.on('exit', (code) => process.exit(code ?? 0));
|
|
217
|
-
return true;
|
|
218
|
-
} catch {
|
|
219
|
-
// 네트워크 오류, 타임아웃 등 — 무시하고 현재 버전으로 계속
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
164
|
+
function checkForUpdateAsync() {
|
|
165
|
+
(async () => {
|
|
166
|
+
try {
|
|
167
|
+
const pkgPath = new URL('../package.json', import.meta.url);
|
|
168
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
169
|
+
const currentVersion = pkg.version;
|
|
170
|
+
|
|
171
|
+
const controller = new AbortController();
|
|
172
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
173
|
+
const res = await fetch('https://registry.npmjs.org/clitrigger/latest', {
|
|
174
|
+
signal: controller.signal,
|
|
175
|
+
});
|
|
176
|
+
clearTimeout(timeout);
|
|
177
|
+
|
|
178
|
+
if (!res.ok) return;
|
|
179
|
+
const data = await res.json();
|
|
180
|
+
const latestVersion = data.version;
|
|
181
|
+
|
|
182
|
+
if (!isNewerVersion(latestVersion, currentVersion)) return;
|
|
183
|
+
|
|
184
|
+
console.log(` Update available: ${latestVersion} → npm i -g clitrigger@latest`);
|
|
185
|
+
} catch {
|
|
186
|
+
// 네트워크 오류·타임아웃 — 조용히 무시
|
|
187
|
+
}
|
|
188
|
+
})();
|
|
222
189
|
}
|
|
223
190
|
|
|
224
191
|
function printHelp() {
|