strikethroo 3.17.2 → 3.19.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 (64) hide show
  1. package/dist-web/assets/{arc-C3L1jkFY.js → arc-XmjVSUrZ.js} +1 -1
  2. package/dist-web/assets/{architectureDiagram-3BPJPVTR-Dc5wdWPF.js → architectureDiagram-3BPJPVTR-BkIMNPZQ.js} +1 -1
  3. package/dist-web/assets/{blockDiagram-GPEHLZMM-BCqaESV7.js → blockDiagram-GPEHLZMM-CIUhAyCy.js} +1 -1
  4. package/dist-web/assets/{c4Diagram-AAUBKEIU-DNecSAwM.js → c4Diagram-AAUBKEIU-DHmyXhPl.js} +1 -1
  5. package/dist-web/assets/channel-BluR9kJ8.js +1 -0
  6. package/dist-web/assets/{chunk-2J33WTMH-3QS28848.js → chunk-2J33WTMH-CsadzJpE.js} +1 -1
  7. package/dist-web/assets/{chunk-4BX2VUAB-B6R-x-SN.js → chunk-4BX2VUAB-rdZMTiJd.js} +1 -1
  8. package/dist-web/assets/{chunk-55IACEB6-BYY5vsbu.js → chunk-55IACEB6-BFgbJmlS.js} +1 -1
  9. package/dist-web/assets/{chunk-727SXJPM-BZxIJIkN.js → chunk-727SXJPM-CaGOdOo-.js} +1 -1
  10. package/dist-web/assets/{chunk-AQP2D5EJ-Dwpt8x10.js → chunk-AQP2D5EJ-Dj1Z_buE.js} +1 -1
  11. package/dist-web/assets/{chunk-FMBD7UC4-BkIlqLqc.js → chunk-FMBD7UC4-ByPFO0XR.js} +1 -1
  12. package/dist-web/assets/{chunk-ND2GUHAM-BZAfIvWk.js → chunk-ND2GUHAM-CRT0WqT3.js} +1 -1
  13. package/dist-web/assets/{chunk-QZHKN3VN-wAp9ruCQ.js → chunk-QZHKN3VN-DeBs7Z-A.js} +1 -1
  14. package/dist-web/assets/classDiagram-4FO5ZUOK-dvsWFqDg.js +1 -0
  15. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-dvsWFqDg.js +1 -0
  16. package/dist-web/assets/{cose-bilkent-S5V4N54A-BWhls-Li.js → cose-bilkent-S5V4N54A-8sFxzH_F.js} +1 -1
  17. package/dist-web/assets/{dagre-BM42HDAG-D_rm5H8p.js → dagre-BM42HDAG-CXKxHlld.js} +1 -1
  18. package/dist-web/assets/{diagram-2AECGRRQ-CgrRz62Y.js → diagram-2AECGRRQ-DtcDQjmq.js} +1 -1
  19. package/dist-web/assets/{diagram-5GNKFQAL-BRdPFx5y.js → diagram-5GNKFQAL-C5z5tfjo.js} +1 -1
  20. package/dist-web/assets/{diagram-KO2AKTUF-CRkShN2W.js → diagram-KO2AKTUF-DzGoK3-W.js} +1 -1
  21. package/dist-web/assets/{diagram-LMA3HP47-Bxah1b5X.js → diagram-LMA3HP47-CClXYqlA.js} +1 -1
  22. package/dist-web/assets/{diagram-OG6HWLK6-D9gsqeVI.js → diagram-OG6HWLK6-CCOd6tb5.js} +1 -1
  23. package/dist-web/assets/{erDiagram-TEJ5UH35-BxuqpCGH.js → erDiagram-TEJ5UH35-DyUNZPGi.js} +1 -1
  24. package/dist-web/assets/{flowDiagram-I6XJVG4X-CVc346ab.js → flowDiagram-I6XJVG4X-DWE9txcF.js} +1 -1
  25. package/dist-web/assets/{ganttDiagram-6RSMTGT7-CoV2q8mu.js → ganttDiagram-6RSMTGT7-B-OtEqRy.js} +1 -1
  26. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-DpBtbvUQ.js → gitGraphDiagram-PVQCEYII-F9vafo91.js} +1 -1
  27. package/dist-web/assets/{index-DXAUzXLU.js → index-CwMlRsHB.js} +1 -1
  28. package/dist-web/assets/{index-B5AkN942.js → index-D_5U356C.js} +4 -4
  29. package/dist-web/assets/{index-qiGGVGhU.js → index-DahCY-9n.js} +1 -1
  30. package/dist-web/assets/{infoDiagram-5YYISTIA-Cs1LaltR.js → infoDiagram-5YYISTIA-BqiJJ4mQ.js} +1 -1
  31. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-2dwQITAJ.js → ishikawaDiagram-YF4QCWOH-BJhigZjk.js} +1 -1
  32. package/dist-web/assets/{journeyDiagram-JHISSGLW-C5NXwRcO.js → journeyDiagram-JHISSGLW-DbnfMDvR.js} +1 -1
  33. package/dist-web/assets/{kanban-definition-UN3LZRKU-D8L4UiFp.js → kanban-definition-UN3LZRKU-CWbRbJ6f.js} +1 -1
  34. package/dist-web/assets/{linear-BmwJXk2t.js → linear-D3Xq7OUM.js} +1 -1
  35. package/dist-web/assets/{mermaid.core-CxfmFJso.js → mermaid.core-CT0YFN3s.js} +4 -4
  36. package/dist-web/assets/{mindmap-definition-RKZ34NQL-CCk10yMr.js → mindmap-definition-RKZ34NQL-D6AZLTGR.js} +1 -1
  37. package/dist-web/assets/{pieDiagram-4H26LBE5-CNaROrHh.js → pieDiagram-4H26LBE5-NGxhfGd1.js} +1 -1
  38. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-C9eBwT_4.js → quadrantDiagram-W4KKPZXB-jNVzj-DZ.js} +1 -1
  39. package/dist-web/assets/{requirementDiagram-4Y6WPE33-CuWFUe-Z.js → requirementDiagram-4Y6WPE33-cxYkgHCv.js} +1 -1
  40. package/dist-web/assets/{sankeyDiagram-5OEKKPKP-xGYYGBDj.js → sankeyDiagram-5OEKKPKP-CO7LMTUX.js} +1 -1
  41. package/dist-web/assets/{sequenceDiagram-3UESZ5HK-Corn4mP3.js → sequenceDiagram-3UESZ5HK-C8d8VIsZ.js} +1 -1
  42. package/dist-web/assets/{stateDiagram-AJRCARHV-DP1EwgDv.js → stateDiagram-AJRCARHV-DVxepHih.js} +1 -1
  43. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-OpTLx_eY.js +1 -0
  44. package/dist-web/assets/{timeline-definition-PNZ67QCA-DgVY9v5q.js → timeline-definition-PNZ67QCA-Bef04SiL.js} +1 -1
  45. package/dist-web/assets/{vennDiagram-CIIHVFJN-B47n0Ab2.js → vennDiagram-CIIHVFJN-DlZHmyp0.js} +1 -1
  46. package/dist-web/assets/{wardley-L42UT6IY-ubK4o7Fl.js → wardley-L42UT6IY-ChkIPtT_.js} +1 -1
  47. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-ChirN_61.js → wardleyDiagram-YWT4CUSO-D67J0WGX.js} +1 -1
  48. package/dist-web/assets/{xychartDiagram-2RQKCTM6-Cf8q2_P7.js → xychartDiagram-2RQKCTM6-BoNIIDDe.js} +1 -1
  49. package/dist-web/index.html +1 -1
  50. package/package.json +1 -1
  51. package/templates/harness/skills/st-code-review/SKILL.md +47 -281
  52. package/templates/harness/skills/st-code-review/scripts/code-review.cjs +2725 -509
  53. package/templates/harness/skills/st-execute-blueprint/SKILL.md +15 -18
  54. package/templates/harness/skills/st-execute-blueprint/scripts/dispatch-task-execution.cjs +420 -213
  55. package/templates/harness/skills/st-execute-task/scripts/dispatch-task-execution.cjs +420 -213
  56. package/templates/harness/skills/st-full-workflow/SKILL.md +15 -18
  57. package/templates/harness/skills/st-full-workflow/scripts/dispatch-task-execution.cjs +420 -213
  58. package/templates/strikethroo/config/config.yaml +95 -6
  59. package/templates/strikethroo/config/hooks/CODE_REVIEW.md +19 -29
  60. package/templates/strikethroo/gitignore +13 -10
  61. package/dist-web/assets/channel-DmY2Krrw.js +0 -1
  62. package/dist-web/assets/classDiagram-4FO5ZUOK-C91aiCZF.js +0 -1
  63. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-C91aiCZF.js +0 -1
  64. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DQIao4rH.js +0 -1
