testeranto 0.200.1 → 0.203.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 (740) hide show
  1. package/README.md +49 -1
  2. package/UX/chache/index.md +11 -0
  3. package/design-editor/DesignEditor.tsx +40 -241
  4. package/dist/prebuild/App.css +171 -120
  5. package/dist/prebuild/App.js +47117 -11727
  6. package/dist/prebuild/testeranto.mjs +5048 -2578
  7. package/example/Calculator.go +63 -0
  8. package/example/Calculator.golingvu.adapter.go +81 -0
  9. package/example/Calculator.golingvu.go +67 -0
  10. package/example/Calculator.golingvu.implementation.go +95 -0
  11. package/example/Calculator.golingvu.specification.go +68 -0
  12. package/example/Calculator.pitono.adapter.py +68 -0
  13. package/example/Calculator.pitono.implementation.py +30 -0
  14. package/example/Calculator.pitono.specification.py +154 -0
  15. package/example/Calculator.pitono.test.py +47 -0
  16. package/example/Calculator.py +93 -0
  17. package/example/Calculator.test.adapter.ts +86 -0
  18. package/example/Calculator.test.implementation.ts +82 -0
  19. package/example/Calculator.test.specification.ts +213 -0
  20. package/example/Calculator.test.ts +13 -0
  21. package/example/Calculator.test.types.ts +50 -0
  22. package/example/Calculator.ts +130 -0
  23. package/example/README.md +1 -0
  24. package/example/base_suite_test.go +51 -0
  25. package/example/cmd/main.go +16 -0
  26. package/example/go.mod +9 -0
  27. package/example/main +0 -0
  28. package/example/test_example.py +143 -74
  29. package/example/testeranto/bundles/golang/core/Calculator.golingvu.go +53 -0
  30. package/example/testeranto/metafiles/golang/core.json +198 -0
  31. package/git-integration-plan.md +395 -0
  32. package/go.mod +3 -1
  33. package/golingvu.tmp.txt +68 -0
  34. package/log.txt +85 -0
  35. package/package.json +67 -46
  36. package/scripts/build-example.ts +245 -0
  37. package/src/App.tsx +226 -25
  38. package/src/Helpo.tsx +89 -0
  39. package/src/PM/PM_WithBuild.ts +183 -0
  40. package/src/PM/PM_WithEslintAndTsc.ts +109 -86
  41. package/src/PM/PM_WithGit.ts +632 -0
  42. package/src/PM/PM_WithHelpo.ts +341 -0
  43. package/src/PM/PM_WithProcesses.ts +900 -0
  44. package/src/PM/PM_WithWebSocket.ts +839 -0
  45. package/src/PM/base.ts +63 -1
  46. package/src/PM/golingvuBuild.ts +56 -0
  47. package/src/PM/index.ts +8 -5
  48. package/src/PM/main.ts +735 -1981
  49. package/src/PM/node.ts +18 -18
  50. package/src/PM/pitonoBuild.ts +56 -0
  51. package/src/PM/pure.ts +5 -13
  52. package/src/PM/types.ts +145 -0
  53. package/src/PM/utils.ts +262 -0
  54. package/src/PM/web.ts +8 -8
  55. package/src/README.md +122 -0
  56. package/src/ReportServer.ts +0 -12
  57. package/src/ReportServerLib.ts +0 -147
  58. package/src/Types.ts +1 -0
  59. package/src/app.scss +92 -140
  60. package/src/components/pure/AppFrame.tsx +354 -78
  61. package/src/components/pure/ArtifactTree.tsx +82 -0
  62. package/src/components/pure/BuildLogViewer.tsx +168 -0
  63. package/src/components/pure/DebugEnv.tsx +30 -0
  64. package/src/components/pure/FileTree.tsx +58 -0
  65. package/src/components/pure/FileTreeItem.tsx +49 -0
  66. package/src/components/pure/GitHubLoginButton.tsx +31 -0
  67. package/src/components/pure/GitIntegrationView.tsx +732 -0
  68. package/src/components/pure/HelpoChatDrawer.tsx +222 -0
  69. package/src/components/pure/MagicRobotModal.tsx +136 -0
  70. package/src/components/pure/ProcessDetails.tsx +99 -0
  71. package/src/components/pure/ProcessInput.tsx +67 -0
  72. package/src/components/pure/ProcessList.tsx +89 -0
  73. package/src/components/pure/ProcessLogs.tsx +54 -0
  74. package/src/components/pure/ProcessManager.tsx +38 -46
  75. package/src/components/pure/ProcessManagerView.tsx +44 -373
  76. package/src/components/pure/ProcessManagerViewTypes.ts +10 -0
  77. package/src/components/pure/ProcessSidebar.tsx +88 -0
  78. package/src/components/pure/ProcessTerminal.tsx +51 -0
  79. package/src/components/pure/ProjectPageView.tsx +6 -224
  80. package/src/components/pure/Settings.test.tsx +34 -0
  81. package/src/components/pure/Settings.tsx +163 -0
  82. package/src/components/pure/SignIn.tsx +33 -0
  83. package/src/components/pure/SingleProcessView.tsx +85 -180
  84. package/src/components/pure/TerminalInput.tsx +73 -0
  85. package/src/components/pure/TerminalLogs.tsx +80 -0
  86. package/src/components/pure/TestPageView.test/specification.ts +1 -0
  87. package/src/components/pure/TestPageView.tsx +308 -912
  88. package/src/components/pure/TestPageView_utils.tsx +287 -0
  89. package/src/components/pure/TestTable.tsx +88 -0
  90. package/src/components/pure/ToastNotification.tsx +19 -0
  91. package/src/components/pure/UserProfile.tsx +44 -0
  92. package/src/components/stateful/AuthCallbackPage.tsx +21 -0
  93. package/src/components/stateful/DratoPage.tsx +457 -0
  94. package/src/components/stateful/FeaturesReporter.tsx +3 -1
  95. package/src/components/stateful/FileTree.tsx +58 -58
  96. package/src/components/stateful/GenericXMLEditor/AttributeEditor.tsx +87 -0
  97. package/src/components/stateful/GenericXMLEditor/Drawer.tsx +174 -0
  98. package/src/components/stateful/GenericXMLEditor/GenericPreview.tsx +160 -0
  99. package/src/components/stateful/GenericXMLEditor/GenericTextEditor.tsx +104 -0
  100. package/src/components/stateful/GenericXMLEditor/GenericTree.tsx +104 -0
  101. package/src/components/stateful/GenericXMLEditorPage.tsx +346 -0
  102. package/src/components/stateful/GitIntegrationPage.tsx +263 -0
  103. package/src/components/stateful/GrafeoPage.tsx +563 -0
  104. package/src/components/stateful/ProcessManagerPage.tsx +13 -17
  105. package/src/components/stateful/ProjectPage.tsx +6 -5
  106. package/src/components/stateful/ProjectsPage.tsx +17 -19
  107. package/src/components/stateful/SVGEditor/CircleForm.tsx +68 -0
  108. package/src/components/stateful/SVGEditor/GroupForm.tsx +56 -0
  109. package/src/components/stateful/SVGEditor/RectForm.tsx +74 -0
  110. package/src/components/stateful/SVGEditor/SVGAttributeField.tsx +29 -0
  111. package/src/components/stateful/SVGEditor/SVGAttributesEditor.tsx +91 -0
  112. package/src/components/stateful/SVGEditor/SVGEditorControls.tsx +45 -0
  113. package/src/components/stateful/SVGEditor/SVGElementForm.tsx +45 -0
  114. package/src/components/stateful/SVGEditor/SVGPreview.tsx +227 -0
  115. package/src/components/stateful/SVGEditor/SVGTextEditor.tsx +166 -0
  116. package/src/components/stateful/SVGEditor/SVGTree.tsx +159 -0
  117. package/src/components/stateful/SVGEditor/SVGTypes.ts +36 -0
  118. package/src/components/stateful/SVGEditor/svg.xsd.xml +3038 -0
  119. package/src/components/stateful/SVGEditorPage.tsx +517 -0
  120. package/src/components/stateful/SingleProcessPage.tsx +133 -144
  121. package/src/components/stateful/SkriboPage.tsx +765 -0
  122. package/src/components/stateful/TestPage.tsx +27 -23
  123. package/src/esbuildConfigs/node.ts +1 -1
  124. package/src/example/go.mod +9 -0
  125. package/src/example/main.go +61 -0
  126. package/src/golingvu/PM/golang_test.go +103 -0
  127. package/src/golingvu/README.md +186 -2
  128. package/src/golingvu/base_given.go +89 -2
  129. package/src/golingvu/base_suite.go +48 -2
  130. package/src/golingvu/go.mod +6 -0
  131. package/src/golingvu/golingvu.go +724 -14
  132. package/src/golingvu/types.go +0 -14
  133. package/src/helpo/directives.md +5 -0
  134. package/src/helpo/prompt.txt +38 -0
  135. package/src/hooks/useGitMode.ts +20 -0
  136. package/src/hooks/useTerminalWebSocket.ts +49 -0
  137. package/src/lib/BaseGiven.ts +126 -28
  138. package/src/lib/BaseSuite.test/mock.ts +16 -10
  139. package/src/lib/BaseSuite.test/test.ts +165 -207
  140. package/src/lib/BaseSuite.ts +52 -10
  141. package/src/lib/BaseThen.ts +34 -38
  142. package/src/lib/BaseWhen.ts +9 -2
  143. package/src/lib/Tiposkripto.test/MockTiposkripto.ts +178 -14
  144. package/src/lib/Tiposkripto.test/Tiposkripto.adapter.ts +9 -14
  145. package/src/lib/Tiposkripto.test/Tiposkripto.implementation.ts +78 -38
  146. package/src/lib/Tiposkripto.test/Tiposkripto.specification.ts +51 -8
  147. package/src/lib/Tiposkripto.test/Tiposkripto.types.ts +5 -0
  148. package/src/lib/Tiposkripto.ts +64 -7
  149. package/src/lib/index.ts +7 -0
  150. package/src/lib/pmProxy.test/specification.ts +168 -166
  151. package/src/lib/pmProxy.ts +55 -18
  152. package/src/pitono/PM/python.py +165 -0
  153. package/src/pitono/Pitono.py +298 -0
  154. package/src/pitono/PitonoTest.py +25 -0
  155. package/src/pitono/README.md +21 -0
  156. package/src/pitono/__init__.py +6 -0
  157. package/{pitono → src/pitono}/base_given.py +42 -20
  158. package/{pitono → src/pitono}/base_suite.py +55 -2
  159. package/{pitono → src/pitono}/base_then.py +15 -1
  160. package/{pitono → src/pitono}/base_when.py +15 -1
  161. package/{pitono → src/pitono}/pitono.egg-info/PKG-INFO +25 -0
  162. package/{pitono → src/pitono}/pitono.egg-info/SOURCES.txt +1 -0
  163. package/src/pitono/types.py +87 -0
  164. package/src/services/FileService.ts +677 -0
  165. package/src/services/GitHubAuthService.ts +240 -0
  166. package/src/testeranto.ts +133 -245
  167. package/src/utils/api.ts +15 -13
  168. package/src/utils/gitTest.ts +29 -0
  169. package/src/utils/golingvuMetafile.ts +822 -118
  170. package/src/utils/golingvuWatcher.ts +285 -0
  171. package/src/utils/logFiles.ts +10 -2
  172. package/src/utils/makePrompt.ts +12 -1
  173. package/src/utils/pitonoMetafile.ts +326 -54
  174. package/src/utils/pitonoWatcher.ts +157 -0
  175. package/src/utils.ts +21 -12
  176. package/testeranto/App.css +171 -120
  177. package/testeranto/App.js +47117 -11727
  178. package/testeranto/bundles/node/core/chunk-MJTSYIAQ.mjs +1099 -0
  179. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +58 -1147
  180. package/testeranto/bundles/node/core/src/lib/TipoSkripto.test/TipoSkripto.mjs +572 -0
  181. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +4795 -0
  182. package/testeranto/bundles/pure/core/chunk-6HR24P27.mjs +1003 -0
  183. package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
  184. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +57 -1062
  185. package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
  186. package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
  187. package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
  188. package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
  189. package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
  190. package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
  191. package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
  192. package/testeranto/bundles/web/core/chunk-AZZHJNSU.mjs +30278 -0
  193. package/testeranto/bundles/web/core/chunk-ME6I6FJZ.mjs +3005 -0
  194. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.html +15 -0
  195. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +162 -0
  196. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +11619 -0
  197. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.html +15 -0
  198. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +6924 -0
  199. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +71 -1050
  200. package/testeranto/helpo_chat_history.json +1 -0
  201. package/testeranto/metafiles/golang/core.json +42 -47
  202. package/testeranto/metafiles/node/core.json +584 -125
  203. package/testeranto/metafiles/pure/core.json +152 -51
  204. package/testeranto/metafiles/python/core.json +87 -0
  205. package/testeranto/metafiles/web/core.json +16365 -75
  206. package/testeranto/reports/core/config.json +66 -2
  207. package/testeranto/reports/core/example/Calculator.golingvu/golang/exit.log +1 -0
  208. package/testeranto/reports/core/example/Calculator.golingvu/golang/stderr.log +2 -0
  209. package/testeranto/reports/core/example/Calculator.golingvu/golang/stdout.log +1 -0
  210. package/testeranto/reports/core/example/Calculator.pitono.test/python/exit.log +1 -0
  211. package/testeranto/reports/core/example/Calculator.pitono.test/python/stderr.log +11 -0
  212. package/testeranto/reports/core/example/Calculator.pitono.test/python/stdout.log +1 -0
  213. package/testeranto/reports/core/example/Calculator.test/node/exit.log +1 -0
  214. package/testeranto/reports/core/example/Calculator.test/node/lint_errors.txt +2 -0
  215. package/testeranto/reports/core/example/Calculator.test/node/message.txt +16 -0
  216. package/testeranto/reports/core/example/Calculator.test/node/prompt.txt +13 -0
  217. package/testeranto/reports/core/example/Calculator.test/node/stderr.log +33 -0
  218. package/testeranto/reports/core/example/Calculator.test/node/stdout.log +1076 -0
  219. package/testeranto/reports/core/example/Calculator.test/node/tests.json +1109 -0
  220. package/testeranto/reports/core/example/Calculator.test/node/type_errors.txt +34 -0
  221. package/testeranto/reports/core/example/test_example/python/exit.log +1 -0
  222. package/testeranto/reports/core/example/test_example/python/stderr.log +24 -0
  223. package/testeranto/reports/core/src/Pure.test/pure/message.txt +16 -0
  224. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +13 -0
  225. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +86 -0
  226. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +0 -0
  227. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +0 -0
  228. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/lint_errors.txt +0 -0
  229. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/message.txt +17 -0
  230. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/prompt.txt +26 -0
  231. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/type_errors.txt +69 -0
  232. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  233. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/debug.log +0 -0
  234. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/error.log +0 -0
  235. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/exit.log +0 -0
  236. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/info.log +0 -0
  237. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/lint_errors.txt +16 -0
  238. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/message.txt +17 -0
  239. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/prompt.txt +27 -0
  240. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/type_errors.txt +42 -0
  241. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/warn.log +0 -0
  242. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  243. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +0 -0
  244. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +0 -0
  245. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +0 -0
  246. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +30 -0
  247. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/message.txt +17 -0
  248. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/prompt.txt +30 -0
  249. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +58 -0
  250. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  251. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/exit.log +1 -1
  252. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -6
  253. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +9 -12
  254. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stderr.log +1 -0
  255. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +4 -0
  256. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +99 -8
  257. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +57 -44
  258. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -2
  259. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/message.txt +1 -2
  260. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +4 -16
  261. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +62 -44
  262. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/error.log +0 -1
  263. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/exit.log +0 -1
  264. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -2
  265. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +13 -13
  266. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +57 -44
  267. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/exit.log +1 -0
  268. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/lint_errors.txt +0 -0
  269. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/message.txt +16 -0
  270. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/prompt.txt +13 -0
  271. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stderr.log +88 -0
  272. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stdout.log +521 -0
  273. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/tests.json +166 -0
  274. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/type_errors.txt +78 -0
  275. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  276. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
  277. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  278. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +25 -0
  279. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +0 -0
  280. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +2 -0
  281. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/tests.json +31 -0
  282. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +62 -0
  283. package/testeranto/reports/core/summary.json +66 -11
  284. package/testeranto.config.ts +38 -44
  285. package/tsc.log +141 -91
  286. package/tsconfig.json +6 -2
  287. package/dist/cjs-shim.js +0 -12
  288. package/dist/common/design-editor/DesignEditor.js +0 -242
  289. package/dist/common/design-editor/index.js +0 -18
  290. package/dist/common/design-editor/server.js +0 -98
  291. package/dist/common/design-editor/types.js +0 -2
  292. package/dist/common/package.json +0 -3
  293. package/dist/common/src/App.js +0 -77
  294. package/dist/common/src/CoreTypes.js +0 -2
  295. package/dist/common/src/Init.js +0 -48
  296. package/dist/common/src/Node.js +0 -40
  297. package/dist/common/src/NodeSidecar.js +0 -15
  298. package/dist/common/src/PM/PM_WithEslintAndTsc.js +0 -192
  299. package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +0 -108
  300. package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +0 -93
  301. package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +0 -93
  302. package/dist/common/src/PM/base.js +0 -257
  303. package/dist/common/src/PM/index.js +0 -6
  304. package/dist/common/src/PM/main.js +0 -1815
  305. package/dist/common/src/PM/node.js +0 -185
  306. package/dist/common/src/PM/nodeSidecar.js +0 -65
  307. package/dist/common/src/PM/pitonoRunner.js +0 -54
  308. package/dist/common/src/PM/pure.js +0 -111
  309. package/dist/common/src/PM/pureSidecar.js +0 -48
  310. package/dist/common/src/PM/sidecar.js +0 -11
  311. package/dist/common/src/PM/types.js +0 -1
  312. package/dist/common/src/PM/web.js +0 -112
  313. package/dist/common/src/PM/webSidecar.js +0 -47
  314. package/dist/common/src/Pure.js +0 -52
  315. package/dist/common/src/Pure.test.js +0 -180
  316. package/dist/common/src/PureSidecar.js +0 -13
  317. package/dist/common/src/ReportServer.js +0 -11
  318. package/dist/common/src/ReportServer.test.ts/index.js +0 -78
  319. package/dist/common/src/ReportServerLib.js +0 -141
  320. package/dist/common/src/Types.js +0 -2
  321. package/dist/common/src/Web.js +0 -61
  322. package/dist/common/src/WebSidecar.js +0 -14
  323. package/dist/common/src/components/DesignEditorPage.js +0 -205
  324. package/dist/common/src/components/SunriseAnimation.js +0 -291
  325. package/dist/common/src/components/SunriseAnimation.test/implementation.js +0 -1
  326. package/dist/common/src/components/SunriseAnimation.test/index.js +0 -1
  327. package/dist/common/src/components/SunriseAnimation.test/interface.js +0 -68
  328. package/dist/common/src/components/SunriseAnimation.test/specification.js +0 -1
  329. package/dist/common/src/components/SunriseAnimation.test/types.js +0 -2
  330. package/dist/common/src/components/TestStatusBadge.js +0 -35
  331. package/dist/common/src/components/pure/AppFrame.js +0 -69
  332. package/dist/common/src/components/pure/AppFrame.test/implementation.js +0 -63
  333. package/dist/common/src/components/pure/AppFrame.test/index.js +0 -14
  334. package/dist/common/src/components/pure/AppFrame.test/specification.js +0 -25
  335. package/dist/common/src/components/pure/AppFrame.test/types.js +0 -3
  336. package/dist/common/src/components/pure/FeaturesReporterView.js +0 -23
  337. package/dist/common/src/components/pure/FeaturesReporterView.test/implementation.js +0 -84
  338. package/dist/common/src/components/pure/FeaturesReporterView.test/index.js +0 -14
  339. package/dist/common/src/components/pure/FeaturesReporterView.test/specification.js +0 -27
  340. package/dist/common/src/components/pure/FeaturesReporterView.test/types.js +0 -2
  341. package/dist/common/src/components/pure/ModalContent.js +0 -86
  342. package/dist/common/src/components/pure/ModalContent.test/implementation.js +0 -35
  343. package/dist/common/src/components/pure/ModalContent.test/index.js +0 -58
  344. package/dist/common/src/components/pure/ModalContent.test/specification.js +0 -19
  345. package/dist/common/src/components/pure/ModalContent.test/types.js +0 -4
  346. package/dist/common/src/components/pure/NavBar.js +0 -44
  347. package/dist/common/src/components/pure/ProcessManager.js +0 -112
  348. package/dist/common/src/components/pure/ProcessManagerView.js +0 -237
  349. package/dist/common/src/components/pure/ProjectPageView.js +0 -181
  350. package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +0 -184
  351. package/dist/common/src/components/pure/ProjectPageView.test/index.js +0 -14
  352. package/dist/common/src/components/pure/ProjectPageView.test/specification.js +0 -32
  353. package/dist/common/src/components/pure/ProjectPageView.test/types.js +0 -4
  354. package/dist/common/src/components/pure/ProjectsPageView.js +0 -72
  355. package/dist/common/src/components/pure/SettingsButton.js +0 -13
  356. package/dist/common/src/components/pure/SingleProcessView.js +0 -214
  357. package/dist/common/src/components/pure/TestPageView.js +0 -628
  358. package/dist/common/src/components/pure/TestPageView.test/implementation.js +0 -157
  359. package/dist/common/src/components/pure/TestPageView.test/index.js +0 -15
  360. package/dist/common/src/components/pure/TestPageView.test/specification.js +0 -26
  361. package/dist/common/src/components/pure/TestPageView.test/types.js +0 -4
  362. package/dist/common/src/components/pure/ThemeCard.js +0 -15
  363. package/dist/common/src/components/stateful/FeaturesReporter.js +0 -59
  364. package/dist/common/src/components/stateful/FileTree.js +0 -40
  365. package/dist/common/src/components/stateful/ProcessManagerPage.js +0 -112
  366. package/dist/common/src/components/stateful/ProjectPage.js +0 -101
  367. package/dist/common/src/components/stateful/ProjectsPage.js +0 -118
  368. package/dist/common/src/components/stateful/SettingsPage.js +0 -72
  369. package/dist/common/src/components/stateful/SingleProcessPage.js +0 -147
  370. package/dist/common/src/components/stateful/TestPage.js +0 -268
  371. package/dist/common/src/components/stateful/TextEditorPage.js +0 -154
  372. package/dist/common/src/defaultConfig.js +0 -19
  373. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +0 -38
  374. package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -21
  375. package/dist/common/src/esbuildConfigs/featuresPlugin.js +0 -39
  376. package/dist/common/src/esbuildConfigs/index.js +0 -21
  377. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -30
  378. package/dist/common/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -24
  379. package/dist/common/src/esbuildConfigs/node.js +0 -24
  380. package/dist/common/src/esbuildConfigs/pure.js +0 -42
  381. package/dist/common/src/esbuildConfigs/rebuildPlugin.js +0 -19
  382. package/dist/common/src/esbuildConfigs/web.js +0 -48
  383. package/dist/common/src/init-docs.js +0 -9
  384. package/dist/common/src/lib/BaseGiven.js +0 -99
  385. package/dist/common/src/lib/BaseSuite.js +0 -91
  386. package/dist/common/src/lib/BaseSuite.test/mock.js +0 -61
  387. package/dist/common/src/lib/BaseSuite.test/node.test.js +0 -10
  388. package/dist/common/src/lib/BaseSuite.test/pure.test.js +0 -10
  389. package/dist/common/src/lib/BaseSuite.test/test.js +0 -253
  390. package/dist/common/src/lib/BaseSuite.test/web.test.js +0 -10
  391. package/dist/common/src/lib/BaseThen.js +0 -64
  392. package/dist/common/src/lib/BaseWhen.js +0 -45
  393. package/dist/common/src/lib/Sidecar.js +0 -7
  394. package/dist/common/src/lib/Tiposkripto.js +0 -149
  395. package/dist/common/src/lib/Tiposkripto.test/MockTiposkripto.js +0 -36
  396. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +0 -35
  397. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +0 -173
  398. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.js +0 -11
  399. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.specification.js +0 -42
  400. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.types.js +0 -2
  401. package/dist/common/src/lib/abstractBase.test/MockGiven.js +0 -24
  402. package/dist/common/src/lib/abstractBase.test/MockThen.js +0 -16
  403. package/dist/common/src/lib/abstractBase.test/MockWhen.js +0 -20
  404. package/dist/common/src/lib/abstractBase.test/adapter.js +0 -24
  405. package/dist/common/src/lib/abstractBase.test/implementation.js +0 -38
  406. package/dist/common/src/lib/abstractBase.test/index.js +0 -18
  407. package/dist/common/src/lib/abstractBase.test/specification.js +0 -19
  408. package/dist/common/src/lib/abstractBase.test/types.js +0 -2
  409. package/dist/common/src/lib/index.js +0 -31
  410. package/dist/common/src/lib/pmProxy.js +0 -293
  411. package/dist/common/src/lib/pmProxy.test/adapter.js +0 -54
  412. package/dist/common/src/lib/pmProxy.test/implementation.js +0 -137
  413. package/dist/common/src/lib/pmProxy.test/index.js +0 -15
  414. package/dist/common/src/lib/pmProxy.test/mockPM.js +0 -34
  415. package/dist/common/src/lib/pmProxy.test/mockPMBase.js +0 -131
  416. package/dist/common/src/lib/pmProxy.test/specification.js +0 -64
  417. package/dist/common/src/lib/pmProxy.test/types.js +0 -2
  418. package/dist/common/src/lib/types.js +0 -3
  419. package/dist/common/src/mothership/index.js +0 -21
  420. package/dist/common/src/mothership/test.js +0 -83
  421. package/dist/common/src/run.js +0 -49
  422. package/dist/common/src/testeranto.js +0 -283
  423. package/dist/common/src/types/features.js +0 -34
  424. package/dist/common/src/utils/api.js +0 -89
  425. package/dist/common/src/utils/buildTemplates.js +0 -37
  426. package/dist/common/src/utils/featureUtils.js +0 -29
  427. package/dist/common/src/utils/golingvuMetafile.js +0 -116
  428. package/dist/common/src/utils/logFiles.js +0 -52
  429. package/dist/common/src/utils/makePrompt.js +0 -116
  430. package/dist/common/src/utils/pitonoMetafile.js +0 -67
  431. package/dist/common/src/utils/queue.js +0 -36
  432. package/dist/common/src/utils.js +0 -133
  433. package/dist/common/src/web.html.js +0 -18
  434. package/dist/common/testeranto.config.js +0 -98
  435. package/dist/common/tsconfig.common.tsbuildinfo +0 -1
  436. package/dist/module/design-editor/DesignEditor.js +0 -206
  437. package/dist/module/design-editor/index.js +0 -2
  438. package/dist/module/design-editor/server.js +0 -92
  439. package/dist/module/design-editor/types.js +0 -1
  440. package/dist/module/package.json +0 -3
  441. package/dist/module/src/App.js +0 -70
  442. package/dist/module/src/CoreTypes.js +0 -1
  443. package/dist/module/src/Init.js +0 -43
  444. package/dist/module/src/Node.js +0 -33
  445. package/dist/module/src/NodeSidecar.js +0 -11
  446. package/dist/module/src/PM/PM_WithEslintAndTsc.js +0 -185
  447. package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +0 -103
  448. package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +0 -88
  449. package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +0 -88
  450. package/dist/module/src/PM/base.js +0 -250
  451. package/dist/module/src/PM/index.js +0 -2
  452. package/dist/module/src/PM/main.js +0 -1775
  453. package/dist/module/src/PM/node.js +0 -178
  454. package/dist/module/src/PM/nodeSidecar.js +0 -58
  455. package/dist/module/src/PM/pitonoRunner.js +0 -47
  456. package/dist/module/src/PM/pure.js +0 -107
  457. package/dist/module/src/PM/pureSidecar.js +0 -41
  458. package/dist/module/src/PM/sidecar.js +0 -7
  459. package/dist/module/src/PM/types.js +0 -1
  460. package/dist/module/src/PM/web.js +0 -108
  461. package/dist/module/src/PM/webSidecar.js +0 -40
  462. package/dist/module/src/Pure.js +0 -45
  463. package/dist/module/src/Pure.test.js +0 -175
  464. package/dist/module/src/PureSidecar.js +0 -9
  465. package/dist/module/src/ReportServer.js +0 -9
  466. package/dist/module/src/ReportServer.test.ts/index.js +0 -73
  467. package/dist/module/src/ReportServerLib.js +0 -134
  468. package/dist/module/src/Types.js +0 -1
  469. package/dist/module/src/Web.js +0 -54
  470. package/dist/module/src/WebSidecar.js +0 -10
  471. package/dist/module/src/components/DesignEditorPage.js +0 -168
  472. package/dist/module/src/components/SunriseAnimation.js +0 -256
  473. package/dist/module/src/components/SunriseAnimation.test/implementation.js +0 -1
  474. package/dist/module/src/components/SunriseAnimation.test/index.js +0 -1
  475. package/dist/module/src/components/SunriseAnimation.test/interface.js +0 -32
  476. package/dist/module/src/components/SunriseAnimation.test/specification.js +0 -1
  477. package/dist/module/src/components/SunriseAnimation.test/types.js +0 -1
  478. package/dist/module/src/components/TestStatusBadge.js +0 -28
  479. package/dist/module/src/components/pure/AppFrame.js +0 -32
  480. package/dist/module/src/components/pure/AppFrame.test/implementation.js +0 -57
  481. package/dist/module/src/components/pure/AppFrame.test/index.js +0 -9
  482. package/dist/module/src/components/pure/AppFrame.test/specification.js +0 -21
  483. package/dist/module/src/components/pure/AppFrame.test/types.js +0 -2
  484. package/dist/module/src/components/pure/FeaturesReporterView.js +0 -16
  485. package/dist/module/src/components/pure/FeaturesReporterView.test/implementation.js +0 -81
  486. package/dist/module/src/components/pure/FeaturesReporterView.test/index.js +0 -9
  487. package/dist/module/src/components/pure/FeaturesReporterView.test/specification.js +0 -23
  488. package/dist/module/src/components/pure/FeaturesReporterView.test/types.js +0 -1
  489. package/dist/module/src/components/pure/ModalContent.js +0 -79
  490. package/dist/module/src/components/pure/ModalContent.test/implementation.js +0 -32
  491. package/dist/module/src/components/pure/ModalContent.test/index.js +0 -53
  492. package/dist/module/src/components/pure/ModalContent.test/specification.js +0 -15
  493. package/dist/module/src/components/pure/ModalContent.test/types.js +0 -3
  494. package/dist/module/src/components/pure/NavBar.js +0 -37
  495. package/dist/module/src/components/pure/ProcessManager.js +0 -75
  496. package/dist/module/src/components/pure/ProcessManagerView.js +0 -200
  497. package/dist/module/src/components/pure/ProjectPageView.js +0 -174
  498. package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +0 -181
  499. package/dist/module/src/components/pure/ProjectPageView.test/index.js +0 -9
  500. package/dist/module/src/components/pure/ProjectPageView.test/specification.js +0 -28
  501. package/dist/module/src/components/pure/ProjectPageView.test/types.js +0 -3
  502. package/dist/module/src/components/pure/ProjectsPageView.js +0 -65
  503. package/dist/module/src/components/pure/SettingsButton.js +0 -6
  504. package/dist/module/src/components/pure/SingleProcessView.js +0 -214
  505. package/dist/module/src/components/pure/TestPageView.js +0 -591
  506. package/dist/module/src/components/pure/TestPageView.test/implementation.js +0 -121
  507. package/dist/module/src/components/pure/TestPageView.test/index.js +0 -10
  508. package/dist/module/src/components/pure/TestPageView.test/specification.js +0 -22
  509. package/dist/module/src/components/pure/TestPageView.test/types.js +0 -3
  510. package/dist/module/src/components/pure/ThemeCard.js +0 -8
  511. package/dist/module/src/components/stateful/FeaturesReporter.js +0 -22
  512. package/dist/module/src/components/stateful/FileTree.js +0 -33
  513. package/dist/module/src/components/stateful/ProcessManagerPage.js +0 -75
  514. package/dist/module/src/components/stateful/ProjectPage.js +0 -64
  515. package/dist/module/src/components/stateful/ProjectsPage.js +0 -81
  516. package/dist/module/src/components/stateful/SettingsPage.js +0 -35
  517. package/dist/module/src/components/stateful/SingleProcessPage.js +0 -110
  518. package/dist/module/src/components/stateful/TestPage.js +0 -231
  519. package/dist/module/src/components/stateful/TextEditorPage.js +0 -117
  520. package/dist/module/src/defaultConfig.js +0 -17
  521. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +0 -32
  522. package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -18
  523. package/dist/module/src/esbuildConfigs/featuresPlugin.js +0 -34
  524. package/dist/module/src/esbuildConfigs/index.js +0 -19
  525. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -25
  526. package/dist/module/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -21
  527. package/dist/module/src/esbuildConfigs/node.js +0 -19
  528. package/dist/module/src/esbuildConfigs/pure.js +0 -37
  529. package/dist/module/src/esbuildConfigs/rebuildPlugin.js +0 -14
  530. package/dist/module/src/esbuildConfigs/web.js +0 -43
  531. package/dist/module/src/init-docs.js +0 -4
  532. package/dist/module/src/lib/BaseGiven.js +0 -95
  533. package/dist/module/src/lib/BaseSuite.js +0 -87
  534. package/dist/module/src/lib/BaseSuite.test/mock.js +0 -54
  535. package/dist/module/src/lib/BaseSuite.test/node.test.js +0 -5
  536. package/dist/module/src/lib/BaseSuite.test/pure.test.js +0 -5
  537. package/dist/module/src/lib/BaseSuite.test/test.js +0 -249
  538. package/dist/module/src/lib/BaseSuite.test/web.test.js +0 -5
  539. package/dist/module/src/lib/BaseThen.js +0 -60
  540. package/dist/module/src/lib/BaseWhen.js +0 -41
  541. package/dist/module/src/lib/Sidecar.js +0 -3
  542. package/dist/module/src/lib/Tiposkripto.js +0 -146
  543. package/dist/module/src/lib/Tiposkripto.test/MockTiposkripto.js +0 -29
  544. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +0 -32
  545. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +0 -170
  546. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.js +0 -6
  547. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.specification.js +0 -38
  548. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.types.js +0 -1
  549. package/dist/module/src/lib/abstractBase.test/MockGiven.js +0 -20
  550. package/dist/module/src/lib/abstractBase.test/MockThen.js +0 -12
  551. package/dist/module/src/lib/abstractBase.test/MockWhen.js +0 -16
  552. package/dist/module/src/lib/abstractBase.test/adapter.js +0 -21
  553. package/dist/module/src/lib/abstractBase.test/implementation.js +0 -35
  554. package/dist/module/src/lib/abstractBase.test/index.js +0 -13
  555. package/dist/module/src/lib/abstractBase.test/specification.js +0 -15
  556. package/dist/module/src/lib/abstractBase.test/types.js +0 -1
  557. package/dist/module/src/lib/index.js +0 -26
  558. package/dist/module/src/lib/pmProxy.js +0 -284
  559. package/dist/module/src/lib/pmProxy.test/adapter.js +0 -51
  560. package/dist/module/src/lib/pmProxy.test/implementation.js +0 -134
  561. package/dist/module/src/lib/pmProxy.test/index.js +0 -10
  562. package/dist/module/src/lib/pmProxy.test/mockPM.js +0 -30
  563. package/dist/module/src/lib/pmProxy.test/mockPMBase.js +0 -127
  564. package/dist/module/src/lib/pmProxy.test/specification.js +0 -60
  565. package/dist/module/src/lib/pmProxy.test/types.js +0 -1
  566. package/dist/module/src/lib/types.js +0 -2
  567. package/dist/module/src/mothership/index.js +0 -16
  568. package/dist/module/src/mothership/test.js +0 -78
  569. package/dist/module/src/run.js +0 -49
  570. package/dist/module/src/testeranto.js +0 -245
  571. package/dist/module/src/types/features.js +0 -31
  572. package/dist/module/src/utils/api.js +0 -84
  573. package/dist/module/src/utils/buildTemplates.js +0 -33
  574. package/dist/module/src/utils/featureUtils.js +0 -24
  575. package/dist/module/src/utils/golingvuMetafile.js +0 -109
  576. package/dist/module/src/utils/logFiles.js +0 -47
  577. package/dist/module/src/utils/makePrompt.js +0 -109
  578. package/dist/module/src/utils/pitonoMetafile.js +0 -60
  579. package/dist/module/src/utils/queue.js +0 -32
  580. package/dist/module/src/utils.js +0 -121
  581. package/dist/module/src/web.html.js +0 -16
  582. package/dist/module/testeranto.config.js +0 -96
  583. package/dist/module/tsconfig.module.tsbuildinfo +0 -1
  584. package/dist/types/design-editor/DesignEditor.d.ts +0 -18
  585. package/dist/types/design-editor/server.d.ts +0 -1
  586. package/dist/types/src/App.d.ts +0 -1
  587. package/dist/types/src/CoreTypes.d.ts +0 -52
  588. package/dist/types/src/Init.d.ts +0 -2
  589. package/dist/types/src/Node.d.ts +0 -9
  590. package/dist/types/src/NodeSidecar.d.ts +0 -6
  591. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +0 -24
  592. package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +0 -2
  593. package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +0 -2
  594. package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +0 -2
  595. package/dist/types/src/PM/base.d.ts +0 -35
  596. package/dist/types/src/PM/index.d.ts +0 -37
  597. package/dist/types/src/PM/main.d.ts +0 -79
  598. package/dist/types/src/PM/node.d.ts +0 -40
  599. package/dist/types/src/PM/nodeSidecar.d.ts +0 -13
  600. package/dist/types/src/PM/pitonoRunner.d.ts +0 -7
  601. package/dist/types/src/PM/pure.d.ts +0 -43
  602. package/dist/types/src/PM/pureSidecar.d.ts +0 -11
  603. package/dist/types/src/PM/sidecar.d.ts +0 -8
  604. package/dist/types/src/PM/web.d.ts +0 -43
  605. package/dist/types/src/PM/webSidecar.d.ts +0 -11
  606. package/dist/types/src/Pure.d.ts +0 -9
  607. package/dist/types/src/Pure.test.d.ts +0 -2
  608. package/dist/types/src/PureSidecar.d.ts +0 -8
  609. package/dist/types/src/ReportServer.d.ts +0 -1
  610. package/dist/types/src/ReportServer.test.ts/index.d.ts +0 -2
  611. package/dist/types/src/ReportServerLib.d.ts +0 -1
  612. package/dist/types/src/Types.d.ts +0 -118
  613. package/dist/types/src/Web.d.ts +0 -9
  614. package/dist/types/src/WebSidecar.d.ts +0 -8
  615. package/dist/types/src/components/DesignEditorPage.d.ts +0 -1
  616. package/dist/types/src/components/SunriseAnimation.d.ts +0 -5
  617. package/dist/types/src/components/SunriseAnimation.test/interface.d.ts +0 -11
  618. package/dist/types/src/components/SunriseAnimation.test/types.d.ts +0 -39
  619. package/dist/types/src/components/TestStatusBadge.d.ts +0 -15
  620. package/dist/types/src/components/pure/AppFrame.d.ts +0 -11
  621. package/dist/types/src/components/pure/AppFrame.test/implementation.d.ts +0 -3
  622. package/dist/types/src/components/pure/AppFrame.test/index.d.ts +0 -3
  623. package/dist/types/src/components/pure/AppFrame.test/specification.d.ts +0 -3
  624. package/dist/types/src/components/pure/AppFrame.test/types.d.ts +0 -33
  625. package/dist/types/src/components/pure/FeaturesReporterView.d.ts +0 -7
  626. package/dist/types/src/components/pure/FeaturesReporterView.test/implementation.d.ts +0 -3
  627. package/dist/types/src/components/pure/FeaturesReporterView.test/index.d.ts +0 -2
  628. package/dist/types/src/components/pure/FeaturesReporterView.test/specification.d.ts +0 -3
  629. package/dist/types/src/components/pure/FeaturesReporterView.test/types.d.ts +0 -54
  630. package/dist/types/src/components/pure/ModalContent.d.ts +0 -7
  631. package/dist/types/src/components/pure/ModalContent.test/implementation.d.ts +0 -3
  632. package/dist/types/src/components/pure/ModalContent.test/index.d.ts +0 -2
  633. package/dist/types/src/components/pure/ModalContent.test/specification.d.ts +0 -3
  634. package/dist/types/src/components/pure/ModalContent.test/types.d.ts +0 -45
  635. package/dist/types/src/components/pure/NavBar.d.ts +0 -23
  636. package/dist/types/src/components/pure/ProcessManager.d.ts +0 -8
  637. package/dist/types/src/components/pure/ProcessManagerView.d.ts +0 -20
  638. package/dist/types/src/components/pure/ProjectPageView.d.ts +0 -14
  639. package/dist/types/src/components/pure/ProjectPageView.test/implementation.d.ts +0 -3
  640. package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +0 -2
  641. package/dist/types/src/components/pure/ProjectPageView.test/specification.d.ts +0 -3
  642. package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +0 -57
  643. package/dist/types/src/components/pure/ProjectsPageView.d.ts +0 -29
  644. package/dist/types/src/components/pure/SettingsButton.d.ts +0 -2
  645. package/dist/types/src/components/pure/TestPageView.d.ts +0 -15
  646. package/dist/types/src/components/pure/TestPageView.test/implementation.d.ts +0 -12
  647. package/dist/types/src/components/pure/TestPageView.test/index.d.ts +0 -3
  648. package/dist/types/src/components/pure/TestPageView.test/specification.d.ts +0 -11
  649. package/dist/types/src/components/pure/TestPageView.test/types.d.ts +0 -65
  650. package/dist/types/src/components/pure/ThemeCard.d.ts +0 -9
  651. package/dist/types/src/components/stateful/FeaturesReporter.d.ts +0 -2
  652. package/dist/types/src/components/stateful/FileTree.d.ts +0 -8
  653. package/dist/types/src/components/stateful/ProcessManagerPage.d.ts +0 -2
  654. package/dist/types/src/components/stateful/ProjectPage.d.ts +0 -1
  655. package/dist/types/src/components/stateful/ProjectsPage.d.ts +0 -1
  656. package/dist/types/src/components/stateful/SettingsPage.d.ts +0 -2
  657. package/dist/types/src/components/stateful/SingleProcessPage.d.ts +0 -2
  658. package/dist/types/src/components/stateful/TestPage.d.ts +0 -1
  659. package/dist/types/src/components/stateful/TextEditorPage.d.ts +0 -1
  660. package/dist/types/src/defaultConfig.d.ts +0 -3
  661. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +0 -2
  662. package/dist/types/src/esbuildConfigs/eslint-formatter-testeranto.d.ts +0 -2
  663. package/dist/types/src/esbuildConfigs/featuresPlugin.d.ts +0 -5
  664. package/dist/types/src/esbuildConfigs/index.d.ts +0 -4
  665. package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +0 -7
  666. package/dist/types/src/esbuildConfigs/nativeImportDetectorPlugin.d.ts +0 -2
  667. package/dist/types/src/esbuildConfigs/node.d.ts +0 -4
  668. package/dist/types/src/esbuildConfigs/pure.d.ts +0 -4
  669. package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +0 -6
  670. package/dist/types/src/esbuildConfigs/web.d.ts +0 -4
  671. package/dist/types/src/init-docs.d.ts +0 -1
  672. package/dist/types/src/lib/BaseGiven.d.ts +0 -44
  673. package/dist/types/src/lib/BaseSuite.d.ts +0 -46
  674. package/dist/types/src/lib/BaseSuite.test/mock.d.ts +0 -21
  675. package/dist/types/src/lib/BaseSuite.test/node.test.d.ts +0 -2
  676. package/dist/types/src/lib/BaseSuite.test/pure.test.d.ts +0 -2
  677. package/dist/types/src/lib/BaseSuite.test/test.d.ts +0 -36
  678. package/dist/types/src/lib/BaseSuite.test/web.test.d.ts +0 -2
  679. package/dist/types/src/lib/BaseThen.d.ts +0 -27
  680. package/dist/types/src/lib/BaseWhen.d.ts +0 -27
  681. package/dist/types/src/lib/Sidecar.d.ts +0 -5
  682. package/dist/types/src/lib/Tiposkripto.d.ts +0 -35
  683. package/dist/types/src/lib/Tiposkripto.test/MockTiposkripto.d.ts +0 -15
  684. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.adapter.d.ts +0 -3
  685. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.d.ts +0 -2
  686. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.implementation.d.ts +0 -3
  687. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.specification.d.ts +0 -3
  688. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.types.d.ts +0 -53
  689. package/dist/types/src/lib/abstractBase.test/MockGiven.d.ts +0 -9
  690. package/dist/types/src/lib/abstractBase.test/MockThen.d.ts +0 -6
  691. package/dist/types/src/lib/abstractBase.test/MockWhen.d.ts +0 -6
  692. package/dist/types/src/lib/abstractBase.test/adapter.d.ts +0 -3
  693. package/dist/types/src/lib/abstractBase.test/implementation.d.ts +0 -3
  694. package/dist/types/src/lib/abstractBase.test/index.d.ts +0 -2
  695. package/dist/types/src/lib/abstractBase.test/specification.d.ts +0 -3
  696. package/dist/types/src/lib/abstractBase.test/types.d.ts +0 -39
  697. package/dist/types/src/lib/index.d.ts +0 -67
  698. package/dist/types/src/lib/pmProxy.d.ts +0 -12
  699. package/dist/types/src/lib/pmProxy.test/adapter.d.ts +0 -3
  700. package/dist/types/src/lib/pmProxy.test/implementation.d.ts +0 -3
  701. package/dist/types/src/lib/pmProxy.test/index.d.ts +0 -6
  702. package/dist/types/src/lib/pmProxy.test/mockPM.d.ts +0 -10
  703. package/dist/types/src/lib/pmProxy.test/mockPMBase.d.ts +0 -40
  704. package/dist/types/src/lib/pmProxy.test/specification.d.ts +0 -3
  705. package/dist/types/src/lib/pmProxy.test/types.d.ts +0 -42
  706. package/dist/types/src/lib/types.d.ts +0 -24
  707. package/dist/types/src/mothership/index.d.ts +0 -2
  708. package/dist/types/src/mothership/test.d.ts +0 -2
  709. package/dist/types/src/testeranto.d.ts +0 -1
  710. package/dist/types/src/types/features.d.ts +0 -7
  711. package/dist/types/src/utils/api.d.ts +0 -9
  712. package/dist/types/src/utils/buildTemplates.d.ts +0 -1
  713. package/dist/types/src/utils/featureUtils.d.ts +0 -6
  714. package/dist/types/src/utils/golingvuMetafile.d.ts +0 -19
  715. package/dist/types/src/utils/logFiles.d.ts +0 -75
  716. package/dist/types/src/utils/makePrompt.d.ts +0 -2
  717. package/dist/types/src/utils/pitonoMetafile.d.ts +0 -7
  718. package/dist/types/src/utils/queue.d.ts +0 -11
  719. package/dist/types/src/utils.d.ts +0 -20
  720. package/dist/types/src/web.html.d.ts +0 -2
  721. package/dist/types/tsconfig.types.tsbuildinfo +0 -1
  722. package/pitono/__init__.py +0 -54
  723. package/pitono/types.py +0 -78
  724. package/src/golingvu/base_suite_test.go +0 -197
  725. package/src/templates/frontpage.html +0 -340
  726. package/src/templates/frontpage.md +0 -79
  727. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +0 -29
  728. /package/{pitono → src/pitono}/core_generator.py +0 -0
  729. /package/{pitono → src/pitono}/pitono.egg-info/dependency_links.txt +0 -0
  730. /package/{pitono → src/pitono}/pitono.egg-info/entry_points.txt +0 -0
  731. /package/{pitono → src/pitono}/pitono.egg-info/top_level.txt +0 -0
  732. /package/{pitono → src/pitono}/pyproject.toml +0 -0
  733. /package/{pitono → src/pitono}/setup.py +0 -0
  734. /package/{pitono → src/pitono}/simple_adapter.py +0 -0
  735. /package/{dist/types/src/PM/types.d.ts → testeranto/helpo_chat_message.txt} +0 -0
  736. /package/{dist/types/src/components/SunriseAnimation.test/implementation.d.ts → testeranto/reports/core/example/test_example/python/stdout.log} +0 -0
  737. /package/{dist/types/src/components/SunriseAnimation.test/index.d.ts → testeranto/reports/core/src/Pure.test/pure/exit.log} +0 -0
  738. /package/{dist/types/src/components/SunriseAnimation.test/specification.d.ts → testeranto/reports/core/src/Pure.test/pure/lint_errors.txt} +0 -0
  739. /package/{dist/types/src/components/pure/SingleProcessView.d.ts → testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log} +0 -0
  740. /package/{dist/types/src/run.d.ts → testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log} +0 -0
