@factorim/monotui 0.1.0 → 0.3.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 (467) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +14 -0
  3. package/.github/workflows/ci.yml +5 -2
  4. package/.github/workflows/release.yml +77 -0
  5. package/.vscode/settings.json +1 -0
  6. package/CHANGELOG.md +9 -0
  7. package/README.md +2 -0
  8. package/dist/app/pages/WorkspacePage.d.ts.map +1 -1
  9. package/dist/app/pages/WorkspacePage.js +3 -3
  10. package/dist/app/pages/WorkspacePage.js.map +1 -1
  11. package/dist/commands/init.d.ts +1 -1
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +33 -4
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/components/features/ProjectGrid/ColPackageJson.d.ts +2 -2
  16. package/dist/components/features/ProjectGrid/ColPackageJson.d.ts.map +1 -1
  17. package/dist/components/features/ProjectGrid/ColPackageJson.js.map +1 -1
  18. package/dist/components/features/WorkspaceGrid/WorkspaceGrid.js +1 -1
  19. package/dist/components/features/WorkspaceGrid/WorkspaceInfo.d.ts.map +1 -1
  20. package/dist/components/features/WorkspaceGrid/WorkspaceInfo.js +1 -1
  21. package/dist/components/features/WorkspaceGrid/WorkspaceInfo.js.map +1 -1
  22. package/dist/components/features/WorkspaceGrid/WorkspaceRow.js +2 -2
  23. package/dist/components/features/WorkspaceGrid/WorkspaceRow.js.map +1 -1
  24. package/dist/components/layouts/Header/Header.d.ts.map +1 -1
  25. package/dist/components/layouts/Header/Header.js +3 -7
  26. package/dist/components/layouts/Header/Header.js.map +1 -1
  27. package/dist/config/config.d.ts.map +1 -1
  28. package/dist/config/config.js +21 -21
  29. package/dist/config/config.js.map +1 -1
  30. package/dist/config/defaults.d.ts +2 -2
  31. package/dist/config/defaults.js +2 -2
  32. package/dist/config/validation.d.ts +54 -0
  33. package/dist/config/validation.d.ts.map +1 -0
  34. package/dist/config/validation.js +79 -0
  35. package/dist/config/validation.js.map +1 -0
  36. package/dist/contexts/ProjectGridContext.d.ts +1 -1
  37. package/dist/contexts/ProjectGridContext.d.ts.map +1 -1
  38. package/dist/contexts/WorkspaceDiscoveryContext.d.ts +2 -2
  39. package/dist/contexts/WorkspaceDiscoveryContext.d.ts.map +1 -1
  40. package/dist/contexts/WorkspaceDiscoveryContext.js +3 -3
  41. package/dist/contexts/WorkspaceDiscoveryContext.js.map +1 -1
  42. package/dist/contexts/WorkspaceGridContext.d.ts +1 -1
  43. package/dist/contexts/WorkspaceGridContext.d.ts.map +1 -1
  44. package/dist/contexts/WorkspaceGridContext.js +1 -1
  45. package/dist/contexts/WorkspaceGridContext.js.map +1 -1
  46. package/dist/hooks/useInterval.d.ts +5 -0
  47. package/dist/hooks/useInterval.d.ts.map +1 -0
  48. package/dist/hooks/useInterval.js +19 -0
  49. package/dist/hooks/useInterval.js.map +1 -0
  50. package/dist/hooks/useWorkspaceDiscovery.d.ts +3 -3
  51. package/dist/hooks/useWorkspaceDiscovery.d.ts.map +1 -1
  52. package/dist/hooks/useWorkspaceDiscovery.js +8 -13
  53. package/dist/hooks/useWorkspaceDiscovery.js.map +1 -1
  54. package/dist/hooks/useWorkspaceQuickActions.d.ts +1 -1
  55. package/dist/hooks/useWorkspaceQuickActions.d.ts.map +1 -1
  56. package/dist/hooks/useWorkspaceRuntime.d.ts +1 -1
  57. package/dist/hooks/useWorkspaceRuntime.d.ts.map +1 -1
  58. package/dist/hooks/useWorkspaceRuntime.js +30 -8
  59. package/dist/hooks/useWorkspaceRuntime.js.map +1 -1
  60. package/dist/services/discovery/facets/compose-parser.d.ts +1 -1
  61. package/dist/services/discovery/facets/compose-parser.d.ts.map +1 -1
  62. package/dist/services/discovery/facets/makefile-parser.d.ts +1 -1
  63. package/dist/services/discovery/facets/makefile-parser.d.ts.map +1 -1
  64. package/dist/services/discovery/facets/package-json-parser.d.ts +1 -1
  65. package/dist/services/discovery/facets/package-json-parser.d.ts.map +1 -1
  66. package/dist/services/discovery/workspace-discovery.d.ts +3 -3
  67. package/dist/services/discovery/workspace-discovery.d.ts.map +1 -1
  68. package/dist/services/discovery/workspace-discovery.js +17 -7
  69. package/dist/services/discovery/workspace-discovery.js.map +1 -1
  70. package/dist/services/runtime/docker-runtime.d.ts +1 -1
  71. package/dist/services/runtime/docker-runtime.d.ts.map +1 -1
  72. package/dist/services/runtime/node-runtime.d.ts +2 -2
  73. package/dist/services/runtime/node-runtime.d.ts.map +1 -1
  74. package/dist/theme/theme.js +1 -1
  75. package/dist/theme/theme.js.map +1 -1
  76. package/dist/types/project-grid.d.ts +1 -1
  77. package/dist/types/project-grid.d.ts.map +1 -1
  78. package/dist/types/workspace-grid.d.ts +2 -2
  79. package/dist/types/workspace-grid.d.ts.map +1 -1
  80. package/dist/types/workspace.d.ts +9 -2
  81. package/dist/types/workspace.d.ts.map +1 -1
  82. package/dist/utils/logging/logger.js +2 -2
  83. package/dist/utils/logging/logger.js.map +1 -1
  84. package/dist/utils/project/project-grid.d.ts +1 -1
  85. package/dist/utils/project/project-grid.d.ts.map +1 -1
  86. package/dist/utils/project/project-grid.js.map +1 -1
  87. package/dist/utils/workspace/workspace-grid.d.ts +1 -1
  88. package/dist/utils/workspace/workspace-grid.d.ts.map +1 -1
  89. package/dist/utils/workspace/workspace-grid.js +5 -18
  90. package/dist/utils/workspace/workspace-grid.js.map +1 -1
  91. package/dist/utils/workspace/workspace-helper.d.ts +1 -1
  92. package/dist/utils/workspace/workspace-helper.d.ts.map +1 -1
  93. package/docs/images/monotui-screenshot-v0.2.0.png +0 -0
  94. package/package.json +11 -4
  95. package/src/app/pages/WorkspacePage.tsx +5 -3
  96. package/src/commands/init.ts +34 -4
  97. package/src/components/features/ProjectGrid/ColPackageJson.tsx +3 -2
  98. package/src/components/features/WorkspaceGrid/WorkspaceGrid.tsx +2 -2
  99. package/src/components/features/WorkspaceGrid/WorkspaceInfo.tsx +7 -9
  100. package/src/components/features/WorkspaceGrid/WorkspaceRow.tsx +6 -6
  101. package/src/components/layouts/Header/Header.tsx +2 -9
  102. package/src/config/config.ts +24 -21
  103. package/src/config/defaults.ts +2 -2
  104. package/src/config/validation.ts +90 -0
  105. package/src/contexts/ProjectGridContext.tsx +1 -1
  106. package/src/contexts/WorkspaceDiscoveryContext.tsx +5 -5
  107. package/src/contexts/WorkspaceGridContext.tsx +2 -2
  108. package/src/hooks/useWorkspaceDiscovery.ts +16 -17
  109. package/src/hooks/useWorkspaceQuickActions.ts +1 -1
  110. package/src/hooks/useWorkspaceRuntime.ts +52 -12
  111. package/src/services/discovery/facets/compose-parser.ts +1 -1
  112. package/src/services/discovery/facets/makefile-parser.ts +2 -2
  113. package/src/services/discovery/facets/package-json-parser.ts +1 -1
  114. package/src/services/discovery/workspace-discovery.ts +21 -11
  115. package/src/services/runtime/docker-runtime.ts +1 -1
  116. package/src/services/runtime/node-runtime.ts +2 -2
  117. package/src/theme/theme.ts +1 -1
  118. package/src/types/project-grid.ts +1 -1
  119. package/src/types/workspace-grid.ts +2 -2
  120. package/src/types/{project.ts → workspace.ts} +9 -2
  121. package/src/utils/logging/logger.ts +2 -2
  122. package/src/utils/project/project-grid.test.ts +175 -0
  123. package/src/utils/project/project-grid.ts +1 -2
  124. package/src/utils/workspace/workspace-grid.ts +6 -20
  125. package/src/utils/workspace/workspace-helper.ts +1 -1
  126. package/.github/workflows/publish-to-npm.yml +0 -36
  127. package/dist/app/pages/About.d.ts +0 -2
  128. package/dist/app/pages/About.d.ts.map +0 -1
  129. package/dist/app/pages/About.js +0 -6
  130. package/dist/app/pages/About.js.map +0 -1
  131. package/dist/app/pages/AboutPage.d.ts +0 -2
  132. package/dist/app/pages/AboutPage.d.ts.map +0 -1
  133. package/dist/app/pages/AboutPage.js +0 -6
  134. package/dist/app/pages/AboutPage.js.map +0 -1
  135. package/dist/app/pages/Workspace.d.ts +0 -2
  136. package/dist/app/pages/Workspace.d.ts.map +0 -1
  137. package/dist/app/pages/Workspace.js +0 -14
  138. package/dist/app/pages/Workspace.js.map +0 -1
  139. package/dist/app/pages/Workspaces.d.ts +0 -2
  140. package/dist/app/pages/Workspaces.d.ts.map +0 -1
  141. package/dist/app/pages/Workspaces.js +0 -16
  142. package/dist/app/pages/Workspaces.js.map +0 -1
  143. package/dist/app/pages/WorkspacesPage.d.ts +0 -2
  144. package/dist/app/pages/WorkspacesPage.d.ts.map +0 -1
  145. package/dist/app/pages/WorkspacesPage.js +0 -15
  146. package/dist/app/pages/WorkspacesPage.js.map +0 -1
  147. package/dist/components/features/ProjectGrid/ProjectCommands.d.ts +0 -2
  148. package/dist/components/features/ProjectGrid/ProjectCommands.d.ts.map +0 -1
  149. package/dist/components/features/ProjectGrid/ProjectCommands.js +0 -6
  150. package/dist/components/features/ProjectGrid/ProjectCommands.js.map +0 -1
  151. package/dist/components/features/ProjectGrid/WorkspaceCommands.d.ts +0 -2
  152. package/dist/components/features/ProjectGrid/WorkspaceCommands.d.ts.map +0 -1
  153. package/dist/components/features/ProjectGrid/WorkspaceCommands.js +0 -6
  154. package/dist/components/features/ProjectGrid/WorkspaceCommands.js.map +0 -1
  155. package/dist/components/features/ProjectGrid/WorkspaceDetail.d.ts +0 -2
  156. package/dist/components/features/ProjectGrid/WorkspaceDetail.d.ts.map +0 -1
  157. package/dist/components/features/ProjectGrid/WorkspaceDetail.js +0 -16
  158. package/dist/components/features/ProjectGrid/WorkspaceDetail.js.map +0 -1
  159. package/dist/components/features/ProjectGrid/WorkspaceInfo.d.ts +0 -2
  160. package/dist/components/features/ProjectGrid/WorkspaceInfo.d.ts.map +0 -1
  161. package/dist/components/features/ProjectGrid/WorkspaceInfo.js +0 -11
  162. package/dist/components/features/ProjectGrid/WorkspaceInfo.js.map +0 -1
  163. package/dist/components/features/WorkspaceDetail/ColCompose.d.ts +0 -10
  164. package/dist/components/features/WorkspaceDetail/ColCompose.d.ts.map +0 -1
  165. package/dist/components/features/WorkspaceDetail/ColCompose.js +0 -6
  166. package/dist/components/features/WorkspaceDetail/ColCompose.js.map +0 -1
  167. package/dist/components/features/WorkspaceDetail/ColMakefile.d.ts +0 -9
  168. package/dist/components/features/WorkspaceDetail/ColMakefile.d.ts.map +0 -1
  169. package/dist/components/features/WorkspaceDetail/ColMakefile.js +0 -6
  170. package/dist/components/features/WorkspaceDetail/ColMakefile.js.map +0 -1
  171. package/dist/components/features/WorkspaceDetail/ColPackageJson.d.ts +0 -11
  172. package/dist/components/features/WorkspaceDetail/ColPackageJson.d.ts.map +0 -1
  173. package/dist/components/features/WorkspaceDetail/ColPackageJson.js +0 -6
  174. package/dist/components/features/WorkspaceDetail/ColPackageJson.js.map +0 -1
  175. package/dist/components/features/WorkspaceDetail/ComposeCol copy 2.d.ts +0 -1
  176. package/dist/components/features/WorkspaceDetail/ComposeCol copy 2.d.ts.map +0 -1
  177. package/dist/components/features/WorkspaceDetail/ComposeCol copy 2.js +0 -2
  178. package/dist/components/features/WorkspaceDetail/ComposeCol copy 2.js.map +0 -1
  179. package/dist/components/features/WorkspaceDetail/ComposeCol copy.d.ts +0 -1
  180. package/dist/components/features/WorkspaceDetail/ComposeCol copy.d.ts.map +0 -1
  181. package/dist/components/features/WorkspaceDetail/ComposeCol copy.js +0 -2
  182. package/dist/components/features/WorkspaceDetail/ComposeCol copy.js.map +0 -1
  183. package/dist/components/features/WorkspaceDetail/ComposeCol.d.ts +0 -1
  184. package/dist/components/features/WorkspaceDetail/ComposeCol.d.ts.map +0 -1
  185. package/dist/components/features/WorkspaceDetail/ComposeCol.js +0 -2
  186. package/dist/components/features/WorkspaceDetail/ComposeCol.js.map +0 -1
  187. package/dist/components/features/WorkspaceDetail/EmptyCol.d.ts +0 -2
  188. package/dist/components/features/WorkspaceDetail/EmptyCol.d.ts.map +0 -1
  189. package/dist/components/features/WorkspaceDetail/EmptyCol.js +0 -6
  190. package/dist/components/features/WorkspaceDetail/EmptyCol.js.map +0 -1
  191. package/dist/components/features/WorkspaceDetail/EmptyRow.d.ts +0 -2
  192. package/dist/components/features/WorkspaceDetail/EmptyRow.d.ts.map +0 -1
  193. package/dist/components/features/WorkspaceDetail/EmptyRow.js +0 -6
  194. package/dist/components/features/WorkspaceDetail/EmptyRow.js.map +0 -1
  195. package/dist/components/features/WorkspaceDetail/PackageJsonCol.d.ts +0 -1
  196. package/dist/components/features/WorkspaceDetail/PackageJsonCol.d.ts.map +0 -1
  197. package/dist/components/features/WorkspaceDetail/PackageJsonCol.js +0 -2
  198. package/dist/components/features/WorkspaceDetail/PackageJsonCol.js.map +0 -1
  199. package/dist/components/features/WorkspaceDetail/WorkspaceDetail copy.d.ts +0 -2
  200. package/dist/components/features/WorkspaceDetail/WorkspaceDetail copy.d.ts.map +0 -1
  201. package/dist/components/features/WorkspaceDetail/WorkspaceDetail copy.js +0 -12
  202. package/dist/components/features/WorkspaceDetail/WorkspaceDetail copy.js.map +0 -1
  203. package/dist/components/features/WorkspaceDetail/WorkspaceDetail.d.ts +0 -2
  204. package/dist/components/features/WorkspaceDetail/WorkspaceDetail.d.ts.map +0 -1
  205. package/dist/components/features/WorkspaceDetail/WorkspaceDetail.js +0 -16
  206. package/dist/components/features/WorkspaceDetail/WorkspaceDetail.js.map +0 -1
  207. package/dist/components/features/WorkspaceDetail/WorkspaceInfo.d.ts +0 -2
  208. package/dist/components/features/WorkspaceDetail/WorkspaceInfo.d.ts.map +0 -1
  209. package/dist/components/features/WorkspaceDetail/WorkspaceInfo.js +0 -11
  210. package/dist/components/features/WorkspaceDetail/WorkspaceInfo.js.map +0 -1
  211. package/dist/components/features/WorkspaceGrid/WorkspaceCommands.d.ts +0 -2
  212. package/dist/components/features/WorkspaceGrid/WorkspaceCommands.d.ts.map +0 -1
  213. package/dist/components/features/WorkspaceGrid/WorkspaceCommands.js +0 -6
  214. package/dist/components/features/WorkspaceGrid/WorkspaceCommands.js.map +0 -1
  215. package/dist/components/features/WorkspaceGrid/WorkspaceInfo copy.d.ts +0 -2
  216. package/dist/components/features/WorkspaceGrid/WorkspaceInfo copy.d.ts.map +0 -1
  217. package/dist/components/features/WorkspaceGrid/WorkspaceInfo copy.js +0 -11
  218. package/dist/components/features/WorkspaceGrid/WorkspaceInfo copy.js.map +0 -1
  219. package/dist/components/features/WorkspaceGrid/WorkspacesGrid.d.ts +0 -2
  220. package/dist/components/features/WorkspaceGrid/WorkspacesGrid.d.ts.map +0 -1
  221. package/dist/components/features/WorkspaceGrid/WorkspacesGrid.js +0 -10
  222. package/dist/components/features/WorkspaceGrid/WorkspacesGrid.js.map +0 -1
  223. package/dist/components/features/WorkspaceGrid/WorkspacesInfo.d.ts +0 -2
  224. package/dist/components/features/WorkspaceGrid/WorkspacesInfo.d.ts.map +0 -1
  225. package/dist/components/features/WorkspaceGrid/WorkspacesInfo.js +0 -11
  226. package/dist/components/features/WorkspaceGrid/WorkspacesInfo.js.map +0 -1
  227. package/dist/components/features/WorkspaceGrid/WorkspacesRow.d.ts +0 -8
  228. package/dist/components/features/WorkspaceGrid/WorkspacesRow.d.ts.map +0 -1
  229. package/dist/components/features/WorkspaceGrid/WorkspacesRow.js +0 -18
  230. package/dist/components/features/WorkspaceGrid/WorkspacesRow.js.map +0 -1
  231. package/dist/components/features/WorkspaceList/WorkspaceList.d.ts +0 -2
  232. package/dist/components/features/WorkspaceList/WorkspaceList.d.ts.map +0 -1
  233. package/dist/components/features/WorkspaceList/WorkspaceList.js +0 -10
  234. package/dist/components/features/WorkspaceList/WorkspaceList.js.map +0 -1
  235. package/dist/components/features/WorkspaceList/WorkspacesRow.d.ts +0 -8
  236. package/dist/components/features/WorkspaceList/WorkspacesRow.d.ts.map +0 -1
  237. package/dist/components/features/WorkspaceList/WorkspacesRow.js +0 -15
  238. package/dist/components/features/WorkspaceList/WorkspacesRow.js.map +0 -1
  239. package/dist/components/features/WorkspaceList/responsiveColumnWidths.d.ts +0 -4
  240. package/dist/components/features/WorkspaceList/responsiveColumnWidths.d.ts.map +0 -1
  241. package/dist/components/features/WorkspaceList/responsiveColumnWidths.js +0 -11
  242. package/dist/components/features/WorkspaceList/responsiveColumnWidths.js.map +0 -1
  243. package/dist/components/features/WorkspaceList/responsiveWidth.d.ts +0 -4
  244. package/dist/components/features/WorkspaceList/responsiveWidth.d.ts.map +0 -1
  245. package/dist/components/features/WorkspaceList/responsiveWidth.js +0 -11
  246. package/dist/components/features/WorkspaceList/responsiveWidth.js.map +0 -1
  247. package/dist/components/features/WorkspacesGrid/WorkspaceInfo.d.ts +0 -2
  248. package/dist/components/features/WorkspacesGrid/WorkspaceInfo.d.ts.map +0 -1
  249. package/dist/components/features/WorkspacesGrid/WorkspaceInfo.js +0 -13
  250. package/dist/components/features/WorkspacesGrid/WorkspaceInfo.js.map +0 -1
  251. package/dist/components/features/WorkspacesGrid/WorkspaceList.d.ts +0 -2
  252. package/dist/components/features/WorkspacesGrid/WorkspaceList.d.ts.map +0 -1
  253. package/dist/components/features/WorkspacesGrid/WorkspaceList.js +0 -10
  254. package/dist/components/features/WorkspacesGrid/WorkspaceList.js.map +0 -1
  255. package/dist/components/features/WorkspacesGrid/WorkspacesGrid.d.ts +0 -2
  256. package/dist/components/features/WorkspacesGrid/WorkspacesGrid.d.ts.map +0 -1
  257. package/dist/components/features/WorkspacesGrid/WorkspacesGrid.js +0 -10
  258. package/dist/components/features/WorkspacesGrid/WorkspacesGrid.js.map +0 -1
  259. package/dist/components/features/WorkspacesGrid/WorkspacesInfo.d.ts +0 -2
  260. package/dist/components/features/WorkspacesGrid/WorkspacesInfo.d.ts.map +0 -1
  261. package/dist/components/features/WorkspacesGrid/WorkspacesInfo.js +0 -11
  262. package/dist/components/features/WorkspacesGrid/WorkspacesInfo.js.map +0 -1
  263. package/dist/components/features/WorkspacesGrid/WorkspacesRow.d.ts +0 -8
  264. package/dist/components/features/WorkspacesGrid/WorkspacesRow.d.ts.map +0 -1
  265. package/dist/components/features/WorkspacesGrid/WorkspacesRow.js +0 -18
  266. package/dist/components/features/WorkspacesGrid/WorkspacesRow.js.map +0 -1
  267. package/dist/components/layouts/Footer/Footer.d.ts +0 -2
  268. package/dist/components/layouts/Footer/Footer.d.ts.map +0 -1
  269. package/dist/components/layouts/Footer/Footer.js +0 -7
  270. package/dist/components/layouts/Footer/Footer.js.map +0 -1
  271. package/dist/components/layouts/Header/WorkspaceCommands copy.d.ts +0 -2
  272. package/dist/components/layouts/Header/WorkspaceCommands copy.d.ts.map +0 -1
  273. package/dist/components/layouts/Header/WorkspaceCommands copy.js +0 -6
  274. package/dist/components/layouts/Header/WorkspaceCommands copy.js.map +0 -1
  275. package/dist/contexts/NavigationContext.d.ts +0 -27
  276. package/dist/contexts/NavigationContext.d.ts.map +0 -1
  277. package/dist/contexts/NavigationContext.js +0 -33
  278. package/dist/contexts/NavigationContext.js.map +0 -1
  279. package/dist/contexts/ProjectNavigationContext.d.ts +0 -20
  280. package/dist/contexts/ProjectNavigationContext.d.ts.map +0 -1
  281. package/dist/contexts/ProjectNavigationContext.js +0 -35
  282. package/dist/contexts/ProjectNavigationContext.js.map +0 -1
  283. package/dist/contexts/ResponsizeContext.d.ts +0 -14
  284. package/dist/contexts/ResponsizeContext.d.ts.map +0 -1
  285. package/dist/contexts/ResponsizeContext.js +0 -34
  286. package/dist/contexts/ResponsizeContext.js.map +0 -1
  287. package/dist/contexts/WorkspaceNavigationContext.d.ts +0 -29
  288. package/dist/contexts/WorkspaceNavigationContext.d.ts.map +0 -1
  289. package/dist/contexts/WorkspaceNavigationContext.js +0 -41
  290. package/dist/contexts/WorkspaceNavigationContext.js.map +0 -1
  291. package/dist/contexts/WorkspacesNavigationContext.d.ts +0 -29
  292. package/dist/contexts/WorkspacesNavigationContext.d.ts.map +0 -1
  293. package/dist/contexts/WorkspacesNavigationContext.js +0 -37
  294. package/dist/contexts/WorkspacesNavigationContext.js.map +0 -1
  295. package/dist/hooks/useDisovery.d.ts +0 -7
  296. package/dist/hooks/useDisovery.d.ts.map +0 -1
  297. package/dist/hooks/useDisovery.js +0 -38
  298. package/dist/hooks/useDisovery.js.map +0 -1
  299. package/dist/hooks/useGridNavigation.d.ts +0 -19
  300. package/dist/hooks/useGridNavigation.d.ts.map +0 -1
  301. package/dist/hooks/useGridNavigation.js +0 -52
  302. package/dist/hooks/useGridNavigation.js.map +0 -1
  303. package/dist/hooks/useNavigation.d.ts +0 -10
  304. package/dist/hooks/useNavigation.d.ts.map +0 -1
  305. package/dist/hooks/useNavigation.js +0 -43
  306. package/dist/hooks/useNavigation.js.map +0 -1
  307. package/dist/hooks/useNavigationMatrix.d.ts +0 -6
  308. package/dist/hooks/useNavigationMatrix.d.ts.map +0 -1
  309. package/dist/hooks/useNavigationMatrix.js +0 -34
  310. package/dist/hooks/useNavigationMatrix.js.map +0 -1
  311. package/dist/hooks/useRuntime.d.ts +0 -1
  312. package/dist/hooks/useRuntime.d.ts.map +0 -1
  313. package/dist/hooks/useRuntime.js +0 -2
  314. package/dist/hooks/useRuntime.js.map +0 -1
  315. package/dist/hooks/useWorkspaceNavigation.d.ts +0 -10
  316. package/dist/hooks/useWorkspaceNavigation.d.ts.map +0 -1
  317. package/dist/hooks/useWorkspaceNavigation.js +0 -31
  318. package/dist/hooks/useWorkspaceNavigation.js.map +0 -1
  319. package/dist/hooks/useWorkspaceQuickActionts.d.ts +0 -4
  320. package/dist/hooks/useWorkspaceQuickActionts.d.ts.map +0 -1
  321. package/dist/hooks/useWorkspaceQuickActionts.js +0 -28
  322. package/dist/hooks/useWorkspaceQuickActionts.js.map +0 -1
  323. package/dist/hooks/useWorkspacesGrid copy.d.ts +0 -10
  324. package/dist/hooks/useWorkspacesGrid copy.d.ts.map +0 -1
  325. package/dist/hooks/useWorkspacesGrid copy.js +0 -31
  326. package/dist/hooks/useWorkspacesGrid copy.js.map +0 -1
  327. package/dist/hooks/useWorkspacesGrid.d.ts +0 -11
  328. package/dist/hooks/useWorkspacesGrid.d.ts.map +0 -1
  329. package/dist/hooks/useWorkspacesGrid.js +0 -31
  330. package/dist/hooks/useWorkspacesGrid.js.map +0 -1
  331. package/dist/hooks/useWorkspacesNavigation.d.ts +0 -10
  332. package/dist/hooks/useWorkspacesNavigation.d.ts.map +0 -1
  333. package/dist/hooks/useWorkspacesNavigation.js +0 -31
  334. package/dist/hooks/useWorkspacesNavigation.js.map +0 -1
  335. package/dist/services/discovery/facets/biome-parser.d.ts +0 -3
  336. package/dist/services/discovery/facets/biome-parser.d.ts.map +0 -1
  337. package/dist/services/discovery/facets/biome-parser.js +0 -73
  338. package/dist/services/discovery/facets/biome-parser.js.map +0 -1
  339. package/dist/services/discovery/facets/composeParser.d.ts +0 -1
  340. package/dist/services/discovery/facets/composeParser.d.ts.map +0 -1
  341. package/dist/services/discovery/facets/composeParser.js +0 -2
  342. package/dist/services/discovery/facets/composeParser.js.map +0 -1
  343. package/dist/services/discovery/facets/makefileParser.d.ts +0 -1
  344. package/dist/services/discovery/facets/makefileParser.d.ts.map +0 -1
  345. package/dist/services/discovery/facets/makefileParser.js +0 -2
  346. package/dist/services/discovery/facets/makefileParser.js.map +0 -1
  347. package/dist/services/discovery/facets/manifest-parser.d.ts +0 -7
  348. package/dist/services/discovery/facets/manifest-parser.d.ts.map +0 -1
  349. package/dist/services/discovery/facets/manifest-parser.js +0 -43
  350. package/dist/services/discovery/facets/manifest-parser.js.map +0 -1
  351. package/dist/services/discovery/facets/manifestParser.d.ts +0 -1
  352. package/dist/services/discovery/facets/manifestParser.d.ts.map +0 -1
  353. package/dist/services/discovery/facets/manifestParser.js +0 -2
  354. package/dist/services/discovery/facets/manifestParser.js.map +0 -1
  355. package/dist/services/discovery/workspaceDiscovery.d.ts +0 -3
  356. package/dist/services/discovery/workspaceDiscovery.d.ts.map +0 -1
  357. package/dist/services/discovery/workspaceDiscovery.js +0 -17
  358. package/dist/services/discovery/workspaceDiscovery.js.map +0 -1
  359. package/dist/services/runtime/resolve-runtime-conflicts.d.ts +0 -15
  360. package/dist/services/runtime/resolve-runtime-conflicts.d.ts.map +0 -1
  361. package/dist/services/runtime/resolve-runtime-conflicts.js +0 -36
  362. package/dist/services/runtime/resolve-runtime-conflicts.js.map +0 -1
  363. package/dist/types/navigation.d.ts +0 -10
  364. package/dist/types/navigation.d.ts.map +0 -1
  365. package/dist/types/navigation.js +0 -59
  366. package/dist/types/navigation.js.map +0 -1
  367. package/dist/types/projects-grid.d.ts +0 -32
  368. package/dist/types/projects-grid.d.ts.map +0 -1
  369. package/dist/types/projects-grid.js +0 -2
  370. package/dist/types/projects-grid.js.map +0 -1
  371. package/dist/types/quick-actions.d.ts +0 -7
  372. package/dist/types/quick-actions.d.ts.map +0 -1
  373. package/dist/types/quick-actions.js +0 -2
  374. package/dist/types/quick-actions.js.map +0 -1
  375. package/dist/types/runtime.d.ts +0 -16
  376. package/dist/types/runtime.d.ts.map +0 -1
  377. package/dist/types/runtime.js +0 -2
  378. package/dist/types/runtime.js.map +0 -1
  379. package/dist/types/workpace-grid.d.ts +0 -32
  380. package/dist/types/workpace-grid.d.ts.map +0 -1
  381. package/dist/types/workpace-grid.js +0 -2
  382. package/dist/types/workpace-grid.js.map +0 -1
  383. package/dist/types/workspace-navigation.d.ts +0 -37
  384. package/dist/types/workspace-navigation.d.ts.map +0 -1
  385. package/dist/types/workspace-navigation.js +0 -7
  386. package/dist/types/workspace-navigation.js.map +0 -1
  387. package/dist/types/workspaces-grid copy.d.ts +0 -37
  388. package/dist/types/workspaces-grid copy.d.ts.map +0 -1
  389. package/dist/types/workspaces-grid copy.js +0 -7
  390. package/dist/types/workspaces-grid copy.js.map +0 -1
  391. package/dist/types/workspaces-grid.d.ts +0 -37
  392. package/dist/types/workspaces-grid.d.ts.map +0 -1
  393. package/dist/types/workspaces-grid.js +0 -7
  394. package/dist/types/workspaces-grid.js.map +0 -1
  395. package/dist/types/worspace-state.d.ts +0 -19
  396. package/dist/types/worspace-state.d.ts.map +0 -1
  397. package/dist/types/worspace-state.js +0 -2
  398. package/dist/types/worspace-state.js.map +0 -1
  399. package/dist/utils/framework-detector.d.ts +0 -7
  400. package/dist/utils/framework-detector.d.ts.map +0 -1
  401. package/dist/utils/framework-detector.js +0 -111
  402. package/dist/utils/framework-detector.js.map +0 -1
  403. package/dist/utils/fs/scanner.d.ts +0 -6
  404. package/dist/utils/fs/scanner.d.ts.map +0 -1
  405. package/dist/utils/fs/scanner.js +0 -32
  406. package/dist/utils/fs/scanner.js.map +0 -1
  407. package/dist/utils/getPackageVersion.d.ts +0 -2
  408. package/dist/utils/getPackageVersion.d.ts.map +0 -1
  409. package/dist/utils/getPackageVersion.js +0 -6
  410. package/dist/utils/getPackageVersion.js.map +0 -1
  411. package/dist/utils/logger.d.ts +0 -14
  412. package/dist/utils/logger.d.ts.map +0 -1
  413. package/dist/utils/logger.js +0 -99
  414. package/dist/utils/logger.js.map +0 -1
  415. package/dist/utils/navigation-helper.d.ts +0 -9
  416. package/dist/utils/navigation-helper.d.ts.map +0 -1
  417. package/dist/utils/navigation-helper.js +0 -53
  418. package/dist/utils/navigation-helper.js.map +0 -1
  419. package/dist/utils/package-json.d.ts +0 -2
  420. package/dist/utils/package-json.d.ts.map +0 -1
  421. package/dist/utils/package-json.js +0 -11
  422. package/dist/utils/package-json.js.map +0 -1
  423. package/dist/utils/port.d.ts +0 -6
  424. package/dist/utils/port.d.ts.map +0 -1
  425. package/dist/utils/port.js +0 -24
  426. package/dist/utils/port.js.map +0 -1
  427. package/dist/utils/project/workspace-grid.d.ts +0 -17
  428. package/dist/utils/project/workspace-grid.d.ts.map +0 -1
  429. package/dist/utils/project/workspace-grid.js +0 -121
  430. package/dist/utils/project/workspace-grid.js.map +0 -1
  431. package/dist/utils/workpace/workspace-grid.d.ts +0 -17
  432. package/dist/utils/workpace/workspace-grid.d.ts.map +0 -1
  433. package/dist/utils/workpace/workspace-grid.js +0 -121
  434. package/dist/utils/workpace/workspace-grid.js.map +0 -1
  435. package/dist/utils/workpace/workspace-helper.d.ts +0 -7
  436. package/dist/utils/workpace/workspace-helper.d.ts.map +0 -1
  437. package/dist/utils/workpace/workspace-helper.js +0 -10
  438. package/dist/utils/workpace/workspace-helper.js.map +0 -1
  439. package/dist/utils/workpace/workspace-navigation.d.ts +0 -17
  440. package/dist/utils/workpace/workspace-navigation.d.ts.map +0 -1
  441. package/dist/utils/workpace/workspace-navigation.js +0 -123
  442. package/dist/utils/workpace/workspace-navigation.js.map +0 -1
  443. package/dist/utils/workpace/workspaces-grid copy.d.ts +0 -30
  444. package/dist/utils/workpace/workspaces-grid copy.d.ts.map +0 -1
  445. package/dist/utils/workpace/workspaces-grid copy.js +0 -97
  446. package/dist/utils/workpace/workspaces-grid copy.js.map +0 -1
  447. package/dist/utils/workpace/workspaces-grid.d.ts +0 -22
  448. package/dist/utils/workpace/workspaces-grid.d.ts.map +0 -1
  449. package/dist/utils/workpace/workspaces-grid.js +0 -123
  450. package/dist/utils/workpace/workspaces-grid.js.map +0 -1
  451. package/dist/utils/workpace/worspace-state.d.ts +0 -18
  452. package/dist/utils/workpace/worspace-state.d.ts.map +0 -1
  453. package/dist/utils/workpace/worspace-state.js +0 -2
  454. package/dist/utils/workpace/worspace-state.js.map +0 -1
  455. package/dist/utils/workspace/workspaces-grid.d.ts +0 -22
  456. package/dist/utils/workspace/workspaces-grid.d.ts.map +0 -1
  457. package/dist/utils/workspace/workspaces-grid.js +0 -123
  458. package/dist/utils/workspace/workspaces-grid.js.map +0 -1
  459. package/dist/utils/workspace-helper.d.ts +0 -10
  460. package/dist/utils/workspace-helper.d.ts.map +0 -1
  461. package/dist/utils/workspace-helper.js +0 -46
  462. package/dist/utils/workspace-helper.js.map +0 -1
  463. package/dist/utils/workspace-navigation.d.ts +0 -1
  464. package/dist/utils/workspace-navigation.d.ts.map +0 -1
  465. package/dist/utils/workspace-navigation.js +0 -2
  466. package/dist/utils/workspace-navigation.js.map +0 -1
  467. package/src/utils/navigation/grid-navigation.ts +0 -60
