timsquad 2.0.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.
Files changed (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/bin/tsq.js +6 -0
  4. package/dist/commands/feedback.d.ts +3 -0
  5. package/dist/commands/feedback.d.ts.map +1 -0
  6. package/dist/commands/feedback.js +142 -0
  7. package/dist/commands/feedback.js.map +1 -0
  8. package/dist/commands/full.d.ts +3 -0
  9. package/dist/commands/full.d.ts.map +1 -0
  10. package/dist/commands/full.js +87 -0
  11. package/dist/commands/full.js.map +1 -0
  12. package/dist/commands/git/commit.d.ts +3 -0
  13. package/dist/commands/git/commit.d.ts.map +1 -0
  14. package/dist/commands/git/commit.js +88 -0
  15. package/dist/commands/git/commit.js.map +1 -0
  16. package/dist/commands/git/index.d.ts +5 -0
  17. package/dist/commands/git/index.d.ts.map +1 -0
  18. package/dist/commands/git/index.js +5 -0
  19. package/dist/commands/git/index.js.map +1 -0
  20. package/dist/commands/git/pr.d.ts +3 -0
  21. package/dist/commands/git/pr.d.ts.map +1 -0
  22. package/dist/commands/git/pr.js +138 -0
  23. package/dist/commands/git/pr.js.map +1 -0
  24. package/dist/commands/git/release.d.ts +3 -0
  25. package/dist/commands/git/release.d.ts.map +1 -0
  26. package/dist/commands/git/release.js +158 -0
  27. package/dist/commands/git/release.js.map +1 -0
  28. package/dist/commands/git/sync.d.ts +3 -0
  29. package/dist/commands/git/sync.d.ts.map +1 -0
  30. package/dist/commands/git/sync.js +132 -0
  31. package/dist/commands/git/sync.js.map +1 -0
  32. package/dist/commands/init.d.ts +3 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +150 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/log.d.ts +3 -0
  37. package/dist/commands/log.d.ts.map +1 -0
  38. package/dist/commands/log.js +271 -0
  39. package/dist/commands/log.js.map +1 -0
  40. package/dist/commands/metrics.d.ts +3 -0
  41. package/dist/commands/metrics.d.ts.map +1 -0
  42. package/dist/commands/metrics.js +299 -0
  43. package/dist/commands/metrics.js.map +1 -0
  44. package/dist/commands/quick.d.ts +3 -0
  45. package/dist/commands/quick.d.ts.map +1 -0
  46. package/dist/commands/quick.js +136 -0
  47. package/dist/commands/quick.js.map +1 -0
  48. package/dist/commands/retro.d.ts +3 -0
  49. package/dist/commands/retro.d.ts.map +1 -0
  50. package/dist/commands/retro.js +280 -0
  51. package/dist/commands/retro.js.map +1 -0
  52. package/dist/commands/status.d.ts +3 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +127 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/watch.d.ts +3 -0
  57. package/dist/commands/watch.d.ts.map +1 -0
  58. package/dist/commands/watch.js +213 -0
  59. package/dist/commands/watch.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +50 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/lib/config.d.ts +34 -0
  65. package/dist/lib/config.d.ts.map +1 -0
  66. package/dist/lib/config.js +108 -0
  67. package/dist/lib/config.js.map +1 -0
  68. package/dist/lib/project.d.ts +47 -0
  69. package/dist/lib/project.d.ts.map +1 -0
  70. package/dist/lib/project.js +191 -0
  71. package/dist/lib/project.js.map +1 -0
  72. package/dist/lib/template.d.ts +33 -0
  73. package/dist/lib/template.d.ts.map +1 -0
  74. package/dist/lib/template.js +151 -0
  75. package/dist/lib/template.js.map +1 -0
  76. package/dist/types/config.d.ts +75 -0
  77. package/dist/types/config.d.ts.map +1 -0
  78. package/dist/types/config.js +66 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/feedback.d.ts +59 -0
  81. package/dist/types/feedback.d.ts.map +1 -0
  82. package/dist/types/feedback.js +26 -0
  83. package/dist/types/feedback.js.map +1 -0
  84. package/dist/types/index.d.ts +4 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +5 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/project.d.ts +89 -0
  89. package/dist/types/project.d.ts.map +1 -0
  90. package/dist/types/project.js +44 -0
  91. package/dist/types/project.js.map +1 -0
  92. package/dist/utils/colors.d.ts +30 -0
  93. package/dist/utils/colors.d.ts.map +1 -0
  94. package/dist/utils/colors.js +54 -0
  95. package/dist/utils/colors.js.map +1 -0
  96. package/dist/utils/date.d.ts +25 -0
  97. package/dist/utils/date.d.ts.map +1 -0
  98. package/dist/utils/date.js +65 -0
  99. package/dist/utils/date.js.map +1 -0
  100. package/dist/utils/fs.d.ts +49 -0
  101. package/dist/utils/fs.d.ts.map +1 -0
  102. package/dist/utils/fs.js +84 -0
  103. package/dist/utils/fs.js.map +1 -0
  104. package/dist/utils/prompts.d.ts +31 -0
  105. package/dist/utils/prompts.d.ts.map +1 -0
  106. package/dist/utils/prompts.js +95 -0
  107. package/dist/utils/prompts.js.map +1 -0
  108. package/dist/utils/yaml.d.ts +21 -0
  109. package/dist/utils/yaml.d.ts.map +1 -0
  110. package/dist/utils/yaml.js +40 -0
  111. package/dist/utils/yaml.js.map +1 -0
  112. package/package.json +71 -0
  113. package/templates/common/CLAUDE.md.template +254 -0
  114. package/templates/common/claude/agents/tsq-dba.md +290 -0
  115. package/templates/common/claude/agents/tsq-designer.md +304 -0
  116. package/templates/common/claude/agents/tsq-developer.md +118 -0
  117. package/templates/common/claude/agents/tsq-planner.md +90 -0
  118. package/templates/common/claude/agents/tsq-prompter.md +336 -0
  119. package/templates/common/claude/agents/tsq-qa.md +134 -0
  120. package/templates/common/claude/agents/tsq-retro.md +168 -0
  121. package/templates/common/claude/agents/tsq-security.md +190 -0
  122. package/templates/common/claude/skills/architecture/SKILL.md +123 -0
  123. package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
  124. package/templates/common/claude/skills/coding/SKILL.md +171 -0
  125. package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
  126. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
  127. package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
  128. package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
  129. package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
  130. package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
  131. package/templates/common/claude/skills/planning/SKILL.md +90 -0
  132. package/templates/common/claude/skills/security/SKILL.md +234 -0
  133. package/templates/common/claude/skills/testing/SKILL.md +146 -0
  134. package/templates/common/claude/skills/typescript/SKILL.md +435 -0
  135. package/templates/common/config.template.yaml +131 -0
  136. package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
  137. package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
  138. package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
  139. package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
  140. package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
  141. package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
  142. package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
  143. package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
  144. package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
  145. package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
  146. package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
  147. package/templates/common/timsquad/generators/data-design.xml +290 -0
  148. package/templates/common/timsquad/generators/prd.xml +280 -0
  149. package/templates/common/timsquad/generators/requirements.xml +220 -0
  150. package/templates/common/timsquad/generators/service-spec.xml +266 -0
  151. package/templates/common/timsquad/logs/_example.md +81 -0
  152. package/templates/common/timsquad/logs/_template.md +46 -0
  153. package/templates/common/timsquad/patterns/cqrs.xml +127 -0
  154. package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
  155. package/templates/common/timsquad/patterns/repository.xml +64 -0
  156. package/templates/common/timsquad/process/state-machine.xml +343 -0
  157. package/templates/common/timsquad/process/validation-rules.xml +308 -0
  158. package/templates/common/timsquad/process/workflow-base.xml +202 -0
  159. package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
  160. package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
  161. package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
  162. package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
  163. package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
  164. package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
  165. package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
  166. package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
  167. package/templates/common/timsquad/ssot/data-design.template.md +132 -0
  168. package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
  169. package/templates/common/timsquad/ssot/env-config.template.md +346 -0
  170. package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
  171. package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
  172. package/templates/common/timsquad/ssot/glossary.template.md +148 -0
  173. package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
  174. package/templates/common/timsquad/ssot/planning.template.md +94 -0
  175. package/templates/common/timsquad/ssot/prd.template.md +102 -0
  176. package/templates/common/timsquad/ssot/requirements.template.md +117 -0
  177. package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
  178. package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
  179. package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
  180. package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
  181. package/templates/common/timsquad/state/workspace.xml +217 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eric
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,347 @@
1
+ # TimSquad
2
+
3
+ > **"AI 시대의 소프트웨어 개발 표준 프로세스"**
4
+
5
+ SSOT 기반 문서 체계, 최적화된 에이전트 롤, 회고적 학습을 통해 Claude Code에서 지속적으로 개선되는 고품질 소프트웨어 생성 프레임워크
6
+
7
+ ```
8
+ 최적화된 롤 정의 + 고도화된 스킬 + 회고적 학습 = 지속적으로 개선되는 고품질 결과물
9
+ ```
10
+
11
+ ---
12
+
13
+ ## Why TimSquad?
14
+
15
+ | oh-my-* | **TimSquad** |
16
+ |---------|--------------|
17
+ | "Zero learning curve" | **"체계를 세우면 더 잘 된다"** |
18
+ | 알아서 해줌 | **개발자가 컨트롤** |
19
+ | 속도 최우선 | **품질 + 일관성 최우선** |
20
+ | Magic | **Structure** |
21
+
22
+ **For developers who want structure, not magic.**
23
+
24
+ ### 타겟 사용자
25
+
26
+ - 체계적인 프로세스를 원하는 시니어 개발자
27
+ - 1인 CTO / 테크 리드 (혼자서 팀 수준의 품질 필요)
28
+ - 문서화와 일관성을 중시하는 개발자
29
+
30
+ ### NOT for
31
+
32
+ - "알아서 해줘" 원하는 사람 → oh-my-claudecode 추천
33
+ - 코딩만 빠르게 하고 싶은 사람 → Claude Code 그냥 사용
34
+
35
+ ---
36
+
37
+ ## Features
38
+
39
+ ### SSOT (Single Source of Truth)
40
+
41
+ 모든 에이전트가 참조하는 단일 문서 체계
42
+
43
+ ```
44
+ .timsquad/ssot/
45
+ ├── prd.md # 제품 요구사항 (Why)
46
+ ├── requirements.md # 요건 정의 (What)
47
+ ├── service-spec.md # API 명세 (프론트-백 계약서)
48
+ ├── data-design.md # ERD, 데이터 설계
49
+ └── ...
50
+ ```
51
+
52
+ ### 분수(Fountain) 모델
53
+
54
+ SSOT는 순차적 의존성, 실제 작업은 병렬 실행
55
+
56
+ ```
57
+ SSOT (순차: PRD → 기획 → 설계)
58
+
59
+ ┌────┼────┐
60
+ ↓ ↓ ↓
61
+ 화면 요건 API ← 병렬 작업
62
+ │ │ │
63
+ └────┼────┘
64
+
65
+ ERD + 구현 (병렬)
66
+
67
+ QA/Test
68
+
69
+ ┌────┼────┐
70
+ ↓ ↓ ↓
71
+ L1 L2 L3 ← 피드백 라우팅
72
+
73
+ 회고적 학습 → 템플릿/프롬프트 자동 개선
74
+ ```
75
+
76
+ ### 서브에이전트 시스템
77
+
78
+ ```
79
+ .claude/agents/
80
+ ├── tsq-planner.md # 기획/설계 (Opus)
81
+ ├── tsq-developer.md # 코드 구현 (Sonnet)
82
+ ├── tsq-qa.md # 검증/리뷰 (Sonnet)
83
+ ├── tsq-security.md # 보안 검토
84
+ ├── tsq-dba.md # DB 설계
85
+ ├── tsq-designer.md # UI/UX 설계
86
+ ├── tsq-prompter.md # 프롬프트 최적화
87
+ └── tsq-retro.md # 회고 분석
88
+ ```
89
+
90
+ ### 토큰 효율성
91
+
92
+ | 작업 | oh-my-* 방식 | TimSquad 방식 | 절약률 |
93
+ |-----|-------------|--------------|-------|
94
+ | 피드백 분류 | LLM 판단 | YAML 규칙 | **100%** |
95
+ | 로그 저장 | "저장해" 프롬프트 | bash 파이프 | **100%** |
96
+ | 에이전트 선택 | LLM 오케스트레이터 | 프로그램 스케줄러 | **100%** |
97
+ | **전체** | 100% | 40-60% | **40-60% 절약** |
98
+
99
+ ### XML 문서 생성기
100
+
101
+ 토큰 효율적인 SSOT 문서 작성
102
+
103
+ ```xml
104
+ <generator name="prd" output=".timsquad/ssot/prd.md">
105
+ <section id="basic" title="기본 정보">
106
+ <field name="project_name" type="text" required="true">
107
+ <prompt>프로젝트 이름?</prompt>
108
+ <refinement>영문 소문자, 하이픈 허용</refinement>
109
+ </field>
110
+ </section>
111
+ <output-template>...</output-template>
112
+ </generator>
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Installation
118
+
119
+ ### npm (권장)
120
+
121
+ ```bash
122
+ # 전역 설치
123
+ npm install -g timsquad
124
+
125
+ # 또는 npx로 직접 실행
126
+ npx timsquad init -n my-app -t web-service -l 2
127
+ ```
128
+
129
+ ### Git Clone
130
+
131
+ ```bash
132
+ git clone https://github.com/sonature-lab/timsquad.git
133
+ cd timsquad
134
+ npm install
135
+ npm run build
136
+ npm link
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Quick Start
142
+
143
+ ### 1. 프로젝트 초기화
144
+
145
+ ```bash
146
+ # 새 프로젝트 생성
147
+ tsq init -n my-app -t web-service -l 2
148
+
149
+ # 옵션
150
+ # -n, --name 프로젝트 이름
151
+ # -t, --type 프로젝트 타입 (web-service, api-backend, platform, fintech, infra)
152
+ # -l, --level 프로젝트 레벨 (1=MVP, 2=Standard, 3=Enterprise)
153
+ ```
154
+
155
+ ### 2. 생성된 구조
156
+
157
+ ```
158
+ my-app/
159
+ ├── CLAUDE.md # PM 역할 정의
160
+ ├── .claude/
161
+ │ ├── agents/ # 에이전트 정의
162
+ │ └── skills/ # 스킬 파일
163
+ └── .timsquad/
164
+ ├── config.yaml # 프로젝트 설정
165
+ ├── ssot/ # SSOT 문서
166
+ ├── generators/ # 문서 생성기 (XML)
167
+ ├── state/ # 현재 상태
168
+ ├── knowledge/ # 프로젝트 지식
169
+ ├── feedback/ # 피드백 시스템
170
+ ├── retrospective/ # 회고 시스템
171
+ └── logs/ # 작업 로그
172
+ ```
173
+
174
+ ### 3. Claude Code에서 작업 시작
175
+
176
+ ```bash
177
+ # Claude Code 실행
178
+ claude
179
+
180
+ # 에이전트 호출
181
+ @tsq-planner "PRD 작성 시작해줘"
182
+ @tsq-developer "로그인 API 구현해줘"
183
+ @tsq-qa "코드 리뷰해줘"
184
+ ```
185
+
186
+ ---
187
+
188
+ ## CLI Commands
189
+
190
+ ### 기본 커맨드
191
+
192
+ ```bash
193
+ tsq init [options] # 프로젝트 초기화
194
+ tsq status [options] # 현재 상태 확인
195
+ tsq log <subcommand> # 작업 로그 관리
196
+ tsq feedback <message> # 피드백 라우팅
197
+ tsq retro <subcommand> # 회고 실행
198
+ ```
199
+
200
+ ### 작업 모드
201
+
202
+ ```bash
203
+ tsq q "버튼 색상 변경" # Quick Mode - 간단한 작업
204
+ tsq f "결제 기능 추가" # Full Mode - SSOT 체크 + Planner 라우팅
205
+ ```
206
+
207
+ ### Git 커맨드
208
+
209
+ ```bash
210
+ tsq commit [message] # 스테이징 + Co-Author 커밋
211
+ tsq pr [title] # 푸시 + PR 생성 (gh CLI 필요)
212
+ tsq release [version] # 태그 + GitHub Release 생성
213
+ tsq sync # fetch + rebase
214
+ ```
215
+
216
+ ### 자동화 커맨드
217
+
218
+ ```bash
219
+ tsq watch start # SSOT 파일 변경 감시 시작
220
+ tsq watch stop # 감시 중지
221
+ tsq metrics collect # 메트릭 수집
222
+ tsq metrics summary # 메트릭 요약 표시
223
+ ```
224
+
225
+ ---
226
+
227
+ ## Project Types
228
+
229
+ | 타입 | 설명 | 추가 문서 | Consensus |
230
+ |-----|------|----------|-----------|
231
+ | **web-service** | SaaS, 웹앱 | ui-ux-spec | 선택적 |
232
+ | **api-backend** | API 서버, 마이크로서비스 | - | 선택적 |
233
+ | **platform** | 프레임워크, SDK | integration-spec | 선택적 |
234
+ | **fintech** | 거래소, 결제 | security-spec | **필수** |
235
+ | **infra** | DevOps, 자동화 | deployment-spec | 선택적 |
236
+
237
+ ---
238
+
239
+ ## Project Levels
240
+
241
+ | Level | 설명 | 필수 문서 | 대상 |
242
+ |-------|-----|----------|-----|
243
+ | **1 (MVP)** | 최소 문서 | prd, requirements, service-spec, data-design | 사이드 프로젝트, PoC |
244
+ | **2 (Standard)** | 표준 문서 | L1 + glossary, error-codes, test-spec, ADR | 일반 프로젝트, 스타트업 |
245
+ | **3 (Enterprise)** | 전체 문서 | L2 + security-spec, deployment-spec | 엔터프라이즈, fintech |
246
+
247
+ ---
248
+
249
+ ## Feedback Routing
250
+
251
+ 피드백 레벨에 따라 적절한 담당자에게 자동 라우팅
252
+
253
+ | Level | 유형 | 트리거 | 라우팅 |
254
+ |-------|-----|--------|--------|
255
+ | **1** | 구현 수정 | test_failure, lint_error, type_error | → Developer |
256
+ | **2** | 설계 수정 | api_mismatch, architecture_issue | → Planner (Architect) |
257
+ | **3** | 기획 수정 | requirement_ambiguity, scope_change | → Planner → **User 승인** |
258
+
259
+ ---
260
+
261
+ ## Retrospective Learning
262
+
263
+ 개발 사이클 완료 후 자동 회고 및 개선
264
+
265
+ ```bash
266
+ tsq retro
267
+ ```
268
+
269
+ 1. **로그 수집** - 에이전트별 작업 로그, 피드백 이력
270
+ 2. **패턴 분석** - 반복 실패/성공 패턴, 병목 지점
271
+ 3. **개선 제안** - 프롬프트/템플릿 개선안 생성
272
+ 4. **사용자 승인** - 검토 후 적용
273
+ 5. **적용** - Lessons Learned 추가, 템플릿 업데이트
274
+
275
+ ---
276
+
277
+ ## Theoretical Background
278
+
279
+ | 이론/논문 | 핵심 개념 | TimSquad 적용 |
280
+ |---------|---------|--------------|
281
+ | **Agentsway** (2025) | Prompting Agent, Retrospective Learning | 프롬프트 최적화, 회고적 학습 |
282
+ | **ACM TOSEM** (2025) | Competency Mapping | 역량 프레임워크, 성과 지표 |
283
+ | **Agentic SE** (2025) | AGENT.md, Meta-Prompt Files | 계층화된 메타-프롬프트 구조 |
284
+ | **FRAME** (2025) | Feedback-Driven Refinement | 레벨별 피드백 라우팅 |
285
+
286
+ ---
287
+
288
+ ## Configuration
289
+
290
+ `.timsquad/config.yaml`:
291
+
292
+ ```yaml
293
+ project:
294
+ name: "my-app"
295
+ type: web-service
296
+ level: 2
297
+
298
+ agents:
299
+ planner:
300
+ model: opus
301
+ developer:
302
+ model: sonnet
303
+ qa:
304
+ model: sonnet
305
+
306
+ methodology:
307
+ development: tdd
308
+ process: agile
309
+ branching: github-flow
310
+ ```
311
+
312
+ ---
313
+
314
+ ## Roadmap
315
+
316
+ - [x] **Phase 0 (MVP)** - common 템플릿, 기본 에이전트, CLI
317
+ - [ ] **Phase 1** - 타입별 템플릿 확장, 회고 시스템 고도화
318
+ - [ ] **Phase 2** - Plugin 배포, MCP 서버, 멀티 LLM 지원
319
+
320
+ ---
321
+
322
+ ## Contributing
323
+
324
+ 기여를 환영합니다! 다음을 참고해주세요:
325
+
326
+ 1. Fork the repository
327
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
328
+ 3. Commit your changes (`git commit -m 'Add amazing feature'`)
329
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
330
+ 5. Open a Pull Request
331
+
332
+ ---
333
+
334
+ ## License
335
+
336
+ MIT License - see [LICENSE](LICENSE) for details.
337
+
338
+ ---
339
+
340
+ ## Related Projects
341
+
342
+ - [Anthropic Skills](https://github.com/anthropics/skills)
343
+ - [Superpowers](https://github.com/obra/superpowers)
344
+
345
+ ---
346
+
347
+ **TimSquad v2.0** - AI Agent Development Process Framework
package/bin/tsq.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+
3
+ import('../dist/index.js').catch((err) => {
4
+ console.error('Failed to start TimSquad CLI:', err.message);
5
+ process.exit(1);
6
+ });
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFeedbackCommand(program: Command): void;
3
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY9D"}
@@ -0,0 +1,142 @@
1
+ import path from 'path';
2
+ import { colors, printHeader, printError, printSuccess, printKeyValue } from '../utils/colors.js';
3
+ import { findProjectRoot } from '../lib/project.js';
4
+ import { exists, readFile, writeFile } from '../utils/fs.js';
5
+ import { loadYaml } from '../utils/yaml.js';
6
+ import { getDateString, getTimeString } from '../utils/date.js';
7
+ import { DEFAULT_ROUTING_RULES } from '../types/feedback.js';
8
+ export function registerFeedbackCommand(program) {
9
+ program
10
+ .command('feedback <message>')
11
+ .description('Route feedback to appropriate agent')
12
+ .action(async (message) => {
13
+ try {
14
+ await routeFeedback(message);
15
+ }
16
+ catch (error) {
17
+ printError(error.message);
18
+ process.exit(1);
19
+ }
20
+ });
21
+ }
22
+ async function routeFeedback(message) {
23
+ const projectRoot = await findProjectRoot();
24
+ if (!projectRoot) {
25
+ throw new Error('Not a TimSquad project');
26
+ }
27
+ // Load routing rules
28
+ const rulesPath = path.join(projectRoot, '.timsquad', 'feedback', 'routing-rules.yaml');
29
+ let rules = DEFAULT_ROUTING_RULES;
30
+ if (await exists(rulesPath)) {
31
+ rules = await loadYaml(rulesPath);
32
+ }
33
+ // Classify feedback
34
+ const result = classifyFeedback(message, rules);
35
+ printHeader('Feedback Routing');
36
+ printKeyValue('Message', message.substring(0, 50) + (message.length > 50 ? '...' : ''));
37
+ printKeyValue('Level', `${result.level} (${getLevelName(result.level)})`);
38
+ printKeyValue('Route to', result.routeTo);
39
+ printKeyValue('Approval required', result.approvalRequired ? 'Yes' : 'No');
40
+ // Log feedback
41
+ await logFeedback(projectRoot, message, result);
42
+ console.log('');
43
+ if (result.approvalRequired) {
44
+ console.log(colors.warning('⚠ This feedback requires user approval before action'));
45
+ }
46
+ else {
47
+ printSuccess(`Feedback routed to ${result.routeTo}`);
48
+ }
49
+ }
50
+ function classifyFeedback(message, rules) {
51
+ const lowerMessage = message.toLowerCase();
52
+ // Check Level 1 triggers (implementation issues)
53
+ for (const trigger of rules.level_1.triggers) {
54
+ const patterns = getTriggerPatterns(trigger);
55
+ if (patterns.some(p => lowerMessage.includes(p))) {
56
+ return {
57
+ level: 1,
58
+ routeTo: rules.level_1.route_to,
59
+ approvalRequired: rules.level_1.approval_required,
60
+ trigger,
61
+ };
62
+ }
63
+ }
64
+ // Check Level 2 triggers (design issues)
65
+ for (const trigger of rules.level_2.triggers) {
66
+ const patterns = getTriggerPatterns(trigger);
67
+ if (patterns.some(p => lowerMessage.includes(p))) {
68
+ return {
69
+ level: 2,
70
+ routeTo: rules.level_2.route_to,
71
+ approvalRequired: rules.level_2.approval_required,
72
+ trigger,
73
+ };
74
+ }
75
+ }
76
+ // Check Level 3 triggers (planning issues)
77
+ for (const trigger of rules.level_3.triggers) {
78
+ const patterns = getTriggerPatterns(trigger);
79
+ if (patterns.some(p => lowerMessage.includes(p))) {
80
+ return {
81
+ level: 3,
82
+ routeTo: 'user',
83
+ approvalRequired: rules.level_3.approval_required,
84
+ trigger,
85
+ };
86
+ }
87
+ }
88
+ // Default to Level 1 (developer)
89
+ return {
90
+ level: 1,
91
+ routeTo: 'developer',
92
+ approvalRequired: false,
93
+ trigger: 'default',
94
+ };
95
+ }
96
+ function getTriggerPatterns(trigger) {
97
+ const patterns = {
98
+ test_failure: ['test fail', 'test error', '테스트 실패', 'assertion', 'expect'],
99
+ lint_error: ['lint', 'eslint', 'prettier', 'format'],
100
+ type_error: ['type error', 'typescript', '타입 에러', 'type mismatch'],
101
+ runtime_error: ['runtime', 'exception', '런타임', 'crash', 'undefined'],
102
+ code_style_violation: ['style', 'convention', '컨벤션', 'naming'],
103
+ architecture_issue: ['architecture', '아키텍처', 'structure', 'design pattern'],
104
+ api_mismatch: ['api', 'endpoint', '명세', 'spec', 'contract'],
105
+ performance_problem: ['performance', '성능', 'slow', 'memory', 'leak'],
106
+ scalability_concern: ['scale', '확장', 'load', 'bottleneck'],
107
+ security_vulnerability: ['security', '보안', 'vulnerability', 'xss', 'injection'],
108
+ requirement_ambiguity: ['requirement', '요구사항', 'unclear', '불명확', 'ambiguous'],
109
+ scope_change: ['scope', '범위', 'change request', '변경'],
110
+ business_logic_error: ['business', '비즈니스', 'logic', '로직'],
111
+ feature_request: ['feature', '기능', 'request', '요청', 'add'],
112
+ stakeholder_feedback: ['stakeholder', 'client', '고객', 'user feedback'],
113
+ };
114
+ return patterns[trigger] || [trigger.replace(/_/g, ' ')];
115
+ }
116
+ function getLevelName(level) {
117
+ const names = {
118
+ 1: '구현 수정',
119
+ 2: '설계 수정',
120
+ 3: '기획 수정',
121
+ };
122
+ return names[level];
123
+ }
124
+ async function logFeedback(projectRoot, message, result) {
125
+ const date = getDateString();
126
+ const time = getTimeString();
127
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
128
+ const logFile = path.join(logDir, `${date}-feedback.md`);
129
+ let content = '';
130
+ if (await exists(logFile)) {
131
+ content = await readFile(logFile);
132
+ }
133
+ else {
134
+ content = `# Feedback Log - ${date}\n\n`;
135
+ }
136
+ content += `## ${time} [Level ${result.level}]\n\n`;
137
+ content += `**Trigger:** ${result.trigger}\n`;
138
+ content += `**Route to:** ${result.routeTo}\n`;
139
+ content += `**Message:**\n\n${message}\n\n---\n\n`;
140
+ await writeFile(logFile, content);
141
+ }
142
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFullCommand(program: Command): void;
3
+ //# sourceMappingURL=full.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/commands/full.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAa1D"}
@@ -0,0 +1,87 @@
1
+ import path from 'path';
2
+ import { colors, printHeader, printError, printSuccess, printKeyValue } from '../utils/colors.js';
3
+ import { findProjectRoot, getSSOTStatus, getCurrentPhase } from '../lib/project.js';
4
+ import { exists, writeFile, readFile } from '../utils/fs.js';
5
+ import { getDateString, getTimeString } from '../utils/date.js';
6
+ export function registerFullCommand(program) {
7
+ program
8
+ .command('f <task>')
9
+ .alias('full')
10
+ .description('Full mode with SSOT checks and Planner routing')
11
+ .action(async (task) => {
12
+ try {
13
+ await runFullMode(task);
14
+ }
15
+ catch (error) {
16
+ printError(error.message);
17
+ process.exit(1);
18
+ }
19
+ });
20
+ }
21
+ async function runFullMode(task) {
22
+ const projectRoot = await findProjectRoot();
23
+ if (!projectRoot) {
24
+ throw new Error('Not a TimSquad project. Run "tsq init" first.');
25
+ }
26
+ printHeader('Full Mode');
27
+ printKeyValue('Task', task);
28
+ // Get current phase
29
+ const phase = await getCurrentPhase(projectRoot);
30
+ printKeyValue('Current Phase', phase.current);
31
+ // Check SSOT status
32
+ const ssotDocs = await getSSOTStatus(projectRoot);
33
+ const filledDocs = ssotDocs.filter(d => d.filled && d.required);
34
+ const requiredDocs = ssotDocs.filter(d => d.required);
35
+ printKeyValue('SSOT Status', `${filledDocs.length}/${requiredDocs.length} documents ready`);
36
+ console.log('');
37
+ // Warn about incomplete SSOT
38
+ const missingDocs = requiredDocs.filter(d => !d.filled);
39
+ if (missingDocs.length > 0) {
40
+ console.log(colors.warning('⚠ Missing required SSOT documents:'));
41
+ missingDocs.forEach(doc => {
42
+ console.log(colors.dim(` - ${doc.name}.md`));
43
+ });
44
+ console.log('');
45
+ }
46
+ // Log the full task
47
+ await logFullTask(projectRoot, task, phase.current);
48
+ printSuccess('Full task logged');
49
+ console.log('');
50
+ console.log(colors.subheader('Instructions for Claude:'));
51
+ console.log(colors.dim('─'.repeat(50)));
52
+ console.log(`Execute this task with full SSOT compliance:\n`);
53
+ console.log(colors.highlight(` ${task}\n`));
54
+ console.log(colors.subheader('Required Steps:'));
55
+ console.log(colors.dim(' 1. Check SSOT documents for requirements'));
56
+ console.log(colors.dim(' 2. Validate against service-spec.md'));
57
+ console.log(colors.dim(' 3. Follow architecture patterns'));
58
+ console.log(colors.dim(' 4. Write tests (TDD)'));
59
+ console.log(colors.dim(' 5. Request QA review'));
60
+ console.log(colors.dim('─'.repeat(50)));
61
+ console.log('');
62
+ console.log(colors.dim('SSOT documents:'));
63
+ console.log(colors.path(' .timsquad/ssot/prd.md'));
64
+ console.log(colors.path(' .timsquad/ssot/service-spec.md'));
65
+ console.log(colors.path(' .timsquad/ssot/data-design.md'));
66
+ }
67
+ async function logFullTask(projectRoot, task, currentPhase) {
68
+ const date = getDateString();
69
+ const time = getTimeString();
70
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
71
+ const logFile = path.join(logDir, `${date}-planner.md`);
72
+ let content = '';
73
+ if (await exists(logFile)) {
74
+ content = await readFile(logFile);
75
+ }
76
+ else {
77
+ content = `# Planner Log - ${date}\n\n`;
78
+ }
79
+ content += `## ${time} [work] 📝\n\n`;
80
+ content += `**Task**: ${task}\n`;
81
+ content += `**Phase**: ${currentPhase}\n`;
82
+ content += `**Mode**: Full (SSOT compliance)\n`;
83
+ content += `**Status**: Pending assignment\n`;
84
+ content += `\n---\n\n`;
85
+ await writeFile(logFile, content);
86
+ }
87
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.js","sourceRoot":"","sources":["../../src/commands/full.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCommitCommand(program: Command): void;
3
+ //# sourceMappingURL=commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../../src/commands/git/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc5D"}