testeranto 0.200.0 → 0.202.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 (376) hide show
  1. package/README.md +26 -1
  2. package/bundle.js +3 -2
  3. package/design-editor/DesignEditor.tsx +40 -241
  4. package/dist/common/design-editor/DesignEditor.js +33 -198
  5. package/dist/common/src/App.js +158 -16
  6. package/dist/common/src/PM/PM_WithBuild.js +135 -0
  7. package/dist/common/src/PM/PM_WithEslintAndTsc.js +79 -67
  8. package/dist/common/src/PM/PM_WithGit.js +517 -0
  9. package/dist/common/src/PM/PM_WithProcesses.js +519 -0
  10. package/dist/common/src/PM/PM_WithWebSocket.js +535 -0
  11. package/dist/common/src/PM/base.js +62 -0
  12. package/dist/common/src/PM/main.js +533 -1676
  13. package/dist/common/src/PM/metafileOutputs.js +78 -0
  14. package/dist/common/src/PM/node.js +0 -6
  15. package/dist/common/src/PM/pure.js +0 -8
  16. package/dist/common/src/PM/types.js +1 -0
  17. package/dist/common/src/PM/utils.js +210 -0
  18. package/dist/common/src/PM/web.js +0 -6
  19. package/dist/common/src/ReportServer.js +0 -10
  20. package/dist/common/src/ReportServerLib.js +0 -140
  21. package/dist/common/src/components/pure/AppFrame.js +68 -56
  22. package/dist/common/src/components/pure/ArtifactTree.js +80 -0
  23. package/dist/common/src/components/pure/BuildLogViewer.js +106 -0
  24. package/dist/common/src/components/pure/DebugEnv.js +30 -0
  25. package/dist/common/src/components/pure/FileTree.js +34 -0
  26. package/dist/common/src/components/pure/FileTreeItem.js +29 -0
  27. package/dist/common/src/components/pure/GitHubLoginButton.js +18 -0
  28. package/dist/common/src/components/pure/GitIntegrationView.js +342 -0
  29. package/dist/common/src/components/pure/ProcessManager.js +1 -0
  30. package/dist/common/src/components/pure/ProcessManagerView.js +73 -74
  31. package/dist/common/src/components/pure/ProjectPageView.js +4 -117
  32. package/dist/common/src/components/pure/Settings.js +121 -0
  33. package/dist/common/src/components/pure/Settings.test.js +34 -0
  34. package/dist/common/src/components/pure/SignIn.js +22 -0
  35. package/dist/common/src/components/pure/SingleProcessView.js +166 -213
  36. package/dist/common/src/components/pure/TestPageView.js +113 -368
  37. package/dist/common/src/components/pure/TestPageView_utils.js +117 -0
  38. package/dist/common/src/components/pure/TestTable.js +33 -0
  39. package/dist/common/src/components/pure/ToastNotification.js +14 -0
  40. package/dist/common/src/components/pure/UserProfile.js +27 -0
  41. package/dist/common/src/components/stateful/AuthCallbackPage.js +51 -0
  42. package/dist/common/src/components/stateful/FeaturesReporter.js +2 -1
  43. package/dist/common/src/components/stateful/FileTree.js +58 -39
  44. package/dist/common/src/components/stateful/GitIntegrationPage.js +12 -0
  45. package/dist/common/src/components/stateful/ProcessManagerPage.js +13 -15
  46. package/dist/common/src/components/stateful/ProjectPage.js +6 -5
  47. package/dist/common/src/components/stateful/ProjectsPage.js +17 -19
  48. package/dist/common/src/components/stateful/SingleProcessPage.js +16 -26
  49. package/dist/common/src/components/stateful/TestPage.js +7 -5
  50. package/dist/common/src/hooks/useGitMode.js +21 -0
  51. package/dist/common/src/lib/BaseSuite.test/mock.js +15 -8
  52. package/dist/common/src/lib/BaseSuite.test/test.js +56 -80
  53. package/dist/common/src/lib/Tiposkripto.js +24 -0
  54. package/dist/common/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
  55. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
  56. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
  57. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
  58. package/dist/common/src/lib/pmProxy.test/specification.js +167 -52
  59. package/dist/common/src/services/FileService.js +505 -0
  60. package/dist/common/src/services/GitHubAuthService.js +184 -0
  61. package/dist/common/src/testeranto.js +38 -97
  62. package/dist/common/src/utils/api.js +12 -8
  63. package/dist/common/src/utils/gitTest.js +27 -0
  64. package/dist/common/src/utils.js +23 -13
  65. package/dist/common/testeranto.config.js +21 -17
  66. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  67. package/dist/module/design-editor/DesignEditor.js +33 -199
  68. package/dist/module/src/App.js +121 -15
  69. package/dist/module/src/PM/PM_WithBuild.js +128 -0
  70. package/dist/module/src/PM/PM_WithEslintAndTsc.js +79 -67
  71. package/dist/module/src/PM/PM_WithGit.js +477 -0
  72. package/dist/module/src/PM/PM_WithProcesses.js +479 -0
  73. package/dist/module/src/PM/PM_WithWebSocket.js +528 -0
  74. package/dist/module/src/PM/base.js +62 -0
  75. package/dist/module/src/PM/main.js +533 -1676
  76. package/dist/module/src/PM/metafileOutputs.js +78 -0
  77. package/dist/module/src/PM/node.js +0 -6
  78. package/dist/module/src/PM/pure.js +0 -8
  79. package/dist/module/src/PM/types.js +1 -1
  80. package/dist/module/src/PM/utils.js +196 -0
  81. package/dist/module/src/PM/web.js +0 -6
  82. package/dist/module/src/ReportServer.js +1 -9
  83. package/dist/module/src/ReportServerLib.js +1 -134
  84. package/dist/module/src/components/pure/AppFrame.js +66 -24
  85. package/dist/module/src/components/pure/ArtifactTree.js +80 -0
  86. package/dist/module/src/components/pure/BuildLogViewer.js +99 -0
  87. package/dist/module/src/components/pure/DebugEnv.js +23 -0
  88. package/dist/module/src/components/pure/FileTree.js +27 -0
  89. package/dist/module/src/components/pure/FileTreeItem.js +22 -0
  90. package/dist/module/src/components/pure/GitHubLoginButton.js +11 -0
  91. package/dist/module/src/components/pure/GitIntegrationView.js +305 -0
  92. package/dist/module/src/components/pure/ProcessManager.js +1 -0
  93. package/dist/module/src/components/pure/ProcessManagerView.js +74 -75
  94. package/dist/module/src/components/pure/ProjectPageView.js +5 -118
  95. package/dist/module/src/components/pure/Settings.js +84 -0
  96. package/dist/module/src/components/pure/Settings.test.js +29 -0
  97. package/dist/module/src/components/pure/SignIn.js +15 -0
  98. package/dist/module/src/components/pure/SingleProcessView.js +130 -214
  99. package/dist/module/src/components/pure/TestPageView.js +97 -352
  100. package/dist/module/src/components/pure/TestPageView_utils.js +109 -0
  101. package/dist/module/src/components/pure/TestTable.js +26 -0
  102. package/dist/module/src/components/pure/ToastNotification.js +7 -0
  103. package/dist/module/src/components/pure/UserProfile.js +20 -0
  104. package/dist/module/src/components/stateful/AuthCallbackPage.js +14 -0
  105. package/dist/module/src/components/stateful/FeaturesReporter.js +2 -1
  106. package/dist/module/src/components/stateful/FileTree.js +59 -33
  107. package/dist/module/src/components/stateful/GitIntegrationPage.js +5 -0
  108. package/dist/module/src/components/stateful/ProcessManagerPage.js +13 -15
  109. package/dist/module/src/components/stateful/ProjectPage.js +6 -5
  110. package/dist/module/src/components/stateful/ProjectsPage.js +16 -18
  111. package/dist/module/src/components/stateful/SingleProcessPage.js +16 -26
  112. package/dist/module/src/components/stateful/TestPage.js +8 -6
  113. package/dist/module/src/hooks/useGitMode.js +17 -0
  114. package/dist/module/src/lib/BaseSuite.test/mock.js +15 -8
  115. package/dist/module/src/lib/BaseSuite.test/test.js +56 -80
  116. package/dist/module/src/lib/Tiposkripto.js +24 -0
  117. package/dist/module/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
  118. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
  119. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
  120. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
  121. package/dist/module/src/lib/pmProxy.test/specification.js +167 -52
  122. package/dist/module/src/services/FileService.js +468 -0
  123. package/dist/module/src/services/GitHubAuthService.js +180 -0
  124. package/dist/module/src/testeranto.js +38 -97
  125. package/dist/module/src/utils/api.js +10 -7
  126. package/dist/module/src/utils/gitTest.js +23 -0
  127. package/dist/module/src/utils.js +21 -12
  128. package/dist/module/testeranto.config.js +21 -17
  129. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  130. package/dist/prebuild/App.css +94 -121
  131. package/dist/prebuild/App.js +44601 -11225
  132. package/dist/prebuild/testeranto.mjs +4106 -0
  133. package/dist/types/design-editor/DesignEditor.d.ts +1 -18
  134. package/dist/types/src/App.d.ts +18 -0
  135. package/dist/types/src/PM/PM_WithBuild.d.ts +13 -0
  136. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +2 -4
  137. package/dist/types/src/PM/PM_WithGit.d.ts +27 -0
  138. package/dist/types/src/PM/PM_WithProcesses.d.ts +29 -0
  139. package/dist/types/src/PM/PM_WithWebSocket.d.ts +108 -0
  140. package/dist/types/src/PM/base.d.ts +1 -1
  141. package/dist/types/src/PM/index.d.ts +0 -2
  142. package/dist/types/src/PM/main.d.ts +6 -77
  143. package/dist/types/src/PM/metafileOutputs.d.ts +0 -0
  144. package/dist/types/src/PM/node.d.ts +0 -2
  145. package/dist/types/src/PM/pure.d.ts +0 -2
  146. package/dist/types/src/PM/types.d.ts +118 -0
  147. package/dist/types/src/PM/utils.d.ts +35 -0
  148. package/dist/types/src/PM/web.d.ts +0 -2
  149. package/dist/types/src/Pure.d.ts +6 -1
  150. package/dist/types/src/ReportServer.d.ts +0 -1
  151. package/dist/types/src/ReportServerLib.d.ts +0 -1
  152. package/dist/types/src/Types.d.ts +1 -0
  153. package/dist/types/src/components/pure/ArtifactTree.d.ts +0 -0
  154. package/dist/types/src/components/pure/BuildLogViewer.d.ts +7 -0
  155. package/dist/types/src/components/pure/DebugEnv.d.ts +2 -0
  156. package/dist/types/src/components/pure/FileTree.d.ts +6 -0
  157. package/dist/types/src/components/pure/FileTreeItem.d.ts +8 -0
  158. package/dist/types/src/components/pure/GitHubLoginButton.d.ts +8 -0
  159. package/dist/types/src/components/pure/GitIntegrationView.d.ts +1 -0
  160. package/dist/types/src/components/pure/Settings.d.ts +1 -0
  161. package/dist/types/src/components/pure/Settings.test.d.ts +1 -0
  162. package/dist/types/src/components/pure/SignIn.d.ts +1 -0
  163. package/dist/types/src/components/pure/SingleProcessView.d.ts +10 -0
  164. package/dist/types/src/components/pure/TestPageView.d.ts +2 -1
  165. package/dist/types/src/components/pure/TestPageView_utils.d.ts +23 -0
  166. package/dist/types/src/components/pure/TestTable.d.ts +16 -0
  167. package/dist/types/src/components/pure/ToastNotification.d.ts +6 -0
  168. package/dist/types/src/components/pure/UserProfile.d.ts +2 -0
  169. package/dist/types/src/components/stateful/AuthCallbackPage.d.ts +2 -0
  170. package/dist/types/src/components/stateful/FileTree.d.ts +0 -8
  171. package/dist/types/src/components/stateful/GitIntegrationPage.d.ts +1 -0
  172. package/dist/types/src/hooks/useGitMode.d.ts +7 -0
  173. package/dist/types/src/lib/BaseSuite.test/mock.d.ts +2 -2
  174. package/dist/types/src/lib/BaseSuite.test/test.d.ts +4 -3
  175. package/dist/types/src/lib/Tiposkripto.d.ts +2 -0
  176. package/dist/types/src/lib/Tiposkripto.test/MockTiposkripto.d.ts +3 -0
  177. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.types.d.ts +5 -0
  178. package/dist/types/src/lib/index.d.ts +6 -0
  179. package/dist/types/src/services/FileService.d.ts +34 -0
  180. package/dist/types/src/services/GitHubAuthService.d.ts +32 -0
  181. package/dist/types/src/utils/api.d.ts +1 -0
  182. package/dist/types/src/utils/gitTest.d.ts +11 -0
  183. package/dist/types/src/utils.d.ts +3 -3
  184. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  185. package/example/__pycache__/Calculator.cpython-313.pyc +0 -0
  186. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/README.md +187 -0
  187. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_given.go +163 -0
  188. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_suite.go +85 -0
  189. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_then.go +21 -0
  190. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_when.go +21 -0
  191. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/golingvu.go +554 -0
  192. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/test_adapter.go +33 -0
  193. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/types.go +72 -0
  194. package/example/vendor/modules.txt +5 -0
  195. package/git-integration-plan.md +395 -0
  196. package/package.json +26 -14
  197. package/src/App.tsx +169 -18
  198. package/src/PM/PM_WithBuild.ts +171 -0
  199. package/src/PM/PM_WithEslintAndTsc.ts +109 -86
  200. package/src/PM/PM_WithGit.ts +585 -0
  201. package/src/PM/PM_WithProcesses.ts +639 -0
  202. package/src/PM/PM_WithWebSocket.ts +631 -0
  203. package/src/PM/base.ts +63 -1
  204. package/src/PM/index.ts +8 -5
  205. package/src/PM/main.ts +672 -2050
  206. package/src/PM/metafileOutputs.ts +90 -0
  207. package/src/PM/node.ts +18 -18
  208. package/src/PM/pure.ts +5 -13
  209. package/src/PM/types.ts +145 -0
  210. package/src/PM/utils.ts +256 -0
  211. package/src/PM/web.ts +8 -8
  212. package/src/README.md +122 -0
  213. package/src/ReportServer.ts +0 -12
  214. package/src/ReportServerLib.ts +0 -147
  215. package/src/Types.ts +1 -0
  216. package/src/app.scss +14 -164
  217. package/src/components/pure/AppFrame.tsx +237 -71
  218. package/src/components/pure/ArtifactTree.tsx +82 -0
  219. package/src/components/pure/BuildLogViewer.tsx +168 -0
  220. package/src/components/pure/DebugEnv.tsx +30 -0
  221. package/src/components/pure/FileTree.tsx +58 -0
  222. package/src/components/pure/FileTreeItem.tsx +49 -0
  223. package/src/components/pure/GitHubLoginButton.tsx +31 -0
  224. package/src/components/pure/GitIntegrationView.tsx +443 -0
  225. package/src/components/pure/ProcessManager.tsx +6 -5
  226. package/src/components/pure/ProcessManagerView.tsx +162 -166
  227. package/src/components/pure/ProjectPageView.tsx +6 -224
  228. package/src/components/pure/Settings.test.tsx +34 -0
  229. package/src/components/pure/Settings.tsx +163 -0
  230. package/src/components/pure/SignIn.tsx +33 -0
  231. package/src/components/pure/SingleProcessView.tsx +231 -235
  232. package/src/components/pure/TestPageView.test/specification.ts +1 -0
  233. package/src/components/pure/TestPageView.tsx +317 -826
  234. package/src/components/pure/TestPageView_utils.tsx +285 -0
  235. package/src/components/pure/TestTable.tsx +88 -0
  236. package/src/components/pure/ToastNotification.tsx +19 -0
  237. package/src/components/pure/UserProfile.tsx +44 -0
  238. package/src/components/stateful/AuthCallbackPage.tsx +21 -0
  239. package/src/components/stateful/FeaturesReporter.tsx +3 -1
  240. package/src/components/stateful/FileTree.tsx +58 -58
  241. package/src/components/stateful/GitIntegrationPage.tsx +8 -0
  242. package/src/components/stateful/ProcessManagerPage.tsx +13 -17
  243. package/src/components/stateful/ProjectPage.tsx +6 -5
  244. package/src/components/stateful/ProjectsPage.tsx +17 -19
  245. package/src/components/stateful/SVGEditor/CircleForm.tsx +68 -0
  246. package/src/components/stateful/SVGEditor/GroupForm.tsx +56 -0
  247. package/src/components/stateful/SVGEditor/RectForm.tsx +74 -0
  248. package/src/components/stateful/SVGEditor/SVGAttributeField.tsx +29 -0
  249. package/src/components/stateful/SVGEditor/SVGAttributesEditor.tsx +73 -0
  250. package/src/components/stateful/SVGEditor/SVGEditorControls.tsx +45 -0
  251. package/src/components/stateful/SVGEditor/SVGElementForm.tsx +45 -0
  252. package/src/components/stateful/SVGEditor/SVGPreview.tsx +225 -0
  253. package/src/components/stateful/SVGEditor/SVGTextEditor.tsx +166 -0
  254. package/src/components/stateful/SVGEditor/SVGTree.tsx +159 -0
  255. package/src/components/stateful/SVGEditor/SVGTypes.ts +36 -0
  256. package/src/components/stateful/SVGEditor/svg.xsd.xml +3038 -0
  257. package/src/components/stateful/SVGEditorPage.tsx +503 -0
  258. package/src/components/stateful/SingleProcessPage.tsx +18 -31
  259. package/src/components/stateful/TestPage.tsx +25 -22
  260. package/src/golingvu/golingvu.go +38 -2
  261. package/src/hooks/useGitMode.ts +20 -0
  262. package/src/lib/BaseSuite.test/mock.ts +16 -10
  263. package/src/lib/BaseSuite.test/test.ts +144 -103
  264. package/src/lib/Tiposkripto.test/MockTiposkripto.ts +178 -14
  265. package/src/lib/Tiposkripto.test/Tiposkripto.adapter.ts +9 -14
  266. package/src/lib/Tiposkripto.test/Tiposkripto.implementation.ts +78 -38
  267. package/src/lib/Tiposkripto.test/Tiposkripto.specification.ts +51 -9
  268. package/src/lib/Tiposkripto.test/Tiposkripto.types.ts +5 -0
  269. package/src/lib/Tiposkripto.ts +27 -0
  270. package/src/lib/index.ts +7 -0
  271. package/src/lib/pmProxy.test/specification.ts +168 -166
  272. package/src/pitono/PM/__pycache__/python.cpython-313.pyc +0 -0
  273. package/src/pitono/__pycache__/Pitono.cpython-313.pyc +0 -0
  274. package/src/pitono/__pycache__/__init__.cpython-313.pyc +0 -0
  275. package/src/pitono/__pycache__/base_given.cpython-313.pyc +0 -0
  276. package/src/pitono/__pycache__/base_suite.cpython-313.pyc +0 -0
  277. package/src/pitono/__pycache__/base_then.cpython-313.pyc +0 -0
  278. package/src/pitono/__pycache__/base_when.cpython-313.pyc +0 -0
  279. package/src/pitono/__pycache__/core_generator.cpython-313.pyc +0 -0
  280. package/src/pitono/__pycache__/simple_adapter.cpython-313.pyc +0 -0
  281. package/src/pitono/__pycache__/types.cpython-313.pyc +0 -0
  282. package/src/services/FileService.ts +542 -0
  283. package/src/services/GitHubAuthService.ts +240 -0
  284. package/src/testeranto.ts +62 -140
  285. package/src/utils/api.ts +15 -13
  286. package/src/utils/gitTest.ts +29 -0
  287. package/src/utils.ts +21 -12
  288. package/testeranto/App.css +94 -121
  289. package/testeranto/App.js +44601 -11225
  290. package/testeranto/bundles/golang/core/Calculator.golingvu.go +53 -0
  291. package/testeranto/bundles/golang/core/Calculator.golingvu.golingvu.go +53 -0
  292. package/testeranto/bundles/node/core/chunk-RIM6RECA.mjs +1170 -0
  293. package/testeranto/bundles/node/core/chunk-VXVF7WFO.mjs +4321 -0
  294. package/testeranto/bundles/node/core/example/Calculator.test.mjs +503 -0
  295. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +94 -1231
  296. package/testeranto/bundles/node/core/src/lib/TipoSkripto.test/TipoSkripto.mjs +574 -0
  297. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +482 -0
  298. package/testeranto/bundles/pure/core/chunk-XYOCRDEQ.mjs +1080 -0
  299. package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
  300. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +93 -1146
  301. package/testeranto/bundles/python/core/Calculator.pitono.test.py +24 -0
  302. package/testeranto/bundles/python/core/test_example.py +24 -0
  303. package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
  304. package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
  305. package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
  306. package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
  307. package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
  308. package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
  309. package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
  310. package/testeranto/bundles/web/core/chunk-DFRN4SYZ.mjs +2297 -0
  311. package/testeranto/bundles/web/core/chunk-JMDLMADH.mjs +27996 -0
  312. package/testeranto/bundles/web/core/chunk-LQMU5NCG.mjs +3082 -0
  313. package/testeranto/bundles/web/core/chunk-Q5TONB2Z.mjs +6874 -0
  314. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +164 -0
  315. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.css +11697 -0
  316. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.mjs +336 -0
  317. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +11697 -0
  318. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +517 -0
  319. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +107 -1134
  320. package/testeranto/metafiles/golang/core.json +3 -3
  321. package/testeranto/metafiles/node/core.json +474 -31
  322. package/testeranto/metafiles/pure/core.json +144 -28
  323. package/testeranto/metafiles/python/core.json +11 -0
  324. package/testeranto/metafiles/web/core.json +15829 -45
  325. package/testeranto/reports/core/config.json +40 -0
  326. package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
  327. package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
  328. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
  329. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +73 -0
  330. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
  331. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +91 -0
  332. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
  333. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +2 -0
  334. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/tests.json +68 -0
  335. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  336. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  337. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +30 -0
  338. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
  339. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +2 -0
  340. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/tests.json +88 -0
  341. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  342. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -6
  343. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +0 -11
  344. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +1 -0
  345. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +1 -1
  346. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +35 -38
  347. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -2
  348. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +0 -10
  349. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +40 -38
  350. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +1 -1
  351. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/exit.log +1 -0
  352. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/lint_errors.txt +0 -0
  353. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/message.txt +17 -0
  354. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/prompt.txt +17 -0
  355. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stderr.log +55 -0
  356. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stdout.log +191 -0
  357. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/type_errors.txt +71 -0
  358. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  359. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
  360. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  361. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
  362. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +20 -0
  363. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +4 -0
  364. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +49 -0
  365. package/testeranto/reports/core/summary.json +34 -6
  366. package/testeranto.config.ts +26 -20
  367. package/tsc.log +141 -91
  368. package/tsconfig.json +6 -2
  369. package/dist/prebuild/ReportServer.mjs +0 -227
  370. package/dist/prebuild/mothership/index.mjs +0 -22
  371. package/dist/types/design-editor/server.d.ts +0 -1
  372. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +0 -15
  373. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -2
  374. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +0 -25
  375. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +0 -56
  376. /package/testeranto/reports/core/src/{lib/BaseSuite.test/web.test/web → Pure.test/pure}/message.txt +0 -0