@@ -1,12 +1,16 @@
1
1
  # Strikethroo workspace configuration.
2
2
  #
3
- # This is the single structured configuration file for the workspace: every
4
- # configurable feature claims one top-level section here rather than adding
5
- # its own YAML file. Edit it directly or through the Config tab of the
6
- # Customize section in the web app (`npx strikethroo serve`) — note that
7
- # saving from the web UI rewrites this file and does not preserve comments.
3
+ # This file is local to this workspace and ignored by the workspace .gitignore.
4
+ # Harness permissions, installed models, and routing preferences can differ by
5
+ # developer and machine. Edit it directly or through the Config tab of the
6
+ # Customize section in the web app (`npx strikethroo serve`). Saving from the
7
+ # web UI rewrites this file and does not preserve comments.
8
8
  #
9
9
  # Sections:
10
+ # harnesses — exact ordered argv elements added when Strikethroo invokes the
11
+ # named external CLI. The local user owns the resulting permissions. Values
12
+ # are never split or shell-expanded. Keep secrets and machine paths out of
13
+ # argv; use each harness's authentication and user configuration instead.
10
14
  # execution_routing — automatic per-task execution routing. Profiles are
11
15
  # arbitrary, project-defined routing categories;
12
16
  # each `description` tells the task-generation LLM when the profile
