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
@@ -0,0 +1,299 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { colors, printHeader, printError, printSuccess, printKeyValue } from '../utils/colors.js';
4
+ import { findProjectRoot } from '../lib/project.js';
5
+ import { exists, readFile, listFiles } from '../utils/fs.js';
6
+ import { getDateString, getTimestamp } from '../utils/date.js';
7
+ export function registerMetricsCommand(program) {
8
+ const metricsCmd = program
9
+ .command('metrics')
10
+ .description('Collect and view project metrics');
11
+ // tsq metrics collect
12
+ metricsCmd
13
+ .command('collect')
14
+ .description('Collect metrics from logs')
15
+ .option('-d, --days <days>', 'Days to analyze', '7')
16
+ .action(async (options) => {
17
+ try {
18
+ await collectMetrics(parseInt(options.days, 10));
19
+ }
20
+ catch (error) {
21
+ printError(error.message);
22
+ process.exit(1);
23
+ }
24
+ });
25
+ // tsq metrics summary
26
+ metricsCmd
27
+ .command('summary')
28
+ .description('Show metrics summary')
29
+ .action(async () => {
30
+ try {
31
+ await showMetricsSummary();
32
+ }
33
+ catch (error) {
34
+ printError(error.message);
35
+ process.exit(1);
36
+ }
37
+ });
38
+ // tsq metrics export
39
+ metricsCmd
40
+ .command('export')
41
+ .description('Export metrics to JSON')
42
+ .option('-o, --output <file>', 'Output file path')
43
+ .action(async (options) => {
44
+ try {
45
+ await exportMetrics(options.output);
46
+ }
47
+ catch (error) {
48
+ printError(error.message);
49
+ process.exit(1);
50
+ }
51
+ });
52
+ }
53
+ async function collectMetrics(days) {
54
+ const projectRoot = await findProjectRoot();
55
+ if (!projectRoot) {
56
+ throw new Error('Not a TimSquad project');
57
+ }
58
+ printHeader('Collecting Metrics');
59
+ printKeyValue('Period', `Last ${days} days`);
60
+ const now = new Date();
61
+ const startDate = new Date(now.getTime() - days * 24 * 60 * 60 * 1000);
62
+ // Collect log statistics
63
+ const logsDir = path.join(projectRoot, '.timsquad', 'logs');
64
+ const logStats = await collectLogStats(logsDir, startDate);
65
+ // Collect feedback statistics
66
+ const feedbackStats = await collectFeedbackStats(logsDir, startDate);
67
+ // Collect SSOT statistics
68
+ const ssotDir = path.join(projectRoot, '.timsquad', 'ssot');
69
+ const ssotStats = await collectSSOTStats(ssotDir);
70
+ // Create metrics data
71
+ const metrics = {
72
+ collectedAt: getTimestamp(),
73
+ period: {
74
+ start: startDate.toISOString().split('T')[0],
75
+ end: now.toISOString().split('T')[0],
76
+ },
77
+ logs: logStats,
78
+ feedback: feedbackStats,
79
+ ssot: ssotStats,
80
+ };
81
+ // Save metrics
82
+ const metricsDir = path.join(projectRoot, '.timsquad', 'retrospective', 'metrics');
83
+ await fs.ensureDir(metricsDir);
84
+ const metricsFile = path.join(metricsDir, `metrics-${getDateString()}.json`);
85
+ await fs.writeJson(metricsFile, metrics, { spaces: 2 });
86
+ printSuccess('Metrics collected');
87
+ console.log(colors.path(`\nSaved to: ${metricsFile}`));
88
+ // Show summary
89
+ console.log('');
90
+ await displayMetrics(metrics);
91
+ }
92
+ async function collectLogStats(logsDir, startDate) {
93
+ const stats = {
94
+ total: 0,
95
+ byAgent: {},
96
+ byType: {},
97
+ };
98
+ if (!await exists(logsDir)) {
99
+ return stats;
100
+ }
101
+ const files = await listFiles('*.md', logsDir);
102
+ const startDateStr = startDate.toISOString().split('T')[0];
103
+ for (const file of files) {
104
+ // Skip templates
105
+ if (file.startsWith('_'))
106
+ continue;
107
+ // Parse filename: YYYY-MM-DD-agent.md
108
+ const match = file.match(/^(\d{4}-\d{2}-\d{2})-([a-z]+)\.md$/);
109
+ if (!match)
110
+ continue;
111
+ const [, dateStr, agent] = match;
112
+ // Check date range
113
+ if (dateStr < startDateStr)
114
+ continue;
115
+ stats.total++;
116
+ stats.byAgent[agent] = (stats.byAgent[agent] || 0) + 1;
117
+ // Count entries in the file
118
+ try {
119
+ const content = await readFile(path.join(logsDir, file));
120
+ const workEntries = (content.match(/## \d{2}:\d{2}:\d{2} \[work\]/g) || []).length;
121
+ const errorEntries = (content.match(/## \d{2}:\d{2}:\d{2} \[error\]/g) || []).length;
122
+ const decisionEntries = (content.match(/## \d{2}:\d{2}:\d{2} \[decision\]/g) || []).length;
123
+ stats.byType['work'] = (stats.byType['work'] || 0) + workEntries;
124
+ stats.byType['error'] = (stats.byType['error'] || 0) + errorEntries;
125
+ stats.byType['decision'] = (stats.byType['decision'] || 0) + decisionEntries;
126
+ }
127
+ catch {
128
+ // Ignore read errors
129
+ }
130
+ }
131
+ return stats;
132
+ }
133
+ async function collectFeedbackStats(logsDir, startDate) {
134
+ const stats = {
135
+ total: 0,
136
+ byLevel: {},
137
+ };
138
+ if (!await exists(logsDir)) {
139
+ return stats;
140
+ }
141
+ const files = await listFiles('*-feedback.md', logsDir);
142
+ const startDateStr = startDate.toISOString().split('T')[0];
143
+ for (const file of files) {
144
+ // Parse filename: YYYY-MM-DD-feedback.md
145
+ const match = file.match(/^(\d{4}-\d{2}-\d{2})-feedback\.md$/);
146
+ if (!match)
147
+ continue;
148
+ const [, dateStr] = match;
149
+ // Check date range
150
+ if (dateStr < startDateStr)
151
+ continue;
152
+ // Count feedback entries
153
+ try {
154
+ const content = await readFile(path.join(logsDir, file));
155
+ const level1 = (content.match(/\[Level 1\]/g) || []).length;
156
+ const level2 = (content.match(/\[Level 2\]/g) || []).length;
157
+ const level3 = (content.match(/\[Level 3\]/g) || []).length;
158
+ stats.byLevel['1'] = (stats.byLevel['1'] || 0) + level1;
159
+ stats.byLevel['2'] = (stats.byLevel['2'] || 0) + level2;
160
+ stats.byLevel['3'] = (stats.byLevel['3'] || 0) + level3;
161
+ stats.total += level1 + level2 + level3;
162
+ }
163
+ catch {
164
+ // Ignore read errors
165
+ }
166
+ }
167
+ return stats;
168
+ }
169
+ async function collectSSOTStats(ssotDir) {
170
+ const stats = {
171
+ documentsCount: 0,
172
+ filledCount: 0,
173
+ completionRate: 0,
174
+ };
175
+ if (!await exists(ssotDir)) {
176
+ return stats;
177
+ }
178
+ const files = await listFiles('*.md', ssotDir);
179
+ for (const file of files) {
180
+ // Skip templates
181
+ if (file.includes('template'))
182
+ continue;
183
+ stats.documentsCount++;
184
+ // Check if document has content
185
+ try {
186
+ const content = await readFile(path.join(ssotDir, file));
187
+ // Consider filled if more than 200 characters of non-template content
188
+ const cleanContent = content
189
+ .replace(/^#.*$/gm, '')
190
+ .replace(/^\s*$/gm, '')
191
+ .trim();
192
+ if (cleanContent.length > 200) {
193
+ stats.filledCount++;
194
+ }
195
+ }
196
+ catch {
197
+ // Ignore read errors
198
+ }
199
+ }
200
+ stats.completionRate = stats.documentsCount > 0
201
+ ? Math.round((stats.filledCount / stats.documentsCount) * 100)
202
+ : 0;
203
+ return stats;
204
+ }
205
+ async function showMetricsSummary() {
206
+ const projectRoot = await findProjectRoot();
207
+ if (!projectRoot) {
208
+ throw new Error('Not a TimSquad project');
209
+ }
210
+ printHeader('Metrics Summary');
211
+ // Load latest metrics
212
+ const metricsDir = path.join(projectRoot, '.timsquad', 'retrospective', 'metrics');
213
+ if (!await exists(metricsDir)) {
214
+ console.log(colors.dim('No metrics collected yet'));
215
+ console.log(colors.dim('\nRun: tsq metrics collect'));
216
+ return;
217
+ }
218
+ const files = await listFiles('metrics-*.json', metricsDir);
219
+ files.sort().reverse();
220
+ if (files.length === 0) {
221
+ console.log(colors.dim('No metrics collected yet'));
222
+ console.log(colors.dim('\nRun: tsq metrics collect'));
223
+ return;
224
+ }
225
+ // Load latest metrics
226
+ const latestFile = path.join(metricsDir, files[0]);
227
+ const metrics = await fs.readJson(latestFile);
228
+ await displayMetrics(metrics);
229
+ }
230
+ async function displayMetrics(metrics) {
231
+ printKeyValue('Collected at', metrics.collectedAt);
232
+ printKeyValue('Period', `${metrics.period.start} ~ ${metrics.period.end}`);
233
+ console.log(colors.subheader('\n📊 Log Statistics'));
234
+ printKeyValue('Total log files', String(metrics.logs.total));
235
+ if (Object.keys(metrics.logs.byAgent).length > 0) {
236
+ console.log(colors.dim('\nBy Agent:'));
237
+ Object.entries(metrics.logs.byAgent)
238
+ .sort((a, b) => b[1] - a[1])
239
+ .forEach(([agent, count]) => {
240
+ console.log(` ${agent.padEnd(12)} ${colors.highlight(String(count))}`);
241
+ });
242
+ }
243
+ if (Object.keys(metrics.logs.byType).length > 0) {
244
+ console.log(colors.dim('\nBy Type:'));
245
+ Object.entries(metrics.logs.byType)
246
+ .sort((a, b) => b[1] - a[1])
247
+ .forEach(([type, count]) => {
248
+ console.log(` ${type.padEnd(12)} ${colors.highlight(String(count))}`);
249
+ });
250
+ }
251
+ console.log(colors.subheader('\n📝 Feedback Statistics'));
252
+ printKeyValue('Total feedback', String(metrics.feedback.total));
253
+ if (Object.keys(metrics.feedback.byLevel).length > 0) {
254
+ console.log(colors.dim('\nBy Level:'));
255
+ ['1', '2', '3'].forEach(level => {
256
+ const count = metrics.feedback.byLevel[level] || 0;
257
+ const label = level === '1' ? '구현 수정' : level === '2' ? '설계 수정' : '기획 수정';
258
+ console.log(` Level ${level} (${label.padEnd(6)}) ${colors.highlight(String(count))}`);
259
+ });
260
+ }
261
+ console.log(colors.subheader('\n📄 SSOT Status'));
262
+ printKeyValue('Documents', String(metrics.ssot.documentsCount));
263
+ printKeyValue('Filled', String(metrics.ssot.filledCount));
264
+ printKeyValue('Completion rate', `${metrics.ssot.completionRate}%`);
265
+ }
266
+ async function exportMetrics(outputPath) {
267
+ const projectRoot = await findProjectRoot();
268
+ if (!projectRoot) {
269
+ throw new Error('Not a TimSquad project');
270
+ }
271
+ // Load all metrics
272
+ const metricsDir = path.join(projectRoot, '.timsquad', 'retrospective', 'metrics');
273
+ if (!await exists(metricsDir)) {
274
+ throw new Error('No metrics collected yet. Run: tsq metrics collect');
275
+ }
276
+ const files = await listFiles('metrics-*.json', metricsDir);
277
+ if (files.length === 0) {
278
+ throw new Error('No metrics collected yet. Run: tsq metrics collect');
279
+ }
280
+ // Load all metrics files
281
+ const allMetrics = [];
282
+ for (const file of files.sort()) {
283
+ const data = await fs.readJson(path.join(metricsDir, file));
284
+ allMetrics.push(data);
285
+ }
286
+ // Determine output path
287
+ const output = outputPath || path.join(projectRoot, `timsquad-metrics-export-${getDateString()}.json`);
288
+ // Export
289
+ const exportData = {
290
+ exportedAt: getTimestamp(),
291
+ projectRoot,
292
+ metricsCount: allMetrics.length,
293
+ metrics: allMetrics,
294
+ };
295
+ await fs.writeJson(output, exportData, { spaces: 2 });
296
+ printSuccess('Metrics exported');
297
+ console.log(colors.path(`\n${output}`));
298
+ }
299
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerQuickCommand(program: Command): void;
3
+ //# sourceMappingURL=quick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick.d.ts","sourceRoot":"","sources":["../../src/commands/quick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAa3D"}
@@ -0,0 +1,136 @@
1
+ import path from 'path';
2
+ import { colors, printHeader, printError, printSuccess, printWarning, printKeyValue } from '../utils/colors.js';
3
+ import { findProjectRoot } from '../lib/project.js';
4
+ import { exists, writeFile, readFile } from '../utils/fs.js';
5
+ import { getDateString, getTimeString } from '../utils/date.js';
6
+ import { promptConfirm } from '../utils/prompts.js';
7
+ const DEFAULT_QUICK_CONFIG = {
8
+ keywords: [
9
+ '수정', '고쳐', '바꿔', '변경',
10
+ 'fix', 'change', 'update',
11
+ '오타', 'typo', '색상', '텍스트',
12
+ 'style', 'css', 'color', 'text',
13
+ ],
14
+ conditions: {
15
+ single_file_change: true,
16
+ ssot_update_required: false,
17
+ new_feature: false,
18
+ api_change: false,
19
+ },
20
+ };
21
+ export function registerQuickCommand(program) {
22
+ program
23
+ .command('q <task>')
24
+ .alias('quick')
25
+ .description('Quick mode for simple tasks (bypasses SSOT/Planner)')
26
+ .action(async (task) => {
27
+ try {
28
+ await runQuickMode(task);
29
+ }
30
+ catch (error) {
31
+ printError(error.message);
32
+ process.exit(1);
33
+ }
34
+ });
35
+ }
36
+ async function runQuickMode(task) {
37
+ const projectRoot = await findProjectRoot();
38
+ if (!projectRoot) {
39
+ throw new Error('Not a TimSquad project. Run "tsq init" first.');
40
+ }
41
+ printHeader('Quick Mode');
42
+ // Analyze task complexity
43
+ const analysis = analyzeTaskComplexity(task);
44
+ printKeyValue('Task', task);
45
+ printKeyValue('Complexity', analysis.isQuick ? 'Simple' : 'Complex');
46
+ printKeyValue('Confidence', `${Math.round(analysis.confidence * 100)}%`);
47
+ if (!analysis.isQuick) {
48
+ console.log('');
49
+ printWarning(`This task may require Full mode: ${analysis.reason}`);
50
+ const proceed = await promptConfirm('Proceed with Quick mode anyway?', false);
51
+ if (!proceed) {
52
+ console.log(colors.dim('\nSwitch to Full mode with: tsq f "' + task + '"'));
53
+ return;
54
+ }
55
+ }
56
+ console.log('');
57
+ console.log(colors.dim('Quick mode executes tasks directly without SSOT checks.'));
58
+ console.log(colors.dim('Agent: Developer (direct call)'));
59
+ console.log('');
60
+ // Log the quick task
61
+ await logQuickTask(projectRoot, task, analysis);
62
+ printSuccess('Quick task logged');
63
+ console.log(colors.dim(`\nLog: .timsquad/logs/quick/${getDateString()}.md`));
64
+ console.log('');
65
+ console.log(colors.subheader('Instructions for Claude:'));
66
+ console.log(colors.dim('─'.repeat(40)));
67
+ console.log(`Execute this simple task directly:`);
68
+ console.log(colors.highlight(`\n ${task}\n`));
69
+ console.log(colors.dim('No SSOT check needed. Minimal logging.'));
70
+ console.log(colors.dim('─'.repeat(40)));
71
+ }
72
+ function analyzeTaskComplexity(task) {
73
+ const lowerTask = task.toLowerCase();
74
+ let confidence = 0.5;
75
+ let isQuick = false;
76
+ let reason = 'Unknown complexity';
77
+ // Check for quick keywords
78
+ const quickKeywords = DEFAULT_QUICK_CONFIG.keywords;
79
+ const hasQuickKeyword = quickKeywords.some(k => lowerTask.includes(k));
80
+ if (hasQuickKeyword) {
81
+ confidence += 0.3;
82
+ isQuick = true;
83
+ reason = 'Contains quick mode keyword';
84
+ }
85
+ // Check for complex indicators
86
+ const complexPatterns = [
87
+ { pattern: /api|endpoint|엔드포인트/, reason: 'API change detected' },
88
+ { pattern: /feature|기능|새로운/, reason: 'New feature detected' },
89
+ { pattern: /database|db|테이블|스키마/, reason: 'Database change detected' },
90
+ { pattern: /auth|인증|로그인|권한/, reason: 'Authentication change detected' },
91
+ { pattern: /아키텍처|architecture|구조|리팩토링/, reason: 'Architecture change detected' },
92
+ ];
93
+ for (const { pattern, reason: complexReason } of complexPatterns) {
94
+ if (pattern.test(lowerTask)) {
95
+ confidence -= 0.3;
96
+ isQuick = false;
97
+ reason = complexReason;
98
+ break;
99
+ }
100
+ }
101
+ // Adjust confidence based on task length
102
+ if (task.length < 20) {
103
+ confidence += 0.1;
104
+ }
105
+ else if (task.length > 100) {
106
+ confidence -= 0.2;
107
+ }
108
+ // Clamp confidence
109
+ confidence = Math.max(0.1, Math.min(0.95, confidence));
110
+ return {
111
+ isQuick: isQuick && confidence > 0.4,
112
+ reason,
113
+ suggestedAgent: 'developer',
114
+ confidence,
115
+ };
116
+ }
117
+ async function logQuickTask(projectRoot, task, analysis) {
118
+ const date = getDateString();
119
+ const time = getTimeString();
120
+ const logDir = path.join(projectRoot, '.timsquad', 'logs', 'quick');
121
+ const logFile = path.join(logDir, `${date}.md`);
122
+ let content = '';
123
+ if (await exists(logFile)) {
124
+ content = await readFile(logFile);
125
+ }
126
+ else {
127
+ content = `# Quick Mode Log - ${date}\n\n`;
128
+ }
129
+ content += `## ${time} - Developer\n\n`;
130
+ content += `- **Task**: ${task}\n`;
131
+ content += `- **Confidence**: ${Math.round(analysis.confidence * 100)}%\n`;
132
+ content += `- **Status**: Pending\n`;
133
+ content += `\n---\n\n`;
134
+ await writeFile(logFile, content);
135
+ }
136
+ //# sourceMappingURL=quick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick.js","sourceRoot":"","sources":["../../src/commands/quick.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerRetroCommand(program: Command): void;
3
+ //# sourceMappingURL=retro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retro.d.ts","sourceRoot":"","sources":["../../src/commands/retro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF3D"}