@@ -1,38 +1,22 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
- import React, { ReactElement, useState, useMemo, useEffect } from "react";
4
- import { Toast, ToastContainer } from "react-bootstrap";
3
+
4
+ import React, { useState, useEffect } from "react";
5
5
  import { useNavigate } from "react-router-dom";
6
+ import { useWebSocket } from "../../App";
6
7
  import {
7
8
  RuntimeName,
8
9
  STANDARD_LOGS,
9
- RUNTIME_SPECIFIC_LOGS
10
+ RUNTIME_SPECIFIC_LOGS,
10
11
  } from "../../utils/logFiles";
11
- import { Container, Row, Col, Nav, Button, Modal } from "react-bootstrap";
12
+ import { Container, Row, Col, Button, Modal } from "react-bootstrap";
12
13
  import { Editor } from "@monaco-editor/react";
13
14
  import { NavBar } from "./NavBar";
14
- import { TestStatusBadge } from "../TestStatusBadge";
15
-
16
- type TestData = {
17
- name: string;
18
- givens: {
19
- name: string;
20
- whens: {
21
- name: string;
22
- error?: string;
23
- features?: string[];
24
- artifacts?: string[];
25
- }[];
26
- thens: {
27
- name: string;
28
- error?: string;
29
- features?: string[];
30
- artifacts?: string[];
31
- }[];
32
- features?: string[];
33
- artifacts?: string[];
34
- }[];
35
- };
15
+ import { FileTreeItem } from "./FileTreeItem";
16
+ import { FileTree } from "./FileTree";
17
+ import { ToastNotification } from "./ToastNotification";
18
+ import { getLanguage, renderTestResults } from "./TestPageView_utils";
19
+ import { MagicRobotModal } from "./MagicRobotModal";
36
20
 
