@stechquick/studio-cli 4.0.3-2

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 (569) hide show
  1. package/dist/common/clean/domain/infrastructure/ICloudProviderFileSystem.js +5 -0
  2. package/dist/common/clean/domain/infrastructure/ICloudProviderFileSystem.js.map +1 -0
  3. package/dist/common/clean/domain/infrastructure/ICrypto.js +5 -0
  4. package/dist/common/clean/domain/infrastructure/ICrypto.js.map +1 -0
  5. package/dist/common/clean/domain/infrastructure/ILogger.js +5 -0
  6. package/dist/common/clean/domain/infrastructure/ILogger.js.map +1 -0
  7. package/dist/common/clean/domain/infrastructure/IMime.js +5 -0
  8. package/dist/common/clean/domain/infrastructure/IMime.js.map +1 -0
  9. package/dist/common/clean/domain/useCases/ICloudProvider.js +3 -0
  10. package/dist/common/clean/domain/useCases/ICloudProvider.js.map +1 -0
  11. package/dist/common/clean/domain/useCases/ICloudProviderPublish.js +5 -0
  12. package/dist/common/clean/domain/useCases/ICloudProviderPublish.js.map +1 -0
  13. package/dist/common/everything/accessmanager/types.js +8 -0
  14. package/dist/common/everything/accessmanager/types.js.map +1 -0
  15. package/dist/common/everything/action/types.js +5 -0
  16. package/dist/common/everything/action/types.js.map +1 -0
  17. package/dist/common/everything/befunc/runtimeModels/types.js +5 -0
  18. package/dist/common/everything/befunc/runtimeModels/types.js.map +1 -0
  19. package/dist/common/everything/dataSet/runtimemodels/types.js +5 -0
  20. package/dist/common/everything/dataSet/runtimemodels/types.js.map +1 -0
  21. package/dist/common/everything/dataType/runtimemodels/types.js +35 -0
  22. package/dist/common/everything/dataType/runtimemodels/types.js.map +1 -0
  23. package/dist/common/everything/endpoint/runtimeModels/types.js +5 -0
  24. package/dist/common/everything/endpoint/runtimeModels/types.js.map +1 -0
  25. package/dist/common/everything/enum/runtimeModels/types.js +3 -0
  26. package/dist/common/everything/enum/runtimeModels/types.js.map +1 -0
  27. package/dist/common/everything/flow/runtimeModels/types.js +7 -0
  28. package/dist/common/everything/flow/runtimeModels/types.js.map +1 -0
  29. package/dist/common/everything/restService/runtimeModels/types.js +5 -0
  30. package/dist/common/everything/restService/runtimeModels/types.js.map +1 -0
  31. package/dist/common/everything/sla/runtimemodels/types.js +5 -0
  32. package/dist/common/everything/sla/runtimemodels/types.js.map +1 -0
  33. package/dist/common/everything/soapService/runtimeModels/types.js +6 -0
  34. package/dist/common/everything/soapService/runtimeModels/types.js.map +1 -0
  35. package/dist/common/everything/studio/ui/IStudioUIModelBase.js +3 -0
  36. package/dist/common/everything/studio/ui/IStudioUIModelBase.js.map +1 -0
  37. package/dist/common/everything/studio/ui/IStudioUIObjectBase.js +3 -0
  38. package/dist/common/everything/studio/ui/IStudioUIObjectBase.js.map +1 -0
  39. package/dist/common/everything/workflow/runtimemodels/types.js +90 -0
  40. package/dist/common/everything/workflow/runtimemodels/types.js.map +1 -0
  41. package/dist/common/helpers/objectHelper.js +43 -0
  42. package/dist/common/helpers/objectHelper.js.map +1 -0
  43. package/dist/common/helpers/promiseHelper.js +47 -0
  44. package/dist/common/helpers/promiseHelper.js.map +1 -0
  45. package/dist/common/helpers/typeHelper.js +3 -0
  46. package/dist/common/helpers/typeHelper.js.map +1 -0
  47. package/dist/common/qCloudTemp/announcement.js +3 -0
  48. package/dist/common/qCloudTemp/announcement.js.map +1 -0
  49. package/dist/common/qCloudTemp/application.js +3 -0
  50. package/dist/common/qCloudTemp/application.js.map +1 -0
  51. package/dist/common/qCloudTemp/applicationCopy.js +3 -0
  52. package/dist/common/qCloudTemp/applicationCopy.js.map +1 -0
  53. package/dist/common/qCloudTemp/applicationVersion.js +3 -0
  54. package/dist/common/qCloudTemp/applicationVersion.js.map +1 -0
  55. package/dist/common/qCloudTemp/authentication.js +3 -0
  56. package/dist/common/qCloudTemp/authentication.js.map +1 -0
  57. package/dist/common/qCloudTemp/authorization.js +4 -0
  58. package/dist/common/qCloudTemp/authorization.js.map +1 -0
  59. package/dist/common/qCloudTemp/backoffice.js +3 -0
  60. package/dist/common/qCloudTemp/backoffice.js.map +1 -0
  61. package/dist/common/qCloudTemp/exporter.js +3 -0
  62. package/dist/common/qCloudTemp/exporter.js.map +1 -0
  63. package/dist/common/qCloudTemp/externalToken.js +3 -0
  64. package/dist/common/qCloudTemp/externalToken.js.map +1 -0
  65. package/dist/common/qCloudTemp/feedback.js +3 -0
  66. package/dist/common/qCloudTemp/feedback.js.map +1 -0
  67. package/dist/common/qCloudTemp/invitation.js +3 -0
  68. package/dist/common/qCloudTemp/invitation.js.map +1 -0
  69. package/dist/common/qCloudTemp/membership.js +3 -0
  70. package/dist/common/qCloudTemp/membership.js.map +1 -0
  71. package/dist/common/qCloudTemp/modelDatas.js +3 -0
  72. package/dist/common/qCloudTemp/modelDatas.js.map +1 -0
  73. package/dist/common/qCloudTemp/organizationGroupApplication.js +3 -0
  74. package/dist/common/qCloudTemp/organizationGroupApplication.js.map +1 -0
  75. package/dist/common/qCloudTemp/quickCloud.js +34 -0
  76. package/dist/common/qCloudTemp/quickCloud.js.map +1 -0
  77. package/dist/common/qCloudTemp/storageTypes.js +3 -0
  78. package/dist/common/qCloudTemp/storageTypes.js.map +1 -0
  79. package/dist/common/qCloudTemp/symDtoObjects.js +8 -0
  80. package/dist/common/qCloudTemp/symDtoObjects.js.map +1 -0
  81. package/dist/common/qCloudTemp/tags.js +3 -0
  82. package/dist/common/qCloudTemp/tags.js.map +1 -0
  83. package/dist/common/qCloudTemp/template.js +107 -0
  84. package/dist/common/qCloudTemp/template.js.map +1 -0
  85. package/dist/common/qCloudTemp/userPreference.js +3 -0
  86. package/dist/common/qCloudTemp/userPreference.js.map +1 -0
  87. package/dist/common/qCloudTemp/userRequest.js +8 -0
  88. package/dist/common/qCloudTemp/userRequest.js.map +1 -0
  89. package/dist/common/studioCli/messages.js +14 -0
  90. package/dist/common/studioCli/messages.js.map +1 -0
  91. package/dist/common/studioCli/protocolVersion.js +14 -0
  92. package/dist/common/studioCli/protocolVersion.js.map +1 -0
  93. package/dist/jobs/src/application/shared/fileUrlCreator.js +72 -0
  94. package/dist/jobs/src/application/shared/fileUrlCreator.js.map +1 -0
  95. package/dist/jobs/src/domain/model/IExportJob.js +3 -0
  96. package/dist/jobs/src/domain/model/IExportJob.js.map +1 -0
  97. package/dist/studio-cli/src/.ai-kit/.mcp.json +8 -0
  98. package/dist/studio-cli/src/.ai-kit/AGENTS.md +18 -0
  99. package/dist/studio-cli/src/.ai-kit/AGENT_GUIDE-legacy.md +29 -0
  100. package/dist/studio-cli/src/.ai-kit/AGENT_GUIDE-s.md +30 -0
  101. package/dist/studio-cli/src/.ai-kit/AGENT_GUIDE.md +86 -0
  102. package/dist/studio-cli/src/.ai-kit/CLAUDE.md +12 -0
  103. package/dist/studio-cli/src/.ai-kit/README.md +81 -0
  104. package/dist/studio-cli/src/.ai-kit/agents/qjson-legacy-migrator.md +308 -0
  105. package/dist/studio-cli/src/.ai-kit/agents/quick-events.md +41 -0
  106. package/dist/studio-cli/src/.ai-kit/agents/quick-qjson-author-legacy.md +29 -0
  107. package/dist/studio-cli/src/.ai-kit/agents/quick-qjson-author-s.md +29 -0
  108. package/dist/studio-cli/src/.ai-kit/agents/quick-qjson-author.md +33 -0
  109. package/dist/studio-cli/src/.ai-kit/agents/quick-styling-legacy.md +37 -0
  110. package/dist/studio-cli/src/.ai-kit/agents/quick-styling.md +36 -0
  111. package/dist/studio-cli/src/.ai-kit/examples/README.md +12 -0
  112. package/dist/studio-cli/src/.ai-kit/examples/cssClass/AllowdDates.qjson +122 -0
  113. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Avatarlar.qjson +1084 -0
  114. package/dist/studio-cli/src/.ai-kit/examples/cssClass/BarChart.qjson +1061 -0
  115. package/dist/studio-cli/src/.ai-kit/examples/cssClass/BarChart_Type_Time_Sample.qjson +344 -0
  116. package/dist/studio-cli/src/.ai-kit/examples/cssClass/BottomSheetScrollWithHeaderInformation.qjson +1609 -0
  117. package/dist/studio-cli/src/.ai-kit/examples/cssClass/CardTitle.qjson +143 -0
  118. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Charts_Custom_Legend_Sample.qjson +763 -0
  119. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Charts_tooltipLabel_sample.qjson +631 -0
  120. package/dist/studio-cli/src/.ai-kit/examples/cssClass/CheckBoxQvalue.qjson +91 -0
  121. package/dist/studio-cli/src/.ai-kit/examples/cssClass/CheckboxDisabledExample.qjson +153 -0
  122. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Click Outside.qjson +144 -0
  123. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ComboBoxReset.qjson +839 -0
  124. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ComboboxAddItemWithDialog.qjson +296 -0
  125. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ComboboxAddItemWithTextField.qjson +186 -0
  126. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ComboboxDefaultSelection.qjson +99 -0
  127. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ComboboxWithTreeView.qjson +94 -0
  128. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Combobox_SelectAll.qjson +704 -0
  129. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ComponentsInteractionExamples.qjson +722 -0
  130. package/dist/studio-cli/src/.ai-kit/examples/cssClass/CookieExamples.qjson +828 -0
  131. package/dist/studio-cli/src/.ai-kit/examples/cssClass/CreateComponent_WithTransmitDataSource_Sample.qjson +749 -0
  132. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Cryptography-with-ivKey.qjson +2159 -0
  133. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Dashboard.qjson +1135 -0
  134. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataExamples.qjson +696 -0
  135. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataStorageExamples.qjson +1296 -0
  136. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTable-Single-select-Multi-Select-TotalCalculation.qjson +441 -0
  137. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableAddRemoveItem.qjson +312 -0
  138. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableBoldHeader.qjson +34 -0
  139. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableEdit.qjson +422 -0
  140. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableFixedColumn.qjson +133 -0
  141. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableIndexExample.qjson +117 -0
  142. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableSearch.qjson +105 -0
  143. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableVerticalBorder.qjson +34 -0
  144. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTableWithTooltip.qjson +354 -0
  145. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DataTable_ChildButtonVisibleSample.qjson +892 -0
  146. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DatePickerExampleApp (1).qjson +770 -0
  147. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DatePickerInlineExample.qjson +299 -0
  148. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DatePickerLocale.qjson +87 -0
  149. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DatepickerDatenow.qjson +96 -0
  150. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DatepickerExample.qjson +147 -0
  151. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Detailed_Table_Row_Expand.qjson +388 -0
  152. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Detailed_Table_Rows.qjson +114 -0
  153. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DialogBlockSubPage.qjson +1014 -0
  154. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DialogExample.qjson +420 -0
  155. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DialogExampleWith/304/261con.qjson +345 -0
  156. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DialogWithEagerProp.qjson +129 -0
  157. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DoughnutChart.qjson +1005 -0
  158. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Download.qjson +139 -0
  159. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxColumnChooser.qjson +341 -0
  160. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxColumnFixing.qjson +317 -0
  161. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxColumn_fix_allowFixing.qjson +466 -0
  162. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGrid-DxExport.qjson +225 -0
  163. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGrid-DxFilterRow.qjson +174 -0
  164. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGrid-DxSearchPanel.qjson +170 -0
  165. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGrid-columnAutoWidth.qjson +135 -0
  166. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGridArrStoreLiveCon.qjson +201 -0
  167. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGridArrStoreLiveConReason.qjson +290 -0
  168. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGridExternalFilterCleaning.qjson +358 -0
  169. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGridExternalFiltering.qjson +300 -0
  170. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDataGridRowDragging.qjson +257 -0
  171. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_MultipleSelection.qjson +503 -0
  172. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_ServiceCall.qjson +204 -0
  173. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_SimplestGridWithArrayStore.qjson +215 -0
  174. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_SingleSelection.qjson +337 -0
  175. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_allowFixing.qjson +321 -0
  176. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_columnResizingMode.qjson +718 -0
  177. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_hoverStateEnabled.qjson +144 -0
  178. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_onCellClickEvent.qjson +147 -0
  179. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxDatagrid_width_menu.qjson +574 -0
  180. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxTreeListArrStoreLiveCon.qjson +302 -0
  181. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxTreelist-color.qjson +237 -0
  182. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxTreelist-columnreordering.qjson +241 -0
  183. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxTreelist-editing.qjson +1471 -0
  184. package/dist/studio-cli/src/.ai-kit/examples/cssClass/DxTreelist-extarnelfiltre.qjson +122 -0
  185. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Expansion_Panels.qjson +298 -0
  186. package/dist/studio-cli/src/.ai-kit/examples/cssClass/FileInput.qjson +228 -0
  187. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Frame_openHtmlContentInFrame.qjson +556 -0
  188. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Highlight_datatable_select.qjson +53 -0
  189. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Icon_Samples.qjson +148 -0
  190. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Instructions.request.qjson +605 -0
  191. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Intersect.qjson +423 -0
  192. package/dist/studio-cli/src/.ai-kit/examples/cssClass/LightBox.qjson +809 -0
  193. package/dist/studio-cli/src/.ai-kit/examples/cssClass/LineChart.qjson +1046 -0
  194. package/dist/studio-cli/src/.ai-kit/examples/cssClass/LineChart_Type_Time_Sample.qjson +340 -0
  195. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ListExample.qjson +475 -0
  196. package/dist/studio-cli/src/.ai-kit/examples/cssClass/LoginPage.qjson +525 -0
  197. package/dist/studio-cli/src/.ai-kit/examples/cssClass/MMDelay.qjson +356 -0
  198. package/dist/studio-cli/src/.ai-kit/examples/cssClass/MMtrigger.qjson +195 -0
  199. package/dist/studio-cli/src/.ai-kit/examples/cssClass/NavigationDrawerExample.qjson +808 -0
  200. package/dist/studio-cli/src/.ai-kit/examples/cssClass/NavigationDrawerWithAppBar.qjson +1621 -0
  201. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Parallax.qjson +381 -0
  202. package/dist/studio-cli/src/.ai-kit/examples/cssClass/PermanentStore_Example.qjson +1445 -0
  203. package/dist/studio-cli/src/.ai-kit/examples/cssClass/PieChart.qjson +1005 -0
  204. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Profile_Card.qjson +345 -0
  205. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ProgressLinear.qjson +547 -0
  206. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QCaptcha.qjson +318 -0
  207. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QDocumentViewer.qjson +41 -0
  208. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QFrameAllowFullScreenExample.qjson +368 -0
  209. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QFrameExample.qjson +117 -0
  210. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QIdleTimer.qjson +100 -0
  211. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QImgZoomRotate.qjson +428 -0
  212. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QImgZoomTypeNextTo.qjson +187 -0
  213. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QImgZoomTypeOn.qjson +187 -0
  214. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QLabel_URL.qjson +105 -0
  215. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QLabel_URL_Click.qjson +133 -0
  216. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QLegend.qjson +501 -0
  217. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QLegendBlock.qjson +732 -0
  218. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QLegend_unchanged.qjson +746 -0
  219. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QMapExample.qjson +785 -0
  220. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QMenuExample.qjson +68 -0
  221. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QOtp.qjson +979 -0
  222. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QQRCode.qjson +295 -0
  223. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QReCaptcha.qjson +361 -0
  224. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QRichTextExample.qjson +139 -0
  225. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QRichText_Cursor_Sample.qjson +352 -0
  226. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QTutorialFinalDemo.qjson +494 -0
  227. package/dist/studio-cli/src/.ai-kit/examples/cssClass/QVideoExample.qjson +1135 -0
  228. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Qlabel_Props.qjson +1591 -0
  229. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Qmenu-Icon-Img-SizeandColor.qjson +244 -0
  230. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Quick_Bind.qjson +110 -0
  231. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Quick_Bind_Sample.qjson +172 -0
  232. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Rating.qjson +101 -0
  233. package/dist/studio-cli/src/.ai-kit/examples/cssClass/RenderingComponent_Sample.qjson +1592 -0
  234. package/dist/studio-cli/src/.ai-kit/examples/cssClass/RequestExamples.qjson +680 -0
  235. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ResetValidation-ResetUsage.qjson +1326 -0
  236. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Resize.qjson +140 -0
  237. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Ripple.qjson +431 -0
  238. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Sparkline.qjson +386 -0
  239. package/dist/studio-cli/src/.ai-kit/examples/cssClass/State_storing.qjson +286 -0
  240. package/dist/studio-cli/src/.ai-kit/examples/cssClass/SwitchComponent.qjson +42 -0
  241. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Table_Pagination.qjson +99 -0
  242. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Table_Search.qjson +64 -0
  243. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Table_Select.qjson +106 -0
  244. package/dist/studio-cli/src/.ai-kit/examples/cssClass/ToolTip_props.qjson +2649 -0
  245. package/dist/studio-cli/src/.ai-kit/examples/cssClass/TooltipDisplayOfVDataTableDataTotal.qjson +312 -0
  246. package/dist/studio-cli/src/.ai-kit/examples/cssClass/TreeViewExample.qjson +92 -0
  247. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VAppBar.qjson +1681 -0
  248. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VAutocompleteRegex.qjson +45 -0
  249. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VBottomSheet.qjson +429 -0
  250. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VCard.qjson +1945 -0
  251. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VCombobox_customValidation.qjson +290 -0
  252. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable-slot-columnVeriyeG/303/266reRenklendirme.qjson +493 -0
  253. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTableIconExample.qjson +116 -0
  254. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTableItemAggregation.qjson +499 -0
  255. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_Change_FooterPageText.qjson +107 -0
  256. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_Multiple_Select_Control.qjson +50 -0
  257. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_SetGetComboboxValue_.qjson +148 -0
  258. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_SetItemSelect_GetSelection.qjson +627 -0
  259. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_SlotInstances.qjson +362 -0
  260. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_Validation.qjson +226 -0
  261. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_With_QTableCell_Sample.qjson +281 -0
  262. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_customSearchFilter.qjson +255 -0
  263. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_firstColumn_fixedActionsColumn.qjson +216 -0
  264. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDataTable_uniqueSlot_itemKey_Object.qjson +545 -0
  265. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDatePicker_AllowdDates.qjson +89 -0
  266. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VDialog.qjson +3512 -0
  267. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VExpansionPanel_UsageAndProps.qjson +3811 -0
  268. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VFileInput-Slot-VIcon-Dolu.qjson +232 -0
  269. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VFileInputGetUploadedContent.qjson +111 -0
  270. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VFileInput_ImagePicker.qjson +308 -0
  271. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VFooter.qjson +1480 -0
  272. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VForm.qjson +410 -0
  273. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VFormActionExample.qjson +2289 -0
  274. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VInlineDatePicker_titleDateFormat.qjson +319 -0
  275. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VInlineDatepickerMaxMin.qjson +36 -0
  276. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VInlineDatepickerReset.qjson +88 -0
  277. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VInlineTimePicker.qjson +149 -0
  278. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VListGroup.qjson +1817 -0
  279. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VList_NavigationMenu.qjson +1636 -0
  280. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VMenu_PopoverInTable.qjson +534 -0
  281. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VMenu_sample.qjson +470 -0
  282. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VStepperExample.qjson +748 -0
  283. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VStepper_vertical.qjson +364 -0
  284. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VSteppers_EditableNonLinear.qjson +658 -0
  285. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VSteppers_LinearWithContinueButton.qjson +719 -0
  286. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextFieldQuickInputFormat.qjson +40 -0
  287. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextFieldValidation.qjson +1087 -0
  288. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_FocusExample.qjson +329 -0
  289. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_Validation_examples.qjson +877 -0
  290. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_customValidation.qjson +159 -0
  291. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_formatValueSample1.qjson +40 -0
  292. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_formatValueSapmle2.qjson +40 -0
  293. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_formatValue_exceptLetters.qjson +40 -0
  294. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_formatValue_specialChars.qjson +40 -0
  295. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_keyDown.qjson +37 -0
  296. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextField_rangeOfNumber_validation.qjson +55 -0
  297. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextareaQuickInputFormat.qjson +37 -0
  298. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTextarea_format_regex_sample.qjson +321 -0
  299. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VTimelineExample.qjson +322 -0
  300. package/dist/studio-cli/src/.ai-kit/examples/cssClass/Vcontainer.qjson +417 -0
  301. package/dist/studio-cli/src/.ai-kit/examples/cssClass/VinlineDatePicker.qjson +61 -0
  302. package/dist/studio-cli/src/.ai-kit/examples/cssClass/V/304/261nlineDatepickerDeleteValue.qjson +304 -0
  303. package/dist/studio-cli/src/.ai-kit/examples/cssClass/alert.qjson +459 -0
  304. package/dist/studio-cli/src/.ai-kit/examples/cssClass/alertSamplePage.qjson +455 -0
  305. package/dist/studio-cli/src/.ai-kit/examples/cssClass/authorizationDashboard.qjson +24914 -0
  306. package/dist/studio-cli/src/.ai-kit/examples/cssClass/badge copy.qjson +158 -0
  307. package/dist/studio-cli/src/.ai-kit/examples/cssClass/badge.qjson +158 -0
  308. package/dist/studio-cli/src/.ai-kit/examples/cssClass/bottomSheetScrollable.qjson +3220 -0
  309. package/dist/studio-cli/src/.ai-kit/examples/cssClass/breadcrumbs.qjson +587 -0
  310. package/dist/studio-cli/src/.ai-kit/examples/cssClass/button.qjson +1765 -0
  311. package/dist/studio-cli/src/.ai-kit/examples/cssClass/cellTemplate.qjson +76 -0
  312. package/dist/studio-cli/src/.ai-kit/examples/cssClass/combobox.qjson +90 -0
  313. package/dist/studio-cli/src/.ai-kit/examples/cssClass/comboboxSelected.qjson +118 -0
  314. package/dist/studio-cli/src/.ai-kit/examples/cssClass/createChildren.qjson +406 -0
  315. package/dist/studio-cli/src/.ai-kit/examples/cssClass/createClosedPanes.qjson +245 -0
  316. package/dist/studio-cli/src/.ai-kit/examples/cssClass/creditcard.qjson +28 -0
  317. package/dist/studio-cli/src/.ai-kit/examples/cssClass/crypto.qjson +5965 -0
  318. package/dist/studio-cli/src/.ai-kit/examples/cssClass/customFilterUsingCalculateFilterExpressionEvent.qjson +305 -0
  319. package/dist/studio-cli/src/.ai-kit/examples/cssClass/customStore.qjson +156 -0
  320. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dataTableFormatColumn.qjson +151 -0
  321. package/dist/studio-cli/src/.ai-kit/examples/cssClass/data_table_component_access.qjson +130 -0
  322. package/dist/studio-cli/src/.ai-kit/examples/cssClass/datagridAddDynamicColumn.qjson +1381 -0
  323. package/dist/studio-cli/src/.ai-kit/examples/cssClass/datatableAddandDeleteItem.qjson +1195 -0
  324. package/dist/studio-cli/src/.ai-kit/examples/cssClass/deleteComponent.qjson +533 -0
  325. package/dist/studio-cli/src/.ai-kit/examples/cssClass/divider.qjson +185 -0
  326. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxColumncssClass.qjson +249 -0
  327. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxDataGridAddinEditingDeleting.qjson +486 -0
  328. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxDataGridLines.qjson +120 -0
  329. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxDataGridRemove.qjson +216 -0
  330. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxDatagridHeatMap.qjson +334 -0
  331. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxDatagridUpdate.qjson +80 -0
  332. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxMasterDetail.qjson +261 -0
  333. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxPaging_withServiceCall.qjson +159 -0
  334. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxRowDragging.qjson +179 -0
  335. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxSummary_dxTotalItem_usage.qjson +219 -0
  336. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxTotalItemCustomizeText.qjson +226 -0
  337. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dxTreeList_exportToExcel.qjson +266 -0
  338. package/dist/studio-cli/src/.ai-kit/examples/cssClass/dynamicComp.qjson +162 -0
  339. package/dist/studio-cli/src/.ai-kit/examples/cssClass/efficientTreeviewSearchforLargeDatasets.qjson +736 -0
  340. package/dist/studio-cli/src/.ai-kit/examples/cssClass/email.qjson +29 -0
  341. package/dist/studio-cli/src/.ai-kit/examples/cssClass/encoding.qjson +304 -0
  342. package/dist/studio-cli/src/.ai-kit/examples/cssClass/encryptedStorage_Sample.qjson +596 -0
  343. package/dist/studio-cli/src/.ai-kit/examples/cssClass/fileInput-1.qjson +904 -0
  344. package/dist/studio-cli/src/.ai-kit/examples/cssClass/fileUploadBlockComponent.qjson +68 -0
  345. package/dist/studio-cli/src/.ai-kit/examples/cssClass/fileUploadServiceCallBlockComp.qjson +128 -0
  346. package/dist/studio-cli/src/.ai-kit/examples/cssClass/findAndDeleteRelatedDynamicComp.qjson +211 -0
  347. package/dist/studio-cli/src/.ai-kit/examples/cssClass/first.qjson +57 -0
  348. package/dist/studio-cli/src/.ai-kit/examples/cssClass/fixedActionsColumn.qjson +133 -0
  349. package/dist/studio-cli/src/.ai-kit/examples/cssClass/formatWithFormatType.qjson +1740 -0
  350. package/dist/studio-cli/src/.ai-kit/examples/cssClass/getComponent_example.qjson +491 -0
  351. package/dist/studio-cli/src/.ai-kit/examples/cssClass/globalLocalization.qjson +189 -0
  352. package/dist/studio-cli/src/.ai-kit/examples/cssClass/goldenLayout.qjson +228 -0
  353. package/dist/studio-cli/src/.ai-kit/examples/cssClass/images.qjson +1461 -0
  354. package/dist/studio-cli/src/.ai-kit/examples/cssClass/list.qjson +162 -0
  355. package/dist/studio-cli/src/.ai-kit/examples/cssClass/localization_AddLanguageRTL_Sample.qjson +1192 -0
  356. package/dist/studio-cli/src/.ai-kit/examples/cssClass/newCustomerRegister.qjson +2598 -0
  357. package/dist/studio-cli/src/.ai-kit/examples/cssClass/number.qjson +41 -0
  358. package/dist/studio-cli/src/.ai-kit/examples/cssClass/number_VTextarea.qjson +37 -0
  359. package/dist/studio-cli/src/.ai-kit/examples/cssClass/onlyAlphabetic.qjson +32 -0
  360. package/dist/studio-cli/src/.ai-kit/examples/cssClass/parentPage.qjson +292 -0
  361. package/dist/studio-cli/src/.ai-kit/examples/cssClass/pipeline.qjson +77 -0
  362. package/dist/studio-cli/src/.ai-kit/examples/cssClass/pipelineSample.qjson +422 -0
  363. package/dist/studio-cli/src/.ai-kit/examples/cssClass/placeQidDynamic.qjson +193 -0
  364. package/dist/studio-cli/src/.ai-kit/examples/cssClass/progress-circular.qjson +1056 -0
  365. package/dist/studio-cli/src/.ai-kit/examples/cssClass/qtimer.qjson +335 -0
  366. package/dist/studio-cli/src/.ai-kit/examples/cssClass/radioGroupGetValues.qjson +125 -0
  367. package/dist/studio-cli/src/.ai-kit/examples/cssClass/region_definition_example.qjson +580 -0
  368. package/dist/studio-cli/src/.ai-kit/examples/cssClass/resetAndResetValidationUsage.qjson +1827 -0
  369. package/dist/studio-cli/src/.ai-kit/examples/cssClass/responsive1.qjson +312 -0
  370. package/dist/studio-cli/src/.ai-kit/examples/cssClass/responsive2.qjson +312 -0
  371. package/dist/studio-cli/src/.ai-kit/examples/cssClass/responsive3.qjson +1546 -0
  372. package/dist/studio-cli/src/.ai-kit/examples/cssClass/scrollButton.qjson +331 -0
  373. package/dist/studio-cli/src/.ai-kit/examples/cssClass/scrollDirective.qjson +297 -0
  374. package/dist/studio-cli/src/.ai-kit/examples/cssClass/selectedRow-propertyDisable.qjson +238 -0
  375. package/dist/studio-cli/src/.ai-kit/examples/cssClass/serviceCallerBlockComponent.qjson +63 -0
  376. package/dist/studio-cli/src/.ai-kit/examples/cssClass/sheet.qjson +149 -0
  377. package/dist/studio-cli/src/.ai-kit/examples/cssClass/slider.qjson +81 -0
  378. package/dist/studio-cli/src/.ai-kit/examples/cssClass/snackbars.qjson +2454 -0
  379. package/dist/studio-cli/src/.ai-kit/examples/cssClass/sso.qjson +260 -0
  380. package/dist/studio-cli/src/.ai-kit/examples/cssClass/subPage.qjson +710 -0
  381. package/dist/studio-cli/src/.ai-kit/examples/cssClass/tab.qjson +271 -0
  382. package/dist/studio-cli/src/.ai-kit/examples/cssClass/tableadditem.qjson +125 -0
  383. package/dist/studio-cli/src/.ai-kit/examples/cssClass/themeExamplePage.qjson +876 -0
  384. package/dist/studio-cli/src/.ai-kit/examples/cssClass/tiffImage.qjson +315 -0
  385. package/dist/studio-cli/src/.ai-kit/examples/cssClass/timePicker.qjson +452 -0
  386. package/dist/studio-cli/src/.ai-kit/examples/cssClass/treeview.qjson +156 -0
  387. package/dist/studio-cli/src/.ai-kit/examples/cssClass/treeview2.qjson +503 -0
  388. package/dist/studio-cli/src/.ai-kit/examples/cssClass/uniqueRowSlots.qjson +226 -0
  389. package/dist/studio-cli/src/.ai-kit/examples/cssClass/vMenu.qjson +212 -0
  390. package/dist/studio-cli/src/.ai-kit/examples/cssClass/vcarousel.qjson +659 -0
  391. package/dist/studio-cli/src/.ai-kit/examples/cssClass/vdatatable_slots_with_custom_validation_usage.qjson +1585 -0
  392. package/dist/studio-cli/src/.ai-kit/examples/style/AllowdDates.qjson +126 -0
  393. package/dist/studio-cli/src/.ai-kit/examples/style/BarChartEvents.qjson +323 -0
  394. package/dist/studio-cli/src/.ai-kit/examples/style/BarChartTitle.qjson +411 -0
  395. package/dist/studio-cli/src/.ai-kit/examples/style/BarChartYTicks.qjson +399 -0
  396. package/dist/studio-cli/src/.ai-kit/examples/style/BarChart_TicksCallback.qjson +309 -0
  397. package/dist/studio-cli/src/.ai-kit/examples/style/CalendarClickMoreExample.qjson +2 -0
  398. package/dist/studio-cli/src/.ai-kit/examples/style/CalendarUsageExample.qjson +2 -0
  399. package/dist/studio-cli/src/.ai-kit/examples/style/ChartLegendFont.qjson +788 -0
  400. package/dist/studio-cli/src/.ai-kit/examples/style/DataTable_customSort.qjson +277 -0
  401. package/dist/studio-cli/src/.ai-kit/examples/style/DocumentViewer_tiff_Sample.qjson +927 -0
  402. package/dist/studio-cli/src/.ai-kit/examples/style/DoughnutChartEvents.qjson +243 -0
  403. package/dist/studio-cli/src/.ai-kit/examples/style/DxDataGrid_CustomStore.qjson +267 -0
  404. package/dist/studio-cli/src/.ai-kit/examples/style/Icon_Samples.qjson +181 -0
  405. package/dist/studio-cli/src/.ai-kit/examples/style/Instructions.request.qjson +584 -0
  406. package/dist/studio-cli/src/.ai-kit/examples/style/Intersect.qjson +404 -0
  407. package/dist/studio-cli/src/.ai-kit/examples/style/LightBox.qjson +777 -0
  408. package/dist/studio-cli/src/.ai-kit/examples/style/LineChart.qjson +1049 -0
  409. package/dist/studio-cli/src/.ai-kit/examples/style/LineChartEvents.qjson +327 -0
  410. package/dist/studio-cli/src/.ai-kit/examples/style/LineChartPointProps.qjson +416 -0
  411. package/dist/studio-cli/src/.ai-kit/examples/style/LineChart_TicksCallback.qjson +309 -0
  412. package/dist/studio-cli/src/.ai-kit/examples/style/LineChart_Type_Time_Sample.qjson +342 -0
  413. package/dist/studio-cli/src/.ai-kit/examples/style/MMDelay.qjson +384 -0
  414. package/dist/studio-cli/src/.ai-kit/examples/style/MMtrigger.qjson +209 -0
  415. package/dist/studio-cli/src/.ai-kit/examples/style/NavigationDrawerExample.qjson +899 -0
  416. package/dist/studio-cli/src/.ai-kit/examples/style/NavigationDrawerWithAppBar.qjson +1647 -0
  417. package/dist/studio-cli/src/.ai-kit/examples/style/Parallax.qjson +416 -0
  418. package/dist/studio-cli/src/.ai-kit/examples/style/PieChart.qjson +1103 -0
  419. package/dist/studio-cli/src/.ai-kit/examples/style/QCaptcha.qjson +409 -0
  420. package/dist/studio-cli/src/.ai-kit/examples/style/QDocumentViewer.qjson +149 -0
  421. package/dist/studio-cli/src/.ai-kit/examples/style/QFrameAllowFullScreenExample.qjson +360 -0
  422. package/dist/studio-cli/src/.ai-kit/examples/style/QFrameExample.qjson +213 -0
  423. package/dist/studio-cli/src/.ai-kit/examples/style/QIdleTimer.qjson +221 -0
  424. package/dist/studio-cli/src/.ai-kit/examples/style/QImgZoomRotate.qjson +432 -0
  425. package/dist/studio-cli/src/.ai-kit/examples/style/QImgZoomTypeNextTo.qjson +196 -0
  426. package/dist/studio-cli/src/.ai-kit/examples/style/QImgZoomTypeOn.qjson +196 -0
  427. package/dist/studio-cli/src/.ai-kit/examples/style/QLabel_URL_Click_SendParams.qjson +477 -0
  428. package/dist/studio-cli/src/.ai-kit/examples/style/VList_NavMenu.qjson +3008 -0
  429. package/dist/studio-cli/src/.ai-kit/examples/style/alertSamplePage.qjson +450 -0
  430. package/dist/studio-cli/src/.ai-kit/examples/style/authorizationDashboard.qjson +24914 -0
  431. package/dist/studio-cli/src/.ai-kit/examples/style/badge.qjson +151 -0
  432. package/dist/studio-cli/src/.ai-kit/examples/style/bottomSheetScrollable.qjson +3120 -0
  433. package/dist/studio-cli/src/.ai-kit/examples/style/breadcrumbs.qjson +563 -0
  434. package/dist/studio-cli/src/.ai-kit/examples/style/button.qjson +1658 -0
  435. package/dist/studio-cli/src/.ai-kit/examples/style/cellTemplate.qjson +96 -0
  436. package/dist/studio-cli/src/.ai-kit/examples/style/combobox.qjson +109 -0
  437. package/dist/studio-cli/src/.ai-kit/examples/style/comboboxSelected.qjson +119 -0
  438. package/dist/studio-cli/src/.ai-kit/examples/style/createChildren.qjson +411 -0
  439. package/dist/studio-cli/src/.ai-kit/examples/style/createClosedPanes.qjson +265 -0
  440. package/dist/studio-cli/src/.ai-kit/examples/style/creditcard.qjson +49 -0
  441. package/dist/studio-cli/src/.ai-kit/examples/style/crypto.qjson +5632 -0
  442. package/dist/studio-cli/src/.ai-kit/examples/style/customFilterUsingCalculateFilterExpressionEvent.qjson +301 -0
  443. package/dist/studio-cli/src/.ai-kit/examples/style/customStore.qjson +157 -0
  444. package/dist/studio-cli/src/.ai-kit/examples/style/dataTableFormatColumn.qjson +151 -0
  445. package/dist/studio-cli/src/.ai-kit/examples/style/data_table_component_access.qjson +130 -0
  446. package/dist/studio-cli/src/.ai-kit/examples/style/datagridAddDynamicColumn.qjson +1381 -0
  447. package/dist/studio-cli/src/.ai-kit/examples/style/datatableAddandDeleteItem.qjson +1195 -0
  448. package/dist/studio-cli/src/.ai-kit/examples/style/datatable_selectable_feature_select_unselect_usage.qjson +300 -0
  449. package/dist/studio-cli/src/.ai-kit/examples/style/deleteComponent.qjson +501 -0
  450. package/dist/studio-cli/src/.ai-kit/examples/style/divider.qjson +180 -0
  451. package/dist/studio-cli/src/.ai-kit/examples/style/dxColumncssClass.qjson +249 -0
  452. package/dist/studio-cli/src/.ai-kit/examples/style/dxDataGridAddinEditingDeleting.qjson +486 -0
  453. package/dist/studio-cli/src/.ai-kit/examples/style/dxDataGridLines.qjson +121 -0
  454. package/dist/studio-cli/src/.ai-kit/examples/style/dxDataGridRemove.qjson +209 -0
  455. package/dist/studio-cli/src/.ai-kit/examples/style/dxDatagridHeatMap.qjson +335 -0
  456. package/dist/studio-cli/src/.ai-kit/examples/style/dxDatagridUpdate.qjson +80 -0
  457. package/dist/studio-cli/src/.ai-kit/examples/style/dxMasterDetail.qjson +257 -0
  458. package/dist/studio-cli/src/.ai-kit/examples/style/dxPaging_withServiceCall.qjson +160 -0
  459. package/dist/studio-cli/src/.ai-kit/examples/style/dxRowDragging.qjson +175 -0
  460. package/dist/studio-cli/src/.ai-kit/examples/style/dxSummary_dxTotalItem_usage.qjson +215 -0
  461. package/dist/studio-cli/src/.ai-kit/examples/style/dxTotalItemCustomizeText.qjson +222 -0
  462. package/dist/studio-cli/src/.ai-kit/examples/style/dxTreeList_exportToExcel.qjson +267 -0
  463. package/dist/studio-cli/src/.ai-kit/examples/style/dynamicComp.qjson +156 -0
  464. package/dist/studio-cli/src/.ai-kit/examples/style/efficientTreeviewSearchforLargeDatasets.qjson +736 -0
  465. package/dist/studio-cli/src/.ai-kit/examples/style/email.qjson +177 -0
  466. package/dist/studio-cli/src/.ai-kit/examples/style/encoding.qjson +304 -0
  467. package/dist/studio-cli/src/.ai-kit/examples/style/encryptedStorage_Sample.qjson +596 -0
  468. package/dist/studio-cli/src/.ai-kit/examples/style/exportToXlsx_Sample.qjson +1956 -0
  469. package/dist/studio-cli/src/.ai-kit/examples/style/images.qjson +1379 -0
  470. package/dist/studio-cli/src/.ai-kit/examples/style/images_olddd.qjson +1366 -0
  471. package/dist/studio-cli/src/.ai-kit/examples/style/newCustomerRegister.qjson +2598 -0
  472. package/dist/studio-cli/src/.ai-kit/examples/style/number.qjson +169 -0
  473. package/dist/studio-cli/src/.ai-kit/examples/style/number_VTextarea.qjson +163 -0
  474. package/dist/studio-cli/src/.ai-kit/examples/style/onlyAlphabetic.qjson +164 -0
  475. package/dist/studio-cli/src/.ai-kit/examples/style/parentPage.qjson +351 -0
  476. package/dist/studio-cli/src/.ai-kit/examples/style/pipeline.qjson +78 -0
  477. package/dist/studio-cli/src/.ai-kit/examples/style/pipelineSample.qjson +410 -0
  478. package/dist/studio-cli/src/.ai-kit/examples/style/placeQidDynamic.qjson +289 -0
  479. package/dist/studio-cli/src/.ai-kit/examples/style/progress-circular.qjson +1014 -0
  480. package/dist/studio-cli/src/.ai-kit/examples/style/samplePageLottie.qjson +696 -0
  481. package/dist/studio-cli/src/.ai-kit/examples/style/server-SideAutocompleteHandling.qjson +696 -0
  482. package/dist/studio-cli/src/.ai-kit/examples/style/xlsxToJson_Sample.qjson +772 -0
  483. package/dist/studio-cli/src/.ai-kit/knowledge/00-qjson-structure-legacy.md +65 -0
  484. package/dist/studio-cli/src/.ai-kit/knowledge/00-qjson-structure.md +67 -0
  485. package/dist/studio-cli/src/.ai-kit/knowledge/01-properties.md +77 -0
  486. package/dist/studio-cli/src/.ai-kit/knowledge/02-events-and-scripting.md +79 -0
  487. package/dist/studio-cli/src/.ai-kit/knowledge/03-layout-and-slots-legacy.md +72 -0
  488. package/dist/studio-cli/src/.ai-kit/knowledge/03-layout-and-slots.md +64 -0
  489. package/dist/studio-cli/src/.ai-kit/knowledge/04-styling-legacy.md +73 -0
  490. package/dist/studio-cli/src/.ai-kit/knowledge/04-styling.md +177 -0
  491. package/dist/studio-cli/src/.ai-kit/knowledge/05-components.md +97 -0
  492. package/dist/studio-cli/src/.ai-kit/knowledge/06-services.md +68 -0
  493. package/dist/studio-cli/src/.ai-kit/knowledge/07-localization.md +40 -0
  494. package/dist/studio-cli/src/.ai-kit/knowledge/08-dynamic-components.md +49 -0
  495. package/dist/studio-cli/src/.ai-kit/knowledge/09-page-skeletons-legacy.md +83 -0
  496. package/dist/studio-cli/src/.ai-kit/knowledge/09-page-skeletons.md +87 -0
  497. package/dist/studio-cli/src/.ai-kit/knowledge/10-validation-and-sync-legacy.md +69 -0
  498. package/dist/studio-cli/src/.ai-kit/knowledge/10-validation-and-sync.md +78 -0
  499. package/dist/studio-cli/src/.ai-kit/knowledge/11-cli-bridge.md +97 -0
  500. package/dist/studio-cli/src/.ai-kit/knowledge/12-render-check.md +45 -0
  501. package/dist/studio-cli/src/.ai-kit/opencode.jsonc +95 -0
  502. package/dist/studio-cli/src/.ai-kit/reference/component-catalog-legacy.md +120 -0
  503. package/dist/studio-cli/src/.ai-kit/reference/component-catalog.md +135 -0
  504. package/dist/studio-cli/src/.ai-kit/reference/component-contracts.json +14964 -0
  505. package/dist/studio-cli/src/.ai-kit/reference/component-index.json +114 -0
  506. package/dist/studio-cli/src/.ai-kit/reference/component-styles.json +6983 -0
  507. package/dist/studio-cli/src/.ai-kit/reference/events-system.md +98 -0
  508. package/dist/studio-cli/src/.ai-kit/reference/layout-system.md +99 -0
  509. package/dist/studio-cli/src/.ai-kit/reference/mapping-S-vuetify-class.md +103 -0
  510. package/dist/studio-cli/src/.ai-kit/reference/qjson-schema-legacy.md +189 -0
  511. package/dist/studio-cli/src/.ai-kit/reference/qjson-schema.md +188 -0
  512. package/dist/studio-cli/src/.ai-kit/reference/quick-api.md +248 -0
  513. package/dist/studio-cli/src/.ai-kit/reference/styling-system.md +193 -0
  514. package/dist/studio-cli/src/.ai-kit/skills/figma-to-qjson/SKILL.md +116 -0
  515. package/dist/studio-cli/src/.ai-kit/skills/quick-qjson/SKILL.md +36 -0
  516. package/dist/studio-cli/src/.ai-kit/tools/README.md +42 -0
  517. package/dist/studio-cli/src/control/controlClient.js +119 -0
  518. package/dist/studio-cli/src/control/controlClient.js.map +1 -0
  519. package/dist/studio-cli/src/control/convertToBlock.js +70 -0
  520. package/dist/studio-cli/src/control/convertToBlock.js.map +1 -0
  521. package/dist/studio-cli/src/control/pickWorkspaceDir.js +105 -0
  522. package/dist/studio-cli/src/control/pickWorkspaceDir.js.map +1 -0
  523. package/dist/studio-cli/src/control/protocolHandler.js +60 -0
  524. package/dist/studio-cli/src/control/protocolHandler.js.map +1 -0
  525. package/dist/studio-cli/src/control/pull.js +135 -0
  526. package/dist/studio-cli/src/control/pull.js.map +1 -0
  527. package/dist/studio-cli/src/control/push.js +113 -0
  528. package/dist/studio-cli/src/control/push.js.map +1 -0
  529. package/dist/studio-cli/src/control/registerProtocol.js +251 -0
  530. package/dist/studio-cli/src/control/registerProtocol.js.map +1 -0
  531. package/dist/studio-cli/src/control/startWorking.js +70 -0
  532. package/dist/studio-cli/src/control/startWorking.js.map +1 -0
  533. package/dist/studio-cli/src/control/workspaceSetup.js +66 -0
  534. package/dist/studio-cli/src/control/workspaceSetup.js.map +1 -0
  535. package/dist/studio-cli/src/index.js +193 -0
  536. package/dist/studio-cli/src/index.js.map +1 -0
  537. package/dist/studio-cli/src/isolatedCommands/figmaPull.js +207 -0
  538. package/dist/studio-cli/src/isolatedCommands/figmaPull.js.map +1 -0
  539. package/dist/studio-cli/src/isolatedCommands/qjsonBuild.js +26 -0
  540. package/dist/studio-cli/src/isolatedCommands/qjsonBuild.js.map +1 -0
  541. package/dist/studio-cli/src/isolatedCommands/validateQjson.js +560 -0
  542. package/dist/studio-cli/src/isolatedCommands/validateQjson.js.map +1 -0
  543. package/dist/studio-cli/src/isolatedCommands/validateStyles.js +672 -0
  544. package/dist/studio-cli/src/isolatedCommands/validateStyles.js.map +1 -0
  545. package/dist/studio-cli/src/server/bridgeServer.js +817 -0
  546. package/dist/studio-cli/src/server/bridgeServer.js.map +1 -0
  547. package/dist/studio-cli/src/server/peer.js +119 -0
  548. package/dist/studio-cli/src/server/peer.js.map +1 -0
  549. package/dist/studio-cli/src/server/serverInfo.js +59 -0
  550. package/dist/studio-cli/src/server/serverInfo.js.map +1 -0
  551. package/dist/studio-cli/src/server/wsRaw.js +252 -0
  552. package/dist/studio-cli/src/server/wsRaw.js.map +1 -0
  553. package/dist/studio-cli/src/util/frontmatter.js +71 -0
  554. package/dist/studio-cli/src/util/frontmatter.js.map +1 -0
  555. package/dist/studio-cli/src/util/logger.js +28 -0
  556. package/dist/studio-cli/src/util/logger.js.map +1 -0
  557. package/dist/studio-cli/src/util/modelRef.js +38 -0
  558. package/dist/studio-cli/src/util/modelRef.js.map +1 -0
  559. package/dist/studio-cli/src/util/state.js +36 -0
  560. package/dist/studio-cli/src/util/state.js.map +1 -0
  561. package/dist/studio-cli/src/version.js +6 -0
  562. package/dist/studio-cli/src/version.js.map +1 -0
  563. package/dist/ui/src/common/promiseHelper.js +6 -0
  564. package/dist/ui/src/common/promiseHelper.js.map +1 -0
  565. package/dist/ui/src/domain/model/IObject.js +3 -0
  566. package/dist/ui/src/domain/model/IObject.js.map +1 -0
  567. package/dist/ui/src/domain/model/models.js +163 -0
  568. package/dist/ui/src/domain/model/models.js.map +1 -0
  569. package/package.json +32 -0
