dev-harness-cli 1.0.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +299 -0
  3. package/adapters/amazon-q/README.md +23 -0
  4. package/adapters/antigravity/README.md +22 -0
  5. package/adapters/claude-code/README.md +30 -0
  6. package/adapters/cline/README.md +23 -0
  7. package/adapters/codex/README.md +31 -0
  8. package/adapters/copilot/README.md +23 -0
  9. package/adapters/cursor/README.md +29 -0
  10. package/adapters/gemini/README.md +23 -0
  11. package/adapters/generic/README.md +40 -0
  12. package/adapters/hermes/README.md +31 -0
  13. package/adapters/hermes/SKILL.md +89 -0
  14. package/adapters/hermes/scripts/init.mjs +27 -0
  15. package/adapters/hermes/scripts/phase.mjs +27 -0
  16. package/adapters/hermes/scripts/validate.mjs +27 -0
  17. package/adapters/kilo-code/README.md +23 -0
  18. package/adapters/openclaw/README.md +22 -0
  19. package/adapters/pi/README.md +22 -0
  20. package/adapters/roo/README.md +23 -0
  21. package/adapters/windsurf/README.md +23 -0
  22. package/cli/commands/checkpoint.mjs +94 -0
  23. package/cli/commands/config.mjs +268 -0
  24. package/cli/commands/contract.mjs +155 -0
  25. package/cli/commands/detect-tool.mjs +112 -0
  26. package/cli/commands/init.mjs +351 -0
  27. package/cli/commands/learn.mjs +47 -0
  28. package/cli/commands/pause.mjs +34 -0
  29. package/cli/commands/phase.mjs +182 -0
  30. package/cli/commands/resume.mjs +33 -0
  31. package/cli/commands/rollback.mjs +261 -0
  32. package/cli/commands/set-mode.mjs +75 -0
  33. package/cli/commands/status.mjs +168 -0
  34. package/cli/commands/validate.mjs +118 -0
  35. package/cli/commands/worktree.mjs +298 -0
  36. package/cli/harness-dev.mjs +88 -0
  37. package/cli/lib/args.mjs +111 -0
  38. package/cli/lib/command-helpers.mjs +50 -0
  39. package/cli/lib/config-registry.mjs +329 -0
  40. package/cli/lib/constants.mjs +30 -0
  41. package/cli/lib/contract.mjs +306 -0
  42. package/cli/lib/detect-stack.mjs +235 -0
  43. package/cli/lib/errors.mjs +71 -0
  44. package/cli/lib/file-io.mjs +90 -0
  45. package/cli/lib/gates.mjs +492 -0
  46. package/cli/lib/git.mjs +144 -0
  47. package/cli/lib/help.mjs +246 -0
  48. package/cli/lib/modes.mjs +92 -0
  49. package/cli/lib/output.mjs +49 -0
  50. package/cli/lib/paths.mjs +75 -0
  51. package/cli/lib/phases.mjs +58 -0
  52. package/cli/lib/platform.mjs +78 -0
  53. package/cli/lib/progress.mjs +357 -0
  54. package/cli/lib/ralph-inner.mjs +314 -0
  55. package/cli/lib/ralph-outer.mjs +249 -0
  56. package/cli/lib/ralph-output.mjs +178 -0
  57. package/cli/lib/scaffold.mjs +431 -0
  58. package/cli/lib/schemas/stacks.json +477 -0
  59. package/cli/lib/state.mjs +333 -0
  60. package/cli/lib/templates.mjs +264 -0
  61. package/cli/lib/tool-registry.mjs +218 -0
  62. package/cli/lib/validate-schema.mjs +131 -0
  63. package/cli/lib/vars.mjs +114 -0
  64. package/package.json +50 -0
  65. package/schema/harness-config.schema.json +127 -0
  66. package/templates/AGENTS.md +63 -0
  67. package/templates/ci/github-actions.yml +78 -0
  68. package/templates/ci/gitlab-ci.yml +59 -0
  69. package/templates/docs/agents/evaluator.md +14 -0
  70. package/templates/docs/agents/generator.md +13 -0
  71. package/templates/docs/agents/planner.md +13 -0
  72. package/templates/docs/agents/simplifier.md +13 -0
  73. package/templates/docs/phases/build.md +41 -0
  74. package/templates/docs/phases/define.md +51 -0
  75. package/templates/docs/phases/plan.md +36 -0
  76. package/templates/docs/phases/review.md +42 -0
  77. package/templates/docs/phases/ship.md +43 -0
  78. package/templates/docs/phases/simplify.md +40 -0
  79. package/templates/docs/phases/verify.md +38 -0
  80. package/templates/evaluator-rubric.md +28 -0
  81. package/templates/init.ps1 +97 -0
  82. package/templates/init.sh +102 -0
  83. package/templates/sprint-contract.md +31 -0
