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.
- package/LICENSE +21 -0
- package/README.md +347 -0
- package/bin/tsq.js +6 -0
- package/dist/commands/feedback.d.ts +3 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +142 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/full.d.ts +3 -0
- package/dist/commands/full.d.ts.map +1 -0
- package/dist/commands/full.js +87 -0
- package/dist/commands/full.js.map +1 -0
- package/dist/commands/git/commit.d.ts +3 -0
- package/dist/commands/git/commit.d.ts.map +1 -0
- package/dist/commands/git/commit.js +88 -0
- package/dist/commands/git/commit.js.map +1 -0
- package/dist/commands/git/index.d.ts +5 -0
- package/dist/commands/git/index.d.ts.map +1 -0
- package/dist/commands/git/index.js +5 -0
- package/dist/commands/git/index.js.map +1 -0
- package/dist/commands/git/pr.d.ts +3 -0
- package/dist/commands/git/pr.d.ts.map +1 -0
- package/dist/commands/git/pr.js +138 -0
- package/dist/commands/git/pr.js.map +1 -0
- package/dist/commands/git/release.d.ts +3 -0
- package/dist/commands/git/release.d.ts.map +1 -0
- package/dist/commands/git/release.js +158 -0
- package/dist/commands/git/release.js.map +1 -0
- package/dist/commands/git/sync.d.ts +3 -0
- package/dist/commands/git/sync.d.ts.map +1 -0
- package/dist/commands/git/sync.js +132 -0
- package/dist/commands/git/sync.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +150 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +271 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/metrics.d.ts +3 -0
- package/dist/commands/metrics.d.ts.map +1 -0
- package/dist/commands/metrics.js +299 -0
- package/dist/commands/metrics.js.map +1 -0
- package/dist/commands/quick.d.ts +3 -0
- package/dist/commands/quick.d.ts.map +1 -0
- package/dist/commands/quick.js +136 -0
- package/dist/commands/quick.js.map +1 -0
- package/dist/commands/retro.d.ts +3 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +280 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +127 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +213 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +34 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +108 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/project.d.ts +47 -0
- package/dist/lib/project.d.ts.map +1 -0
- package/dist/lib/project.js +191 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/template.d.ts +33 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js +151 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/types/config.d.ts +75 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +66 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/feedback.d.ts +59 -0
- package/dist/types/feedback.d.ts.map +1 -0
- package/dist/types/feedback.js +26 -0
- package/dist/types/feedback.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/project.d.ts +89 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +44 -0
- package/dist/types/project.js.map +1 -0
- package/dist/utils/colors.d.ts +30 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +54 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/date.d.ts +25 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +65 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/fs.d.ts +49 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +84 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/prompts.d.ts +31 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +95 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/yaml.d.ts +21 -0
- package/dist/utils/yaml.d.ts.map +1 -0
- package/dist/utils/yaml.js +40 -0
- package/dist/utils/yaml.js.map +1 -0
- package/package.json +71 -0
- package/templates/common/CLAUDE.md.template +254 -0
- package/templates/common/claude/agents/tsq-dba.md +290 -0
- package/templates/common/claude/agents/tsq-designer.md +304 -0
- package/templates/common/claude/agents/tsq-developer.md +118 -0
- package/templates/common/claude/agents/tsq-planner.md +90 -0
- package/templates/common/claude/agents/tsq-prompter.md +336 -0
- package/templates/common/claude/agents/tsq-qa.md +134 -0
- package/templates/common/claude/agents/tsq-retro.md +168 -0
- package/templates/common/claude/agents/tsq-security.md +190 -0
- package/templates/common/claude/skills/architecture/SKILL.md +123 -0
- package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
- package/templates/common/claude/skills/coding/SKILL.md +171 -0
- package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
- package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
- package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
- package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
- package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
- package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
- package/templates/common/claude/skills/planning/SKILL.md +90 -0
- package/templates/common/claude/skills/security/SKILL.md +234 -0
- package/templates/common/claude/skills/testing/SKILL.md +146 -0
- package/templates/common/claude/skills/typescript/SKILL.md +435 -0
- package/templates/common/config.template.yaml +131 -0
- package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
- package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
- package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
- package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
- package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
- package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
- package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
- package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
- package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
- package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
- package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
- package/templates/common/timsquad/generators/data-design.xml +290 -0
- package/templates/common/timsquad/generators/prd.xml +280 -0
- package/templates/common/timsquad/generators/requirements.xml +220 -0
- package/templates/common/timsquad/generators/service-spec.xml +266 -0
- package/templates/common/timsquad/logs/_example.md +81 -0
- package/templates/common/timsquad/logs/_template.md +46 -0
- package/templates/common/timsquad/patterns/cqrs.xml +127 -0
- package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
- package/templates/common/timsquad/patterns/repository.xml +64 -0
- package/templates/common/timsquad/process/state-machine.xml +343 -0
- package/templates/common/timsquad/process/validation-rules.xml +308 -0
- package/templates/common/timsquad/process/workflow-base.xml +202 -0
- package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
- package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
- package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
- package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
- package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
- package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
- package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
- package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
- package/templates/common/timsquad/ssot/data-design.template.md +132 -0
- package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
- package/templates/common/timsquad/ssot/env-config.template.md +346 -0
- package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
- package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
- package/templates/common/timsquad/ssot/glossary.template.md +148 -0
- package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
- package/templates/common/timsquad/ssot/planning.template.md +94 -0
- package/templates/common/timsquad/ssot/prd.template.md +102 -0
- package/templates/common/timsquad/ssot/requirements.template.md +117 -0
- package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
- package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
- package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
- package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
- 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":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7G,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAU5F,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;SAC3C,MAAM,CAAC,mBAAmB,EAAE,+DAA+D,CAAC;SAC5F,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;SAC9E,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAoB;IACzC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAE/C,sBAAsB;IACtB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,YAAY,CAAc,eAAe,EAAE;YACtD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,yBAAyB,CAAC,aAAa,CAAC,EAAE;YACpG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,yBAAyB,CAAC,aAAa,CAAC,EAAE;YACpG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,CAAC,UAAU,CAAC,EAAE;YAC3F,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAAE;YACxF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE;SACnF,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,IAAI,KAAmB,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC9E,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAiB,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,YAAY,CAAe,gBAAgB,EAAE;YACzD,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC,EAAE;YAC/E,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC,EAAE;YACpF,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC,EAAE;SACvF,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IAEnD,0CAA0C;IAC1C,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;YAC5F,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACpC,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,KAAK,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,aAAa,CAAC,OAAO,EAAE,GAAG,KAAK,KAAK,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1E,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,MAAM,UAAU,GAAG,CAAC,CAAC;IAErB,6BAA6B;IAC7B,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,iCAAiC,CAAC,CAAC;IAC5D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7C,yBAAyB;IACzB,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,wBAAwB;IACxB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEpC,2BAA2B;IAC3B,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,6BAA6B,CAAC,CAAC;IACxD,sCAAsC;IAEtC,uBAAuB;IACvB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IACjD,sCAAsC;IAEtC,qBAAqB;IACrB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,6BAA6B,CAAC,CAAC;IACxD,sCAAsC;IAEtC,mBAAmB;IACnB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAE1C,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,YAAY,CAAC,qBAAqB,IAAI,6BAA6B,CAAC,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,uBAAuB,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,oBAAoB,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,+BAA+B,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,8BAA8B,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,qBAAqB,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -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 @@
|
|
|
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"}
|