37
21
  type TestPageViewProps = {
38
22
  projectName: string;
@@ -46,61 +30,7 @@ type TestPageViewProps = {
46
30
  typeErrors: number;
47
31
  staticErrors: number;
48
32
  };
49
- };
50
-
51
- const FileTree = ({ data, onSelect, level = 0, selectedSourcePath }) => {
52
- const [expanded, setExpanded] = useState({});
53
-
54
- const toggleExpand = (path) => {
55
- setExpanded((prev) => ({ ...prev, [path]: !prev[path] }));
56
- };
57
-
58
- return (
59
- <div>
60
- {Object.entries(data).map(([name, node]) => {
61
- const path = Object.keys(expanded).find((k) => k.endsWith(name)) || name;
62
- const isExpanded = expanded[path];
63
-
64
- if (node.__isFile) {
65
- return (
66
- <FileTreeItem
67
- key={name}
68
- name={name}
69
- isFile={true}
70
- level={level}
71
- isSelected={selectedSourcePath === path}
72
- onClick={() => onSelect(path, node.content)}
73
- />
74
- );
75
- } else {
76
- return (
77
- <div key={name}>
78
- <div
79
- className="d-flex align-items-center py-1 text-dark"
80
- style={{
81
- paddingLeft: `${level * 16}px`,
82
- cursor: 'pointer',
83
- fontSize: '0.875rem'
84
- }}
85
- onClick={() => toggleExpand(path)}
86
- >
87
- <i className={`bi ${isExpanded ? 'bi-folder2-open' : 'bi-folder'} me-1`}></i>
88
- <span>{name}</span>
89
- </div>
90
- {isExpanded && (
91
- <FileTree
92
- data={node}
93
- onSelect={onSelect}
94
- level={level + 1}
95
- selectedSourcePath={selectedSourcePath}
96
- />
97
- )}
98
- </div>
99
- );
100
- }
101
- })}
102
- </div>
103
- );
33
+ isWebSocketConnected: boolean;
104
34
  };
