@e0ipso/ai-task-manager 1.14.0 → 1.16.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/README.md +3 -0
- package/dist/cli.js +76 -0
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -1
- package/dist/index.js.map +1 -1
- package/dist/plan-utils.d.ts +35 -0
- package/dist/plan-utils.d.ts.map +1 -0
- package/dist/plan-utils.js +122 -0
- package/dist/plan-utils.js.map +1 -0
- package/dist/plan.d.ts +20 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +241 -0
- package/dist/plan.js.map +1 -0
- package/dist/status.d.ts +72 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +374 -0
- package/dist/status.js.map +1 -0
- package/package.json +2 -1
- package/templates/ai-task-manager/README.md +7 -0
- package/templates/assistant/commands/tasks/full-workflow.md +147 -0
package/dist/plan.js
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plan Command Module
|
|
4
|
+
*
|
|
5
|
+
* Implements show and archive subcommands for plan inspection and management
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.showPlan = showPlan;
|
|
45
|
+
exports.archivePlan = archivePlan;
|
|
46
|
+
const fs = __importStar(require("fs-extra"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
49
|
+
const readline = __importStar(require("readline"));
|
|
50
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
51
|
+
const plan_utils_1 = require("./plan-utils");
|
|
52
|
+
const TERM_WIDTH = 80;
|
|
53
|
+
const DIVIDER = '─'.repeat(TERM_WIDTH);
|
|
54
|
+
/**
|
|
55
|
+
* Format a section header
|
|
56
|
+
*/
|
|
57
|
+
function formatSectionHeader(title) {
|
|
58
|
+
return `\n${chalk_1.default.cyan.bold(title)}\n${chalk_1.default.cyan(DIVIDER)}\n`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create an ASCII progress bar
|
|
62
|
+
*/
|
|
63
|
+
function createProgressBar(percentage, width = 20) {
|
|
64
|
+
const filled = Math.round((percentage / 100) * width);
|
|
65
|
+
const empty = width - filled;
|
|
66
|
+
const bar = chalk_1.default.green('█'.repeat(filled)) + chalk_1.default.gray('░'.repeat(empty));
|
|
67
|
+
return `[${bar}] ${percentage}%`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Wrap text to specified width, preserving paragraphs
|
|
71
|
+
*/
|
|
72
|
+
function wrapText(text, maxWidth) {
|
|
73
|
+
const paragraphs = text.split('\n\n');
|
|
74
|
+
return paragraphs
|
|
75
|
+
.map(paragraph => {
|
|
76
|
+
const words = paragraph.split(/\s+/);
|
|
77
|
+
const lines = [];
|
|
78
|
+
let currentLine = '';
|
|
79
|
+
for (const word of words) {
|
|
80
|
+
if (currentLine.length + word.length + 1 <= maxWidth) {
|
|
81
|
+
currentLine += (currentLine ? ' ' : '') + word;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (currentLine)
|
|
85
|
+
lines.push(currentLine);
|
|
86
|
+
currentLine = word;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (currentLine)
|
|
90
|
+
lines.push(currentLine);
|
|
91
|
+
return lines.join('\n');
|
|
92
|
+
})
|
|
93
|
+
.join('\n\n');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Prompt user for yes/no confirmation
|
|
97
|
+
*/
|
|
98
|
+
async function promptConfirmation(question) {
|
|
99
|
+
const rl = readline.createInterface({
|
|
100
|
+
input: process.stdin,
|
|
101
|
+
output: process.stdout,
|
|
102
|
+
});
|
|
103
|
+
return new Promise(resolve => {
|
|
104
|
+
rl.question(question, answer => {
|
|
105
|
+
rl.close();
|
|
106
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Display plan metadata, executive summary, and task statistics
|
|
112
|
+
*/
|
|
113
|
+
async function showPlan(planId) {
|
|
114
|
+
try {
|
|
115
|
+
const planData = await (0, plan_utils_1.loadPlanData)(planId);
|
|
116
|
+
if (!planData) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
message: `Plan ${planId} not found. Check .ai/task-manager/plans/ and .ai/task-manager/archive/`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Build output
|
|
123
|
+
let output = '';
|
|
124
|
+
// Header
|
|
125
|
+
output += chalk_1.default.bold.white(`\nPlan ${planData.id}\n`);
|
|
126
|
+
output += chalk_1.default.gray(DIVIDER) + '\n';
|
|
127
|
+
// Metadata section
|
|
128
|
+
output += formatSectionHeader('Metadata');
|
|
129
|
+
output += ` ${chalk_1.default.cyan('●')} ID: ${planData.id}\n`;
|
|
130
|
+
output += ` ${chalk_1.default.cyan('●')} Created: ${planData.created}\n`;
|
|
131
|
+
output += ` ${chalk_1.default.cyan('●')} Status: ${planData.isArchived ? chalk_1.default.blue('Archived') : chalk_1.default.green('Active')}\n`;
|
|
132
|
+
output += ` ${chalk_1.default.cyan('●')} Summary: ${planData.summary}\n`;
|
|
133
|
+
// Task statistics section
|
|
134
|
+
const taskCount = planData.tasks.length;
|
|
135
|
+
const completedCount = planData.tasks.filter(t => t.status === 'completed').length;
|
|
136
|
+
const percentage = taskCount > 0 ? Math.round((completedCount / taskCount) * 100) : 0;
|
|
137
|
+
output += formatSectionHeader('Task Progress');
|
|
138
|
+
if (taskCount > 0) {
|
|
139
|
+
output += ` ${createProgressBar(percentage, 20)} ${completedCount}/${taskCount} tasks completed\n`;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
output += ` ${chalk_1.default.gray('No tasks generated yet')}\n`;
|
|
143
|
+
}
|
|
144
|
+
// Executive Summary section
|
|
145
|
+
output += formatSectionHeader('Executive Summary');
|
|
146
|
+
// Word wrap the executive summary to 76 chars (80 - 4 for indent)
|
|
147
|
+
const wrappedSummary = wrapText(planData.executiveSummary, 76);
|
|
148
|
+
output +=
|
|
149
|
+
wrappedSummary
|
|
150
|
+
.split('\n')
|
|
151
|
+
.map(line => ` ${line}`)
|
|
152
|
+
.join('\n') + '\n';
|
|
153
|
+
// Footer
|
|
154
|
+
output += '\n' + chalk_1.default.gray(DIVIDER) + '\n';
|
|
155
|
+
console.log(output);
|
|
156
|
+
return { success: true };
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
message: `Failed to display plan: ${message}`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Archive a plan by moving it to the archive directory
|
|
168
|
+
*/
|
|
169
|
+
async function archivePlan(planId, autoConfirm = false) {
|
|
170
|
+
try {
|
|
171
|
+
// 1. Find and validate plan location
|
|
172
|
+
const location = await (0, plan_utils_1.findPlanById)(planId);
|
|
173
|
+
if (!location) {
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
message: `Plan ${planId} not found. Check .ai/task-manager/plans/ directory.`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
if (location.isArchived) {
|
|
180
|
+
return {
|
|
181
|
+
success: false,
|
|
182
|
+
message: `Plan ${planId} is already archived.`,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// 2. Load plan data to check for incomplete tasks
|
|
186
|
+
const planData = await (0, plan_utils_1.loadPlanData)(planId);
|
|
187
|
+
if (!planData) {
|
|
188
|
+
return { success: false, message: `Failed to load plan ${planId} data.` };
|
|
189
|
+
}
|
|
190
|
+
const incompleteTasks = planData.tasks.filter(t => t.status !== 'completed');
|
|
191
|
+
// 3. Warn user if incomplete tasks exist
|
|
192
|
+
if (incompleteTasks.length > 0 && !autoConfirm) {
|
|
193
|
+
console.log(chalk_1.default.yellow(`\n⚠ Warning: Plan ${planId} has ${incompleteTasks.length} incomplete task(s).\n`));
|
|
194
|
+
const confirmed = await promptConfirmation('Archive anyway? (y/n): ');
|
|
195
|
+
if (!confirmed) {
|
|
196
|
+
return { success: false, message: 'Archive cancelled by user.' };
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// 4. Update all task files to completed status
|
|
200
|
+
const tasksDir = path.join(location.directoryPath, 'tasks');
|
|
201
|
+
if (await fs.pathExists(tasksDir)) {
|
|
202
|
+
const taskFiles = await fs.readdir(tasksDir);
|
|
203
|
+
for (const file of taskFiles) {
|
|
204
|
+
if (!file.endsWith('.md'))
|
|
205
|
+
continue;
|
|
206
|
+
const taskPath = path.join(tasksDir, file);
|
|
207
|
+
const content = await fs.readFile(taskPath, 'utf-8');
|
|
208
|
+
const parsed = (0, gray_matter_1.default)(content);
|
|
209
|
+
// Update status to completed
|
|
210
|
+
parsed.data.status = 'completed';
|
|
211
|
+
// Write back with updated frontmatter
|
|
212
|
+
const updated = gray_matter_1.default.stringify(parsed.content, parsed.data);
|
|
213
|
+
await fs.writeFile(taskPath, updated, 'utf-8');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// 5. Append "Manually archived" note to plan document
|
|
217
|
+
const planContent = await fs.readFile(location.filePath, 'utf-8');
|
|
218
|
+
const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD format
|
|
219
|
+
const archiveNote = `\n---\n\n**Note**: Manually archived on ${today}\n`;
|
|
220
|
+
const updatedContent = planContent + archiveNote;
|
|
221
|
+
await fs.writeFile(location.filePath, updatedContent, 'utf-8');
|
|
222
|
+
// 6. Move plan directory to archive
|
|
223
|
+
const baseDir = process.cwd();
|
|
224
|
+
const archiveDir = path.join(baseDir, '.ai/task-manager/archive');
|
|
225
|
+
await fs.ensureDir(archiveDir);
|
|
226
|
+
const planDirName = path.basename(location.directoryPath);
|
|
227
|
+
const archivePath = path.join(archiveDir, planDirName);
|
|
228
|
+
await fs.move(location.directoryPath, archivePath);
|
|
229
|
+
// 7. Display success message
|
|
230
|
+
console.log(chalk_1.default.green(`\n✓ Plan ${planId} successfully archived to .ai/task-manager/archive/${planDirName}\n`));
|
|
231
|
+
return { success: true };
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
235
|
+
return {
|
|
236
|
+
success: false,
|
|
237
|
+
message: `Failed to archive plan: ${message}`,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=plan.js.map
|
package/dist/plan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/status.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Dashboard Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality to display a dashboard with plans and task statistics
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Metadata extracted from task files
|
|
8
|
+
*/
|
|
9
|
+
export interface TaskMetadata {
|
|
10
|
+
id: number;
|
|
11
|
+
status: 'pending' | 'in-progress' | 'completed' | 'needs-clarification';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Metadata extracted from plan files
|
|
15
|
+
*/
|
|
16
|
+
export interface PlanMetadata {
|
|
17
|
+
id: number;
|
|
18
|
+
summary: string;
|
|
19
|
+
created: string;
|
|
20
|
+
isArchived: boolean;
|
|
21
|
+
directoryPath: string;
|
|
22
|
+
tasks: TaskMetadata[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse task files in a plan directory
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseTaskFiles(planDir: string): Promise<TaskMetadata[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Collect all plan data from the filesystem
|
|
30
|
+
*/
|
|
31
|
+
export declare function collectPlanData(): Promise<PlanMetadata[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Plan status categorization
|
|
34
|
+
*/
|
|
35
|
+
export type PlanStatus = 'noTasks' | 'notStarted' | 'inProgress' | 'completed';
|
|
36
|
+
/**
|
|
37
|
+
* Dashboard statistics interface
|
|
38
|
+
*/
|
|
39
|
+
export interface DashboardStatistics {
|
|
40
|
+
totalPlans: number;
|
|
41
|
+
activePlans: number;
|
|
42
|
+
archivedPlans: number;
|
|
43
|
+
taskCompletionRate: number;
|
|
44
|
+
plansByStatus: {
|
|
45
|
+
noTasks: number;
|
|
46
|
+
notStarted: number;
|
|
47
|
+
inProgress: number;
|
|
48
|
+
completed: number;
|
|
49
|
+
};
|
|
50
|
+
mostRecentPlan?: PlanMetadata;
|
|
51
|
+
oldestPlan?: PlanMetadata;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Categorize a single plan's status
|
|
55
|
+
*/
|
|
56
|
+
export declare function categorizePlanStatus(plan: PlanMetadata): PlanStatus;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate all dashboard statistics
|
|
59
|
+
*/
|
|
60
|
+
export declare function calculateStatistics(plans: PlanMetadata[]): DashboardStatistics;
|
|
61
|
+
/**
|
|
62
|
+
* Format the complete dashboard
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatDashboard(stats: DashboardStatistics, plans: PlanMetadata[]): string;
|
|
65
|
+
/**
|
|
66
|
+
* Main status function that orchestrates all components
|
|
67
|
+
*/
|
|
68
|
+
export declare function status(): Promise<{
|
|
69
|
+
success: boolean;
|
|
70
|
+
message?: string;
|
|
71
|
+
}>;
|
|
72
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,qBAAqB,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAyDD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAsC7E;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAyB/D;AAMD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B;AAiCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CASnE;AAwCD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAa9E;AA2HD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAmBzF;AAMD;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB9E"}
|