@@ -0,0 +1,477 @@
1
+ {
2
+ "python": {
3
+ "label": "Python",
4
+ "testCmd": "python3 -m pytest",
5
+ "lintCmd": "python3 -m ruff check",
6
+ "typeCheckCmd": "python3 -m mypy",
7
+ "buildCmd": "python3 -m build",
8
+ "installCmd": "python3 -m pip install -e .",
9
+ "versionFile": ".python-version",
10
+ "configFile": "pyproject.toml",
11
+ "extensions": [
12
+ ".py"
13
+ ],
14
+ "detectFiles": [
15
+ "pyproject.toml",
16
+ "setup.py",
17
+ "requirements.txt",
18
+ "Pipfile"
19
+ ],
20
+ "coverageCmd": "python3 -m pytest --cov --cov-report=term-missing --cov-fail-under=80"
21
+ },
22
+ "node": {
23
+ "label": "Node.js",
24
+ "testCmd": "npm test",
25
+ "lintCmd": "npx eslint .",
26
+ "typeCheckCmd": "npx tsc --noEmit",
27
+ "buildCmd": "npm run build",
28
+ "installCmd": "npm install",
29
+ "versionFile": ".nvmrc",
30
+ "configFile": "package.json",
31
+ "extensions": [
32
+ ".js",
33
+ ".jsx",
34
+ ".ts",
35
+ ".tsx",
36
+ ".mjs"
37
+ ],
38
+ "detectFiles": [
39
+ "package.json",
40
+ "tsconfig.json",
41
+ "yarn.lock",
42
+ "pnpm-lock.yaml"
43
+ ],
44
+ "coverageCmd": "npx c8 --reporter=text --reporter=lcov npm test"
45
+ },
46
+ "go": {
47
+ "label": "Go",
48
+ "testCmd": "go test ./...",
49
+ "lintCmd": "go vet ./...",
50
+ "typeCheckCmd": "go build ./...",
51
+ "buildCmd": "go build ./...",
52
+ "installCmd": "go mod download",
53
+ "versionFile": "go.ver",
54
+ "configFile": "go.mod",
55
+ "extensions": [
56
+ ".go"
57
+ ],
58
+ "detectFiles": [
59
+ "go.mod"
60
+ ],
61
+ "coverageCmd": "go test -coverprofile=cover.out ./... && go tool cover -func=cover.out"
62
+ },
63
+ "rust": {
64
+ "label": "Rust",
65
+ "testCmd": "cargo test",
66
+ "lintCmd": "cargo clippy -- -D warnings",
67
+ "typeCheckCmd": "cargo check",
68
+ "buildCmd": "cargo build",
69
+ "installCmd": "cargo build",
70
+ "versionFile": "rust-toolchain.toml",
71
+ "configFile": "Cargo.toml",
72
+ "extensions": [
73
+ ".rs"
74
+ ],
75
+ "detectFiles": [
76
+ "Cargo.toml"
77
+ ],
78
+ "coverageCmd": "cargo tarpaulin --out xml --target-dir target/tarpaulin 2>/dev/null || cargo test"
79
+ },
80
+ "c": {
81
+ "label": "C",
82
+ "testCmd": "ctest --output-on-failure",
83
+ "lintCmd": "gcc -Wall -Wextra -pedantic -std=c17 -fsyntax-only $(find . -name '*.c')",
84
+ "typeCheckCmd": "",
85
+ "buildCmd": "mkdir -p build && cd build && cmake .. && make",
86
+ "installCmd": "apt-get install -y build-essential cmake 2>/dev/null || brew install cmake 2>/dev/null",
87
+ "versionFile": "",
88
+ "configFile": "CMakeLists.txt",
89
+ "extensions": [
90
+ ".c"
91
+ ],
92
+ "detectFiles": [
93
+ "CMakeLists.txt",
94
+ "Makefile"
95
+ ],
96
+ "pairExts": [
97
+ ".c"
98
+ ],
99
+ "coverageCmd": "mkdir -p build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Debug && make && ctest -T coverage 2>/dev/null || ctest"
100
+ },
101
+ "cpp": {
102
+ "label": "C++",
103
+ "testCmd": "ctest --output-on-failure",
104
+ "lintCmd": "clang++ -Wall -Wextra -std=c++20 -fsyntax-only $(find . -name '*.cpp' -o -name '*.hpp')",
105
+ "typeCheckCmd": "",
106
+ "buildCmd": "mkdir -p build && cd build && cmake .. && make",
107
+ "installCmd": "apt-get install -y build-essential cmake 2>/dev/null || brew install cmake 2>/dev/null",
108
+ "versionFile": "",
109
+ "configFile": "CMakeLists.txt",
110
+ "extensions": [
111
+ ".cpp",
112
+ ".hpp",
113
+ ".cc",
114
+ ".cxx"
115
+ ],
116
+ "detectFiles": [
117
+ "CMakeLists.txt",
118
+ "Makefile"
119
+ ],
120
+ "pairExts": [
121
+ ".cpp",
122
+ ".hpp",
123
+ ".cc"
124
+ ],
125
+ "coverageCmd": "mkdir -p build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Debug && make && ctest -T coverage 2>/dev/null || ctest"
126
+ },
127
+ "vhdl": {
128
+ "label": "VHDL",
129
+ "testCmd": "ghdl -a --std=08 $(find . -name '*.vhdl' -o -name '*.vhd') && ghdl -e $(cat spec/entity.txt 2>/dev/null || echo 'top') && ghdl -r $(cat spec/entity.txt 2>/dev/null || echo 'top') --assert-level=error",
130
+ "lintCmd": "ghdl -s --std=08 $(find . -name \"*.vhdl\" -o -name \"*.vhd\")",
131
+ "typeCheckCmd": "",
132
+ "buildCmd": "",
133
+ "installCmd": "apt-get install -y ghdl 2>/dev/null || brew install ghdl 2>/dev/null",
134
+ "versionFile": "",
135
+ "configFile": "",
136
+ "extensions": [
137
+ ".vhdl",
138
+ ".vhd"
139
+ ],
140
+ "detectFiles": [],
141
+ "coverageCmd": ""
142
+ },
143
+ "verilog": {
144
+ "label": "Verilog/SystemVerilog",
145
+ "testCmd": "iverilog -o testbench $(find . -name '*.v' -o -name '*.sv') && vvp testbench",
146
+ "lintCmd": "verilator --lint-only $(find . -name '*.v' -o -name '*.sv')",
147
+ "typeCheckCmd": "",
148
+ "buildCmd": "",
149
+ "installCmd": "apt-get install -y iverilog verilator 2>/dev/null || brew install icarus-verilog verilator 2>/dev/null",
150
+ "versionFile": "",
151
+ "configFile": "",
152
+ "extensions": [
153
+ ".v",
154
+ ".sv"
155
+ ],
156
+ "detectFiles": [],
157
+ "coverageCmd": ""
158
+ },
159
+ "generic": {
160
+ "label": "Generic",
161
+ "testCmd": "echo 'No test command configured for this project type'",
162
+ "lintCmd": "",
163
+ "typeCheckCmd": "",
164
+ "buildCmd": "",
165
+ "installCmd": "",
166
+ "versionFile": "",
167
+ "configFile": "",
168
+ "extensions": [],
169
+ "detectFiles": [],
170
+ "coverageCmd": ""
171
+ },
172
+ "java": {
173
+ "label": "Java",
174
+ "testCmd": "mvn test",
175
+ "lintCmd": "mvn checkstyle:check",
176
+ "typeCheckCmd": "",
177
+ "buildCmd": "mvn compile",
178
+ "installCmd": "mvn install -DskipTests",
179
+ "versionFile": ".java-version",
180
+ "configFile": "pom.xml",
181
+ "extensions": [
182
+ ".java"
183
+ ],
184
+ "detectFiles": [
185
+ "pom.xml",
186
+ "build.gradle"
187
+ ],
188
+ "coverageCmd": "mvn verify -DskipTests=false jacoco:report 2>/dev/null || mvn test"
189
+ },
190
+ "kotlin": {
191
+ "label": "Kotlin",
192
+ "testCmd": "./gradlew test",
193
+ "lintCmd": "./gradlew ktlintCheck",
194
+ "typeCheckCmd": "",
195
+ "buildCmd": "./gradlew build",
196
+ "installCmd": "./gradlew build",
197
+ "versionFile": ".java-version",
198
+ "configFile": "build.gradle.kts",
199
+ "extensions": [
200
+ ".kt",
201
+ ".kts"
202
+ ],
203
+ "detectFiles": [
204
+ "build.gradle.kts"
205
+ ],
206
+ "coverageCmd": "./gradlew test jacocoTestReport 2>/dev/null || ./gradlew test"
207
+ },
208
+ "dotnet": {
209
+ "label": ".NET",
210
+ "testCmd": "dotnet test",
211
+ "lintCmd": "dotnet format --verify-no-changes",
212
+ "typeCheckCmd": "",
213
+ "buildCmd": "dotnet build",
214
+ "installCmd": "dotnet restore",
215
+ "versionFile": "global.json",
216
+ "configFile": "",
217
+ "extensions": [
218
+ ".cs",
219
+ ".fs",
220
+ ".vb"
221
+ ],
222
+ "detectFiles": [
223
+ "*.csproj",
224
+ "*.sln"
225
+ ],
226
+ "coverageCmd": "dotnet test --collect:\"XPlat Code Coverage\""
227
+ },
228
+ "matlab": {
229
+ "label": "MATLAB",
230
+ "testCmd": "matlab -batch \"runtests('tests')\"",
231
+ "lintCmd": "matlab -batch \"checkcode('src/')\"",
232
+ "typeCheckCmd": "",
233
+ "buildCmd": "",
234
+ "installCmd": "",
235
+ "versionFile": "",
236
+ "configFile": "",
237
+ "extensions": [
238
+ ".m"
239
+ ],
240
+ "detectFiles": [],
241
+ "coverageCmd": "matlab -batch \"runtests;\""
242
+ },
243
+ "elixir": {
244
+ "label": "Elixir",
245
+ "testCmd": "mix test",
246
+ "lintCmd": "mix credo --strict",
247
+ "typeCheckCmd": "mix dialyzer",
248
+ "buildCmd": "mix compile",
249
+ "installCmd": "mix deps.get",
250
+ "versionFile": ".tool-versions",
251
+ "configFile": "mix.exs",
252
+ "extensions": [".ex", ".exs"],
253
+ "detectFiles": ["mix.exs"],
254
+ "coverageCmd": "mix test --cover"
255
+ },
256
+ "erlang": {
257
+ "label": "Erlang",
258
+ "testCmd": "rebar3 eunit",
259
+ "lintCmd": "elvis",
260
+ "typeCheckCmd": "dialyzer --src src",
261
+ "buildCmd": "rebar3 compile",
262
+ "installCmd": "rebar3 get-deps",
263
+ "versionFile": ".tool-versions",
264
+ "configFile": "rebar.config",
265
+ "extensions": [".erl", ".hrl"],
266
+ "detectFiles": ["rebar.config"],
267
+ "coverageCmd": "rebar3 cover"
268
+ },
269
+ "ruby": {
270
+ "label": "Ruby",
271
+ "testCmd": "bundle exec rspec",
272
+ "lintCmd": "bundle exec rubocop",
273
+ "typeCheckCmd": "bundle exec srb tc",
274
+ "buildCmd": "bundle exec rake build",
275
+ "installCmd": "bundle install",
276
+ "versionFile": ".ruby-version",
277
+ "configFile": "Gemfile",
278
+ "extensions": [".rb"],
279
+ "detectFiles": ["Gemfile", "Rakefile", ".rspec"],
280
+ "coverageCmd": "bundle exec simplecov"
281
+ },
282
+ "php": {
283
+ "label": "PHP",
284
+ "testCmd": "vendor/bin/phpunit",
285
+ "lintCmd": "vendor/bin/phpcs",
286
+ "typeCheckCmd": "vendor/bin/phpstan analyse",
287
+ "buildCmd": "composer dump-autoload",
288
+ "installCmd": "composer install",
289
+ "versionFile": ".php-version",
290
+ "configFile": "composer.json",
291
+ "extensions": [".php"],
292
+ "detectFiles": ["composer.json"],
293
+ "coverageCmd": "vendor/bin/phpunit --coverage-text"
294
+ },
295
+ "swift": {
296
+ "label": "Swift",
297
+ "testCmd": "swift test",
298
+ "lintCmd": "swiftlint",
299
+ "typeCheckCmd": "swift build",
300
+ "buildCmd": "swift build",
301
+ "installCmd": "swift package resolve",
302
+ "versionFile": ".swift-version",
303
+ "configFile": "Package.swift",
304
+ "extensions": [".swift"],
305
+ "detectFiles": ["Package.swift"],
306
+ "coverageCmd": "swift test --enable-code-coverage"
307
+ },
308
+ "scala": {
309
+ "label": "Scala",
310
+ "testCmd": "sbt test",
311
+ "lintCmd": "scalafmt --test",
312
+ "typeCheckCmd": "sbt compile",
313
+ "buildCmd": "sbt compile",
314
+ "installCmd": "sbt update",
315
+ "versionFile": ".scala-version",
316
+ "configFile": "build.sbt",
317
+ "extensions": [".scala", ".sc"],
318
+ "detectFiles": ["build.sbt", "build.sc"],
319
+ "coverageCmd": "sbt coverage test"
320
+ },
321
+ "r": {
322
+ "label": "R",
323
+ "testCmd": "Rscript -e 'testthat::test_dir(\"tests\")'",
324
+ "lintCmd": "Rscript -e 'lintr::lint_dir(\".\")'",
325
+ "typeCheckCmd": "",
326
+ "buildCmd": "R CMD build .",
327
+ "installCmd": "Rscript -e 'install.packages(\".\", repos=NULL, type=\"source\")'",
328
+ "versionFile": ".Rversion",
329
+ "configFile": "DESCRIPTION",
330
+ "extensions": [".r", ".R"],
331
+ "detectFiles": ["DESCRIPTION"],
332
+ "coverageCmd": "Rscript -e 'covr::package_coverage()'"
333
+ },
334
+ "haskell": {
335
+ "label": "Haskell",
336
+ "testCmd": "cabal test",
337
+ "lintCmd": "hlint .",
338
+ "typeCheckCmd": "ghc -fno-code",
339
+ "buildCmd": "cabal build",
340
+ "installCmd": "cabal build",
341
+ "versionFile": "",
342
+ "configFile": "cabal.project",
343
+ "extensions": [".hs", ".lhs"],
344
+ "detectFiles": ["cabal.project", "stack.yaml", "*.cabal"],
345
+ "coverageCmd": ""
346
+ },
347
+ "perl": {
348
+ "label": "Perl",
349
+ "testCmd": "prove -l",
350
+ "lintCmd": "perlcritic",
351
+ "typeCheckCmd": "",
352
+ "buildCmd": "perl Makefile.PL && make",
353
+ "installCmd": "cpanm --installdeps .",
354
+ "versionFile": ".perl-version",
355
+ "configFile": "cpanfile",
356
+ "extensions": [".pl", ".pm", ".t"],
357
+ "detectFiles": ["Makefile.PL", "cpanfile", "dist.ini"],
358
+ "coverageCmd": "cover -test"
359
+ },
360
+ "lua": {
361
+ "label": "Lua",
362
+ "testCmd": "busted",
363
+ "lintCmd": "luacheck .",
364
+ "typeCheckCmd": "",
365
+ "buildCmd": "luarocks make",
366
+ "installCmd": "luarocks install",
367
+ "versionFile": ".lua-version",
368
+ "configFile": ".luarc.json",
369
+ "extensions": [".lua"],
370
+ "detectFiles": ["*.rockspec", ".luarc.json"],
371
+ "coverageCmd": "luacov"
372
+ },
373
+ "dart": {
374
+ "label": "Dart",
375
+ "testCmd": "dart test",
376
+ "lintCmd": "dart analyze",
377
+ "typeCheckCmd": "dart analyze",
378
+ "buildCmd": "dart compile exe",
379
+ "installCmd": "dart pub get",
380
+ "versionFile": ".dart-version",
381
+ "configFile": "pubspec.yaml",
382
+ "extensions": [".dart"],
383
+ "detectFiles": ["pubspec.yaml"],
384
+ "coverageCmd": "dart test --coverage=coverage"
385
+ },
386
+ "flutter": {
387
+ "label": "Flutter",
388
+ "testCmd": "flutter test",
389
+ "lintCmd": "flutter analyze",
390
+ "typeCheckCmd": "flutter analyze",
391
+ "buildCmd": "flutter build apk",
392
+ "installCmd": "flutter pub get",
393
+ "versionFile": ".fvmrc",
394
+ "configFile": "pubspec.yaml",
395
+ "extensions": [".dart"],
396
+ "detectFiles": ["pubspec.yaml"],
397
+ "coverageCmd": "flutter test --coverage"
398
+ },
399
+ "ocaml": {
400
+ "label": "OCaml",
401
+ "testCmd": "dune runtest",
402
+ "lintCmd": "dune build @lint",
403
+ "typeCheckCmd": "dune build",
404
+ "buildCmd": "dune build",
405
+ "installCmd": "opam install . --deps-only",
406
+ "versionFile": ".ocaml-version",
407
+ "configFile": "dune-project",
408
+ "extensions": [".ml", ".mli"],
409
+ "detectFiles": ["dune-project"],
410
+ "coverageCmd": "bisect-ppx"
411
+ },
412
+ "clojure": {
413
+ "label": "Clojure",
414
+ "testCmd": "lein test",
415
+ "lintCmd": "clj-kondo --lint src",
416
+ "typeCheckCmd": "clojure -M:check",
417
+ "buildCmd": "lein uberjar",
418
+ "installCmd": "lein deps",
419
+ "versionFile": "",
420
+ "configFile": "project.clj",
421
+ "extensions": [".clj", ".cljs", ".cljc"],
422
+ "detectFiles": ["project.clj", "deps.edn", "shadow-cljs.edn"],
423
+ "coverageCmd": "lein cloverage"
424
+ },
425
+ "zig": {
426
+ "label": "Zig",
427
+ "testCmd": "zig build test",
428
+ "lintCmd": "zig fmt --check src/",
429
+ "typeCheckCmd": "zig build",
430
+ "buildCmd": "zig build",
431
+ "installCmd": "zig build",
432
+ "versionFile": "",
433
+ "configFile": "build.zig",
434
+ "extensions": [".zig"],
435
+ "detectFiles": ["build.zig"],
436
+ "coverageCmd": ""
437
+ },
438
+ "julia": {
439
+ "label": "Julia",
440
+ "testCmd": "julia -e 'using Pkg; Pkg.test()'",
441
+ "lintCmd": "julia -e 'using JuliaFormatter; format(\".\", overwrite=false)'",
442
+ "typeCheckCmd": "",
443
+ "buildCmd": "julia -e 'using Pkg; Pkg.build()'",
444
+ "installCmd": "julia -e 'using Pkg; Pkg.instantiate()'",
445
+ "versionFile": ".julia-version",
446
+ "configFile": "Project.toml",
447
+ "extensions": [".jl"],
448
+ "detectFiles": ["Project.toml", "Manifest.toml"],
449
+ "coverageCmd": "julia -e 'using Coverage; process_folder()'"
450
+ },
451
+ "nim": {
452
+ "label": "Nim",
453
+ "testCmd": "nimble test",
454
+ "lintCmd": "nimpretty --check src/",
455
+ "typeCheckCmd": "nim check",
456
+ "buildCmd": "nimble build",
457
+ "installCmd": "nimble install",
458
+ "versionFile": ".nim-version",
459
+ "configFile": "*.nimble",
460
+ "extensions": [".nim", ".nims"],
461
+ "detectFiles": ["*.nimble"],
462
+ "coverageCmd": ""
463
+ },
464
+ "groovy": {
465
+ "label": "Groovy",
466
+ "testCmd": "gradle test",
467
+ "lintCmd": "codenarc",
468
+ "typeCheckCmd": "groovyc",
469
+ "buildCmd": "gradle build",
470
+ "installCmd": "gradle build",
471
+ "versionFile": ".groovy-version",
472
+ "configFile": "build.gradle",
473
+ "extensions": [".groovy", ".gradle"],
474
+ "detectFiles": ["build.gradle", "gradlew"],
475
+ "coverageCmd": "gradle jacocoTestReport"
476
+ }
477
+ }