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,29 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ITaskLinter,
|
|
3
|
+
LintResult,
|
|
4
|
+
TaskMetadata,
|
|
5
|
+
ValidationError,
|
|
6
|
+
} from './task-linter.types.js';
|
|
7
|
+
export declare class TaskLinter implements ITaskLinter {
|
|
8
|
+
private errors;
|
|
9
|
+
private addError;
|
|
10
|
+
/**
|
|
11
|
+
* Validate task file name format
|
|
12
|
+
*/
|
|
13
|
+
validateFileName(fileName: string): ValidationError | null;
|
|
14
|
+
private extractMetadata;
|
|
15
|
+
/**
|
|
16
|
+
* Validate task metadata
|
|
17
|
+
*/
|
|
18
|
+
validateMetadata(metadata: TaskMetadata, filePath: string): ValidationError[];
|
|
19
|
+
private validateContent;
|
|
20
|
+
/**
|
|
21
|
+
* Lint a single task file
|
|
22
|
+
*/
|
|
23
|
+
lintFile(filePath: string): Promise<ValidationError[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Lint all task files in the specified directory
|
|
26
|
+
*/
|
|
27
|
+
lintDirectory(tasksDir: string): Promise<LintResult>;
|
|
28
|
+
static printResults(result: LintResult): void;
|
|
29
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { readdir, readFile } from 'fs/promises';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
const VALID_STATUSES = ['pending', 'in-progress', 'done', 'blocked'];
|
|
5
|
+
const VALID_TYPES = ['feat', 'fix', 'chore', 'docs', 'refactor', 'test'];
|
|
6
|
+
export class TaskLinter {
|
|
7
|
+
errors = [];
|
|
8
|
+
addError(file, message, severity = 'error', line) {
|
|
9
|
+
this.errors.push({ file, message, severity, line });
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Validate task file name format
|
|
13
|
+
*/
|
|
14
|
+
validateFileName(fileName) {
|
|
15
|
+
const pattern = /^task-\d{2,3}-[a-z0-9-]+\.md$/;
|
|
16
|
+
if (!pattern.test(fileName)) {
|
|
17
|
+
return {
|
|
18
|
+
file: fileName,
|
|
19
|
+
message: 'Invalid filename. Expected: task-NNN-kebab-case-title.md',
|
|
20
|
+
severity: 'error',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
extractMetadata(content) {
|
|
26
|
+
const headerSection = content.split(/^##/m)[0];
|
|
27
|
+
const statusMatch = headerSection.match(/^Status:\s*(.+)$/im);
|
|
28
|
+
const typeMatch = headerSection.match(/^Type:\s*(.+)$/im);
|
|
29
|
+
const assigneeMatch = headerSection.match(/^Assignee:\s*(.+)$/im);
|
|
30
|
+
return {
|
|
31
|
+
status: statusMatch?.[1]?.trim().toLowerCase(),
|
|
32
|
+
type: typeMatch?.[1]?.trim().toLowerCase(),
|
|
33
|
+
assignee: assigneeMatch?.[1]?.trim(),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validate task metadata
|
|
38
|
+
*/
|
|
39
|
+
validateMetadata(metadata, filePath) {
|
|
40
|
+
const errors = [];
|
|
41
|
+
if (!metadata.status) {
|
|
42
|
+
errors.push({
|
|
43
|
+
file: filePath,
|
|
44
|
+
message: 'Missing required metadata: Status',
|
|
45
|
+
severity: 'error',
|
|
46
|
+
});
|
|
47
|
+
} else if (!VALID_STATUSES.includes(metadata.status)) {
|
|
48
|
+
errors.push({
|
|
49
|
+
file: filePath,
|
|
50
|
+
message: `Invalid status "${metadata.status}". Valid: ${VALID_STATUSES.join(', ')}`,
|
|
51
|
+
severity: 'error',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (!metadata.type) {
|
|
55
|
+
errors.push({
|
|
56
|
+
file: filePath,
|
|
57
|
+
message: 'Missing required metadata: Type',
|
|
58
|
+
severity: 'error',
|
|
59
|
+
});
|
|
60
|
+
} else if (!VALID_TYPES.includes(metadata.type)) {
|
|
61
|
+
errors.push({
|
|
62
|
+
file: filePath,
|
|
63
|
+
message: `Invalid type "${metadata.type}". Valid: ${VALID_TYPES.join(', ')}`,
|
|
64
|
+
severity: 'error',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (!metadata.assignee) {
|
|
68
|
+
errors.push({
|
|
69
|
+
file: filePath,
|
|
70
|
+
message: 'Missing recommended metadata: Assignee',
|
|
71
|
+
severity: 'warning',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return errors;
|
|
75
|
+
}
|
|
76
|
+
validateContent(filename, content) {
|
|
77
|
+
const lines = content.split('\n');
|
|
78
|
+
// Check H1 heading
|
|
79
|
+
if (!lines[0]?.trim().startsWith('# ')) {
|
|
80
|
+
this.addError(
|
|
81
|
+
filename,
|
|
82
|
+
'Task file must start with a level 1 heading (# Task NNN — Title)',
|
|
83
|
+
'error',
|
|
84
|
+
1,
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
const h1Pattern = /^#\s+(?:🧩\s+)?Task\s+\d{2,3}\s+[—-]\s+.+$/i;
|
|
88
|
+
if (lines[0] && !h1Pattern.test(lines[0])) {
|
|
89
|
+
this.addError(
|
|
90
|
+
filename,
|
|
91
|
+
'H1 heading must follow format: "# Task NNN — Title"',
|
|
92
|
+
'error',
|
|
93
|
+
1,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
const metadata = this.extractMetadata(content);
|
|
97
|
+
const metadataErrors = this.validateMetadata(metadata, filename);
|
|
98
|
+
metadataErrors.forEach((error) => {
|
|
99
|
+
this.addError(error.file, error.message, error.severity, error.line);
|
|
100
|
+
});
|
|
101
|
+
const h2Sections = content.match(/^##\s+.+$/gm);
|
|
102
|
+
if (!h2Sections || h2Sections.length === 0) {
|
|
103
|
+
this.addError(
|
|
104
|
+
filename,
|
|
105
|
+
'Task should have at least one section (## heading)',
|
|
106
|
+
'warning',
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
const firstH2Index = content.indexOf('\n##');
|
|
110
|
+
if (firstH2Index > -1) {
|
|
111
|
+
const afterH2 = content.substring(firstH2Index);
|
|
112
|
+
if (
|
|
113
|
+
afterH2.match(/^Status:/im) ||
|
|
114
|
+
afterH2.match(/^Type:/im) ||
|
|
115
|
+
afterH2.match(/^Assignee:/im)
|
|
116
|
+
) {
|
|
117
|
+
this.addError(
|
|
118
|
+
filename,
|
|
119
|
+
'Metadata must be placed BEFORE the first ## section',
|
|
120
|
+
'error',
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Lint a single task file
|
|
127
|
+
*/
|
|
128
|
+
async lintFile(filePath) {
|
|
129
|
+
const errors = [];
|
|
130
|
+
// Validate filename
|
|
131
|
+
const fileName = filePath.split('/').pop() || filePath;
|
|
132
|
+
const fileNameError = this.validateFileName(fileName);
|
|
133
|
+
if (fileNameError) {
|
|
134
|
+
errors.push(fileNameError);
|
|
135
|
+
}
|
|
136
|
+
// Read and validate content
|
|
137
|
+
try {
|
|
138
|
+
const content = await readFile(filePath, 'utf-8');
|
|
139
|
+
this.errors = [];
|
|
140
|
+
this.validateContent(fileName, content);
|
|
141
|
+
errors.push(...this.errors);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
errors.push({
|
|
144
|
+
file: fileName,
|
|
145
|
+
message: `Failed to read file: ${error}`,
|
|
146
|
+
severity: 'error',
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return errors;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Lint all task files in the specified directory
|
|
153
|
+
*/
|
|
154
|
+
async lintDirectory(tasksDir) {
|
|
155
|
+
this.errors = [];
|
|
156
|
+
try {
|
|
157
|
+
const files = await readdir(tasksDir);
|
|
158
|
+
const taskFiles = files.filter((f) => f.endsWith('.md'));
|
|
159
|
+
for (const file of taskFiles) {
|
|
160
|
+
const fileNameError = this.validateFileName(file);
|
|
161
|
+
if (fileNameError) {
|
|
162
|
+
this.addError(file, fileNameError.message, fileNameError.severity);
|
|
163
|
+
}
|
|
164
|
+
const content = await readFile(join(tasksDir, file), 'utf-8');
|
|
165
|
+
this.validateContent(file, content);
|
|
166
|
+
}
|
|
167
|
+
const errors = this.errors.filter((e) => e.severity === 'error');
|
|
168
|
+
const warnings = this.errors.filter((e) => e.severity === 'warning');
|
|
169
|
+
return {
|
|
170
|
+
errors,
|
|
171
|
+
warnings,
|
|
172
|
+
filesChecked: taskFiles.length,
|
|
173
|
+
valid: errors.length === 0,
|
|
174
|
+
};
|
|
175
|
+
} catch (error) {
|
|
176
|
+
throw new Error(`Failed to lint tasks: ${error}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
static printResults(result) {
|
|
180
|
+
if (result.errors.length === 0 && result.warnings.length === 0) {
|
|
181
|
+
console.log(
|
|
182
|
+
chalk.green(`✅ All ${result.filesChecked} task files are valid!\n`),
|
|
183
|
+
);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
console.log(
|
|
187
|
+
chalk.bold(
|
|
188
|
+
`\n📊 Validation Results (${result.filesChecked} files checked):\n`,
|
|
189
|
+
),
|
|
190
|
+
);
|
|
191
|
+
const errorsByFile = new Map();
|
|
192
|
+
[...result.errors, ...result.warnings].forEach((error) => {
|
|
193
|
+
if (!errorsByFile.has(error.file)) {
|
|
194
|
+
errorsByFile.set(error.file, []);
|
|
195
|
+
}
|
|
196
|
+
errorsByFile.get(error.file).push(error);
|
|
197
|
+
});
|
|
198
|
+
for (const [file, fileErrors] of errorsByFile) {
|
|
199
|
+
console.log(chalk.cyan(`\n📄 ${file}`));
|
|
200
|
+
for (const error of fileErrors) {
|
|
201
|
+
const icon =
|
|
202
|
+
error.severity === 'error' ? chalk.red('❌') : chalk.yellow('⚠️');
|
|
203
|
+
const location = error.line ? `:${error.line}` : '';
|
|
204
|
+
console.log(` ${icon} ${error.message}${location}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
console.log('\n' + '─'.repeat(60));
|
|
208
|
+
console.log(
|
|
209
|
+
chalk.bold(
|
|
210
|
+
`\n📊 Summary: ${chalk.red(result.errors.length + ' error(s)')}, ${chalk.yellow(result.warnings.length + ' warning(s)')}\n`,
|
|
211
|
+
),
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=task-linter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-linter.js","sourceRoot":"","sources":["../../src/lib/task-linter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task linter types
|
|
3
|
+
*/
|
|
4
|
+
export interface ValidationError {
|
|
5
|
+
file: string;
|
|
6
|
+
message: string;
|
|
7
|
+
severity: 'error' | 'warning';
|
|
8
|
+
line?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TaskMetadata {
|
|
11
|
+
assignee?: string;
|
|
12
|
+
status?: string;
|
|
13
|
+
type?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface LintResult {
|
|
16
|
+
errors: ValidationError[];
|
|
17
|
+
filesChecked: number;
|
|
18
|
+
valid: boolean;
|
|
19
|
+
warnings: ValidationError[];
|
|
20
|
+
}
|
|
21
|
+
export interface ITaskLinter {
|
|
22
|
+
/**
|
|
23
|
+
* Lint all task files in the specified directory
|
|
24
|
+
*/
|
|
25
|
+
lintDirectory(tasksDir: string): Promise<LintResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Lint a single task file
|
|
28
|
+
*/
|
|
29
|
+
lintFile(filePath: string): Promise<ValidationError[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Validate task file name format
|
|
32
|
+
*/
|
|
33
|
+
validateFileName(fileName: string): ValidationError | null;
|
|
34
|
+
/**
|
|
35
|
+
* Validate task metadata
|
|
36
|
+
*/
|
|
37
|
+
validateMetadata(metadata: TaskMetadata, filePath: string): ValidationError[];
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-linter.types.js","sourceRoot":"","sources":["../../src/lib/task-linter.types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for Taskin CLI
|
|
3
|
+
* Handles dependency injection and initialization
|
|
4
|
+
*/
|
|
5
|
+
import { Taskin } from './taskin.js';
|
|
6
|
+
/**
|
|
7
|
+
* Factory function to create a configured Taskin instance
|
|
8
|
+
*/
|
|
9
|
+
export declare function createTaskin(tasksDir?: string): Taskin;
|
|
10
|
+
/**
|
|
11
|
+
* Get the default Taskin instance
|
|
12
|
+
* Uses current working directory TASKS folder
|
|
13
|
+
*/
|
|
14
|
+
export declare function getTaskin(): Taskin;
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for Taskin CLI
|
|
3
|
+
* Handles dependency injection and initialization
|
|
4
|
+
*/
|
|
5
|
+
import { FileSystemTaskProvider } from '@taskin/fs-task-provider';
|
|
6
|
+
import { TaskManager } from '@taskin/task-manager';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { FileSystemTaskLinter } from './lib/file-system-task-linter/index.js';
|
|
9
|
+
import { Taskin } from './taskin.js';
|
|
10
|
+
/**
|
|
11
|
+
* Factory function to create a configured Taskin instance
|
|
12
|
+
*/
|
|
13
|
+
export function createTaskin(tasksDir) {
|
|
14
|
+
const resolvedTasksDir = tasksDir || join(process.cwd(), 'TASKS');
|
|
15
|
+
// Initialize dependencies
|
|
16
|
+
const taskProvider = new FileSystemTaskProvider(resolvedTasksDir);
|
|
17
|
+
const taskManager = new TaskManager(taskProvider);
|
|
18
|
+
const linter = new FileSystemTaskLinter();
|
|
19
|
+
// Create and return Taskin instance with injected dependencies
|
|
20
|
+
return new Taskin(taskProvider, taskManager, linter);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the default Taskin instance
|
|
24
|
+
* Uses current working directory TASKS folder
|
|
25
|
+
*/
|
|
26
|
+
export function getTaskin() {
|
|
27
|
+
return createTaskin();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAiB;IAC5C,MAAM,gBAAgB,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAElE,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE1C,+DAA+D;IAC/D,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC"}
|
package/dist/taskin.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taskin - Concrete implementation of ITaskin
|
|
3
|
+
* Main class that implements task management with dependency injection
|
|
4
|
+
*/
|
|
5
|
+
import type { FileSystemTaskProvider } from '@taskin/fs-task-provider';
|
|
6
|
+
import type { TaskManager } from '@taskin/task-manager';
|
|
7
|
+
import type {
|
|
8
|
+
FinishTaskOptions,
|
|
9
|
+
ITaskin,
|
|
10
|
+
LintResult,
|
|
11
|
+
LintTasksOptions,
|
|
12
|
+
ListTasksOptions,
|
|
13
|
+
PauseTaskOptions,
|
|
14
|
+
StartTaskOptions,
|
|
15
|
+
Task,
|
|
16
|
+
TaskId,
|
|
17
|
+
} from '@taskin/types-ts';
|
|
18
|
+
import type { FileSystemTaskLinter } from './lib/file-system-task-linter/file-system-task-linter.js';
|
|
19
|
+
export declare class Taskin implements ITaskin {
|
|
20
|
+
private readonly taskProvider;
|
|
21
|
+
private readonly taskManager;
|
|
22
|
+
private readonly linter;
|
|
23
|
+
constructor(
|
|
24
|
+
taskProvider: FileSystemTaskProvider,
|
|
25
|
+
taskManager: TaskManager,
|
|
26
|
+
linter: FileSystemTaskLinter,
|
|
27
|
+
);
|
|
28
|
+
list(options?: ListTasksOptions): Promise<Task[]>;
|
|
29
|
+
start(taskId: TaskId, options?: StartTaskOptions): Promise<void>;
|
|
30
|
+
pause(taskId: TaskId, options?: PauseTaskOptions): Promise<void>;
|
|
31
|
+
finish(taskId: TaskId, _options?: FinishTaskOptions): Promise<void>;
|
|
32
|
+
lint(options?: LintTasksOptions): Promise<LintResult>;
|
|
33
|
+
}
|
package/dist/taskin.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taskin - Concrete implementation of ITaskin
|
|
3
|
+
* Main class that implements task management with dependency injection
|
|
4
|
+
*/
|
|
5
|
+
export class Taskin {
|
|
6
|
+
taskProvider;
|
|
7
|
+
taskManager;
|
|
8
|
+
linter;
|
|
9
|
+
constructor(taskProvider, taskManager, linter) {
|
|
10
|
+
this.taskProvider = taskProvider;
|
|
11
|
+
this.taskManager = taskManager;
|
|
12
|
+
this.linter = linter;
|
|
13
|
+
}
|
|
14
|
+
async list(options) {
|
|
15
|
+
const tasks = await this.taskProvider.getAllTasks();
|
|
16
|
+
// Convert TaskFile to Task and apply filters
|
|
17
|
+
return tasks
|
|
18
|
+
.map((taskFile) => {
|
|
19
|
+
// Map TaskFile to Task
|
|
20
|
+
const task = {
|
|
21
|
+
createdAt: taskFile.createdAt,
|
|
22
|
+
id: taskFile.id,
|
|
23
|
+
status: taskFile.status,
|
|
24
|
+
title: taskFile.title,
|
|
25
|
+
type: taskFile.type,
|
|
26
|
+
assignee: taskFile.userId, // Map userId to assignee
|
|
27
|
+
};
|
|
28
|
+
return task;
|
|
29
|
+
})
|
|
30
|
+
.filter((task) => {
|
|
31
|
+
if (options?.status && task.status !== options.status) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (options?.type && task.type !== options.type) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (options?.assignee && task.assignee !== options.assignee) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async start(taskId, options) {
|
|
44
|
+
const task = await this.taskProvider.findTask(taskId);
|
|
45
|
+
if (!task) {
|
|
46
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
47
|
+
}
|
|
48
|
+
await this.taskManager.startTask(taskId);
|
|
49
|
+
// TODO: Handle options.force and options.base when git integration is ready
|
|
50
|
+
if (options?.force) {
|
|
51
|
+
// Force start implementation
|
|
52
|
+
}
|
|
53
|
+
if (options?.base) {
|
|
54
|
+
// Base branch implementation
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async pause(taskId, options) {
|
|
58
|
+
const task = await this.taskProvider.findTask(taskId);
|
|
59
|
+
if (!task) {
|
|
60
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
61
|
+
}
|
|
62
|
+
// TODO: Implement pause logic with git operations
|
|
63
|
+
if (!options?.skipCommit) {
|
|
64
|
+
// Commit changes
|
|
65
|
+
task.status = 'pending';
|
|
66
|
+
await this.taskProvider.updateTask(task);
|
|
67
|
+
}
|
|
68
|
+
if (options?.message) {
|
|
69
|
+
// Use custom commit message
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async finish(taskId, _options) {
|
|
73
|
+
const task = await this.taskProvider.findTask(taskId);
|
|
74
|
+
if (!task) {
|
|
75
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
76
|
+
}
|
|
77
|
+
await this.taskManager.finishTask(taskId);
|
|
78
|
+
}
|
|
79
|
+
async lint(options) {
|
|
80
|
+
const lintPath = options?.path || 'TASKS';
|
|
81
|
+
const fileResult = await this.linter.lintDirectory(lintPath);
|
|
82
|
+
// Convert FileSystem-specific result to provider-agnostic result
|
|
83
|
+
return {
|
|
84
|
+
errors: fileResult.errors.map((e) => ({
|
|
85
|
+
taskId: e.file,
|
|
86
|
+
message: e.message,
|
|
87
|
+
severity: e.severity,
|
|
88
|
+
line: e.line,
|
|
89
|
+
})),
|
|
90
|
+
warnings: fileResult.warnings.map((e) => ({
|
|
91
|
+
taskId: e.file,
|
|
92
|
+
message: e.message,
|
|
93
|
+
severity: e.severity,
|
|
94
|
+
line: e.line,
|
|
95
|
+
})),
|
|
96
|
+
tasksChecked: fileResult.filesChecked,
|
|
97
|
+
valid: fileResult.valid,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=taskin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskin.js","sourceRoot":"","sources":["../src/taskin.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "taskin",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"description": "Task management system integrated with Git workflows",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"task",
|
|
7
|
+
"management",
|
|
8
|
+
"git",
|
|
9
|
+
"workflow",
|
|
10
|
+
"cli",
|
|
11
|
+
"productivity",
|
|
12
|
+
"task-tracker",
|
|
13
|
+
"project-management",
|
|
14
|
+
"developer-tools",
|
|
15
|
+
"taskin"
|
|
16
|
+
],
|
|
17
|
+
"homepage": "https://opentask.com.br",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/opentask-app/taskin/issues"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/opentask-app/taskin.git",
|
|
24
|
+
"directory": "packages/cli"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"author": {
|
|
28
|
+
"name": "OpenTask",
|
|
29
|
+
"email": "contato@opentask.com.br",
|
|
30
|
+
"url": "https://opentask.com.br"
|
|
31
|
+
},
|
|
32
|
+
"contributors": [
|
|
33
|
+
{
|
|
34
|
+
"name": "Sidarta Veloso",
|
|
35
|
+
"email": "sidartaveloso@gmail.com"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"type": "module",
|
|
42
|
+
"bin": {
|
|
43
|
+
"taskin": "./dist/index.js"
|
|
44
|
+
},
|
|
45
|
+
"files": [
|
|
46
|
+
"dist",
|
|
47
|
+
"README.md",
|
|
48
|
+
"LICENSE"
|
|
49
|
+
],
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsc",
|
|
52
|
+
"clean": "rm -rf dist coverage .turbo",
|
|
53
|
+
"dev": "tsc --watch",
|
|
54
|
+
"format": "prettier --write .",
|
|
55
|
+
"format:check": "prettier --check .",
|
|
56
|
+
"lint": "eslint .",
|
|
57
|
+
"lint:fix": "eslint . --fix",
|
|
58
|
+
"prepublishOnly": "pnpm build",
|
|
59
|
+
"test": "vitest run",
|
|
60
|
+
"test:coverage": "vitest run --coverage",
|
|
61
|
+
"typecheck": "tsc --noEmit"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@taskin/core": "workspace:*",
|
|
65
|
+
"@taskin/fs-task-provider": "workspace:*",
|
|
66
|
+
"@taskin/git-utils": "workspace:*",
|
|
67
|
+
"@taskin/task-manager": "workspace:*",
|
|
68
|
+
"@taskin/types-ts": "workspace:*",
|
|
69
|
+
"@taskin/utils": "workspace:*",
|
|
70
|
+
"@types/inquirer": "^9.0.9",
|
|
71
|
+
"chalk": "^5.3.0",
|
|
72
|
+
"commander": "^12.1.0",
|
|
73
|
+
"inquirer": "^12.10.0"
|
|
74
|
+
},
|
|
75
|
+
"devDependencies": {
|
|
76
|
+
"@types/node": "^20.14.10",
|
|
77
|
+
"eslint": "^8.57.0",
|
|
78
|
+
"typescript": "^5.5.3",
|
|
79
|
+
"vitest": "^1.6.0"
|
|
80
|
+
}
|
|
81
|
+
}
|