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.
- package/dist/golang/main.go +104 -2
- package/dist/java/main.java +30 -3
- package/dist/python/python.py +100 -0
- package/dist/ruby/ruby.rb +35 -5
- package/dist/rust/main.rs +114 -2
- package/package.json +11 -17
- package/src/lib/kafe/pom.xml +1 -1
- package/src/lib/kafe/target/apidocs/allclasses-index.html +108 -255
- package/src/lib/kafe/target/apidocs/allpackages-index.html +34 -131
- package/src/lib/kafe/target/apidocs/copy.svg +33 -0
- package/src/lib/kafe/target/apidocs/help-doc.html +124 -209
- package/src/lib/kafe/target/apidocs/index-all.html +307 -440
- package/src/lib/kafe/target/apidocs/index.html +9 -6
- package/src/lib/kafe/target/apidocs/jquery-ui.overrides.css +34 -0
- package/src/lib/kafe/target/apidocs/kafe/BaseAction.html +234 -417
- package/src/lib/kafe/target/apidocs/kafe/BaseCheck.html +238 -421
- package/src/lib/kafe/target/apidocs/kafe/BaseConfirm.html +194 -351
- package/src/lib/kafe/target/apidocs/kafe/BaseDescribe.html +194 -351
- package/src/lib/kafe/target/apidocs/kafe/BaseExpected.html +161 -309
- package/src/lib/kafe/target/apidocs/kafe/BaseGiven.html +176 -324
- package/src/lib/kafe/target/apidocs/kafe/BaseIt.html +160 -308
- package/src/lib/kafe/target/apidocs/kafe/BaseSetup.html +318 -546
- package/src/lib/kafe/target/apidocs/kafe/BaseShould.html +160 -308
- package/src/lib/kafe/target/apidocs/kafe/BaseSuite.html +273 -485
- package/src/lib/kafe/target/apidocs/kafe/BaseThen.html +179 -334
- package/src/lib/kafe/target/apidocs/kafe/BaseValue.html +194 -351
- package/src/lib/kafe/target/apidocs/kafe/BaseWhen.html +160 -308
- package/src/lib/kafe/target/apidocs/kafe/Default.html +160 -299
- package/src/lib/kafe/target/apidocs/kafe/IFinalResults.html +210 -377
- package/src/lib/kafe/target/apidocs/kafe/ITTestResourceConfiguration.html +180 -340
- package/src/lib/kafe/target/apidocs/kafe/ITTestResourceRequest.html +120 -250
- package/src/lib/kafe/target/apidocs/kafe/ITestAdapter.html +315 -543
- package/src/lib/kafe/target/apidocs/kafe/ITestImplementation.html +246 -431
- package/src/lib/kafe/target/apidocs/kafe/ITestJob.html +116 -233
- package/src/lib/kafe/target/apidocs/kafe/ITestSpecification.html +108 -210
- package/src/lib/kafe/target/apidocs/kafe/IbddInAny.html +56 -143
- package/src/lib/kafe/target/apidocs/kafe/IbddOutAny.html +56 -143
- package/src/lib/kafe/target/apidocs/kafe/Kafe.html +421 -720
- package/src/lib/kafe/target/apidocs/kafe/KafeMain.html +122 -246
- package/src/lib/kafe/target/apidocs/kafe/PatternOverrideFactory.html +198 -367
- package/src/lib/kafe/target/apidocs/kafe/SimpleTestAdapter.html +227 -397
- package/src/lib/kafe/target/apidocs/kafe/TestJobManager.html +130 -259
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseAction.html +63 -170
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseCheck.html +59 -164
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseConfirm.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseDescribe.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseExpected.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseGiven.html +55 -156
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseIt.html +45 -142
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseSetup.html +58 -161
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseShould.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseSuite.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseThen.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseValue.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/BaseWhen.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/Default.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/IFinalResults.html +48 -147
- package/src/lib/kafe/target/apidocs/kafe/class-use/ITTestResourceConfiguration.html +351 -558
- package/src/lib/kafe/target/apidocs/kafe/class-use/ITTestResourceRequest.html +62 -163
- package/src/lib/kafe/target/apidocs/kafe/class-use/ITestAdapter.html +67 -169
- package/src/lib/kafe/target/apidocs/kafe/class-use/ITestImplementation.html +58 -154
- package/src/lib/kafe/target/apidocs/kafe/class-use/ITestJob.html +57 -162
- package/src/lib/kafe/target/apidocs/kafe/class-use/ITestSpecification.html +62 -163
- package/src/lib/kafe/target/apidocs/kafe/class-use/IbddInAny.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/IbddOutAny.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/Kafe.html +50 -146
- package/src/lib/kafe/target/apidocs/kafe/class-use/KafeMain.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/PatternOverrideFactory.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/SimpleTestAdapter.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/class-use/TestJobManager.html +31 -117
- package/src/lib/kafe/target/apidocs/kafe/package-summary.html +132 -260
- package/src/lib/kafe/target/apidocs/kafe/package-tree.html +60 -147
- package/src/lib/kafe/target/apidocs/kafe/package-use.html +71 -186
- package/src/lib/kafe/target/apidocs/legal/COPYRIGHT +69 -0
- package/src/lib/kafe/target/apidocs/legal/LICENSE +118 -0
- package/src/lib/kafe/target/apidocs/legal/jquery.md +72 -0
- package/src/lib/kafe/target/apidocs/legal/jqueryUI.md +49 -0
- package/src/lib/kafe/target/apidocs/member-search-index.js +1 -1
- package/src/lib/kafe/target/apidocs/module-search-index.js +1 -0
- package/src/lib/kafe/target/apidocs/overview-tree.html +61 -148
- package/src/lib/kafe/target/apidocs/package-search-index.js +1 -1
- package/src/lib/kafe/target/apidocs/script-dir/jquery-3.5.1.min.js +2 -0
- package/src/lib/kafe/target/apidocs/script.js +124 -121
- package/src/lib/kafe/target/apidocs/search.js +257 -212
- package/src/lib/kafe/target/apidocs/stylesheet.css +558 -452
- package/src/lib/kafe/target/apidocs/tag-search-index.js +1 -0
- package/src/lib/kafe/target/apidocs/type-search-index.js +1 -1
- package/src/lib/kafe/target/classes/kafe/BaseAction.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseCheck.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseConfirm.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseDescribe.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseExpected.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseGiven.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseIt.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseSetup$1.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseSetup.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseShould.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseSuite.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseThen.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseValue.class +0 -0
- package/src/lib/kafe/target/classes/kafe/BaseWhen.class +0 -0
- package/src/lib/kafe/target/classes/kafe/Default.class +0 -0
- package/src/lib/kafe/target/classes/kafe/IFinalResults.class +0 -0
- package/src/lib/kafe/target/classes/kafe/ITTestResourceConfiguration.class +0 -0
- package/src/lib/kafe/target/classes/kafe/ITTestResourceRequest.class +0 -0
- package/src/lib/kafe/target/classes/kafe/ITestAdapter.class +0 -0
- package/src/lib/kafe/target/classes/kafe/ITestImplementation.class +0 -0
- package/src/lib/kafe/target/classes/kafe/ITestJob.class +0 -0
- package/src/lib/kafe/target/classes/kafe/ITestSpecification.class +0 -0
- package/src/lib/kafe/target/classes/kafe/IbddInAny.class +0 -0
- package/src/lib/kafe/target/classes/kafe/IbddOutAny.class +0 -0
- package/src/lib/kafe/target/classes/kafe/Kafe$1.class +0 -0
- package/src/lib/kafe/target/classes/kafe/Kafe$2.class +0 -0
- package/src/lib/kafe/target/classes/kafe/Kafe$BiFunction.class +0 -0
- package/src/lib/kafe/target/classes/kafe/Kafe.class +0 -0
- package/src/lib/kafe/target/classes/kafe/KafeMain.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$1$1.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$1$2.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$1.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$10.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$2.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$3.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$4.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$5.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$6.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$7.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$8.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory$9.class +0 -0
- package/src/lib/kafe/target/classes/kafe/PatternOverrideFactory.class +0 -0
- package/src/lib/kafe/target/classes/kafe/SimpleTestAdapter.class +0 -0
- package/src/lib/kafe/target/classes/kafe/TestJobManager$1.class +0 -0
- package/src/lib/kafe/target/classes/kafe/TestJobManager.class +0 -0
- package/src/lib/kafe/target/maven-archiver/pom.properties +1 -1
- package/src/lib/kafe/target/maven-javadoc-plugin-stale-data.txt +20 -22
- package/src/lib/kafe/target/testeranto.kafe-0.5.0-javadoc.jar +0 -0
- package/src/lib/kafe/target/{testeranto.kafe-0.4.0-sources.jar → testeranto.kafe-0.5.0-sources.jar} +0 -0
- package/src/lib/kafe/target/testeranto.kafe-0.5.0.jar +0 -0
- package/src/lib/rubeno/rubeno.gemspec +1 -1
- package/src/lib/rubeno/testeranto.rubeno-0.5.0.gem +0 -0
- package/src/lib/rusto/Cargo.lock +1 -1
- package/src/lib/rusto/Cargo.toml +1 -1
- package/src/lib/tiposkripto/package.json +1 -1
- package/src/server/runtimes/README.md +5 -3
- package/src/server/runtimes/dockerComposeFile.ts +31 -31
- package/src/server/runtimes/golang/main.go +104 -2
- package/src/server/runtimes/java/main.java +30 -3
- package/src/server/runtimes/node/node.ts +110 -9
- package/src/server/runtimes/python/python.py +100 -0
- package/src/server/runtimes/ruby/ruby.rb +35 -5
- package/src/server/runtimes/rust/main.rs +114 -2
- package/src/server/runtimes/web/web.ts +89 -11
- package/src/server/serverClasses/Server_Docker.ts +77 -1
- package/src/server/serverClasses/Server_GraphManager.ts +16 -89
- package/src/server/serverClasses/Server_GraphManagerCore.test.adapter.ts +34 -0
- package/src/server/serverClasses/Server_GraphManagerCore.test.implementation.ts +226 -0
- package/src/server/serverClasses/Server_GraphManagerCore.test.specification.ts +99 -0
- package/src/server/serverClasses/Server_GraphManagerCore.test.ts +19 -0
- package/src/server/serverClasses/Server_GraphManagerCore.ts +103 -0
- package/src/server/serverClasses/utils/graphFileUtils.ts +52 -0
- package/src/server/stakeholder/markdown.ts +9 -5
- package/src/vscode/providers/AiderProcessTreeDataProvider.test/AiderProcessTreeDataProvider.test.implementation.ts +171 -2
- package/src/vscode/providers/utils/AiderDataGrouperCore.ts +3 -147
- package/src/vscode/providers/utils/AiderTreeItemCreatorCore.ts +3 -83
- package/testeranto-0.343.0.vsix +0 -0
- package/tickets/AiderProcessTreeProvider_testing.md +4 -0
- package/tickets/agents.md +3 -1
- package/tickets/{vscodeViews.md → archive/vscodeViews.md} +3 -1
- package/tickets/chat.md +3 -1
- package/tickets/devBuilders.md +61 -0
- package/tickets/outputArtifacts.md +61 -0
- package/src/lib/kafe/target/apidocs/allclasses.html +0 -55
- package/src/lib/kafe/target/apidocs/constant-values.html +0 -149
- package/src/lib/kafe/target/apidocs/deprecated-list.html +0 -147
- package/src/lib/kafe/target/apidocs/jquery/external/jquery/jquery.js +0 -10872
- package/src/lib/kafe/target/apidocs/jquery/jquery-3.5.1.js +0 -10872
- package/src/lib/kafe/target/apidocs/jquery/jquery-ui.css +0 -582
- package/src/lib/kafe/target/apidocs/jquery/jquery-ui.js +0 -2659
- package/src/lib/kafe/target/apidocs/jquery/jquery-ui.structure.css +0 -156
- package/src/lib/kafe/target/apidocs/jquery/jszip/dist/jszip.js +0 -11367
- package/src/lib/kafe/target/apidocs/jquery/jszip/dist/jszip.min.js +0 -13
- package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.js +0 -56
- package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js +0 -10
- package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js +0 -118
- package/src/lib/kafe/target/apidocs/jquery/jszip-utils/dist/jszip-utils.min.js +0 -10
- package/src/lib/kafe/target/apidocs/member-search-index.zip +0 -0
- package/src/lib/kafe/target/apidocs/package-search-index.zip +0 -0
- package/src/lib/kafe/target/apidocs/type-search-index.zip +0 -0
- package/src/lib/kafe/target/testeranto.kafe-0.4.0-javadoc.jar +0 -0
- package/src/lib/kafe/target/testeranto.kafe-0.4.0.jar +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_65_dadada_1x400.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_222222_256x240.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_2e83ff_256x240.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_454545_256x240.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_888888_256x240.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/images/ui-icons_cd0a0a_256x240.png +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/jquery-ui.min.css +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/jquery-ui.min.js +0 -0
- /package/src/lib/kafe/target/apidocs/{jquery → script-dir}/jquery-ui.structure.min.css +0 -0
package/dist/golang/main.go
CHANGED
|
@@ -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
|
-
|
|
113
|
-
|
|
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 {
|
package/dist/java/main.java
CHANGED
|
@@ -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
|
-
|
|
29
|
-
System.
|
|
30
|
-
|
|
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,
|
package/dist/python/python.py
CHANGED
|
@@ -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
|
-
|
|
31
|
-
|
|
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.
|
|
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
|
|
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
|
+
}
|