@@ -1,46 +1,26 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
  import React, { useState, useEffect } from "react";
4
- import { Toast, ToastContainer } from "react-bootstrap";
5
4
  import { useNavigate } from "react-router-dom";
6
- import { STANDARD_LOGS, RUNTIME_SPECIFIC_LOGS } from "../../utils/logFiles";
7
- import { Container, Row, Col, Nav, Button, Modal } from "react-bootstrap";
5
+ import { useWebSocket } from "../../App";
6
+ import { STANDARD_LOGS, RUNTIME_SPECIFIC_LOGS, } from "../../utils/logFiles";
7
+ import { Container, Row, Col, Button, Modal } from "react-bootstrap";
8
8
  import { Editor } from "@monaco-editor/react";
9
9
  import { NavBar } from "./NavBar";
10
- import { TestStatusBadge } from "../TestStatusBadge";
11
- const FileTree = ({ data, onSelect, level = 0, selectedSourcePath }) => {
12
- const [expanded, setExpanded] = useState({});
13
- const toggleExpand = (path) => {
14
- setExpanded((prev) => (Object.assign(Object.assign({}, prev), { [path]: !prev[path] })));
15
- };
16
- return (React.createElement("div", null, Object.entries(data).map(([name, node]) => {
17
- const path = Object.keys(expanded).find((k) => k.endsWith(name)) || name;
18
- const isExpanded = expanded[path];
19
- if (node.__isFile) {
20
- return (React.createElement(FileTreeItem, { key: name, name: name, isFile: true, level: level, isSelected: selectedSourcePath === path, onClick: () => onSelect(path, node.content) }));
21
- }
22
- else {
23
- return (React.createElement("div", { key: name },
24
- React.createElement("div", { className: "d-flex align-items-center py-1 text-dark", style: {
25
- paddingLeft: `${level * 16}px`,
26
- cursor: 'pointer',
27
- fontSize: '0.875rem'
28
- }, onClick: () => toggleExpand(path) },
29
- React.createElement("i", { className: `bi ${isExpanded ? 'bi-folder2-open' : 'bi-folder'} me-1` }),
30
- React.createElement("span", null, name)),
31
- isExpanded && (React.createElement(FileTree, { data: node, onSelect: onSelect, level: level + 1, selectedSourcePath: selectedSourcePath }))));
32
- }
33
- })));
34
- };
35
- export const TestPageView = ({ projectName, testName, decodedTestPath, runtime, testsExist, errorCounts, logs, }) => {
10
+ import { FileTreeItem } from "./FileTreeItem";
11
+ import { FileTree } from "./FileTree";
12
+ import { ToastNotification } from "./ToastNotification";
13
+ import { getLanguage, renderTestResults } from "./TestPageView_utils";
14
+ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime, testsExist, errorCounts, logs, isWebSocketConnected, }) => {
36
15
  const navigate = useNavigate();
37
16
  const [showAiderModal, setShowAiderModal] = useState(false);
38
- const [messageOption, setMessageOption] = useState('default');
39
- const [customMessage, setCustomMessage] = useState(typeof logs['message.txt'] === 'string' ? logs['message.txt'] : 'make a script that prints hello');
17
+ const [messageOption, setMessageOption] = useState("default");
18
+ const [customMessage, setCustomMessage] = useState(typeof logs["message.txt"] === "string"
19
+ ? logs["message.txt"]
20
+ : "make a script that prints hello");
40
21
  const [showToast, setShowToast] = useState(false);
41
- const [toastMessage, setToastMessage] = useState('');
42
- const [toastVariant, setToastVariant] = useState('success');
43
- const [ws, setWs] = useState(null);
22
+ const [toastMessage, setToastMessage] = useState("");
23
+ const [toastVariant, setToastVariant] = useState("success");
44
24
  const [expandedSections, setExpandedSections] = useState({
45
25
  standardLogs: true,
46
26
  runtimeLogs: true,
@@ -61,11 +41,13 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
61
41
  // Collect all input files from metafile outputs related to this test
62
42
  Object.entries(metafile.outputs || {}).forEach(([outputPath, output]) => {
63
43
  // Normalize paths for comparison
64
- const normalizedTestName = testName.replace(/\\/g, '/');
65
- const normalizedEntryPoint = output.entryPoint ? output.entryPoint.replace(/\\/g, '/') : '';
44
+ const normalizedTestName = testName.replace(/\\/g, "/");
45
+ const normalizedEntryPoint = output.entryPoint
46
+ ? output.entryPoint.replace(/\\/g, "/")
47
+ : "";
66
48
  if (normalizedEntryPoint.includes(normalizedTestName)) {
67
49
  Object.keys(output.inputs || {}).forEach((inputPath) => {
68
- sourceFilesSet.add(inputPath.replace(/\\/g, '/'));
50
+ sourceFilesSet.add(inputPath.replace(/\\/g, "/"));
69
51
  });
70
52
  }
71
53
  });
@@ -73,150 +55,28 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
73
55
  const filteredErrors = (((_b = logs.build_logs) === null || _b === void 0 ? void 0 : _b.errors) || []).filter((err) => {
74
56
  if (!err.location || !err.location.file)
75
57
  return false;
76
- return sourceFilesSet.has(err.location.file.replace(/\\/g, '/'));
58
+ return sourceFilesSet.has(err.location.file.replace(/\\/g, "/"));
77
59
  });
78
60
  const filteredWarnings = (((_c = logs.build_logs) === null || _c === void 0 ? void 0 : _c.warnings) || []).filter((warn) => {
79
61
  if (!warn.location || !warn.location.file)
80
62
  return false;
81
- return sourceFilesSet.has(warn.location.file.replace(/\\/g, '/'));
63
+ return sourceFilesSet.has(warn.location.file.replace(/\\/g, "/"));
82
64
  });
83
65
  setBuildErrors({ errors: filteredErrors, warnings: filteredWarnings });
84
66
  }, [logs, testName]);
85
67
  // Update customMessage when logs change
86
68
  useEffect(() => {
87
- if (typeof logs['message.txt'] === 'string' && logs['message.txt'].trim()) {
88
- setCustomMessage(logs['message.txt']);
69
+ if (typeof logs["message.txt"] === "string" && logs["message.txt"].trim()) {
70
+ setCustomMessage(logs["message.txt"]);
89
71
  }
90
72
  }, [logs]);
91
- // Set up WebSocket connection
92
- useEffect(() => {
93
- const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
94
- const wsUrl = `${wsProtocol}//${window.location.host}`;
95
- const websocket = new WebSocket(wsUrl);
96
- setWs(websocket);
97
- return () => {
98
- websocket.close();
99
- };
100
- }, []);
73
+ // Use the centralized WebSocket from App context
74
+ const wsContext = useWebSocket();
75
+ const ws = wsContext === null || wsContext === void 0 ? void 0 : wsContext.ws;
101
76
  const [activeTab, setActiveTab] = React.useState("tests.json");
102
77
  const [selectedFile, setSelectedFile] = useState(null);
103
78
  const [selectedSourcePath, setSelectedSourcePath] = useState(null);
104
79
  const [editorTheme, setEditorTheme] = useState("vs-dark");
105
- // Determine language from file extension
106
- const getLanguage = (path) => {
107
- var _a;
108
- const ext = (_a = path.split(".").pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
109
- switch (ext) {
110
- case "ts":
111
- return "typescript";
112
- case "tsx":
113
- return "typescript";
114
- case "js":
115
- return "javascript";
116
- case "json":
117
- return "json";
118
- case "md":
119
- return "markdown";
120
- default:
121
- return "plaintext";
122
- }
123
- };
124
- const renderTestResults = (testData) => {
125
- return (React.createElement("div", { className: "test-results" },
126
- testData.givens.map((given, i) => (React.createElement("div", { key: i, className: "mb-4 card" },
127
- React.createElement("div", { className: "card-header bg-primary text-white" },
128
- React.createElement("div", { className: "d-flex justify-content-between align-items-center" },
129
- React.createElement("div", null,
130
- React.createElement("h4", null,
131
- "Given: ",
132
- given.name),
133
- given.features && given.features.length > 0 && (React.createElement("div", { className: "mt-1" },
134
- React.createElement("small", null, "Features:"),
135
- React.createElement("ul", { className: "list-unstyled" }, given.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith("http") ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer", className: "text-white" }, new URL(feature).hostname)) : (React.createElement("span", { className: "text-white" }, feature))))))))),
136
- given.artifacts && given.artifacts.length > 0 && (React.createElement("div", { className: "dropdown" },
137
- React.createElement("button", { className: "btn btn-sm btn-light dropdown-toggle", type: "button", "data-bs-toggle": "dropdown" },
138
- "Artifacts (",
139
- given.artifacts.length,
140
- ")"),
141
- React.createElement("ul", { className: "dropdown-menu dropdown-menu-end" }, given.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
142
- React.createElement("a", { className: "dropdown-item", href: `reports/${projectName}/${testName
143
- .split(".")
144
- .slice(0, -1)
145
- .join(".")}/${runtime}/${artifact}`, target: "_blank", rel: "noopener noreferrer" }, artifact.split("/").pop()))))))))),
146
- React.createElement("div", { className: "card-body" },
147
- given.whens.map((when, j) => (React.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error
148
- ? "bg-danger text-white"
149
- : "bg-success text-white"}` },
150
- React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
151
- React.createElement("div", null,
152
- React.createElement("div", null,
153
- React.createElement("strong", null, "When:"),
154
- " ",
155
- when.name,
156
- when.features && when.features.length > 0 && (React.createElement("div", { className: "mt-2" },
157
- React.createElement("small", null, "Features:"),
158
- React.createElement("ul", { className: "list-unstyled" }, when.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith("http") ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))),
159
- when.error && React.createElement("pre", { className: "mt-2" }, when.error))),
160
- when.artifacts && when.artifacts.length > 0 && (React.createElement("div", { className: "ms-3" },
161
- React.createElement("strong", null, "Artifacts:"),
162
- React.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
163
- React.createElement("a", { href: `reports/${projectName}/${testName
164
- .split(".")
165
- .slice(0, -1)
166
- .join(".")}/${runtime}/${artifact}`, target: "_blank", className: "text-white", rel: "noopener noreferrer" }, artifact.split("/").pop()))))))))))),
167
- given.thens.map((then, k) => (React.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error
168
- ? "bg-danger text-white"
169
- : "bg-success text-white"}` },
170
- React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
171
- React.createElement("div", null,
172
- React.createElement("div", null,
173
- React.createElement("strong", null, "Then:"),
174
- " ",
175
- then.name,
176
- then.features && then.features.length > 0 && (React.createElement("div", { className: "mt-2" },
177
- React.createElement("small", null, "Features:"),
178
- React.createElement("ul", { className: "list-unstyled" }, then.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith("http") ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))),
179
- then.error && React.createElement("pre", { className: "mt-2" }, then.error))),
180
- then.artifacts && then.artifacts.length > 0 && (React.createElement("div", { className: "ms-3" },
181
- React.createElement("strong", null, "Artifacts:"),
182
- React.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
183
- React.createElement("a", { href: `reports/${projectName}/${testName
184
- .split(".")
185
- .slice(0, -1)
186
- .join(".")}/${runtime}/${artifact}`, target: "_blank", className: "text-white", rel: "noopener noreferrer" }, artifact.split("/").pop()))))))))))))))),
187
- (buildErrors.errors.length > 0 || buildErrors.warnings.length > 0) && (React.createElement("div", { className: "mb-4 card border-danger" },
188
- React.createElement("div", { className: "card-header bg-danger text-white" },
189
- React.createElement("h4", null, "Build Errors and Warnings")),
190
- React.createElement("div", { className: "card-body" },
191
- buildErrors.errors.length > 0 && (React.createElement(React.Fragment, null,
192
- React.createElement("h5", null, "Errors"),
193
- React.createElement("ul", null, buildErrors.errors.map((error, idx) => (React.createElement("li", { key: `build-error-${idx}` },
194
- React.createElement("strong", null, error.text),
195
- error.location && (React.createElement("div", null,
196
- "File: ",
197
- error.location.file,
198
- " Line: ",
199
- error.location.line,
200
- " Column: ",
201
- error.location.column)))))))),
202
- buildErrors.warnings.length > 0 && (React.createElement(React.Fragment, null,
203
- React.createElement("h5", null, "Warnings"),
204
- React.createElement("ul", null, buildErrors.warnings.map((warning, idx) => (React.createElement("li", { key: `build-warning-${idx}` },
205
- React.createElement("strong", null, warning.text),
206
- warning.location && (React.createElement("div", null,
207
- "File: ",
208
- warning.location.file,
209
- " Line: ",
210
- warning.location.line,
211
- " Column: ",
212
- warning.location.column)))))))))))));
213
- };
214
- console.log("Rendering TestPageView with logs:", {
215
- logKeys: Object.keys(logs),
216
- sourceFiles: logs.source_files ? Object.keys(logs.source_files) : null,
217
- selectedFile,
218
- activeTab,
219
- });
220
80
  return (React.createElement(Container, { fluid: true, className: "px-0" },
221
81
  React.createElement(NavBar, { title: decodedTestPath, backLink: `/projects/${projectName}`, navItems: [
222
82
  {
@@ -231,20 +91,25 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
231
91
  },
232
92
  className: "pe-none d-flex align-items-center gap-2",
233
93
  },
234
- ], rightContent: React.createElement(Button, { variant: "info", onClick: () => setShowAiderModal(true), className: "ms-2", title: "AI Assistant" }, "\uD83E\uDD16") }),
235
- React.createElement(Modal, { show: showAiderModal, onHide: () => setShowAiderModal(false), size: "lg", onShow: () => setMessageOption('default') },
94
+ ], rightContent: React.createElement(Button, { variant: "info", onClick: () => setShowAiderModal(true), className: "ms-2 position-relative", title: isWebSocketConnected
95
+ ? "AI Assistant"
96
+ : "AI Assistant (WebSocket not connected)", disabled: !isWebSocketConnected },
97
+ "\uD83E\uDD16",
98
+ !isWebSocketConnected && (React.createElement("span", { className: "position-absolute top-0 start-100 translate-middle p-1 bg-danger border border-light rounded-circle", title: "WebSocket disconnected" },
99
+ React.createElement("span", { className: "visually-hidden" }, "WebSocket disconnected")))) }),
100
+ React.createElement(Modal, { show: showAiderModal, onHide: () => setShowAiderModal(false), size: "lg", onShow: () => setMessageOption("default") },
236
101
  React.createElement(Modal.Header, { closeButton: true },
237
102
  React.createElement(Modal.Title, null, "Aider")),
238
103
  React.createElement(Modal.Body, null,
239
104
  React.createElement("div", { className: "mb-3" },
240
105
  React.createElement("div", { className: "form-check" },
241
- React.createElement("input", { className: "form-check-input", type: "radio", name: "messageOption", id: "defaultMessage", value: "default", checked: messageOption === 'default', onChange: () => setMessageOption('default') }),
106
+ React.createElement("input", { className: "form-check-input", type: "radio", name: "messageOption", id: "defaultMessage", value: "default", checked: messageOption === "default", onChange: () => setMessageOption("default") }),
242
107
  React.createElement("label", { className: "form-check-label", htmlFor: "defaultMessage" }, "Use default message.txt")),
243
108
  React.createElement("div", { className: "form-check" },
244
- React.createElement("input", { className: "form-check-input", type: "radio", name: "messageOption", id: "customMessage", value: "custom", checked: messageOption === 'custom', onChange: () => setMessageOption('custom') }),
109
+ React.createElement("input", { className: "form-check-input", type: "radio", name: "messageOption", id: "customMessage", value: "custom", checked: messageOption === "custom", onChange: () => setMessageOption("custom") }),
245
110
  React.createElement("label", { className: "form-check-label", htmlFor: "customMessage" }, "Use custom message")),
246
- messageOption === 'custom' && (React.createElement("div", { className: "mt-2" },
247
- React.createElement("textarea", { className: "form-control", rows: 8, placeholder: "Enter your custom message", value: customMessage, onChange: (e) => setCustomMessage(e.target.value), style: { minHeight: '500px' } }))))),
111
+ messageOption === "custom" && (React.createElement("div", { className: "mt-2" },
112
+ React.createElement("textarea", { className: "form-control", rows: 8, placeholder: "Enter your custom message", value: customMessage, onChange: (e) => setCustomMessage(e.target.value), style: { minHeight: "500px" } }))))),
248
113
  React.createElement(Modal.Footer, null,
249
114
  React.createElement(Button, { variant: "primary", onClick: async () => {
250
115
  try {
@@ -253,7 +118,7 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
253
118
  .slice(0, -1)
254
119
  .join(".")}/${runtime}/prompt.txt`;
255
120
  let command = `aider --load ${promptPath}`;
256
- if (messageOption === 'default') {
121
+ if (messageOption === "default") {
257
122
  const messagePath = `testeranto/reports/${projectName}/${testName
258
123
  .split(".")
259
124
  .slice(0, -1)
@@ -263,33 +128,31 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
263
128
  else {
264
129
  command += ` --message "${customMessage}"`;
265
130
  }
266
- // Send command to server via WebSocket
267
- const ws = new WebSocket(`ws://${window.location.host}`);
268
- ws.onopen = () => {
131
+ // Send command to server via the centralized WebSocket
132
+ if (isWebSocketConnected && ws) {
269
133
  ws.send(JSON.stringify({
270
- type: 'executeCommand',
271
- command: command
134
+ type: "executeCommand",
135
+ command: command,
272
136
  }));
273
- setToastMessage('Command sent to server');
274
- setToastVariant('success');
137
+ setToastMessage("Command sent to server");
138
+ setToastVariant("success");
275
139
  setShowToast(true);
276
140
  setShowAiderModal(false);
277
- ws.close();
278
141
  // Navigate to process manager page
279
142
  setTimeout(() => {
280
- navigate('/processes');
143
+ navigate("/processes");
281
144
  }, 1000);
282
- };
283
- ws.onerror = (error) => {
284
- setToastMessage('Failed to connect to server');
285
- setToastVariant('danger');
145
+ }
146
+ else {
147
+ setToastMessage("WebSocket connection not ready");
148
+ setToastVariant("danger");
286
149
  setShowToast(true);
287
- };
150
+ }
288
151
  }
289
152
  catch (err) {
290
153
  console.error("WebSocket error:", err);
291
- setToastMessage('Error preparing command');
292
- setToastVariant('danger');
154
+ setToastMessage("Error preparing command");
155
+ setToastVariant("danger");
293
156
  setShowToast(true);
294
157
  }
295
158
  } }, "Run Aider Command"))),
