@silbaram/artifact-driven-agent 0.1.7 → 0.2.3
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 +510 -60
- package/ai-dev-team/.ada-status.template.json +10 -10
- package/ai-dev-team/README.md +39 -44
- package/ai-dev-team/ada.config.json +15 -0
- package/ai-dev-team/artifacts/api.md +2 -0
- package/ai-dev-team/artifacts/features/_template/api.md +19 -19
- package/ai-dev-team/artifacts/features/_template/review.md +14 -14
- package/ai-dev-team/artifacts/features/_template/spec.md +28 -28
- package/ai-dev-team/artifacts/features/_template/ui.md +14 -14
- package/ai-dev-team/artifacts/improvement-reports/IMP-0000-template.md +57 -0
- package/ai-dev-team/artifacts/project.md +2 -0
- package/ai-dev-team/artifacts/rfc/RFC-0000-template.md +49 -49
- package/core/artifacts/decision.md +72 -72
- package/core/artifacts/plan.md +187 -187
- package/core/artifacts/project.md +193 -193
- package/core/artifacts/sprints/_template/docs/release-notes.md +37 -37
- package/core/artifacts/sprints/_template/meta.md +54 -54
- package/core/artifacts/sprints/_template/retrospective.md +50 -50
- package/core/artifacts/sprints/_template/review-reports/review-template.md +49 -49
- package/core/artifacts/sprints/_template/tasks/task-template.md +43 -43
- package/core/docs-templates/mkdocs/docs/architecture/overview.md +29 -0
- package/core/docs-templates/mkdocs/docs/changelog.md +36 -0
- package/core/docs-templates/mkdocs/docs/contributing/contributing.md +60 -0
- package/core/docs-templates/mkdocs/docs/getting-started/configuration.md +51 -0
- package/core/docs-templates/mkdocs/docs/getting-started/installation.md +41 -0
- package/core/docs-templates/mkdocs/docs/getting-started/quick-start.md +56 -0
- package/core/docs-templates/mkdocs/docs/guides/api-reference.md +83 -0
- package/core/docs-templates/mkdocs/docs/index.md +32 -0
- package/core/docs-templates/mkdocs/mkdocs.yml +86 -0
- package/core/roles/analyzer.md +265 -243
- package/core/roles/developer.md +227 -223
- package/core/roles/documenter.md +226 -293
- package/core/roles/improver.md +461 -0
- package/core/roles/manager.md +574 -541
- package/core/roles/planner.md +398 -248
- package/core/roles/reviewer.md +294 -266
- package/core/rules/document-priority.md +199 -198
- package/core/rules/escalation.md +172 -172
- package/core/rules/iteration.md +236 -236
- package/core/rules/rfc.md +31 -31
- package/core/rules/rollback.md +218 -218
- package/core/skills/_template/SKILL.md +50 -0
- package/core/skills/clean-code/SKILL.md +177 -0
- package/core/skills/code-review-checklist/SKILL.md +125 -0
- package/core/skills/error-handling/SKILL.md +155 -0
- package/core/skills/talk-game-dot-design/SKILL.md +85 -0
- package/core/skills/talk-game-dot-design/references/asset-specs.md +57 -0
- package/core/skills/talk-game-dot-design/references/review-checklist.md +34 -0
- package/core/skills/task-writing/SKILL.md +166 -0
- package/core/skills/testing-patterns/SKILL.md +140 -0
- package/dist/bin/cli.d.ts +2 -0
- package/dist/bin/cli.js +121 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/src/commands/config.d.ts +4 -0
- package/dist/src/commands/config.js +427 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/docs.d.ts +12 -0
- package/dist/src/commands/docs.js +453 -0
- package/dist/src/commands/docs.js.map +1 -0
- package/dist/src/commands/interactive.d.ts +4 -0
- package/dist/src/commands/interactive.js +380 -0
- package/dist/src/commands/interactive.js.map +1 -0
- package/dist/src/commands/logs.d.ts +1 -0
- package/dist/src/commands/logs.js +76 -0
- package/dist/src/commands/logs.js.map +1 -0
- package/dist/src/commands/monitor.d.ts +6 -0
- package/dist/src/commands/monitor.js +216 -0
- package/dist/src/commands/monitor.js.map +1 -0
- package/dist/src/commands/reset.d.ts +4 -0
- package/dist/src/commands/reset.js +57 -0
- package/dist/src/commands/reset.js.map +1 -0
- package/dist/src/commands/run.d.ts +45 -0
- package/dist/src/commands/run.js +421 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/sessions.d.ts +5 -0
- package/dist/src/commands/sessions.js +563 -0
- package/dist/src/commands/sessions.js.map +1 -0
- package/dist/src/commands/setup.d.ts +1 -0
- package/dist/src/commands/setup.js +132 -0
- package/dist/src/commands/setup.js.map +1 -0
- package/dist/src/commands/skills.d.ts +4 -0
- package/dist/src/commands/skills.js +748 -0
- package/dist/src/commands/skills.js.map +1 -0
- package/dist/src/commands/sprint.d.ts +4 -0
- package/dist/src/commands/sprint.js +434 -0
- package/dist/src/commands/sprint.js.map +1 -0
- package/dist/src/commands/status.d.ts +1 -0
- package/dist/src/commands/status.js +97 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/upgrade.d.ts +6 -0
- package/dist/src/commands/upgrade.js +350 -0
- package/dist/src/commands/upgrade.js.map +1 -0
- package/dist/src/commands/validate.d.ts +8 -0
- package/dist/src/commands/validate.js +260 -0
- package/dist/src/commands/validate.js.map +1 -0
- package/dist/src/commands/validate.test.d.ts +1 -0
- package/dist/src/commands/validate.test.js +74 -0
- package/dist/src/commands/validate.test.js.map +1 -0
- package/{src/index.js → dist/src/index.d.ts} +2 -3
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types/common.d.ts +31 -0
- package/dist/src/types/common.js +2 -0
- package/dist/src/types/common.js.map +1 -0
- package/dist/src/types/config.d.ts +46 -0
- package/dist/src/types/config.js +2 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/index.d.ts +53 -0
- package/dist/src/types/index.js +2 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/session.d.ts +87 -0
- package/dist/src/types/session.js +2 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/task.d.ts +32 -0
- package/dist/src/types/task.js +2 -0
- package/dist/src/types/task.js.map +1 -0
- package/dist/src/ui/dashboard.d.ts +9 -0
- package/dist/src/ui/dashboard.js +468 -0
- package/dist/src/ui/dashboard.js.map +1 -0
- package/dist/src/ui/keyHandler.d.ts +47 -0
- package/dist/src/ui/keyHandler.js +132 -0
- package/dist/src/ui/keyHandler.js.map +1 -0
- package/dist/src/ui/quickActions.d.ts +25 -0
- package/dist/src/ui/quickActions.js +106 -0
- package/dist/src/ui/quickActions.js.map +1 -0
- package/dist/src/utils/config.d.ts +33 -0
- package/dist/src/utils/config.js +135 -0
- package/dist/src/utils/config.js.map +1 -0
- package/dist/src/utils/files.d.ts +84 -0
- package/dist/src/utils/files.js +202 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/promptBuilder.d.ts +39 -0
- package/dist/src/utils/promptBuilder.js +726 -0
- package/dist/src/utils/promptBuilder.js.map +1 -0
- package/dist/src/utils/sessionState.d.ts +83 -0
- package/dist/src/utils/sessionState.js +466 -0
- package/dist/src/utils/sessionState.js.map +1 -0
- package/dist/src/utils/sessionState.process.test.d.ts +1 -0
- package/dist/src/utils/sessionState.process.test.js +93 -0
- package/dist/src/utils/sessionState.process.test.js.map +1 -0
- package/dist/src/utils/sessionState.test.d.ts +1 -0
- package/dist/src/utils/sessionState.test.js +150 -0
- package/dist/src/utils/sessionState.test.js.map +1 -0
- package/dist/src/utils/sprintUtils.d.ts +13 -0
- package/dist/src/utils/sprintUtils.js +129 -0
- package/dist/src/utils/sprintUtils.js.map +1 -0
- package/dist/src/utils/taskParser.d.ts +9 -0
- package/dist/src/utils/taskParser.js +122 -0
- package/dist/src/utils/taskParser.js.map +1 -0
- package/dist/src/utils/taskParser.test.d.ts +1 -0
- package/dist/src/utils/taskParser.test.js +69 -0
- package/dist/src/utils/taskParser.test.js.map +1 -0
- package/package.json +62 -47
- package/templates/cli/artifacts/commands.md +262 -262
- package/templates/cli/artifacts/output-format.md +298 -298
- package/templates/cli/rules/command-change.md +225 -225
- package/templates/game/artifacts/assets.md +148 -148
- package/templates/game/artifacts/game-systems.md +217 -217
- package/templates/game/artifacts/hud.md +199 -199
- package/templates/game/rules/system-change.md +184 -184
- package/templates/library/artifacts/changelog.md +84 -84
- package/templates/library/artifacts/examples.md +157 -157
- package/templates/library/artifacts/public-api.md +197 -197
- package/templates/library/rules/versioning.md +186 -186
- package/templates/web-dev/artifacts/api.md +212 -212
- package/templates/web-dev/artifacts/ui.md +104 -104
- package/templates/web-dev/rules/api-change.md +198 -198
- package/ai-dev-team/.gitkeep +0 -0
- package/ai-dev-team/artifacts/.gitkeep +0 -0
- package/ai-dev-team/artifacts/features/_template/qa.md +0 -16
- package/ai-dev-team/roles/.gitkeep +0 -0
- package/ai-dev-team/rules/.gitkeep +0 -0
- package/bin/cli.js +0 -83
- package/examples/todo-app/README.md +0 -23
- package/examples/todo-app/artifacts/backlog.md +0 -23
- package/examples/todo-app/artifacts/plan.md +0 -23
- package/examples/todo-app/artifacts/project.md +0 -23
- package/src/commands/interactive.js +0 -101
- package/src/commands/logs.js +0 -81
- package/src/commands/reset.js +0 -66
- package/src/commands/run.js +0 -554
- package/src/commands/sessions.js +0 -707
- package/src/commands/setup.js +0 -128
- package/src/commands/sprint.js +0 -262
- package/src/commands/status.js +0 -76
- package/src/commands/validate.js +0 -288
- package/src/commands/validate.test.js +0 -84
- package/src/utils/files.js +0 -134
- package/src/utils/sessionState.js +0 -379
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-patterns
|
|
3
|
+
description: 테스트 코드 작성 시 적용되는 패턴. 단위/통합/E2E 테스트 구조, 네이밍 규칙, 모킹 전략을 포함한다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Testing Patterns
|
|
7
|
+
|
|
8
|
+
이 스킬은 테스트 코드를 작성하거나 기존 테스트를 수정할 때 적용됩니다.
|
|
9
|
+
언어/프레임워크에 무관하게 적용되는 보편 원칙입니다.
|
|
10
|
+
|
|
11
|
+
## 핵심 규칙
|
|
12
|
+
|
|
13
|
+
1. **테스트는 독립적이어야 한다**: 각 테스트는 다른 테스트에 의존하지 않고 단독 실행 가능해야 한다.
|
|
14
|
+
2. **하나의 테스트는 하나의 동작만 검증한다**: 여러 동작을 한 테스트에 넣지 않는다.
|
|
15
|
+
3. **테스트 이름만으로 의도를 파악할 수 있어야 한다**: 실패 시 이름만 보고 원인을 추론할 수 있어야 한다.
|
|
16
|
+
4. **외부 의존성은 반드시 격리한다**: DB, 네트워크, 파일시스템 등은 모킹하거나 테스트용 인스턴스를 사용한다.
|
|
17
|
+
5. **테스트 코드도 프로덕션 코드와 동일한 품질 기준을 적용한다**: 중복 제거, 가독성, 유지보수성을 유지한다.
|
|
18
|
+
|
|
19
|
+
## 패턴 및 예시
|
|
20
|
+
|
|
21
|
+
### 패턴 1: AAA (Arrange-Act-Assert)
|
|
22
|
+
|
|
23
|
+
모든 테스트는 3단계로 구성한다. 단계 사이에 빈 줄로 구분하여 가독성을 확보한다.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
test "장바구니에 상품 추가 시 총액이 갱신된다":
|
|
27
|
+
// Arrange - 테스트 전제 조건 설정
|
|
28
|
+
cart = new Cart()
|
|
29
|
+
item = { id: "item-1", name: "키보드", price: 50000 }
|
|
30
|
+
|
|
31
|
+
// Act - 테스트 대상 동작 실행
|
|
32
|
+
cart.addItem(item)
|
|
33
|
+
|
|
34
|
+
// Assert - 결과 검증
|
|
35
|
+
assert cart.totalPrice == 50000
|
|
36
|
+
assert cart.items.length == 1
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 패턴 2: 테스트 네이밍 규칙
|
|
40
|
+
|
|
41
|
+
테스트 이름은 **[대상]_[조건]_[기대결과]** 또는 자연어 서술 형식을 사용한다.
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
// 형식 1: 구조화된 네이밍
|
|
45
|
+
test "calculateDiscount_회원등급이_VIP일때_20퍼센트_할인"
|
|
46
|
+
|
|
47
|
+
// 형식 2: 자연어 서술 (권장)
|
|
48
|
+
test "VIP 회원은 20% 할인을 받는다"
|
|
49
|
+
|
|
50
|
+
// 형식 3: 그룹 + 개별 테스트 조합
|
|
51
|
+
group "할인 계산":
|
|
52
|
+
test "VIP 회원은 20% 할인을 받는다"
|
|
53
|
+
test "일반 회원은 할인이 없다"
|
|
54
|
+
test "쿠폰과 등급 할인은 중복 적용되지 않는다"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 패턴 3: 테스트 픽스처 (Test Fixture)
|
|
58
|
+
|
|
59
|
+
반복되는 설정은 헬퍼 함수로 추출한다. 단, 테스트 내에서 핵심 값은 명시적으로 보여야 한다.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
// 팩토리 함수 - 기본값 + 오버라이드
|
|
63
|
+
function createUser(overrides):
|
|
64
|
+
return merge({
|
|
65
|
+
id: "user-1",
|
|
66
|
+
name: "테스트유저",
|
|
67
|
+
email: "test@example.com",
|
|
68
|
+
role: "member",
|
|
69
|
+
}, overrides)
|
|
70
|
+
|
|
71
|
+
test "관리자는 사용자를 삭제할 수 있다":
|
|
72
|
+
admin = createUser({ role: "admin" }) // 핵심 값 명시
|
|
73
|
+
target = createUser({ id: "user-2" })
|
|
74
|
+
|
|
75
|
+
result = deleteUser(admin, target.id)
|
|
76
|
+
|
|
77
|
+
assert result.success == true
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 패턴 4: 모킹 전략
|
|
81
|
+
|
|
82
|
+
외부 의존성의 모킹 범위를 최소한으로 유지한다.
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
// 의존성 주입 방식 (권장)
|
|
86
|
+
test "주문 생성 시 결제 서비스를 호출한다":
|
|
87
|
+
mockPayment = mock({ charge: returns({ success: true }) })
|
|
88
|
+
orderService = new OrderService(mockPayment)
|
|
89
|
+
|
|
90
|
+
orderService.createOrder({ amount: 10000 })
|
|
91
|
+
|
|
92
|
+
assert mockPayment.charge.calledOnce == true
|
|
93
|
+
|
|
94
|
+
// 모듈 모킹 (외부 라이브러리)
|
|
95
|
+
// 프레임워크별 방식을 따르되, 모킹 범위를 테스트 단위로 제한한다.
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 패턴 5: 경계값 테스트
|
|
99
|
+
|
|
100
|
+
비즈니스 로직의 경계 조건을 명시적으로 테스트한다.
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
group "비밀번호 검증":
|
|
104
|
+
// 경계값: 최소 길이
|
|
105
|
+
test "7자 비밀번호는 거부된다":
|
|
106
|
+
assert validatePassword("1234567") == false
|
|
107
|
+
|
|
108
|
+
test "8자 비밀번호는 허용된다":
|
|
109
|
+
assert validatePassword("12345678") == true
|
|
110
|
+
|
|
111
|
+
// 특수 케이스
|
|
112
|
+
test "빈 문자열은 거부된다":
|
|
113
|
+
assert validatePassword("") == false
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 테스트 유형별 가이드
|
|
117
|
+
|
|
118
|
+
### 단위 테스트 (Unit)
|
|
119
|
+
- 단일 함수/클래스의 로직 검증
|
|
120
|
+
- 외부 의존성 전부 모킹
|
|
121
|
+
- 실행 시간: 각 테스트 100ms 이내
|
|
122
|
+
- 커버리지 목표: 비즈니스 로직 80% 이상
|
|
123
|
+
|
|
124
|
+
### 통합 테스트 (Integration)
|
|
125
|
+
- 여러 모듈 간 상호작용 검증
|
|
126
|
+
- 실제 DB/파일시스템 사용 가능 (테스트용 인스턴스)
|
|
127
|
+
- 테스트 간 상태 격리 필수 (setup/teardown)
|
|
128
|
+
|
|
129
|
+
### E2E 테스트 (End-to-End)
|
|
130
|
+
- 사용자 시나리오 기반 전체 흐름 검증
|
|
131
|
+
- 핵심 사용자 경로(happy path)에 집중
|
|
132
|
+
- 불안정한 테스트(flaky test)는 즉시 수정하거나 격리
|
|
133
|
+
|
|
134
|
+
## 주의사항
|
|
135
|
+
|
|
136
|
+
- 구현 세부사항이 아닌 **동작(행위)**을 테스트한다
|
|
137
|
+
- 100% 커버리지를 목표로 하지 않는다. 의미 있는 테스트에 집중한다
|
|
138
|
+
- 테스트가 깨지면 프로덕션 코드보다 먼저 확인한다
|
|
139
|
+
- 테스트 실행 속도가 느려지면 병렬 실행, 모킹 범위 조정 등을 검토한다
|
|
140
|
+
- sleep/delay 기반의 대기 테스트는 피한다. 이벤트/폴링 기반으로 대체한다
|
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import { setup } from '../src/commands/setup.js';
|
|
4
|
+
import { status } from '../src/commands/status.js';
|
|
5
|
+
import { reset } from '../src/commands/reset.js';
|
|
6
|
+
import { validate } from '../src/commands/validate.js';
|
|
7
|
+
import { sessions } from '../src/commands/sessions.js';
|
|
8
|
+
import { logs } from '../src/commands/logs.js';
|
|
9
|
+
import { run } from '../src/commands/run.js';
|
|
10
|
+
import { config } from '../src/commands/config.js';
|
|
11
|
+
import { interactive } from '../src/commands/interactive.js';
|
|
12
|
+
import { upgrade } from '../src/commands/upgrade.js';
|
|
13
|
+
import { monitor } from '../src/commands/monitor.js';
|
|
14
|
+
import sprint from '../src/commands/sprint.js';
|
|
15
|
+
import docs from '../src/commands/docs.js';
|
|
16
|
+
import { skills } from '../src/commands/skills.js';
|
|
17
|
+
import { createRequire } from 'node:module';
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
const { version } = require('../../package.json');
|
|
20
|
+
program
|
|
21
|
+
.name('ada')
|
|
22
|
+
.description('Artifact-Driven AI Agent Framework\nAI가 규칙을 어기지 못하게 하는 문서 기반 개발')
|
|
23
|
+
.version(version)
|
|
24
|
+
.option('-m, --monitor', 'UI 모드 실행 (인터랙티브 인터페이스)');
|
|
25
|
+
// Setup command
|
|
26
|
+
program
|
|
27
|
+
.command('setup [template]')
|
|
28
|
+
.description('프로젝트 템플릿 세팅 (web, library, game, cli)')
|
|
29
|
+
.action(setup);
|
|
30
|
+
// Status command
|
|
31
|
+
program
|
|
32
|
+
.command('status')
|
|
33
|
+
.description('현재 세팅 상태 확인')
|
|
34
|
+
.action(status);
|
|
35
|
+
// Reset command
|
|
36
|
+
program
|
|
37
|
+
.command('reset')
|
|
38
|
+
.description('ai-dev-team 초기화')
|
|
39
|
+
.option('-f, --force', '확인 없이 강제 초기화')
|
|
40
|
+
.action(reset);
|
|
41
|
+
// Upgrade command
|
|
42
|
+
program
|
|
43
|
+
.command('upgrade')
|
|
44
|
+
.description('작업공간을 최신 버전으로 업그레이드')
|
|
45
|
+
.option('-f, --force', '확인 없이 강제 업그레이드')
|
|
46
|
+
.option('--dry-run', '변경 사항 미리보기 (실제 변경 없음)')
|
|
47
|
+
.option('--rollback', '이전 백업으로 롤백')
|
|
48
|
+
.action(upgrade);
|
|
49
|
+
// Validate command
|
|
50
|
+
program
|
|
51
|
+
.command('validate [doc]')
|
|
52
|
+
.description('문서 검증 (plan, project, backlog, sprint 또는 전체)')
|
|
53
|
+
.action(validate);
|
|
54
|
+
// Sessions command
|
|
55
|
+
program
|
|
56
|
+
.command('sessions')
|
|
57
|
+
.description('AI 실행 세션 목록')
|
|
58
|
+
.option('-w, --watch', '실시간 모니터링 모드')
|
|
59
|
+
.option('-c, --clean', '완료된 세션 정리')
|
|
60
|
+
.action(sessions);
|
|
61
|
+
// Logs command
|
|
62
|
+
program
|
|
63
|
+
.command('logs [sessionId]')
|
|
64
|
+
.description('세션 로그 확인')
|
|
65
|
+
.action(logs);
|
|
66
|
+
// Sprint command
|
|
67
|
+
program
|
|
68
|
+
.command('sprint <action> [tasks...]')
|
|
69
|
+
.description('스프린트 관리 (create, add, close, list)')
|
|
70
|
+
.action(sprint);
|
|
71
|
+
// Docs command
|
|
72
|
+
program
|
|
73
|
+
.command('docs <action>')
|
|
74
|
+
.description('문서 관리 (init, generate, publish, serve)')
|
|
75
|
+
.option('-g, --generator <type>', '문서 생성기 (mkdocs, jekyll)')
|
|
76
|
+
.action(docs);
|
|
77
|
+
// Skills command
|
|
78
|
+
program
|
|
79
|
+
.command('skills [action] [args...]')
|
|
80
|
+
.description('스킬 관리 (list, info, apply, remove, status, ui)')
|
|
81
|
+
.action(skills);
|
|
82
|
+
// Monitor command (UI 모드)
|
|
83
|
+
program
|
|
84
|
+
.command('monitor')
|
|
85
|
+
.alias('m')
|
|
86
|
+
.description('UI 모드 (인터랙티브 인터페이스)')
|
|
87
|
+
.action(monitor);
|
|
88
|
+
// Config command
|
|
89
|
+
program
|
|
90
|
+
.command('config [action] [key] [value]')
|
|
91
|
+
.description('설정 조회/변경 (대화형), show, get <key>, set <key> <value>')
|
|
92
|
+
.action(config);
|
|
93
|
+
// Run command
|
|
94
|
+
program
|
|
95
|
+
.command('run <role> [tool]')
|
|
96
|
+
.description('AI 에이전트 실행 (예: run backend [claude])')
|
|
97
|
+
.action(run);
|
|
98
|
+
// Parse arguments
|
|
99
|
+
const args = process.argv.slice(2);
|
|
100
|
+
// 명령어 목록
|
|
101
|
+
const COMMANDS = ['setup', 'status', 'reset', 'upgrade', 'validate', 'sessions', 'logs', 'run', 'sprint', 'docs', 'skills', 'config', 'monitor', 'm'];
|
|
102
|
+
if (args.length === 0) {
|
|
103
|
+
// 인자 없으면 대화형 모드
|
|
104
|
+
interactive();
|
|
105
|
+
}
|
|
106
|
+
else if (args.includes('-m') || args.includes('--monitor')) {
|
|
107
|
+
// -m 또는 --monitor 옵션이 있으면 대시보드 실행
|
|
108
|
+
monitor();
|
|
109
|
+
}
|
|
110
|
+
else if (args.length === 2 && !args[0].startsWith('-') && !COMMANDS.includes(args[0])) {
|
|
111
|
+
// 두 개의 인자가 명령어가 아니면 role tool로 간주 (간편 실행)
|
|
112
|
+
run(args[0], args[1]);
|
|
113
|
+
}
|
|
114
|
+
else if (args.length === 1 && !args[0].startsWith('-') && !COMMANDS.includes(args[0])) {
|
|
115
|
+
// 인자가 하나면 role로 간주하고 도구는 자동 선택
|
|
116
|
+
run(args[0]);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
program.parse();
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|