@bicorne/task-flow 0.1.0 → 0.2.1
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 +337 -145
- package/SKILL.md +9 -5
- package/assets/.harnessrc +0 -1
- package/dist/commands/analyze.js +160 -318
- package/dist/commands/archive.js +44 -48
- package/dist/commands/design.js +225 -400
- package/dist/commands/extract.js +174 -303
- package/dist/commands/init.js +103 -148
- package/dist/commands/merge/index.js +184 -295
- package/dist/commands/merge/merger.js +112 -134
- package/dist/commands/merge/types.js +3 -5
- package/dist/commands/merge/validators.js +115 -132
- package/dist/commands/merge.js +46 -13
- package/dist/commands/start.js +155 -248
- package/dist/commands/status.js +68 -129
- package/dist/commands/sync.js +37 -53
- package/dist/commands/tasks-gen/doc-parser.js +148 -228
- package/dist/commands/tasks-gen/generators.js +104 -116
- package/dist/commands/tasks-gen/index.js +206 -314
- package/dist/commands/tasks-gen/parsers.js +131 -232
- package/dist/commands/tasks-gen/templates.js +9 -10
- package/dist/commands/tasks-gen/types.js +36 -14
- package/dist/commands/tasks-gen/validators.js +33 -49
- package/dist/commands/tasks.js +58 -20
- package/dist/commands/worktree.js +167 -249
- package/dist/hooks/check-prd-exists.js +45 -55
- package/dist/hooks/check-worktree-conflict.js +68 -101
- package/dist/hooks/hook-runner/executor.js +134 -126
- package/dist/hooks/hook-runner/index.js +181 -196
- package/dist/hooks/hook-runner/loader.js +74 -113
- package/dist/hooks/hook-runner/types.js +3 -5
- package/dist/hooks/hook-runner.js +94 -28
- package/dist/hooks/phase-complete-detector.js +125 -191
- package/dist/hooks/phase-gate-validator.js +315 -376
- package/dist/hooks/save-checkpoint.js +87 -130
- package/dist/hooks/start-mcp-servers.js +50 -65
- package/dist/hooks/stop-mcp-servers.js +40 -49
- package/dist/index.js +84 -153
- package/dist/lib/archive.js +126 -209
- package/dist/lib/config.d.ts +0 -2
- package/dist/lib/config.js +141 -230
- package/dist/lib/constants.js +155 -145
- package/dist/lib/interactive.js +98 -148
- package/dist/lib/mcp-client.js +197 -320
- package/dist/lib/state.js +142 -253
- package/dist/slash/executor.js +309 -233
- package/dist/slash/index.js +69 -43
- package/dist/slash/parser.js +84 -97
- package/dist/slash/registry.js +100 -88
- package/dist/spec/openspec-to-task/builders.js +96 -109
- package/dist/spec/openspec-to-task/index.js +112 -173
- package/dist/spec/openspec-to-task/parsers.js +148 -219
- package/dist/spec/openspec-to-task/types.js +3 -5
- package/dist/spec/sync-openspec-to-task.js +47 -19
- package/dist/spec/sync-task-to-openspec.js +241 -272
- package/dist/types/ai-context.js +3 -8
- package/package.json +9 -7
- package/references/CLI-TUTORIAL.md +4 -10
|
@@ -1,272 +1,171 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
-
var ownKeys = function(o) {
|
|
24
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
-
var ar = [];
|
|
26
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
return ownKeys(o);
|
|
30
|
-
};
|
|
31
|
-
return function (mod) {
|
|
32
|
-
if (mod && mod.__esModule) return mod;
|
|
33
|
-
var result = {};
|
|
34
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
-
__setModuleDefault(result, mod);
|
|
36
|
-
return result;
|
|
37
|
-
};
|
|
38
|
-
})();
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.parseArgs = parseArgs;
|
|
41
|
-
exports.toChangeName = toChangeName;
|
|
42
|
-
exports.parseTasksMd = parseTasksMd;
|
|
43
|
-
exports.parseAiInput = parseAiInput;
|
|
44
|
-
exports.readStdin = readStdin;
|
|
45
|
-
exports.promptConfirmation = promptConfirmation;
|
|
46
|
-
const readline = __importStar(require("readline"));
|
|
47
|
-
const types_1 = require("./types");
|
|
48
|
-
/**
|
|
49
|
-
* Parse CLI arguments
|
|
50
|
-
*/
|
|
51
|
-
function parseArgs(argv) {
|
|
52
|
-
const args = {};
|
|
53
|
-
for (let i = 2; i < argv.length; i += 1) {
|
|
54
|
-
const token = argv[i] || '';
|
|
55
|
-
if (!token.startsWith('--')) {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
const key = token.slice(2);
|
|
59
|
-
const next = argv[i + 1] || '';
|
|
60
|
-
if (!next || next.startsWith('--')) {
|
|
61
|
-
args[key] = true;
|
|
1
|
+
function e(t) {
|
|
2
|
+
return "function" != typeof WeakMap ? null : (e = function(e) {
|
|
3
|
+
return new WeakMap();
|
|
4
|
+
})(t);
|
|
5
|
+
}
|
|
6
|
+
function t(e) {
|
|
7
|
+
let t = {};
|
|
8
|
+
for(let r = 2; r < e.length; r += 1){
|
|
9
|
+
let n = e[r] || '';
|
|
10
|
+
if (!n.startsWith('--')) continue;
|
|
11
|
+
let s = n.slice(2), i = e[r + 1] || '';
|
|
12
|
+
if (!i || i.startsWith('--')) {
|
|
13
|
+
t[s] = !0;
|
|
62
14
|
continue;
|
|
63
15
|
}
|
|
64
|
-
|
|
65
|
-
i += 1;
|
|
16
|
+
t[s] = i, r += 1;
|
|
66
17
|
}
|
|
67
|
-
return
|
|
18
|
+
return t;
|
|
68
19
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
*/
|
|
72
|
-
function toChangeName(input) {
|
|
73
|
-
return String(input || '')
|
|
74
|
-
.trim()
|
|
75
|
-
.replace(/[^a-zA-Z0-9-_]/g, '-')
|
|
76
|
-
.replace(/-+/g, '-')
|
|
77
|
-
.replace(/^-|-$/g, '');
|
|
20
|
+
function r(e) {
|
|
21
|
+
return String(e || '').trim().replace(/[^a-zA-Z0-9-_]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
|
|
78
22
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (currentTask && currentTask.id) {
|
|
95
|
-
tasks.push(currentTask);
|
|
96
|
-
}
|
|
97
|
-
const phase = parseInt(taskMatch[2] || '0', 10);
|
|
98
|
-
const sequence = parseInt(taskMatch[3] || '0', 10);
|
|
99
|
-
currentTask = {
|
|
100
|
-
id: `PHASE-${phase}-${phase}-${sequence}`,
|
|
101
|
-
phase,
|
|
102
|
-
subphase: phase,
|
|
103
|
-
sequence,
|
|
104
|
-
title: taskMatch[4]?.trim() || '',
|
|
105
|
-
status: taskMatch[1]?.toLowerCase() === 'x' ? 'completed' : 'pending',
|
|
23
|
+
function n(e) {
|
|
24
|
+
let t = [], r = e.split(/\r?\n/), n = null, s = !1;
|
|
25
|
+
for (let e of r){
|
|
26
|
+
if (e.match(/^###\s+Phase\s+(\d+)/i)) continue;
|
|
27
|
+
let r = e.match(/^-\s+\[([ xX])\]\s+Task\s+(\d+)\.(\d+):\s+(.+)$/);
|
|
28
|
+
if (r) {
|
|
29
|
+
n && n.id && t.push(n);
|
|
30
|
+
let e = parseInt(r[2] || '0', 10), i = parseInt(r[3] || '0', 10);
|
|
31
|
+
n = {
|
|
32
|
+
id: `PHASE-${e}-${e}-${i}`,
|
|
33
|
+
phase: e,
|
|
34
|
+
subphase: e,
|
|
35
|
+
sequence: i,
|
|
36
|
+
title: r[4]?.trim() || '',
|
|
37
|
+
status: r[1]?.toLowerCase() === 'x' ? 'completed' : 'pending',
|
|
106
38
|
type: 'feat',
|
|
107
39
|
priority: 'medium',
|
|
108
40
|
dependencies: [],
|
|
109
41
|
spec: {
|
|
110
42
|
description: '',
|
|
111
43
|
files: [],
|
|
112
|
-
context: []
|
|
44
|
+
context: []
|
|
113
45
|
},
|
|
114
|
-
acceptance_criteria: []
|
|
115
|
-
};
|
|
116
|
-
inDependencySection = false;
|
|
46
|
+
acceptance_criteria: []
|
|
47
|
+
}, s = !1;
|
|
117
48
|
continue;
|
|
118
49
|
}
|
|
119
|
-
if (
|
|
120
|
-
|
|
50
|
+
if (e.includes('## 任务依赖关系') || e.includes('Dependencies')) {
|
|
51
|
+
s = !0;
|
|
121
52
|
continue;
|
|
122
53
|
}
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
|
|
54
|
+
if (n && !s) {
|
|
55
|
+
let t = e.match(/^\s+描述:\s*(.+)$/);
|
|
56
|
+
if (t) {
|
|
57
|
+
n.spec.description = t?.[1]?.trim() || '';
|
|
127
58
|
continue;
|
|
128
59
|
}
|
|
129
|
-
|
|
130
|
-
if (
|
|
131
|
-
|
|
60
|
+
let r = e.match(/^\s+文件:\s*(.+)$/);
|
|
61
|
+
if (r) {
|
|
62
|
+
n.spec.files = r?.[1]?.split(',').map((e)=>e.trim()).filter(Boolean) || [];
|
|
132
63
|
continue;
|
|
133
64
|
}
|
|
134
|
-
|
|
135
|
-
if (
|
|
136
|
-
|
|
65
|
+
let s = e.match(/^\s+验收:\s*(.+)$/);
|
|
66
|
+
if (s) {
|
|
67
|
+
n.acceptance_criteria = [
|
|
68
|
+
s?.[1]?.trim() || ''
|
|
69
|
+
];
|
|
137
70
|
continue;
|
|
138
71
|
}
|
|
139
72
|
}
|
|
140
|
-
if (
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (depPhase <= currentTask.phase) {
|
|
146
|
-
currentTask.dependencies.push(`PHASE-${depPhase}-${depPhase}-${depSeq}`);
|
|
147
|
-
}
|
|
73
|
+
if (s && n) {
|
|
74
|
+
let t = e.match(/Task\s+(\d+)\.(\d+)\s+(?:依赖|depends? on)\s+Task\s+(\d+)\.(\d+)/i);
|
|
75
|
+
if (t) {
|
|
76
|
+
let e = parseInt(t[3] || '0', 10), r = parseInt(t[4] || '0', 10);
|
|
77
|
+
e <= n.phase && n.dependencies.push(`PHASE-${e}-${e}-${r}`);
|
|
148
78
|
}
|
|
149
79
|
}
|
|
150
80
|
}
|
|
151
|
-
|
|
152
|
-
tasks.push(currentTask);
|
|
153
|
-
}
|
|
154
|
-
return tasks;
|
|
81
|
+
return n && n.id && t.push(n), t;
|
|
155
82
|
}
|
|
156
|
-
|
|
157
|
-
* Parse AI input from JSON
|
|
158
|
-
*/
|
|
159
|
-
function parseAiInput(input) {
|
|
83
|
+
function s(e) {
|
|
160
84
|
try {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (Array.isArray(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (validateTask(tasks[i])) {
|
|
176
|
-
validTasks.push(tasks[i]);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
errors.push(`Task ${i}: validation failed`);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
if (errors.length > 0) {
|
|
183
|
-
console.warn('[TASKS] Validation warnings:');
|
|
184
|
-
errors.forEach((err) => console.warn(` - ${err}`));
|
|
185
|
-
}
|
|
186
|
-
return validTasks;
|
|
187
|
-
}
|
|
188
|
-
catch (error) {
|
|
189
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
190
|
-
throw new Error(`Failed to parse AI input: ${errorMessage}`);
|
|
85
|
+
let t, r = JSON.parse(e);
|
|
86
|
+
if (Array.isArray(r)) t = r;
|
|
87
|
+
else if (r && 'object' == typeof r && Array.isArray(r.tasks)) t = r.tasks;
|
|
88
|
+
else throw Error('Invalid input format: expected array or { tasks: [] }');
|
|
89
|
+
let n = [], s = [];
|
|
90
|
+
for(let e = 0; e < t.length; e += 1)!function(e) {
|
|
91
|
+
if ('object' != typeof e || null === e || 'string' != typeof e.id || !l.TASK_SCHEMA.idPattern.test(e.id) || !l.TASK_SCHEMA.types.includes(e.type) || 'string' != typeof e.title || 0 === e.title.length || !l.TASK_SCHEMA.priorities.includes(e.priority) || 'number' != typeof e.phase || e.phase < 1 || !l.TASK_SCHEMA.statuses.includes(e.status) || 'object' != typeof e.spec || null === e.spec) return !1;
|
|
92
|
+
let t = e.spec;
|
|
93
|
+
return 'string' == typeof t.description && !!Array.isArray(t.files);
|
|
94
|
+
}(t[e]) ? s.push(`Task ${e}: validation failed`) : n.push(t[e]);
|
|
95
|
+
return s.length > 0 && (console.warn('[TASKS] Validation warnings:'), s.forEach((e)=>console.warn(` - ${e}`))), n;
|
|
96
|
+
} catch (t) {
|
|
97
|
+
let e = t instanceof Error ? t.message : 'Unknown error';
|
|
98
|
+
throw Error(`Failed to parse AI input: ${e}`);
|
|
191
99
|
}
|
|
192
100
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
process.stdin.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
});
|
|
206
|
-
process.stdin.on('end', () => {
|
|
207
|
-
resolve(chunks.join(''));
|
|
208
|
-
});
|
|
209
|
-
process.stdin.on('error', (error) => {
|
|
210
|
-
reject(error);
|
|
211
|
-
});
|
|
212
|
-
setTimeout(() => {
|
|
213
|
-
if (chunks.length === 0) {
|
|
214
|
-
reject(new Error('Stdin timeout: no data received'));
|
|
215
|
-
}
|
|
101
|
+
async function i() {
|
|
102
|
+
return new Promise((e, t)=>{
|
|
103
|
+
let r = [];
|
|
104
|
+
process.stdin.setEncoding('utf8'), process.stdin.on('readable', ()=>{
|
|
105
|
+
let e;
|
|
106
|
+
for(; null !== (e = process.stdin.read());)r.push(e);
|
|
107
|
+
}), process.stdin.on('end', ()=>{
|
|
108
|
+
e(r.join(''));
|
|
109
|
+
}), process.stdin.on('error', (e)=>{
|
|
110
|
+
t(e);
|
|
111
|
+
}), setTimeout(()=>{
|
|
112
|
+
0 === r.length && t(Error('Stdin timeout: no data received'));
|
|
216
113
|
}, 5000);
|
|
217
114
|
});
|
|
218
115
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
*/
|
|
222
|
-
function promptConfirmation(message) {
|
|
223
|
-
const rl = readline.createInterface({
|
|
116
|
+
function o(e) {
|
|
117
|
+
let t = u.createInterface({
|
|
224
118
|
input: process.stdin,
|
|
225
|
-
output: process.stdout
|
|
119
|
+
output: process.stdout
|
|
226
120
|
});
|
|
227
|
-
return new Promise((
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
rl.on('error', () => {
|
|
233
|
-
rl.close();
|
|
234
|
-
resolve(false);
|
|
121
|
+
return new Promise((r)=>{
|
|
122
|
+
t.question(e, (e)=>{
|
|
123
|
+
t.close(), r('y' === e.toLowerCase() || 'yes' === e.toLowerCase() || '' === e);
|
|
124
|
+
}), t.on('error', ()=>{
|
|
125
|
+
t.close(), r(!1);
|
|
235
126
|
});
|
|
236
127
|
});
|
|
237
128
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
return
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
return
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
return
|
|
260
|
-
}
|
|
261
|
-
if (!types_1.TASK_SCHEMA.statuses.includes(t.status)) {
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
if (typeof t.spec !== 'object' || t.spec === null) {
|
|
265
|
-
return false;
|
|
129
|
+
"use strict";
|
|
130
|
+
Object.defineProperty(exports, "__esModule", {
|
|
131
|
+
value: !0
|
|
132
|
+
});
|
|
133
|
+
var a = exports, c = {
|
|
134
|
+
get parseAiInput () {
|
|
135
|
+
return s;
|
|
136
|
+
},
|
|
137
|
+
get parseArgs () {
|
|
138
|
+
return t;
|
|
139
|
+
},
|
|
140
|
+
get parseTasksMd () {
|
|
141
|
+
return n;
|
|
142
|
+
},
|
|
143
|
+
get promptConfirmation () {
|
|
144
|
+
return o;
|
|
145
|
+
},
|
|
146
|
+
get readStdin () {
|
|
147
|
+
return i;
|
|
148
|
+
},
|
|
149
|
+
get toChangeName () {
|
|
150
|
+
return r;
|
|
266
151
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
152
|
+
};
|
|
153
|
+
for(var p in c)Object.defineProperty(a, p, {
|
|
154
|
+
enumerable: !0,
|
|
155
|
+
get: Object.getOwnPropertyDescriptor(c, p).get
|
|
156
|
+
});
|
|
157
|
+
let u = /*#__PURE__*/ function(t) {
|
|
158
|
+
var r, n, s;
|
|
159
|
+
if (t && t.__esModule) return t;
|
|
160
|
+
if (null === t || "object" != typeof t && "function" != typeof t) return {
|
|
161
|
+
default: t
|
|
162
|
+
};
|
|
163
|
+
if ((r = e(void 0)) && r.has(t)) return r.get(t);
|
|
164
|
+
for(var i in n = {
|
|
165
|
+
__proto__: null
|
|
166
|
+
}, s = Object.defineProperty && Object.getOwnPropertyDescriptor, t)if ("default" !== i && Object.prototype.hasOwnProperty.call(t, i)) {
|
|
167
|
+
var o = s ? Object.getOwnPropertyDescriptor(t, i) : null;
|
|
168
|
+
o && (o.get || o.set) ? Object.defineProperty(n, i, o) : n[i] = t[i];
|
|
270
169
|
}
|
|
271
|
-
return
|
|
272
|
-
}
|
|
170
|
+
return n.default = t, r && r.set(t, n), n;
|
|
171
|
+
}(require("readline")), l = require("./types");
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
exports.TASKS_MD_TEMPLATE = `# 任务清单
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: !0
|
|
4
|
+
}), Object.defineProperty(exports, "TASKS_MD_TEMPLATE", {
|
|
5
|
+
enumerable: !0,
|
|
6
|
+
get: function() {
|
|
7
|
+
return e;
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
let e = `# 任务清单
|
|
12
11
|
|
|
13
12
|
## 概述
|
|
14
13
|
<!-- 任务概述 -->
|
|
@@ -1,17 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: !0
|
|
4
|
+
}), Object.defineProperty(exports, "TASK_SCHEMA", {
|
|
5
|
+
enumerable: !0,
|
|
6
|
+
get: function() {
|
|
7
|
+
return e;
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
let e = {
|
|
11
|
+
required: [
|
|
12
|
+
'id',
|
|
13
|
+
'type',
|
|
14
|
+
'title',
|
|
15
|
+
'priority',
|
|
16
|
+
'phase',
|
|
17
|
+
'status',
|
|
18
|
+
'spec'
|
|
19
|
+
],
|
|
13
20
|
idPattern: /^PHASE-[0-9]+-[0-9]+-[0-9]+$/,
|
|
14
|
-
types: [
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
types: [
|
|
22
|
+
'feat',
|
|
23
|
+
'fix',
|
|
24
|
+
'refactor',
|
|
25
|
+
'test',
|
|
26
|
+
'docs'
|
|
27
|
+
],
|
|
28
|
+
priorities: [
|
|
29
|
+
'high',
|
|
30
|
+
'medium',
|
|
31
|
+
'low'
|
|
32
|
+
],
|
|
33
|
+
statuses: [
|
|
34
|
+
'pending',
|
|
35
|
+
'in_progress',
|
|
36
|
+
'completed',
|
|
37
|
+
'blocked'
|
|
38
|
+
]
|
|
17
39
|
};
|
|
@@ -1,54 +1,38 @@
|
|
|
1
|
+
function e(t) {
|
|
2
|
+
return "function" != typeof WeakMap ? null : (e = function(e) {
|
|
3
|
+
return new WeakMap();
|
|
4
|
+
})(t);
|
|
5
|
+
}
|
|
6
|
+
function t(e) {
|
|
7
|
+
return r.existsSync(e.productRequirement) ? {
|
|
8
|
+
valid: !0
|
|
9
|
+
} : {
|
|
10
|
+
valid: !1,
|
|
11
|
+
reason: 'product-requirement-not-found',
|
|
12
|
+
message: `product-requirement.md not found: ${e.productRequirement}`
|
|
13
|
+
};
|
|
14
|
+
}
|
|
1
15
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
Object.defineProperty(exports, "__esModule", {
|
|
17
|
+
value: !0
|
|
18
|
+
}), Object.defineProperty(exports, "validateRequiredFiles", {
|
|
19
|
+
enumerable: !0,
|
|
20
|
+
get: function() {
|
|
21
|
+
return t;
|
|
11
22
|
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
23
|
});
|
|
22
|
-
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
return ownKeys(o);
|
|
24
|
+
let r = /*#__PURE__*/ function(t) {
|
|
25
|
+
var r, n, o;
|
|
26
|
+
if (t && t.__esModule) return t;
|
|
27
|
+
if (null === t || "object" != typeof t && "function" != typeof t) return {
|
|
28
|
+
default: t
|
|
30
29
|
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
})();
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.validateRequiredFiles = validateRequiredFiles;
|
|
41
|
-
const fs = __importStar(require("fs"));
|
|
42
|
-
/**
|
|
43
|
-
* Validate required files exist
|
|
44
|
-
*/
|
|
45
|
-
function validateRequiredFiles(paths) {
|
|
46
|
-
if (!fs.existsSync(paths.productRequirement)) {
|
|
47
|
-
return {
|
|
48
|
-
valid: false,
|
|
49
|
-
reason: 'product-requirement-not-found',
|
|
50
|
-
message: `product-requirement.md not found: ${paths.productRequirement}`,
|
|
51
|
-
};
|
|
30
|
+
if ((r = e(void 0)) && r.has(t)) return r.get(t);
|
|
31
|
+
for(var u in n = {
|
|
32
|
+
__proto__: null
|
|
33
|
+
}, o = Object.defineProperty && Object.getOwnPropertyDescriptor, t)if ("default" !== u && Object.prototype.hasOwnProperty.call(t, u)) {
|
|
34
|
+
var i = o ? Object.getOwnPropertyDescriptor(t, u) : null;
|
|
35
|
+
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = t[u];
|
|
52
36
|
}
|
|
53
|
-
return
|
|
54
|
-
}
|
|
37
|
+
return n.default = t, r && r.set(t, n), n;
|
|
38
|
+
}(require("fs"));
|
package/dist/commands/tasks.js
CHANGED
|
@@ -1,22 +1,60 @@
|
|
|
1
|
+
function e(t) {
|
|
2
|
+
return "function" != typeof WeakMap ? null : (e = function(e) {
|
|
3
|
+
return new WeakMap();
|
|
4
|
+
})(t);
|
|
5
|
+
}
|
|
1
6
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: !0
|
|
9
|
+
});
|
|
10
|
+
var t = exports, r = {
|
|
11
|
+
get TASK_SCHEMA () {
|
|
12
|
+
return a.TASK_SCHEMA;
|
|
13
|
+
},
|
|
14
|
+
get Task () {
|
|
15
|
+
return a.Task;
|
|
16
|
+
},
|
|
17
|
+
get TasksGenOptions () {
|
|
18
|
+
return a.TasksGenOptions;
|
|
19
|
+
},
|
|
20
|
+
get TasksGenResult () {
|
|
21
|
+
return a.TasksGenResult;
|
|
22
|
+
},
|
|
23
|
+
get default () {
|
|
24
|
+
return s.default;
|
|
25
|
+
},
|
|
26
|
+
get generateManifestJson () {
|
|
27
|
+
return o.generateManifestJson;
|
|
28
|
+
},
|
|
29
|
+
get generatePhaseJson () {
|
|
30
|
+
return o.generatePhaseJson;
|
|
31
|
+
},
|
|
32
|
+
get generateTasks () {
|
|
33
|
+
return s.generateTasks;
|
|
34
|
+
},
|
|
35
|
+
get main () {
|
|
36
|
+
return s.main;
|
|
37
|
+
},
|
|
38
|
+
get parseTasksMd () {
|
|
39
|
+
return u.parseTasksMd;
|
|
40
|
+
}
|
|
9
41
|
};
|
|
10
|
-
Object.defineProperty(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
42
|
+
for(var n in r)Object.defineProperty(t, n, {
|
|
43
|
+
enumerable: !0,
|
|
44
|
+
get: Object.getOwnPropertyDescriptor(r, n).get
|
|
45
|
+
});
|
|
46
|
+
let s = /*#__PURE__*/ function(t) {
|
|
47
|
+
var r, n, s;
|
|
48
|
+
if (t && t.__esModule) return t;
|
|
49
|
+
if (null === t || "object" != typeof t && "function" != typeof t) return {
|
|
50
|
+
default: t
|
|
51
|
+
};
|
|
52
|
+
if ((r = e(void 0)) && r.has(t)) return r.get(t);
|
|
53
|
+
for(var a in n = {
|
|
54
|
+
__proto__: null
|
|
55
|
+
}, s = Object.defineProperty && Object.getOwnPropertyDescriptor, t)if ("default" !== a && Object.prototype.hasOwnProperty.call(t, a)) {
|
|
56
|
+
var u = s ? Object.getOwnPropertyDescriptor(t, a) : null;
|
|
57
|
+
u && (u.get || u.set) ? Object.defineProperty(n, a, u) : n[a] = t[a];
|
|
58
|
+
}
|
|
59
|
+
return n.default = t, r && r.set(t, n), n;
|
|
60
|
+
}(require("./tasks-gen/index")), a = require("./tasks-gen/types"), u = require("./tasks-gen/parsers"), o = require("./tasks-gen/generators");
|