@@ -0,0 +1,90 @@
1
+ import { z } from "zod"
2
+
3
+ import type { Config } from "../types/config.js"
4
+
5
+ const facetQuickActionSchema = z.object({
6
+ facetPath: z.string(),
7
+ name: z.string(),
8
+ command: z.string(),
9
+ exec: z.string(),
10
+ order: z.number().optional(),
11
+ })
12
+
13
+ const workspaceQuickActionSchema = z.object({
14
+ workspacePath: z.string(),
15
+ facets: z.array(facetQuickActionSchema),
16
+ })
17
+
18
+ const discoverySchema = z
19
+ .object({
20
+ maxDepth: z.number().int().nonnegative().optional(),
21
+ ignore: z.array(z.string()).optional(),
22
+ folders: z
23
+ .object({
24
+ app: z.array(z.string()).optional(),
25
+ package: z.array(z.string()).optional(),
26
+ infra: z.array(z.string()).optional(),
27
+ contract: z.array(z.string()).optional(),
28
+ })
29
+ .optional(),
30
+ scripts: z
31
+ .object({
32
+ include: z.array(z.string()).optional(),
33
+ exclude: z.array(z.string()).optional(),
34
+ })
35
+ .optional(),
36
+ env: z
37
+ .object({
38
+ files: z.array(z.string()).optional(),
39
+ portKeys: z.array(z.string()).optional(),
40
+ })
41
+ .optional(),
42
+ order: z.array(z.string()).optional(),
43
+ makefile: z
44
+ .object({
45
+ showDefault: z.boolean().optional(),
46
+ })
47
+ .optional(),
48
+ })
49
+ .optional()
50
+
51
+ const executionSchema = z
52
+ .object({
53
+ useTmux: z.boolean().optional(),
54
+ })
55
+ .optional()
56
+
57
+ const loggingSchema = z
58
+ .object({
59
+ level: z.enum(["debug", "info", "warn", "error"]).optional(),
60
+ file: z.boolean().optional(),
61
+ logDir: z.string().optional(),
62
+ prettyPrint: z.boolean().optional(),
63
+ truncateOnStart: z.boolean().optional(),
64
+ })
65
+ .optional()
66
+
67
+ export const configSchema = z.object({
68
+ discovery: discoverySchema,
69
+ quickActions: z.array(workspaceQuickActionSchema),
70
+ execution: executionSchema,
71
+ logging: loggingSchema,
72
+ theme: z.literal("dark").optional(),
73
+ })
74
+
75
+ export function validateConfig(config: unknown): Config {
76
+ const result = configSchema.safeParse(config)
77
+
78
+ if (result.success) {
79
+ return result.data
80
+ }
81
+
82
+ const details = result.error.issues
83
+ .map((issue) => {
84
+ const path = issue.path.length > 0 ? issue.path.join(".") : "root"
85
+ return `${path}: ${issue.message}`
86
+ })
87
+ .join("; ")
88
+
89
+ throw new Error(`Invalid monotui config: ${details}`)
90
+ }
@@ -8,8 +8,8 @@ import {
8
8
  shouldKeepTuiOpen,
9
9
  } from "../services/runtime/command-runner.js"