@@ -23,5 +27,90 @@
23
27
  # contract and an illustrative example:
24
28
  # https://strikethroo.canpicasoft.com/customization.html
25
29
 
30
+ harnesses:
31
+ claude:
32
+ cli_args:
33
+ - --dangerously-skip-permissions
34
+ codex:
35
+ cli_args:
36
+ - --sandbox
37
+ - workspace-write
38
+ cursor:
39
+ cli_args:
40
+ - --force
41
+ gemini:
42
+ cli_args:
43
+ - --approval-mode
44
+ - yolo
45
+ copilot:
46
+ cli_args:
47
+ - --allow-all
48
+ opencode:
49
+ cli_args:
50
+ - --auto
51
+
26
52
  execution_routing:
27
- profiles: {}
53
+ profiles:
54
+ docs-and-config:
55
+ description: >-
56
+ Prose, documentation, and declarative configuration edits with no
57
+ intricate control flow: Markdown authoring, README and docs-site
58
+ updates, technical writing, skill-prompt copy, and YAML/JSON config
59
+ changes. Typical skills: markdown, technical-writing, documentation,
60
+ yaml, json, jekyll, markdown-authoring. Complexity score roughly 3-4.
61
+ Choose this only when the task requires no cross-module code reasoning.
62
+ models:
63
+ - model: sonnet
64
+ harness: claude
65
+ reasoning_effort: medium
66
+ - model: gpt-5.6-sol
67
+ harness: codex
68
+ reasoning_effort: low
69
+ - model: opencode-go/minimax-m3
70
+ harness: opencode
71
+ - model: composer-2.5
72
+ harness: cursor
73
+ standard-implementation:
74
+ description: >-
75
+ Everyday feature and bug-fix work scoped to a handful of files with
76
+ clear acceptance criteria: TypeScript/Node CLI logic, React components
77
+ and Tailwind/CSS styling, Bash scripts, and their unit/e2e tests
78
+ (Vitest, Jest, Playwright). Typical skills: typescript, react,
79
+ react-components, css, tailwindcss, bash, nodejs, vitest, jest,
80
+ playwright, testing. Complexity score roughly 4-6. This is the default
81
+ profile when a task fits neither docs-and-config nor
82
+ complex-architecture.
83
+ models:
84
+ - model: opus
85
+ harness: claude
86
+ reasoning_effort: medium
87
+ - model: gpt-5.6-sol
88
+ harness: codex
89
+ reasoning_effort: medium
90
+ - model: opencode-go/kimi-k2.7-code
91
+ harness: opencode
92
+ - model: composer-2.5
93
+ harness: cursor
94
+ complex-architecture:
95
+ description: >-
96
+ High-difficulty, cross-cutting, or design-heavy work: data-model and
97
+ type-system design, non-trivial refactors, build-tooling and bundler
98
+ changes (esbuild, Vite), server/HTTP/SSE and API design, runtime prompt
99
+ composition, MCP/protocol work, and any task whose blast radius spans
100
+ multiple subsystems or carries subtle correctness constraints. Typical
101
+ skills: data-modeling, typescript-refactoring, refactoring,
102
+ build-tooling, esbuild, vite, node-http, server-sent-events,
103
+ mcp-protocol, secure-coding, html-sanitization. Complexity score roughly
104
+ 6-7, or any task with wide blast radius regardless of score.
105
+ models:
106
+ - model: opus
107
+ harness: claude
108
+ reasoning_effort: xhigh
109
+ - model: gpt-5.6-sol
110
+ harness: codex
111
+ reasoning_effort: high
112
+ - model: opencode-go/glm-5.2
113
+ harness: opencode
114
+ reasoning_effort: max
115
+ - model: composer-2.5
116
+ harness: cursor
@@ -2,13 +2,13 @@
2
2
 
