vibe-commander 0.2.0 → 0.2.1

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 (37) hide show
  1. package/AGENTS.md +1 -0
  2. package/README.ko.md +643 -0
  3. package/README.md +643 -0
  4. package/dist/adapters/cli/commands/git-helpers.js +5 -3
  5. package/dist/adapters/cli/commands/init-helpers.js +1 -1
  6. package/dist/adapters/cli/commands/io-helpers.js +6 -2
  7. package/dist/adapters/cli/commands/schema.js +7 -3
  8. package/dist/adapters/cli/commands/set-unit.js +8 -2
  9. package/dist/adapters/cli/commands/skill-install.js +10 -4
  10. package/dist/adapters/cli/formatters-schema.d.ts +17 -0
  11. package/dist/adapters/cli/formatters-schema.js +155 -0
  12. package/dist/adapters/cli/formatters-unit.d.ts +0 -8
  13. package/dist/adapters/cli/formatters-unit.js +0 -146
  14. package/dist/adapters/cli/index.js +2 -1
  15. package/dist/adapters/cli/router.d.ts +0 -12
  16. package/dist/adapters/cli/router.js +4 -103
  17. package/dist/adapters/cli/stdin-parser.d.ts +23 -0
  18. package/dist/adapters/cli/stdin-parser.js +109 -0
  19. package/dist/config/schema.d.ts +0 -9
  20. package/dist/config/schema.js +138 -56
  21. package/dist/core/renderers/index.d.ts +1 -1
  22. package/dist/core/renderers/index.js +1 -1
  23. package/dist/core/renderers/marker-utils.js +5 -3
  24. package/dist/core/renderers/schema-renderer.d.ts +16 -0
  25. package/dist/core/renderers/schema-renderer.js +21 -0
  26. package/dist/core/resolvers/index.d.ts +0 -2
  27. package/examples/nextjs-web.config.json +73 -0
  28. package/examples/python-backend.config.json +91 -0
  29. package/examples/tauri-app.config.json +95 -0
  30. package/examples/vscode-tasks.json +101 -0
  31. package/package.json +14 -2
  32. package/schemas/config-schema.json +409 -0
  33. package/skills/claude/SKILL.md +22 -0
  34. package/skills/common/cli-reference.md +22 -0
  35. package/skills/cursor/SKILL.md +22 -0
  36. package/dist/adapters/cli/formatters.d.ts +0 -2
  37. package/dist/adapters/cli/formatters.js +0 -3