105
35
 
106
36
  export const TestPageView = ({
@@ -111,17 +41,23 @@ export const TestPageView = ({
111
41
  testsExist,
112
42
  errorCounts,
113
43
  logs,
44
+ isWebSocketConnected,
114
45
  }: TestPageViewProps) => {
115
46
  const navigate = useNavigate();
116
47
  const [showAiderModal, setShowAiderModal] = useState(false);
117
- const [messageOption, setMessageOption] = useState<'default' | 'custom'>('default');
48
+ const [messageOption, setMessageOption] = useState<"default" | "custom">(
49
+ "default"
50
+ );
118
51
  const [customMessage, setCustomMessage] = useState(
119
- typeof logs['message.txt'] === 'string' ? logs['message.txt'] : 'make a script that prints hello'
52
+ typeof logs["message.txt"] === "string"
53
+ ? logs["message.txt"]
54
+ : "make a script that prints hello"
120
55
  );
121
56
  const [showToast, setShowToast] = useState(false);
122
- const [toastMessage, setToastMessage] = useState('');
123
- const [toastVariant, setToastVariant] = useState<'success' | 'danger'>('success');
124
- const [ws, setWs] = useState<WebSocket | null>(null);
57
+ const [toastMessage, setToastMessage] = useState("");
58
+ const [toastVariant, setToastVariant] = useState<"success" | "danger">(
59
+ "success"
60
+ );
125
61
  const [expandedSections, setExpandedSections] = useState({
126
62
  standardLogs: true,
127
63
  runtimeLogs: true,
@@ -131,7 +67,10 @@ export const TestPageView = ({
131
67
  const [isNavbarCollapsed, setIsNavbarCollapsed] = useState(false);
132
68
 
133
69
  // Extract build errors and warnings relevant to this test
134
- const [buildErrors, setBuildErrors] = useState<{ errors: any[]; warnings: any[] }>({ errors: [], warnings: [] });
70
+ const [buildErrors, setBuildErrors] = useState<{
71
+ errors: any[];
72
+ warnings: any[];
73
+ }>({ errors: [], warnings: [] });
135
74
 
136
75
  useEffect(() => {
137
76
  const metafile = logs.build_logs?.metafile;
@@ -143,46 +82,44 @@ export const TestPageView = ({
143
82
  // Collect all input files from metafile outputs related to this test
144
83
  Object.entries(metafile.outputs || {}).forEach(([outputPath, output]) => {
145
84
  // Normalize paths for comparison
146
- const normalizedTestName = testName.replace(/\\/g, '/');
147
- const normalizedEntryPoint = output.entryPoint ? output.entryPoint.replace(/\\/g, '/') : '';
85
+ const normalizedTestName = testName.replace(/\\/g, "/");
86
+ const normalizedEntryPoint = output.entryPoint
87
+ ? output.entryPoint.replace(/\\/g, "/")
88
+ : "";
148
89
  if (normalizedEntryPoint.includes(normalizedTestName)) {
149
90
  Object.keys(output.inputs || {}).forEach((inputPath) => {
150
- sourceFilesSet.add(inputPath.replace(/\\/g, '/'));
91
+ sourceFilesSet.add(inputPath.replace(/\\/g, "/"));
151
92
  });
152
93
  }
153
94
  });
154
95
 
155
96
  // Filter errors and warnings to those originating from source files of this test
156
- const filteredErrors = (logs.build_logs?.errors || []).filter((err: any) => {
157
- if (!err.location || !err.location.file) return false;
158
- return sourceFilesSet.has(err.location.file.replace(/\\/g, '/'));
159
- });
160
- const filteredWarnings = (logs.build_logs?.warnings || []).filter((warn: any) => {
161
- if (!warn.location || !warn.location.file) return false;
162
- return sourceFilesSet.has(warn.location.file.replace(/\\/g, '/'));
163
- });
97
+ const filteredErrors = (logs.build_logs?.errors || []).filter(
98
+ (err: any) => {
99
+ if (!err.location || !err.location.file) return false;
100
+ return sourceFilesSet.has(err.location.file.replace(/\\/g, "/"));
101
+ }
102
+ );
103
+ const filteredWarnings = (logs.build_logs?.warnings || []).filter(
104
+ (warn: any) => {
105
+ if (!warn.location || !warn.location.file) return false;
106
+ return sourceFilesSet.has(warn.location.file.replace(/\\/g, "/"));
107
+ }
108
+ );
164
109
 
165
110
  setBuildErrors({ errors: filteredErrors, warnings: filteredWarnings });
166
111
  }, [logs, testName]);
167
112
 
168
113
  // Update customMessage when logs change
169
114
  useEffect(() => {
170
- if (typeof logs['message.txt'] === 'string' && logs['message.txt'].trim()) {
171
- setCustomMessage(logs['message.txt']);
115
+ if (typeof logs["message.txt"] === "string" && logs["message.txt"].trim()) {
116
+ setCustomMessage(logs["message.txt"]);
172
117
  }
173
118
  }, [logs]);
174
119
 
175
- // Set up WebSocket connection
176
- useEffect(() => {
177
- const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
178
- const wsUrl = `${wsProtocol}//${window.location.host}`;
179
- const websocket = new WebSocket(wsUrl);
180
- setWs(websocket);
181
-
182
- return () => {
183
- websocket.close();
184
- };
185
- }, []);
120
+ // Use the centralized WebSocket from App context
121
+ const wsContext = useWebSocket();
122
+ const ws = wsContext?.ws;
186
123
  const [activeTab, setActiveTab] = React.useState("tests.json");
187
124
  const [selectedFile, setSelectedFile] = useState<{
188
125
  path: string;
@@ -196,271 +133,6 @@ export const TestPageView = ({
196
133
  "vs-dark"
197
134
  );
198
135
 
199
- // Determine language from file extension
200
- const getLanguage = (path: string) => {
201
- const ext = path.split(".").pop()?.toLowerCase();
202
- switch (ext) {
203
- case "ts":
204
- return "typescript";
205
- case "tsx":
206
- return "typescript";
207
- case "js":
208
- return "javascript";
209
- case "json":
210
- return "json";
211
- case "md":
212
- return "markdown";
213
- default:
214
- return "plaintext";
215
- }
216
- };
217
-
218
- const renderTestResults = (testData: TestData) => {
219
- return (
220
- <div className="test-results">
221
- {testData.givens.map((given, i) => (
222
- <div key={i} className="mb-4 card">
223
- <div className="card-header bg-primary text-white">
224
- <div className="d-flex justify-content-between align-items-center">
225
- <div>
226
- <h4>Given: {given.name}</h4>
227
- {given.features && given.features.length > 0 && (
228
- <div className="mt-1">
229
- <small>Features:</small>
230
- <ul className="list-unstyled">
231
- {given.features.map((feature, fi) => (
232
- <li key={fi}>
233
- {feature.startsWith("http") ? (
234
- <a
235
- href={feature}
236
- target="_blank"
237
- rel="noopener noreferrer"
238
- className="text-white"
239
- >
240
- {new URL(feature).hostname}
241
- </a>
242
- ) : (
243
- <span className="text-white">{feature}</span>
244
- )}
245
- </li>
246
- ))}
247
- </ul>
248
- </div>
249
- )}
250
- </div>
251
- {given.artifacts && given.artifacts.length > 0 && (
252
- <div className="dropdown">
253
- <button
254
- className="btn btn-sm btn-light dropdown-toggle"
255
- type="button"
256
- data-bs-toggle="dropdown"
257
- >
258
- Artifacts ({given.artifacts.length})
259
- </button>
260
- <ul className="dropdown-menu dropdown-menu-end">
261
- {given.artifacts.map((artifact, ai) => (
262
- <li key={ai}>
263
- <a
264
- className="dropdown-item"
265
- href={`reports/${projectName}/${testName
266
- .split(".")
267
- .slice(0, -1)
268
- .join(".")}/${runtime}/${artifact}`}
269
- target="_blank"
270
- rel="noopener noreferrer"
271
- >
272
- {artifact.split("/").pop()}
273
- </a>
274
- </li>
275
- ))}
276
- </ul>
277
- </div>
278
- )}
279
- </div>
280
- </div>
281
- <div className="card-body">
282
- {given.whens.map((when, j) => (
283
- <div
284
- key={`w-${j}`}
285
- className={`p-3 mb-2 ${when.error
286
- ? "bg-danger text-white"
287
- : "bg-success text-white"
288
- }`}
289
- >
290
- <div className="d-flex justify-content-between align-items-start">
291
- <div>
292
- <div>
293
- <strong>When:</strong> {when.name}
294
- {when.features && when.features.length > 0 && (
295
- <div className="mt-2">
296
- <small>Features:</small>
297
- <ul className="list-unstyled">
298
- {when.features.map((feature, fi) => (
299
- <li key={fi}>
300
- {feature.startsWith("http") ? (
301
- <a
302
- href={feature}
303
- target="_blank"
304
- rel="noopener noreferrer"
305
- >
306
- {new URL(feature).hostname}
307
- </a>
308
- ) : (
309
- feature
310
- )}
311
- </li>
312
- ))}
313
- </ul>
314
- </div>
315
- )}
316
- {when.error && <pre className="mt-2">{when.error}</pre>}
317
- </div>
318
- </div>
319
- {when.artifacts && when.artifacts.length > 0 && (
320
- <div className="ms-3">
321
- <strong>Artifacts:</strong>
322
- <ul className="list-unstyled">
323
- {when.artifacts.map((artifact, ai) => (
324
- <li key={ai}>
325
- <a
326
- href={`reports/${projectName}/${testName
327
- .split(".")
328
- .slice(0, -1)
329
- .join(".")}/${runtime}/${artifact}`}
330
- target="_blank"
331
- className="text-white"
332
- rel="noopener noreferrer"
333
- >
334
- {artifact.split("/").pop()}
335
- </a>
336
- </li>
337
- ))}
338
- </ul>
339
- </div>
340
- )}
341
- </div>
342
- </div>
343
- ))}
344
- {given.thens.map((then, k) => (
345
- <div
346
- key={`t-${k}`}
347
- className={`p-3 mb-2 ${then.error
348
- ? "bg-danger text-white"
349
- : "bg-success text-white"
350
- }`}
351
- >
352
- <div className="d-flex justify-content-between align-items-start">
353
- <div>
354
- <div>
355
- <strong>Then:</strong> {then.name}
356
- {then.features && then.features.length > 0 && (
357
- <div className="mt-2">
358
- <small>Features:</small>
359
- <ul className="list-unstyled">
360
- {then.features.map((feature, fi) => (
361
- <li key={fi}>
362
- {feature.startsWith("http") ? (
363
- <a
364
- href={feature}
365
- target="_blank"
366
- rel="noopener noreferrer"
367
- >
368
- {new URL(feature).hostname}
369
- </a>
370
- ) : (
371
- feature
372
- )}
373
- </li>
374
- ))}
375
- </ul>
376
- </div>
377
- )}
378
- {then.error && <pre className="mt-2">{then.error}</pre>}
379
- </div>
380
- </div>
381
- {then.artifacts && then.artifacts.length > 0 && (
382
- <div className="ms-3">
383
- <strong>Artifacts:</strong>
384
- <ul className="list-unstyled">
385
- {then.artifacts.map((artifact, ai) => (
386
- <li key={ai}>
387
- <a
388
- href={`reports/${projectName}/${testName
389
- .split(".")
390
- .slice(0, -1)
391
- .join(".")}/${runtime}/${artifact}`}
392
- target="_blank"
393
- className="text-white"
394
- rel="noopener noreferrer"
395
- >
396
- {artifact.split("/").pop()}
397
- </a>
398
- </li>
399
- ))}
400
- </ul>
401
- </div>
402
- )}
403
- </div>
404
- </div>
405
- ))}
406
- </div>
407
- </div>
408
- ))}
409
- {/* Render build errors and warnings */}
410
- {(buildErrors.errors.length > 0 || buildErrors.warnings.length > 0) && (
411
- <div className="mb-4 card border-danger">
412
- <div className="card-header bg-danger text-white">
413
- <h4>Build Errors and Warnings</h4>
414
- </div>
415
- <div className="card-body">
416
- {buildErrors.errors.length > 0 && (
417
- <>
418
- <h5>Errors</h5>
419
- <ul>
420
- {buildErrors.errors.map((error, idx) => (
421
- <li key={`build-error-${idx}`}>
422
- <strong>{error.text}</strong>
423
- {error.location && (
424
- <div>
425
- File: {error.location.file} Line: {error.location.line} Column: {error.location.column}
426
- </div>
427
- )}
428
- </li>
429
- ))}
430
- </ul>
431
- </>
432
- )}
433
- {buildErrors.warnings.length > 0 && (
434
- <>
435
- <h5>Warnings</h5>
436
- <ul>
437
- {buildErrors.warnings.map((warning, idx) => (
438
- <li key={`build-warning-${idx}`}>
439
- <strong>{warning.text}</strong>
440
- {warning.location && (
441
- <div>
442
- File: {warning.location.file} Line: {warning.location.line} Column: {warning.location.column}
443
- </div>
444
- )}
445
- </li>
446
- ))}
447
- </ul>
448
- </>
449
- )}
450
- </div>
451
- </div>
452
- )}
453
- </div>
454
- );
455
- };
456
-
457
- console.log("Rendering TestPageView with logs:", {
458
- logKeys: Object.keys(logs),
459
- sourceFiles: logs.source_files ? Object.keys(logs.source_files) : null,
460
- selectedFile,
461
- activeTab,
462
- });
463
-
464
136
  return (
465
137
  <Container fluid className="px-0">
466
138
  <NavBar
@@ -475,7 +147,9 @@ export const TestPageView = ({
475
147
  ? "primary"
476
148
  : runtime === "web"
477
149
  ? "success"
478
- : "info",
150
+ : runtime === "golang"
151
+ ? "warning"
152
+ : "info",
479
153
  text: runtime,
480
154
  },
481
155
  className: "pe-none d-flex align-items-center gap-2",
@@ -485,135 +159,55 @@ export const TestPageView = ({
485
159
  <Button
486
160
  variant="info"
487
161
  onClick={() => setShowAiderModal(true)}
488
- className="ms-2"
489
- title="AI Assistant"
162
+ className="ms-2 position-relative"
163
+ title={
164
+ isWebSocketConnected
165
+ ? "AI Assistant"
166
+ : "AI Assistant (WebSocket not connected)"
167
+ }
168
+ disabled={!isWebSocketConnected}
490
169
  >
491
170
  🤖
171
+ {!isWebSocketConnected && (
172
+ <span
173
+ className="position-absolute top-0 start-100 translate-middle p-1 bg-danger border border-light rounded-circle"
174
+ title="WebSocket disconnected"
175
+ >
176
+ <span className="visually-hidden">WebSocket disconnected</span>
177
+ </span>
178
+ )}
492
179
  </Button>
493
180
  }
494
181
  />
495
182
 
496
- <Modal show={showAiderModal} onHide={() => setShowAiderModal(false)} size="lg" onShow={() => setMessageOption('default')}>
497
- <Modal.Header closeButton>
498
- <Modal.Title>Aider</Modal.Title>
499
- </Modal.Header>
500
- <Modal.Body>
501
-
502
- <div className="mb-3">
503
-
504
- <div className="form-check">
505
- <input
506
- className="form-check-input"
507
- type="radio"
508
- name="messageOption"
509
- id="defaultMessage"
510
- value="default"
511
- checked={messageOption === 'default'}
512
- onChange={() => setMessageOption('default')}
513
- />
514
- <label className="form-check-label" htmlFor="defaultMessage">
515
- Use default message.txt
516
- </label>
517
- </div>
518
- <div className="form-check">
519
- <input
520
- className="form-check-input"
521
- type="radio"
522
- name="messageOption"
523
- id="customMessage"
524
- value="custom"
525
- checked={messageOption === 'custom'}
526
- onChange={() => setMessageOption('custom')}
527
- />
528
- <label className="form-check-label" htmlFor="customMessage">
529
- Use custom message
530
- </label>
531
- </div>
532
- {messageOption === 'custom' && (
533
- <div className="mt-2">
534
- <textarea
535
- className="form-control"
536
- rows={8}
537
- placeholder="Enter your custom message"
538
- value={customMessage}
539
- onChange={(e) => setCustomMessage(e.target.value)}
540
- style={{ minHeight: '500px' }}
541
- />
542
- </div>
543
- )}
544
- </div>
545
- </Modal.Body>
546
- <Modal.Footer>
547
- {/* <Button
548
- variant="secondary"
549
- onClick={() => setShowAiderModal(false)}
550
- >
551
- Close
552
- </Button> */}
553
- <Button
554
- variant="primary"
555
- onClick={async () => {
556
- try {
557
- const promptPath = `testeranto/reports/${projectName}/${testName
558
- .split(".")
559
- .slice(0, -1)
560
- .join(".")}/${runtime}/prompt.txt`;
561
-
562
- let command = `aider --load ${promptPath}`;
563
-
564
- if (messageOption === 'default') {
565
- const messagePath = `testeranto/reports/${projectName}/${testName
566
- .split(".")
567
- .slice(0, -1)
568
- .join(".")}/${runtime}/message.txt`;
569
- command += ` --message-file ${messagePath}`;
570
- } else {
571
- command += ` --message "${customMessage}"`;
572
- }
573
-
574
- // Send command to server via WebSocket
575
- const ws = new WebSocket(`ws://${window.location.host}`);
576
- ws.onopen = () => {
577
- ws.send(JSON.stringify({
578
- type: 'executeCommand',
579
- command: command
580
- }));
581
- setToastMessage('Command sent to server');
582
- setToastVariant('success');
583
- setShowToast(true);
584
- setShowAiderModal(false);
585
- ws.close();
586
-
587
- // Navigate to process manager page
588
- setTimeout(() => {
589
- navigate('/processes');
590
- }, 1000);
591
- };
592
-
593
- ws.onerror = (error) => {
594
- setToastMessage('Failed to connect to server');
595
- setToastVariant('danger');
596
- setShowToast(true);
597
- };
598
- } catch (err) {
599
- console.error("WebSocket error:", err);
600
- setToastMessage('Error preparing command');
601
- setToastVariant('danger');
602
- setShowToast(true);
603
- }
604
- }}
605
- >
606
- Run Aider Command
607
- </Button>
608
- </Modal.Footer>
609
- </Modal>
183
+ <MagicRobotModal
184
+ customMessage={customMessage}
185
+ isWebSocketConnected={isWebSocketConnected}
186
+ messageOption={messageOption}
187
+ navigate={navigate}
188
+ projectName={projectName}
189
+ runtime={runtime}
190
+ setCustomMessage={setCustomMessage}
191
+ setMessageOption={setMessageOption}
192
+ setShowAiderModal={setShowAiderModal}
193
+ setShowToast={setShowToast}
194
+ setToastMessage={setToastMessage}
195
+ setToastVariant={setToastVariant}
196
+ showAiderModal={showAiderModal}
197
+ testName={testName}
198
+ ws={ws}
199
+ />
610
200
 
611
201
  <Row className="g-0">
612
- <Col sm={3} className="border-end" style={{
613
- height: "calc(100vh - 56px)",
614
- overflow: "auto",
615
- backgroundColor: '#f8f9fa'
616
- }}>
202
+ <Col
203
+ sm={3}
204
+ className="border-end"
205
+ style={{
206
+ height: "calc(100vh - 56px)",
207
+ overflow: "auto",
208
+ backgroundColor: "#f8f9fa",
209
+ }}
210
+ >
617
211
  {/* File Tree Header */}
618
212
  <div className="p-2 border-bottom">
619
213
  <small className="fw-bold text-muted">EXPLORER</small>
@@ -623,19 +217,31 @@ export const TestPageView = ({
623
217
  <div className="p-2">
624
218
  <div
625
219
  className="d-flex align-items-center text-muted mb-1"
626
- style={{ cursor: 'pointer', fontSize: '0.875rem' }}
627
- onClick={() => setExpandedSections(prev => ({ ...prev, standardLogs: !prev.standardLogs }))}
220
+ style={{ cursor: "pointer", fontSize: "0.875rem" }}
221
+ onClick={() =>
222
+ setExpandedSections((prev) => ({
223
+ ...prev,
224
+ standardLogs: !prev.standardLogs,
225
+ }))
226
+ }
628
227
  >
629
- <i className={`bi bi-chevron-${expandedSections.standardLogs ? 'down' : 'right'} me-1`}></i>
228
+ <i
229
+ className={`bi bi-chevron-${expandedSections.standardLogs ? "down" : "right"
230
+ } me-1`}
231
+ ></i>
630
232
  <span>Standard Logs</span>
631
233
  </div>
632
234
  {expandedSections.standardLogs && (
633
235
  <div>
634
236
  {Object.values(STANDARD_LOGS).map((logName) => {
635
237
  const logContent = logs ? logs[logName] : undefined;
636
- const exists = logContent !== undefined &&
637
- ((typeof logContent === "string" && logContent.trim() !== "") ||
638
- (typeof logContent === "object" && logContent !== null && Object.keys(logContent).length > 0));
238
+ const exists =
239
+ logContent !== undefined &&
240
+ ((typeof logContent === "string" &&
241
+ logContent.trim() !== "") ||
242
+ (typeof logContent === "object" &&
243
+ logContent !== null &&
244
+ Object.keys(logContent).length > 0));
639
245
 
640
246
  return (
641
247
  <FileTreeItem
@@ -650,8 +256,13 @@ export const TestPageView = ({
650
256
  setActiveTab(logName);
651
257
  setSelectedFile({
652
258
  path: logName,
653
- content: typeof logContent === "string" ? logContent : JSON.stringify(logContent, null, 2),
654
- language: logName.endsWith(".json") ? "json" : "plaintext",
259
+ content:
260
+ typeof logContent === "string"
261
+ ? logContent
262
+ : JSON.stringify(logContent, null, 2),
263
+ language: logName.endsWith(".json")
264
+ ? "json"
265
+ : "plaintext",
655
266
  });
656
267
  } else {
657
268
  setActiveTab(logName);
@@ -670,67 +281,96 @@ export const TestPageView = ({
670
281
  </div>
671
282
 
672
283
  {/* Runtime Logs Section */}
673
- {runtime && RUNTIME_SPECIFIC_LOGS[runtime as RuntimeName] &&
674
- Object.values(RUNTIME_SPECIFIC_LOGS[runtime as RuntimeName]).length > 0 && (
675
- <div className="p-2">
676
- <div
677
- className="d-flex align-items-center text-muted mb-1"
678
- style={{ cursor: 'pointer', fontSize: '0.875rem' }}
679
- onClick={() => setExpandedSections(prev => ({ ...prev, runtimeLogs: !prev.runtimeLogs }))}
680
- >
681
- <i className={`bi bi-chevron-${expandedSections.runtimeLogs ? 'down' : 'right'} me-1`}></i>
682
- <span>Runtime Logs</span>
683
- </div>
684
- {expandedSections.runtimeLogs && (
685
- <div>
686
- {Object.values(RUNTIME_SPECIFIC_LOGS[runtime as RuntimeName]).map((logName) => {
687
- const logContent = logs ? logs[logName] : undefined;
688
- const exists = logContent !== undefined &&
689
- ((typeof logContent === "string" && logContent.trim() !== "") ||
690
- (typeof logContent === "object" && logContent !== null && Object.keys(logContent).length > 0));
691
-
692
- return (
693
- <FileTreeItem
694
- key={logName}
695
- name={logName}
696
- isFile={true}
697
- level={1}
698
- isSelected={activeTab === logName}
699
- exists={exists}
700
- onClick={() => {
701
- if (exists) {
702
- setActiveTab(logName);
703
- setSelectedFile({
704
- path: logName,
705
- content: typeof logContent === "string" ? logContent : JSON.stringify(logContent, null, 2),
706
- language: logName.endsWith(".json") ? "json" : "plaintext",
707
- });
708
- } else {
709
- setActiveTab(logName);
710
- setSelectedFile({
711
- path: logName,
712
- content: `// ${logName} not found or empty\nThis file was not generated during the test run.`,
713
- language: "plaintext",
714
- });
715
- }
716
- }}
717
- />
718
- );
719
- })}
284
+ {runtime &&
285
+ RUNTIME_SPECIFIC_LOGS[runtime as RuntimeName] &&
286
+ Object.values(RUNTIME_SPECIFIC_LOGS[runtime as RuntimeName])
287
+ .length > 0 && (
288
+ <div className="p-2">
289
+ <div
290
+ className="d-flex align-items-center text-muted mb-1"
291
+ style={{ cursor: "pointer", fontSize: "0.875rem" }}
292
+ onClick={() =>
293
+ setExpandedSections((prev) => ({
294
+ ...prev,
295
+ runtimeLogs: !prev.runtimeLogs,
296
+ }))
297
+ }
298
+ >
299
+ <i
300
+ className={`bi bi-chevron-${expandedSections.runtimeLogs ? "down" : "right"
301
+ } me-1`}
302
+ ></i>
303
+ <span>Runtime Logs</span>
720
304
  </div>
721
- )}
722
- </div>
723
- )}
305
+ {expandedSections.runtimeLogs && (
306
+ <div>
307
+ {Object.values(
308
+ RUNTIME_SPECIFIC_LOGS[runtime as RuntimeName]
309
+ ).map((logName) => {
310
+ const logContent = logs ? logs[logName] : undefined;
311
+ const exists =
312
+ logContent !== undefined &&
313
+ ((typeof logContent === "string" &&
314
+ logContent.trim() !== "") ||
315
+ (typeof logContent === "object" &&
316
+ logContent !== null &&
317
+ Object.keys(logContent).length > 0));
318
+
319
+ return (
320
+ <FileTreeItem
321
+ key={logName}
322
+ name={logName}
323
+ isFile={true}
324
+ level={1}
325
+ isSelected={activeTab === logName}
326
+ exists={exists}
327
+ onClick={() => {
328
+ if (exists) {
329
+ setActiveTab(logName);
330
+ setSelectedFile({
331
+ path: logName,
332
+ content:
333
+ typeof logContent === "string"
334
+ ? logContent
335
+ : JSON.stringify(logContent, null, 2),
336
+ language: logName.endsWith(".json")
337
+ ? "json"
338
+ : "plaintext",
339
+ });
340
+ } else {
341
+ setActiveTab(logName);
342
+ setSelectedFile({
343
+ path: logName,
344
+ content: `// ${logName} not found or empty\nThis file was not generated during the test run.`,
345
+ language: "plaintext",
346
+ });
347
+ }
348
+ }}
349
+ />
350
+ );
351
+ })}
352
+ </div>
353
+ )}
354
+ </div>
355
+ )}
724
356
 
725
357
  {/* Source Files Section */}
726
358
  {logs && logs.source_files && (
727
359
  <div className="p-2">
728
360
  <div
729
361
  className="d-flex align-items-center text-muted mb-1"
730
- style={{ cursor: 'pointer', fontSize: '0.875rem' }}
731
- onClick={() => setExpandedSections(prev => ({ ...prev, sourceFiles: !prev.sourceFiles }))}
362
+ style={{ cursor: "pointer", fontSize: "0.875rem" }}
363
+ onClick={() =>
364
+ setExpandedSections((prev) => ({
365
+ ...prev,
366
+ sourceFiles: !prev.sourceFiles,
367
+ }))
368
+ }
732
369
  >
733
- <i className={`bi bi-chevron-${expandedSections.sourceFiles ? 'down' : 'right'} me-1`}></i>
370
+ <i
371
+ className={`bi bi-chevron-${expandedSections.sourceFiles ? "down" : "right"
372
+ } me-1`}
373
+ ></i>
734
374
  <span>Source Files</span>
735
375
  </div>
736
376
  {expandedSections.sourceFiles && (
@@ -776,14 +416,29 @@ export const TestPageView = ({
776
416
  }}
777
417
  />
778
418
  </Col>
779
- <Col sm={3} className="p-0 border-start" style={{ height: "calc(100vh - 56px)", overflow: "auto" }}>
419
+ <Col
420
+ sm={3}
421
+ className="p-0 border-start"
422
+ style={{ height: "calc(100vh - 56px)", overflow: "auto" }}
423
+ >
780
424
  <div className="p-3">
781
425
  {selectedFile?.path.endsWith("tests.json") && (
782
426
  <div className="test-results-preview">
783
427
  {typeof selectedFile.content === "string"
784
- ? renderTestResults(JSON.parse(selectedFile.content))
785
- : renderTestResults(selectedFile.content)
786
- }
428
+ ? renderTestResults(
429
+ JSON.parse(selectedFile.content),
430
+ buildErrors,
431
+ projectName,
432
+ testName,
433
+ runtime
434
+ )
435
+ : renderTestResults(
436
+ selectedFile.content,
437
+ buildErrors,
438
+ projectName,
439
+ testName,
440
+ runtime
441
+ )}
787
442
  </div>
788
443
  )}
789
444
  {selectedFile?.path.match(/\.(png|jpg|jpeg|gif|svg)$/i) && (
@@ -792,7 +447,7 @@ export const TestPageView = ({
792
447
  src={selectedFile.content}
793
448
  alt={selectedFile.path}
794
449
  className="img-fluid"
795
- style={{ maxHeight: '300px' }}
450
+ style={{ maxHeight: "300px" }}
796
451
  />
797
452
  <div className="mt-2">
798
453
  <a
@@ -816,68 +471,93 @@ export const TestPageView = ({
816
471
  <>
817
472
  {buildData.errors?.length > 0 && (
818
473
  <div className="mb-3">
819
- <h6 className="text-danger">Errors ({buildData.errors.length})</h6>
474
+ <h6 className="text-danger">
475
+ Errors ({buildData.errors.length})
476
+ </h6>
820
477
  <ul className="list-unstyled">
821
- {buildData.errors.map((error: any, index: number) => (
822
- <li key={index} className="mb-2 p-2 bg-light rounded">
823
- <div className="text-danger fw-bold">{error.text}</div>
824
- {error.location && (
825
- <div className="small text-muted">
826
- File: {error.location.file}
827
- Line: {error.location.line}
828
- Column: {error.location.column}
829
- </div>
830
- )}
831
- {error.notes && error.notes.length > 0 && (
832
- <div className="small">
833
- Notes:
834
- <ul>
835
- {error.notes.map((note: any, noteIndex: number) => (
836
- <li key={noteIndex}>{note.text}</li>
837
- ))}
838
- </ul>
478
+ {buildData.errors.map(
479
+ (error: any, index: number) => (
480
+ <li key={index} className="mb-2 p-2 rounded">
481
+ <div className="text-danger fw-bold">
482
+ {error.text}
839
483
  </div>
840
- )}
841
- </li>
842
- ))}
484
+ {error.location && (
485
+ <div className="small text-muted">
486
+ File: {error.location.file}
487
+ Line: {error.location.line}
488
+ Column: {error.location.column}
489
+ </div>
490
+ )}
491
+ {error.notes && error.notes.length > 0 && (
492
+ <div className="small">
493
+ Notes:
494
+ <ul>
495
+ {error.notes.map(
496
+ (note: any, noteIndex: number) => (
497
+ <li key={noteIndex}>
498
+ {note.text}
499
+ </li>
500
+ )
501
+ )}
502
+ </ul>
503
+ </div>
504
+ )}
505
+ </li>
506
+ )
507
+ )}
843
508
  </ul>
844
509
  </div>
845
510
  )}
846
511
  {buildData.warnings?.length > 0 && (
847
512
  <div className="mb-3">
848
- <h6 className="text-warning">Warnings ({buildData.warnings.length})</h6>
513
+ <h6 className="text-warning">
514
+ Warnings ({buildData.warnings.length})
515
+ </h6>
849
516
  <ul className="list-unstyled">
850
- {buildData.warnings.map((warning: any, index: number) => (
851
- <li key={index} className="mb-2 p-2 bg-light rounded">
852
- <div className="text-warning fw-bold">{warning.text}</div>
853
- {warning.location && (
854
- <div className="small text-muted">
855
- File: {warning.location.file}
856
- Line: {warning.location.line}
857
- Column: {warning.location.column}
858
- </div>
859
- )}
860
- {warning.notes && warning.notes.length > 0 && (
861
- <div className="small">
862
- Notes:
863
- <ul>
864
- {warning.notes.map((note: any, noteIndex: number) => (
865
- <li key={noteIndex}>{note.text}</li>
866
- ))}
867
- </ul>
517
+ {buildData.warnings.map(
518
+ (warning: any, index: number) => (
519
+ <li key={index} className="mb-2 p-2 rounded">
520
+ <div className="text-warning fw-bold">
521
+ {warning.text}
868
522
  </div>
869
- )}
870
- </li>
871
- ))}
523
+ {warning.location && (
524
+ <div className="small text-muted">
525
+ File: {warning.location.file}
526
+ Line: {warning.location.line}
527
+ Column: {warning.location.column}
528
+ </div>
529
+ )}
530
+ {warning.notes &&
531
+ warning.notes.length > 0 && (
532
+ <div className="small">
533
+ Notes:
534
+ <ul>
535
+ {warning.notes.map(
536
+ (
537
+ note: any,
538
+ noteIndex: number
539
+ ) => (
540
+ <li key={noteIndex}>
541
+ {note.text}
542
+ </li>
543
+ )
544
+ )}
545
+ </ul>
546
+ </div>
547
+ )}
548
+ </li>
549
+ )
550
+ )}
872
551
  </ul>
873
552
  </div>
874
553
  )}
875
- {(!buildData.errors || buildData.errors.length === 0) &&
876
- (!buildData.warnings || buildData.warnings.length === 0) && (
877
- <div className="alert alert-success">
878
- No build errors or warnings
879
- </div>
880
- )}
554
+ {(!buildData.errors || buildData.errors.length === 0) &&
555
+ (!buildData.warnings ||
556
+ buildData.warnings.length === 0) && (
557
+ <div className="alert alert-success">
558
+ No build errors or warnings
559
+ </div>
560
+ )}
881
561
  </>
882
562
  );
883
563
  } catch (e) {
@@ -890,18 +570,18 @@ export const TestPageView = ({
890
570
  })()}
891
571
  </div>
892
572
  )}
893
- {selectedFile?.path.endsWith(".json") &&
894
- !selectedFile.path.endsWith("tests.json") &&
895
- !selectedFile.path.endsWith("build.json") && (
896
- <pre className="bg-light p-2 small">
897
- <code>{selectedFile.content}</code>
898
- </pre>
899
- )}
573
+ {selectedFile?.path.endsWith(".json") &&
574
+ !selectedFile.path.endsWith("tests.json") &&
575
+ !selectedFile.path.endsWith("build.json") && (
576
+ <pre className=" p-2 small">
577
+ <code>{selectedFile.content}</code>
578
+ </pre>
579
+ )}
900
580
  {selectedFile?.path.includes("source_files") && (
901
581
  <div>
902
582
  <div className="mb-2 small text-muted">
903
583
  <i className="bi bi-file-earmark-text me-1"></i>
904
- {selectedFile.path.split('/').pop()}
584
+ {selectedFile.path.split("/").pop()}
905
585
  </div>
906
586
  <Button
907
587
  variant="outline-primary"
@@ -920,296 +600,12 @@ export const TestPageView = ({
920
600
  </Col>
921
601
  </Row>
922
602
 
923
- <ToastContainer position="top-end" className="p-3">
924
- <Toast
925
- show={showToast}
926
- onClose={() => setShowToast(false)}
927
- delay={3000}
928
- autohide
929
- bg={toastVariant}
930
- >
931
- <Toast.Header>
932
- <strong className="me-auto">Command Status</strong>
933
- </Toast.Header>
934
- <Toast.Body className="text-white">
935
- {toastMessage}
936
- </Toast.Body>
937
- </Toast>
938
- </ToastContainer>
939
-
603
+ <ToastNotification
604
+ showToast={showToast}
605
+ setShowToast={setShowToast}
606
+ toastVariant={toastVariant}
607
+ toastMessage={toastMessage}
608
+ />
940
609
  </Container>
941
610
  );
942
611
  };
943
- // Simple file tree item component
944
- const FileTreeItem = ({
945
- name,
946
- isFile,
947
- level,
948
- isSelected,
949
- exists = true,
950
- onClick
951
- }: {
952
- name: string;
953
- isFile: boolean;
954
- level: number;
955
- isSelected: boolean;
956
- exists?: boolean;
957
- onClick: () => void;
958
- }) => {
959
- const displayName = name
960
- .replace(".json", "")
961
- .replace(".txt", "")
962
- .replace(".log", "")
963
- .replace(/_/g, " ")
964
- .replace(/^std/, "Standard ")
965
- .replace(/^exit/, "Exit Code")
966
- .split('/').pop();
967
-
968
- return (
969
- <div
970
- className={`d-flex align-items-center py-1 ${isSelected ? 'text-primary fw-bold' : exists ? 'text-dark' : 'text-muted'}`}
971
- style={{
972
- paddingLeft: `${level * 16}px`,
973
- cursor: exists ? 'pointer' : 'not-allowed',
974
- fontSize: '0.875rem',
975
- opacity: exists ? 1 : 0.6
976
- }}
977
- onClick={exists ? onClick : undefined}
978
- title={exists ? undefined : "File not found or empty"}
979
- >
980
- <i className={`bi ${isFile ? (exists ? 'bi-file-earmark-text' : 'bi-file-earmark') : 'bi-folder'} me-1`}></i>
981
- <span>{displayName}</span>
982
- {!exists && (
983
- <i className="bi bi-question-circle ms-1" title="File not found or empty"></i>
984
- )}
985
- </div>
986
- );
987
- };
988
-
989
- const ArtifactTree = ({
990
- treeData,
991
- projectName,
992
- testName,
993
- runtime,
994
- onSelect,
995
- level = 0,
996
- basePath = ''
997
- }: {
998
- treeData: Record<string, any>;
999
- projectName: string;
1000
- testName: string;
1001
- runtime: string;
1002
- onSelect: (path: string) => void;
1003
- level?: number;
1004
- basePath?: string;
1005
- }) => {
1006
- const [expanded, setExpanded] = useState<Record<string, boolean>>({});
1007
-
1008
- const toggleExpand = (path: string) => {
1009
- setExpanded(prev => ({ ...prev, [path]: !prev[path] }));
1010
- };
1011
-
1012
- return (
1013
- <ul className="list-unstyled" style={{ paddingLeft: `${level * 16}px` }}>
1014
- {Object.entries(treeData).map(([name, node]) => {
1015
- const fullPath = basePath ? `${basePath}/${name}` : name;
1016
- const isExpanded = expanded[fullPath];
1017
-
1018
- if (node.__isFile) {
1019
- return (
1020
- <li key={fullPath} className="py-1">
1021
- <a
1022
- href={`reports/${projectName}/${testName
1023
- .split('.')
1024
- .slice(0, -1)
1025
- .join('.')}/${runtime}/${node.path}`}
1026
- target="_blank"
1027
- rel="noopener noreferrer"
1028
- className="text-decoration-none"
1029
- onClick={(e) => {
1030
- e.preventDefault();
1031
- onSelect(node.path);
1032
- }}
1033
- >
1034
- <i className="bi bi-file-earmark-text me-2"></i>
1035
- {name}
1036
- </a>
1037
- </li>
1038
- );
1039
- } else {
1040
- return (
1041
- <li key={fullPath} className="py-1">
1042
- <div className="d-flex align-items-center">
1043
- <button
1044
- className="btn btn-link text-start p-0 text-decoration-none me-1"
1045
- onClick={() => toggleExpand(fullPath)}
1046
- >
1047
- <i
1048
- className={`bi ${isExpanded ? 'bi-folder2-open' : 'bi-folder'} me-2`}
1049
- ></i>
1050
- {name}
1051
- </button>
1052
- </div>
1053
- {isExpanded && (
1054
- <ArtifactTree
1055
- treeData={node}
1056
- projectName={projectName}
1057
- testName={testName}
1058
- runtime={runtime}
1059
- onSelect={onSelect}
1060
- level={level + 1}
1061
- basePath={fullPath}
1062
- />
1063
- )}
1064
- </li>
1065
- );
1066
- }
1067
- })}
1068
- </ul>
1069
- );
1070
- };
1071
-
1072
- const buildArtifactTree = (testData: any) => {
1073
- const artifactPaths = new Set<string>();
1074
- testData.givens?.forEach((given: any) => {
1075
- given.artifacts?.forEach((artifact: string) => artifactPaths.add(artifact));
1076
- given.whens?.forEach((when: any) =>
1077
- when.artifacts?.forEach((artifact: string) => artifactPaths.add(artifact)));
1078
- given.thens?.forEach((then: any) =>
1079
- then.artifacts?.forEach((artifact: string) => artifactPaths.add(artifact)));
1080
- });
1081
-
1082
- const sortedArtifacts = Array.from(artifactPaths).sort();
1083
-
1084
- return sortedArtifacts.reduce((tree, artifactPath) => {
1085
- const parts = artifactPath.split('/');
1086
- let currentLevel = tree;
1087
-
1088
- parts.forEach((part, i) => {
1089
- if (!currentLevel[part]) {
1090
- currentLevel[part] = i === parts.length - 1
1091
- ? { __isFile: true, path: artifactPath }
1092
- : {};
1093
- }
1094
- currentLevel = currentLevel[part];
1095
- });
1096
-
1097
- return tree;
1098
- }, {} as Record<string, any>);
1099
- };
1100
-
1101
- const LogNavItem = ({
1102
- logName,
1103
- logContent,
1104
- activeTab,
1105
- setActiveTab,
1106
- setSelectedFile,
1107
- errorCounts,
1108
- decodedTestPath,
1109
- testsExist,
1110
- }: {
1111
- logName: string;
1112
- logContent: any;
1113
- activeTab: string;
1114
- setActiveTab: (tab: string) => void;
1115
- setSelectedFile: (file: {
1116
- path: string;
1117
- content: string;
1118
- language?: string;
1119
- }) => void;
1120
- errorCounts: {
1121
- runTimeErrors: number;
1122
- typeErrors: number;
1123
- staticErrors: number;
1124
- };
1125
- decodedTestPath: string;
1126
- testsExist: boolean;
1127
- }) => {
1128
- const displayName = logName
1129
- .replace(".json", "")
1130
- .replace(".txt", "")
1131
- .replace(".log", "")
1132
- .replace(/_/g, " ")
1133
- .replace(/^std/, "Standard ")
1134
- .replace(/^exit/, "Exit Code");
1135
-
1136
- const logValue = typeof logContent === "string" ? logContent.trim() : "";
1137
- let statusIndicator: ReactElement<any, any> | null = null;
1138
-
1139
- if (
1140
- logName === STANDARD_LOGS.TYPE_ERRORS &&
1141
- (errorCounts.typeErrors > 0 || (logValue && logValue !== "0"))
1142
- ) {
1143
- statusIndicator = (
1144
- <span className="ms-1">
1145
- ❌ {errorCounts.typeErrors || (logValue ? 1 : 0)}
1146
- </span>
1147
- );
1148
- } else if (
1149
- logName === STANDARD_LOGS.LINT_ERRORS &&
1150
- (errorCounts.staticErrors > 0 || (logValue && logValue !== "0"))
1151
- ) {
1152
- statusIndicator = (
1153
- <span className="ms-1">
1154
- ❌ {errorCounts.staticErrors || (logValue ? 1 : 0)}
1155
- </span>
1156
- );
1157
- } else if (
1158
- logName === RUNTIME_SPECIFIC_LOGS.node.STDERR &&
1159
- (errorCounts.runTimeErrors > 0 || (logValue && logValue !== "0"))
1160
- ) {
1161
- statusIndicator = (
1162
- <span className="ms-1">
1163
- ❌ {errorCounts.runTimeErrors || (logValue ? 1 : 0)}
1164
- </span>
1165
- );
1166
- } else if (logName === STANDARD_LOGS.EXIT && logValue !== "0") {
1167
- statusIndicator = <span className="ms-1">⚠️ {logValue}</span>;
1168
- } else if (logName === STANDARD_LOGS.TESTS && logValue) {
1169
- statusIndicator = (
1170
- <div className="ms-1">
1171
- <TestStatusBadge
1172
- testName={decodedTestPath}
1173
- testsExist={testsExist}
1174
- runTimeErrors={errorCounts.runTimeErrors}
1175
- typeErrors={errorCounts.typeErrors}
1176
- staticErrors={errorCounts.staticErrors}
1177
- variant="compact"
1178
- className="mt-1"
1179
- />
1180
- </div>
1181
- );
1182
- }
1183
-
1184
- return (
1185
- <Nav.Item key={logName}>
1186
- <Nav.Link
1187
- eventKey={logName}
1188
- active={activeTab === logName}
1189
- onClick={() => {
1190
- setActiveTab(logName);
1191
- setSelectedFile({
1192
- path: logName,
1193
- content:
1194
- typeof logContent === "string"
1195
- ? logContent
1196
- : JSON.stringify(logContent, null, 2),
1197
- language: logName.endsWith(".json")
1198
- ? "json"
1199
- : logName.endsWith(".txt")
1200
- ? "plaintext"
1201
- : logName.endsWith(".log")
1202
- ? "log"
1203
- : "plaintext",
1204
- });
1205
- }}
1206
- className="d-flex flex-column align-items-start"
1207
- >
1208
- <div className="d-flex justify-content-between w-100">
1209
- <span className="text-capitalize">{displayName}</span>
1210
- {statusIndicator}
1211
- </div>
1212
- </Nav.Link>
1213
- </Nav.Item>
1214
- );
1215
- };