10
10
  import { Page } from "../types/page.js"
11
- import type { Project } from "../types/project.js"
12
11
  import type { ProjectGridGrid } from "../types/project-grid.js"
12
+ import type { Project } from "../types/workspace.js"
13
13
  import {
14
14
  buildProjectGrid,
15
15
  getProjectCellByPosition,
@@ -8,11 +8,11 @@ import {
8
8
 
9
9
  import { useWorkspaceDiscovery } from "../hooks/useWorkspaceDiscovery.js"
10
10
  import { useWorkspaceRuntime } from "../hooks/useWorkspaceRuntime.js"
11
- import type { Project } from "../types/project.js"
11
+ import type { Project, Workspace } from "../types/workspace.js"
12
12
  import type { WorkspaceRuntimeState } from "../types/workspace-runtime.js"
13
13
 
14
14
  interface WorkspaceDiscoveryContextType {
15
- projects: Project[]
15
+ workspace: Workspace | null
16
16
  workspaceRuntimes: WorkspaceRuntimeState[]
17
17
  project: Project | null
18
18
  setProject: (project: Project | null) => void
@@ -35,11 +35,11 @@ export function WorkspaceDiscoveryProvider({
35
35
  }) {
36
36
  const [project, setProject] = useState<Project | null>(null)
37
37
  const rootPath = useMemo(() => process.cwd(), [])
38
- const { projects } = useWorkspaceDiscovery(rootPath)
39
- const workspaceRuntimes = useWorkspaceRuntime(projects)
38
+ const { workspace } = useWorkspaceDiscovery(rootPath)
39
+ const workspaceRuntimes = useWorkspaceRuntime(workspace?.projects || [])
40
40
 
41
41
  return (
42
- <Provider value={{ projects, workspaceRuntimes, project, setProject }}>
42
+ <Provider value={{ workspace, workspaceRuntimes, project, setProject }}>
43
43
  {children}
44
44
  </Provider>
45
45
  )
@@ -6,7 +6,7 @@ import {
6
6
  shouldKeepTuiOpen,
7
7
  } from "../services/runtime/command-runner.js"
8
8
  import { Page } from "../types/page.js"
9
- import type { Project } from "../types/project.js"
9
+ import type { Project } from "../types/workspace.js"
10
10
  import type { CursorPosition } from "../types/workspace-grid.js"
11
11
  import type { WorkspaceQuickAction } from "../types/workspace-quick-actions.js"
12
12
  import type { WorkspaceRuntimeState } from "../types/workspace-runtime.js"
@@ -81,7 +81,7 @@ export function WorkspacesNavigationProvider({
81
81
 
82
82
  if (selectedCell?.type === "workspace") {
83
83
  setPage(Page.Project)
84
- setProject(selectedCell.workspace)
84
+ setProject(selectedCell.project)
85
85
  } else if (selectedCell?.type === "quickAction") {
86
86
  const workspace = projects[newRow]
87
87
  const command = selectedCell.action.command
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useState } from "react"
2
2
 
3
- import { discoverWorkspaces } from "../services/discovery/workspace-discovery.js"
4
- import type { Project } from "../types/project.js"
3
+ import { workspaceDiscovery } from "../services/discovery/workspace-discovery.js"
4
+ import type { Workspace } from "../types/workspace.js"
5
5
  import { logger } from "../utils/logging/logger.js"
6
6
 
7
7
  interface UseWorkspaceDiscoveryOptions {
@@ -10,12 +10,15 @@ interface UseWorkspaceDiscoveryOptions {
10
10
 
11
11
  export function useWorkspaceDiscovery(
12
12
  rootPath: string,
13
- options?: UseWorkspaceDiscoveryOptions,
14
- ) {
13
+ _options?: UseWorkspaceDiscoveryOptions,
14
+ ): {
15
+ loading: boolean
16
+ workspace: Workspace | null
17
+ error: Error | null
18
+ } {
15
19
  const [loading, setLoading] = useState(true)
16
- const [projects, setProjects] = useState<Project[]>([])
20
+ const [workspace, setWorkspace] = useState<Workspace | null>(null)
17
21
  const [error, setError] = useState<Error | null>(null)
18
- const refreshIntervalMs = options?.refreshIntervalMs ?? 0
19
22
 
20
23
  useEffect(() => {
21
24
  let cancelled = false
@@ -30,11 +33,13 @@ export function useWorkspaceDiscovery(
30
33
  setLoading(true)
31
34
  setError(null)
32
35
  try {
33
- const result = await discoverWorkspaces(rootPath)
36
+ const workspace = await workspaceDiscovery(rootPath)
34
37
  logger.debug(rootPath, "discovered workspaces")
35
38
  if (!cancelled) {
36
- setProjects(result)
37
- logger.debug(`Workspace discovery result count: ${result.length}`)
39
+ setWorkspace(workspace)
40
+ logger.debug(
41
+ `Workspace discovery result count: ${workspace.projects.length}`,
42
+ )
38
43
  }
39
44
  } catch (err) {
40
45
  if (!cancelled) setError(err as Error)
@@ -46,16 +51,10 @@ export function useWorkspaceDiscovery(
46
51
 
47
52
  load()
48
53
 
49
- const intervalId =
50
- refreshIntervalMs > 0 ? setInterval(load, refreshIntervalMs) : null
51
-
52
54
  return () => {
53
55
  cancelled = true
54
- if (intervalId) {
55
- clearInterval(intervalId)
56
- }
57
56
  }
58
- }, [rootPath, refreshIntervalMs])
57
+ }, [rootPath])
59
58
 
60
- return { loading, projects, error }
59
+ return { loading, workspace, error }
61
60
  }
@@ -1,4 +1,4 @@
1
- import type { Project } from "../types/project.js"
1
+ import type { Project } from "../types/workspace.js"
2
2
  import type {
3
3
  FacetQuickAction,
4
4
  WorkspaceQuickAction,
@@ -3,7 +3,7 @@ import { useEffect, useState } from "react"
3
3
  import { getDockerRunStates } from "../services/runtime/docker-runtime.js"
4
4
  import { getNodeRunStates } from "../services/runtime/node-runtime.js"
5
5
  import { resolveRuntimeConflicts } from "../services/runtime/resolve-runtime.js"
6
- import type { Project } from "../types/project.js"
6
+ import type { Project } from "../types/workspace.js"
7
7
  import type { WorkspaceRuntimeState } from "../types/workspace-runtime.js"
8
8
  import { logger } from "../utils/logging/logger.js"
9
9
 
@@ -39,6 +39,50 @@ function mergeTransientStatuses(
39
39
  }))
40
40
  }
41
41
 
42
+ function areRuntimeStatesEqual(
43
+ left: WorkspaceRuntimeState[],
44
+ right: WorkspaceRuntimeState[],
45
+ ): boolean {
46
+ if (left.length !== right.length) {
47
+ return false
48
+ }
49
+
50
+ for (
51
+ let workspaceIndex = 0;
52
+ workspaceIndex < left.length;
53
+ workspaceIndex += 1
54
+ ) {
55
+ const leftWorkspace = left[workspaceIndex]
56
+ const rightWorkspace = right[workspaceIndex]
57
+
58
+ if (leftWorkspace.workspacePath !== rightWorkspace.workspacePath) {
59
+ return false
60
+ }
61
+
62
+ if (leftWorkspace.runStates.length !== rightWorkspace.runStates.length) {
63
+ return false
64
+ }
65
+
66
+ for (
67
+ let stateIndex = 0;
68
+ stateIndex < leftWorkspace.runStates.length;
69
+ stateIndex += 1
70
+ ) {
71
+ const leftState = leftWorkspace.runStates[stateIndex]
72
+ const rightState = rightWorkspace.runStates[stateIndex]
73
+
74
+ if (
75
+ leftState.id !== rightState.id ||
76
+ leftState.status !== rightState.status
77
+ ) {
78
+ return false
79
+ }
80
+ }
81
+ }
82
+
83
+ return true
84
+ }
85
+
42
86
  export function useWorkspaceRuntime(projects: Project[]) {
43
87
  const [runtimeStates, setRuntimeStates] = useState<WorkspaceRuntimeState[]>(
44
88
  [],
@@ -52,11 +96,6 @@ export function useWorkspaceRuntime(projects: Project[]) {
52
96
  const scripts = project.facets.packageJson?.scripts ?? []
53
97
  const services = project.facets.compose?.services ?? []
54
98
 
55
- // const [nodeStates, dockerStates] = await Promise.all([
56
- // getNodeRunStates(project.absolutePath, project.path, scripts),
57
- // getDockerRunStates(project.path, services),
58
- // ])
59
-
60
99
  const nodeStates = await getNodeRunStates(
61
100
  project.absolutePath,
62
101
  project.path,
@@ -73,17 +112,18 @@ export function useWorkspaceRuntime(projects: Project[]) {
73
112
  runStates: [...resolvedNodeStates, ...resolvedDockerStates],
74
113
  })
75
114
  }
76
- if (!cancelled) {
77
- setRuntimeStates((previous) =>
78
- mergeTransientStatuses(previous, results),
79
- )
115
+ if (cancelled) {
116
+ return
80
117
  }
118
+
119
+ setRuntimeStates((previous) => {
120
+ const merged = mergeTransientStatuses(previous, results)
121
+ return areRuntimeStatesEqual(previous, merged) ? previous : merged
122
+ })
81
123
  }
82
124
  fetchStatus()
83
- const interval = setInterval(fetchStatus, 5000)
84
125
  return () => {
85
126
  cancelled = true
86
- clearInterval(interval)
87
127
  }
88
128
  }, [projects])
89
129
 
@@ -2,7 +2,7 @@ import { readFile } from "node:fs/promises"
2
2
  import { dirname, join, relative } from "node:path"
3
3
  import { parse as parseYaml } from "yaml"
4
4
 
5
- import type { ComposeFacet } from "../../../types/project.js"
5
+ import type { ComposeFacet } from "../../../types/workspace.js"
6
6
  import { fileExists } from "../../../utils/fs/file.js"
7
7
  import { logger } from "../../../utils/logging/logger.js"
8
8
 
@@ -1,7 +1,7 @@
1
1
  import { readFile } from "node:fs/promises"
2
2
  import { dirname, join, relative, resolve } from "node:path"
3
3
 
4
- import type { MakefileFacet } from "../../../types/project.js"
4
+ import type { MakefileFacet } from "../../../types/workspace.js"
5
5
  import { fileExists } from "../../../utils/fs/file.js"
6
6
  import { logger } from "../../../utils/logging/logger.js"
7
7
 
@@ -74,7 +74,7 @@ export async function parseMakefile(
74
74
  }
75
75
 
76
76
  import { getConfig } from "../../../config/config.js"
77
- import type { MakefileCommand } from "../../../types/project.js"
77
+ import type { MakefileCommand } from "../../../types/workspace.js"
78
78
 
79
79
  async function parseSingleMakefile(
80
80
  makefilePath: string,
@@ -6,7 +6,7 @@ import type {
6
6
  PackageJsonFacet,
7
7
  PackageJsonScript,
8
8
  PackageManager,
9
- } from "../../../types/project.js"
9
+ } from "../../../types/workspace.js"
10
10
  import { getPackageJson } from "../../../utils/fs/file.js"
11
11
  import { detectFramework } from "../../../utils/workspace/framework-detector.js"
12
12
 
@@ -1,22 +1,23 @@
1
1
  import { basename } from "node:path"
2
2
 
3
3
  import { getConfig } from "../../config/config.js"
4
- import type { Project, ProjectType } from "../../types/project"
4
+ import type { Project, ProjectType, Workspace } from "../../types/workspace.js"
5
5
  import { scanDirectories } from "../../utils/fs/directories.js"
6
6
  import { logger } from "../../utils/logging/logger.js"
7
7
  import { parseDockerCompose } from "./facets/compose-parser.js"
8
8
  import { parseMakefile } from "./facets/makefile-parser.js"
9
9
  import { parsePackageJson } from "./facets/package-json-parser.js"
10
10
 
11
- export async function discoverWorkspaces(rootPath: string): Promise<Project[]> {
11
+ export async function workspaceDiscovery(rootPath: string): Promise<Workspace> {
12
12
  const config = getConfig()
13
13
  const directories = await scanDirectories(rootPath, {
14
14
  maxDepth: 4,
15
15
  ignore: config.discovery?.ignore || [],
16
16
  })
17
+
17
18
  logger.debug(directories, "Scanned Directories")
18
19
 
19
- const workspaces: Project[] = []
20
+ const projects: Project[] = []
20
21
  for (const dir of directories) {
21
22
  const packageFacet = await parsePackageJson(dir)
22
23
 
@@ -24,12 +25,16 @@ export async function discoverWorkspaces(rootPath: string): Promise<Project[]> {
24
25
 
25
26
  const makefileFacet = await parseMakefile(dir)
26
27
 
28
+ // packageFacet?.name || composeFacet?.name || makefileFacet?.name || ""
29
+ const name = packageFacet?.name || basename(dir)
30
+
27
31
  if (packageFacet || composeFacet || makefileFacet) {
28
32
  const relPath = dir.startsWith(rootPath)
29
33
  ? dir.slice(rootPath.length).replace(/^\/+/, "")
30
34
  : dir
31
35
  const type = await determineProjectType(relPath)
32
- const workspace: Project = {
36
+ const project: Project = {
37
+ name,
33
38
  type,
34
39
  folder: basename(dir),
35
40
  path: relPath || ".",
@@ -40,16 +45,21 @@ export async function discoverWorkspaces(rootPath: string): Promise<Project[]> {
40
45
  makefile: makefileFacet || undefined,
41
46
  },
42
47
  }
43
- workspaces.push(workspace)
48
+ projects.push(project)
44
49
  }
45
50
  }
46
51
 
47
- const orderedWorkspaces = orderWorkspaces(
48
- workspaces,
49
- config.discovery?.order || [],
50
- )
52
+ const orderedProjects = orderProjects(projects, config.discovery?.order || [])
53
+ const rootPackageName = projects.find((project) => project.path === ".")
54
+ ?.facets.packageJson?.name
55
+
56
+ const workspace: Workspace = {
57
+ name: rootPackageName || basename(rootPath),
58
+ absolutePath: rootPath,
59
+ projects: orderedProjects,
60
+ }
51
61
 
52
- return orderedWorkspaces
62
+ return workspace
53
63
  }
54
64
 
55
65
  /**
@@ -91,7 +101,7 @@ async function determineProjectType(dir: string): Promise<ProjectType> {
91
101
  return "app"
92
102
  }
93
103
 
94
- export function orderWorkspaces(
104
+ export function orderProjects(
95
105
  workspaces: Project[],
96
106
  order: string[],
97
107
  ): Project[] {
@@ -1,7 +1,7 @@
1
1
  import { execFile } from "node:child_process"
2
2
  import { promisify } from "node:util"
3
3
 
4
- import type { ComposeService } from "../../types/project"
4
+ import type { ComposeService } from "../../types/workspace.js"
5
5
  import type { RunState, RuntimeStatus } from "../../types/workspace-runtime"
6
6
  import { logger } from "../../utils/logging/logger.js"
7
7
  import { isPortInUse } from "../../utils/runtime/port.js"
@@ -1,8 +1,8 @@
1
1
  import { execFile } from "node:child_process"
2
2
  import { promisify } from "node:util"
3
3
 
4
- import type { PackageJsonScript } from "../../types/project"
5
- import type { RunState } from "../../types/workspace-runtime"
4
+ import type { PackageJsonScript } from "../../types/workspace.js"
5
+ import type { RunState } from "../../types/workspace-runtime.js"
6
6
 
7
7
  const execFileAsync = promisify(execFile)
8
8
 
@@ -22,7 +22,7 @@ const gridTheme = {
22
22
  color: "white",
23
23
  }),
24
24
  info: (): TextProps => ({
25
- color: "cyan",
25
+ color: "white",
26
26
  }),
27
27
  workspaceName: (): TextProps => ({
28
28
  color: "white",
@@ -2,7 +2,7 @@ import type {
2
2
  ComposeService,
3
3
  MakefileCommand,
4
4
  PackageJsonScript,
5
- } from "./project.js"
5
+ } from "./workspace.js"
6
6
 
7
7
  export type ProjectGridGrid = {
8
8
  packageJsonCells: PackageJsonCell[]
@@ -1,4 +1,4 @@
1
- import type { Project } from "./project.js"
1
+ import type { Project } from "./workspace.js"
2
2
  import type { FacetQuickAction } from "./workspace-quick-actions.js"
3
3
  import type { RunState } from "./workspace-runtime.js"
4
4
 
@@ -23,7 +23,7 @@ export interface WorkspaceCell {
23
23
  type: "workspace"
24
24
  row: number
25
25
  col: number
26
- workspace: Project
26
+ project: Project
27
27
  }
28
28
 
29
29
  export interface WorkspaceQuickActionCell {
@@ -5,9 +5,16 @@ export interface EnvFile {
5
5
  filepath: string // e.g. "/home/user/project-name/.env"
6
6
  }
7
7
 
8
+ export interface Workspace {
9
+ name: string // e.g. "my-monorepo"
10
+ absolutePath: string // e.g. "/home/user/my-monorepo"
11
+ projects: Project[]
12
+ }
13
+
8
14
  export interface Project {
9
- path: string // e.g. "project-name/app"
10
- absolutePath: string // e.g. "/home/user/project-name/"
15
+ name: string // e.g. "myapp"
16
+ path: string // e.g. "project-name/myapp"
17
+ absolutePath: string // e.g. "/home/user/project-name/myapp"
11
18
  type: ProjectType // e.g. "app"
12
19
  folder: string // e.g. "project-name"
13
20
  envFile?: EnvFile
@@ -16,10 +16,10 @@ export function initLogger(config: Config): Logger {
16
16
  const truncateOnStart = loggingConfig.truncateOnStart !== false
17
17
  const logDir = loggingConfig.logDir
18
18
  ? loggingConfig.logDir.replace(/^~/, homedir())
19
- : join(homedir(), ".workspace-cli", "logs")
19
+ : join(homedir(), ".monotui", "logs")
20
20
 
21
21
  if (enableFile) {
22
- const logFilePath = join(logDir, "workspace-cli.log")
22
+ const logFilePath = join(logDir, "monotui.log")
23
23
 
24
24
  // Truncate log file if configured
25
25
  if (truncateOnStart) {