@@ -0,0 +1,409 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "$schema": {
6
+ "description": "JSON Schema URL for IDE autocomplete and validation",
7
+ "type": "string"
8
+ },
9
+ "version": {
10
+ "type": "number",
11
+ "const": 1,
12
+ "description": "Configuration file version (currently 1)"
13
+ },
14
+ "paths": {
15
+ "type": "object",
16
+ "properties": {
17
+ "commands": {
18
+ "default": "commands.md",
19
+ "description": "Command file path where unit context sections are managed",
20
+ "type": "string"
21
+ },
22
+ "roadmap": {
23
+ "default": "roadmap.md",
24
+ "description": "Roadmap/backlog file path. Set to null to disable list-units command",
25
+ "anyOf": [
26
+ {
27
+ "type": "string"
28
+ },
29
+ {
30
+ "type": "null"
31
+ }
32
+ ]
33
+ },
34
+ "docRoots": {
35
+ "default": {
36
+ "plan": "unit-plans",
37
+ "result": "unit-results",
38
+ "runbook": "unit-runbooks"
39
+ },
40
+ "description": "Document root directories by role (key: role name, value: relative path)",
41
+ "type": "object",
42
+ "propertyNames": {
43
+ "type": "string"
44
+ },
45
+ "additionalProperties": {
46
+ "type": "string"
47
+ }
48
+ },
49
+ "refactorSubDir": {
50
+ "default": null,
51
+ "description": "Refactoring sub-unit directory. Set to null if sub-units are not used",
52
+ "anyOf": [
53
+ {
54
+ "type": "string"
55
+ },
56
+ {
57
+ "type": "null"
58
+ }
59
+ ]
60
+ }
61
+ },
62
+ "required": [
63
+ "commands",
64
+ "roadmap",
65
+ "docRoots",
66
+ "refactorSubDir"
67
+ ],
68
+ "additionalProperties": false
69
+ },
70
+ "unitTypes": {
71
+ "minItems": 1,
72
+ "type": "array",
73
+ "items": {
74
+ "type": "object",
75
+ "properties": {
76
+ "key": {
77
+ "type": "string",
78
+ "description": "Unique type key (e.g. 'implement', 'refactor', 'feature')"
79
+ },
80
+ "displayName": {
81
+ "description": "Human-readable display name for this type",
82
+ "type": "string"
83
+ },
84
+ "idPattern": {
85
+ "type": "string",
86
+ "description": "Regex pattern to match unit IDs (e.g. '^U-\\\\d+.*', '^FEAT-\\\\d+$')"
87
+ },
88
+ "planDir": {
89
+ "type": "string",
90
+ "description": "Document root key (from paths.docRoots) where plans are stored"
91
+ },
92
+ "commandSection": {
93
+ "type": "string",
94
+ "description": "Target section header in the command file (e.g. '# Unit Implementation')"
95
+ },
96
+ "collectDeps": {
97
+ "type": "boolean",
98
+ "description": "Whether to collect dependency documents and commits for this type"
99
+ },
100
+ "headerTemplate": {
101
+ "type": "string",
102
+ "description": "Section header template with variable interpolation: {{unitId}}, {{title}}, {{titleOnly}}, {{planPath}}, {{shortId}}"
103
+ }
104
+ },
105
+ "required": [
106
+ "key",
107
+ "idPattern",
108
+ "planDir",
109
+ "commandSection",
110
+ "collectDeps",
111
+ "headerTemplate"
112
+ ],
113
+ "additionalProperties": false
114
+ },
115
+ "description": "Unit type definitions. Array order determines ID matching priority (first match wins)"
116
+ },
117
+ "docDiscovery": {
118
+ "default": {
119
+ "plan": {
120
+ "pattern": "{{unitId}}.md",
121
+ "glob": false
122
+ },
123
+ "result": {
124
+ "pattern": "{{unitId}}.md",
125
+ "glob": false
126
+ },
127
+ "runbook": {
128
+ "pattern": "{{shortId}}-*-runbook.md",
129
+ "glob": true
130
+ }
131
+ },
132
+ "type": "object",
133
+ "propertyNames": {
134
+ "type": "string"
135
+ },
136
+ "additionalProperties": {
137
+ "type": "object",
138
+ "properties": {
139
+ "pattern": {
140
+ "type": "string",
141
+ "description": "File search pattern. Supports {{unitId}} and {{shortId}} variables"
142
+ },
143
+ "glob": {
144
+ "default": false,
145
+ "description": "Whether to use glob matching (true) or exact match (false)",
146
+ "type": "boolean"
147
+ }
148
+ },
149
+ "required": [
150
+ "pattern",
151
+ "glob"
152
+ ],
153
+ "additionalProperties": false
154
+ },
155
+ "description": "Document discovery rules by role. Defines file name patterns for finding unit documents"
156
+ },
157
+ "planParsing": {
158
+ "type": "object",
159
+ "properties": {
160
+ "titleSource": {
161
+ "default": "h1",
162
+ "description": "How to extract the unit title: 'h1' from first heading, 'frontmatter:title' from YAML frontmatter",
163
+ "type": "string",
164
+ "enum": [
165
+ "h1",
166
+ "frontmatter:title"
167
+ ]
168
+ },
169
+ "dependsSource": {
170
+ "default": "section",
171
+ "description": "How to extract dependencies: 'section' from markdown section, 'frontmatter' from YAML, 'metadata-table' from 2-column table",
172
+ "type": "string",
173
+ "enum": [
174
+ "section",
175
+ "frontmatter",
176
+ "metadata-table"
177
+ ]
178
+ },
179
+ "dependsSectionName": {
180
+ "default": "이전 작업에서 가져올 것",
181
+ "description": "Dependency section header name. Set to null to disable section-based extraction",
182
+ "anyOf": [
183
+ {
184
+ "type": "string"
185
+ },
186
+ {
187
+ "type": "null"
188
+ }
189
+ ]
190
+ },
191
+ "pairingQuestionSection": {
192
+ "default": "페어링 질문",
193
+ "description": "Section header name for pairing questions (checkbox items)",
194
+ "type": "string"
195
+ },
196
+ "metadataTable": {
197
+ "type": "object",
198
+ "properties": {
199
+ "idField": {
200
+ "default": "Unit ID",
201
+ "description": "Field name for the unit ID in the metadata table",
202
+ "type": "string"
203
+ },
204
+ "phaseField": {
205
+ "default": "Phase",
206
+ "description": "Field name for the phase in the metadata table",
207
+ "type": "string"
208
+ },
209
+ "dependsField": {
210
+ "default": "의존성",
211
+ "description": "Field name for dependencies in the metadata table",
212
+ "type": "string"
213
+ }
214
+ },
215
+ "required": [
216
+ "idField",
217
+ "phaseField",
218
+ "dependsField"
219
+ ],
220
+ "additionalProperties": false
221
+ }
222
+ },
223
+ "required": [
224
+ "titleSource",
225
+ "dependsSource",
226
+ "dependsSectionName",
227
+ "pairingQuestionSection",
228
+ "metadataTable"
229
+ ],
230
+ "additionalProperties": false
231
+ },
232
+ "backlogParsing": {
233
+ "type": "object",
234
+ "properties": {
235
+ "sectionHeader": {
236
+ "default": "## 작업 백로그",
237
+ "description": "Backlog section start header in the roadmap file",
238
+ "type": "string"
239
+ },
240
+ "entryPattern": {
241
+ "default": "ID=\\[(?<id>.+?)\\]\\((?<path>[^)]+)\\)\\s*\\|\\s*(?<title>[^|]+)\\|\\s*Depends=(?<deps>[^|]*)\\|\\s*(?<status>.+)",
242
+ "description": "Regex pattern with named groups (id, path, title, deps, status) to match backlog entries",
243
+ "type": "string"
244
+ },
245
+ "completedSection": {
246
+ "default": "### 완료",
247
+ "description": "Section header for completed units",
248
+ "type": "string"
249
+ },
250
+ "statusMap": {
251
+ "type": "object",
252
+ "properties": {
253
+ "ready": {
254
+ "default": "⏸️",
255
+ "description": "Ready/waiting status indicator",
256
+ "type": "string"
257
+ },
258
+ "inProgress": {
259
+ "default": "🚧",
260
+ "description": "In-progress status indicator",
261
+ "type": "string"
262
+ },
263
+ "completed": {
264
+ "default": "✅",
265
+ "description": "Completed status indicator",
266
+ "type": "string"
267
+ },
268
+ "blocked": {
269
+ "default": "❌",
270
+ "description": "Blocked status indicator",
271
+ "type": "string"
272
+ }
273
+ },
274
+ "required": [
275
+ "ready",
276
+ "inProgress",
277
+ "completed",
278
+ "blocked"
279
+ ],
280
+ "additionalProperties": false
281
+ }
282
+ },
283
+ "required": [
284
+ "sectionHeader",
285
+ "entryPattern",
286
+ "completedSection",
287
+ "statusMap"
288
+ ],
289
+ "additionalProperties": false
290
+ },
291
+ "commitSearch": {
292
+ "type": "object",
293
+ "properties": {
294
+ "strategy": {
295
+ "default": "git-log-grep",
296
+ "description": "Search strategy: 'git-log-grep', 'conventional-commit', or 'disabled'",
297
+ "type": "string"
298
+ },
299
+ "extractId": {
300
+ "default": "shortId",
301
+ "description": "ID transformation for grep: 'shortId' removes phase tag (e.g. U-001[Mvp] → U-001)",
302
+ "type": "string"
303
+ },
304
+ "maxResults": {
305
+ "default": 5,
306
+ "description": "Maximum number of commits to return per dependency",
307
+ "type": "number"
308
+ },
309
+ "excludePaths": {
310
+ "default": [],
311
+ "description": "Glob patterns for paths to exclude (e.g. 'docs/**' to filter doc-only commits)",
312
+ "type": "array",
313
+ "items": {
314
+ "type": "string"
315
+ }
316
+ },
317
+ "requirePaths": {
318
+ "default": [],
319
+ "description": "Glob patterns that at least one changed file must match (e.g. 'src/**' for source-only commits)",
320
+ "type": "array",
321
+ "items": {
322
+ "type": "string"
323
+ }
324
+ }
325
+ },
326
+ "required": [
327
+ "strategy",
328
+ "extractId",
329
+ "maxResults",
330
+ "excludePaths",
331
+ "requirePaths"
332
+ ],
333
+ "additionalProperties": false
334
+ },
335
+ "commandSections": {
336
+ "type": "object",
337
+ "properties": {
338
+ "separator": {
339
+ "default": "---------------------------------------------------",
340
+ "description": "Section separator string in the command file",
341
+ "type": "string"
342
+ },
343
+ "preserveOtherSections": {
344
+ "default": true,
345
+ "description": "Whether to preserve sections not managed by the current unit type",
346
+ "type": "boolean"
347
+ },
348
+ "commitFieldName": {
349
+ "default": "Commit",
350
+ "description": "Field keyword for recording commit SHA in the command file",
351
+ "type": "string"
352
+ },
353
+ "useMarkers": {
354
+ "default": false,
355
+ "description": "Use HTML comment markers (<!-- vc:begin/end -->) for safer section boundary detection",
356
+ "type": "boolean"
357
+ }
358
+ },
359
+ "required": [
360
+ "separator",
361
+ "preserveOtherSections",
362
+ "commitFieldName",
363
+ "useMarkers"
364
+ ],
365
+ "additionalProperties": false
366
+ },
367
+ "defaultSpecialRequests": {
368
+ "default": [],
369
+ "description": "Default special request strings appended to every unit context",
370
+ "type": "array",
371
+ "items": {
372
+ "type": "string"
373
+ }
374
+ },
375
+ "specialRequestsByType": {
376
+ "default": {},
377
+ "description": "Additional special requests per unit type (key: unitType.key, value: string array)",
378
+ "type": "object",
379
+ "propertyNames": {
380
+ "type": "string"
381
+ },
382
+ "additionalProperties": {
383
+ "type": "array",
384
+ "items": {
385
+ "type": "string"
386
+ }
387
+ }
388
+ },
389
+ "customRequests": {
390
+ "default": {},
391
+ "description": "Named special requests selectable via --request option (key: identifier, value: text)",
392
+ "type": "object",
393
+ "propertyNames": {
394
+ "type": "string"
395
+ },
396
+ "additionalProperties": {
397
+ "type": "string"
398
+ }
399
+ }
400
+ },
401
+ "required": [
402
+ "version",
403
+ "unitTypes"
404
+ ],
405
+ "additionalProperties": false,
406
+ "$id": "https://raw.githubusercontent.com/viilab/vibe-commander/main/schemas/config-schema.json",
407
+ "title": "vibe-commander Configuration",
408
+ "description": "Unit-based vibe coding workflow automation CLI configuration. Defines project structure, unit types, parsing rules, and command sections."
409
+ }
@@ -119,9 +119,31 @@ vc validate --json # JSON ToolResult
119
119
  ```bash
120
120
  vc init # 대화형 설정 생성
121
121
  vc init --from-existing # 기존 .md 파일 스캔 → 패턴 자동 감지 → 설정 생성
122
+ vc init --force # 기존 설정 덮어쓰기
122
123
  ```
