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,150 @@
1
+ import path from 'path';
2
+ import ora from 'ora';
3
+ import { colors, printHeader, printSuccess, printError, printStep, printKeyValue } from '../utils/colors.js';
4
+ import { promptText, promptSelect, promptConfirm } from '../utils/prompts.js';
5
+ import { exists, mkdir } from '../utils/fs.js';
6
+ import { initializeProject } from '../lib/template.js';
7
+ import { createDefaultConfig, saveConfig } from '../lib/config.js';
8
+ import { PROJECT_TYPE_DESCRIPTIONS, PROJECT_LEVEL_DESCRIPTIONS } from '../types/project.js';
9
+ export function registerInitCommand(program) {
10
+ program
11
+ .command('init')
12
+ .description('Initialize a new TimSquad project')
13
+ .option('-n, --name <name>', 'Project name')
14
+ .option('-t, --type <type>', 'Project type (web-service|api-backend|platform|fintech|infra)')
15
+ .option('-l, --level <level>', 'Project level (1=MVP|2=Standard|3=Enterprise)')
16
+ .option('-d, --dir <path>', 'Target directory', '.')
17
+ .option('-y, --yes', 'Skip confirmation prompts')
18
+ .action(async (options) => {
19
+ try {
20
+ await runInit(options);
21
+ }
22
+ catch (error) {
23
+ printError(error.message);
24
+ process.exit(1);
25
+ }
26
+ });
27
+ }
28
+ async function runInit(options) {
29
+ printHeader('TimSquad Project Initialization');
30
+ // 1. Get project name
31
+ let name = options.name;
32
+ if (!name) {
33
+ name = await promptText('Project name:', path.basename(process.cwd()));
34
+ }
35
+ // Validate name
36
+ if (!/^[a-z0-9-]+$/.test(name)) {
37
+ throw new Error('Project name must be lowercase alphanumeric with hyphens only');
38
+ }
39
+ // 2. Get project type
40
+ let type;
41
+ if (options.type && isValidProjectType(options.type)) {
42
+ type = options.type;
43
+ }
44
+ else {
45
+ type = await promptSelect('Project type:', [
46
+ { name: 'web-service', value: 'web-service', description: PROJECT_TYPE_DESCRIPTIONS['web-service'] },
47
+ { name: 'api-backend', value: 'api-backend', description: PROJECT_TYPE_DESCRIPTIONS['api-backend'] },
48
+ { name: 'platform', value: 'platform', description: PROJECT_TYPE_DESCRIPTIONS['platform'] },
49
+ { name: 'fintech', value: 'fintech', description: PROJECT_TYPE_DESCRIPTIONS['fintech'] },
50
+ { name: 'infra', value: 'infra', description: PROJECT_TYPE_DESCRIPTIONS['infra'] },
51
+ ]);
52
+ }
53
+ // 3. Get project level
54
+ let level;
55
+ if (type === 'fintech') {
56
+ console.log(colors.warning('\n⚠ fintech 타입은 Level 3 (Enterprise)가 강제됩니다.\n'));
57
+ level = 3;
58
+ }
59
+ else if (options.level && isValidProjectLevel(options.level)) {
60
+ level = Number(options.level);
61
+ }
62
+ else {
63
+ level = await promptSelect('Project level:', [
64
+ { name: 'Level 1 (MVP)', value: 1, description: PROJECT_LEVEL_DESCRIPTIONS[1] },
65
+ { name: 'Level 2 (Standard)', value: 2, description: PROJECT_LEVEL_DESCRIPTIONS[2] },
66
+ { name: 'Level 3 (Enterprise)', value: 3, description: PROJECT_LEVEL_DESCRIPTIONS[3] },
67
+ ]);
68
+ }
69
+ // 4. Determine target directory
70
+ const targetDir = path.resolve(options.dir || '.');
71
+ // Check if directory exists and has files
72
+ if (await exists(path.join(targetDir, '.timsquad'))) {
73
+ if (!options.yes) {
74
+ const overwrite = await promptConfirm('TimSquad project already exists. Overwrite?', false);
75
+ if (!overwrite) {
76
+ console.log(colors.dim('\nInitialization cancelled.'));
77
+ return;
78
+ }
79
+ }
80
+ }
81
+ // 5. Show summary
82
+ console.log('\n');
83
+ printKeyValue('Project Name', name);
84
+ printKeyValue('Type', `${type} (${PROJECT_TYPE_DESCRIPTIONS[type]})`);
85
+ printKeyValue('Level', `${level} (${PROJECT_LEVEL_DESCRIPTIONS[level]})`);
86
+ printKeyValue('Directory', targetDir);
87
+ console.log('\n');
88
+ if (!options.yes) {
89
+ const proceed = await promptConfirm('Proceed with initialization?', true);
90
+ if (!proceed) {
91
+ console.log(colors.dim('\nInitialization cancelled.'));
92
+ return;
93
+ }
94
+ }
95
+ // 6. Initialize project
96
+ console.log('\n');
97
+ const totalSteps = 7;
98
+ // Step 1: Create directories
99
+ printStep(1, totalSteps, 'Creating directory structure...');
100
+ await mkdir(path.join(targetDir, '.timsquad'));
101
+ await mkdir(path.join(targetDir, '.claude'));
102
+ // Step 2: Copy templates
103
+ const spinner = ora('Copying templates...').start();
104
+ printStep(2, totalSteps, 'Copying templates...');
105
+ try {
106
+ await initializeProject(targetDir, name, type, level);
107
+ spinner.succeed('Templates copied');
108
+ }
109
+ catch (error) {
110
+ spinner.fail('Failed to copy templates');
111
+ throw error;
112
+ }
113
+ // Step 3: Create config
114
+ printStep(3, totalSteps, 'Creating configuration...');
115
+ const config = createDefaultConfig(name, type, level);
116
+ await saveConfig(targetDir, config);
117
+ // Step 4: Initialize state
118
+ printStep(4, totalSteps, 'Initializing state files...');
119
+ // (Already done in initializeProject)
120
+ // Step 5: Setup agents
121
+ printStep(5, totalSteps, 'Setting up agents...');
122
+ // (Already done in initializeProject)
123
+ // Step 6: Setup SSOT
124
+ printStep(6, totalSteps, 'Preparing SSOT documents...');
125
+ // (Already done in initializeProject)
126
+ // Step 7: Finalize
127
+ printStep(7, totalSteps, 'Finalizing...');
128
+ // 7. Show success message
129
+ console.log('\n');
130
+ printSuccess(`TimSquad project "${name}" initialized successfully!`);
131
+ console.log('\n' + colors.header('Next steps:'));
132
+ console.log(colors.dim(' 1. ') + colors.command('cd ' + (targetDir === '.' ? '' : targetDir)));
133
+ console.log(colors.dim(' 2. ') + colors.command('tsq status') + colors.dim(' - Check project status'));
134
+ console.log(colors.dim(' 3. ') + 'Start with PRD: ' + colors.path('.timsquad/ssot/prd.md'));
135
+ console.log('\n');
136
+ console.log(colors.dim('Available commands:'));
137
+ console.log(colors.dim(' tsq status ') + '- Show project status');
138
+ console.log(colors.dim(' tsq log ') + '- Manage work logs');
139
+ console.log(colors.dim(' tsq q "task" ') + '- Quick mode for simple tasks');
140
+ console.log(colors.dim(' tsq f "task" ') + '- Full mode with SSOT checks');
141
+ console.log(colors.dim(' tsq retro ') + '- Run retrospective');
142
+ console.log('\n');
143
+ }
144
+ function isValidProjectType(value) {
145
+ return ['web-service', 'api-backend', 'platform', 'fintech', 'infra'].includes(value);
146
+ }
147
+ function isValidProjectLevel(value) {
148
+ return ['1', '2', '3'].includes(value);
149
+ }
150
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerLogCommand(program: Command): void;
3
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkFzD"}
@@ -0,0 +1,271 @@
1
+ import path from 'path';
2
+ import { colors, printHeader, printError, printSuccess } from '../utils/colors.js';
3
+ import { findProjectRoot } from '../lib/project.js';
4
+ import { exists, readFile, writeFile, listFiles } from '../utils/fs.js';
5
+ import { getDateString, getTimeString } from '../utils/date.js';
6
+ const LOG_TYPES = ['work', 'decision', 'error', 'feedback', 'handoff'];
7
+ export function registerLogCommand(program) {
8
+ const logCmd = program
9
+ .command('log')
10
+ .description('Manage work logs');
11
+ // tsq log add <agent> <type> [message]
12
+ logCmd
13
+ .command('add <agent> <type> [message]')
14
+ .description('Add a log entry')
15
+ .action(async (agent, type, message) => {
16
+ try {
17
+ await addLog(agent, type, message);
18
+ }
19
+ catch (error) {
20
+ printError(error.message);
21
+ process.exit(1);
22
+ }
23
+ });
24
+ // tsq log list [agent]
25
+ logCmd
26
+ .command('list [agent]')
27
+ .description('List log files')
28
+ .action(async (agent) => {
29
+ try {
30
+ await listLogs(agent);
31
+ }
32
+ catch (error) {
33
+ printError(error.message);
34
+ process.exit(1);
35
+ }
36
+ });
37
+ // tsq log view <file>
38
+ logCmd
39
+ .command('view <file>')
40
+ .description('View a log file')
41
+ .action(async (file) => {
42
+ try {
43
+ await viewLog(file);
44
+ }
45
+ catch (error) {
46
+ printError(error.message);
47
+ process.exit(1);
48
+ }
49
+ });
50
+ // tsq log today [agent]
51
+ logCmd
52
+ .command('today [agent]')
53
+ .description('Show today\'s logs')
54
+ .action(async (agent) => {
55
+ try {
56
+ await showTodayLogs(agent);
57
+ }
58
+ catch (error) {
59
+ printError(error.message);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ // tsq log search <keyword>
64
+ logCmd
65
+ .command('search <keyword>')
66
+ .description('Search logs')
67
+ .action(async (keyword) => {
68
+ try {
69
+ await searchLogs(keyword);
70
+ }
71
+ catch (error) {
72
+ printError(error.message);
73
+ process.exit(1);
74
+ }
75
+ });
76
+ // tsq log summary [date]
77
+ logCmd
78
+ .command('summary [date]')
79
+ .description('Generate daily summary')
80
+ .action(async (date) => {
81
+ try {
82
+ await generateSummary(date);
83
+ }
84
+ catch (error) {
85
+ printError(error.message);
86
+ process.exit(1);
87
+ }
88
+ });
89
+ }
90
+ async function addLog(agent, type, message) {
91
+ const projectRoot = await findProjectRoot();
92
+ if (!projectRoot) {
93
+ throw new Error('Not a TimSquad project');
94
+ }
95
+ if (!LOG_TYPES.includes(type)) {
96
+ throw new Error(`Invalid log type. Use: ${LOG_TYPES.join(', ')}`);
97
+ }
98
+ // Read message from stdin if not provided
99
+ let logMessage = message;
100
+ if (!logMessage) {
101
+ // Check if stdin has data
102
+ if (!process.stdin.isTTY) {
103
+ logMessage = await readFromStdin();
104
+ }
105
+ if (!logMessage) {
106
+ throw new Error('Message is required');
107
+ }
108
+ }
109
+ const date = getDateString();
110
+ const time = getTimeString();
111
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
112
+ const logFile = path.join(logDir, `${date}-${agent}.md`);
113
+ // Create or append to log file
114
+ let content = '';
115
+ if (await exists(logFile)) {
116
+ content = await readFile(logFile);
117
+ }
118
+ else {
119
+ content = `# ${agent} Log - ${date}\n\n`;
120
+ }
121
+ // Add entry
122
+ const typeIcon = getTypeIcon(type);
123
+ content += `## ${time} [${type}] ${typeIcon}\n\n${logMessage}\n\n---\n\n`;
124
+ await writeFile(logFile, content);
125
+ printSuccess(`Log added: ${date}-${agent}.md`);
126
+ }
127
+ async function listLogs(agent) {
128
+ const projectRoot = await findProjectRoot();
129
+ if (!projectRoot) {
130
+ throw new Error('Not a TimSquad project');
131
+ }
132
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
133
+ const pattern = agent ? `*-${agent}.md` : '*.md';
134
+ const files = await listFiles(pattern, logDir);
135
+ // Filter out templates
136
+ const logFiles = files.filter(f => !f.startsWith('_'));
137
+ if (logFiles.length === 0) {
138
+ console.log(colors.dim('No logs found'));
139
+ return;
140
+ }
141
+ printHeader('Log Files');
142
+ logFiles.sort().reverse().forEach(file => {
143
+ console.log(` ${colors.path(file)}`);
144
+ });
145
+ }
146
+ async function viewLog(file) {
147
+ const projectRoot = await findProjectRoot();
148
+ if (!projectRoot) {
149
+ throw new Error('Not a TimSquad project');
150
+ }
151
+ const logFile = path.join(projectRoot, '.timsquad', 'logs', file);
152
+ if (!await exists(logFile)) {
153
+ throw new Error(`Log file not found: ${file}`);
154
+ }
155
+ const content = await readFile(logFile);
156
+ console.log(content);
157
+ }
158
+ async function showTodayLogs(agent) {
159
+ const projectRoot = await findProjectRoot();
160
+ if (!projectRoot) {
161
+ throw new Error('Not a TimSquad project');
162
+ }
163
+ const date = getDateString();
164
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
165
+ const pattern = agent ? `${date}-${agent}.md` : `${date}-*.md`;
166
+ const files = await listFiles(pattern, logDir);
167
+ if (files.length === 0) {
168
+ console.log(colors.dim('No logs for today'));
169
+ return;
170
+ }
171
+ printHeader(`Today's Logs (${date})`);
172
+ for (const file of files) {
173
+ const content = await readFile(path.join(logDir, file));
174
+ console.log(colors.subheader(file));
175
+ console.log(content);
176
+ console.log('');
177
+ }
178
+ }
179
+ async function searchLogs(keyword) {
180
+ const projectRoot = await findProjectRoot();
181
+ if (!projectRoot) {
182
+ throw new Error('Not a TimSquad project');
183
+ }
184
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
185
+ const files = await listFiles('*.md', logDir);
186
+ const logFiles = files.filter(f => !f.startsWith('_'));
187
+ let found = 0;
188
+ const lowerKeyword = keyword.toLowerCase();
189
+ for (const file of logFiles) {
190
+ const content = await readFile(path.join(logDir, file));
191
+ const lines = content.split('\n');
192
+ lines.forEach((line, index) => {
193
+ if (line.toLowerCase().includes(lowerKeyword)) {
194
+ if (found === 0) {
195
+ printHeader(`Search Results: "${keyword}"`);
196
+ }
197
+ console.log(`${colors.path(file)}:${index + 1}`);
198
+ console.log(` ${highlightKeyword(line, keyword)}`);
199
+ found++;
200
+ }
201
+ });
202
+ }
203
+ if (found === 0) {
204
+ console.log(colors.dim(`No results for "${keyword}"`));
205
+ }
206
+ else {
207
+ console.log(colors.dim(`\nFound ${found} matches`));
208
+ }
209
+ }
210
+ async function generateSummary(date) {
211
+ const projectRoot = await findProjectRoot();
212
+ if (!projectRoot) {
213
+ throw new Error('Not a TimSquad project');
214
+ }
215
+ const targetDate = date || getDateString();
216
+ const logDir = path.join(projectRoot, '.timsquad', 'logs');
217
+ const files = await listFiles(`${targetDate}-*.md`, logDir);
218
+ if (files.length === 0) {
219
+ console.log(colors.dim(`No logs for ${targetDate}`));
220
+ return;
221
+ }
222
+ printHeader(`Summary for ${targetDate}`);
223
+ const stats = {};
224
+ for (const file of files) {
225
+ const agent = file.replace(`${targetDate}-`, '').replace('.md', '');
226
+ const content = await readFile(path.join(logDir, file));
227
+ stats[agent] = { work: 0, decision: 0, error: 0, feedback: 0, handoff: 0 };
228
+ LOG_TYPES.forEach(type => {
229
+ const regex = new RegExp(`\\[${type}\\]`, 'gi');
230
+ const matches = content.match(regex);
231
+ stats[agent][type] = matches ? matches.length : 0;
232
+ });
233
+ }
234
+ // Display stats
235
+ Object.entries(stats).forEach(([agent, counts]) => {
236
+ console.log(colors.agent(`\n ${agent}:`));
237
+ Object.entries(counts).forEach(([type, count]) => {
238
+ if (count > 0) {
239
+ console.log(` ${type}: ${count}`);
240
+ }
241
+ });
242
+ });
243
+ console.log('');
244
+ }
245
+ function getTypeIcon(type) {
246
+ const icons = {
247
+ work: '📝',
248
+ decision: '🎯',
249
+ error: '❌',
250
+ feedback: '💬',
251
+ handoff: '🤝',
252
+ };
253
+ return icons[type] || '';
254
+ }
255
+ function highlightKeyword(text, keyword) {
256
+ const regex = new RegExp(`(${keyword})`, 'gi');
257
+ return text.replace(regex, colors.highlight('$1'));
258
+ }
259
+ async function readFromStdin() {
260
+ return new Promise((resolve) => {
261
+ let data = '';
262
+ process.stdin.on('data', chunk => {
263
+ data += chunk;
264
+ });
265
+ process.stdin.on('end', () => {
266
+ resolve(data.trim());
267
+ });
268
+ setTimeout(() => resolve(''), 100);
269
+ });
270
+ }
271
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerMetricsCommand(program: Command): void;
3
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6C7D"}