@@ -0,0 +1,817 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BridgeServer = void 0;
4
+ const promises_1 = require("node:fs/promises");
5
+ const node_path_1 = require("node:path");
6
+ const wsRaw_1 = require("./wsRaw");
7
+ const peer_1 = require("./peer");
8
+ const serverInfo_1 = require("./serverInfo");
9
+ const logger_1 = require("../util/logger");
10
+ const pull_1 = require("../control/pull");
11
+ const push_1 = require("../control/push");
12
+ const state_1 = require("../util/state");
13
+ const frontmatter_1 = require("../util/frontmatter");
14
+ const modelRef_1 = require("../util/modelRef");
15
+ const version_1 = require("../version");
16
+ const protocolVersion_1 = require("../../../common/studioCli/protocolVersion");
17
+ const PING_INTERVAL_MS = 20000;
18
+ const PORT_RANGE_END = 7350;
19
+ /**
20
+ * Lokal WebSocket server (santral). Tek bridge client (browser) + ileride kısa-ömürlü
21
+ * control client'lar. Port-range keşfi + `.studio/server.json` claim + tipli dispatch.
22
+ */
23
+ class BridgeServer {
24
+ wss;
25
+ bridgeClient;
26
+ // AI test tarayıcısı (?cliRole=test) — SINK: event göndermez, yalnız syncModels alır.
27
+ testClient;
28
+ // Bu oturumda push'lanan gövdeler (id → item, push'lar arası merge). Test client sonradan
29
+ // bağlanınca / F5'te replay edilir — sync, bağlanma sırasından bağımsız çalışır.
30
+ lastSync = new Map();
31
+ // GET /render hedefi — primary hello'dan gelir, YALNIZ BELLEKTE tutulur (server.json'a yazılmaz:
32
+ // workspace dosyaları agent'a/git'e açıktır, oturum bilgisi diske inmez).
33
+ renderTarget;
34
+ claimedAppId;
35
+ pingTimer;
36
+ _pushInProgress = false;
37
+ // Push'un checkout ettiği (yeni yaratılan) model id'leri. studio.checkout → checkoutChangedHook
38
+ // echo'su reply'dan SONRA da gelebildiği için (_pushInProgress yetmez); bu id'lerin checkoutChanged'i
39
+ // id bazında, consume-once bastırılır → zamanlamadan bağımsız, manuel checkout'lar etkilenmez.
40
+ _expectedCheckoutEchoes = new Set();
41
+ _deferredModelCreated = [];
42
+ _deferredModelChanged = [];
43
+ host;
44
+ startPort;
45
+ port = 0; // gerçekte bağlanan port (start() doldurur)
46
+ rootDir;
47
+ constructor(options) {
48
+ this.host = options.host ?? "127.0.0.1";
49
+ this.startPort = options.port;
50
+ this.rootDir = options.rootDir;
51
+ }
52
+ async start() {
53
+ // Önceki (çökmüş) server'dan kalma claim'i temizle — bu fresh bir server.
54
+ //TODO: bunu burada yapmanin yan etkilerini dusun.
55
+ (0, serverInfo_1.removeServerInfoSync)(this.rootDir);
56
+ await this.bind();
57
+ logger_1.logger.info(`bridge listening on ws://${this.host}:${this.port}`);
58
+ logger_1.logger.info("waiting for Studio web to connect…");
59
+ }
60
+ close() {
61
+ this.stopPing();
62
+ this.bridgeClient?.close(1001, "cli shutting down");
63
+ this.testClient?.close(1001, "cli shutting down");
64
+ this.wss?.close();
65
+ (0, serverInfo_1.removeServerInfoSync)(this.rootDir);
66
+ }
67
+ /** İlk boş portu bind et (startPort … PORT_RANGE_END). Hepsi doluysa hata. */
68
+ async bind() {
69
+ const end = Math.max(this.startPort, PORT_RANGE_END);
70
+ for (let p = this.startPort; p <= end; p++) {
71
+ const wss = new wsRaw_1.RawWebSocketServer({ host: this.host, port: p });
72
+ wss.onConnection((conn) => this.onConnection(conn));
73
+ wss.onRequest((req, res) => this.routeRequest(req, res));
74
+ try {
75
+ await wss.listen();
76
+ this.wss = wss;
77
+ this.port = p;
78
+ return;
79
+ }
80
+ catch (err) {
81
+ wss.close();
82
+ if (err.code === "EADDRINUSE") {
83
+ logger_1.logger.debug(`port ${p} in use — trying next`);
84
+ continue;
85
+ }
86
+ throw err;
87
+ }
88
+ }
89
+ throw new Error(`no free port in ${this.startPort}-${end}`);
90
+ }
91
+ // --- bağlantı yaşam döngüsü ---
92
+ onConnection(conn) {
93
+ const peer = new peer_1.Peer(conn);
94
+ peer.onEnvelope((env) => this.dispatch(peer, env));
95
+ peer.onClose(() => this.onPeerClose(peer));
96
+ logger_1.logger.debug("peer connected");
97
+ }
98
+ onPeerClose(peer) {
99
+ if (peer === this.bridgeClient) {
100
+ // F5/sayfa kapanması: client gider ama claim + server.json KALIR (reconnect için).
101
+ this.bridgeClient = undefined;
102
+ logger_1.logger.info("bridge client disconnected (claim kept for reconnect)");
103
+ }
104
+ else if (peer === this.testClient) {
105
+ this.testClient = undefined;
106
+ logger_1.logger.info("test client disconnected");
107
+ }
108
+ if (!this.bridgeClient && !this.testClient)
109
+ this.stopPing();
110
+ }
111
+ // --- dispatch ---
112
+ dispatch(peer, env) {
113
+ switch (env.type) {
114
+ case "whoAreYou":
115
+ /** Probe — yan etki YOK; mevcut durumu + protokol/sürümü bildirir (claim etmez).
116
+ * Uyumluluk kontrolü UI'da bu cevaba göre yapılır (bkz. docs/PROTOCOL-VERSION-CHECK.md). */
117
+ peer.reply(env, "whoAreYouResult", { hasClient: this.bridgeClient?.isOpen ?? false, hasTestClient: this.testClient?.isOpen ?? false, appId: this.claimedAppId ?? null, protocol: protocolVersion_1.GENERATION, cliVersion: version_1.VERSION });
118
+ return;
119
+ case "hello":
120
+ this.onHello(peer, env);
121
+ return;
122
+ case "ping":
123
+ peer.reply(env, "pong", {});
124
+ return;
125
+ case "pong":
126
+ return;
127
+ case "bye":
128
+ // Yalnız PRIMARY'nin bye'ı server'ı kapatır; test client'ın gidişi slotu boşaltır.
129
+ if (peer === this.testClient) {
130
+ logger_1.logger.info(`test client said bye (${env.payload.reason})`);
131
+ this.testClient = undefined;
132
+ peer.close(1000, "test client left");
133
+ if (!this.bridgeClient)
134
+ this.stopPing();
135
+ return;
136
+ }
137
+ if (peer !== this.bridgeClient) {
138
+ peer.close(1000, "bye");
139
+ return;
140
+ }
141
+ logger_1.logger.info(`client said bye (${env.payload.reason}) — shutting down`);
142
+ this.close();
143
+ process.exit(0);
144
+ case "modelChanged":
145
+ if (!this.isPrimary(peer))
146
+ return;
147
+ void this.handleModelChanged(env.payload);
148
+ return;
149
+ case "modelCreated":
150
+ if (!this.isPrimary(peer))
151
+ return;
152
+ void this.handleModelCreated(env.payload);
153
+ return;
154
+ case "checkoutChanged":
155
+ if (!this.isPrimary(peer))
156
+ return;
157
+ void this.handleCheckoutChanged(env.payload);
158
+ return;
159
+ case "modelDeleted":
160
+ if (!this.isPrimary(peer))
161
+ return;
162
+ void this.handleModelDeleted(env.payload);
163
+ return;
164
+ default:
165
+ logger_1.logger.warn(`unhandled message type: ${env.type}`);
166
+ }
167
+ }
168
+ /** Dosya yazan event'ler yalnız primary'den kabul edilir (test SINK'tir; web tarafı zaten
169
+ * göndermez — bu ikinci emniyet). */
170
+ isPrimary(peer) {
171
+ if (peer === this.bridgeClient)
172
+ return true;
173
+ logger_1.logger.debug("ignoring file-writing event from non-primary peer");
174
+ return false;
175
+ }
176
+ onHello(peer, env) {
177
+ const p = env.payload;
178
+ // Protokol uyumluluğu UI tarafında whoAreYou probe'unda çözülür; hello'ya gelindiyse taraflar
179
+ // zaten uyumludur (bkz. docs/PROTOCOL-VERSION-CHECK.md). Burada protokol kontrolü YOK.
180
+ if (p.role === "test") {
181
+ this.onHelloTest(peer, env);
182
+ return;
183
+ }
184
+ // Zaten canlı bir bridge client varsa (başka tab) → meşgul.
185
+ if (this.bridgeClient?.isOpen && this.bridgeClient !== peer) {
186
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION }, { message: "bridge already in use", title: "Bridge busy" });
187
+ logger_1.logger.warn(`hello rejected — bridge already in use (app ${this.claimedAppId})`);
188
+ peer.close(1013, "bridge already in use");
189
+ return;
190
+ }
191
+ // Claim'li ve farklı app → bu server başka workspace'e ait.
192
+ if (this.claimedAppId !== undefined && this.claimedAppId !== p.appId) {
193
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION }, { message: `server claimed by another app (${this.claimedAppId})`, title: "Wrong workspace" });
194
+ logger_1.logger.warn(`hello rejected — claimed by ${this.claimedAppId}, got ${p.appId}`);
195
+ peer.close(1008, "wrong workspace");
196
+ return;
197
+ }
198
+ const fresh = this.claimedAppId === undefined;
199
+ this.claimedAppId = p.appId;
200
+ this.bridgeClient = peer;
201
+ // Her primary hello'da tazele (reconnect'te origin/org değişmiş olabilir).
202
+ this.renderTarget = (p.organizationId && p.origin) ? { organizationId: p.organizationId, origin: p.origin } : undefined;
203
+ // Teşhis: /render'ın çalışıp çalışmayacağı bağlantı anında görünsün (eski UI build'i org/origin göndermez).
204
+ if (this.renderTarget)
205
+ logger_1.logger.info(`render check ready — ${this.renderTarget.origin}/studio/${this.renderTarget.organizationId}/${p.appId}`);
206
+ else
207
+ logger_1.logger.warn("render check unavailable — Studio did not send organizationId/origin (old UI build?)");
208
+ if (fresh) {
209
+ void this.claim(p.appId);
210
+ logger_1.logger.info(`hello — claimed app "${p.appName}" (${p.appId})`);
211
+ }
212
+ else {
213
+ logger_1.logger.info(`hello — reconnect to app "${p.appName}" (${p.appId})`);
214
+ }
215
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION });
216
+ this.startPing();
217
+ }
218
+ /** Test rolü hello'su. Test client claim ETMEZ, server.json'a dokunmaz; yalnız mevcut claim'e
219
+ * eklemlenir. Canlı primary ŞART DEĞİL — claim primary F5'inde de kalır (onPeerClose) ve
220
+ * primary'siz test client zararsızdır (control komutları zaten 409 döner). */
221
+ onHelloTest(peer, env) {
222
+ const p = env.payload;
223
+ if (this.claimedAppId === undefined) {
224
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION }, { message: "no primary claim yet — connect the main Studio tab first", title: "No primary" });
225
+ logger_1.logger.warn("test hello rejected — no primary claim yet");
226
+ peer.close(1013, "no primary claim");
227
+ return;
228
+ }
229
+ if (this.claimedAppId !== p.appId) {
230
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION }, { message: `server claimed by another app (${this.claimedAppId})`, title: "Wrong workspace" });
231
+ logger_1.logger.warn(`test hello rejected — claimed by ${this.claimedAppId}, got ${p.appId}`);
232
+ peer.close(1008, "wrong workspace");
233
+ return;
234
+ }
235
+ if (this.testClient?.isOpen && this.testClient !== peer) {
236
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION }, { message: "test slot already in use", title: "Test slot busy" });
237
+ logger_1.logger.warn("test hello rejected — test slot already in use");
238
+ peer.close(1013, "test slot busy");
239
+ return;
240
+ }
241
+ this.testClient = peer;
242
+ logger_1.logger.info(`hello — test client joined app "${p.appName}" (${p.appId})`);
243
+ peer.reply(env, "helloAck", { cliVersion: version_1.VERSION });
244
+ this.startPing();
245
+ // Test client push'lardan SONRA bağlanmış/F5 atmış olabilir → oturumun birikmiş gövdelerini gönder.
246
+ if (this.lastSync.size > 0)
247
+ void this.sendSyncModels("replay");
248
+ }
249
+ async claim(appId) {
250
+ try {
251
+ await (0, serverInfo_1.writeServerInfo)(this.rootDir, {
252
+ port: this.port,
253
+ pid: process.pid,
254
+ startedAt: new Date().toISOString(),
255
+ appId,
256
+ });
257
+ }
258
+ catch (err) {
259
+ logger_1.logger.error(`failed to write server.json: ${err.message}`);
260
+ }
261
+ }
262
+ // --- control kanalı (HTTP /control/<cmd>) — santral relay ---
263
+ // wsRaw'dan gelen WS-olmayan HTTP. Control isteğini sahiplen (true); gerisi false → 426.
264
+ routeRequest(req, res) {
265
+ // CORS preflight — browser'ın OPTIONS isteğini karşıla.
266
+ if (req.method === "OPTIONS") {
267
+ res.writeHead(204, this.corsHeaders());
268
+ res.end();
269
+ return true;
270
+ }
271
+ if (req.method === "POST" && req.url && req.url.startsWith("/control/")) {
272
+ const cmd = req.url.slice("/control/".length);
273
+ void this.handleControl(cmd, req, res);
274
+ return true;
275
+ }
276
+ // Render-check: agent Playwright ile bu sabit lokal URL'i açar; CLI primary tab'dan TAZE token
277
+ // isteyip Studio editör URL'ine 302 redirect eder. Agent token'ı hiç görmez/işlemez.
278
+ if (req.method === "GET" && req.url && req.url.split("?")[0] === "/render") {
279
+ void this.handleRenderRedirect(res);
280
+ return true;
281
+ }
282
+ return false;
283
+ }
284
+ /** `<origin>/studio/<org>/<app>?cliRole=test#token=<taze token>` adresine 302 redirect.
285
+ * Token her istekte primary'den TALEPLE alınır (hello-anı token'ı ~1 saatte bayatlar; api.getToken()
286
+ * MSAL'dan sessizce yeniler) ve YALNIZ fragment'te taşınır (query değil → access log/Referer'a
287
+ * sızmaz; sunucuya hiç gitmez). Diske asla yazılmaz. Yanıtta CORS header'ı BİLEREK YOK — yabancı
288
+ * bir sayfa fetch ile redirect zincirini okuyamasın; endpoint yalnız doğrudan navigasyon içindir.
289
+ * `?cliRole=test` sayesinde tab açılır açılmaz test client olarak auto-connect olur. */
290
+ async handleRenderRedirect(res) {
291
+ if (!this.bridgeClient?.isOpen || this.claimedAppId === undefined) {
292
+ this.respondNoCors(res, 503, { error: "no authenticated Studio session — open Studio and connect the CLI first" });
293
+ return;
294
+ }
295
+ if (!this.renderTarget) {
296
+ this.respondNoCors(res, 503, { error: "missing organization/origin info — reconnect the Studio tab" });
297
+ return;
298
+ }
299
+ let token;
300
+ try {
301
+ token = (await this.bridgeClient.request("getToken", {})).token;
302
+ }
303
+ catch (err) {
304
+ this.respondNoCors(res, 502, { error: `could not obtain session token: ${err.message}` });
305
+ return;
306
+ }
307
+ if (!token) {
308
+ this.respondNoCors(res, 503, { error: "Studio session has no token — is the user logged in?" });
309
+ return;
310
+ }
311
+ const { origin, organizationId } = this.renderTarget;
312
+ const path = `/studio/${encodeURIComponent(organizationId)}/${encodeURIComponent(this.claimedAppId)}`;
313
+ const target = `${origin}${path}?cliRole=test#token=${encodeURIComponent(token)}`;
314
+ res.writeHead(302, { Location: target });
315
+ res.end();
316
+ }
317
+ respondNoCors(res, status, body) {
318
+ res.writeHead(status, { "Content-Type": "application/json" });
319
+ res.end(JSON.stringify(body));
320
+ }
321
+ corsHeaders() {
322
+ return {
323
+ "Access-Control-Allow-Origin": "*",
324
+ "Access-Control-Allow-Methods": "POST, OPTIONS",
325
+ "Access-Control-Allow-Headers": "Content-Type",
326
+ };
327
+ }
328
+ readBody(req) {
329
+ return new Promise((resolve, reject) => {
330
+ let data = "";
331
+ req.on("data", (chunk) => { data += chunk.toString(); });
332
+ req.on("end", () => resolve(data));
333
+ req.on("error", reject);
334
+ });
335
+ }
336
+ // Control komutunu erit: gereken mesajı bridgeClient'a relay et, cevabı HTTP'ye dön.
337
+ async handleControl(cmd, req, res) {
338
+ if (!this.bridgeClient?.isOpen) {
339
+ this.respond(res, 409, { error: "studio not connected" });
340
+ return;
341
+ }
342
+ try {
343
+ switch (cmd) {
344
+ case "pull": {
345
+ // browser pullResult (snapshot) ile reply eder → dosyaları SERVER yazar (+ state).
346
+ // Yanıt: NDJSON stream — her model sonrası {"progress":x,"total":y}, sonda {"message":...}
347
+ const snapshot = await this.bridgeClient.request("pull", {});
348
+ const modelTotal = snapshot.models.length;
349
+ res.writeHead(200, { "Content-Type": "application/x-ndjson", ...this.corsHeaders() });
350
+ try {
351
+ const { total, readOnly } = await (0, pull_1.pull)(this.rootDir, snapshot, (written) => {
352
+ res.write(JSON.stringify({ progress: written, total: modelTotal }) + "\n");
353
+ });
354
+ res.end(JSON.stringify({ message: `pulled ${total} model(s)${readOnly > 0 ? ` (${readOnly} read-only)` : ""}` }) + "\n");
355
+ }
356
+ catch (err) {
357
+ res.end(JSON.stringify({ error: err.message }) + "\n");
358
+ }
359
+ return;
360
+ }
361
+ case "push": {
362
+ // rootDir'i tara → mevcut (models) + yeni (newModels) dosyaları topla → bulk relay → state güncelle.
363
+ const state = (0, state_1.readState)(this.rootDir);
364
+ const { models, newModels, skipped, deletedIds } = await (0, push_1.push)(this.rootDir, state);
365
+ // NDJSON stream aç — client progress bar çizer (controlClient.ts readNdjsonStream).
366
+ res.writeHead(200, { "Content-Type": "application/x-ndjson", ...this.corsHeaders() });
367
+ // Her skipped dosya için bireysel satır yaz.
368
+ for (const s of skipped) {
369
+ const hint = s.reason === "readonly" ? "read-only (use startWorking to check out)" : "unsupported type";
370
+ res.write(JSON.stringify({ skipped: `${s.localKey} — ${hint}` }) + "\n");
371
+ }
372
+ if (models.length === 0 && newModels.length === 0 && deletedIds.length === 0) {
373
+ res.end(JSON.stringify({ message: `nothing to push` }) + "\n");
374
+ return;
375
+ }
376
+ const total = models.length + newModels.length + deletedIds.length;
377
+ // Push sırasında gelen modelChanged/modelCreated eventleri push'un kendi updateModel
378
+ // çağrılarından kaynaklanır (echo). Deferred queue'ya al; push bitince işle.
379
+ this._pushInProgress = true;
380
+ this._expectedCheckoutEchoes.clear(); // önceki push'tan kalan (echo'su gelmemiş) id'leri temizle
381
+ try {
382
+ res.write(JSON.stringify({ progress: 0, total }) + "\n");
383
+ const result = await this.bridgeClient.request("push", { models, newModels, deletedIds }, 60000);
384
+ // Yeni yaratılan modeller push tarafından checkout edilir → checkoutChanged echo'su beklenir.
385
+ // (Mevcut modeller rename/move/body'de checkout etmez.) Echo geç gelse de id ile bastırılır.
386
+ for (const r of result.newModelResults ?? [])
387
+ if (r.ok && r.id)
388
+ this._expectedCheckoutEchoes.add(r.id);
389
+ // Progress: her uygulanan öğe için tek satır (mevcut + yeni + silinen).
390
+ let done = 0;
391
+ const tick = () => res.write(JSON.stringify({ progress: ++done, total }) + "\n");
392
+ const counts = { okBody: 0, okRenamed: 0, okMoved: 0, okBoth: 0, okDeleted: 0, okRefFiles: 0 };
393
+ this.applyExistingResults(result.results ?? [], models, state, counts, tick);
394
+ await this.applyNewModelResults(result.newModelResults ?? [], newModels, state, counts, tick);
395
+ this.applyDeletedResults(result.deletedResults ?? [], state, counts, tick);
396
+ counts.okRefFiles = await this.syncReferences(result.results ?? [], result.deletedResults ?? [], state, res);
397
+ await (0, state_1.writeState)(this.rootDir, state);
398
+ res.end(JSON.stringify({ message: this.buildPushSummary(counts, models, newModels, skipped) }) + "\n");
399
+ // Test tabına yansıt — HTTP yanıtı kapandıktan sonra, best-effort (push'u asla bloklamaz;
400
+ // hata da push'a sızmaz — res zaten kapandı, catch'e düşmemeli).
401
+ try {
402
+ this.afterPushSync(models, newModels, result);
403
+ }
404
+ catch (e) {
405
+ logger_1.logger.warn(`test sync skipped: ${e.message}`);
406
+ }
407
+ }
408
+ catch (err) {
409
+ res.end(JSON.stringify({ error: err.message }) + "\n");
410
+ }
411
+ finally {
412
+ this._pushInProgress = false;
413
+ // Reply sonrası gelebilecek checkout echo'su _expectedCheckoutEchoes ile (id bazında) bastırılır.
414
+ // Deferred echo eventlerini işle (push'un kendi kaynaklıları no-op olur).
415
+ const deferredChanged = this._deferredModelChanged.splice(0);
416
+ for (const d of deferredChanged)
417
+ void this.handleModelChanged(d);
418
+ const deferredCreated = this._deferredModelCreated.splice(0);
419
+ for (const d of deferredCreated)
420
+ void this.handleModelCreated(d);
421
+ }
422
+ return;
423
+ }
424
+ case "startWorking": {
425
+ if (!this.bridgeClient?.isOpen) {
426
+ this.respond(res, 409, { error: "studio not connected" });
427
+ return;
428
+ }
429
+ let body;
430
+ try {
431
+ body = JSON.parse(await this.readBody(req));
432
+ }
433
+ catch {
434
+ this.respond(res, 400, { error: "invalid request body" });
435
+ return;
436
+ }
437
+ if (!body.modelId) {
438
+ this.respond(res, 400, { error: "modelId required" });
439
+ return;
440
+ }
441
+ const result = await this.bridgeClient.request("startWorking", { modelId: body.modelId });
442
+ this.respond(res, 200, result);
443
+ return;
444
+ }
445
+ case "convertToBlock": {
446
+ if (!this.bridgeClient?.isOpen) {
447
+ this.respond(res, 409, { error: "studio not connected" });
448
+ return;
449
+ }
450
+ let body;
451
+ try {
452
+ body = JSON.parse(await this.readBody(req));
453
+ }
454
+ catch {
455
+ this.respond(res, 400, { error: "invalid request body" });
456
+ return;
457
+ }
458
+ if (!body.modelId) {
459
+ this.respond(res, 400, { error: "modelId required" });
460
+ return;
461
+ }
462
+ const result = await this.bridgeClient.request("convertToBlock", { modelId: body.modelId });
463
+ this.respond(res, 200, result);
464
+ return;
465
+ }
466
+ default:
467
+ this.respond(res, 404, { error: `unknown control command: ${cmd}` });
468
+ }
469
+ }
470
+ catch (err) {
471
+ this.respond(res, 502, { error: err.message });
472
+ }
473
+ }
474
+ respond(res, status, body) {
475
+ res.writeHead(status, { "Content-Type": "application/json", ...this.corsHeaders() });
476
+ res.end(JSON.stringify(body));
477
+ }
478
+ // --- push sonuç işleme (handleControl "push" yardımcıları) ---
479
+ /** Mevcut modeller: bodyChanged'da state hash güncelle; rename/move sayaçları; her öğe için progress. */
480
+ applyExistingResults(results, models, state, counts, tick) {
481
+ for (const r of results) {
482
+ if (!r.ok) {
483
+ logger_1.logger.warn(`push ${r.id}: ${r.error ?? "failed"}`);
484
+ tick();
485
+ continue;
486
+ }
487
+ const pm = models.find(m => m.id === r.id);
488
+ if (pm?.bodyChanged) {
489
+ state[r.id] = (0, state_1.sha)(pm.model);
490
+ counts.okBody++;
491
+ }
492
+ if (r.renamed && r.moved)
493
+ counts.okBoth++;
494
+ else if (r.renamed)
495
+ counts.okRenamed++;
496
+ else if (r.moved)
497
+ counts.okMoved++;
498
+ tick();
499
+ }
500
+ }
501
+ /** Yeni dosyalar: yeni yaratılana frontmatter yaz, state hash hesapla; her öğe için progress. */
502
+ async applyNewModelResults(results, newModels, state, counts, tick) {
503
+ for (const r of results) {
504
+ if (!r.ok || !r.id || !r.key) {
505
+ logger_1.logger.warn(`push ${r.localKey}: ${r.error ?? "failed"}`);
506
+ tick();
507
+ continue;
508
+ }
509
+ const nm = newModels.find(m => m.localKey === r.localKey);
510
+ if (!nm) {
511
+ tick();
512
+ continue;
513
+ }
514
+ const absPath = (0, node_path_1.join)(this.rootDir, ...r.localKey.split("/"));
515
+ const isNewlyCreated = !nm.existingId || r.id !== nm.existingId;
516
+ if (isNewlyCreated) {
517
+ await (0, promises_1.writeFile)(absPath, (0, frontmatter_1.writeWithFrontmatter)({ id: r.id, ownerName: r.ownerName ?? "/" }, nm.body), "utf8");
518
+ }
519
+ const createdContent = await (0, promises_1.readFile)(absPath, "utf8");
520
+ const createdFm = (0, frontmatter_1.parseFrontmatter)(createdContent);
521
+ state[r.id] = (0, state_1.sha)(createdFm?.body ?? createdContent);
522
+ counts.okBody++;
523
+ tick();
524
+ }
525
+ }
526
+ /** Silinen modeller: state'ten çıkar; her öğe için progress. */
527
+ applyDeletedResults(results, state, counts, tick) {
528
+ for (const r of results) {
529
+ if (!r.ok) {
530
+ logger_1.logger.warn(`push delete ${r.id}: ${r.error ?? "failed"}`);
531
+ tick();
532
+ continue;
533
+ }
534
+ delete state[r.id];
535
+ counts.okDeleted++;
536
+ tick();
537
+ }
538
+ }
539
+ /** EPIC 13b — rename/move sonrası diğer dosyalardaki <<type:oldPath>> → <<type:newPath>> düzelt;
540
+ * delete'te dangling referansları `skipped` satırıyla uyar. Düzeltilen dosya sayısı döner.
541
+ * (Studio'da bağ id ile sabit; lokalde path ile olduğu için referans EDEN dosyalar bayatlar.) */
542
+ async syncReferences(results, deletedResults, state, res) {
543
+ const renames = results.flatMap(r => (r.ok && r.oldPath && r.newPath && r.oldPath !== r.newPath) ? [{ oldPath: r.oldPath, newPath: r.newPath }] : []);
544
+ const deletedPaths = deletedResults.flatMap(r => (r.ok && r.deletedPath) ? [r.deletedPath] : []);
545
+ if (renames.length === 0 && deletedPaths.length === 0)
546
+ return 0;
547
+ let okRefFiles = 0;
548
+ for (const abs of await walkDir(this.rootDir)) {
549
+ let content = await (0, promises_1.readFile)(abs, "utf8");
550
+ let changed = false;
551
+ for (const rn of renames) {
552
+ const rw = (0, modelRef_1.rewriteRefPath)(content, rn.oldPath, rn.newPath);
553
+ if (rw.count > 0) {
554
+ content = rw.content;
555
+ changed = true;
556
+ }
557
+ }
558
+ if (changed) {
559
+ // Referans eden dosya checkout edilmemişse (0444) yazılamaz → geçici writable yap, sonra geri al.
560
+ const wasWritable = !!((await (0, promises_1.stat)(abs)).mode & 0o200);
561
+ if (!wasWritable)
562
+ await (0, promises_1.chmod)(abs, 0o644);
563
+ await (0, promises_1.writeFile)(abs, content, "utf8");
564
+ if (!wasWritable)
565
+ await (0, promises_1.chmod)(abs, 0o444);
566
+ const fm = (0, frontmatter_1.parseFrontmatter)(content);
567
+ if (fm)
568
+ state[fm.meta.id] = (0, state_1.sha)(fm.body);
569
+ okRefFiles++;
570
+ logger_1.logger.info(`ref-sync: ${(0, node_path_1.relative)(this.rootDir, abs)}`);
571
+ }
572
+ for (const dp of deletedPaths) {
573
+ if ((0, modelRef_1.hasRefPath)(content, dp)) {
574
+ res.write(JSON.stringify({ skipped: `${(0, node_path_1.relative)(this.rootDir, abs).replace(/\\/g, "/")} — references deleted '${dp}' (fix manually)` }) + "\n");
575
+ }
576
+ }
577
+ }
578
+ return okRefFiles;
579
+ }
580
+ /** push özet mesajı (son NDJSON satırı). */
581
+ buildPushSummary(counts, models, newModels, skipped) {
582
+ const parts = [];
583
+ const bodyTotal = models.filter(m => m.bodyChanged).length + newModels.length;
584
+ if (bodyTotal > 0)
585
+ parts.push(`pushed ${counts.okBody}/${bodyTotal} model(s)`);
586
+ if (counts.okBoth > 0)
587
+ parts.push(`${counts.okBoth} renamed and moved`);
588
+ if (counts.okRenamed > 0)
589
+ parts.push(`${counts.okRenamed} renamed`);
590
+ if (counts.okMoved > 0)
591
+ parts.push(`${counts.okMoved} moved`);
592
+ if (counts.okDeleted > 0)
593
+ parts.push(`${counts.okDeleted} deleted`);
594
+ if (counts.okRefFiles > 0)
595
+ parts.push(`refs updated in ${counts.okRefFiles} file(s)`);
596
+ if (parts.length === 0)
597
+ parts.push("nothing to push");
598
+ const readonlyCount = skipped.filter(s => s.reason === "readonly").length;
599
+ const unsupportedCount = skipped.filter(s => s.reason === "unsupported-type").length;
600
+ if (readonlyCount > 0)
601
+ parts.push(`${readonlyCount} read-only skipped`);
602
+ if (unsupportedCount > 0)
603
+ parts.push(`${unsupportedCount} unsupported type skipped`);
604
+ return parts.join(", ");
605
+ }
606
+ // --- test client sync (push edilen gövdelerin test tabına yansıtılması) ---
607
+ /** Push sonuçlarından sync item'larını çıkarır, lastSync'e merge eder ve (bağlıysa) test
608
+ * client'a yollar. Primary push payload'ı ASLA replay edilmez — applyNewModel backend'de model
609
+ * yaratır, replay double-create olur; bu yüzden FINAL id'lerle bu hafif mesaj gönderilir. */
610
+ afterPushSync(models, newModels, result) {
611
+ const items = [];
612
+ for (const r of result.results ?? []) {
613
+ if (!r.ok)
614
+ continue;
615
+ const pm = models.find(m => m.id === r.id);
616
+ if (!pm?.bodyChanged)
617
+ continue;
618
+ items.push({ id: pm.id, modelType: pm.modelType, body: pm.model, name: pm.newName, relDir: pm.relDir, isNew: false });
619
+ }
620
+ for (const r of result.newModelResults ?? []) {
621
+ if (!r.ok || !r.id)
622
+ continue; // primary'de create başarısızsa test'e HİÇ gitmez (hayalet model yok)
623
+ const nm = newModels.find(m => m.localKey === r.localKey);
624
+ if (!nm)
625
+ continue;
626
+ items.push({ id: r.id, modelType: nm.modelType, key: r.key, body: nm.body, name: r.name ?? nm.name, relDir: nm.relDir, isNew: !nm.existingId || r.id !== nm.existingId });
627
+ }
628
+ for (const it of items)
629
+ this.lastSync.set(it.id, it);
630
+ for (const d of result.deletedResults ?? [])
631
+ if (d.ok)
632
+ this.lastSync.delete(d.id);
633
+ // Gövdesiz rename/move/create/delete de test tabında refreshItems gerektirir.
634
+ const treeChanged = (result.results ?? []).some(r => r.ok && (r.renamed === true || r.moved === true))
635
+ || (result.newModelResults ?? []).some(r => r.ok)
636
+ || (result.deletedResults ?? []).some(r => r.ok);
637
+ if (this.testClient?.isOpen && (items.length > 0 || treeChanged)) {
638
+ void this.sendSyncModels("push", items, treeChanged);
639
+ }
640
+ }
641
+ /** syncModels'i test client'a yollar. replay → lastSync'ün tamamı (test hello/F5 sonrası).
642
+ * Best-effort: hata yalnız loglanır; timeout 60s (handler refreshItems + editör açabilir). */
643
+ async sendSyncModels(reason, items, treeChanged = false) {
644
+ if (!this.testClient?.isOpen || this.claimedAppId === undefined)
645
+ return;
646
+ const models = reason === "replay" ? [...this.lastSync.values()] : (items ?? []);
647
+ if (models.length === 0 && !treeChanged)
648
+ return;
649
+ try {
650
+ const r = await this.testClient.request("syncModels", { appId: this.claimedAppId, reason, treeChanged, models }, 60000);
651
+ logger_1.logger.info(`test sync (${reason}): applied ${r.applied}, failed ${r.failed}`);
652
+ for (const e of r.errors ?? [])
653
+ logger_1.logger.warn(`test sync ${e.id}: ${e.error}`);
654
+ }
655
+ catch (err) {
656
+ logger_1.logger.warn(`test sync (${reason}) failed: ${err.message}`);
657
+ }
658
+ }
659
+ // --- web → local otomatik sync (modelChanged) ---
660
+ async handleModelChanged(payload) {
661
+ if (this._pushInProgress) {
662
+ this._deferredModelChanged.push(payload);
663
+ logger_1.logger.debug(`modelChanged: push in progress — deferring for id=${payload.modelId}`);
664
+ return;
665
+ }
666
+ const abs = await this.findFileById(payload.modelId);
667
+ if (!abs) {
668
+ logger_1.logger.debug(`modelChanged: no local file for id=${payload.modelId}`);
669
+ return;
670
+ }
671
+ const existing = await (0, promises_1.readFile)(abs, "utf8");
672
+ const fm = (0, frontmatter_1.parseFrontmatter)(existing);
673
+ if (!fm)
674
+ return;
675
+ // model="" → rename-only mesaj (body VMM'de yüklü değildi); body yazma atla
676
+ if (payload.model !== "") {
677
+ const ext = (0, node_path_1.extname)(abs).slice(1).toLowerCase();
678
+ const body = ext === "qjson" ? (0, pull_1.stripQJsonCompiledFields)(payload.model) : payload.model;
679
+ // Kullanıcı Studio'da kaydettiyse test replay'i (F5) bayat push gövdesine dönmesin.
680
+ const prev = this.lastSync.get(payload.modelId);
681
+ if (prev)
682
+ this.lastSync.set(payload.modelId, { ...prev, body });
683
+ const state = (0, state_1.readState)(this.rootDir);
684
+ // Push echo guard: hash state ile aynıysa (az önce pushladık) body yazmayı atla
685
+ if ((0, state_1.sha)(body) !== state[payload.modelId]) {
686
+ try {
687
+ await (0, promises_1.chmod)(abs, 0o644);
688
+ }
689
+ catch { /* zaten yazılabilir veya dosya yok */ }
690
+ await (0, promises_1.writeFile)(abs, (0, frontmatter_1.writeWithFrontmatter)(fm.meta, body), "utf8");
691
+ state[payload.modelId] = (0, state_1.sha)(body);
692
+ await (0, state_1.writeState)(this.rootDir, state);
693
+ logger_1.logger.info(`auto-pulled: ${(0, node_path_1.relative)(this.rootDir, abs)}`);
694
+ }
695
+ }
696
+ // Rename ve move sırayla yapılır; currentAbs güncel yolu takip eder.
697
+ let currentAbs = abs;
698
+ if (payload.newName) {
699
+ const newAbs = (0, node_path_1.join)((0, node_path_1.dirname)(currentAbs), payload.newName + (0, node_path_1.extname)(currentAbs));
700
+ if (newAbs !== currentAbs) {
701
+ await (0, promises_1.rename)(currentAbs, newAbs);
702
+ logger_1.logger.info(`auto-renamed: ${(0, node_path_1.relative)(this.rootDir, currentAbs)} → ${(0, node_path_1.relative)(this.rootDir, newAbs)}`);
703
+ currentAbs = newAbs;
704
+ }
705
+ }
706
+ if (payload.newRelDir !== undefined) {
707
+ const currentRelDir = (0, node_path_1.relative)(this.rootDir, (0, node_path_1.dirname)(currentAbs)).replace(/\\/g, "/");
708
+ const normCurrentRelDir = currentRelDir === "." ? "" : currentRelDir;
709
+ if (payload.newRelDir !== normCurrentRelDir) {
710
+ const targetDir = payload.newRelDir
711
+ ? (0, node_path_1.join)(this.rootDir, ...payload.newRelDir.split("/"))
712
+ : this.rootDir;
713
+ const newAbs = (0, node_path_1.join)(targetDir, (0, node_path_1.basename)(currentAbs));
714
+ await (0, promises_1.mkdir)(targetDir, { recursive: true });
715
+ await (0, promises_1.rename)(currentAbs, newAbs);
716
+ logger_1.logger.info(`auto-moved: ${(0, node_path_1.relative)(this.rootDir, currentAbs)} → ${(0, node_path_1.relative)(this.rootDir, newAbs)}`);
717
+ }
718
+ }
719
+ }
720
+ // Studio'da yeni model yaratıldı → lokale tek dosya yaz (pull ile aynı writeModel mantığı).
721
+ // Echo guard: aynı ID'li dosya zaten varsa (push ile yaratıldıysa veya zaten pull'landıysa) atla.
722
+ // Push devam ederken gelen eventler deferred queue'ya alınır (frontmatter henüz yazılmadı).
723
+ async handleModelCreated(payload) {
724
+ if (this._pushInProgress) {
725
+ this._deferredModelCreated.push(payload);
726
+ logger_1.logger.debug(`modelCreated: push in progress — deferring for id=${payload.model.ID}`);
727
+ return;
728
+ }
729
+ const existing = await this.findFileById(payload.model.ID);
730
+ if (existing) {
731
+ logger_1.logger.debug(`modelCreated: file already exists for id=${payload.model.ID} — skipping (echo)`);
732
+ return;
733
+ }
734
+ const { hash } = await (0, pull_1.writeModel)(this.rootDir, payload.model, payload.readOnly);
735
+ if (hash !== undefined) {
736
+ const state = (0, state_1.readState)(this.rootDir);
737
+ state[payload.model.ID] = hash;
738
+ await (0, state_1.writeState)(this.rootDir, state);
739
+ }
740
+ logger_1.logger.info(`auto-pulled (new): ${payload.model.name}`);
741
+ }
742
+ async handleModelDeleted(payload) {
743
+ this.lastSync.delete(payload.modelId); // replay silinen modeli diriltmesin
744
+ const abs = await this.findFileById(payload.modelId);
745
+ if (!abs) {
746
+ logger_1.logger.debug(`modelDeleted: no local file for id=${payload.modelId}`);
747
+ return;
748
+ }
749
+ await (0, promises_1.unlink)(abs);
750
+ const state = (0, state_1.readState)(this.rootDir);
751
+ delete state[payload.modelId];
752
+ await (0, state_1.writeState)(this.rootDir, state);
753
+ logger_1.logger.info(`auto-deleted: ${(0, node_path_1.relative)(this.rootDir, abs)}`);
754
+ }
755
+ async handleCheckoutChanged(payload) {
756
+ // Push'un kendi checkout'undan kaynaklanan echo (yeni model yaratınca studio.checkout).
757
+ // Dosya push tarafından zaten doğru modda yazılıyor → log/chmod gereksiz, düşür.
758
+ // - Push sürerken: tümünü bastır.
759
+ // - Reply'dan sonra geç gelen echo: yalnız push'un checkout ettiği id'ler, consume-once.
760
+ // Yalnızca Studio'da manuel start/stop working log'lanır.
761
+ if (this._pushInProgress) {
762
+ logger_1.logger.debug(`checkoutChanged: push in progress — ignoring (echo) for id=${payload.modelId}`);
763
+ return;
764
+ }
765
+ if (this._expectedCheckoutEchoes.delete(payload.modelId)) {
766
+ logger_1.logger.debug(`checkoutChanged: expected push echo — ignoring for id=${payload.modelId}`);
767
+ return;
768
+ }
769
+ const abs = await this.findFileById(payload.modelId);
770
+ if (!abs) {
771
+ logger_1.logger.debug(`checkoutChanged: no local file for id=${payload.modelId}`);
772
+ return;
773
+ }
774
+ const mode = payload.checkedOutByMe ? 0o644 : 0o444;
775
+ await (0, promises_1.chmod)(abs, mode);
776
+ logger_1.logger.info(`checkout-changed: ${(0, node_path_1.relative)(this.rootDir, abs)} → ${payload.checkedOutByMe ? "editable (0644)" : "read-only (0444)"}`);
777
+ }
778
+ async findFileById(modelId) {
779
+ for (const abs of await walkDir(this.rootDir)) {
780
+ const content = await (0, promises_1.readFile)(abs, "utf8");
781
+ const fm = (0, frontmatter_1.parseFrontmatter)(content);
782
+ if (fm?.meta.id === modelId)
783
+ return abs;
784
+ }
785
+ return null;
786
+ }
787
+ // --- keepalive (bridge client'a) ---
788
+ startPing() {
789
+ this.stopPing();
790
+ this.pingTimer = setInterval(() => {
791
+ for (const p of [this.bridgeClient, this.testClient])
792
+ if (p?.isOpen)
793
+ p.send("ping", {});
794
+ }, PING_INTERVAL_MS);
795
+ }
796
+ stopPing() {
797
+ if (this.pingTimer) {
798
+ clearInterval(this.pingTimer);
799
+ this.pingTimer = undefined;
800
+ }
801
+ }
802
+ }
803
+ exports.BridgeServer = BridgeServer;
804
+ async function walkDir(dir) {
805
+ const out = [];
806
+ for (const entry of await (0, promises_1.readdir)(dir, { withFileTypes: true })) {
807
+ if (entry.name.startsWith("."))
808
+ continue;
809
+ const abs = (0, node_path_1.join)(dir, entry.name);
810
+ if (entry.isDirectory())
811
+ out.push(...(await walkDir(abs)));
812
+ else
813
+ out.push(abs);
814
+ }
815
+ return out;
816
+ }
817
+ //# sourceMappingURL=bridgeServer.js.map