strikethroo 3.8.0 → 3.9.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/dist/serve/markdown.d.ts +0 -12
- package/dist/serve/markdown.d.ts.map +1 -1
- package/dist/serve/markdown.js +6 -8
- package/dist/serve/markdown.js.map +1 -1
- package/dist/skill-scripts/shared/complexity-score.d.ts +14 -0
- package/dist/skill-scripts/shared/complexity-score.d.ts.map +1 -0
- package/dist/skill-scripts/shared/complexity-score.js +21 -0
- package/dist/skill-scripts/shared/complexity-score.js.map +1 -0
- package/dist-web/assets/{arc-ClZ3judi.js → arc-U8dalZIB.js} +1 -1
- package/dist-web/assets/{architectureDiagram-3BPJPVTR-BRD031Y3.js → architectureDiagram-3BPJPVTR-BII4UusQ.js} +1 -1
- package/dist-web/assets/{blockDiagram-GPEHLZMM-CfaXqzcG.js → blockDiagram-GPEHLZMM-DY4WZYhw.js} +1 -1
- package/dist-web/assets/{c4Diagram-AAUBKEIU-D9Os_mjw.js → c4Diagram-AAUBKEIU-ByZWkPq5.js} +1 -1
- package/dist-web/assets/channel-hoQZJ4FP.js +1 -0
- package/dist-web/assets/{chunk-2J33WTMH-CScaCetR.js → chunk-2J33WTMH-BkTWBAb4.js} +1 -1
- package/dist-web/assets/{chunk-4BX2VUAB-C_0wTF2D.js → chunk-4BX2VUAB-CQkRWCB3.js} +1 -1
- package/dist-web/assets/{chunk-55IACEB6-BU0yxIXn.js → chunk-55IACEB6-C-6bW0I1.js} +1 -1
- package/dist-web/assets/{chunk-727SXJPM-CEYPnfpF.js → chunk-727SXJPM-C4TUUt4s.js} +1 -1
- package/dist-web/assets/{chunk-AQP2D5EJ-3Wp97XA5.js → chunk-AQP2D5EJ-Dtp8JWF7.js} +1 -1
- package/dist-web/assets/{chunk-FMBD7UC4-B_iff0-_.js → chunk-FMBD7UC4-BwHFSRRs.js} +1 -1
- package/dist-web/assets/{chunk-ND2GUHAM-C9bo0MIV.js → chunk-ND2GUHAM-Cig_3TB-.js} +1 -1
- package/dist-web/assets/{chunk-QZHKN3VN-DuWFBza0.js → chunk-QZHKN3VN-BGETuJY7.js} +1 -1
- package/dist-web/assets/classDiagram-4FO5ZUOK-B0lk8Y6z.js +1 -0
- package/dist-web/assets/classDiagram-v2-Q7XG4LA2-B0lk8Y6z.js +1 -0
- package/dist-web/assets/{cose-bilkent-S5V4N54A-BvbHJ-Zg.js → cose-bilkent-S5V4N54A-DuOybbaS.js} +1 -1
- package/dist-web/assets/{dagre-BM42HDAG-D6Et-JgF.js → dagre-BM42HDAG-VnC37qtr.js} +1 -1
- package/dist-web/assets/{diagram-2AECGRRQ-CNCYsbbA.js → diagram-2AECGRRQ-Ty7SQMgH.js} +1 -1
- package/dist-web/assets/{diagram-5GNKFQAL-CxRozyyO.js → diagram-5GNKFQAL-BlKDu0VW.js} +1 -1
- package/dist-web/assets/{diagram-KO2AKTUF-IZlLB90E.js → diagram-KO2AKTUF-Bbg0OCZg.js} +1 -1
- package/dist-web/assets/{diagram-LMA3HP47-CrSB8ihh.js → diagram-LMA3HP47-kkVpRIsu.js} +1 -1
- package/dist-web/assets/{diagram-OG6HWLK6-tCjUSZwa.js → diagram-OG6HWLK6-DOWYkZlS.js} +1 -1
- package/dist-web/assets/{erDiagram-TEJ5UH35-JLv81E72.js → erDiagram-TEJ5UH35-D8WlLdtK.js} +1 -1
- package/dist-web/assets/{flowDiagram-I6XJVG4X-Det1_WLC.js → flowDiagram-I6XJVG4X-U7NYonjl.js} +1 -1
- package/dist-web/assets/{ganttDiagram-6RSMTGT7-Mi2wMw1v.js → ganttDiagram-6RSMTGT7-vw1uFVh5.js} +1 -1
- package/dist-web/assets/{gitGraphDiagram-PVQCEYII-Ddy55D8B.js → gitGraphDiagram-PVQCEYII-Coc0d6Bs.js} +1 -1
- package/dist-web/assets/{index-BwABcoi9.js → index-4vwdK2qG.js} +4 -4
- package/dist-web/assets/{index-Dw0N6U6b.js → index-D53fh0zY.js} +1 -1
- package/dist-web/assets/{index-CEoxzYhV.js → index-TwwNd18Z.js} +1 -1
- package/dist-web/assets/{infoDiagram-5YYISTIA-vrktGk5U.js → infoDiagram-5YYISTIA-D1rd3cgn.js} +1 -1
- package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-CATnDGrp.js → ishikawaDiagram-YF4QCWOH-C6QHofgd.js} +1 -1
- package/dist-web/assets/{journeyDiagram-JHISSGLW-CEvYFLj2.js → journeyDiagram-JHISSGLW-CfCP3_lL.js} +1 -1
- package/dist-web/assets/{kanban-definition-UN3LZRKU-_6lp0n4D.js → kanban-definition-UN3LZRKU-eK9aAtUE.js} +1 -1
- package/dist-web/assets/{linear-C1oEZdKm.js → linear-Xl4NTVLR.js} +1 -1
- package/dist-web/assets/{mermaid.core-bqVxqCbb.js → mermaid.core-Bpv3Fy5r.js} +4 -4
- package/dist-web/assets/{mindmap-definition-RKZ34NQL-DxAus_u1.js → mindmap-definition-RKZ34NQL-C-UftEj-.js} +1 -1
- package/dist-web/assets/{pieDiagram-4H26LBE5-Bqjkt8dx.js → pieDiagram-4H26LBE5--B3LdTQd.js} +1 -1
- package/dist-web/assets/{quadrantDiagram-W4KKPZXB-BoZHhSII.js → quadrantDiagram-W4KKPZXB-DTr-7cow.js} +1 -1
- package/dist-web/assets/{requirementDiagram-4Y6WPE33-D0rcLxmM.js → requirementDiagram-4Y6WPE33-CMKPuFbL.js} +1 -1
- package/dist-web/assets/{sankeyDiagram-5OEKKPKP-CWShHxDe.js → sankeyDiagram-5OEKKPKP-DnThFDZc.js} +1 -1
- package/dist-web/assets/{sequenceDiagram-3UESZ5HK-T8LE2GTr.js → sequenceDiagram-3UESZ5HK-WqT16YFF.js} +1 -1
- package/dist-web/assets/{stateDiagram-AJRCARHV-a8e0ie70.js → stateDiagram-AJRCARHV-5nr9Um5q.js} +1 -1
- package/dist-web/assets/stateDiagram-v2-BHNVJYJU-Doh4LSg5.js +1 -0
- package/dist-web/assets/{timeline-definition-PNZ67QCA-Fn2xKeuG.js → timeline-definition-PNZ67QCA-CNOVn_B3.js} +1 -1
- package/dist-web/assets/{vennDiagram-CIIHVFJN-CdlvIB8X.js → vennDiagram-CIIHVFJN-D-h0Gph6.js} +1 -1
- package/dist-web/assets/{wardley-L42UT6IY-9pciD2XX.js → wardley-L42UT6IY-C1fuBpoj.js} +1 -1
- package/dist-web/assets/{wardleyDiagram-YWT4CUSO-BK6qNOxa.js → wardleyDiagram-YWT4CUSO-BauL5Z2B.js} +1 -1
- package/dist-web/assets/{xychartDiagram-2RQKCTM6-QjMTFvse.js → xychartDiagram-2RQKCTM6-Z9Z3wS3v.js} +1 -1
- package/dist-web/index.html +1 -1
- package/package.json +1 -1
- package/templates/harness/skills/st-execute-blueprint/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-execute-task/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-full-workflow/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-generate-tasks/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-refine-plan/scripts/validate-plan-blueprint.cjs +69 -46
- package/dist-web/assets/channel-CJXJUs_u.js +0 -1
- package/dist-web/assets/classDiagram-4FO5ZUOK-DSnAL-3H.js +0 -1
- package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DSnAL-3H.js +0 -1
- package/dist-web/assets/stateDiagram-v2-BHNVJYJU-BmYjmWHJ.js +0 -1
|
@@ -33,8 +33,6 @@ __export(validate_plan_blueprint_exports, {
|
|
|
33
33
|
main: () => main
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(validate_plan_blueprint_exports);
|
|
36
|
-
var fs4 = __toESM(require("fs"));
|
|
37
|
-
var path4 = __toESM(require("path"));
|
|
38
36
|
|
|
39
37
|
// src/skill-scripts/shared/root.ts
|
|
40
38
|
var fs = __toESM(require("fs"));
|
|
@@ -242,30 +240,63 @@ var resolvePlan = (input, startPath = process.cwd()) => {
|
|
|
242
240
|
return resolveByIdInAncestry(planId, startPath);
|
|
243
241
|
};
|
|
244
242
|
|
|
243
|
+
// src/skill-scripts/shared/blueprint-detection.ts
|
|
244
|
+
var fs4 = __toESM(require("fs"));
|
|
245
|
+
var hasExecutionBlueprint = (planFile) => {
|
|
246
|
+
try {
|
|
247
|
+
const content = fs4.readFileSync(planFile, "utf8");
|
|
248
|
+
return /^## Execution Blueprint/m.test(content);
|
|
249
|
+
} catch (_err) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
// src/skill-scripts/shared/task-count.ts
|
|
255
|
+
var fs5 = __toESM(require("fs"));
|
|
256
|
+
var path4 = __toESM(require("path"));
|
|
257
|
+
var countTaskFiles = (planDir) => {
|
|
258
|
+
const tasksDir = path4.join(planDir, "tasks");
|
|
259
|
+
if (!fs5.existsSync(tasksDir)) return 0;
|
|
260
|
+
try {
|
|
261
|
+
const stat = fs5.lstatSync(tasksDir);
|
|
262
|
+
if (!stat.isDirectory()) return 0;
|
|
263
|
+
return fs5.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).length;
|
|
264
|
+
} catch (_err) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
270
|
+
var fs6 = __toESM(require("fs"));
|
|
271
|
+
var path5 = __toESM(require("path"));
|
|
272
|
+
|
|
273
|
+
// src/skill-scripts/shared/complexity-score.ts
|
|
274
|
+
var validateComplexityScore = (value) => {
|
|
275
|
+
const trimmed = value.trim();
|
|
276
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
277
|
+
return { valid: false, reason: "non-integer" };
|
|
278
|
+
}
|
|
279
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
280
|
+
if (parsed < 1 || parsed > 10) {
|
|
281
|
+
return { valid: false, reason: "out-of-range", value: parsed };
|
|
282
|
+
}
|
|
283
|
+
return { valid: true, value: parsed };
|
|
284
|
+
};
|
|
285
|
+
|
|
245
286
|
// src/skill-scripts/shared/task-file.ts
|
|
246
287
|
var extractFrontmatter = (content) => {
|
|
247
288
|
const match = content.match(/^---\s*\r?\n([\s\S]*?)\r?\n---/);
|
|
248
289
|
return match && match[1] ? match[1] : null;
|
|
249
290
|
};
|
|
250
291
|
|
|
251
|
-
// src/skill-scripts/
|
|
252
|
-
var
|
|
253
|
-
"
|
|
254
|
-
|
|
255
|
-
"taskCount",
|
|
256
|
-
"blueprintExists",
|
|
257
|
-
"strikethrooRoot",
|
|
258
|
-
"planId",
|
|
259
|
-
"complexityScoresValid",
|
|
260
|
-
"invalidComplexityTasks"
|
|
261
|
-
];
|
|
262
|
-
var validateComplexityScores = (planDir) => {
|
|
263
|
-
const tasksDir = path4.join(planDir, "tasks");
|
|
264
|
-
if (!fs4.existsSync(tasksDir)) return [];
|
|
292
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
293
|
+
var validateTaskComplexityScores = (planDir) => {
|
|
294
|
+
const tasksDir = path5.join(planDir, "tasks");
|
|
295
|
+
if (!fs6.existsSync(tasksDir)) return [];
|
|
265
296
|
let files;
|
|
266
297
|
try {
|
|
267
|
-
if (!
|
|
268
|
-
files =
|
|
298
|
+
if (!fs6.lstatSync(tasksDir).isDirectory()) return [];
|
|
299
|
+
files = fs6.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).sort();
|
|
269
300
|
} catch (_err) {
|
|
270
301
|
return [];
|
|
271
302
|
}
|
|
@@ -273,7 +304,7 @@ var validateComplexityScores = (planDir) => {
|
|
|
273
304
|
for (const file of files) {
|
|
274
305
|
let content;
|
|
275
306
|
try {
|
|
276
|
-
content =
|
|
307
|
+
content = fs6.readFileSync(path5.join(tasksDir, file), "utf8");
|
|
277
308
|
} catch (_err) {
|
|
278
309
|
invalid.push(`${file}: unreadable`);
|
|
279
310
|
continue;
|
|
@@ -285,36 +316,28 @@ var validateComplexityScores = (planDir) => {
|
|
|
285
316
|
continue;
|
|
286
317
|
}
|
|
287
318
|
const raw = match[1].trim();
|
|
288
|
-
|
|
319
|
+
const result = validateComplexityScore(raw);
|
|
320
|
+
if (result.valid) continue;
|
|
321
|
+
if (result.reason === "non-integer") {
|
|
289
322
|
invalid.push(`${file}: non-integer complexity_score "${raw}"`);
|
|
290
323
|
continue;
|
|
291
324
|
}
|
|
292
|
-
|
|
293
|
-
if (parsed < 1 || parsed > 10) {
|
|
294
|
-
invalid.push(`${file}: complexity_score ${parsed} out of range 1-10`);
|
|
295
|
-
}
|
|
325
|
+
invalid.push(`${file}: complexity_score ${result.value} out of range 1-10`);
|
|
296
326
|
}
|
|
297
327
|
return invalid;
|
|
298
328
|
};
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
try {
|
|
312
|
-
const content = fs4.readFileSync(planFile, "utf8");
|
|
313
|
-
return /^## Execution Blueprint/m.test(content);
|
|
314
|
-
} catch (_err) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
};
|
|
329
|
+
|
|
330
|
+
// src/skill-scripts/validate-plan-blueprint.ts
|
|
331
|
+
var VALID_FIELDS = [
|
|
332
|
+
"planFile",
|
|
333
|
+
"planDir",
|
|
334
|
+
"taskCount",
|
|
335
|
+
"blueprintExists",
|
|
336
|
+
"strikethrooRoot",
|
|
337
|
+
"planId",
|
|
338
|
+
"complexityScoresValid",
|
|
339
|
+
"invalidComplexityTasks"
|
|
340
|
+
];
|
|
318
341
|
var usage = () => {
|
|
319
342
|
const lines = [
|
|
320
343
|
"Plan ID or absolute path is required",
|
|
@@ -369,14 +392,14 @@ var main = () => {
|
|
|
369
392
|
}
|
|
370
393
|
process.exit(1);
|
|
371
394
|
}
|
|
372
|
-
const invalidComplexity =
|
|
395
|
+
const invalidComplexity = validateTaskComplexityScores(resolved.planDir);
|
|
373
396
|
const result = {
|
|
374
397
|
planFile: resolved.planFile,
|
|
375
398
|
planDir: resolved.planDir,
|
|
376
399
|
strikethrooRoot: resolved.strikethrooRoot,
|
|
377
400
|
planId: resolved.planId,
|
|
378
|
-
taskCount:
|
|
379
|
-
blueprintExists:
|
|
401
|
+
taskCount: countTaskFiles(resolved.planDir),
|
|
402
|
+
blueprintExists: hasExecutionBlueprint(resolved.planFile) ? "yes" : "no",
|
|
380
403
|
complexityScoresValid: invalidComplexity.length === 0 ? "yes" : "no",
|
|
381
404
|
invalidComplexityTasks: invalidComplexity.join("; ")
|
|
382
405
|
};
|
|
@@ -33,8 +33,6 @@ __export(validate_plan_blueprint_exports, {
|
|
|
33
33
|
main: () => main
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(validate_plan_blueprint_exports);
|
|
36
|
-
var fs4 = __toESM(require("fs"));
|
|
37
|
-
var path4 = __toESM(require("path"));
|
|
38
36
|
|
|
39
37
|
// src/skill-scripts/shared/root.ts
|
|
40
38
|
var fs = __toESM(require("fs"));
|
|
@@ -242,30 +240,63 @@ var resolvePlan = (input, startPath = process.cwd()) => {
|
|
|
242
240
|
return resolveByIdInAncestry(planId, startPath);
|
|
243
241
|
};
|
|
244
242
|
|
|
243
|
+
// src/skill-scripts/shared/blueprint-detection.ts
|
|
244
|
+
var fs4 = __toESM(require("fs"));
|
|
245
|
+
var hasExecutionBlueprint = (planFile) => {
|
|
246
|
+
try {
|
|
247
|
+
const content = fs4.readFileSync(planFile, "utf8");
|
|
248
|
+
return /^## Execution Blueprint/m.test(content);
|
|
249
|
+
} catch (_err) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
// src/skill-scripts/shared/task-count.ts
|
|
255
|
+
var fs5 = __toESM(require("fs"));
|
|
256
|
+
var path4 = __toESM(require("path"));
|
|
257
|
+
var countTaskFiles = (planDir) => {
|
|
258
|
+
const tasksDir = path4.join(planDir, "tasks");
|
|
259
|
+
if (!fs5.existsSync(tasksDir)) return 0;
|
|
260
|
+
try {
|
|
261
|
+
const stat = fs5.lstatSync(tasksDir);
|
|
262
|
+
if (!stat.isDirectory()) return 0;
|
|
263
|
+
return fs5.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).length;
|
|
264
|
+
} catch (_err) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
270
|
+
var fs6 = __toESM(require("fs"));
|
|
271
|
+
var path5 = __toESM(require("path"));
|
|
272
|
+
|
|
273
|
+
// src/skill-scripts/shared/complexity-score.ts
|
|
274
|
+
var validateComplexityScore = (value) => {
|
|
275
|
+
const trimmed = value.trim();
|
|
276
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
277
|
+
return { valid: false, reason: "non-integer" };
|
|
278
|
+
}
|
|
279
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
280
|
+
if (parsed < 1 || parsed > 10) {
|
|
281
|
+
return { valid: false, reason: "out-of-range", value: parsed };
|
|
282
|
+
}
|
|
283
|
+
return { valid: true, value: parsed };
|
|
284
|
+
};
|
|
285
|
+
|
|
245
286
|
// src/skill-scripts/shared/task-file.ts
|
|
246
287
|
var extractFrontmatter = (content) => {
|
|
247
288
|
const match = content.match(/^---\s*\r?\n([\s\S]*?)\r?\n---/);
|
|
248
289
|
return match && match[1] ? match[1] : null;
|
|
249
290
|
};
|
|
250
291
|
|
|
251
|
-
// src/skill-scripts/
|
|
252
|
-
var
|
|
253
|
-
"
|
|
254
|
-
|
|
255
|
-
"taskCount",
|
|
256
|
-
"blueprintExists",
|
|
257
|
-
"strikethrooRoot",
|
|
258
|
-
"planId",
|
|
259
|
-
"complexityScoresValid",
|
|
260
|
-
"invalidComplexityTasks"
|
|
261
|
-
];
|
|
262
|
-
var validateComplexityScores = (planDir) => {
|
|
263
|
-
const tasksDir = path4.join(planDir, "tasks");
|
|
264
|
-
if (!fs4.existsSync(tasksDir)) return [];
|
|
292
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
293
|
+
var validateTaskComplexityScores = (planDir) => {
|
|
294
|
+
const tasksDir = path5.join(planDir, "tasks");
|
|
295
|
+
if (!fs6.existsSync(tasksDir)) return [];
|
|
265
296
|
let files;
|
|
266
297
|
try {
|
|
267
|
-
if (!
|
|
268
|
-
files =
|
|
298
|
+
if (!fs6.lstatSync(tasksDir).isDirectory()) return [];
|
|
299
|
+
files = fs6.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).sort();
|
|
269
300
|
} catch (_err) {
|
|
270
301
|
return [];
|
|
271
302
|
}
|
|
@@ -273,7 +304,7 @@ var validateComplexityScores = (planDir) => {
|
|
|
273
304
|
for (const file of files) {
|
|
274
305
|
let content;
|
|
275
306
|
try {
|
|
276
|
-
content =
|
|
307
|
+
content = fs6.readFileSync(path5.join(tasksDir, file), "utf8");
|
|
277
308
|
} catch (_err) {
|
|
278
309
|
invalid.push(`${file}: unreadable`);
|
|
279
310
|
continue;
|
|
@@ -285,36 +316,28 @@ var validateComplexityScores = (planDir) => {
|
|
|
285
316
|
continue;
|
|
286
317
|
}
|
|
287
318
|
const raw = match[1].trim();
|
|
288
|
-
|
|
319
|
+
const result = validateComplexityScore(raw);
|
|
320
|
+
if (result.valid) continue;
|
|
321
|
+
if (result.reason === "non-integer") {
|
|
289
322
|
invalid.push(`${file}: non-integer complexity_score "${raw}"`);
|
|
290
323
|
continue;
|
|
291
324
|
}
|
|
292
|
-
|
|
293
|
-
if (parsed < 1 || parsed > 10) {
|
|
294
|
-
invalid.push(`${file}: complexity_score ${parsed} out of range 1-10`);
|
|
295
|
-
}
|
|
325
|
+
invalid.push(`${file}: complexity_score ${result.value} out of range 1-10`);
|
|
296
326
|
}
|
|
297
327
|
return invalid;
|
|
298
328
|
};
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
try {
|
|
312
|
-
const content = fs4.readFileSync(planFile, "utf8");
|
|
313
|
-
return /^## Execution Blueprint/m.test(content);
|
|
314
|
-
} catch (_err) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
};
|
|
329
|
+
|
|
330
|
+
// src/skill-scripts/validate-plan-blueprint.ts
|
|
331
|
+
var VALID_FIELDS = [
|
|
332
|
+
"planFile",
|
|
333
|
+
"planDir",
|
|
334
|
+
"taskCount",
|
|
335
|
+
"blueprintExists",
|
|
336
|
+
"strikethrooRoot",
|
|
337
|
+
"planId",
|
|
338
|
+
"complexityScoresValid",
|
|
339
|
+
"invalidComplexityTasks"
|
|
340
|
+
];
|
|
318
341
|
var usage = () => {
|
|
319
342
|
const lines = [
|
|
320
343
|
"Plan ID or absolute path is required",
|
|
@@ -369,14 +392,14 @@ var main = () => {
|
|
|
369
392
|
}
|
|
370
393
|
process.exit(1);
|
|
371
394
|
}
|
|
372
|
-
const invalidComplexity =
|
|
395
|
+
const invalidComplexity = validateTaskComplexityScores(resolved.planDir);
|
|
373
396
|
const result = {
|
|
374
397
|
planFile: resolved.planFile,
|
|
375
398
|
planDir: resolved.planDir,
|
|
376
399
|
strikethrooRoot: resolved.strikethrooRoot,
|
|
377
400
|
planId: resolved.planId,
|
|
378
|
-
taskCount:
|
|
379
|
-
blueprintExists:
|
|
401
|
+
taskCount: countTaskFiles(resolved.planDir),
|
|
402
|
+
blueprintExists: hasExecutionBlueprint(resolved.planFile) ? "yes" : "no",
|
|
380
403
|
complexityScoresValid: invalidComplexity.length === 0 ? "yes" : "no",
|
|
381
404
|
invalidComplexityTasks: invalidComplexity.join("; ")
|
|
382
405
|
};
|
|
@@ -33,8 +33,6 @@ __export(validate_plan_blueprint_exports, {
|
|
|
33
33
|
main: () => main
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(validate_plan_blueprint_exports);
|
|
36
|
-
var fs4 = __toESM(require("fs"));
|
|
37
|
-
var path4 = __toESM(require("path"));
|
|
38
36
|
|
|
39
37
|
// src/skill-scripts/shared/root.ts
|
|
40
38
|
var fs = __toESM(require("fs"));
|
|
@@ -242,30 +240,63 @@ var resolvePlan = (input, startPath = process.cwd()) => {
|
|
|
242
240
|
return resolveByIdInAncestry(planId, startPath);
|
|
243
241
|
};
|
|
244
242
|
|
|
243
|
+
// src/skill-scripts/shared/blueprint-detection.ts
|
|
244
|
+
var fs4 = __toESM(require("fs"));
|
|
245
|
+
var hasExecutionBlueprint = (planFile) => {
|
|
246
|
+
try {
|
|
247
|
+
const content = fs4.readFileSync(planFile, "utf8");
|
|
248
|
+
return /^## Execution Blueprint/m.test(content);
|
|
249
|
+
} catch (_err) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
// src/skill-scripts/shared/task-count.ts
|
|
255
|
+
var fs5 = __toESM(require("fs"));
|
|
256
|
+
var path4 = __toESM(require("path"));
|
|
257
|
+
var countTaskFiles = (planDir) => {
|
|
258
|
+
const tasksDir = path4.join(planDir, "tasks");
|
|
259
|
+
if (!fs5.existsSync(tasksDir)) return 0;
|
|
260
|
+
try {
|
|
261
|
+
const stat = fs5.lstatSync(tasksDir);
|
|
262
|
+
if (!stat.isDirectory()) return 0;
|
|
263
|
+
return fs5.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).length;
|
|
264
|
+
} catch (_err) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
270
|
+
var fs6 = __toESM(require("fs"));
|
|
271
|
+
var path5 = __toESM(require("path"));
|
|
272
|
+
|
|
273
|
+
// src/skill-scripts/shared/complexity-score.ts
|
|
274
|
+
var validateComplexityScore = (value) => {
|
|
275
|
+
const trimmed = value.trim();
|
|
276
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
277
|
+
return { valid: false, reason: "non-integer" };
|
|
278
|
+
}
|
|
279
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
280
|
+
if (parsed < 1 || parsed > 10) {
|
|
281
|
+
return { valid: false, reason: "out-of-range", value: parsed };
|
|
282
|
+
}
|
|
283
|
+
return { valid: true, value: parsed };
|
|
284
|
+
};
|
|
285
|
+
|
|
245
286
|
// src/skill-scripts/shared/task-file.ts
|
|
246
287
|
var extractFrontmatter = (content) => {
|
|
247
288
|
const match = content.match(/^---\s*\r?\n([\s\S]*?)\r?\n---/);
|
|
248
289
|
return match && match[1] ? match[1] : null;
|
|
249
290
|
};
|
|
250
291
|
|
|
251
|
-
// src/skill-scripts/
|
|
252
|
-
var
|
|
253
|
-
"
|
|
254
|
-
|
|
255
|
-
"taskCount",
|
|
256
|
-
"blueprintExists",
|
|
257
|
-
"strikethrooRoot",
|
|
258
|
-
"planId",
|
|
259
|
-
"complexityScoresValid",
|
|
260
|
-
"invalidComplexityTasks"
|
|
261
|
-
];
|
|
262
|
-
var validateComplexityScores = (planDir) => {
|
|
263
|
-
const tasksDir = path4.join(planDir, "tasks");
|
|
264
|
-
if (!fs4.existsSync(tasksDir)) return [];
|
|
292
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
293
|
+
var validateTaskComplexityScores = (planDir) => {
|
|
294
|
+
const tasksDir = path5.join(planDir, "tasks");
|
|
295
|
+
if (!fs6.existsSync(tasksDir)) return [];
|
|
265
296
|
let files;
|
|
266
297
|
try {
|
|
267
|
-
if (!
|
|
268
|
-
files =
|
|
298
|
+
if (!fs6.lstatSync(tasksDir).isDirectory()) return [];
|
|
299
|
+
files = fs6.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).sort();
|
|
269
300
|
} catch (_err) {
|
|
270
301
|
return [];
|
|
271
302
|
}
|
|
@@ -273,7 +304,7 @@ var validateComplexityScores = (planDir) => {
|
|
|
273
304
|
for (const file of files) {
|
|
274
305
|
let content;
|
|
275
306
|
try {
|
|
276
|
-
content =
|
|
307
|
+
content = fs6.readFileSync(path5.join(tasksDir, file), "utf8");
|
|
277
308
|
} catch (_err) {
|
|
278
309
|
invalid.push(`${file}: unreadable`);
|
|
279
310
|
continue;
|
|
@@ -285,36 +316,28 @@ var validateComplexityScores = (planDir) => {
|
|
|
285
316
|
continue;
|
|
286
317
|
}
|
|
287
318
|
const raw = match[1].trim();
|
|
288
|
-
|
|
319
|
+
const result = validateComplexityScore(raw);
|
|
320
|
+
if (result.valid) continue;
|
|
321
|
+
if (result.reason === "non-integer") {
|
|
289
322
|
invalid.push(`${file}: non-integer complexity_score "${raw}"`);
|
|
290
323
|
continue;
|
|
291
324
|
}
|
|
292
|
-
|
|
293
|
-
if (parsed < 1 || parsed > 10) {
|
|
294
|
-
invalid.push(`${file}: complexity_score ${parsed} out of range 1-10`);
|
|
295
|
-
}
|
|
325
|
+
invalid.push(`${file}: complexity_score ${result.value} out of range 1-10`);
|
|
296
326
|
}
|
|
297
327
|
return invalid;
|
|
298
328
|
};
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
try {
|
|
312
|
-
const content = fs4.readFileSync(planFile, "utf8");
|
|
313
|
-
return /^## Execution Blueprint/m.test(content);
|
|
314
|
-
} catch (_err) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
};
|
|
329
|
+
|
|
330
|
+
// src/skill-scripts/validate-plan-blueprint.ts
|
|
331
|
+
var VALID_FIELDS = [
|
|
332
|
+
"planFile",
|
|
333
|
+
"planDir",
|
|
334
|
+
"taskCount",
|
|
335
|
+
"blueprintExists",
|
|
336
|
+
"strikethrooRoot",
|
|
337
|
+
"planId",
|
|
338
|
+
"complexityScoresValid",
|
|
339
|
+
"invalidComplexityTasks"
|
|
340
|
+
];
|
|
318
341
|
var usage = () => {
|
|
319
342
|
const lines = [
|
|
320
343
|
"Plan ID or absolute path is required",
|
|
@@ -369,14 +392,14 @@ var main = () => {
|
|
|
369
392
|
}
|
|
370
393
|
process.exit(1);
|
|
371
394
|
}
|
|
372
|
-
const invalidComplexity =
|
|
395
|
+
const invalidComplexity = validateTaskComplexityScores(resolved.planDir);
|
|
373
396
|
const result = {
|
|
374
397
|
planFile: resolved.planFile,
|
|
375
398
|
planDir: resolved.planDir,
|
|
376
399
|
strikethrooRoot: resolved.strikethrooRoot,
|
|
377
400
|
planId: resolved.planId,
|
|
378
|
-
taskCount:
|
|
379
|
-
blueprintExists:
|
|
401
|
+
taskCount: countTaskFiles(resolved.planDir),
|
|
402
|
+
blueprintExists: hasExecutionBlueprint(resolved.planFile) ? "yes" : "no",
|
|
380
403
|
complexityScoresValid: invalidComplexity.length === 0 ? "yes" : "no",
|
|
381
404
|
invalidComplexityTasks: invalidComplexity.join("; ")
|
|
382
405
|
};
|
|
@@ -33,8 +33,6 @@ __export(validate_plan_blueprint_exports, {
|
|
|
33
33
|
main: () => main
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(validate_plan_blueprint_exports);
|
|
36
|
-
var fs4 = __toESM(require("fs"));
|
|
37
|
-
var path4 = __toESM(require("path"));
|
|
38
36
|
|
|
39
37
|
// src/skill-scripts/shared/root.ts
|
|
40
38
|
var fs = __toESM(require("fs"));
|
|
@@ -242,30 +240,63 @@ var resolvePlan = (input, startPath = process.cwd()) => {
|
|
|
242
240
|
return resolveByIdInAncestry(planId, startPath);
|
|
243
241
|
};
|
|
244
242
|
|
|
243
|
+
// src/skill-scripts/shared/blueprint-detection.ts
|
|
244
|
+
var fs4 = __toESM(require("fs"));
|
|
245
|
+
var hasExecutionBlueprint = (planFile) => {
|
|
246
|
+
try {
|
|
247
|
+
const content = fs4.readFileSync(planFile, "utf8");
|
|
248
|
+
return /^## Execution Blueprint/m.test(content);
|
|
249
|
+
} catch (_err) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
// src/skill-scripts/shared/task-count.ts
|
|
255
|
+
var fs5 = __toESM(require("fs"));
|
|
256
|
+
var path4 = __toESM(require("path"));
|
|
257
|
+
var countTaskFiles = (planDir) => {
|
|
258
|
+
const tasksDir = path4.join(planDir, "tasks");
|
|
259
|
+
if (!fs5.existsSync(tasksDir)) return 0;
|
|
260
|
+
try {
|
|
261
|
+
const stat = fs5.lstatSync(tasksDir);
|
|
262
|
+
if (!stat.isDirectory()) return 0;
|
|
263
|
+
return fs5.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).length;
|
|
264
|
+
} catch (_err) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
270
|
+
var fs6 = __toESM(require("fs"));
|
|
271
|
+
var path5 = __toESM(require("path"));
|
|
272
|
+
|
|
273
|
+
// src/skill-scripts/shared/complexity-score.ts
|
|
274
|
+
var validateComplexityScore = (value) => {
|
|
275
|
+
const trimmed = value.trim();
|
|
276
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
277
|
+
return { valid: false, reason: "non-integer" };
|
|
278
|
+
}
|
|
279
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
280
|
+
if (parsed < 1 || parsed > 10) {
|
|
281
|
+
return { valid: false, reason: "out-of-range", value: parsed };
|
|
282
|
+
}
|
|
283
|
+
return { valid: true, value: parsed };
|
|
284
|
+
};
|
|
285
|
+
|
|
245
286
|
// src/skill-scripts/shared/task-file.ts
|
|
246
287
|
var extractFrontmatter = (content) => {
|
|
247
288
|
const match = content.match(/^---\s*\r?\n([\s\S]*?)\r?\n---/);
|
|
248
289
|
return match && match[1] ? match[1] : null;
|
|
249
290
|
};
|
|
250
291
|
|
|
251
|
-
// src/skill-scripts/
|
|
252
|
-
var
|
|
253
|
-
"
|
|
254
|
-
|
|
255
|
-
"taskCount",
|
|
256
|
-
"blueprintExists",
|
|
257
|
-
"strikethrooRoot",
|
|
258
|
-
"planId",
|
|
259
|
-
"complexityScoresValid",
|
|
260
|
-
"invalidComplexityTasks"
|
|
261
|
-
];
|
|
262
|
-
var validateComplexityScores = (planDir) => {
|
|
263
|
-
const tasksDir = path4.join(planDir, "tasks");
|
|
264
|
-
if (!fs4.existsSync(tasksDir)) return [];
|
|
292
|
+
// src/skill-scripts/shared/task-complexity.ts
|
|
293
|
+
var validateTaskComplexityScores = (planDir) => {
|
|
294
|
+
const tasksDir = path5.join(planDir, "tasks");
|
|
295
|
+
if (!fs6.existsSync(tasksDir)) return [];
|
|
265
296
|
let files;
|
|
266
297
|
try {
|
|
267
|
-
if (!
|
|
268
|
-
files =
|
|
298
|
+
if (!fs6.lstatSync(tasksDir).isDirectory()) return [];
|
|
299
|
+
files = fs6.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).sort();
|
|
269
300
|
} catch (_err) {
|
|
270
301
|
return [];
|
|
271
302
|
}
|
|
@@ -273,7 +304,7 @@ var validateComplexityScores = (planDir) => {
|
|
|
273
304
|
for (const file of files) {
|
|
274
305
|
let content;
|
|
275
306
|
try {
|
|
276
|
-
content =
|
|
307
|
+
content = fs6.readFileSync(path5.join(tasksDir, file), "utf8");
|
|
277
308
|
} catch (_err) {
|
|
278
309
|
invalid.push(`${file}: unreadable`);
|
|
279
310
|
continue;
|
|
@@ -285,36 +316,28 @@ var validateComplexityScores = (planDir) => {
|
|
|
285
316
|
continue;
|
|
286
317
|
}
|
|
287
318
|
const raw = match[1].trim();
|
|
288
|
-
|
|
319
|
+
const result = validateComplexityScore(raw);
|
|
320
|
+
if (result.valid) continue;
|
|
321
|
+
if (result.reason === "non-integer") {
|
|
289
322
|
invalid.push(`${file}: non-integer complexity_score "${raw}"`);
|
|
290
323
|
continue;
|
|
291
324
|
}
|
|
292
|
-
|
|
293
|
-
if (parsed < 1 || parsed > 10) {
|
|
294
|
-
invalid.push(`${file}: complexity_score ${parsed} out of range 1-10`);
|
|
295
|
-
}
|
|
325
|
+
invalid.push(`${file}: complexity_score ${result.value} out of range 1-10`);
|
|
296
326
|
}
|
|
297
327
|
return invalid;
|
|
298
328
|
};
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
try {
|
|
312
|
-
const content = fs4.readFileSync(planFile, "utf8");
|
|
313
|
-
return /^## Execution Blueprint/m.test(content);
|
|
314
|
-
} catch (_err) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
};
|
|
329
|
+
|
|
330
|
+
// src/skill-scripts/validate-plan-blueprint.ts
|
|
331
|
+
var VALID_FIELDS = [
|
|
332
|
+
"planFile",
|
|
333
|
+
"planDir",
|
|
334
|
+
"taskCount",
|
|
335
|
+
"blueprintExists",
|
|
336
|
+
"strikethrooRoot",
|
|
337
|
+
"planId",
|
|
338
|
+
"complexityScoresValid",
|
|
339
|
+
"invalidComplexityTasks"
|
|
340
|
+
];
|
|
318
341
|
var usage = () => {
|
|
319
342
|
const lines = [
|
|
320
343
|
"Plan ID or absolute path is required",
|
|
@@ -369,14 +392,14 @@ var main = () => {
|
|
|
369
392
|
}
|
|
370
393
|
process.exit(1);
|
|
371
394
|
}
|
|
372
|
-
const invalidComplexity =
|
|
395
|
+
const invalidComplexity = validateTaskComplexityScores(resolved.planDir);
|
|
373
396
|
const result = {
|
|
374
397
|
planFile: resolved.planFile,
|
|
375
398
|
planDir: resolved.planDir,
|
|
376
399
|
strikethrooRoot: resolved.strikethrooRoot,
|
|
377
400
|
planId: resolved.planId,
|
|
378
|
-
taskCount:
|
|
379
|
-
blueprintExists:
|
|
401
|
+
taskCount: countTaskFiles(resolved.planDir),
|
|
402
|
+
blueprintExists: hasExecutionBlueprint(resolved.planFile) ? "yes" : "no",
|
|
380
403
|
complexityScoresValid: invalidComplexity.length === 0 ? "yes" : "no",
|
|
381
404
|
invalidComplexityTasks: invalidComplexity.join("; ")
|
|
382
405
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,C as n}from"./mermaid.core-bqVxqCbb.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-CEYPnfpF.js";import{b as i}from"./mermaid.core-bqVxqCbb.js";import"./chunk-FMBD7UC4-B_iff0-_.js";import"./chunk-ND2GUHAM-C9bo0MIV.js";import"./chunk-55IACEB6-BU0yxIXn.js";import"./chunk-2J33WTMH-CScaCetR.js";import"./index-BwABcoi9.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-CEYPnfpF.js";import{b as i}from"./mermaid.core-bqVxqCbb.js";import"./chunk-FMBD7UC4-B_iff0-_.js";import"./chunk-ND2GUHAM-C9bo0MIV.js";import"./chunk-55IACEB6-BU0yxIXn.js";import"./chunk-2J33WTMH-CScaCetR.js";import"./index-BwABcoi9.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|