3
3
  ## Automated Code Review Gate
4
4
 
5
- This hook governs an unattended review loop that runs at the end of blueprint execution, after mechanical gates (lint, tests, Self Validation) report success. A reviewer on a discovered external harness critiques the plan's cumulative diff and emits findings; findings at or above the severity and confidence floors trigger automatic remediation, followed by a full re-run of the mechanical gates and re-verification.
5
+ This hook governs a review step that runs at the end of blueprint execution, after the mechanical gates (lint, tests, Self Validation) report success. A reviewer on a discovered external harness critiques the plan's cumulative diff and emits findings. The findings are validated against the vendored schema and recorded.
6
6
 
7
- The gate terminates on exhausted round budget or when no findings above threshold remain.
7
+ The gate reports; it does not decide. Nothing is applied automatically, and the implementer reads the recorded findings and chooses what to act on.
8
8
 
9
9
  ## Mandate: Conformance and Defects Only
10
10
 
11
- The reviewer checks the diff against the **plan's stated requirements** and for **demonstrable defects**. It does **not** raise general code-quality opinions, style notes, design critiques, or taste judgments — the linter owns style. Every finding must cite concrete evidence and trace to:
11
+ The reviewer checks the diff against the **plan's stated requirements** and for **demonstrable defects**. It does **not** raise general code-quality opinions, style notes, design critiques, or taste judgments. The linter owns style. Every finding must cite concrete evidence and trace to:
12
12
 
13
13
  - An explicit requirement stated in the plan, **or**
14
14
  - A demonstrable defect in the code as written
@@ -17,41 +17,31 @@ Anything else is out of scope and must not be included in findings.
17
17
 
18
18
  ## Finding Categories In Scope
19
19
 
20
- - **Requirement conformance** — the code does not implement what the plan explicitly asked for
21
- - **Demonstrable defects** — the code fails at runtime, produces wrong behaviour, violates a contract it declares, has a security hole, causes data loss, or breaks something else in the plan
20
+ - **Requirement conformance**: the code does not implement what the plan explicitly asked for
21
+ - **Demonstrable defects**: the code fails at runtime, produces wrong behaviour, violates a contract it declares, has a security hole, causes data loss, or breaks something else in the plan
22
22
 
23
- ## Severity Floor: `major`
23
+ ## Severity and Confidence
24
24
 
25
- Findings below `major` are recorded in the review output but never auto-applied. The severity levels, ordered from most to least consequential:
25
+ Both are advisory triage labels carried on every finding so that whoever reads the review can sort it. Nothing thresholds on them and nothing is filtered out before the implementer sees it.
26
26
 
27
- - `critical` — causes data loss, security hole, crash, or corruption on a path real usage reaches
28
- - `major` — produces wrong behaviour or breaks a documented contract; nothing destroyed
29
- - `minor` — real but bounded (mishandled edge case, missing test, maintenance hazard); behaviour correct today
30
- - `info` — no defect (style, naming, question for author, recorded context)
27
+ Severity, from most to least consequential:
31
28
 
32
- If a finding omits the severity attribute, it falls below the floor and is never auto-applied.
29
+ - `critical`: causes data loss, a security hole, a crash, or corruption on a path real usage reaches
30
+ - `major`: produces wrong behaviour or breaks a documented contract; nothing destroyed
31
+ - `minor`: real but bounded (mishandled edge case, maintenance hazard); behaviour correct today
32
+ - `info`: no defect (recorded context, a question for the author)
33
33
 
34
- ## Confidence Floor: `high`
34
+ Confidence, from most to least sure:
35
35
 
36
- Findings below `high` are recorded but never auto-applied. The confidence levels, ordered from most to least sure:
36
+ - `high`: the evidence is in the code that was read, and the failure traces from the diff alone
37
+ - `medium`: likely real, but rests on one assumption that was not verified (how a caller behaves, what a dependency guarantees, what a requirement was)
38
+ - `low`: speculative (failure scenario imagined rather than traced, constraint invented, intent could not be inferred)
37
39
 
38
- - `high` — evidence is in the code that was read; failure can be traced from the diff alone, no assumptions needed
39
- - `medium` — likely real, but rests on one assumption not verified (how a caller behaves, what a dependency guarantees, what a requirement was)
40
- - `low` — speculative (failure scenario imagined, not traced; constraint invented; intent could not be inferred)
40
+ Confidence matters most when it is low. LLM reviewers overstate certainty, so a reviewer that marks its own guess as `medium` is doing the reader a service. Record the label honestly rather than upgrading it to be taken seriously.
41
41
 
