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
@@ -0,0 +1,58 @@
1
+ import React from "react";
2
+ import { useState } from "react";
3
+ import { FileTreeItem } from "./FileTreeItem";
4
+
5
+ export const FileTree = ({ data, onSelect, level = 0, selectedSourcePath }) => {
6
+ const [expanded, setExpanded] = useState({});
7
+
8
+ const toggleExpand = (path) => {
9
+ setExpanded((prev) => ({ ...prev, [path]: !prev[path] }));
10
+ };
11
+
12
+ return (
13
+ <div>
14
+ {Object.entries(data).map(([name, node]) => {
15
+ const path = Object.keys(expanded).find((k) => k.endsWith(name)) || name;
16
+ const isExpanded = expanded[path];
17
+
18
+ if (node.__isFile) {
19
+ return (
20
+ <FileTreeItem
21
+ key={name}
22
+ name={name}
23
+ isFile={true}
24
+ level={level}
25
+ isSelected={selectedSourcePath === path}
26
+ onClick={() => onSelect(path, node.content)}
27
+ />
28
+ );
29
+ } else {
30
+ return (
31
+ <div key={name}>
32
+ <div
33
+ className="d-flex align-items-center py-1 text-dark"
34
+ style={{
35
+ paddingLeft: `${level * 16}px`,
36
+ cursor: 'pointer',
37
+ fontSize: '0.875rem'
38
+ }}
39
+ onClick={() => toggleExpand(path)}
40
+ >
41
+ <i className={`bi ${isExpanded ? 'bi-folder2-open' : 'bi-folder'} me-1`}></i>
42
+ <span>{name}</span>
43
+ </div>
44
+ {isExpanded && (
45
+ <FileTree
46
+ data={node}
47
+ onSelect={onSelect}
48
+ level={level + 1}
49
+ selectedSourcePath={selectedSourcePath}
50
+ />
51
+ )}
52
+ </div>
53
+ );
54
+ }
55
+ })}
56
+ </div>
57
+ );
58
+ };
@@ -0,0 +1,49 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+
4
+ import React, { } from "react";
5
+
6
+ export const FileTreeItem = ({
7
+ name,
8
+ isFile,
9
+ level,
10
+ isSelected,
11
+ exists = true,
12
+ onClick
13
+ }: {
14
+ name: string;
15
+ isFile: boolean;
16
+ level: number;
17
+ isSelected: boolean;
18
+ exists?: boolean;
19
+ onClick: () => void;
20
+ }) => {
21
+ const displayName = name
22
+ .replace(".json", "")
23
+ .replace(".txt", "")
24
+ .replace(".log", "")
25
+ .replace(/_/g, " ")
26
+ .replace(/^std/, "Standard ")
27
+ .replace(/^exit/, "Exit Code")
28
+ .split('/').pop();
29
+
30
+ return (
31
+ <div
32
+ className={`d-flex align-items-center py-1 ${isSelected ? 'text-primary fw-bold' : exists ? 'text-dark' : 'text-muted'}`}
33
+ style={{
34
+ paddingLeft: `${level * 16}px`,
35
+ cursor: exists ? 'pointer' : 'not-allowed',
36
+ fontSize: '0.875rem',
37
+ opacity: exists ? 1 : 0.6
38
+ }}
39
+ onClick={exists ? onClick : undefined}
40
+ title={exists ? undefined : "File not found or empty"}
41
+ >
42
+ <i className={`bi ${isFile ? (exists ? 'bi-file-earmark-text' : 'bi-file-earmark') : 'bi-folder'} me-1`}></i>
43
+ <span>{displayName}</span>
44
+ {!exists && (
45
+ <i className="bi bi-question-circle ms-1" title="File not found or empty"></i>
46
+ )}
47
+ </div>
48
+ );
49
+ };
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { Button } from 'react-bootstrap';
3
+ import { githubAuthService } from '../../services/GitHubAuthService';
4
+
5
+ interface GitHubLoginButtonProps {
6
+ className?: string;
7
+ variant?: string;
8
+ size?: 'sm' | 'lg';
9
+ }
10
+
11
+ export const GitHubLoginButton: React.FC<GitHubLoginButtonProps> = ({
12
+ className,
13
+ variant = 'outline-dark',
14
+ size,
15
+ }) => {
16
+ const handleLogin = () => {
17
+ githubAuthService.initiateLogin();
18
+ };
19
+
20
+ return (
21
+ <Button
22
+ className={className}
23
+ variant={variant}
24
+ size={size}
25
+ onClick={handleLogin}
26
+ >
27
+ <i className="bi bi-github me-2"></i>
28
+ Sign in with GitHub
29
+ </Button>
30
+ );
31
+ };
@@ -0,0 +1,443 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import React, { useState, useEffect } from 'react';
3
+ import { Container, Row, Col, Card, Button, Badge, Alert, Spinner } from 'react-bootstrap';
4
+ import { getFileService, type FileChange, type RemoteStatus } from '../../services/FileService';
5
+ import { useGitMode } from '../../hooks/useGitMode';
6
+
7
+ export const GitIntegrationView = () => {
8
+ const { mode, setMode, isStatic, isDev, isGit } = useGitMode();
9
+ const [changes, setChanges] = useState<FileChange[]>([]);
10
+ const [isLoading, setIsLoading] = useState(true);
11
+ const [error, setError] = useState<string | null>(null);
12
+ const [commitSummary, setCommitSummary] = useState('');
13
+ const [commitDescription, setCommitDescription] = useState('');
14
+ const [remoteStatus, setRemoteStatus] = useState<RemoteStatus>({ ahead: 0, behind: 0 });
15
+ const [currentBranch, setCurrentBranch] = useState('main');
16
+ const [isCommitting, setIsCommitting] = useState(false);
17
+ const [isPushing, setIsPushing] = useState(false);
18
+ const [isPulling, setIsPulling] = useState(false);
19
+
20
+ const [fileService, setFileService] = useState(() => getFileService(mode));
21
+
22
+ useEffect(() => {
23
+ const newFileService = getFileService(mode);
24
+ setFileService(newFileService);
25
+ // We can't call loadChanges and loadGitStatus here directly because they use fileService state
26
+ // Instead, we'll set up a separate effect to trigger when fileService changes
27
+ }, [mode]);
28
+
29
+ // Add a new effect to load data when fileService changes
30
+ useEffect(() => {
31
+ if (fileService && mode === 'dev') {
32
+ const devFileService = fileService as any;
33
+
34
+ // Set up real-time updates for dev mode
35
+ const unsubscribeChanges = devFileService.onChanges?.((newChanges: FileChange[]) => {
36
+ setChanges(newChanges);
37
+ });
38
+
39
+ const unsubscribeStatus = devFileService.onStatusUpdate?.((newStatus: RemoteStatus) => {
40
+ setRemoteStatus(newStatus);
41
+ });
42
+
43
+ const unsubscribeBranch = devFileService.onBranchUpdate?.((newBranch: string) => {
44
+ setCurrentBranch(newBranch);
45
+ });
46
+
47
+ const loadData = async () => {
48
+ try {
49
+ setIsLoading(true);
50
+ await loadChanges();
51
+ await loadGitStatus();
52
+ } catch (err) {
53
+ console.warn('Failed to load data:', err);
54
+ } finally {
55
+ setIsLoading(false);
56
+ }
57
+ };
58
+
59
+ loadData();
60
+
61
+ return () => {
62
+ unsubscribeChanges?.();
63
+ unsubscribeStatus?.();
64
+ unsubscribeBranch?.();
65
+ };
66
+ } else if (fileService) {
67
+ // For non-dev modes, just load data once
68
+ const loadData = async () => {
69
+ try {
70
+ setIsLoading(true);
71
+ await loadChanges();
72
+ await loadGitStatus();
73
+ } catch (err) {
74
+ console.warn('Failed to load data:', err);
75
+ } finally {
76
+ setIsLoading(false);
77
+ }
78
+ };
79
+
80
+ loadData();
81
+ }
82
+ }, [fileService, mode]);
83
+
84
+ const loadChanges = async (event?: React.MouseEvent) => {
85
+ // Prevent default behavior if event exists
86
+ if (event) {
87
+ event.preventDefault();
88
+ }
89
+
90
+ try {
91
+ setIsLoading(true);
92
+ setError(null);
93
+ const changes = await fileService.getChanges();
94
+ setChanges(changes);
95
+ } catch (err) {
96
+ const errorMessage = err instanceof Error ? err.message : 'Failed to load changes';
97
+ console.error('Failed to load changes:', err);
98
+ setError(errorMessage);
99
+ } finally {
100
+ setIsLoading(false);
101
+ }
102
+ };
103
+
104
+ const loadGitStatus = async (event?: React.MouseEvent) => {
105
+ // Prevent default behavior if event exists
106
+ if (event) {
107
+ event.preventDefault();
108
+ }
109
+
110
+ try {
111
+ setError(null);
112
+ const branch = await fileService.getCurrentBranch();
113
+ const status = await fileService.getRemoteStatus();
114
+ setCurrentBranch(branch);
115
+ setRemoteStatus(status);
116
+ } catch (err) {
117
+ const errorMessage = err instanceof Error ? err.message : 'Failed to load git status';
118
+ console.error('Failed to load git status:', err);
119
+ setError(errorMessage);
120
+ }
121
+ };
122
+
123
+
124
+ const handleSaveChanges = async () => {
125
+ if (!commitSummary.trim()) {
126
+ setError('Please provide a commit summary');
127
+ return;
128
+ }
129
+
130
+ try {
131
+ setIsCommitting(true);
132
+ setError(null);
133
+ await fileService.commitChanges(commitSummary, commitDescription);
134
+ setCommitSummary('');
135
+ setCommitDescription('');
136
+ await loadChanges();
137
+ await loadGitStatus();
138
+ } catch (err) {
139
+ const errorMessage = err instanceof Error ? err.message : 'Failed to commit changes';
140
+ console.error('Failed to commit changes:', err);
141
+ setError(errorMessage);
142
+ } finally {
143
+ setIsCommitting(false);
144
+ }
145
+ };
146
+
147
+ const handleShareChanges = async () => {
148
+ if (!commitSummary.trim()) {
149
+ setError('Please provide a commit summary');
150
+ return;
151
+ }
152
+
153
+ try {
154
+ setIsCommitting(true);
155
+ setIsPushing(true);
156
+ setError(null);
157
+ await fileService.commitChanges(commitSummary, commitDescription);
158
+ await fileService.pushChanges();
159
+ setCommitSummary('');
160
+ setCommitDescription('');
161
+ await loadChanges();
162
+ await loadGitStatus();
163
+ } catch (err) {
164
+ const errorMessage = err instanceof Error ? err.message : 'Failed to share changes';
165
+ console.error('Failed to share changes:', err);
166
+ setError(errorMessage);
167
+ } finally {
168
+ setIsCommitting(false);
169
+ setIsPushing(false);
170
+ }
171
+ };
172
+
173
+ const handleGetUpdates = async () => {
174
+ try {
175
+ setIsPulling(true);
176
+ setError(null);
177
+ await fileService.pullChanges();
178
+ await loadChanges();
179
+ await loadGitStatus();
180
+ } catch (err) {
181
+ const errorMessage = err instanceof Error ? err.message : 'Failed to get updates';
182
+ console.error('Failed to get updates:', err);
183
+ setError(errorMessage);
184
+ } finally {
185
+ setIsPulling(false);
186
+ }
187
+ };
188
+
189
+ const getStatusBadgeVariant = (status: string) => {
190
+ switch (status) {
191
+ case 'modified': return 'warning';
192
+ case 'added': return 'success';
193
+ case 'deleted': return 'danger';
194
+ case 'conflicted': return 'danger';
195
+ default: return 'secondary';
196
+ }
197
+ };
198
+
199
+ const getSyncStatusText = () => {
200
+ if (remoteStatus.ahead > 0 && remoteStatus.behind > 0) {
201
+ return `${remoteStatus.ahead} ahead, ${remoteStatus.behind} behind`;
202
+ } else if (remoteStatus.ahead > 0) {
203
+ return `${remoteStatus.ahead} ahead`;
204
+ } else if (remoteStatus.behind > 0) {
205
+ return `${remoteStatus.behind} behind`;
206
+ } else {
207
+ return 'Up to date';
208
+ }
209
+ };
210
+
211
+ const getSyncStatusVariant = () => {
212
+ if (remoteStatus.behind > 0) return 'warning';
213
+ if (remoteStatus.ahead > 0) return 'info';
214
+ return 'success';
215
+ };
216
+
217
+ // if (error) console.error(error);
218
+
219
+ return (
220
+ <Container fluid>
221
+ <Row className="mb-4">
222
+ <Col>
223
+ <h2>Git Integration</h2>
224
+ <div className="d-flex align-items-center gap-2">
225
+ <Badge bg={mode === 'static' ? 'secondary' : mode === 'dev' ? 'success' : 'primary'}>
226
+ {mode.toUpperCase()} MODE
227
+ </Badge>
228
+ <select
229
+ className="form-select form-select-sm"
230
+ style={{ width: 'auto' }}
231
+ value={mode}
232
+ onChange={(e) => setMode(e.target.value as 'static' | 'dev' | 'git')}
233
+ >
234
+ <option value="static">Static (Read-only)</option>
235
+ <option value="dev">Development (Read-write)</option>
236
+ <option value="git">Git Remote</option>
237
+ </select>
238
+ </div>
239
+ {mode === 'static' && (
240
+ <Alert variant="info" className="mt-2">
241
+ <small>Static mode: Read-only access. Git operations are not available in this mode.</small>
242
+ </Alert>
243
+ )}
244
+ {mode === 'git' && (
245
+ <Alert variant="warning" className="mt-2">
246
+ <small>Git Remote mode: Git-based collaboration. Some features may be limited.</small>
247
+ </Alert>
248
+ )}
249
+ </Col>
250
+ </Row>
251
+
252
+ {error && (
253
+ <Alert variant="danger" onClose={() => setError(null)} dismissible>
254
+ {error}
255
+ </Alert>
256
+ )}
257
+
258
+ {mode !== 'static' && (
259
+ <Row>
260
+ <Col md={4}>
261
+ <Card>
262
+ <Card.Header className="d-flex justify-content-between align-items-center">
263
+ <h5 className="mb-0">Changes</h5>
264
+ <Button variant="outline-secondary" size="sm" onClick={loadChanges} disabled={isLoading}>
265
+ {isLoading ? <Spinner animation="border" size="sm" /> : '↻'}
266
+ </Button>
267
+ </Card.Header>
268
+ <Card.Body style={{ maxHeight: '400px', overflowY: 'auto' }}>
269
+ {isLoading ? (
270
+ <div className="text-center">
271
+ <Spinner animation="border" />
272
+ <div>Loading changes...</div>
273
+ </div>
274
+ ) : changes.length === 0 ? (
275
+ <div className="text-center text-muted">No changes detected</div>
276
+ ) : (
277
+ <div>
278
+ {changes.map((change, index) => (
279
+ <div key={index} className="d-flex align-items-center mb-2">
280
+ <Badge
281
+ bg={getStatusBadgeVariant(change.status)}
282
+ className="me-2"
283
+ >
284
+ {change.status.charAt(0).toUpperCase() + change.status.slice(1)}
285
+ </Badge>
286
+ <span className="small text-truncate">{change.path}</span>
287
+ </div>
288
+ ))}
289
+ </div>
290
+ )}
291
+ </Card.Body>
292
+ </Card>
293
+ </Col>
294
+
295
+ <Col md={4}>
296
+ <Card>
297
+ <Card.Header>
298
+ <h5>Commit Changes</h5>
299
+ </Card.Header>
300
+ <Card.Body>
301
+ <div className="mb-3">
302
+ <label htmlFor="summary" className="form-label">Summary *</label>
303
+ <input
304
+ type="text"
305
+ className="form-control"
306
+ id="summary"
307
+ placeholder="What did you change?"
308
+ value={commitSummary}
309
+ onChange={(e) => setCommitSummary(e.target.value)}
310
+ disabled={mode === 'static'}
311
+ />
312
+ <div className="form-text">{commitSummary.length}/72 characters</div>
313
+ </div>
314
+ <div className="mb-3">
315
+ <label htmlFor="description" className="form-label">Description</label>
316
+ <textarea
317
+ className="form-control"
318
+ id="description"
319
+ rows={3}
320
+ placeholder="Why did you change it?"
321
+ value={commitDescription}
322
+ onChange={(e) => setCommitDescription(e.target.value)}
323
+ disabled={mode === 'static'}
324
+ />
325
+ </div>
326
+ <div className="d-grid gap-2">
327
+ <Button
328
+ variant="primary"
329
+ onClick={handleSaveChanges}
330
+ disabled={mode === 'static' || isCommitting || changes.length === 0 || !commitSummary.trim()}
331
+ >
332
+ {isCommitting ? (
333
+ <>
334
+ <Spinner animation="border" size="sm" className="me-2" />
335
+ Saving...
336
+ </>
337
+ ) : (
338
+ 'Save to Computer'
339
+ )}
340
+ </Button>
341
+ <Button
342
+ variant="success"
343
+ onClick={handleShareChanges}
344
+ disabled={mode === 'static' || isCommitting || isPushing || changes.length === 0 || !commitSummary.trim()}
345
+ >
346
+ {isPushing ? (
347
+ <>
348
+ <Spinner animation="border" size="sm" className="me-2" />
349
+ Sharing...
350
+ </>
351
+ ) : (
352
+ 'Save & Share'
353
+ )}
354
+ </Button>
355
+ </div>
356
+ </Card.Body>
357
+ </Card>
358
+ </Col>
359
+
360
+ <Col md={4}>
361
+ <Card>
362
+ <Card.Header className="d-flex justify-content-between align-items-center">
363
+ <h5 className="mb-0">Sync with Remote</h5>
364
+ <Button variant="outline-secondary" size="sm" onClick={(e) => loadGitStatus(e)}>
365
+
366
+ </Button>
367
+ </Card.Header>
368
+ <Card.Body>
369
+ <div className="text-center mb-3">
370
+ <Badge bg={getSyncStatusVariant()}>{getSyncStatusText()}</Badge>
371
+ <div className="small text-muted mt-1">Branch: {currentBranch}</div>
372
+ </div>
373
+ <div className="d-grid gap-2">
374
+ <Button
375
+ variant="outline-primary"
376
+ onClick={handleGetUpdates}
377
+ disabled={mode === 'static' || isPulling}
378
+ >
379
+ {isPulling ? (
380
+ <>
381
+ <Spinner animation="border" size="sm" className="me-2" />
382
+ Updating...
383
+ </>
384
+ ) : (
385
+ 'Get Updates'
386
+ )}
387
+ </Button>
388
+ <Button
389
+ variant="outline-success"
390
+ disabled={mode === 'static' || remoteStatus.ahead === 0}
391
+ onClick={async (e) => {
392
+ e.preventDefault();
393
+ try {
394
+ setIsPushing(true);
395
+ setError(null);
396
+ await fileService.pushChanges();
397
+ await loadGitStatus();
398
+ } catch (err) {
399
+ const errorMessage = err instanceof Error ? err.message : 'Failed to push changes';
400
+ console.error('Failed to push changes:', err);
401
+ setError(errorMessage);
402
+ } finally {
403
+ setIsPushing(false);
404
+ }
405
+ }}
406
+ >
407
+ {isPushing ? (
408
+ <>
409
+ <Spinner animation="border" size="sm" className="me-2" />
410
+ Sharing...
411
+ </>
412
+ ) : (
413
+ `Share Changes (${remoteStatus.ahead})`
414
+ )}
415
+ </Button>
416
+ </div>
417
+ <div className="mt-3">
418
+ <small className="text-muted">
419
+ Connected to: origin/{currentBranch}
420
+ </small>
421
+ </div>
422
+ </Card.Body>
423
+ </Card>
424
+ </Col>
425
+ </Row>
426
+ )}
427
+
428
+ {mode === 'static' && (
429
+ <Row>
430
+ <Col>
431
+ <Alert variant="info" className="text-center">
432
+ <h5>Git Operations Not Available</h5>
433
+ <p>
434
+ Git functionality is disabled in Static Mode. Switch to Development or Git Remote mode
435
+ to access version control features.
436
+ </p>
437
+ </Alert>
438
+ </Col>
439
+ </Row>
440
+ )}
441
+ </Container>
442
+ );
443
+ };
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import React, { useState, useEffect } from 'react';
2
3
  import { Modal, Button, ListGroup, Badge } from 'react-bootstrap';
