vibe-commander 0.1.0
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/LICENSE +21 -0
- package/dist/adapters/cli/commands/context-resolver.d.ts +29 -0
- package/dist/adapters/cli/commands/context-resolver.js +93 -0
- package/dist/adapters/cli/commands/context.d.ts +26 -0
- package/dist/adapters/cli/commands/context.js +39 -0
- package/dist/adapters/cli/commands/git-helpers.d.ts +43 -0
- package/dist/adapters/cli/commands/git-helpers.js +99 -0
- package/dist/adapters/cli/commands/init-helpers.d.ts +30 -0
- package/dist/adapters/cli/commands/init-helpers.js +112 -0
- package/dist/adapters/cli/commands/init-interactive.d.ts +25 -0
- package/dist/adapters/cli/commands/init-interactive.js +143 -0
- package/dist/adapters/cli/commands/init.d.ts +25 -0
- package/dist/adapters/cli/commands/init.js +73 -0
- package/dist/adapters/cli/commands/io-helpers.d.ts +45 -0
- package/dist/adapters/cli/commands/io-helpers.js +144 -0
- package/dist/adapters/cli/commands/list-units.d.ts +39 -0
- package/dist/adapters/cli/commands/list-units.js +92 -0
- package/dist/adapters/cli/commands/prompt-helpers.d.ts +36 -0
- package/dist/adapters/cli/commands/prompt-helpers.js +113 -0
- package/dist/adapters/cli/commands/set-unit.d.ts +44 -0
- package/dist/adapters/cli/commands/set-unit.js +90 -0
- package/dist/adapters/cli/commands/skill-install.d.ts +31 -0
- package/dist/adapters/cli/commands/skill-install.js +85 -0
- package/dist/adapters/cli/commands/state-helpers.d.ts +28 -0
- package/dist/adapters/cli/commands/state-helpers.js +55 -0
- package/dist/adapters/cli/commands/update-commit.d.ts +42 -0
- package/dist/adapters/cli/commands/update-commit.js +180 -0
- package/dist/adapters/cli/commands/validate.d.ts +40 -0
- package/dist/adapters/cli/commands/validate.js +219 -0
- package/dist/adapters/cli/formatters-list.d.ts +36 -0
- package/dist/adapters/cli/formatters-list.js +106 -0
- package/dist/adapters/cli/formatters-unit.d.ts +44 -0
- package/dist/adapters/cli/formatters-unit.js +287 -0
- package/dist/adapters/cli/formatters.d.ts +2 -0
- package/dist/adapters/cli/formatters.js +3 -0
- package/dist/adapters/cli/index.d.ts +17 -0
- package/dist/adapters/cli/index.js +60 -0
- package/dist/adapters/cli/output.d.ts +58 -0
- package/dist/adapters/cli/output.js +159 -0
- package/dist/adapters/cli/router.d.ts +99 -0
- package/dist/adapters/cli/router.js +419 -0
- package/dist/adapters/cli/scanner.d.ts +19 -0
- package/dist/adapters/cli/scanner.js +227 -0
- package/dist/adapters/pipe/stdin-reader.d.ts +23 -0
- package/dist/adapters/pipe/stdin-reader.js +56 -0
- package/dist/config/loader.d.ts +27 -0
- package/dist/config/loader.js +84 -0
- package/dist/config/resolver.d.ts +71 -0
- package/dist/config/resolver.js +124 -0
- package/dist/config/schema.d.ts +205 -0
- package/dist/config/schema.js +186 -0
- package/dist/core/parsers/backlog-parser.d.ts +25 -0
- package/dist/core/parsers/backlog-parser.js +255 -0
- package/dist/core/parsers/dep-line-parser.d.ts +36 -0
- package/dist/core/parsers/dep-line-parser.js +176 -0
- package/dist/core/parsers/dependency-extractor.d.ts +64 -0
- package/dist/core/parsers/dependency-extractor.js +193 -0
- package/dist/core/parsers/index.d.ts +20 -0
- package/dist/core/parsers/index.js +20 -0
- package/dist/core/parsers/md-utils.d.ts +81 -0
- package/dist/core/parsers/md-utils.js +144 -0
- package/dist/core/parsers/metadata-parser.d.ts +49 -0
- package/dist/core/parsers/metadata-parser.js +133 -0
- package/dist/core/parsers/pairing-question-extractor.d.ts +42 -0
- package/dist/core/parsers/pairing-question-extractor.js +146 -0
- package/dist/core/parsers/plan-parser-helpers.d.ts +61 -0
- package/dist/core/parsers/plan-parser-helpers.js +90 -0
- package/dist/core/parsers/plan-parser.d.ts +55 -0
- package/dist/core/parsers/plan-parser.js +69 -0
- package/dist/core/parsers/title-extractor.d.ts +36 -0
- package/dist/core/parsers/title-extractor.js +101 -0
- package/dist/core/renderers/index.d.ts +15 -0
- package/dist/core/renderers/index.js +18 -0
- package/dist/core/renderers/interpolate.d.ts +92 -0
- package/dist/core/renderers/interpolate.js +117 -0
- package/dist/core/renderers/marker-utils.d.ts +60 -0
- package/dist/core/renderers/marker-utils.js +85 -0
- package/dist/core/renderers/section-renderer.d.ts +31 -0
- package/dist/core/renderers/section-renderer.js +171 -0
- package/dist/core/renderers/section-updater.d.ts +72 -0
- package/dist/core/renderers/section-updater.js +175 -0
- package/dist/core/renderers/template-engine.d.ts +69 -0
- package/dist/core/renderers/template-engine.js +92 -0
- package/dist/core/renderers/updater-helpers.d.ts +45 -0
- package/dist/core/renderers/updater-helpers.js +83 -0
- package/dist/core/resolvers/commit-filter.d.ts +84 -0
- package/dist/core/resolvers/commit-filter.js +95 -0
- package/dist/core/resolvers/config-generator.d.ts +32 -0
- package/dist/core/resolvers/config-generator.js +112 -0
- package/dist/core/resolvers/config-merger.d.ts +26 -0
- package/dist/core/resolvers/config-merger.js +89 -0
- package/dist/core/resolvers/config-validator.d.ts +42 -0
- package/dist/core/resolvers/config-validator.js +61 -0
- package/dist/core/resolvers/dep-commit-resolver.d.ts +63 -0
- package/dist/core/resolvers/dep-commit-resolver.js +158 -0
- package/dist/core/resolvers/dep-doc-resolver.d.ts +70 -0
- package/dist/core/resolvers/dep-doc-resolver.js +84 -0
- package/dist/core/resolvers/index.d.ts +15 -0
- package/dist/core/resolvers/index.js +12 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/types/config.d.ts +10 -0
- package/dist/types/config.js +10 -0
- package/dist/types/context.d.ts +55 -0
- package/dist/types/context.js +10 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.js +10 -0
- package/dist/types/init.d.ts +56 -0
- package/dist/types/init.js +10 -0
- package/dist/types/tool-result.d.ts +75 -0
- package/dist/types/tool-result.js +40 -0
- package/dist/types/unit.d.ts +118 -0
- package/dist/types/unit.js +10 -0
- package/package.json +71 -0
- package/skills/claude/SKILL.md +375 -0
- package/skills/common/cli-reference.md +251 -0
- package/skills/cursor/SKILL.md +353 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* vibe-commander CLI 진입점 — Layer 3 (Adapter)
|
|
4
|
+
*
|
|
5
|
+
* hashbang을 포함하여 `npx vc` 또는 글로벌 설치 후 `vc` 명령으로 실행 가능.
|
|
6
|
+
* 설정 파일을 로드하고 서브커맨드 라우터로 위임.
|
|
7
|
+
*
|
|
8
|
+
* 파이프라인:
|
|
9
|
+
* 1. 프로젝트 루트 결정 (cwd 기준)
|
|
10
|
+
* 2. process.argv 파싱 → 서브커맨드 판별
|
|
11
|
+
* 3. loadConfig 호출 → 설정 주입
|
|
12
|
+
* 4. 서브커맨드 핸들러 실행 → 결과 출력
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* vibe-commander CLI 진입점 — Layer 3 (Adapter)
|
|
4
|
+
*
|
|
5
|
+
* hashbang을 포함하여 `npx vc` 또는 글로벌 설치 후 `vc` 명령으로 실행 가능.
|
|
6
|
+
* 설정 파일을 로드하고 서브커맨드 라우터로 위임.
|
|
7
|
+
*
|
|
8
|
+
* 파이프라인:
|
|
9
|
+
* 1. 프로젝트 루트 결정 (cwd 기준)
|
|
10
|
+
* 2. process.argv 파싱 → 서브커맨드 판별
|
|
11
|
+
* 3. loadConfig 호출 → 설정 주입
|
|
12
|
+
* 4. 서브커맨드 핸들러 실행 → 결과 출력
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { resolve } from 'node:path';
|
|
17
|
+
import { route } from './router.js';
|
|
18
|
+
import { handleSetUnit } from './commands/set-unit.js';
|
|
19
|
+
import { handleUpdateCommit } from './commands/update-commit.js';
|
|
20
|
+
import { handleListUnits } from './commands/list-units.js';
|
|
21
|
+
import { handleContext } from './commands/context.js';
|
|
22
|
+
import { handleInit } from './commands/init.js';
|
|
23
|
+
import { handleValidate } from './commands/validate.js';
|
|
24
|
+
import { handleSkillInstall } from './commands/skill-install.js';
|
|
25
|
+
import { formatContext, formatSetUnit, formatInit, formatValidate, formatSkillInstall, } from './formatters-unit.js';
|
|
26
|
+
import { formatListUnits, formatUpdateCommit } from './formatters-list.js';
|
|
27
|
+
const handlers = {
|
|
28
|
+
init: handleInit,
|
|
29
|
+
'set-unit': handleSetUnit,
|
|
30
|
+
'update-commit': handleUpdateCommit,
|
|
31
|
+
'list-units': handleListUnits,
|
|
32
|
+
context: handleContext,
|
|
33
|
+
validate: handleValidate,
|
|
34
|
+
'skill-install': handleSkillInstall,
|
|
35
|
+
};
|
|
36
|
+
const formatters = {
|
|
37
|
+
init: formatInit,
|
|
38
|
+
'set-unit': formatSetUnit,
|
|
39
|
+
'update-commit': formatUpdateCommit,
|
|
40
|
+
'list-units': formatListUnits,
|
|
41
|
+
context: formatContext,
|
|
42
|
+
validate: formatValidate,
|
|
43
|
+
'skill-install': formatSkillInstall,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* CLI 메인 실행 함수
|
|
47
|
+
*
|
|
48
|
+
* 프로젝트 루트를 cwd로 결정하고 라우터에 위임한다.
|
|
49
|
+
* 설정 로드는 각 서브커맨드 핸들러 내부에서 수행하여,
|
|
50
|
+
* --help, --version 등 설정 불필요 커맨드의 부팅 속도를 최적화.
|
|
51
|
+
*/
|
|
52
|
+
async function main() {
|
|
53
|
+
const projectRoot = resolve(process.cwd());
|
|
54
|
+
await route(process.argv, projectRoot, handlers, formatters);
|
|
55
|
+
}
|
|
56
|
+
main().catch((err) => {
|
|
57
|
+
console.error('예기치 않은 오류:', err instanceof Error ? err.message : String(err));
|
|
58
|
+
process.exitCode = 1;
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 콘솔 출력 기본 유틸리티 — Layer 3 (Adapter)
|
|
3
|
+
*
|
|
4
|
+
* ToolResult 기반 성공/에러 메시지 출력과 글로벌 도움말을 담당한다.
|
|
5
|
+
* ANSI escape 코드를 직접 사용하여 외부 의존성 없이 컬러 출력.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolResult } from '../../types/index.js';
|
|
10
|
+
export declare const RESET = "\u001B[0m";
|
|
11
|
+
export declare const RED = "\u001B[31m";
|
|
12
|
+
export declare const GREEN = "\u001B[32m";
|
|
13
|
+
export declare const YELLOW = "\u001B[33m";
|
|
14
|
+
export declare const CYAN = "\u001B[36m";
|
|
15
|
+
export declare const DIM = "\u001B[2m";
|
|
16
|
+
export declare const BOLD = "\u001B[1m";
|
|
17
|
+
/**
|
|
18
|
+
* 성공 결과를 콘솔에 출력한다
|
|
19
|
+
*
|
|
20
|
+
* JSON 모드일 경우 구조화된 JSON을 stdout에 출력하고,
|
|
21
|
+
* 일반 모드에서는 사람이 읽기 편한 포맷으로 출력한다.
|
|
22
|
+
*
|
|
23
|
+
* @param result - ToolResult 성공 결과
|
|
24
|
+
* @param json - JSON 출력 모드 여부
|
|
25
|
+
*/
|
|
26
|
+
export declare function printSuccess<T>(result: ToolResult<T>, json: boolean): void;
|
|
27
|
+
/**
|
|
28
|
+
* 에러 결과를 콘솔에 출력한다
|
|
29
|
+
*
|
|
30
|
+
* JSON 모드일 경우 구조화된 에러 JSON을 stderr에 출력하고,
|
|
31
|
+
* 일반 모드에서는 빨간 텍스트로 사람이 읽기 편하게 출력한다.
|
|
32
|
+
*
|
|
33
|
+
* @param result - ToolResult 에러 결과
|
|
34
|
+
* @param json - JSON 출력 모드 여부
|
|
35
|
+
*/
|
|
36
|
+
export declare function printError<T>(result: ToolResult<T>, json: boolean): void;
|
|
37
|
+
/**
|
|
38
|
+
* 도움말 메시지를 출력한다
|
|
39
|
+
*/
|
|
40
|
+
export declare function printHelp(): void;
|
|
41
|
+
/**
|
|
42
|
+
* 버전 정보를 출력한다
|
|
43
|
+
*/
|
|
44
|
+
export declare function printVersion(): void;
|
|
45
|
+
/**
|
|
46
|
+
* 알 수 없는 커맨드 에러를 출력한다
|
|
47
|
+
*
|
|
48
|
+
* @param command - 사용자가 입력한 알 수 없는 커맨드
|
|
49
|
+
*/
|
|
50
|
+
export declare function printUnknownCommand(command: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* 필수 인자 누락 에러를 출력한다
|
|
53
|
+
*
|
|
54
|
+
* @param command - 현재 커맨드
|
|
55
|
+
* @param argName - 누락된 인자 이름
|
|
56
|
+
*/
|
|
57
|
+
export declare function printMissingArg(command: string, argName: string): void;
|
|
58
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 콘솔 출력 기본 유틸리티 — Layer 3 (Adapter)
|
|
3
|
+
*
|
|
4
|
+
* ToolResult 기반 성공/에러 메시지 출력과 글로벌 도움말을 담당한다.
|
|
5
|
+
* ANSI escape 코드를 직접 사용하여 외부 의존성 없이 컬러 출력.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { createRequire } from 'node:module';
|
|
10
|
+
// ── ANSI 컬러 코드 ──
|
|
11
|
+
export const RESET = '\x1b[0m';
|
|
12
|
+
export const RED = '\x1b[31m';
|
|
13
|
+
export const GREEN = '\x1b[32m';
|
|
14
|
+
export const YELLOW = '\x1b[33m';
|
|
15
|
+
export const CYAN = '\x1b[36m';
|
|
16
|
+
export const DIM = '\x1b[2m';
|
|
17
|
+
export const BOLD = '\x1b[1m';
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
const pkg = require('../../../package.json');
|
|
20
|
+
const VERSION = pkg.version;
|
|
21
|
+
/**
|
|
22
|
+
* 성공 결과를 콘솔에 출력한다
|
|
23
|
+
*
|
|
24
|
+
* JSON 모드일 경우 구조화된 JSON을 stdout에 출력하고,
|
|
25
|
+
* 일반 모드에서는 사람이 읽기 편한 포맷으로 출력한다.
|
|
26
|
+
*
|
|
27
|
+
* @param result - ToolResult 성공 결과
|
|
28
|
+
* @param json - JSON 출력 모드 여부
|
|
29
|
+
*/
|
|
30
|
+
export function printSuccess(result, json) {
|
|
31
|
+
if (!result.success)
|
|
32
|
+
return;
|
|
33
|
+
if (json) {
|
|
34
|
+
console.log(JSON.stringify(result, null, 2));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(`${GREEN}✅ 성공${RESET}`);
|
|
38
|
+
if (result.data && typeof result.data === 'object') {
|
|
39
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(String(result.data));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 에러 결과를 콘솔에 출력한다
|
|
48
|
+
*
|
|
49
|
+
* JSON 모드일 경우 구조화된 에러 JSON을 stderr에 출력하고,
|
|
50
|
+
* 일반 모드에서는 빨간 텍스트로 사람이 읽기 편하게 출력한다.
|
|
51
|
+
*
|
|
52
|
+
* @param result - ToolResult 에러 결과
|
|
53
|
+
* @param json - JSON 출력 모드 여부
|
|
54
|
+
*/
|
|
55
|
+
export function printError(result, json) {
|
|
56
|
+
if (result.success)
|
|
57
|
+
return;
|
|
58
|
+
if (json) {
|
|
59
|
+
console.error(JSON.stringify(result, null, 2));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.error(`${RED}❌ 에러: ${result.error.message}${RESET}`);
|
|
63
|
+
console.error(`${DIM} 코드: ${result.error.code}${RESET}`);
|
|
64
|
+
if (result.error.details) {
|
|
65
|
+
console.error(`${DIM} 상세: ${result.error.details}${RESET}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 도움말 메시지를 출력한다
|
|
71
|
+
*/
|
|
72
|
+
export function printHelp() {
|
|
73
|
+
console.log(`
|
|
74
|
+
${BOLD}vibe-commander${RESET} ${DIM}v${VERSION}${RESET}
|
|
75
|
+
${DIM}유닛 기반 바이브 코딩 워크플로우 자동화 CLI 도구${RESET}
|
|
76
|
+
|
|
77
|
+
${YELLOW}사용법:${RESET}
|
|
78
|
+
${CYAN}vc${RESET} <command> [options]
|
|
79
|
+
|
|
80
|
+
${YELLOW}명령어:${RESET}
|
|
81
|
+
${CYAN}init${RESET} [--from-existing] 프로젝트 초기화 (설정 생성)
|
|
82
|
+
${CYAN}set-unit${RESET} <unitId> [--request] 현재 작업 유닛 설정
|
|
83
|
+
${CYAN}update-commit${RESET} [sha|N] 커밋 SHA 업데이트 (인자 없음=HEAD, 숫자=최근 N개)
|
|
84
|
+
${CYAN}list-units${RESET} 미완료 유닛 목록
|
|
85
|
+
${CYAN}context${RESET} <unitId> 유닛 컨텍스트 조회 (읽기 전용)
|
|
86
|
+
${CYAN}validate${RESET} 설정 파일 검증
|
|
87
|
+
${CYAN}skill install${RESET} SKILL 파일 설치 (Cursor/Claude/Gemini)
|
|
88
|
+
|
|
89
|
+
${YELLOW}글로벌 옵션:${RESET}
|
|
90
|
+
${CYAN}--help${RESET}, ${CYAN}-h${RESET} 도움말 출력
|
|
91
|
+
${CYAN}--version${RESET}, ${CYAN}-v${RESET} 버전 출력
|
|
92
|
+
${CYAN}--json${RESET} JSON 형식으로 출력 (ToolResult 구조)
|
|
93
|
+
${CYAN}--stdin${RESET} stdin에서 JSON 입력 읽기
|
|
94
|
+
|
|
95
|
+
${YELLOW}set-unit 옵션:${RESET}
|
|
96
|
+
${CYAN}--request${RESET} <key1,key2> 커스텀 특별 요청사항 키 선택 (콤마 구분)
|
|
97
|
+
${CYAN}--no-prompt${RESET} 페어링 질문 인터랙티브 프롬프트 비활성화
|
|
98
|
+
|
|
99
|
+
${YELLOW}update-commit 옵션:${RESET}
|
|
100
|
+
${CYAN}--mode${RESET} replace|append 값 교체 또는 추가 (기본: replace)
|
|
101
|
+
${CYAN}--section${RESET} <name> 대상 섹션 지정 (미지정 시 자동 감지)
|
|
102
|
+
|
|
103
|
+
${YELLOW}init 옵션:${RESET}
|
|
104
|
+
${CYAN}--from-existing${RESET} 기존 파일 스캔으로 ID 패턴/디렉토리 자동 감지
|
|
105
|
+
|
|
106
|
+
${YELLOW}skill install 옵션:${RESET}
|
|
107
|
+
${CYAN}--cursor${RESET} Cursor만 설치 (.cursor/skills/)
|
|
108
|
+
${CYAN}--claude${RESET} Claude Code만 설치 (.claude/skills/)
|
|
109
|
+
${CYAN}--gemini${RESET} Gemini만 설치 (.gemini/skills/)
|
|
110
|
+
${CYAN}--force${RESET} 기존 파일 덮어쓰기
|
|
111
|
+
|
|
112
|
+
${YELLOW}예시:${RESET}
|
|
113
|
+
${DIM}$ vc validate${RESET} ${DIM}# 설정 파일 종합 검증${RESET}
|
|
114
|
+
${DIM}$ vc init${RESET}
|
|
115
|
+
${DIM}$ vc init --from-existing${RESET} ${DIM}# 기존 파일 스캔으로 자동 설정${RESET}
|
|
116
|
+
${DIM}$ vc set-unit U-013[Mvp]${RESET}
|
|
117
|
+
${DIM}$ vc set-unit U-013[Mvp] --request mcp-nanobanana,mcp-codrag${RESET}
|
|
118
|
+
${DIM}$ vc update-commit${RESET} ${DIM}# HEAD SHA 자동 감지${RESET}
|
|
119
|
+
${DIM}$ vc update-commit 3${RESET} ${DIM}# 최근 3개 커밋 SHA${RESET}
|
|
120
|
+
${DIM}$ vc update-commit abc1234 --mode append${RESET}
|
|
121
|
+
${DIM}$ vc list-units --phase Mvp${RESET}
|
|
122
|
+
${DIM}$ vc context U-013[Mvp] --json${RESET}
|
|
123
|
+
${DIM}$ vc skill install${RESET} ${DIM}# Cursor + Claude + Gemini 모두 설치${RESET}
|
|
124
|
+
${DIM}$ vc skill install --cursor${RESET} ${DIM}# Cursor만 설치${RESET}
|
|
125
|
+
${DIM}$ vc skill install --force${RESET} ${DIM}# 기존 파일 덮어쓰기${RESET}
|
|
126
|
+
|
|
127
|
+
${YELLOW}파이프 모드 (에이전트/오케스트레이터 연동):${RESET}
|
|
128
|
+
${DIM}$ echo '{"unitId":"U-013[Mvp]"}' | vc set-unit --stdin --json${RESET}
|
|
129
|
+
${DIM}$ echo '{"count":3}' | vc update-commit --stdin --json${RESET}
|
|
130
|
+
${DIM}$ echo '{}' | vc list-units --stdin --json${RESET}
|
|
131
|
+
${DIM}$ echo '{"unitId":"U-013[Mvp]"}' | vc context --stdin --json${RESET}
|
|
132
|
+
`);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 버전 정보를 출력한다
|
|
136
|
+
*/
|
|
137
|
+
export function printVersion() {
|
|
138
|
+
console.log(`vibe-commander v${VERSION}`);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 알 수 없는 커맨드 에러를 출력한다
|
|
142
|
+
*
|
|
143
|
+
* @param command - 사용자가 입력한 알 수 없는 커맨드
|
|
144
|
+
*/
|
|
145
|
+
export function printUnknownCommand(command) {
|
|
146
|
+
console.error(`${RED}❌ 알 수 없는 명령어: ${command}${RESET}`);
|
|
147
|
+
console.error(`${DIM} 'vc --help'로 사용 가능한 명령어를 확인하세요.${RESET}\n`);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 필수 인자 누락 에러를 출력한다
|
|
151
|
+
*
|
|
152
|
+
* @param command - 현재 커맨드
|
|
153
|
+
* @param argName - 누락된 인자 이름
|
|
154
|
+
*/
|
|
155
|
+
export function printMissingArg(command, argName) {
|
|
156
|
+
console.error(`${RED}❌ '${command}' 명령어에 <${argName}> 인자가 필요합니다.${RESET}`);
|
|
157
|
+
console.error(`${DIM} 사용법: vc ${command} <${argName}>${RESET}\n`);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 서브커맨드 라우터 — Layer 3 (Adapter)
|
|
3
|
+
*
|
|
4
|
+
* process.argv를 직접 파싱하여 4개 서브커맨드(set-unit, update-commit,
|
|
5
|
+
* list-units, context)로 라우팅한다. Commander.js 등 외부 의존성 없이
|
|
6
|
+
* 자체 arg 파싱을 구현 (RULE-003, 페어링 Q1 Option B 채택).
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolResult } from '../../types/index.js';
|
|
11
|
+
/** 파싱된 서브커맨드별 옵션 */
|
|
12
|
+
export interface SetUnitArgs {
|
|
13
|
+
command: 'set-unit';
|
|
14
|
+
unitId: string;
|
|
15
|
+
requestKeys: string[];
|
|
16
|
+
noPrompt: boolean;
|
|
17
|
+
json: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface UpdateCommitArgs {
|
|
20
|
+
command: 'update-commit';
|
|
21
|
+
commitMode: 'auto-head' | 'auto-recent' | 'manual';
|
|
22
|
+
sha?: string;
|
|
23
|
+
count?: number;
|
|
24
|
+
mode: 'replace' | 'append';
|
|
25
|
+
section?: string;
|
|
26
|
+
json: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface ListUnitsArgs {
|
|
29
|
+
command: 'list-units';
|
|
30
|
+
phase?: string;
|
|
31
|
+
json: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ContextArgs {
|
|
34
|
+
command: 'context';
|
|
35
|
+
unitId: string;
|
|
36
|
+
json: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface ValidateArgs {
|
|
39
|
+
command: 'validate';
|
|
40
|
+
json: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface InitArgs {
|
|
43
|
+
command: 'init';
|
|
44
|
+
json: boolean;
|
|
45
|
+
fromExisting: boolean;
|
|
46
|
+
force: boolean;
|
|
47
|
+
stdinData?: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
export interface SkillInstallArgs {
|
|
50
|
+
command: 'skill-install';
|
|
51
|
+
targets: ('cursor' | 'claude' | 'gemini')[];
|
|
52
|
+
force: boolean;
|
|
53
|
+
json: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface HelpArgs {
|
|
56
|
+
command: 'help';
|
|
57
|
+
}
|
|
58
|
+
export interface VersionArgs {
|
|
59
|
+
command: 'version';
|
|
60
|
+
}
|
|
61
|
+
export type ParsedArgs = SetUnitArgs | UpdateCommitArgs | ListUnitsArgs | ContextArgs | ValidateArgs | InitArgs | SkillInstallArgs | HelpArgs | VersionArgs;
|
|
62
|
+
export type CommandHandler = (args: ParsedArgs, projectRoot: string) => Promise<ToolResult<unknown>> | ToolResult<unknown>;
|
|
63
|
+
/** 커맨드별 커스텀 출력 포맷터 (list-units, context 등에서 사용) */
|
|
64
|
+
export type CommandFormatter = (result: ToolResult<unknown>, json: boolean) => void;
|
|
65
|
+
/**
|
|
66
|
+
* process.argv로부터 서브커맨드와 인자/옵션을 파싱한다
|
|
67
|
+
*
|
|
68
|
+
* argv[0] = node, argv[1] = script, argv[2] = subcommand 형태.
|
|
69
|
+
* 글로벌 플래그(--help, --version)는 서브커맨드보다 우선 처리.
|
|
70
|
+
*
|
|
71
|
+
* @param argv - process.argv 배열
|
|
72
|
+
* @returns 파싱된 커맨드 인자 또는 에러
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseArgs(argv: readonly string[]): ToolResult<ParsedArgs>;
|
|
75
|
+
/**
|
|
76
|
+
* stdin JSON 데이터로부터 ParsedArgs를 생성한다
|
|
77
|
+
*
|
|
78
|
+
* 서브커맨드는 argv에서 결정되고, 인자/옵션은 stdin JSON에서 추출.
|
|
79
|
+
* --stdin은 --no-prompt를 암시한다 (stdin이 JSON 데이터에 사용되므로 인터랙티브 불가).
|
|
80
|
+
*
|
|
81
|
+
* @param subcommand - argv에서 추출한 서브커맨드 이름
|
|
82
|
+
* @param data - stdin에서 파싱한 JSON 객체
|
|
83
|
+
* @param json - --json 플래그 여부
|
|
84
|
+
* @returns ParsedArgs 또는 에러
|
|
85
|
+
*/
|
|
86
|
+
export declare function parseStdinArgs(subcommand: string, data: Record<string, unknown>, json: boolean, rawArgs?: readonly string[]): ToolResult<ParsedArgs>;
|
|
87
|
+
/**
|
|
88
|
+
* CLI 라우터 메인 실행 함수
|
|
89
|
+
*
|
|
90
|
+
* process.argv를 파싱하고, 해당 서브커맨드의 핸들러를 호출하여 결과를 출력한다.
|
|
91
|
+
* 커맨드별 커스텀 포맷터가 등록되어 있으면 기본 출력 대신 포맷터를 사용.
|
|
92
|
+
*
|
|
93
|
+
* @param argv - process.argv
|
|
94
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
95
|
+
* @param handlers - 서브커맨드별 핸들러 맵 (선택, 미제공 시 stub 사용)
|
|
96
|
+
* @param formatters - 서브커맨드별 커스텀 출력 포맷터 (선택)
|
|
97
|
+
*/
|
|
98
|
+
export declare function route(argv: readonly string[], projectRoot: string, handlers?: Partial<Record<string, CommandHandler>>, formatters?: Partial<Record<string, CommandFormatter>>): Promise<void>;
|
|
99
|
+
//# sourceMappingURL=router.d.ts.map
|