testeranto 0.342.1 → 0.343.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 (203) hide show
  1. package/dist/golang/main.go +104 -2
  2. package/dist/java/main.java +30 -3
  3. package/dist/python/python.py +100 -0
  4. package/dist/ruby/ruby.rb +35 -5
  5. package/dist/rust/main.rs +114 -2
  6. package/package.json +11 -17
  7. package/src/lib/kafe/pom.xml +1 -1
  8. package/src/lib/kafe/target/apidocs/allclasses-index.html +108 -255
  9. package/src/lib/kafe/target/apidocs/allpackages-index.html +34 -131
  10. package/src/lib/kafe/target/apidocs/copy.svg +33 -0
  11. package/src/lib/kafe/target/apidocs/help-doc.html +124 -209
  12. package/src/lib/kafe/target/apidocs/index-all.html +307 -440
  13. package/src/lib/kafe/target/apidocs/index.html +9 -6
  14. package/src/lib/kafe/target/apidocs/jquery-ui.overrides.css +34 -0
  15. package/src/lib/kafe/target/apidocs/kafe/BaseAction.html +234 -417
  16. package/src/lib/kafe/target/apidocs/kafe/BaseCheck.html +238 -421
  17. package/src/lib/kafe/target/apidocs/kafe/BaseConfirm.html +194 -351
  18. package/src/lib/kafe/target/apidocs/kafe/BaseDescribe.html +194 -351
  19. package/src/lib/kafe/target/apidocs/kafe/BaseExpected.html +161 -309
  20. package/src/lib/kafe/target/apidocs/kafe/BaseGiven.html +176 -324
  21. package/src/lib/kafe/target/apidocs/kafe/BaseIt.html +160 -308
  22. package/src/lib/kafe/target/apidocs/kafe/BaseSetup.html +318 -546
  23. package/src/lib/kafe/target/apidocs/kafe/BaseShould.html +160 -308
  24. package/src/lib/kafe/target/apidocs/kafe/BaseSuite.html +273 -485
  25. package/src/lib/kafe/target/apidocs/kafe/BaseThen.html +179 -334
  26. package/src/lib/kafe/target/apidocs/kafe/BaseValue.html +194 -351
  27. package/src/lib/kafe/target/apidocs/kafe/BaseWhen.html +160 -308
  28. package/src/lib/kafe/target/apidocs/kafe/Default.html +160 -299
  29. package/src/lib/kafe/target/apidocs/kafe/IFinalResults.html +210 -377
  30. package/src/lib/kafe/target/apidocs/kafe/ITTestResourceConfiguration.html +180 -340
  31. package/src/lib/kafe/target/apidocs/kafe/ITTestResourceRequest.html +120 -250
  32. package/src/lib/kafe/target/apidocs/kafe/ITestAdapter.html +315 -543
  33. package/src/lib/kafe/target/apidocs/kafe/ITestImplementation.html +246 -431
  34. package/src/lib/kafe/target/apidocs/kafe/ITestJob.html +116 -233
  35. package/src/lib/kafe/target/apidocs/kafe/ITestSpecification.html +108 -210
  36. package/src/lib/kafe/target/apidocs/kafe/IbddInAny.html +56 -143
  37. package/src/lib/kafe/target/apidocs/kafe/IbddOutAny.html +56 -143
  38. package/src/lib/kafe/target/apidocs/kafe/Kafe.html +421 -720
  39. package/src/lib/kafe/target/apidocs/kafe/KafeMain.html +122 -246
  40. package/src/lib/kafe/target/apidocs/kafe/PatternOverrideFactory.html +198 -367
  41. package/src/lib/kafe/target/apidocs/kafe/SimpleTestAdapter.html +227 -397
  42. package/src/lib/kafe/target/apidocs/kafe/TestJobManager.html +130 -259
  43. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseAction.html +63 -170
  44. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseCheck.html +59 -164
  45. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseConfirm.html +31 -117
  46. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseDescribe.html +31 -117
  47. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseExpected.html +31 -117
  48. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseGiven.html +55 -156
  49. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseIt.html +45 -142
  50. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseSetup.html +58 -161
  51. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseShould.html +31 -117
  52. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseSuite.html +31 -117
  53. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseThen.html +31 -117
  54. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseValue.html +31 -117
  55. package/src/lib/kafe/target/apidocs/kafe/class-use/BaseWhen.html +31 -117
  56. package/src/lib/kafe/target/apidocs/kafe/class-use/Default.html +31 -117
  57. package/src/lib/kafe/target/apidocs/kafe/class-use/IFinalResults.html +48 -147
  58. package/src/lib/kafe/target/apidocs/kafe/class-use/ITTestResourceConfiguration.html +351 -558
  59. package/src/lib/kafe/target/apidocs/kafe/class-use/ITTestResourceRequest.html +62 -163
  60. package/src/lib/kafe/target/apidocs/kafe/class-use/ITestAdapter.html +67 -169
  61. package/src/lib/kafe/target/apidocs/kafe/class-use/ITestImplementation.html +58 -154
  62. package/src/lib/kafe/target/apidocs/kafe/class-use/ITestJob.html +57 -162
  63. package/src/lib/kafe/target/apidocs/kafe/class-use/ITestSpecification.html +62 -163
  64. package/src/lib/kafe/target/apidocs/kafe/class-use/IbddInAny.html +31 -117
  65. package/src/lib/kafe/target/apidocs/kafe/class-use/IbddOutAny.html +31 -117
  66. package/src/lib/kafe/target/apidocs/kafe/class-use/Kafe.html +50 -146
  67. package/src/lib/kafe/target/apidocs/kafe/class-use/KafeMain.html +31 -117
  68. package/src/lib/kafe/target/apidocs/kafe/class-use/PatternOverrideFactory.html +31 -117
  69. package/src/lib/kafe/target/apidocs/kafe/class-use/SimpleTestAdapter.html +31 -117
  70. package/src/lib/kafe/target/apidocs/kafe/class-use/TestJobManager.html +31 -117
  71. package/src/lib/kafe/target/apidocs/kafe/package-summary.html +132 -260
  72. package/src/lib/kafe/target/apidocs/kafe/package-tree.html +60 -147
  73. package/src/lib/kafe/target/apidocs/kafe/package-use.html +71 -186
  74. package/src/lib/kafe/target/apidocs/legal/COPYRIGHT +69 -0
  75. package/src/lib/kafe/target/apidocs/legal/LICENSE +118 -0
  76. package/src/lib/kafe/target/apidocs/legal/jquery.md +72 -0
  77. package/src/lib/kafe/target/apidocs/legal/jqueryUI.md +49 -0
  78. package/src/lib/kafe/target/apidocs/member-search-index.js +1 -1
  79. package/src/lib/kafe/target/apidocs/module-search-index.js +1 -0
  80. package/src/lib/kafe/target/apidocs/overview-tree.html +61 -148
  81. package/src/lib/kafe/target/apidocs/package-search-index.js +1 -1
  82. package/src/lib/kafe/target/apidocs/script-dir/jquery-3.5.1.min.js +2 -0
  83. package/src/lib/kafe/target/apidocs/script.js +124 -121
  84. package/src/lib/kafe/target/apidocs/search.js +257 -212
  85. package/src/lib/kafe/target/apidocs/stylesheet.css +558 -452
  86. package/src/lib/kafe/target/apidocs/tag-search-index.js +1 -0
  87. package/src/lib/kafe/target/apidocs/type-search-index.js +1 -1
  88. package/src/lib/kafe/target/classes/kafe/BaseAction.class +0 -0
  89. package/src/lib/kafe/target/classes/kafe/BaseCheck.class +0 -0
  90. package/src/lib/kafe/target/classes/kafe/BaseConfirm.class +0 -0
  91. package/src/lib/kafe/target/classes/kafe/BaseDescribe.class +0 -0
  92. package/src/lib/kafe/target/classes/kafe/BaseExpected.class +0 -0
  93. package/src/lib/kafe/target/classes/kafe/BaseGiven.class +0 -0
  94. package/src/lib/kafe/target/classes/kafe/BaseIt.class +0 -0
  95. package/src/lib/kafe/target/classes/kafe/BaseSetup$1.class +0 -0
  96. package/src/lib/kafe/target/classes/kafe/BaseSetup.class +0 -0
  97. package/src/lib/kafe/target/classes/kafe/BaseShould.class +0 -0
  98. package/src/lib/kafe/target/classes/kafe/BaseSuite.class +0 -0
  99. package/src/lib/kafe/target/classes/kafe/BaseThen.class +0 -0
  100. package/src/lib/kafe/target/classes/kafe/BaseValue.class +0 -0
  101. package/src/lib/kafe/target/classes/kafe/BaseWhen.class +0 -0
  102. package/src/lib/kafe/target/classes/kafe/Default.class +0 -0
  103. package/src/lib/kafe/target/classes/kafe/IFinalResults.class +0 -0
  104. package/src/lib/kafe/target/classes/kafe/ITTestResourceConfiguration.class +0 -0
  105. package/src/lib/kafe/target/classes/kafe/ITTestResourceRequest.class +0 -0
  106. package/src/lib/kafe/target/classes/kafe/ITestAdapter.class +0 -0
  107. package/src/lib/kafe/target/classes/kafe/ITestImplementation.class +0 -0
  108. package/src/lib/kafe/target/classes/kafe/ITestJob.class +0 -0
  109. package/src/lib/kafe/target/classes/kafe/ITestSpecification.class +0 -0
  110. package/src/lib/kafe/target/classes/kafe/IbddInAny.class +0 -0
  111. package/src/lib/kafe/target/classes/kafe/IbddOutAny.class +0 -0
  112. package/src/lib/kafe/target/classes/kafe/Kafe$1.class +0 -0
  113. package/src/lib/kafe/target/classes/kafe/Kafe$2.class +0 -0
  114. package/src/lib/kafe/target/classes/kafe/Kafe$BiFunction.class +0 -0
  115. package/src/lib/kafe/target/classes/kafe/Kafe.class +0 -0
  116. package/src/lib/kafe/target/classes/kafe/KafeMain.class +0 -0
  117. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$1$1.class +0 -0
  118. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$1$2.class +0 -0
  119. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$1.class +0 -0
  120. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$10.class +0 -0
  121. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$2.class +0 -0
  122. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$3.class +0 -0
  123. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$4.class +0 -0
  124. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$5.class +0 -0
  125. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$6.class +0 -0
  126. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$7.class +0 -0
  127. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$8.class +0 -0
  128. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$9.class +0 -0
  129. package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory.class +0 -0
  130. package/src/lib/kafe/target/classes/kafe/SimpleTestAdapter.class +0 -0
  131. package/src/lib/kafe/target/classes/kafe/TestJobManager$1.class +0 -0
  132. package/src/lib/kafe/target/classes/kafe/TestJobManager.class +0 -0
  133. package/src/lib/kafe/target/maven-archiver/pom.properties +1 -1
  134. package/src/lib/kafe/target/maven-javadoc-plugin-stale-data.txt +20 -22
  135. package/src/lib/kafe/target/testeranto.kafe-0.5.0-javadoc.jar +0 -0
  136. package/src/lib/kafe/target/{testeranto.kafe-0.4.0-sources.jar → testeranto.kafe-0.5.0-sources.jar} +0 -0
  137. package/src/lib/kafe/target/testeranto.kafe-0.5.0.jar +0 -0
  138. package/src/lib/rubeno/rubeno.gemspec +1 -1
  139. package/src/lib/rubeno/testeranto.rubeno-0.5.0.gem +0 -0
  140. package/src/lib/rusto/Cargo.lock +1 -1
  141. package/src/lib/rusto/Cargo.toml +1 -1
  142. package/src/lib/tiposkripto/package.json +1 -1
  143. package/src/server/runtimes/README.md +5 -3
  144. package/src/server/runtimes/dockerComposeFile.ts +31 -31
  145. package/src/server/runtimes/golang/main.go +104 -2
  146. package/src/server/runtimes/java/main.java +30 -3
  147. package/src/server/runtimes/node/node.ts +110 -9
  148. package/src/server/runtimes/python/python.py +100 -0
  149. package/src/server/runtimes/ruby/ruby.rb +35 -5
  150. package/src/server/runtimes/rust/main.rs +114 -2
  151. package/src/server/runtimes/web/web.ts +89 -11
  152. package/src/server/serverClasses/Server_Docker.ts +77 -1
  153. package/src/server/serverClasses/Server_GraphManager.ts +16 -89
  154. package/src/server/serverClasses/Server_GraphManagerCore.test.adapter.ts +34 -0
  155. package/src/server/serverClasses/Server_GraphManagerCore.test.implementation.ts +226 -0
  156. package/src/server/serverClasses/Server_GraphManagerCore.test.specification.ts +99 -0
  157. package/src/server/serverClasses/Server_GraphManagerCore.test.ts +19 -0
  158. package/src/server/serverClasses/Server_GraphManagerCore.ts +103 -0
  159. package/src/server/serverClasses/utils/graphFileUtils.ts +52 -0
  160. package/src/server/stakeholder/markdown.ts +9 -5
  161. package/src/vscode/providers/AiderProcessTreeDataProvider.test/AiderProcessTreeDataProvider.test.implementation.ts +171 -2
  162. package/src/vscode/providers/utils/AiderDataGrouperCore.ts +3 -147
  163. package/src/vscode/providers/utils/AiderTreeItemCreatorCore.ts +3 -83
  164. package/testeranto-0.343.0.vsix +0 -0
  165. package/tickets/AiderProcessTreeProvider_testing.md +4 -0
  166. package/tickets/agents.md +3 -1
  167. package/tickets/{vscodeViews.md → archive/vscodeViews.md} +3 -1
  168. package/tickets/chat.md +3 -1
  169. package/tickets/devBuilders.md +61 -0
  170. package/tickets/outputArtifacts.md +61 -0
  171. package/src/lib/kafe/target/apidocs/allclasses.html +0 -55
  172. package/src/lib/kafe/target/apidocs/constant-values.html +0 -149
  173. package/src/lib/kafe/target/apidocs/deprecated-list.html +0 -147
  174. package/src/lib/kafe/target/apidocs/jquery/external/jquery/jquery.js +0 -10872
  175. package/src/lib/kafe/target/apidocs/jquery/jquery-3.5.1.js +0 -10872
  176. package/src/lib/kafe/target/apidocs/jquery/jquery-ui.css +0 -582
  177. package/src/lib/kafe/target/apidocs/jquery/jquery-ui.js +0 -2659
  178. package/src/lib/kafe/target/apidocs/jquery/jquery-ui.structure.css +0 -156
  179. package/src/lib/kafe/target/apidocs/jquery/jszip/dist/jszip.js +0 -11367
  180. package/src/lib/kafe/target/apidocs/jquery/jszip/dist/jszip.min.js +0 -13
  181. package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.js +0 -56
  182. package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js +0 -10
  183. package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js +0 -118
  184. package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils.min.js +0 -10
  185. package/src/lib/kafe/target/apidocs/member-search-index.zip +0 -0
  186. package/src/lib/kafe/target/apidocs/package-search-index.zip +0 -0
  187. package/src/lib/kafe/target/apidocs/type-search-index.zip +0 -0
  188. package/src/lib/kafe/target/testeranto.kafe-0.4.0-javadoc.jar +0 -0
  189. package/src/lib/kafe/target/testeranto.kafe-0.4.0.jar +0 -0
  190. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  191. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_65_dadada_1x400.png +0 -0
  192. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  193. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  194. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  195. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  196. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_222222_256x240.png +0 -0
  197. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_2e83ff_256x240.png +0 -0
  198. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_454545_256x240.png +0 -0
  199. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_888888_256x240.png +0 -0
  200. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_cd0a0a_256x240.png +0 -0
  201. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/jquery-ui.min.css +0 -0
  202. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/jquery-ui.min.js +0 -0
  203. /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/jquery-ui.structure.min.css +0 -0
