strikethroo 3.8.0 → 3.10.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/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- 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/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +7 -14
- package/dist/utils.js.map +1 -1
- package/dist-web/assets/{arc-ClZ3judi.js → arc-Du83CoGP.js} +1 -1
- package/dist-web/assets/{architectureDiagram-3BPJPVTR-BRD031Y3.js → architectureDiagram-3BPJPVTR-BA6BUfUW.js} +1 -1
- package/dist-web/assets/{blockDiagram-GPEHLZMM-CfaXqzcG.js → blockDiagram-GPEHLZMM-kmZD9Z3J.js} +1 -1
- package/dist-web/assets/{c4Diagram-AAUBKEIU-D9Os_mjw.js → c4Diagram-AAUBKEIU-C-zr0OVA.js} +1 -1
- package/dist-web/assets/channel-BOHLeYWs.js +1 -0
- package/dist-web/assets/{chunk-2J33WTMH-CScaCetR.js → chunk-2J33WTMH-DGyZyeF8.js} +1 -1
- package/dist-web/assets/{chunk-4BX2VUAB-C_0wTF2D.js → chunk-4BX2VUAB-Ig1yILPK.js} +1 -1
- package/dist-web/assets/{chunk-55IACEB6-BU0yxIXn.js → chunk-55IACEB6-CcNftkuC.js} +1 -1
- package/dist-web/assets/{chunk-727SXJPM-CEYPnfpF.js → chunk-727SXJPM-CiRgiu44.js} +1 -1
- package/dist-web/assets/{chunk-AQP2D5EJ-3Wp97XA5.js → chunk-AQP2D5EJ-Bwjvwe11.js} +1 -1
- package/dist-web/assets/{chunk-FMBD7UC4-B_iff0-_.js → chunk-FMBD7UC4-CWdvFsJu.js} +1 -1
- package/dist-web/assets/{chunk-ND2GUHAM-C9bo0MIV.js → chunk-ND2GUHAM-8GmIk-IZ.js} +1 -1
- package/dist-web/assets/{chunk-QZHKN3VN-DuWFBza0.js → chunk-QZHKN3VN-CaL4wYlA.js} +1 -1
- package/dist-web/assets/classDiagram-4FO5ZUOK-DnCGOL-L.js +1 -0
- package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DnCGOL-L.js +1 -0
- package/dist-web/assets/{cose-bilkent-S5V4N54A-BvbHJ-Zg.js → cose-bilkent-S5V4N54A-RFm7vIyb.js} +1 -1
- package/dist-web/assets/{dagre-BM42HDAG-D6Et-JgF.js → dagre-BM42HDAG-ByE50cqc.js} +1 -1
- package/dist-web/assets/{diagram-2AECGRRQ-CNCYsbbA.js → diagram-2AECGRRQ-B1Gv7VcB.js} +1 -1
- package/dist-web/assets/{diagram-5GNKFQAL-CxRozyyO.js → diagram-5GNKFQAL-DGJd_bsM.js} +1 -1
- package/dist-web/assets/{diagram-KO2AKTUF-IZlLB90E.js → diagram-KO2AKTUF-YOmj2j9x.js} +1 -1
- package/dist-web/assets/{diagram-LMA3HP47-CrSB8ihh.js → diagram-LMA3HP47-CVUXcS-1.js} +1 -1
- package/dist-web/assets/{diagram-OG6HWLK6-tCjUSZwa.js → diagram-OG6HWLK6-DtmRK7uL.js} +1 -1
- package/dist-web/assets/{erDiagram-TEJ5UH35-JLv81E72.js → erDiagram-TEJ5UH35-DOUgdDj3.js} +1 -1
- package/dist-web/assets/{flowDiagram-I6XJVG4X-Det1_WLC.js → flowDiagram-I6XJVG4X-DbuqdHpO.js} +1 -1
- package/dist-web/assets/{ganttDiagram-6RSMTGT7-Mi2wMw1v.js → ganttDiagram-6RSMTGT7-B7ZZ2LbX.js} +1 -1
- package/dist-web/assets/{gitGraphDiagram-PVQCEYII-Ddy55D8B.js → gitGraphDiagram-PVQCEYII-L-d2snvu.js} +1 -1
- package/dist-web/assets/{index-Dw0N6U6b.js → index-BU3TMxqs.js} +1 -1
- package/dist-web/assets/{index-BwABcoi9.js → index-DQQ5O8Wf.js} +4 -4
- package/dist-web/assets/{index-CEoxzYhV.js → index-IfoU0lmL.js} +1 -1
- package/dist-web/assets/{infoDiagram-5YYISTIA-vrktGk5U.js → infoDiagram-5YYISTIA-DJImDLu-.js} +1 -1
- package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-CATnDGrp.js → ishikawaDiagram-YF4QCWOH-BHk3O3EA.js} +1 -1
- package/dist-web/assets/{journeyDiagram-JHISSGLW-CEvYFLj2.js → journeyDiagram-JHISSGLW-BuU4sInb.js} +1 -1
- package/dist-web/assets/{kanban-definition-UN3LZRKU-_6lp0n4D.js → kanban-definition-UN3LZRKU-CtzGaGIa.js} +1 -1
- package/dist-web/assets/{linear-C1oEZdKm.js → linear-BdRfGnlQ.js} +1 -1
- package/dist-web/assets/{mermaid.core-bqVxqCbb.js → mermaid.core-DFkZP_6I.js} +4 -4
- package/dist-web/assets/{mindmap-definition-RKZ34NQL-DxAus_u1.js → mindmap-definition-RKZ34NQL-07Y54l5p.js} +1 -1
- package/dist-web/assets/{pieDiagram-4H26LBE5-Bqjkt8dx.js → pieDiagram-4H26LBE5-CqxqIeCc.js} +1 -1
- package/dist-web/assets/{quadrantDiagram-W4KKPZXB-BoZHhSII.js → quadrantDiagram-W4KKPZXB-DW_GPUMX.js} +1 -1
- package/dist-web/assets/{requirementDiagram-4Y6WPE33-D0rcLxmM.js → requirementDiagram-4Y6WPE33-Btmdymfp.js} +1 -1
- package/dist-web/assets/{sankeyDiagram-5OEKKPKP-CWShHxDe.js → sankeyDiagram-5OEKKPKP-DmHixIVQ.js} +1 -1
- package/dist-web/assets/{sequenceDiagram-3UESZ5HK-T8LE2GTr.js → sequenceDiagram-3UESZ5HK-G4uNNg00.js} +1 -1
- package/dist-web/assets/{stateDiagram-AJRCARHV-a8e0ie70.js → stateDiagram-AJRCARHV-DQpHeYYT.js} +1 -1
- package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DHbVjicl.js +1 -0
- package/dist-web/assets/{timeline-definition-PNZ67QCA-Fn2xKeuG.js → timeline-definition-PNZ67QCA-Dj8GHpUR.js} +1 -1
- package/dist-web/assets/{vennDiagram-CIIHVFJN-CdlvIB8X.js → vennDiagram-CIIHVFJN-BfDQlVRY.js} +1 -1
- package/dist-web/assets/{wardley-L42UT6IY-9pciD2XX.js → wardley-L42UT6IY-CNXhMfST.js} +1 -1
- package/dist-web/assets/{wardleyDiagram-YWT4CUSO-BK6qNOxa.js → wardleyDiagram-YWT4CUSO-CfsAcXpz.js} +1 -1
- package/dist-web/assets/{xychartDiagram-2RQKCTM6-QjMTFvse.js → xychartDiagram-2RQKCTM6-CPA5hSTp.js} +1 -1
- package/dist-web/index.html +1 -1
- package/package.json +1 -1
- package/templates/harness/skills/st-execute-blueprint/SKILL.md +35 -1
- package/templates/harness/skills/st-execute-blueprint/scripts/dispatch-task-execution.cjs +3848 -0
- package/templates/harness/skills/st-execute-blueprint/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-execute-task/SKILL.md +26 -2
- package/templates/harness/skills/st-execute-task/scripts/dispatch-task-execution.cjs +3848 -0
- package/templates/harness/skills/st-execute-task/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-full-workflow/SKILL.md +39 -1
- package/templates/harness/skills/st-full-workflow/scripts/dispatch-task-execution.cjs +3848 -0
- package/templates/harness/skills/st-full-workflow/scripts/validate-plan-blueprint.cjs +69 -46
- package/templates/harness/skills/st-generate-tasks/SKILL.md +4 -0
- 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/templates/strikethroo/config/templates/TASK_TEMPLATE.md +6 -0
- 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
|
};
|
|
@@ -136,8 +136,32 @@ Preserve all other frontmatter fields exactly.
|
|
|
136
136
|
|
|
137
137
|
### 8. Execute the task
|
|
138
138
|
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
Before deploying a native agent, consult the bundled policy/dispatch runtime:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
scripts/dispatch-task-execution.cjs <task-file> <current-harness> <workspace> <plan-id> <task-id>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`<current-harness>` is the exact supported harness identifier running this
|
|
146
|
+
skill; `<workspace>` is the project working directory. Read the one-line JSON
|
|
147
|
+
result and act exactly once:
|
|
148
|
+
|
|
149
|
+
- `native-default`: use the ordinary native Task dispatch below with no
|
|
150
|
+
execution-setting prose.
|
|
151
|
+
- `native-override`: use native dispatch and explicitly require the subagent
|
|
152
|
+
to use the exact returned `model`. Mention `reasoningEffort` only when that
|
|
153
|
+
property is present.
|
|
154
|
+
- `fallback`: visibly record the returned reason and detail, then use ordinary
|
|
155
|
+
native dispatch with no execution-setting prose. This is a pre-launch
|
|
156
|
+
fallback only.
|
|
157
|
+
- `launched-success`: the external harness has completed the task; do not
|
|
158
|
+
dispatch a native agent. Continue directly with status and evidence review.
|
|
159
|
+
- `launched-failure` (the script exits 1): treat it as an execution failure.
|
|
160
|
+
Do not dispatch or retry natively; follow steps 9–11's failed-status and
|
|
161
|
+
error-hook path.
|
|
162
|
+
|
|
163
|
+
For either native dispatch outcome, deploy an agent using your internal Task
|
|
164
|
+
tool. The agent MUST perform these steps in order:
|
|
141
165
|
|
|
142
166
|
1. **Pre-flight validation**: Read and execute
|
|
143
167
|
`<root>/config/hooks/PRE_TASK_EXECUTION.md` before starting any
|