42
- If a finding omits the confidence attribute, it falls below the floor and is never auto-applied.
42
+ ## What the Gate Guarantees
43
43
 
44
- This attribute has no schema default on purpose. Findings that omit confidence are treated as falling below any floor. An automated consumer relies on confidence being lowered honestly; LLM reviewers systematically overstate certainty.
45
-
46
- ## Round Budget: 3
47
-
48
- The gate runs up to three detect-and-fix cycles:
49
-
50
- 1. Reviewer critiques the cumulative diff → findings
51
- 2. If findings above floor exist: implement fixes, re-run mechanical gates, verify
52
- 3. Reviewer re-checks → repeat until no new findings above floor or budget exhausted
53
-
54
- This value expressed here is advisory prose only. **Termination is enforced in code and cannot be bypassed by editing this file.** If the round budget is exhausted, the gate halts exactly as any mechanical gate failure does: the plan stays in `plans/`, findings are recorded, and the failure is documented.
44
+ Exactly one thing, and it is enforced in code rather than here: a review that could not be certified is never reported as a clean one. A findings document that is absent, invalid against the schema, or unvalidatable because `xmllint` is missing halts the gate and says which of those happened. "The reviewer found nothing" and "the reviewer never ran" are never collapsed into each other.
55
45
 
56
46
  ## Disable the Gate
57
47
 
@@ -1,18 +1,21 @@
1
+ # Local workspace configuration.
2
+ #
3
+ # Harness permissions, model routing, and resolver settings depend on the
4
+ # developer's machine. Init still creates and hash-tracks this file so re-runs
5
+ # can preserve local edits and report template conflicts.
6
+ config/config.yaml
7
+
1
8
  # Code review gate artifacts.
2
9
  #
3
- # The review gate writes a recorded base commit and one directory per round
4
- # (review.xml plus the recorded-versus-actionable findings partition) into the
5
- # plan it is reviewing. All of it is machine-generated output scoped to a single
6
- # execution: the base commit is live only from capture through the final round,
7
- # and each round supersedes the last.
10
+ # The report-only review gate writes a recorded base commit and review.xml into
11
+ # the plan it is reviewing. A failed review may also leave reviewer-output.txt
12
+ # for diagnosis. These files are machine-generated output for one execution.
8
13
  #
9
14
  # Ignoring it also keeps the gate from reviewing itself. The reviewed diff runs
10
15
  # from the recorded base against the working tree, and untracked files are in
11
- # scope — the gate synthesizes an add-diff for each one. What keeps review
12
- # output out of the next round is these ignore rules: the gate enumerates
13
- # untracked paths with `git ls-files --others --exclude-standard`, which applies
14
- # them, so a round-1 review.xml is invisible to round 2 whether or not anything
15
- # committed it.
16
+ # scope. The gate synthesizes an add-diff for each one. These rules keep its own
17
+ # output out because the gate enumerates untracked paths with
18
+ # `git ls-files --others --exclude-standard`.
16
19
  #
17
20
  # Both locations are listed because a completed plan directory is moved from
18
21
  # plans/ to archive/ wholesale, carrying its review/ directory with it.
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-CxfmFJso.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-BZxIJIkN.js";import{b as i}from"./mermaid.core-CxfmFJso.js";import"./chunk-FMBD7UC4-BkIlqLqc.js";import"./chunk-ND2GUHAM-BZAfIvWk.js";import"./chunk-55IACEB6-BYY5vsbu.js";import"./chunk-2J33WTMH-3QS28848.js";import"./index-B5AkN942.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-BZxIJIkN.js";import{b as i}from"./mermaid.core-CxfmFJso.js";import"./chunk-FMBD7UC4-BkIlqLqc.js";import"./chunk-ND2GUHAM-BZAfIvWk.js";import"./chunk-55IACEB6-BYY5vsbu.js";import"./chunk-2J33WTMH-3QS28848.js";import"./index-B5AkN942.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{b as e,a as r,s as a,S as s}from"./chunk-AQP2D5EJ-Dwpt8x10.js";import{b as i}from"./mermaid.core-CxfmFJso.js";import"./chunk-55IACEB6-BYY5vsbu.js";import"./chunk-2J33WTMH-3QS28848.js";import"./index-B5AkN942.js";var u={parser:a,get db(){return new s(2)},renderer:r,styles:e,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{u as diagram};