@@ -8,8 +8,10 @@ import (
8
8
  "fmt"
9
9
  "os"
10
10
  "os/exec"
11
+ "os/signal"
11
12
  "path/filepath"
12
13
  "strings"
14
+ "syscall"
13
15
 
14
16
  // frameworkconverters package is not available in this context
15
17
  // We'll handle native detection directly without the converters
@@ -109,8 +111,18 @@ func main() {
109
111
  testName := args[3]
110
112
  entryPoints := args[4:]
111
113
 
112
- fmt.Printf("Test name: %s\n", testName)
113
- fmt.Printf("Entry points: %v\n", entryPoints)
114
+ // Check if we're in dev mode
115
+ mode := os.Getenv("MODE")
116
+ isDevMode := mode == "dev"
117
+
118
+ fmt.Printf("[Go Builder] Test name: %s\n", testName)
119
+ fmt.Printf("[Go Builder] Entry points: %v\n", entryPoints)
120
+ fmt.Printf("[Go Builder] Mode: %s\n", func() string {
121
+ if isDevMode {
122
+ return "dev"
123
+ }
124
+ return "once"
125
+ }())
114
126
 
115
127
  if len(entryPoints) == 0 {
116
128
  fmt.Fprintln(os.Stderr, "❌ No entry points provided")
@@ -363,6 +375,96 @@ func main() {
363
375
  fmt.Printf("\n✅ Created inputFiles.json at %s with %d tests\n", inputFilesPath, len(allTestsInfo))
364
376
 
365
377
  fmt.Println("\n🎉 Go builder completed successfully")
378
+
379
+ // produceOutputArtifacts copies output files to the output directory
380
+ func produceOutputArtifacts(projectConfigPath, configKey string) {
381
+ fmt.Printf("[Go Builder] Producing output artifacts for config %s\n", configKey)
382
+
383
+ // Load project config
384
+ configFile, err := os.ReadFile(projectConfigPath)
385
+ if err != nil {
386
+ fmt.Printf("[Go Builder] Error loading project config: %v\n", err)
387
+ return
388
+ }
389
+
390
+ var projectConfig map[string]interface{}
391
+ if err := json.Unmarshal(configFile, &projectConfig); err != nil {
392
+ fmt.Printf("[Go Builder] Error parsing project config: %v\n", err)
393
+ return
394
+ }
395
+
396
+ runtimes, ok := projectConfig["runtimes"].(map[string]interface{})
397
+ if !ok {
398
+ fmt.Printf("[Go Builder] No runtimes found in config\n")
399
+ return
400
+ }
401
+
402
+ runtimeConfig, ok := runtimes[configKey].(map[string]interface{})
403
+ if !ok {
404
+ fmt.Printf("[Go Builder] No runtime config found for %s\n", configKey)
405
+ return
406
+ }
407
+
408
+ outputsInterface, ok := runtimeConfig["outputs"].([]interface{})
409
+ if !ok || outputsInterface == nil {
410
+ fmt.Printf("[Go Builder] No outputs defined for %s\n", configKey)
411
+ return
412
+ }
413
+
414
+ fmt.Printf("[Go Builder] Processing %d output artifacts\n", len(outputsInterface))
415
+
416
+ // Create output directory
417
+ outputDir := filepath.Join("testeranto", "outputs", configKey)
418
+ if err := os.MkdirAll(outputDir, 0755); err != nil {
419
+ fmt.Printf("[Go Builder] Error creating output directory: %v\n", err)
420
+ return
421
+ }
422
+
423
+ for _, outputInterface := range outputsInterface {
424
+ entrypoint, ok := outputInterface.(string)
425
+ if !ok {
426
+ continue
427
+ }
428
+
429
+ sourcePath := entrypoint
430
+ fileName := filepath.Base(entrypoint)
431
+ destPath := filepath.Join(outputDir, fileName)
432
+
433
+ fmt.Printf("[Go Builder] Copying %s to %s\n", sourcePath, destPath)
434
+
435
+ // Copy file
436
+ input, err := os.ReadFile(sourcePath)
437
+ if err != nil {
438
+ fmt.Printf("[Go Builder] Failed to read source file %s: %v\n", sourcePath, err)
439
+ continue
440
+ }
441
+
442
+ if err := os.WriteFile(destPath, input, 0644); err != nil {
443
+ fmt.Printf("[Go Builder] Failed to write destination file %s: %v\n", destPath, err)
444
+ continue
445
+ }
446
+
447
+ fmt.Printf("[Go Builder] ✅ Copied %s\n", fileName)
448
+ }
449
+
450
+ fmt.Printf("[Go Builder] Finished producing output artifacts\n")
451
+ }
452
+
453
+ // In dev mode, keep the process alive
454
+ if isDevMode {
455
+ fmt.Println("[Go Builder] Dev mode active - process will stay running")
456
+
457
+ // Set up signal handling
458
+ sigChan := make(chan os.Signal, 1)
459
+ signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
460
+
461
+ // Keep process alive until signal received
462
+ select {
463
+ case sig := <-sigChan:
464
+ fmt.Printf("[Go Builder] Received signal %v - producing output artifacts\n", sig)
465
+ produceOutputArtifacts(args[1], testName)
466
+ }
467
+ }
366
468
  }
367
469
 
368
470
  func getCurrentDir() string {
@@ -25,9 +25,14 @@ public class java_runtime {
25
25
  String testName = args[2];
26
26
  String[] entryPoints = Arrays.copyOfRange(args, 3, args.length);
27
27
 
28
- System.out.println("Java config path: " + javaConfigPath);
29
- System.out.println("Test name: " + testName);
30
- System.out.println("Entry points: " + Arrays.toString(entryPoints));
28
+ // Check if we're in dev mode
29
+ String mode = System.getenv("MODE");
30
+ boolean isDevMode = "dev".equals(mode);
31
+
32
+ System.out.println("[Java Builder] Java config path: " + javaConfigPath);
33
+ System.out.println("[Java Builder] Test name: " + testName);
34
+ System.out.println("[Java Builder] Entry points: " + Arrays.toString(entryPoints));
35
+ System.out.println("[Java Builder] Mode: " + (isDevMode ? "dev" : "once"));
31
36
 
32
37
  // Load Java config file
33
38
  JSONObject javaConfig = loadJavaConfig(Paths.get(javaConfigPath));
@@ -151,6 +156,28 @@ public class java_runtime {
151
156
  System.out.println("\n✅ Created inputFiles.json at " + inputFilesPath + " with " + allTestsInfo.length() + " tests");
152
157
 
153
158
  System.out.println("\n🎉 Java builder completed successfully");
159
+
160
+ // In dev mode, keep the process alive
161
+ if (isDevMode) {
162
+ System.out.println("[Java Builder] Dev mode active - process will stay running");
163
+
164
+ // Add shutdown hook for SIGTERM
165
+ Runtime.getRuntime().addShutdownHook(new Thread() {
166
+ public void run() {
167
+ System.out.println("[Java Builder] Received shutdown signal - shutting down");
168
+ }
169
+ });
170
+
171
+ // Keep process alive
172
+ while (true) {
173
+ try {
174
+ Thread.sleep(1000);
175
+ } catch (InterruptedException e) {
176
+ Thread.currentThread().interrupt();
177
+ break;
178
+ }
179
+ }
180
+ }
154
181
  }
155
182
 
156
183
  private static void createJarFile(String testPath, Path jarPath, JSONObject javaConfig,
@@ -236,10 +236,15 @@ def main():
236
236
  test_name = sys.argv[3]
237
237
  entry_points = sys.argv[4:]
238
238
 
239
+ # Check if we're in dev mode
240
+ import os
241
+ is_dev_mode = os.environ.get('MODE') == 'dev'
242
+
239
243
  print(f"[Python Builder] Project config: {project_config_file_path}")
240
244
  print(f"[Python Builder] Python config: {python_config_file_path}")
241
245
  print(f"[Python Builder] Test name: {test_name}")
242
246
  print(f"[Python Builder] Entry points: {entry_points}")
247
+ print(f"[Python Builder] Mode: {'dev' if is_dev_mode else 'once'}")
243
248
 
244
249
  # Create a dictionary to store all tests' information
245
250
  all_tests_info = {}
@@ -386,6 +391,101 @@ exec(code, {{'__name__': '__main__', '__file__': r'{original_test_abs}'}})
386
391
  print(f"[Python Builder] Wrote inputFiles.json for {len(all_tests_info)} tests to {input_files_path}")
387
392
 
388
393
  print("[Python Builder] Python builder completed")
394
+
395
+ def produce_output_artifacts(project_config_path: str, config_key: str):
396
+ """Produce output artifacts before shutting down."""
397
+ print(f"[Python Builder] Producing output artifacts for config {config_key}")
398
+
399
+ # Load project config
400
+ import json
401
+ try:
402
+ with open(project_config_path, 'r', encoding='utf-8') as f:
403
+ project_config = json.load(f)
404
+ except Exception as e:
405
+ print(f"[Python Builder] Error loading project config: {e}")
406
+ return
407
+
408
+ runtime_config = project_config.get('runtimes', {}).get(config_key)
409
+ if not runtime_config:
410
+ print(f"[Python Builder] No runtime config found for {config_key}")
411
+ return
412
+
413
+ outputs = runtime_config.get('outputs', [])
414
+ if not outputs:
415
+ print(f"[Python Builder] No outputs defined for {config_key}")
416
+ return
417
+
418
+ print(f"[Python Builder] Processing {len(outputs)} output artifacts")
419
+
420
+ # Create output directory
421
+ output_dir = f"testeranto/outputs/{config_key}"
422
+ os.makedirs(output_dir, exist_ok=True)
423
+
424
+ for entrypoint in outputs:
425
+ try:
426
+ source_path = entrypoint
427
+ import shutil
428
+ file_name = os.path.basename(entrypoint)
429
+ dest_path = os.path.join(output_dir, file_name)
430
+
431
+ print(f"[Python Builder] Copying {source_path} to {dest_path}")
432
+
433
+ # Copy file
434
+ shutil.copy2(source_path, dest_path)
435
+
436
+ print(f"[Python Builder] ✅ Copied {file_name}")
437
+ except Exception as e:
438
+ print(f"[Python Builder] Failed to process output artifact {entrypoint}: {e}")
439
+
440
+ print(f"[Python Builder] Finished producing output artifacts")
441
+
442
+ # In dev mode, keep the process alive
443
+ if is_dev_mode:
444
+ print("[Python Builder] Dev mode active - process will stay running")
445
+ import signal
446
+ import time
447
+
448
+ def handle_sigterm(signum, frame):
449
+ print("[Python Builder] Received SIGTERM - producing output artifacts")
450
+ produce_output_artifacts(project_config_file_path, test_name)
451
+ sys.exit(0)
452
+
453
+ def handle_sigint(signum, frame):
454
+ print("[Python Builder] Received SIGINT - producing output artifacts")
455
+ produce_output_artifacts(project_config_file_path, test_name)
456
+ sys.exit(0)
457
+
458
+ signal.signal(signal.SIGTERM, handle_sigterm)
459
+ signal.signal(signal.SIGINT, handle_sigint)
460
+
461
+ # Keep process alive
462
+ while True:
463
+ time.sleep(1)
464
+
465
+ # In dev mode, keep the process alive to watch for changes
466
+ # For now, we'll just keep the process running
467
+ # In a more complete implementation, we would watch for file changes
468
+ if is_dev_mode:
469
+ print("[Python Builder] Dev mode: keeping process alive...")
470
+ # Keep the process alive
471
+ # In a real implementation, we would watch for file changes here
472
+ # For now, just sleep indefinitely until SIGTERM
473
+ import signal
474
+ import time
475
+
476
+ # Signal handler for SIGTERM to produce output artifacts
477
+ def sigterm_handler(signum, frame):
478
+ print("[Python Builder] Received SIGTERM - producing output artifacts")
479
+ # In a real implementation, we would produce output artifacts here
480
+ # For now, just exit
481
+ sys.exit(0)
482
+
483
+ signal.signal(signal.SIGTERM, sigterm_handler)
484
+ signal.signal(signal.SIGINT, sigterm_handler)
485
+
486
+ # Keep alive
487
+ while True:
488
+ time.sleep(1)
389
489
 
390
490
  if __name__ == "__main__":
391
491
  main()
package/dist/ruby/ruby.rb CHANGED
@@ -17,23 +17,32 @@ ruby_config_file_path = ARGV[1]
17
17
  test_name = ARGV[2]
18
18
  entry_points = ARGV[3..-1]
19
19
 
20
+ # Check if we're in dev mode
21
+ is_dev_mode = ENV['MODE'] == 'dev'
22
+
23
+ puts "[Ruby Builder] Project config: #{project_config_file_path}"
24
+ puts "[Ruby Builder] Ruby config: #{ruby_config_file_path}"
25
+ puts "[Ruby Builder] Test name: #{test_name}"
26
+ puts "[Ruby Builder] Entry points: #{entry_points.join(', ')}"
27
+ puts "[Ruby Builder] Mode: #{is_dev_mode ? 'dev' : 'once'}"
28
+
20
29
  # Load and parse configuration if needed
21
30
  begin
22
31
  if File.exist?(project_config_file_path)
23
32
  project_config = JSON.parse(File.read(project_config_file_path))
24
- puts "Loaded project config"
33
+ puts "[Ruby Builder] Loaded project config"
25
34
  end
26
35
  rescue => e
27
- puts "Warning: Could not parse project config: #{e.message}"
36
+ puts "[Ruby Builder] Warning: Could not parse project config: #{e.message}"
28
37
  end
29
38
 
30
39
  begin
31
40
  if File.exist?(ruby_config_file_path)
32
41
  ruby_config = JSON.parse(File.read(ruby_config_file_path))
33
- puts "Loaded Ruby config"
42
+ puts "[Ruby Builder] Loaded Ruby config"
34
43
  end
35
44
  rescue => e
36
- puts "Warning: Could not parse Ruby config: #{e.message}"
45
+ puts "[Ruby Builder] Warning: Could not parse Ruby config: #{e.message}"
37
46
  end
38
47
 
39
48
  # Delegate to native detection
@@ -48,4 +57,25 @@ end
48
57
 
49
58
  # detector.run
50
59
 
51
- puts "Ruby builder completed successfully"
60
+ puts "[Ruby Builder] Ruby builder completed successfully"
61
+
62
+ # In dev mode, keep the process alive
63
+ if is_dev_mode
64
+ puts "[Ruby Builder] Dev mode active - process will stay running"
65
+
66
+ # Signal handler for SIGTERM
67
+ Signal.trap('TERM') do
68
+ puts "[Ruby Builder] Received SIGTERM - shutting down"
69
+ exit 0
70
+ end
71
+
72
+ Signal.trap('INT') do
73
+ puts "[Ruby Builder] Received SIGINT - shutting down"
74
+ exit 0
75
+ end
76
+
77
+ # Keep process alive
78
+ loop do
79
+ sleep 1
80
+ end
81
+ end
package/dist/rust/main.rs CHANGED
@@ -27,8 +27,13 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
27
27
  let config_key = &args[3];
28
28
  let entry_points = &args[4..];
29
29
 
30
- println!("Config key: {}", config_key);
31
- println!("Entry points: {:?}", entry_points);
30
+ // Check if we're in dev mode
31
+ let mode = std::env::var("MODE").unwrap_or_else(|_| "once".to_string());
32
+ let is_dev_mode = mode == "dev";
33
+
34
+ println!("[Rust Builder] Config key: {}", config_key);
35
+ println!("[Rust Builder] Entry points: {:?}", entry_points);
36
+ println!("[Rust Builder] Mode: {}", if is_dev_mode { "dev" } else { "once" });
32
37
 
33
38
  if entry_points.is_empty() {
34
39
  eprintln!("❌ No entry points provided");
@@ -335,6 +340,113 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
335
340
  println!("\n✅ Created inputFiles.json at {:?} with {} tests", input_files_path, all_tests_info.len());
336
341
 
337
342
  println!("\n🎉 Rust builder completed successfully");
343
+
344
+ fn produce_output_artifacts(project_config_path: &str, config_key: &str) {
345
+ println!("[Rust Builder] Producing output artifacts for config {}", config_key);
346
+
347
+ // Load project config
348
+ let config_content = match std::fs::read_to_string(project_config_path) {
349
+ Ok(content) => content,
350
+ Err(e) => {
351
+ println!("[Rust Builder] Error loading project config: {}", e);
352
+ return;
353
+ }
354
+ };
355
+
356
+ let project_config: serde_json::Value = match serde_json::from_str(&config_content) {
357
+ Ok(config) => config,
358
+ Err(e) => {
359
+ println!("[Rust Builder] Error parsing project config: {}", e);
360
+ return;
361
+ }
362
+ };
363
+
364
+ let runtimes = match project_config.get("runtimes") {
365
+ Some(r) => r,
366
+ None => {
367
+ println!("[Rust Builder] No runtimes found in config");
368
+ return;
369
+ }
370
+ };
371
+
372
+ let runtime_config = match runtimes.get(config_key) {
373
+ Some(rc) => rc,
374
+ None => {
375
+ println!("[Rust Builder] No runtime config found for {}", config_key);
376
+ return;
377
+ }
378
+ };
379
+
380
+ let outputs = match runtime_config.get("outputs") {
381
+ Some(o) => o.as_array(),
382
+ None => {
383
+ println!("[Rust Builder] No outputs defined for {}", config_key);
384
+ return;
385
+ }
386
+ };
387
+
388
+ let outputs = match outputs {
389
+ Some(o) => o,
390
+ None => {
391
+ println!("[Rust Builder] Outputs is not an array");
392
+ return;
393
+ }
394
+ };
395
+
396
+ println!("[Rust Builder] Processing {} output artifacts", outputs.len());
397
+
398
+ // Create output directory
399
+ let output_dir = format!("testeranto/outputs/{}", config_key);
400
+ if let Err(e) = std::fs::create_dir_all(&output_dir) {
401
+ println!("[Rust Builder] Error creating output directory: {}", e);
402
+ return;
403
+ }
404
+
405
+ for output in outputs {
406
+ let entrypoint = match output.as_str() {
407
+ Some(s) => s,
408
+ None => continue,
409
+ };
410
+
411
+ let source_path = entrypoint;
412
+ let file_name = match std::path::Path::new(entrypoint).file_name() {
413
+ Some(name) => name.to_string_lossy().to_string(),
414
+ None => continue,
415
+ };
416
+
417
+ let dest_path = format!("{}/{}", output_dir, file_name);
418
+
419
+ println!("[Rust Builder] Copying {} to {}", source_path, dest_path);
420
+
421
+ // Copy file
422
+ if let Err(e) = std::fs::copy(source_path, &dest_path) {
423
+ println!("[Rust Builder] Failed to copy {}: {}", source_path, e);
424
+ continue;
425
+ }
426
+
427
+ println!("[Rust Builder] ✅ Copied {}", file_name);
428
+ }
429
+
430
+ println!("[Rust Builder] Finished producing output artifacts");
431
+ }
432
+
433
+ // In dev mode, keep the process alive
434
+ if is_dev_mode {
435
+ println!("[Rust Builder] Dev mode active - process will stay running");
436
+
437
+ // Set up signal handlers
438
+ ctrlc::set_handler(move || {
439
+ println!("[Rust Builder] Received SIGINT - producing output artifacts");
440
+ produce_output_artifacts(&_project_config_file_path, &config_key);
441
+ std::process::exit(0);
442
+ }).expect("Error setting Ctrl-C handler");
443
+
444
+ // Simple approach: sleep until interrupted
445
+ loop {
446
+ std::thread::sleep(std::time::Duration::from_secs(1));
447
+ }
448
+ }
449
+
338
450
  Ok(())
339
451
  }
340
452
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "testeranto",
3
3
  "displayName": "Testeranto",
4
4
  "description": "the AI powered test framework for polyglot projects",
5
- "version": "0.342.1",
5
+ "version": "0.343.0",
6
6
  "engines": {
7
7
  "node": ">=20.19.0",
8
8
  "vscode": "^1.60.0",
@@ -201,6 +201,11 @@
201
201
  "ATDD"
202
202
  ],
203
203
  "exports": {
204
+ "./src/vscode/defaultViews/index.ts": {
205
+ "import": "./src/vscode/defaultViews/index.ts",
206
+ "require": "./src/vscode/defaultViews/index.ts",
207
+ "types": "./src/vscode/defaultViews/index.ts"
208
+ },
204
209
  "./src/*": {
205
210
  "import": "./src/*"
206
211
  },
@@ -312,7 +317,9 @@
312
317
  "import": "./src/views/index.ts",
313
318
  "require": "./src/views/index.ts"
314
319
  },
315
- "./src/**/*": "./src/**/*.ts"
320
+ "./src/*/*": "./src/*/*.ts",
321
+ "./src/*/*/*": "./src/*/*/*.ts",
322
+ "./src/*/*/*/*": "./src/*/*/*/*.ts"
316
323
  },
317
324
  "peerDependencies": {
318
325
  "@types/react": "18.2.0",
@@ -370,9 +377,7 @@
370
377
  "@types/node-static": "^0.7.11",
371
378
  "@types/xmldom": "^0.1.34",
372
379
  "@ungap/structured-clone": "^1.3.0",
373
- "@xterm/addon-fit": "^0.10.0",
374
380
  "ansi-colors": "^4.1.3",
375
- "axios": "^1.11.0",
376
381
  "babel-loader": "^8.2.5",
377
382
  "bootstrap": "^5.3.7",
378
383
  "bootstrap-icons": "^1.13.1",
@@ -394,47 +399,36 @@
394
399
  "eslint-plugin-import": "^2.31.0",
395
400
  "eslint-plugin-react": "^7.31.11",
396
401
  "eslint-plugin-react-hooks": "^5.1.0",
397
- "express": "^4.21.2",
398
- "fast-xml-parser": "^5.2.5",
399
- "file-saver": "^2.0.5",
400
402
  "fs-extra": "^11.2.0",
401
403
  "fs.promises.exists": "^1.1.4",
402
404
  "glob": "^10.3.10",
403
405
  "graphology": "^0.26.0",
404
406
  "gray-matter": "^4.0.3",
405
- "jiti": "*",
406
407
  "js-yaml": "^4.1.0",
407
408
  "license-checker": "^25.0.1",
408
409
  "mdast-util-frontmatter": "^2.0.1",
409
410
  "micromark": "^4.0.2",
410
411
  "micromark-extension-frontmatter": "^2.0.0",
411
412
  "micromark-extension-gfm-table": "^2.1.1",
412
- "monaco-editor": "^0.45.0",
413
413
  "node-pty": "^1.0.0",
414
414
  "node-static": "^0.7.11",
415
415
  "puppeteer": "^24.4.0",
416
416
  "puppeteer-core": "24.4.0",
417
- "queue": "^7.0.0",
418
417
  "react": "^19.2.4",
419
418
  "react-bootstrap": "^2.10.9",
420
419
  "react-dom": "^19.2.4",
421
420
  "react-router-dom": "^7.7.0",
422
421
  "react-test-renderer": "^19.2.0",
423
422
  "sass": "^1.90.0",
424
- "ssml-check": "^0.4.6",
425
423
  "tsc-prog": "^2.3.0",
426
424
  "tsx": "^4.21.0",
427
- "type-fest": "^4.41.0",
428
425
  "typescript": "^5.9.3",
429
426
  "typescript-eslint": "^8.29.1",
430
427
  "url": "^0.11.4",
431
428
  "uuid": "^10.0.0",
432
429
  "validate-with-xmllint": "^1.2.1",
433
430
  "ws": "^8.18.3",
434
- "xmldom": "^0.6.0",
435
- "xterm": "^5.3.0",
436
- "xterm-addon-fit": "^0.8.0",
437
- "xterm-react": "^1.0.0"
431
+ "xmldom": "^0.6.0"
438
432
  },
439
433
  "optionalDependencies": {
440
434
  "@esbuild/darwin-arm64": "^0.27.2",
@@ -445,4 +439,4 @@
445
439
  "@esbuild/win32-x64": "^0.27.2",
446
440
  "esbuild": "0.27.3"
447
441
  }
448
- }
442
+ }
@@ -7,7 +7,7 @@
7
7
 
8
8
  <groupId>com.testeranto</groupId>
9
9
  <artifactId>testeranto.kafe</artifactId>
10
- <version>0.4.0</version>
10
+ <version>0.5.0</version>
11
11
  <packaging>jar</packaging>
12
12
 
13
13
  <name>Kafe - Java Implementation of Testeranto</name>