3
4
 
@@ -44,14 +45,14 @@ export const ProcessManager: React.FC<ProcessManagerProps> = ({ show, onHide, ws
44
45
  status: 'running'
45
46
  }]);
46
47
  } else if (data.type === 'processExited') {
47
- setProcesses(prev => prev.map(p =>
48
- p.processId === data.processId
48
+ setProcesses(prev => prev.map(p =>
49
+ p.processId === data.processId
49
50
  ? { ...p, status: 'exited', exitCode: data.exitCode }
50
51
  : p
51
52
  ));
52
53
  } else if (data.type === 'processError') {
53
- setProcesses(prev => prev.map(p =>
54
- p.processId === data.processId
54
+ setProcesses(prev => prev.map(p =>
55
+ p.processId === data.processId
55
56
  ? { ...p, status: 'error', error: data.error }
56
57
  : p
57
58
  ));
@@ -90,7 +91,7 @@ export const ProcessManager: React.FC<ProcessManagerProps> = ({ show, onHide, ws
90
91
  <div className="ms-2 me-auto">
91
92
  <div className="fw-bold">{process.command}</div>
92
93
  <small className="text-muted">
93
- PID: {process.pid || 'N/A'} |
94
+ PID: {process.pid || 'N/A'} |
94
95
  Started: {new Date(process.timestamp).toLocaleString()}
95
96
  </small>
96
97
  {process.error && (