123
124
 
124
125
  `--from-existing`은 기존 설정이 있으면 커스텀 필드를 보존하며 병합합니다.
126
+ `--force`는 기존 설정 파일이 있어도 강제로 덮어씁니다.
127
+
128
+ ### `vc schema` — 런타임 스키마 조회
129
+
130
+ 에이전트가 CLI 구조를 동적으로 파악할 수 있는 인트로스펙션 기능:
131
+
132
+ ```bash
133
+ vc schema config --json # 설정 파일의 JSON Schema 반환
134
+ vc schema commands --json # 모든 커맨드의 메타데이터 반환
135
+ vc schema types --json # 프로젝트의 unitTypes 및 idPattern 반환
136
+ vc schema config --output schemas/config-schema.json # 파일로 저장
137
+ ```
138
+
139
+ ### `vc skill install` — SKILL 파일 설치
140
+
141
+ npm 패키지에 번들된 SKILL 파일을 프로젝트에 설치:
142
+
143
+ ```bash
144
+ vc skill install # 기존 파일이 있으면 건너뜀
145
+ vc skill install --force # 기존 파일 덮어쓰기
146
+ ```
125
147
 
126
148
  ### 파이프 모드 (에이전트/오케스트레이터 연동)
127
149
 
@@ -110,9 +110,31 @@ vc validate --json # JSON ToolResult
110
110
  ```bash
111
111
  vc init # 대화형 설정 생성
112
112
  vc init --from-existing # 기존 .md 파일 스캔 → 패턴 자동 감지 → 설정 생성
113
+ vc init --force # 기존 설정 덮어쓰기
113
114
  ```