@@ -297,26 +160,33 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
297
160
  React.createElement(Col, { sm: 3, className: "border-end", style: {
298
161
  height: "calc(100vh - 56px)",
299
162
  overflow: "auto",
300
- backgroundColor: '#f8f9fa'
163
+ backgroundColor: "#f8f9fa",
301
164
  } },
302
165
  React.createElement("div", { className: "p-2 border-bottom" },
303
166
  React.createElement("small", { className: "fw-bold text-muted" }, "EXPLORER")),
304
167
  React.createElement("div", { className: "p-2" },
305
- React.createElement("div", { className: "d-flex align-items-center text-muted mb-1", style: { cursor: 'pointer', fontSize: '0.875rem' }, onClick: () => setExpandedSections(prev => (Object.assign(Object.assign({}, prev), { standardLogs: !prev.standardLogs }))) },
306
- React.createElement("i", { className: `bi bi-chevron-${expandedSections.standardLogs ? 'down' : 'right'} me-1` }),
168
+ React.createElement("div", { className: "d-flex align-items-center text-muted mb-1", style: { cursor: "pointer", fontSize: "0.875rem" }, onClick: () => setExpandedSections((prev) => (Object.assign(Object.assign({}, prev), { standardLogs: !prev.standardLogs }))) },
169
+ React.createElement("i", { className: `bi bi-chevron-${expandedSections.standardLogs ? "down" : "right"} me-1` }),
307
170
  React.createElement("span", null, "Standard Logs")),
308
171
  expandedSections.standardLogs && (React.createElement("div", null, Object.values(STANDARD_LOGS).map((logName) => {
309
172
  const logContent = logs ? logs[logName] : undefined;
310
173
  const exists = logContent !== undefined &&
311
- ((typeof logContent === "string" && logContent.trim() !== "") ||
312
- (typeof logContent === "object" && logContent !== null && Object.keys(logContent).length > 0));
174
+ ((typeof logContent === "string" &&
175
+ logContent.trim() !== "") ||
176
+ (typeof logContent === "object" &&
177
+ logContent !== null &&
178
+ Object.keys(logContent).length > 0));
313
179
  return (React.createElement(FileTreeItem, { key: logName, name: logName, isFile: true, level: 1, isSelected: activeTab === logName, exists: exists, onClick: () => {
314
180
  if (exists) {
315
181
  setActiveTab(logName);
316
182
  setSelectedFile({
317
183
  path: logName,
318
- content: typeof logContent === "string" ? logContent : JSON.stringify(logContent, null, 2),
319
- language: logName.endsWith(".json") ? "json" : "plaintext",
184
+ content: typeof logContent === "string"
185
+ ? logContent
186
+ : JSON.stringify(logContent, null, 2),
187
+ language: logName.endsWith(".json")
188
+ ? "json"
189
+ : "plaintext",
320
190
  });
321
191
  }
322
192
  else {
@@ -329,23 +199,32 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
329
199
  }
330
200
  } }));
331
201
  })))),
332
- runtime && RUNTIME_SPECIFIC_LOGS[runtime] &&
333
- Object.values(RUNTIME_SPECIFIC_LOGS[runtime]).length > 0 && (React.createElement("div", { className: "p-2" },
334
- React.createElement("div", { className: "d-flex align-items-center text-muted mb-1", style: { cursor: 'pointer', fontSize: '0.875rem' }, onClick: () => setExpandedSections(prev => (Object.assign(Object.assign({}, prev), { runtimeLogs: !prev.runtimeLogs }))) },
335
- React.createElement("i", { className: `bi bi-chevron-${expandedSections.runtimeLogs ? 'down' : 'right'} me-1` }),
202
+ runtime &&
203
+ RUNTIME_SPECIFIC_LOGS[runtime] &&
204
+ Object.values(RUNTIME_SPECIFIC_LOGS[runtime])
205
+ .length > 0 && (React.createElement("div", { className: "p-2" },
206
+ React.createElement("div", { className: "d-flex align-items-center text-muted mb-1", style: { cursor: "pointer", fontSize: "0.875rem" }, onClick: () => setExpandedSections((prev) => (Object.assign(Object.assign({}, prev), { runtimeLogs: !prev.runtimeLogs }))) },
207
+ React.createElement("i", { className: `bi bi-chevron-${expandedSections.runtimeLogs ? "down" : "right"} me-1` }),
336
208
  React.createElement("span", null, "Runtime Logs")),
337
209
  expandedSections.runtimeLogs && (React.createElement("div", null, Object.values(RUNTIME_SPECIFIC_LOGS[runtime]).map((logName) => {
338
210
  const logContent = logs ? logs[logName] : undefined;
339
211
  const exists = logContent !== undefined &&
340
- ((typeof logContent === "string" && logContent.trim() !== "") ||
341
- (typeof logContent === "object" && logContent !== null && Object.keys(logContent).length > 0));
212
+ ((typeof logContent === "string" &&
213
+ logContent.trim() !== "") ||
214
+ (typeof logContent === "object" &&
215
+ logContent !== null &&
216
+ Object.keys(logContent).length > 0));
342
217
  return (React.createElement(FileTreeItem, { key: logName, name: logName, isFile: true, level: 1, isSelected: activeTab === logName, exists: exists, onClick: () => {
343
218
  if (exists) {
344
219
  setActiveTab(logName);
345
220
  setSelectedFile({
346
221
  path: logName,
347
- content: typeof logContent === "string" ? logContent : JSON.stringify(logContent, null, 2),
348
- language: logName.endsWith(".json") ? "json" : "plaintext",
222
+ content: typeof logContent === "string"
223
+ ? logContent
224
+ : JSON.stringify(logContent, null, 2),
225
+ language: logName.endsWith(".json")
226
+ ? "json"
227
+ : "plaintext",
349
228
  });
350
229
  }
351
230
  else {
@@ -359,8 +238,8 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
359
238
  } }));
360
239
  }))))),
361
240
  logs && logs.source_files && (React.createElement("div", { className: "p-2" },
362
- React.createElement("div", { className: "d-flex align-items-center text-muted mb-1", style: { cursor: 'pointer', fontSize: '0.875rem' }, onClick: () => setExpandedSections(prev => (Object.assign(Object.assign({}, prev), { sourceFiles: !prev.sourceFiles }))) },
363
- React.createElement("i", { className: `bi bi-chevron-${expandedSections.sourceFiles ? 'down' : 'right'} me-1` }),
241
+ React.createElement("div", { className: "d-flex align-items-center text-muted mb-1", style: { cursor: "pointer", fontSize: "0.875rem" }, onClick: () => setExpandedSections((prev) => (Object.assign(Object.assign({}, prev), { sourceFiles: !prev.sourceFiles }))) },
242
+ React.createElement("i", { className: `bi bi-chevron-${expandedSections.sourceFiles ? "down" : "right"} me-1` }),
364
243
  React.createElement("span", null, "Source Files")),
365
244
  expandedSections.sourceFiles && (React.createElement("div", null,
366
245
  React.createElement(FileTree, { data: logs.source_files, onSelect: (path, content) => {
@@ -383,10 +262,10 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
383
262
  React.createElement(Col, { sm: 3, className: "p-0 border-start", style: { height: "calc(100vh - 56px)", overflow: "auto" } },
384
263
  React.createElement("div", { className: "p-3" },
385
264
  (selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.path.endsWith("tests.json")) && (React.createElement("div", { className: "test-results-preview" }, typeof selectedFile.content === "string"
386
- ? renderTestResults(JSON.parse(selectedFile.content))
387
- : renderTestResults(selectedFile.content))),
265
+ ? renderTestResults(JSON.parse(selectedFile.content), buildErrors, projectName, testName, runtime)
266
+ : renderTestResults(selectedFile.content, buildErrors, projectName, testName, runtime))),
388
267
  (selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.path.match(/\.(png|jpg|jpeg|gif|svg)$/i)) && (React.createElement("div", { className: "text-center" },
389
- React.createElement("img", { src: selectedFile.content, alt: selectedFile.path, className: "img-fluid", style: { maxHeight: '300px' } }),
268
+ React.createElement("img", { src: selectedFile.content, alt: selectedFile.path, className: "img-fluid", style: { maxHeight: "300px" } }),
390
269
  React.createElement("div", { className: "mt-2" },
391
270
  React.createElement("a", { href: selectedFile.content, target: "_blank", rel: "noopener noreferrer", className: "btn btn-sm btn-outline-primary" }, "Open Full Size")))),
392
271
  (selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.path.endsWith("build.json")) && (React.createElement("div", null,
@@ -401,7 +280,7 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
401
280
  "Errors (",
402
281
  buildData.errors.length,
403
282
  ")"),
404
- React.createElement("ul", { className: "list-unstyled" }, buildData.errors.map((error, index) => (React.createElement("li", { key: index, className: "mb-2 p-2 bg-light rounded" },
283
+ React.createElement("ul", { className: "list-unstyled" }, buildData.errors.map((error, index) => (React.createElement("li", { key: index, className: "mb-2 p-2 rounded" },
405
284
  React.createElement("div", { className: "text-danger fw-bold" }, error.text),
406
285
  error.location && (React.createElement("div", { className: "small text-muted" },
407
286
  "File: ",
@@ -418,7 +297,7 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
418
297
  "Warnings (",
419
298
  buildData.warnings.length,
420
299
  ")"),
421
- React.createElement("ul", { className: "list-unstyled" }, buildData.warnings.map((warning, index) => (React.createElement("li", { key: index, className: "mb-2 p-2 bg-light rounded" },
300
+ React.createElement("ul", { className: "list-unstyled" }, buildData.warnings.map((warning, index) => (React.createElement("li", { key: index, className: "mb-2 p-2 rounded" },
422
301
  React.createElement("div", { className: "text-warning fw-bold" }, warning.text),
423
302
  warning.location && (React.createElement("div", { className: "small text-muted" },
424
303
  "File: ",
@@ -427,11 +306,13 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
427
306
  warning.location.line,
428
307
  "Column: ",
429
308
  warning.location.column)),
430
- warning.notes && warning.notes.length > 0 && (React.createElement("div", { className: "small" },
309
+ warning.notes &&
310
+ warning.notes.length > 0 && (React.createElement("div", { className: "small" },
431
311
  "Notes:",
432
312
  React.createElement("ul", null, warning.notes.map((note, noteIndex) => (React.createElement("li", { key: noteIndex }, note.text)))))))))))),
433
313
  (!buildData.errors || buildData.errors.length === 0) &&
434
- (!buildData.warnings || buildData.warnings.length === 0) && (React.createElement("div", { className: "alert alert-success" }, "No build errors or warnings"))));
314
+ (!buildData.warnings ||
315
+ buildData.warnings.length === 0) && (React.createElement("div", { className: "alert alert-success" }, "No build errors or warnings"))));
435
316
  }
436
317
  catch (e) {
437
318
  return (React.createElement("div", { className: "alert alert-danger" },
@@ -441,151 +322,15 @@ export const TestPageView = ({ projectName, testName, decodedTestPath, runtime,
441
322
  })())),
442
323
  (selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.path.endsWith(".json")) &&
443
324
  !selectedFile.path.endsWith("tests.json") &&
444
- !selectedFile.path.endsWith("build.json") && (React.createElement("pre", { className: "bg-light p-2 small" },
325
+ !selectedFile.path.endsWith("build.json") && (React.createElement("pre", { className: " p-2 small" },
445
326
  React.createElement("code", null, selectedFile.content))),
446
327
  (selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.path.includes("source_files")) && (React.createElement("div", null,
447
328
  React.createElement("div", { className: "mb-2 small text-muted" },
448
329
  React.createElement("i", { className: "bi bi-file-earmark-text me-1" }),
449
- selectedFile.path.split('/').pop()),
330
+ selectedFile.path.split("/").pop()),
450
331
  React.createElement(Button, { variant: "outline-primary", size: "sm", className: "mb-2", onClick: () => {
451
332
  // TODO: Add save functionality
452
333
  alert("Save functionality will be implemented here");
453
334
  } }, "Save Changes")))))),
454
- React.createElement(ToastContainer, { position: "top-end", className: "p-3" },
455
- React.createElement(Toast, { show: showToast, onClose: () => setShowToast(false), delay: 3000, autohide: true, bg: toastVariant },
456
- React.createElement(Toast.Header, null,
457
- React.createElement("strong", { className: "me-auto" }, "Command Status")),
458
- React.createElement(Toast.Body, { className: "text-white" }, toastMessage)))));
459
- };
460
- // Simple file tree item component
461
- const FileTreeItem = ({ name, isFile, level, isSelected, exists = true, onClick }) => {
462
- const displayName = name
463
- .replace(".json", "")
464
- .replace(".txt", "")
465
- .replace(".log", "")
466
- .replace(/_/g, " ")
467
- .replace(/^std/, "Standard ")
468
- .replace(/^exit/, "Exit Code")
469
- .split('/').pop();
470
- return (React.createElement("div", { className: `d-flex align-items-center py-1 ${isSelected ? 'text-primary fw-bold' : exists ? 'text-dark' : 'text-muted'}`, style: {
471
- paddingLeft: `${level * 16}px`,
472
- cursor: exists ? 'pointer' : 'not-allowed',
473
- fontSize: '0.875rem',
474
- opacity: exists ? 1 : 0.6
475
- }, onClick: exists ? onClick : undefined, title: exists ? undefined : "File not found or empty" },
476
- React.createElement("i", { className: `bi ${isFile ? (exists ? 'bi-file-earmark-text' : 'bi-file-earmark') : 'bi-folder'} me-1` }),
477
- React.createElement("span", null, displayName),
478
- !exists && (React.createElement("i", { className: "bi bi-question-circle ms-1", title: "File not found or empty" }))));
479
- };
480
- const ArtifactTree = ({ treeData, projectName, testName, runtime, onSelect, level = 0, basePath = '' }) => {
481
- const [expanded, setExpanded] = useState({});
482
- const toggleExpand = (path) => {
483
- setExpanded(prev => (Object.assign(Object.assign({}, prev), { [path]: !prev[path] })));
484
- };
485
- return (React.createElement("ul", { className: "list-unstyled", style: { paddingLeft: `${level * 16}px` } }, Object.entries(treeData).map(([name, node]) => {
486
- const fullPath = basePath ? `${basePath}/${name}` : name;
487
- const isExpanded = expanded[fullPath];
488
- if (node.__isFile) {
489
- return (React.createElement("li", { key: fullPath, className: "py-1" },
490
- React.createElement("a", { href: `reports/${projectName}/${testName
491
- .split('.')
492
- .slice(0, -1)
493
- .join('.')}/${runtime}/${node.path}`, target: "_blank", rel: "noopener noreferrer", className: "text-decoration-none", onClick: (e) => {
494
- e.preventDefault();
495
- onSelect(node.path);
496
- } },
497
- React.createElement("i", { className: "bi bi-file-earmark-text me-2" }),
498
- name)));
499
- }
500
- else {
501
- return (React.createElement("li", { key: fullPath, className: "py-1" },
502
- React.createElement("div", { className: "d-flex align-items-center" },
503
- React.createElement("button", { className: "btn btn-link text-start p-0 text-decoration-none me-1", onClick: () => toggleExpand(fullPath) },
504
- React.createElement("i", { className: `bi ${isExpanded ? 'bi-folder2-open' : 'bi-folder'} me-2` }),
505
- name)),
506
- isExpanded && (React.createElement(ArtifactTree, { treeData: node, projectName: projectName, testName: testName, runtime: runtime, onSelect: onSelect, level: level + 1, basePath: fullPath }))));
507
- }
508
- })));
509
- };
510
- const buildArtifactTree = (testData) => {
511
- var _a;
512
- const artifactPaths = new Set();
513
- (_a = testData.givens) === null || _a === void 0 ? void 0 : _a.forEach((given) => {
514
- var _a, _b, _c;
515
- (_a = given.artifacts) === null || _a === void 0 ? void 0 : _a.forEach((artifact) => artifactPaths.add(artifact));
516
- (_b = given.whens) === null || _b === void 0 ? void 0 : _b.forEach((when) => { var _a; return (_a = when.artifacts) === null || _a === void 0 ? void 0 : _a.forEach((artifact) => artifactPaths.add(artifact)); });
517
- (_c = given.thens) === null || _c === void 0 ? void 0 : _c.forEach((then) => { var _a; return (_a = then.artifacts) === null || _a === void 0 ? void 0 : _a.forEach((artifact) => artifactPaths.add(artifact)); });
518
- });
519
- const sortedArtifacts = Array.from(artifactPaths).sort();
520
- return sortedArtifacts.reduce((tree, artifactPath) => {
521
- const parts = artifactPath.split('/');
522
- let currentLevel = tree;
523
- parts.forEach((part, i) => {
524
- if (!currentLevel[part]) {
525
- currentLevel[part] = i === parts.length - 1
526
- ? { __isFile: true, path: artifactPath }
527
- : {};
528
- }
529
- currentLevel = currentLevel[part];
530
- });
531
- return tree;
532
- }, {});
533
- };
534
- const LogNavItem = ({ logName, logContent, activeTab, setActiveTab, setSelectedFile, errorCounts, decodedTestPath, testsExist, }) => {
535
- const displayName = logName
536
- .replace(".json", "")
537
- .replace(".txt", "")
538
- .replace(".log", "")
539
- .replace(/_/g, " ")
540
- .replace(/^std/, "Standard ")
541
- .replace(/^exit/, "Exit Code");
542
- const logValue = typeof logContent === "string" ? logContent.trim() : "";
543
- let statusIndicator = null;
544
- if (logName === STANDARD_LOGS.TYPE_ERRORS &&
545
- (errorCounts.typeErrors > 0 || (logValue && logValue !== "0"))) {
546
- statusIndicator = (React.createElement("span", { className: "ms-1" },
547
- "\u274C ",
548
- errorCounts.typeErrors || (logValue ? 1 : 0)));
549
- }
550
- else if (logName === STANDARD_LOGS.LINT_ERRORS &&
551
- (errorCounts.staticErrors > 0 || (logValue && logValue !== "0"))) {
552
- statusIndicator = (React.createElement("span", { className: "ms-1" },
553
- "\u274C ",
554
- errorCounts.staticErrors || (logValue ? 1 : 0)));
555
- }
556
- else if (logName === RUNTIME_SPECIFIC_LOGS.node.STDERR &&
557
- (errorCounts.runTimeErrors > 0 || (logValue && logValue !== "0"))) {
558
- statusIndicator = (React.createElement("span", { className: "ms-1" },
559
- "\u274C ",
560
- errorCounts.runTimeErrors || (logValue ? 1 : 0)));
561
- }
562
- else if (logName === STANDARD_LOGS.EXIT && logValue !== "0") {
563
- statusIndicator = React.createElement("span", { className: "ms-1" },
564
- "\u26A0\uFE0F ",
565
- logValue);
566
- }
567
- else if (logName === STANDARD_LOGS.TESTS && logValue) {
568
- statusIndicator = (React.createElement("div", { className: "ms-1" },
569
- React.createElement(TestStatusBadge, { testName: decodedTestPath, testsExist: testsExist, runTimeErrors: errorCounts.runTimeErrors, typeErrors: errorCounts.typeErrors, staticErrors: errorCounts.staticErrors, variant: "compact", className: "mt-1" })));
570
- }
571
- return (React.createElement(Nav.Item, { key: logName },
572
- React.createElement(Nav.Link, { eventKey: logName, active: activeTab === logName, onClick: () => {
573
- setActiveTab(logName);
574
- setSelectedFile({
575
- path: logName,
576
- content: typeof logContent === "string"
577
- ? logContent
578
- : JSON.stringify(logContent, null, 2),
579
- language: logName.endsWith(".json")
580
- ? "json"
581
- : logName.endsWith(".txt")
582
- ? "plaintext"
583
- : logName.endsWith(".log")
584
- ? "log"
585
- : "plaintext",
586
- });
587
- }, className: "d-flex flex-column align-items-start" },
588
- React.createElement("div", { className: "d-flex justify-content-between w-100" },
589
- React.createElement("span", { className: "text-capitalize" }, displayName),
590
- statusIndicator))));
335
+ React.createElement(ToastNotification, { showToast: showToast, setShowToast: setShowToast, toastVariant: toastVariant, toastMessage: toastMessage })));
591
336
  };