@e0ipso/ai-task-manager 1.8.1 → 1.8.3
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/ai-task-manager/config/scripts/get-next-plan-id.js +124 -0
- package/templates/ai-task-manager/config/scripts/get-next-task-id.js +160 -0
- package/templates/assistant/commands/tasks/create-plan.md +16 -2
- package/templates/assistant/commands/tasks/generate-tasks.md +14 -12
package/dist/index.js
CHANGED
|
@@ -253,7 +253,7 @@ async function displayWorkflowHelp() {
|
|
|
253
253
|
console.log(`│ 2) Provide additional context if the assistant needs it${' '.repeat(3)}│`);
|
|
254
254
|
console.log(`│${' '.repeat(width)}│`);
|
|
255
255
|
console.log(`│ 3) MANUALLY REVIEW THE PLAN (don't skip this!)${' '.repeat(12)}│`);
|
|
256
|
-
console.log(`│ Find it in: .ai/task-manager/plans/01--*/plan
|
|
256
|
+
console.log(`│ Find it in: .ai/task-manager/plans/01--*/plan-[0-9]*--*.md${' '.repeat(4)}│`);
|
|
257
257
|
console.log(`│${' '.repeat(width)}│`);
|
|
258
258
|
console.log(`│ 4) Create the tasks for the plan:${' '.repeat(25)}│`);
|
|
259
259
|
console.log(`│ /tasks:generate-tasks 1${' '.repeat(31)}│`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Find the task manager root directory by traversing up from CWD
|
|
8
|
+
* @returns {string|null} Path to task manager root or null if not found
|
|
9
|
+
*/
|
|
10
|
+
function findTaskManagerRoot() {
|
|
11
|
+
let currentPath = process.cwd();
|
|
12
|
+
const root = path.parse(currentPath).root;
|
|
13
|
+
|
|
14
|
+
while (currentPath !== root) {
|
|
15
|
+
const taskManagerPath = path.join(currentPath, '.ai', 'task-manager', 'plans');
|
|
16
|
+
if (fs.existsSync(taskManagerPath)) {
|
|
17
|
+
return path.join(currentPath, '.ai', 'task-manager');
|
|
18
|
+
}
|
|
19
|
+
currentPath = path.dirname(currentPath);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Check root directory as well
|
|
23
|
+
const rootTaskManager = path.join(root, '.ai', 'task-manager', 'plans');
|
|
24
|
+
if (fs.existsSync(rootTaskManager)) {
|
|
25
|
+
return path.join(root, '.ai', 'task-manager');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Parse YAML frontmatter for ID with resilience to different formats
|
|
33
|
+
* @param {string} content - File content
|
|
34
|
+
* @returns {number|null} Extracted ID or null
|
|
35
|
+
*/
|
|
36
|
+
function extractIdFromFrontmatter(content) {
|
|
37
|
+
const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
38
|
+
if (!frontmatterMatch) return null;
|
|
39
|
+
|
|
40
|
+
const frontmatterText = frontmatterMatch[1];
|
|
41
|
+
|
|
42
|
+
// Handle various YAML formats for id field using regex:
|
|
43
|
+
// id: 5
|
|
44
|
+
// id: "5"
|
|
45
|
+
// id: '5'
|
|
46
|
+
// "id": 5
|
|
47
|
+
// 'id': 5
|
|
48
|
+
// id : 5 (with spaces)
|
|
49
|
+
const patterns = [
|
|
50
|
+
/^\s*["']?id["']?\s*:\s*["']?(\d+)["']?\s*$/m, // Most flexible pattern
|
|
51
|
+
/^\s*id\s*:\s*(\d+)\s*$/m, // Simple numeric
|
|
52
|
+
/^\s*id\s*:\s*"(\d+)"\s*$/m, // Double quoted
|
|
53
|
+
/^\s*id\s*:\s*'(\d+)'\s*$/m, // Single quoted
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
for (const pattern of patterns) {
|
|
57
|
+
const match = frontmatterText.match(pattern);
|
|
58
|
+
if (match) {
|
|
59
|
+
const id = parseInt(match[1], 10);
|
|
60
|
+
if (!isNaN(id)) return id;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get the next available plan ID by scanning existing plan files
|
|
69
|
+
* @returns {number} Next available plan ID
|
|
70
|
+
*/
|
|
71
|
+
function getNextPlanId() {
|
|
72
|
+
const taskManagerRoot = findTaskManagerRoot();
|
|
73
|
+
|
|
74
|
+
if (!taskManagerRoot) {
|
|
75
|
+
console.error('Error: No .ai/task-manager/plans directory found in current directory or any parent directory.');
|
|
76
|
+
console.error('Please ensure you are in a project with task manager initialized.');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const plansDir = path.join(taskManagerRoot, 'plans');
|
|
81
|
+
const archiveDir = path.join(taskManagerRoot, 'archive');
|
|
82
|
+
|
|
83
|
+
let maxId = 0;
|
|
84
|
+
|
|
85
|
+
// Scan both plans and archive directories
|
|
86
|
+
[plansDir, archiveDir].forEach(dir => {
|
|
87
|
+
if (!fs.existsSync(dir)) return;
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
91
|
+
|
|
92
|
+
entries.forEach(entry => {
|
|
93
|
+
if (entry.isFile() && entry.name.match(/^plan-\d+--.*\.md$/)) {
|
|
94
|
+
// Extract ID from filename as fallback
|
|
95
|
+
const filenameMatch = entry.name.match(/^plan-(\d+)--/);
|
|
96
|
+
if (filenameMatch) {
|
|
97
|
+
const id = parseInt(filenameMatch[1], 10);
|
|
98
|
+
if (!isNaN(id) && id > maxId) maxId = id;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Also check frontmatter for more reliable ID
|
|
102
|
+
try {
|
|
103
|
+
const filePath = path.join(dir, entry.name);
|
|
104
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
105
|
+
const id = extractIdFromFrontmatter(content);
|
|
106
|
+
|
|
107
|
+
if (id !== null && id > maxId) {
|
|
108
|
+
maxId = id;
|
|
109
|
+
}
|
|
110
|
+
} catch (err) {
|
|
111
|
+
// Skip corrupted files
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
} catch (err) {
|
|
116
|
+
// Skip directories that can't be read
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
return maxId + 1;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Output the next plan ID
|
|
124
|
+
console.log(getNextPlanId());
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Find the task manager root directory by traversing up from CWD
|
|
8
|
+
* @returns {string|null} Path to task manager root or null if not found
|
|
9
|
+
*/
|
|
10
|
+
function findTaskManagerRoot() {
|
|
11
|
+
let currentPath = process.cwd();
|
|
12
|
+
const root = path.parse(currentPath).root;
|
|
13
|
+
|
|
14
|
+
while (currentPath !== root) {
|
|
15
|
+
const taskManagerPath = path.join(currentPath, '.ai', 'task-manager', 'plans');
|
|
16
|
+
if (fs.existsSync(taskManagerPath)) {
|
|
17
|
+
return path.join(currentPath, '.ai', 'task-manager');
|
|
18
|
+
}
|
|
19
|
+
currentPath = path.dirname(currentPath);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Check root directory as well
|
|
23
|
+
const rootTaskManager = path.join(root, '.ai', 'task-manager', 'plans');
|
|
24
|
+
if (fs.existsSync(rootTaskManager)) {
|
|
25
|
+
return path.join(root, '.ai', 'task-manager');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Parse YAML frontmatter for ID with resilience to different formats
|
|
33
|
+
* @param {string} content - File content
|
|
34
|
+
* @returns {number|null} Extracted ID or null
|
|
35
|
+
*/
|
|
36
|
+
function extractIdFromFrontmatter(content) {
|
|
37
|
+
const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
38
|
+
if (!frontmatterMatch) return null;
|
|
39
|
+
|
|
40
|
+
const frontmatterText = frontmatterMatch[1];
|
|
41
|
+
|
|
42
|
+
// Handle various YAML formats for id field using regex:
|
|
43
|
+
// id: 5
|
|
44
|
+
// id: "5"
|
|
45
|
+
// id: '5'
|
|
46
|
+
// "id": 5
|
|
47
|
+
// 'id': 5
|
|
48
|
+
// id : 5 (with spaces)
|
|
49
|
+
const patterns = [
|
|
50
|
+
/^\s*["']?id["']?\s*:\s*["']?(\d+)["']?\s*$/m, // Most flexible pattern
|
|
51
|
+
/^\s*id\s*:\s*(\d+)\s*$/m, // Simple numeric
|
|
52
|
+
/^\s*id\s*:\s*"(\d+)"\s*$/m, // Double quoted
|
|
53
|
+
/^\s*id\s*:\s*'(\d+)'\s*$/m, // Single quoted
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
for (const pattern of patterns) {
|
|
57
|
+
const match = frontmatterText.match(pattern);
|
|
58
|
+
if (match) {
|
|
59
|
+
const id = parseInt(match[1], 10);
|
|
60
|
+
if (!isNaN(id)) return id;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get the next available task ID for a specific plan
|
|
69
|
+
* @param {number|string} planId - The plan ID to get next task ID for
|
|
70
|
+
* @returns {number} Next available task ID
|
|
71
|
+
*/
|
|
72
|
+
function getNextTaskId(planId) {
|
|
73
|
+
if (!planId) {
|
|
74
|
+
console.error('Error: Plan ID is required');
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const taskManagerRoot = findTaskManagerRoot();
|
|
79
|
+
|
|
80
|
+
if (!taskManagerRoot) {
|
|
81
|
+
console.error('Error: No .ai/task-manager/plans directory found in current directory or any parent directory.');
|
|
82
|
+
console.error('Please ensure you are in a project with task manager initialized.');
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const plansDir = path.join(taskManagerRoot, 'plans');
|
|
87
|
+
|
|
88
|
+
// Find the plan directory (supports both padded and unpadded formats)
|
|
89
|
+
const paddedPlanId = String(planId).padStart(2, '0');
|
|
90
|
+
|
|
91
|
+
let planDir = null;
|
|
92
|
+
|
|
93
|
+
// Optimization: 90% of the time there are no tasks, so check if plans directory exists first
|
|
94
|
+
if (!fs.existsSync(plansDir)) {
|
|
95
|
+
return 1; // No plans directory = no tasks = start with ID 1
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
try {
|
|
99
|
+
const entries = fs.readdirSync(plansDir, { withFileTypes: true });
|
|
100
|
+
|
|
101
|
+
// Look for directory matching the plan ID pattern
|
|
102
|
+
for (const entry of entries) {
|
|
103
|
+
if (entry.isDirectory()) {
|
|
104
|
+
const match = entry.name.match(/^(\d+)--/);
|
|
105
|
+
if (match) {
|
|
106
|
+
const dirPlanId = match[1].padStart(2, '0');
|
|
107
|
+
if (dirPlanId === paddedPlanId) {
|
|
108
|
+
const tasksPath = path.join(plansDir, entry.name, 'tasks');
|
|
109
|
+
if (fs.existsSync(tasksPath)) {
|
|
110
|
+
planDir = tasksPath;
|
|
111
|
+
}
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} catch (err) {
|
|
118
|
+
// Directory doesn't exist or can't be read
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Optimization: If no tasks directory exists, return 1 immediately (90% case)
|
|
122
|
+
if (!planDir) {
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
let maxId = 0;
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
const entries = fs.readdirSync(planDir, { withFileTypes: true });
|
|
130
|
+
|
|
131
|
+
// Another optimization: If directory is empty, return 1 immediately
|
|
132
|
+
if (entries.length === 0) {
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
entries.forEach(entry => {
|
|
137
|
+
if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
138
|
+
try {
|
|
139
|
+
const filePath = path.join(planDir, entry.name);
|
|
140
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
141
|
+
const id = extractIdFromFrontmatter(content);
|
|
142
|
+
|
|
143
|
+
if (id !== null && id > maxId) {
|
|
144
|
+
maxId = id;
|
|
145
|
+
}
|
|
146
|
+
} catch (err) {
|
|
147
|
+
// Skip corrupted files
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
} catch (err) {
|
|
152
|
+
// Skip directories that can't be read
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return maxId + 1;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Get plan ID from command line argument
|
|
159
|
+
const planId = process.argv[2];
|
|
160
|
+
console.log(getNextTaskId(planId));
|
|
@@ -132,11 +132,25 @@ The schema for this frontmatter is:
|
|
|
132
132
|
|
|
133
133
|
**Auto-generate the next plan ID:**
|
|
134
134
|
```bash
|
|
135
|
-
|
|
135
|
+
node .ai/task-manager/config/scripts/get-next-plan-id.js
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
**Key formatting:**
|
|
139
139
|
- **Front-matter**: Use numeric values (`id: 7`)
|
|
140
140
|
- **Directory names**: Use zero-padded strings (`07--plan-name`)
|
|
141
141
|
|
|
142
|
-
This
|
|
142
|
+
This Node.js script provides robust plan ID generation with comprehensive error handling:
|
|
143
|
+
|
|
144
|
+
**Features:**
|
|
145
|
+
- **Flexible Whitespace Handling**: Supports various frontmatter patterns
|
|
146
|
+
- **Validation Layer**: Only processes files with valid numeric ID fields in YAML frontmatter
|
|
147
|
+
- **Error Resilience**: Gracefully handles empty directories, corrupted files, and parsing failures
|
|
148
|
+
- **Fallback Logic**: Returns ID 1 when no valid plans found, ensuring script never fails
|
|
149
|
+
- **Dual ID Detection**: Checks both filename patterns and frontmatter for maximum reliability
|
|
150
|
+
|
|
151
|
+
**Handles Edge Cases:**
|
|
152
|
+
- Empty plans/archive directories → Returns 1
|
|
153
|
+
- Corrupted or malformed YAML frontmatter → Skips invalid files
|
|
154
|
+
- Non-numeric ID values → Filters out automatically
|
|
155
|
+
- Missing frontmatter → Uses filename fallback
|
|
156
|
+
- File system errors → Gracefully handled
|
|
@@ -220,18 +220,18 @@ When creating tasks, you need to determine the next available task ID for the sp
|
|
|
220
220
|
|
|
221
221
|
#### Command
|
|
222
222
|
```bash
|
|
223
|
-
|
|
223
|
+
node .ai/task-manager/config/scripts/get-next-task-id.js $1
|
|
224
224
|
```
|
|
225
225
|
|
|
226
226
|
#### How It Works
|
|
227
|
-
1. **Finds
|
|
228
|
-
2. **
|
|
229
|
-
3. **
|
|
230
|
-
4. **
|
|
231
|
-
5. **Handles
|
|
232
|
-
6. **
|
|
227
|
+
1. **Finds the plan directory** using pattern matching for plan ID directories
|
|
228
|
+
2. **Scans task files** in the plan's tasks directory for `.md` files
|
|
229
|
+
3. **Validates frontmatter IDs** by parsing YAML frontmatter and extracting numeric ID values
|
|
230
|
+
4. **Finds maximum ID** by comparing all valid task IDs numerically
|
|
231
|
+
5. **Handles edge cases** by gracefully handling missing directories, corrupted files, and parsing errors
|
|
232
|
+
6. **Returns next ID** by incrementing the maximum found ID by 1
|
|
233
233
|
|
|
234
|
-
This
|
|
234
|
+
This Node.js script provides robust error handling and reliable ID generation.
|
|
235
235
|
|
|
236
236
|
#### Parameter Usage
|
|
237
237
|
- `$1` is the plan ID parameter passed to this template
|
|
@@ -249,8 +249,8 @@ This command reads the actual `id:` values from task front-matter, making it the
|
|
|
249
249
|
**Example 1: Plan 6 with existing tasks**
|
|
250
250
|
```bash
|
|
251
251
|
# Command execution (plan ID = 6)
|
|
252
|
-
|
|
253
|
-
# Output: 5 (if highest task front-matter has id: 4)
|
|
252
|
+
node .ai/task-manager/config/scripts/get-next-task-id.js 6
|
|
253
|
+
# Output: 5 (if highest valid numeric task front-matter has id: 4)
|
|
254
254
|
|
|
255
255
|
# Front-matter usage:
|
|
256
256
|
---
|
|
@@ -266,8 +266,8 @@ skills: ["api-endpoints", "database"]
|
|
|
266
266
|
**Example 2: Plan 1 with no existing tasks**
|
|
267
267
|
```bash
|
|
268
268
|
# Command execution (plan ID = 1)
|
|
269
|
-
|
|
270
|
-
# Output: 1 (empty tasks directory, no front-matter to read)
|
|
269
|
+
node .ai/task-manager/config/scripts/get-next-task-id.js 1
|
|
270
|
+
# Output: 1 (empty tasks directory, no valid front-matter to read)
|
|
271
271
|
|
|
272
272
|
# Front-matter usage:
|
|
273
273
|
---
|
|
@@ -286,6 +286,8 @@ The command handles several edge cases automatically:
|
|
|
286
286
|
- **Non-sequential task IDs**: Returns the maximum existing ID + 1
|
|
287
287
|
- **Missing plan directory**: Returns `1` (graceful fallback)
|
|
288
288
|
- **Mixed numbering**: Correctly finds the highest numeric ID regardless of gaps
|
|
289
|
+
- **Malformed frontmatter**: Skips files with non-numeric, string, or missing ID fields
|
|
290
|
+
- **Whitespace variations**: Handles extra spaces around ID values (e.g., `id: 5 `)
|
|
289
291
|
|
|
290
292
|
#### Command Execution Context
|
|
291
293
|
- Run this command from the repository root directory
|