114
115
 
115
116
  `--from-existing`은 기존 설정이 있으면 커스텀 필드를 보존하며 병합합니다.
117
+ `--force`는 기존 설정 파일이 있어도 강제로 덮어씁니다.
118
+
119
+ ### `vc schema` — 런타임 스키마 조회
120
+
121
+ 에이전트가 CLI 구조를 동적으로 파악할 수 있는 인트로스펙션 기능:
122
+
123
+ ```bash
124
+ vc schema config --json # 설정 파일의 JSON Schema 반환
125
+ vc schema commands --json # 모든 커맨드의 메타데이터 반환
126
+ vc schema types --json # 프로젝트의 unitTypes 및 idPattern 반환
127
+ vc schema config --output schemas/config-schema.json # 파일로 저장
128
+ ```
129
+
130
+ ### `vc skill install` — SKILL 파일 설치
131
+
132
+ npm 패키지에 번들된 SKILL 파일을 프로젝트에 설치:
133
+
134
+ ```bash
135
+ vc skill install # 기존 파일이 있으면 건너뜀
136
+ vc skill install --force # 기존 파일 덮어쓰기
137
+ ```
116
138
 
117
139
  ### 파이프 모드 (에이전트/오케스트레이터 연동)
118
140
 
@@ -119,9 +119,31 @@ vc validate --json # JSON ToolResult
119
119
  ```bash
120
120
  vc init # 대화형 설정 생성
121
121
  vc init --from-existing # 기존 .md 파일 스캔 → 패턴 자동 감지 → 설정 생성
122
+ vc init --force # 기존 설정 덮어쓰기
122
123
  ```
