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.
Files changed (84) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/serve/markdown.d.ts +0 -12
  4. package/dist/serve/markdown.d.ts.map +1 -1
  5. package/dist/serve/markdown.js +6 -8
  6. package/dist/serve/markdown.js.map +1 -1
  7. package/dist/skill-scripts/shared/complexity-score.d.ts +14 -0
  8. package/dist/skill-scripts/shared/complexity-score.d.ts.map +1 -0
  9. package/dist/skill-scripts/shared/complexity-score.js +21 -0
  10. package/dist/skill-scripts/shared/complexity-score.js.map +1 -0
  11. package/dist/types.d.ts +2 -1
  12. package/dist/types.d.ts.map +1 -1
  13. package/dist/types.js +12 -0
  14. package/dist/types.js.map +1 -1
  15. package/dist/utils.d.ts.map +1 -1
  16. package/dist/utils.js +7 -14
  17. package/dist/utils.js.map +1 -1
  18. package/dist-web/assets/{arc-ClZ3judi.js → arc-Du83CoGP.js} +1 -1
  19. package/dist-web/assets/{architectureDiagram-3BPJPVTR-BRD031Y3.js → architectureDiagram-3BPJPVTR-BA6BUfUW.js} +1 -1
  20. package/dist-web/assets/{blockDiagram-GPEHLZMM-CfaXqzcG.js → blockDiagram-GPEHLZMM-kmZD9Z3J.js} +1 -1
  21. package/dist-web/assets/{c4Diagram-AAUBKEIU-D9Os_mjw.js → c4Diagram-AAUBKEIU-C-zr0OVA.js} +1 -1
  22. package/dist-web/assets/channel-BOHLeYWs.js +1 -0
  23. package/dist-web/assets/{chunk-2J33WTMH-CScaCetR.js → chunk-2J33WTMH-DGyZyeF8.js} +1 -1
  24. package/dist-web/assets/{chunk-4BX2VUAB-C_0wTF2D.js → chunk-4BX2VUAB-Ig1yILPK.js} +1 -1
  25. package/dist-web/assets/{chunk-55IACEB6-BU0yxIXn.js → chunk-55IACEB6-CcNftkuC.js} +1 -1
  26. package/dist-web/assets/{chunk-727SXJPM-CEYPnfpF.js → chunk-727SXJPM-CiRgiu44.js} +1 -1
  27. package/dist-web/assets/{chunk-AQP2D5EJ-3Wp97XA5.js → chunk-AQP2D5EJ-Bwjvwe11.js} +1 -1
  28. package/dist-web/assets/{chunk-FMBD7UC4-B_iff0-_.js → chunk-FMBD7UC4-CWdvFsJu.js} +1 -1
  29. package/dist-web/assets/{chunk-ND2GUHAM-C9bo0MIV.js → chunk-ND2GUHAM-8GmIk-IZ.js} +1 -1
  30. package/dist-web/assets/{chunk-QZHKN3VN-DuWFBza0.js → chunk-QZHKN3VN-CaL4wYlA.js} +1 -1
  31. package/dist-web/assets/classDiagram-4FO5ZUOK-DnCGOL-L.js +1 -0
  32. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DnCGOL-L.js +1 -0
  33. package/dist-web/assets/{cose-bilkent-S5V4N54A-BvbHJ-Zg.js → cose-bilkent-S5V4N54A-RFm7vIyb.js} +1 -1
  34. package/dist-web/assets/{dagre-BM42HDAG-D6Et-JgF.js → dagre-BM42HDAG-ByE50cqc.js} +1 -1
  35. package/dist-web/assets/{diagram-2AECGRRQ-CNCYsbbA.js → diagram-2AECGRRQ-B1Gv7VcB.js} +1 -1
  36. package/dist-web/assets/{diagram-5GNKFQAL-CxRozyyO.js → diagram-5GNKFQAL-DGJd_bsM.js} +1 -1
  37. package/dist-web/assets/{diagram-KO2AKTUF-IZlLB90E.js → diagram-KO2AKTUF-YOmj2j9x.js} +1 -1
  38. package/dist-web/assets/{diagram-LMA3HP47-CrSB8ihh.js → diagram-LMA3HP47-CVUXcS-1.js} +1 -1
  39. package/dist-web/assets/{diagram-OG6HWLK6-tCjUSZwa.js → diagram-OG6HWLK6-DtmRK7uL.js} +1 -1
  40. package/dist-web/assets/{erDiagram-TEJ5UH35-JLv81E72.js → erDiagram-TEJ5UH35-DOUgdDj3.js} +1 -1
  41. package/dist-web/assets/{flowDiagram-I6XJVG4X-Det1_WLC.js → flowDiagram-I6XJVG4X-DbuqdHpO.js} +1 -1
  42. package/dist-web/assets/{ganttDiagram-6RSMTGT7-Mi2wMw1v.js → ganttDiagram-6RSMTGT7-B7ZZ2LbX.js} +1 -1
  43. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-Ddy55D8B.js → gitGraphDiagram-PVQCEYII-L-d2snvu.js} +1 -1
  44. package/dist-web/assets/{index-Dw0N6U6b.js → index-BU3TMxqs.js} +1 -1
  45. package/dist-web/assets/{index-BwABcoi9.js → index-DQQ5O8Wf.js} +4 -4
  46. package/dist-web/assets/{index-CEoxzYhV.js → index-IfoU0lmL.js} +1 -1
  47. package/dist-web/assets/{infoDiagram-5YYISTIA-vrktGk5U.js → infoDiagram-5YYISTIA-DJImDLu-.js} +1 -1
  48. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-CATnDGrp.js → ishikawaDiagram-YF4QCWOH-BHk3O3EA.js} +1 -1
  49. package/dist-web/assets/{journeyDiagram-JHISSGLW-CEvYFLj2.js → journeyDiagram-JHISSGLW-BuU4sInb.js} +1 -1
  50. package/dist-web/assets/{kanban-definition-UN3LZRKU-_6lp0n4D.js → kanban-definition-UN3LZRKU-CtzGaGIa.js} +1 -1
  51. package/dist-web/assets/{linear-C1oEZdKm.js → linear-BdRfGnlQ.js} +1 -1
  52. package/dist-web/assets/{mermaid.core-bqVxqCbb.js → mermaid.core-DFkZP_6I.js} +4 -4
  53. package/dist-web/assets/{mindmap-definition-RKZ34NQL-DxAus_u1.js → mindmap-definition-RKZ34NQL-07Y54l5p.js} +1 -1
  54. package/dist-web/assets/{pieDiagram-4H26LBE5-Bqjkt8dx.js → pieDiagram-4H26LBE5-CqxqIeCc.js} +1 -1
  55. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-BoZHhSII.js → quadrantDiagram-W4KKPZXB-DW_GPUMX.js} +1 -1
  56. package/dist-web/assets/{requirementDiagram-4Y6WPE33-D0rcLxmM.js → requirementDiagram-4Y6WPE33-Btmdymfp.js} +1 -1
  57. package/dist-web/assets/{sankeyDiagram-5OEKKPKP-CWShHxDe.js → sankeyDiagram-5OEKKPKP-DmHixIVQ.js} +1 -1
  58. package/dist-web/assets/{sequenceDiagram-3UESZ5HK-T8LE2GTr.js → sequenceDiagram-3UESZ5HK-G4uNNg00.js} +1 -1
  59. package/dist-web/assets/{stateDiagram-AJRCARHV-a8e0ie70.js → stateDiagram-AJRCARHV-DQpHeYYT.js} +1 -1
  60. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DHbVjicl.js +1 -0
  61. package/dist-web/assets/{timeline-definition-PNZ67QCA-Fn2xKeuG.js → timeline-definition-PNZ67QCA-Dj8GHpUR.js} +1 -1
  62. package/dist-web/assets/{vennDiagram-CIIHVFJN-CdlvIB8X.js → vennDiagram-CIIHVFJN-BfDQlVRY.js} +1 -1
  63. package/dist-web/assets/{wardley-L42UT6IY-9pciD2XX.js → wardley-L42UT6IY-CNXhMfST.js} +1 -1
  64. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-BK6qNOxa.js → wardleyDiagram-YWT4CUSO-CfsAcXpz.js} +1 -1
  65. package/dist-web/assets/{xychartDiagram-2RQKCTM6-QjMTFvse.js → xychartDiagram-2RQKCTM6-CPA5hSTp.js} +1 -1
  66. package/dist-web/index.html +1 -1
  67. package/package.json +1 -1
  68. package/templates/harness/skills/st-execute-blueprint/SKILL.md +35 -1
  69. package/templates/harness/skills/st-execute-blueprint/scripts/dispatch-task-execution.cjs +3848 -0
  70. package/templates/harness/skills/st-execute-blueprint/scripts/validate-plan-blueprint.cjs +69 -46
  71. package/templates/harness/skills/st-execute-task/SKILL.md +26 -2
  72. package/templates/harness/skills/st-execute-task/scripts/dispatch-task-execution.cjs +3848 -0
  73. package/templates/harness/skills/st-execute-task/scripts/validate-plan-blueprint.cjs +69 -46
  74. package/templates/harness/skills/st-full-workflow/SKILL.md +39 -1
  75. package/templates/harness/skills/st-full-workflow/scripts/dispatch-task-execution.cjs +3848 -0
  76. package/templates/harness/skills/st-full-workflow/scripts/validate-plan-blueprint.cjs +69 -46
  77. package/templates/harness/skills/st-generate-tasks/SKILL.md +4 -0
  78. package/templates/harness/skills/st-generate-tasks/scripts/validate-plan-blueprint.cjs +69 -46
  79. package/templates/harness/skills/st-refine-plan/scripts/validate-plan-blueprint.cjs +69 -46
  80. package/templates/strikethroo/config/templates/TASK_TEMPLATE.md +6 -0
  81. package/dist-web/assets/channel-CJXJUs_u.js +0 -1
  82. package/dist-web/assets/classDiagram-4FO5ZUOK-DSnAL-3H.js +0 -1
  83. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-DSnAL-3H.js +0 -1
  84. 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/validate-plan-blueprint.ts
252
- var VALID_FIELDS = [
253
- "planFile",
254
- "planDir",
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 (!fs4.lstatSync(tasksDir).isDirectory()) return [];
268
- files = fs4.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).sort();
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 = fs4.readFileSync(path4.join(tasksDir, file), "utf8");
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
- if (!/^\d+$/.test(raw)) {
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
- const parsed = Number.parseInt(raw, 10);
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
- var countTasks = (planDir) => {
300
- const tasksDir = path4.join(planDir, "tasks");
301
- if (!fs4.existsSync(tasksDir)) return 0;
302
- try {
303
- const stat = fs4.lstatSync(tasksDir);
304
- if (!stat.isDirectory()) return 0;
305
- return fs4.readdirSync(tasksDir).filter((f) => f.endsWith(".md")).length;
306
- } catch (_err) {
307
- return 0;
308
- }
309
- };
310
- var checkBlueprintExists = (planFile) => {
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 = validateComplexityScores(resolved.planDir);
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: countTasks(resolved.planDir),
379
- blueprintExists: checkBlueprintExists(resolved.planFile) ? "yes" : "no",
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
- Deploy an agent using your internal Task tool. The agent MUST perform these
140
- steps in order:
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