taskin 0.1.0-beta.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 +119 -0
- package/dist/commands/commands.types.d.ts +13 -0
- package/dist/commands/commands.types.js +6 -0
- package/dist/commands/commands.types.js.map +1 -0
- package/dist/commands/define-command/define-command.d.ts +6 -0
- package/dist/commands/define-command/define-command.js +27 -0
- package/dist/commands/define-command/define-command.js.map +1 -0
- package/dist/commands/define-command/define-command.test.d.ts +4 -0
- package/dist/commands/define-command/define-command.test.js +125 -0
- package/dist/commands/define-command/define-command.test.js.map +1 -0
- package/dist/commands/define-command/define-command.types.d.ts +49 -0
- package/dist/commands/define-command/define-command.types.js +5 -0
- package/dist/commands/define-command/define-command.types.js.map +1 -0
- package/dist/commands/define-command/index.d.ts +5 -0
- package/dist/commands/define-command/index.js +6 -0
- package/dist/commands/define-command/index.js.map +1 -0
- package/dist/commands/finish.d.ts +4 -0
- package/dist/commands/finish.js +69 -0
- package/dist/commands/finish.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +192 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +4 -0
- package/dist/commands/lint.js +31 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.js +132 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/pause.d.ts +4 -0
- package/dist/commands/pause.js +69 -0
- package/dist/commands/pause.js.map +1 -0
- package/dist/commands/start.d.ts +4 -0
- package/dist/commands/start.js +70 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/colors.d.ts +26 -0
- package/dist/lib/colors.js +42 -0
- package/dist/lib/colors.js.map +1 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.d.ts +36 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.js +219 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.js.map +1 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.mock.d.ts +81 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.mock.js +152 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.mock.js.map +1 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.test.d.ts +4 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.test.js +146 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.test.js.map +1 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.types.d.ts +52 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.types.js +6 -0
- package/dist/lib/file-system-task-linter/file-system-task-linter.types.js.map +1 -0
- package/dist/lib/file-system-task-linter/index.d.ts +6 -0
- package/dist/lib/file-system-task-linter/index.js +7 -0
- package/dist/lib/file-system-task-linter/index.js.map +1 -0
- package/dist/lib/help.d.ts +4 -0
- package/dist/lib/help.js +104 -0
- package/dist/lib/help.js.map +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.js +7 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/provider-installer/index.d.ts +5 -0
- package/dist/lib/provider-installer/index.js +6 -0
- package/dist/lib/provider-installer/index.js.map +1 -0
- package/dist/lib/provider-installer/provider-installer.d.ts +28 -0
- package/dist/lib/provider-installer/provider-installer.js +86 -0
- package/dist/lib/provider-installer/provider-installer.js.map +1 -0
- package/dist/lib/provider-installer/provider-installer.types.d.ts +4 -0
- package/dist/lib/provider-installer/provider-installer.types.js +5 -0
- package/dist/lib/provider-installer/provider-installer.types.js.map +1 -0
- package/dist/lib/provider-installer.d.ts +27 -0
- package/dist/lib/provider-installer.js +86 -0
- package/dist/lib/provider-installer.js.map +1 -0
- package/dist/lib/provider-registry/index.d.ts +5 -0
- package/dist/lib/provider-registry/index.js +6 -0
- package/dist/lib/provider-registry/index.js.map +1 -0
- package/dist/lib/provider-registry/provider-registry.d.ts +9 -0
- package/dist/lib/provider-registry/provider-registry.js +111 -0
- package/dist/lib/provider-registry/provider-registry.js.map +1 -0
- package/dist/lib/provider-registry/provider-registry.types.d.ts +5 -0
- package/dist/lib/provider-registry/provider-registry.types.js +6 -0
- package/dist/lib/provider-registry/provider-registry.types.js.map +1 -0
- package/dist/lib/provider-registry.d.ts +26 -0
- package/dist/lib/provider-registry.js +111 -0
- package/dist/lib/provider-registry.js.map +1 -0
- package/dist/lib/task-linter/index.d.ts +5 -0
- package/dist/lib/task-linter/index.js +6 -0
- package/dist/lib/task-linter/index.js.map +1 -0
- package/dist/lib/task-linter/task-linter.d.ts +36 -0
- package/dist/lib/task-linter/task-linter.js +219 -0
- package/dist/lib/task-linter/task-linter.js.map +1 -0
- package/dist/lib/task-linter/task-linter.types.d.ts +52 -0
- package/dist/lib/task-linter/task-linter.types.js +6 -0
- package/dist/lib/task-linter/task-linter.types.js.map +1 -0
- package/dist/lib/task-linter.d.ts +29 -0
- package/dist/lib/task-linter.js +215 -0
- package/dist/lib/task-linter.js.map +1 -0
- package/dist/lib/task-linter.types.d.ts +38 -0
- package/dist/lib/task-linter.types.js +5 -0
- package/dist/lib/task-linter.types.js.map +1 -0
- package/dist/main.d.ts +14 -0
- package/dist/main.js +29 -0
- package/dist/main.js.map +1 -0
- package/dist/taskin.d.ts +33 -0
- package/dist/taskin.js +101 -0
- package/dist/taskin.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init command - Initialize Taskin in the current project
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { colors, error, info, printHeader, success } from '../lib/colors.js';
|
|
8
|
+
import {
|
|
9
|
+
ensureProviderInstalled,
|
|
10
|
+
isProviderInstalled,
|
|
11
|
+
} from '../lib/provider-installer/index.js';
|
|
12
|
+
import {
|
|
13
|
+
getAllProviders,
|
|
14
|
+
getProviderById,
|
|
15
|
+
} from '../lib/provider-registry/index.js';
|
|
16
|
+
import { defineCommand } from './define-command/index.js';
|
|
17
|
+
export const initCommand = defineCommand({
|
|
18
|
+
name: 'init',
|
|
19
|
+
description: '🎯 Initialize Taskin in your project',
|
|
20
|
+
options: [
|
|
21
|
+
{
|
|
22
|
+
flags: '-f, --force',
|
|
23
|
+
description: 'Force initialization (overwrite existing configuration)',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
handler: async (options) => {
|
|
27
|
+
await initializeTaskin(options);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
async function initializeTaskin(options) {
|
|
31
|
+
printHeader('Initializing Taskin', '🎯');
|
|
32
|
+
const cwd = process.cwd();
|
|
33
|
+
const configFile = join(cwd, '.taskin.json');
|
|
34
|
+
// Check if already initialized
|
|
35
|
+
if (existsSync(configFile) && !options.force) {
|
|
36
|
+
error('Taskin is already initialized in this project');
|
|
37
|
+
info('Use --force to reinitialize');
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// Get all providers from registry
|
|
41
|
+
const allProviders = getAllProviders();
|
|
42
|
+
// Create choices for inquirer
|
|
43
|
+
const choices = allProviders.map((p) => {
|
|
44
|
+
const installed = isProviderInstalled(p.packageName);
|
|
45
|
+
const status = p.status === 'coming-soon' ? ' (coming soon)' : '';
|
|
46
|
+
const installedMark = installed ? ' ✓' : '';
|
|
47
|
+
return {
|
|
48
|
+
name: `${p.name}${installedMark}${status} - ${p.description}`,
|
|
49
|
+
value: p.id,
|
|
50
|
+
disabled: p.status === 'coming-soon' ? 'Not yet implemented' : false,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
// Ask user to select provider
|
|
54
|
+
const { providerId } = await inquirer.prompt([
|
|
55
|
+
{
|
|
56
|
+
type: 'list',
|
|
57
|
+
name: 'providerId',
|
|
58
|
+
message: 'Select a task provider:',
|
|
59
|
+
choices,
|
|
60
|
+
default: 'fs',
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
63
|
+
const selectedProvider = getProviderById(providerId);
|
|
64
|
+
if (!selectedProvider) {
|
|
65
|
+
error(`Provider "${providerId}" not found`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
console.log();
|
|
69
|
+
info(`Setting up task provider: ${colors.highlight(selectedProvider.name)}`);
|
|
70
|
+
console.log();
|
|
71
|
+
// Ensure provider is installed
|
|
72
|
+
await ensureProviderInstalled(selectedProvider);
|
|
73
|
+
// Setup provider configuration
|
|
74
|
+
const providerConfig = await setupProviderConfig(selectedProvider, cwd);
|
|
75
|
+
// Create .taskin.json configuration
|
|
76
|
+
const config = {
|
|
77
|
+
version: '0.1.0',
|
|
78
|
+
provider: {
|
|
79
|
+
type: selectedProvider.id,
|
|
80
|
+
config: providerConfig,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
info('Creating configuration file...');
|
|
84
|
+
writeFileSync(configFile, JSON.stringify(config, null, 2), 'utf-8');
|
|
85
|
+
success(`✓ Created ${colors.highlight('.taskin.json')}`);
|
|
86
|
+
// Add .taskin.json to .gitignore if it exists
|
|
87
|
+
const gitignorePath = join(cwd, '.gitignore');
|
|
88
|
+
if (existsSync(gitignorePath)) {
|
|
89
|
+
const gitignoreContent = require('fs').readFileSync(gitignorePath, 'utf-8');
|
|
90
|
+
if (!gitignoreContent.includes('.taskin.json')) {
|
|
91
|
+
info('Adding .taskin.json to .gitignore...');
|
|
92
|
+
writeFileSync(
|
|
93
|
+
gitignorePath,
|
|
94
|
+
`${gitignoreContent}\n# Taskin configuration\n.taskin.json\n`,
|
|
95
|
+
'utf-8',
|
|
96
|
+
);
|
|
97
|
+
success('✓ Updated .gitignore');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
console.log();
|
|
101
|
+
success('🎉 Taskin initialized successfully!');
|
|
102
|
+
console.log();
|
|
103
|
+
info('Next steps:');
|
|
104
|
+
console.log(colors.secondary(' 1. Run: taskin list'));
|
|
105
|
+
console.log(
|
|
106
|
+
colors.secondary(
|
|
107
|
+
selectedProvider.id === 'fs'
|
|
108
|
+
? ' 2. Edit or create tasks in TASKS/'
|
|
109
|
+
: ` 2. Tasks will be synced with ${selectedProvider.name}`,
|
|
110
|
+
),
|
|
111
|
+
);
|
|
112
|
+
console.log(colors.secondary(' 3. Start working: taskin start <task-id>'));
|
|
113
|
+
console.log();
|
|
114
|
+
info('For more information, run: taskin --help');
|
|
115
|
+
console.log();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Setup provider configuration based on provider schema
|
|
119
|
+
*/
|
|
120
|
+
async function setupProviderConfig(provider, cwd) {
|
|
121
|
+
// Special handling for File System provider
|
|
122
|
+
if (provider.id === 'fs') {
|
|
123
|
+
return setupFileSystemProvider(cwd);
|
|
124
|
+
}
|
|
125
|
+
// Generic configuration for other providers
|
|
126
|
+
info(`Configuring ${provider.name}...`);
|
|
127
|
+
console.log();
|
|
128
|
+
const questions = Object.entries(provider.configSchema.properties).map(
|
|
129
|
+
([key, schema]) => ({
|
|
130
|
+
type: schema.secret ? 'password' : 'input',
|
|
131
|
+
name: key,
|
|
132
|
+
message: `${schema.description}:`,
|
|
133
|
+
validate: (input) => {
|
|
134
|
+
if (
|
|
135
|
+
provider.configSchema.required.includes(key) &&
|
|
136
|
+
input.length === 0
|
|
137
|
+
) {
|
|
138
|
+
return `${schema.description} is required`;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
},
|
|
142
|
+
}),
|
|
143
|
+
);
|
|
144
|
+
const answers = await inquirer.prompt(questions);
|
|
145
|
+
console.log();
|
|
146
|
+
success(`✓ ${provider.name} configuration saved`);
|
|
147
|
+
return answers;
|
|
148
|
+
}
|
|
149
|
+
async function setupFileSystemProvider(cwd) {
|
|
150
|
+
const tasksDir = join(cwd, 'TASKS');
|
|
151
|
+
// Create TASKS directory
|
|
152
|
+
if (!existsSync(tasksDir)) {
|
|
153
|
+
info(`Creating TASKS directory...`);
|
|
154
|
+
mkdirSync(tasksDir, { recursive: true });
|
|
155
|
+
success(`✓ Created ${colors.highlight('TASKS/')} directory`);
|
|
156
|
+
} else {
|
|
157
|
+
info(`${colors.highlight('TASKS/')} directory already exists`);
|
|
158
|
+
}
|
|
159
|
+
// Create a sample task
|
|
160
|
+
const sampleTaskFile = join(tasksDir, 'task-001-setup-project.md');
|
|
161
|
+
if (!existsSync(sampleTaskFile)) {
|
|
162
|
+
info('Creating sample task...');
|
|
163
|
+
const sampleTask = `# Task 001 — Setup Project
|
|
164
|
+
|
|
165
|
+
Status: pending
|
|
166
|
+
Type: chore
|
|
167
|
+
Assignee: developer
|
|
168
|
+
|
|
169
|
+
## Description
|
|
170
|
+
|
|
171
|
+
This is a sample task created during Taskin initialization.
|
|
172
|
+
|
|
173
|
+
## Tasks
|
|
174
|
+
|
|
175
|
+
- [ ] Review Taskin documentation
|
|
176
|
+
- [ ] Create your first task
|
|
177
|
+
- [ ] Start working on a task
|
|
178
|
+
|
|
179
|
+
## Notes
|
|
180
|
+
|
|
181
|
+
You can edit or delete this file. Use \`taskin list\` to see all tasks.
|
|
182
|
+
`;
|
|
183
|
+
writeFileSync(sampleTaskFile, sampleTask, 'utf-8');
|
|
184
|
+
success(
|
|
185
|
+
`✓ Created sample task ${colors.highlight('task-001-setup-project.md')}`,
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
tasksDir: 'TASKS',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
//# 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,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lint command - Validate task markdown files
|
|
3
|
+
*/
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { FileSystemTaskLinter } from '../lib/file-system-task-linter/index.js';
|
|
6
|
+
import { defineCommand } from './define-command/index.js';
|
|
7
|
+
export const lintCommand = defineCommand({
|
|
8
|
+
name: 'lint',
|
|
9
|
+
description: '🔍 Validate task markdown files',
|
|
10
|
+
options: [
|
|
11
|
+
{
|
|
12
|
+
flags: '-p, --path <directory>',
|
|
13
|
+
description: 'Path to TASKS directory',
|
|
14
|
+
defaultValue: 'TASKS',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
handler: async (options) => {
|
|
18
|
+
await executeLint(options);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
async function executeLint(options) {
|
|
22
|
+
const tasksDir = options.path || join(process.cwd(), 'TASKS');
|
|
23
|
+
console.log(`📋 Linting task files in: ${tasksDir}\n`);
|
|
24
|
+
const linter = new FileSystemTaskLinter();
|
|
25
|
+
const result = await linter.lintDirectory(tasksDir);
|
|
26
|
+
FileSystemTaskLinter.printResults(result);
|
|
27
|
+
if (!result.valid) {
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,iCAAiC;IAC9C,OAAO,EAAE;QACP;YACE,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,yBAAyB;YACtC,YAAY,EAAE,OAAO;SACtB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC3C,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC,CAAC;AAEH,KAAK,UAAU,WAAW,CAAC,OAAyB;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,IAAI,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpD,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List command - Display all tasks
|
|
3
|
+
*/
|
|
4
|
+
import { FileSystemTaskProvider } from '@taskin/fs-task-provider';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { colors, printHeader } from '../lib/colors.js';
|
|
7
|
+
import { defineCommand } from './define-command/index.js';
|
|
8
|
+
export const listCommand = defineCommand({
|
|
9
|
+
name: 'list [filter]',
|
|
10
|
+
description: '📊 List all tasks in the project',
|
|
11
|
+
alias: 'ls',
|
|
12
|
+
options: [
|
|
13
|
+
{
|
|
14
|
+
flags: '-s, --status <status>',
|
|
15
|
+
description: 'Filter by status (pending, in-progress, done, blocked)',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
flags: '-t, --type <type>',
|
|
19
|
+
description: 'Filter by type (feat, fix, refactor, docs, test, chore)',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
flags: '-u, --user <user>',
|
|
23
|
+
description: 'Filter by user',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
handler: async (filter, options) => {
|
|
27
|
+
await listTasks(filter, options);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
async function listTasks(filter, options) {
|
|
31
|
+
printHeader('Task List', '📊');
|
|
32
|
+
// Find TASKS directory
|
|
33
|
+
const tasksDir = path.join(process.cwd(), 'TASKS');
|
|
34
|
+
// Initialize task provider
|
|
35
|
+
const taskProvider = new FileSystemTaskProvider(tasksDir);
|
|
36
|
+
// Get all tasks
|
|
37
|
+
const tasks = await taskProvider.getAllTasks();
|
|
38
|
+
if (tasks.length === 0) {
|
|
39
|
+
console.log(colors.warning('No tasks found in TASKS/ directory'));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Apply filters
|
|
43
|
+
let filteredTasks = tasks;
|
|
44
|
+
if (options.status) {
|
|
45
|
+
filteredTasks = filteredTasks.filter((t) => t.status === options.status);
|
|
46
|
+
}
|
|
47
|
+
if (options.type) {
|
|
48
|
+
filteredTasks = filteredTasks.filter((t) => t.type === options.type);
|
|
49
|
+
}
|
|
50
|
+
if (options.assignee) {
|
|
51
|
+
filteredTasks = filteredTasks.filter((t) =>
|
|
52
|
+
t.userId?.toLowerCase().includes(options.assignee.toLowerCase()),
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
if (filter) {
|
|
56
|
+
const lowerFilter = filter.toLowerCase();
|
|
57
|
+
filteredTasks = filteredTasks.filter(
|
|
58
|
+
(t) =>
|
|
59
|
+
t.id.includes(lowerFilter) ||
|
|
60
|
+
t.title.toLowerCase().includes(lowerFilter) ||
|
|
61
|
+
t.status.toLowerCase().includes(lowerFilter) ||
|
|
62
|
+
t.userId?.toLowerCase().includes(lowerFilter),
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
if (filteredTasks.length === 0) {
|
|
66
|
+
console.log(colors.warning('No tasks match the filters'));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Display tasks
|
|
70
|
+
console.log(
|
|
71
|
+
colors.highlight(
|
|
72
|
+
`${'ID'.padEnd(15)} ${'Status'.padEnd(15)} ${'Type'.padEnd(12)} ${'User'.padEnd(15)} ${'Title'}`,
|
|
73
|
+
),
|
|
74
|
+
);
|
|
75
|
+
console.log(colors.secondary('─'.repeat(100)));
|
|
76
|
+
filteredTasks.forEach((task) => {
|
|
77
|
+
const statusColor = getStatusColor(task.status);
|
|
78
|
+
const typeColor = getTypeColor(task.type);
|
|
79
|
+
console.log(
|
|
80
|
+
`${colors.info(task.id.padEnd(15))} ${statusColor(task.status.padEnd(15))} ${typeColor(task.type.padEnd(12))} ${colors.secondary((task.userId || 'unknown').padEnd(15))} ${colors.normal(task.title)}`,
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
console.log();
|
|
84
|
+
console.log(colors.secondary('─'.repeat(100)));
|
|
85
|
+
// Summary
|
|
86
|
+
const statusCounts = {
|
|
87
|
+
pending: filteredTasks.filter((t) => t.status === 'pending').length,
|
|
88
|
+
'in-progress': filteredTasks.filter((t) => t.status === 'in-progress')
|
|
89
|
+
.length,
|
|
90
|
+
done: filteredTasks.filter((t) => t.status === 'done').length,
|
|
91
|
+
blocked: filteredTasks.filter((t) => t.status === 'blocked').length,
|
|
92
|
+
};
|
|
93
|
+
console.log(
|
|
94
|
+
colors.info(
|
|
95
|
+
`📊 Total: ${filteredTasks.length} tasks | ⏳ Pending: ${statusCounts.pending} | 🚀 In Progress: ${statusCounts['in-progress']} | ✅ Done: ${statusCounts.done} | 🚫 Blocked: ${statusCounts.blocked}`,
|
|
96
|
+
),
|
|
97
|
+
);
|
|
98
|
+
console.log();
|
|
99
|
+
}
|
|
100
|
+
function getStatusColor(status) {
|
|
101
|
+
switch (status) {
|
|
102
|
+
case 'pending':
|
|
103
|
+
return colors.secondary;
|
|
104
|
+
case 'in-progress':
|
|
105
|
+
return colors.info;
|
|
106
|
+
case 'done':
|
|
107
|
+
return colors.success;
|
|
108
|
+
case 'blocked':
|
|
109
|
+
return colors.error;
|
|
110
|
+
default:
|
|
111
|
+
return colors.normal;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function getTypeColor(type) {
|
|
115
|
+
switch (type) {
|
|
116
|
+
case 'feat':
|
|
117
|
+
return colors.success;
|
|
118
|
+
case 'fix':
|
|
119
|
+
return colors.error;
|
|
120
|
+
case 'refactor':
|
|
121
|
+
return colors.warning;
|
|
122
|
+
case 'docs':
|
|
123
|
+
return colors.info;
|
|
124
|
+
case 'test':
|
|
125
|
+
return colors.secondary;
|
|
126
|
+
case 'chore':
|
|
127
|
+
return colors.normal;
|
|
128
|
+
default:
|
|
129
|
+
return colors.normal;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,kCAAkC;IAC/C,KAAK,EAAE,IAAI;IACX,OAAO,EAAE;QACP;YACE,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,wDAAwD;SACtE;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,yDAAyD;SACvE;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,gBAAgB;SAC9B;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAA0B,EAAE,OAAyB,EAAE,EAAE;QACvE,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS,CACtB,MAA0B,EAC1B,OAAyB;IAEzB,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE/B,uBAAuB;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAEnD,2BAA2B;IAC3B,MAAM,YAAY,GAAG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAE1D,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAS,CAAC,WAAW,EAAE,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,aAAa,GAAG,aAAa,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC5C,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,SAAS,CACd,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CACjG,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE/C,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACvM,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE/C,UAAU;IACV,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACnE,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC;aACnE,MAAM;QACT,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QAC7D,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;KACpE,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,IAAI,CACT,aAAa,aAAa,CAAC,MAAM,uBAAuB,YAAY,CAAC,OAAO,sBAAsB,YAAY,CAAC,aAAa,CAAC,cAAc,YAAY,CAAC,IAAI,kBAAkB,YAAY,CAAC,OAAO,EAAE,CACrM,CACF,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,KAAK,aAAa;YAChB,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;YACE,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB;YACE,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pause command - Pause work on a task
|
|
3
|
+
*/
|
|
4
|
+
import { FileSystemTaskProvider } from '@taskin/fs-task-provider';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { colors, error, info, printHeader, success } from '../lib/colors.js';
|
|
7
|
+
import { defineCommand } from './define-command/index.js';
|
|
8
|
+
export const pauseCommand = defineCommand({
|
|
9
|
+
name: 'pause <task-id>',
|
|
10
|
+
description: '⏸️ Pause work on a task',
|
|
11
|
+
alias: 'stop',
|
|
12
|
+
options: [
|
|
13
|
+
{
|
|
14
|
+
flags: '-m, --message <message>',
|
|
15
|
+
description: 'Custom commit message',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
flags: '-s, --skip-commit',
|
|
19
|
+
description: 'Skip commit (just show what would be done)',
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
handler: async (taskId, options) => {
|
|
23
|
+
await pauseTask(taskId, options);
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
async function pauseTask(taskId, options) {
|
|
27
|
+
printHeader(`Pausing Task ${taskId}`, '⏸️');
|
|
28
|
+
// Normalize task ID
|
|
29
|
+
const normalizedId = taskId.replace(/^task-/, '').padStart(3, '0');
|
|
30
|
+
// Find TASKS directory
|
|
31
|
+
const tasksDir = path.join(process.cwd(), 'TASKS');
|
|
32
|
+
// Initialize task provider
|
|
33
|
+
const taskProvider = new FileSystemTaskProvider(tasksDir);
|
|
34
|
+
// Find task
|
|
35
|
+
const task = await taskProvider.findTask(normalizedId);
|
|
36
|
+
if (!task) {
|
|
37
|
+
error(`Task ${normalizedId} not found in TASKS/ directory`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
info(`Found task: ${task.title}`);
|
|
41
|
+
info(`Current status: ${task.status}`);
|
|
42
|
+
// Check if task is in progress
|
|
43
|
+
if (task.status !== 'in-progress') {
|
|
44
|
+
error('Task is not in progress. Use "taskin start" first.');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const commitMessage =
|
|
48
|
+
options.message || `WIP: task-${normalizedId} - ${task.title}`;
|
|
49
|
+
if (options.skipCommit) {
|
|
50
|
+
info('Would create commit with message:');
|
|
51
|
+
console.log(colors.highlight(` "${commitMessage}"`));
|
|
52
|
+
console.log();
|
|
53
|
+
info('Use without --skip-commit to actually commit');
|
|
54
|
+
} else {
|
|
55
|
+
info('Creating commit...');
|
|
56
|
+
console.log(colors.secondary(` Message: "${commitMessage}"`));
|
|
57
|
+
console.log();
|
|
58
|
+
success('Task paused successfully!');
|
|
59
|
+
info('Commit created (not pushed)');
|
|
60
|
+
console.log();
|
|
61
|
+
info('Next steps:');
|
|
62
|
+
console.log(colors.secondary(' 1. Switch to another task'));
|
|
63
|
+
console.log(
|
|
64
|
+
colors.secondary(' 2. Or continue later with the same branch'),
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
console.log();
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=pause.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pause.js","sourceRoot":"","sources":["../../src/commands/pause.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start command - Begin working on a task
|
|
3
|
+
*/
|
|
4
|
+
import { FileSystemTaskProvider } from '@taskin/fs-task-provider';
|
|
5
|
+
import { TaskManager } from '@taskin/task-manager';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { colors, error, info, printHeader, success } from '../lib/colors.js';
|
|
8
|
+
import { defineCommand } from './define-command/index.js';
|
|
9
|
+
export const startCommand = defineCommand({
|
|
10
|
+
name: 'start <task-id>',
|
|
11
|
+
description: '🚀 Start working on a task',
|
|
12
|
+
alias: 'begin',
|
|
13
|
+
options: [
|
|
14
|
+
{
|
|
15
|
+
flags: '-f, --force',
|
|
16
|
+
description: 'Force start even with uncommitted changes',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
flags: '-b, --base <branch>',
|
|
20
|
+
description: 'Base branch to create from (default: current)',
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
handler: async (taskId, options) => {
|
|
24
|
+
await startTask(taskId, options);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
async function startTask(taskId, _options) {
|
|
28
|
+
printHeader(`Starting Task ${taskId}`, '🚀');
|
|
29
|
+
// Normalize task ID
|
|
30
|
+
const normalizedId = taskId.replace(/^task-/, '').padStart(3, '0');
|
|
31
|
+
// Find TASKS directory
|
|
32
|
+
const tasksDir = path.join(process.cwd(), 'TASKS');
|
|
33
|
+
// Initialize task manager
|
|
34
|
+
const taskProvider = new FileSystemTaskProvider(tasksDir);
|
|
35
|
+
const taskManager = new TaskManager(taskProvider);
|
|
36
|
+
// Find task
|
|
37
|
+
const task = await taskProvider.findTask(normalizedId);
|
|
38
|
+
if (!task) {
|
|
39
|
+
error(`Task ${normalizedId} not found in TASKS/ directory`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
info(`Found task: ${task.title}`);
|
|
43
|
+
info(`Current status: ${task.status}`);
|
|
44
|
+
// Check if task is already in progress
|
|
45
|
+
if (task.status === 'in-progress') {
|
|
46
|
+
error('Task is already in progress');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
// Check if task is done
|
|
50
|
+
if (task.status === 'done') {
|
|
51
|
+
error('Task is already done');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Start the task
|
|
55
|
+
info('Starting task...');
|
|
56
|
+
const updatedTask = await taskManager.startTask(task.id);
|
|
57
|
+
success(`Task ${updatedTask.id} started successfully!`);
|
|
58
|
+
success(`Status changed to: ${updatedTask.status}`);
|
|
59
|
+
console.log();
|
|
60
|
+
info('Next steps:');
|
|
61
|
+
console.log(
|
|
62
|
+
colors.secondary(
|
|
63
|
+
' 1. Create a branch: git checkout -b feat/task-' + normalizedId,
|
|
64
|
+
),
|
|
65
|
+
);
|
|
66
|
+
console.log(colors.secondary(' 2. Start coding! 💻'));
|
|
67
|
+
console.log(colors.secondary(' 3. Use "taskin pause" to save progress'));
|
|
68
|
+
console.log();
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Taskin CLI - Main entry point
|
|
4
|
+
* Command-line interface for managing tasks
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { finishCommand } from './commands/finish.js';
|
|
8
|
+
import { initCommand } from './commands/init.js';
|
|
9
|
+
import { lintCommand } from './commands/lint.js';
|
|
10
|
+
import { listCommand } from './commands/list.js';
|
|
11
|
+
import { pauseCommand } from './commands/pause.js';
|
|
12
|
+
import { startCommand } from './commands/start.js';
|
|
13
|
+
import { showCustomHelp } from './lib/help.js';
|
|
14
|
+
const program = new Command();
|
|
15
|
+
program
|
|
16
|
+
.name('taskin')
|
|
17
|
+
.description('🚀 Task Management System')
|
|
18
|
+
.version('0.1.0')
|
|
19
|
+
.configureHelp({
|
|
20
|
+
formatHelp: () => showCustomHelp(),
|
|
21
|
+
});
|
|
22
|
+
// Register commands
|
|
23
|
+
initCommand(program);
|
|
24
|
+
listCommand(program);
|
|
25
|
+
startCommand(program);
|
|
26
|
+
pauseCommand(program);
|
|
27
|
+
finishCommand(program);
|
|
28
|
+
lintCommand(program);
|
|
29
|
+
// Show custom help if no command provided
|
|
30
|
+
if (process.argv.length <= 2) {
|
|
31
|
+
showCustomHelp();
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
// Parse arguments
|
|
35
|
+
program.parse();
|
|
36
|
+
export { createTaskin, getTaskin } from './main.js';
|
|
37
|
+
export { Taskin } from './taskin.js';
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,2BAA2B,CAAC;KACxC,OAAO,CAAC,OAAO,CAAC;KAChB,aAAa,CAAC;IACb,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;CACnC,CAAC,CAAC;AAEL,oBAAoB;AACpB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AAErB,0CAA0C;AAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,cAAc,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC;AAIhB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color utilities for CLI output
|
|
3
|
+
*/
|
|
4
|
+
export declare const colors: {
|
|
5
|
+
info: import('chalk').ChalkInstance;
|
|
6
|
+
success: import('chalk').ChalkInstance;
|
|
7
|
+
warning: import('chalk').ChalkInstance;
|
|
8
|
+
error: import('chalk').ChalkInstance;
|
|
9
|
+
highlight: import('chalk').ChalkInstance;
|
|
10
|
+
secondary: import('chalk').ChalkInstance;
|
|
11
|
+
normal: import('chalk').ChalkInstance;
|
|
12
|
+
};
|
|
13
|
+
export declare const icons: {
|
|
14
|
+
rocket: string;
|
|
15
|
+
list: string;
|
|
16
|
+
check: string;
|
|
17
|
+
pause: string;
|
|
18
|
+
info: string;
|
|
19
|
+
task: string;
|
|
20
|
+
gear: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function printHeader(title: string, icon: string): void;
|
|
23
|
+
export declare function success(message: string): void;
|
|
24
|
+
export declare function error(message: string): void;
|
|
25
|
+
export declare function info(message: string): void;
|
|
26
|
+
export declare function warning(message: string): void;
|