123
124
 
124
125
  `--from-existing`은 기존 설정이 있으면 커스텀 필드를 보존하며 병합합니다.
126
+ `--force`는 기존 설정 파일이 있어도 강제로 덮어씁니다.
127
+
128
+ ### `vc schema` — 런타임 스키마 조회
129
+
130
+ 에이전트가 CLI 구조를 동적으로 파악할 수 있는 인트로스펙션 기능:
131
+
132
+ ```bash
133
+ vc schema config --json # 설정 파일의 JSON Schema 반환
134
+ vc schema commands --json # 모든 커맨드의 메타데이터 반환
135
+ vc schema types --json # 프로젝트의 unitTypes 및 idPattern 반환
136
+ vc schema config --output schemas/config-schema.json # 파일로 저장
137
+ ```
138
+
139
+ ### `vc skill install` — SKILL 파일 설치
140
+
141
+ npm 패키지에 번들된 SKILL 파일을 프로젝트에 설치:
142
+
143
+ ```bash
144
+ vc skill install # 기존 파일이 있으면 건너뜀
145
+ vc skill install --force # 기존 파일 덮어쓰기
146
+ ```
125
147
 
126
148
  ### 파이프 모드 (에이전트/오케스트레이터 연동)
127
149
 
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=formatters.d.ts.map
@@ -1,3 +0,0 @@
1
- export {};
2
- // DEPRECATED: Split into formatters-unit.ts and formatters-list.ts
3
- //# sourceMappingURL=formatters.js.map