keboola-cli 0.63.4__py3-none-any.whl

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 (306) hide show
  1. keboola_agent_cli/__init__.py +34 -0
  2. keboola_agent_cli/__main__.py +5 -0
  3. keboola_agent_cli/_ui_dist/assets/arc-DhFYIddx.js +2 -0
  4. keboola_agent_cli/_ui_dist/assets/arc-DhFYIddx.js.map +1 -0
  5. keboola_agent_cli/_ui_dist/assets/architecture-7EHR7CIX-hNCijx_H.js +1 -0
  6. keboola_agent_cli/_ui_dist/assets/architectureDiagram-3BPJPVTR-C6hUlprM.js +37 -0
  7. keboola_agent_cli/_ui_dist/assets/architectureDiagram-3BPJPVTR-C6hUlprM.js.map +1 -0
  8. keboola_agent_cli/_ui_dist/assets/array-BifhSqXX.js +2 -0
  9. keboola_agent_cli/_ui_dist/assets/array-BifhSqXX.js.map +1 -0
  10. keboola_agent_cli/_ui_dist/assets/blockDiagram-GPEHLZMM-DC7qY9i4.js +133 -0
  11. keboola_agent_cli/_ui_dist/assets/blockDiagram-GPEHLZMM-DC7qY9i4.js.map +1 -0
  12. keboola_agent_cli/_ui_dist/assets/c4Diagram-AAUBKEIU-5Lh44evt.js +11 -0
  13. keboola_agent_cli/_ui_dist/assets/c4Diagram-AAUBKEIU-5Lh44evt.js.map +1 -0
  14. keboola_agent_cli/_ui_dist/assets/channel-DBMrXlxx.js +2 -0
  15. keboola_agent_cli/_ui_dist/assets/channel-DBMrXlxx.js.map +1 -0
  16. keboola_agent_cli/_ui_dist/assets/chunk-2J33WTMH-Coy82EBh.js +2 -0
  17. keboola_agent_cli/_ui_dist/assets/chunk-2J33WTMH-Coy82EBh.js.map +1 -0
  18. keboola_agent_cli/_ui_dist/assets/chunk-3OPIFGDE-BQC5CRHI.js +63 -0
  19. keboola_agent_cli/_ui_dist/assets/chunk-3OPIFGDE-BQC5CRHI.js.map +1 -0
  20. keboola_agent_cli/_ui_dist/assets/chunk-4BX2VUAB-DUuEt70o.js +2 -0
  21. keboola_agent_cli/_ui_dist/assets/chunk-4BX2VUAB-DUuEt70o.js.map +1 -0
  22. keboola_agent_cli/_ui_dist/assets/chunk-55IACEB6-BvR-6chF.js +2 -0
  23. keboola_agent_cli/_ui_dist/assets/chunk-55IACEB6-BvR-6chF.js.map +1 -0
  24. keboola_agent_cli/_ui_dist/assets/chunk-5ZQYHXKU-BjcTN7ul.js +3 -0
  25. keboola_agent_cli/_ui_dist/assets/chunk-5ZQYHXKU-BjcTN7ul.js.map +1 -0
  26. keboola_agent_cli/_ui_dist/assets/chunk-727SXJPM-C0zxqqRN.js +207 -0
  27. keboola_agent_cli/_ui_dist/assets/chunk-727SXJPM-C0zxqqRN.js.map +1 -0
  28. keboola_agent_cli/_ui_dist/assets/chunk-AQP2D5EJ-CXf7rIlZ.js +232 -0
  29. keboola_agent_cli/_ui_dist/assets/chunk-AQP2D5EJ-CXf7rIlZ.js.map +1 -0
  30. keboola_agent_cli/_ui_dist/assets/chunk-BSJP7CBP-Oj_FO9Q7.js +2 -0
  31. keboola_agent_cli/_ui_dist/assets/chunk-BSJP7CBP-Oj_FO9Q7.js.map +1 -0
  32. keboola_agent_cli/_ui_dist/assets/chunk-CSCIHK7Q-CcTsLrFc.js +124 -0
  33. keboola_agent_cli/_ui_dist/assets/chunk-CSCIHK7Q-CcTsLrFc.js.map +1 -0
  34. keboola_agent_cli/_ui_dist/assets/chunk-FMBD7UC4-FH-zLkkW.js +16 -0
  35. keboola_agent_cli/_ui_dist/assets/chunk-FMBD7UC4-FH-zLkkW.js.map +1 -0
  36. keboola_agent_cli/_ui_dist/assets/chunk-L5ZTLDWV-B1Ky_e7O.js +2 -0
  37. keboola_agent_cli/_ui_dist/assets/chunk-L5ZTLDWV-B1Ky_e7O.js.map +1 -0
  38. keboola_agent_cli/_ui_dist/assets/chunk-ND2GUHAM-BHz1rpbm.js +2 -0
  39. keboola_agent_cli/_ui_dist/assets/chunk-ND2GUHAM-BHz1rpbm.js.map +1 -0
  40. keboola_agent_cli/_ui_dist/assets/chunk-NNHCCRGN-DlpIbxXb.js +160 -0
  41. keboola_agent_cli/_ui_dist/assets/chunk-NNHCCRGN-DlpIbxXb.js.map +1 -0
  42. keboola_agent_cli/_ui_dist/assets/chunk-NZK2D7GU-tnrSoegS.js +2 -0
  43. keboola_agent_cli/_ui_dist/assets/chunk-NZK2D7GU-tnrSoegS.js.map +1 -0
  44. keboola_agent_cli/_ui_dist/assets/chunk-O5CBEL6O-DxxqDH0l.js +71 -0
  45. keboola_agent_cli/_ui_dist/assets/chunk-O5CBEL6O-DxxqDH0l.js.map +1 -0
  46. keboola_agent_cli/_ui_dist/assets/chunk-QZHKN3VN-CSjc2gjj.js +2 -0
  47. keboola_agent_cli/_ui_dist/assets/chunk-QZHKN3VN-CSjc2gjj.js.map +1 -0
  48. keboola_agent_cli/_ui_dist/assets/classDiagram-4FO5ZUOK-BuZcZu85.js +2 -0
  49. keboola_agent_cli/_ui_dist/assets/classDiagram-4FO5ZUOK-BuZcZu85.js.map +1 -0
  50. keboola_agent_cli/_ui_dist/assets/classDiagram-v2-Q7XG4LA2-BuZcZu85.js +2 -0
  51. keboola_agent_cli/_ui_dist/assets/classDiagram-v2-Q7XG4LA2-BuZcZu85.js.map +1 -0
  52. keboola_agent_cli/_ui_dist/assets/cose-bilkent-S5V4N54A-Y0L8LDMa.js +2 -0
  53. keboola_agent_cli/_ui_dist/assets/cose-bilkent-S5V4N54A-Y0L8LDMa.js.map +1 -0
  54. keboola_agent_cli/_ui_dist/assets/cytoscape.esm-C8YCVR3_.js +322 -0
  55. keboola_agent_cli/_ui_dist/assets/cytoscape.esm-C8YCVR3_.js.map +1 -0
  56. keboola_agent_cli/_ui_dist/assets/dagre-BM42HDAG-UZ-9BTqF.js +5 -0
  57. keboola_agent_cli/_ui_dist/assets/dagre-BM42HDAG-UZ-9BTqF.js.map +1 -0
  58. keboola_agent_cli/_ui_dist/assets/dagre-Bx709z4p.js +2 -0
  59. keboola_agent_cli/_ui_dist/assets/dagre-Bx709z4p.js.map +1 -0
  60. keboola_agent_cli/_ui_dist/assets/defaultLocale-C8Fc0cco.js +2 -0
  61. keboola_agent_cli/_ui_dist/assets/defaultLocale-C8Fc0cco.js.map +1 -0
  62. keboola_agent_cli/_ui_dist/assets/diagram-2AECGRRQ-DoDQ60wi.js +44 -0
  63. keboola_agent_cli/_ui_dist/assets/diagram-2AECGRRQ-DoDQ60wi.js.map +1 -0
  64. keboola_agent_cli/_ui_dist/assets/diagram-5GNKFQAL-CMGFxpUs.js +11 -0
  65. keboola_agent_cli/_ui_dist/assets/diagram-5GNKFQAL-CMGFxpUs.js.map +1 -0
  66. keboola_agent_cli/_ui_dist/assets/diagram-KO2AKTUF-1uGDa-Iu.js +4 -0
  67. keboola_agent_cli/_ui_dist/assets/diagram-KO2AKTUF-1uGDa-Iu.js.map +1 -0
  68. keboola_agent_cli/_ui_dist/assets/diagram-LMA3HP47-XtFH7B51.js +25 -0
  69. keboola_agent_cli/_ui_dist/assets/diagram-LMA3HP47-XtFH7B51.js.map +1 -0
  70. keboola_agent_cli/_ui_dist/assets/diagram-OG6HWLK6-B4_Te1T5.js +25 -0
  71. keboola_agent_cli/_ui_dist/assets/diagram-OG6HWLK6-B4_Te1T5.js.map +1 -0
  72. keboola_agent_cli/_ui_dist/assets/dist-Di6zmlv0.js +2 -0
  73. keboola_agent_cli/_ui_dist/assets/dist-Di6zmlv0.js.map +1 -0
  74. keboola_agent_cli/_ui_dist/assets/erDiagram-TEJ5UH35-NjQkrdFt.js +86 -0
  75. keboola_agent_cli/_ui_dist/assets/erDiagram-TEJ5UH35-NjQkrdFt.js.map +1 -0
  76. keboola_agent_cli/_ui_dist/assets/eventmodeling-FCH6USID-BrJMIks8.js +1 -0
  77. keboola_agent_cli/_ui_dist/assets/flowDiagram-I6XJVG4X-CIr8DWl7.js +163 -0
  78. keboola_agent_cli/_ui_dist/assets/flowDiagram-I6XJVG4X-CIr8DWl7.js.map +1 -0
  79. keboola_agent_cli/_ui_dist/assets/ganttDiagram-6RSMTGT7-C1VY_xbQ.js +293 -0
  80. keboola_agent_cli/_ui_dist/assets/ganttDiagram-6RSMTGT7-C1VY_xbQ.js.map +1 -0
  81. keboola_agent_cli/_ui_dist/assets/gitGraph-WXDBUCRP-COacYjo-.js +1 -0
  82. keboola_agent_cli/_ui_dist/assets/gitGraphDiagram-PVQCEYII-DQT8-kg2.js +107 -0
  83. keboola_agent_cli/_ui_dist/assets/gitGraphDiagram-PVQCEYII-DQT8-kg2.js.map +1 -0
  84. keboola_agent_cli/_ui_dist/assets/graphlib-B8gBHxth.js +2 -0
  85. keboola_agent_cli/_ui_dist/assets/graphlib-B8gBHxth.js.map +1 -0
  86. keboola_agent_cli/_ui_dist/assets/index-CMq50kkV.css +1 -0
  87. keboola_agent_cli/_ui_dist/assets/index-D8W97DAz.js +118 -0
  88. keboola_agent_cli/_ui_dist/assets/index-D8W97DAz.js.map +1 -0
  89. keboola_agent_cli/_ui_dist/assets/info-J43DQDTF-DdCTRIzU.js +1 -0
  90. keboola_agent_cli/_ui_dist/assets/infoDiagram-5YYISTIA-C77rsoTp.js +3 -0
  91. keboola_agent_cli/_ui_dist/assets/infoDiagram-5YYISTIA-C77rsoTp.js.map +1 -0
  92. keboola_agent_cli/_ui_dist/assets/init-D6jRqBbL.js +2 -0
  93. keboola_agent_cli/_ui_dist/assets/init-D6jRqBbL.js.map +1 -0
  94. keboola_agent_cli/_ui_dist/assets/ishikawaDiagram-YF4QCWOH-BcTbXaLy.js +71 -0
  95. keboola_agent_cli/_ui_dist/assets/ishikawaDiagram-YF4QCWOH-BcTbXaLy.js.map +1 -0
  96. keboola_agent_cli/_ui_dist/assets/journeyDiagram-JHISSGLW-BejeAJQ_.js +140 -0
  97. keboola_agent_cli/_ui_dist/assets/journeyDiagram-JHISSGLW-BejeAJQ_.js.map +1 -0
  98. keboola_agent_cli/_ui_dist/assets/kanban-definition-UN3LZRKU-BRNz_UrH.js +90 -0
  99. keboola_agent_cli/_ui_dist/assets/kanban-definition-UN3LZRKU-BRNz_UrH.js.map +1 -0
  100. keboola_agent_cli/_ui_dist/assets/katex-C4eR7coU.js +258 -0
  101. keboola_agent_cli/_ui_dist/assets/katex-C4eR7coU.js.map +1 -0
  102. keboola_agent_cli/_ui_dist/assets/line-CzAQKFbJ.js +2 -0
  103. keboola_agent_cli/_ui_dist/assets/line-CzAQKFbJ.js.map +1 -0
  104. keboola_agent_cli/_ui_dist/assets/linear-DUNFFdck.js +2 -0
  105. keboola_agent_cli/_ui_dist/assets/linear-DUNFFdck.js.map +1 -0
  106. keboola_agent_cli/_ui_dist/assets/mermaid-parser.core-CpuBOkFa.js +5 -0
  107. keboola_agent_cli/_ui_dist/assets/mermaid-parser.core-CpuBOkFa.js.map +1 -0
  108. keboola_agent_cli/_ui_dist/assets/mindmap-definition-RKZ34NQL-9EJQNjH0.js +97 -0
  109. keboola_agent_cli/_ui_dist/assets/mindmap-definition-RKZ34NQL-9EJQNjH0.js.map +1 -0
  110. keboola_agent_cli/_ui_dist/assets/ordinal-hYBb2elL.js +2 -0
  111. keboola_agent_cli/_ui_dist/assets/ordinal-hYBb2elL.js.map +1 -0
  112. keboola_agent_cli/_ui_dist/assets/packet-YPE3B663-DLiiw_B2.js +1 -0
  113. keboola_agent_cli/_ui_dist/assets/path-BWPyau1x.js +2 -0
  114. keboola_agent_cli/_ui_dist/assets/path-BWPyau1x.js.map +1 -0
  115. keboola_agent_cli/_ui_dist/assets/pie-LRSECV5Y-CRoO8G1g.js +1 -0
  116. keboola_agent_cli/_ui_dist/assets/pieDiagram-4H26LBE5-XH4cy6Cb.js +31 -0
  117. keboola_agent_cli/_ui_dist/assets/pieDiagram-4H26LBE5-XH4cy6Cb.js.map +1 -0
  118. keboola_agent_cli/_ui_dist/assets/quadrantDiagram-W4KKPZXB-fdhc93U8.js +8 -0
  119. keboola_agent_cli/_ui_dist/assets/quadrantDiagram-W4KKPZXB-fdhc93U8.js.map +1 -0
  120. keboola_agent_cli/_ui_dist/assets/radar-GUYGQ44K-DAlLVJHm.js +1 -0
  121. keboola_agent_cli/_ui_dist/assets/requirementDiagram-4Y6WPE33-a94eP3R9.js +85 -0
  122. keboola_agent_cli/_ui_dist/assets/requirementDiagram-4Y6WPE33-a94eP3R9.js.map +1 -0
  123. keboola_agent_cli/_ui_dist/assets/rough.esm-CSKSodPl.js +2 -0
  124. keboola_agent_cli/_ui_dist/assets/rough.esm-CSKSodPl.js.map +1 -0
  125. keboola_agent_cli/_ui_dist/assets/sankeyDiagram-5OEKKPKP-jcBa02sp.js +41 -0
  126. keboola_agent_cli/_ui_dist/assets/sankeyDiagram-5OEKKPKP-jcBa02sp.js.map +1 -0
  127. keboola_agent_cli/_ui_dist/assets/sequenceDiagram-3UESZ5HK-A5-GGM-e.js +163 -0
  128. keboola_agent_cli/_ui_dist/assets/sequenceDiagram-3UESZ5HK-A5-GGM-e.js.map +1 -0
  129. keboola_agent_cli/_ui_dist/assets/src-ZI-V_AF0.js +2 -0
  130. keboola_agent_cli/_ui_dist/assets/src-ZI-V_AF0.js.map +1 -0
  131. keboola_agent_cli/_ui_dist/assets/stateDiagram-AJRCARHV-BKAA5rqE.js +2 -0
  132. keboola_agent_cli/_ui_dist/assets/stateDiagram-AJRCARHV-BKAA5rqE.js.map +1 -0
  133. keboola_agent_cli/_ui_dist/assets/stateDiagram-v2-BHNVJYJU-DnJwJBsE.js +2 -0
  134. keboola_agent_cli/_ui_dist/assets/stateDiagram-v2-BHNVJYJU-DnJwJBsE.js.map +1 -0
  135. keboola_agent_cli/_ui_dist/assets/timeline-definition-PNZ67QCA-Cy39jp8b.js +121 -0
  136. keboola_agent_cli/_ui_dist/assets/timeline-definition-PNZ67QCA-Cy39jp8b.js.map +1 -0
  137. keboola_agent_cli/_ui_dist/assets/treeView-BLDUP644-DbLYl23-.js +1 -0
  138. keboola_agent_cli/_ui_dist/assets/treemap-LRROVOQU-Bp0eGlOt.js +1 -0
  139. keboola_agent_cli/_ui_dist/assets/vennDiagram-CIIHVFJN-BGECKubd.js +35 -0
  140. keboola_agent_cli/_ui_dist/assets/vennDiagram-CIIHVFJN-BGECKubd.js.map +1 -0
  141. keboola_agent_cli/_ui_dist/assets/wardley-L42UT6IY-D4yH4jqS.js +1 -0
  142. keboola_agent_cli/_ui_dist/assets/wardleyDiagram-YWT4CUSO-D6XRG3cZ.js +79 -0
  143. keboola_agent_cli/_ui_dist/assets/wardleyDiagram-YWT4CUSO-D6XRG3cZ.js.map +1 -0
  144. keboola_agent_cli/_ui_dist/assets/xychartDiagram-2RQKCTM6-DRre-pfZ.js +8 -0
  145. keboola_agent_cli/_ui_dist/assets/xychartDiagram-2RQKCTM6-DRre-pfZ.js.map +1 -0
  146. keboola_agent_cli/_ui_dist/index.html +50 -0
  147. keboola_agent_cli/ai_client.py +83 -0
  148. keboola_agent_cli/auto_update.py +550 -0
  149. keboola_agent_cli/changelog.py +1198 -0
  150. keboola_agent_cli/cli.py +448 -0
  151. keboola_agent_cli/client.py +3422 -0
  152. keboola_agent_cli/commands/__init__.py +0 -0
  153. keboola_agent_cli/commands/_data_app_git.py +343 -0
  154. keboola_agent_cli/commands/_helpers.py +377 -0
  155. keboola_agent_cli/commands/_metadata_input.py +49 -0
  156. keboola_agent_cli/commands/_semantic_layer_crud.py +632 -0
  157. keboola_agent_cli/commands/_semantic_layer_helpers.py +44 -0
  158. keboola_agent_cli/commands/_semantic_layer_reference_data.py +247 -0
  159. keboola_agent_cli/commands/agent.py +968 -0
  160. keboola_agent_cli/commands/branch.py +423 -0
  161. keboola_agent_cli/commands/changelog.py +168 -0
  162. keboola_agent_cli/commands/component.py +216 -0
  163. keboola_agent_cli/commands/config.py +2442 -0
  164. keboola_agent_cli/commands/context.py +1481 -0
  165. keboola_agent_cli/commands/data_app.py +1279 -0
  166. keboola_agent_cli/commands/dev_portal.py +584 -0
  167. keboola_agent_cli/commands/doctor.py +37 -0
  168. keboola_agent_cli/commands/encrypt.py +145 -0
  169. keboola_agent_cli/commands/feature.py +311 -0
  170. keboola_agent_cli/commands/flow.py +948 -0
  171. keboola_agent_cli/commands/http_client.py +157 -0
  172. keboola_agent_cli/commands/init.py +279 -0
  173. keboola_agent_cli/commands/job.py +661 -0
  174. keboola_agent_cli/commands/kai.py +301 -0
  175. keboola_agent_cli/commands/lineage.py +1464 -0
  176. keboola_agent_cli/commands/org.py +292 -0
  177. keboola_agent_cli/commands/permissions.py +360 -0
  178. keboola_agent_cli/commands/project.py +1192 -0
  179. keboola_agent_cli/commands/repl.py +243 -0
  180. keboola_agent_cli/commands/schedule.py +340 -0
  181. keboola_agent_cli/commands/search.py +178 -0
  182. keboola_agent_cli/commands/semantic_layer.py +939 -0
  183. keboola_agent_cli/commands/serve.py +272 -0
  184. keboola_agent_cli/commands/sharing.py +340 -0
  185. keboola_agent_cli/commands/storage.py +2630 -0
  186. keboola_agent_cli/commands/stream.py +266 -0
  187. keboola_agent_cli/commands/sync.py +1277 -0
  188. keboola_agent_cli/commands/tool.py +206 -0
  189. keboola_agent_cli/commands/version.py +186 -0
  190. keboola_agent_cli/commands/workspace.py +635 -0
  191. keboola_agent_cli/config_store.py +582 -0
  192. keboola_agent_cli/constants.py +528 -0
  193. keboola_agent_cli/data_science_client.py +342 -0
  194. keboola_agent_cli/dev_portal_client.py +323 -0
  195. keboola_agent_cli/errors.py +248 -0
  196. keboola_agent_cli/http_base.py +315 -0
  197. keboola_agent_cli/json_utils.py +126 -0
  198. keboola_agent_cli/lib.py +536 -0
  199. keboola_agent_cli/manage_client.py +324 -0
  200. keboola_agent_cli/metastore_client.py +214 -0
  201. keboola_agent_cli/models.py +427 -0
  202. keboola_agent_cli/output.py +1084 -0
  203. keboola_agent_cli/permissions.py +469 -0
  204. keboola_agent_cli/py.typed +3 -0
  205. keboola_agent_cli/result_models.py +271 -0
  206. keboola_agent_cli/server/__init__.py +34 -0
  207. keboola_agent_cli/server/agent_runner.py +1289 -0
  208. keboola_agent_cli/server/agents_store.py +325 -0
  209. keboola_agent_cli/server/app.py +764 -0
  210. keboola_agent_cli/server/auth.py +117 -0
  211. keboola_agent_cli/server/dependencies.py +149 -0
  212. keboola_agent_cli/server/pricing.py +303 -0
  213. keboola_agent_cli/server/routers/__init__.py +1 -0
  214. keboola_agent_cli/server/routers/agents.py +616 -0
  215. keboola_agent_cli/server/routers/ai_chat.py +129 -0
  216. keboola_agent_cli/server/routers/branches.py +133 -0
  217. keboola_agent_cli/server/routers/components.py +48 -0
  218. keboola_agent_cli/server/routers/configs.py +507 -0
  219. keboola_agent_cli/server/routers/data_apps.py +384 -0
  220. keboola_agent_cli/server/routers/dev_portal.py +67 -0
  221. keboola_agent_cli/server/routers/encrypt.py +35 -0
  222. keboola_agent_cli/server/routers/feature.py +179 -0
  223. keboola_agent_cli/server/routers/flows.py +204 -0
  224. keboola_agent_cli/server/routers/health.py +53 -0
  225. keboola_agent_cli/server/routers/jobs.py +175 -0
  226. keboola_agent_cli/server/routers/kai.py +80 -0
  227. keboola_agent_cli/server/routers/lineage.py +226 -0
  228. keboola_agent_cli/server/routers/mcp.py +70 -0
  229. keboola_agent_cli/server/routers/members.py +170 -0
  230. keboola_agent_cli/server/routers/org.py +96 -0
  231. keboola_agent_cli/server/routers/projects.py +106 -0
  232. keboola_agent_cli/server/routers/schedules.py +54 -0
  233. keboola_agent_cli/server/routers/search.py +30 -0
  234. keboola_agent_cli/server/routers/semantic_layer.py +650 -0
  235. keboola_agent_cli/server/routers/sharing.py +86 -0
  236. keboola_agent_cli/server/routers/storage.py +574 -0
  237. keboola_agent_cli/server/routers/stream.py +100 -0
  238. keboola_agent_cli/server/routers/workspaces.py +302 -0
  239. keboola_agent_cli/server/run_broadcaster.py +329 -0
  240. keboola_agent_cli/server/sse.py +25 -0
  241. keboola_agent_cli/services/__init__.py +0 -0
  242. keboola_agent_cli/services/_encryption.py +217 -0
  243. keboola_agent_cli/services/_semantic_layer_cascade.py +147 -0
  244. keboola_agent_cli/services/_semantic_layer_crud.py +382 -0
  245. keboola_agent_cli/services/_semantic_layer_internals.py +1078 -0
  246. keboola_agent_cli/services/_semantic_layer_lookup.py +181 -0
  247. keboola_agent_cli/services/_semantic_layer_reference_data.py +217 -0
  248. keboola_agent_cli/services/_sync_bindings.py +456 -0
  249. keboola_agent_cli/services/_sync_branch.py +191 -0
  250. keboola_agent_cli/services/_sync_bulk.py +228 -0
  251. keboola_agent_cli/services/_sync_clone.py +163 -0
  252. keboola_agent_cli/services/_sync_models.py +97 -0
  253. keboola_agent_cli/services/_sync_push_ops.py +369 -0
  254. keboola_agent_cli/services/_sync_storage.py +376 -0
  255. keboola_agent_cli/services/_sync_writeback.py +167 -0
  256. keboola_agent_cli/services/agent_service.py +458 -0
  257. keboola_agent_cli/services/base.py +175 -0
  258. keboola_agent_cli/services/branch_service.py +588 -0
  259. keboola_agent_cli/services/component_service.py +694 -0
  260. keboola_agent_cli/services/config_service.py +2099 -0
  261. keboola_agent_cli/services/data_app_git_service.py +224 -0
  262. keboola_agent_cli/services/data_app_service.py +2082 -0
  263. keboola_agent_cli/services/deep_lineage_service.py +1322 -0
  264. keboola_agent_cli/services/dev_portal_service.py +345 -0
  265. keboola_agent_cli/services/doctor_service.py +445 -0
  266. keboola_agent_cli/services/encrypt_service.py +87 -0
  267. keboola_agent_cli/services/feature_service.py +268 -0
  268. keboola_agent_cli/services/flow_service.py +769 -0
  269. keboola_agent_cli/services/flow_validation.py +188 -0
  270. keboola_agent_cli/services/http_forwarder_service.py +236 -0
  271. keboola_agent_cli/services/job_idempotency_store.py +285 -0
  272. keboola_agent_cli/services/job_service.py +797 -0
  273. keboola_agent_cli/services/kai_service.py +367 -0
  274. keboola_agent_cli/services/lineage_service.py +274 -0
  275. keboola_agent_cli/services/mcp_service.py +1498 -0
  276. keboola_agent_cli/services/mcp_transport.py +259 -0
  277. keboola_agent_cli/services/member_service.py +593 -0
  278. keboola_agent_cli/services/org_service.py +619 -0
  279. keboola_agent_cli/services/project_service.py +947 -0
  280. keboola_agent_cli/services/repo_validate_service.py +767 -0
  281. keboola_agent_cli/services/schedule_service.py +731 -0
  282. keboola_agent_cli/services/search_service.py +331 -0
  283. keboola_agent_cli/services/semantic_layer_service.py +1497 -0
  284. keboola_agent_cli/services/sharing_service.py +307 -0
  285. keboola_agent_cli/services/storage_service.py +2524 -0
  286. keboola_agent_cli/services/stream_service.py +395 -0
  287. keboola_agent_cli/services/sync_service.py +2244 -0
  288. keboola_agent_cli/services/variables_service.py +447 -0
  289. keboola_agent_cli/services/version_service.py +1038 -0
  290. keboola_agent_cli/services/workspace_service.py +1103 -0
  291. keboola_agent_cli/stream_client.py +217 -0
  292. keboola_agent_cli/sync/__init__.py +1 -0
  293. keboola_agent_cli/sync/branch_mapping.py +174 -0
  294. keboola_agent_cli/sync/clone.py +211 -0
  295. keboola_agent_cli/sync/code_extraction.py +655 -0
  296. keboola_agent_cli/sync/config_format.py +290 -0
  297. keboola_agent_cli/sync/diff_engine.py +566 -0
  298. keboola_agent_cli/sync/git_utils.py +93 -0
  299. keboola_agent_cli/sync/manifest.py +162 -0
  300. keboola_agent_cli/sync/naming.py +90 -0
  301. keboola_agent_cli/sync/secrets.py +62 -0
  302. keboola_agent_cli/sync/sql_split.py +134 -0
  303. keboola_cli-0.63.4.dist-info/METADATA +308 -0
  304. keboola_cli-0.63.4.dist-info/RECORD +306 -0
  305. keboola_cli-0.63.4.dist-info/WHEEL +4 -0
  306. keboola_cli-0.63.4.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,228 @@
1
+ """Multi-project (all-projects) pull/diff/push orchestration (from sync_service.py).
2
+
3
+ Free functions taking the ``SyncService`` so the public ``pull_all`` / ``diff_all``
4
+ / ``push_all`` methods stay thin delegators. Each fans out across the registered
5
+ projects in parallel, materialising one ``base_dir/<alias>/`` per project, and
6
+ collects per-project results without letting one project's failure abort the rest.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from concurrent.futures import ThreadPoolExecutor, as_completed
12
+ from pathlib import Path
13
+ from typing import TYPE_CHECKING, Any
14
+
15
+ from ..constants import (
16
+ DEFAULT_JOBS_PER_CONFIG,
17
+ DEFAULT_MAX_SAMPLES,
18
+ DEFAULT_SAMPLE_LIMIT,
19
+ KEBOOLA_DIR_NAME,
20
+ )
21
+ from ..errors import SyncConflictError
22
+
23
+ if TYPE_CHECKING:
24
+ from .sync_service import SyncService
25
+
26
+
27
+ def pull_all(
28
+ service: SyncService,
29
+ base_dir: Path,
30
+ force: bool = False,
31
+ dry_run: bool = False,
32
+ job_limit: int = DEFAULT_JOBS_PER_CONFIG,
33
+ no_storage: bool = False,
34
+ no_jobs: bool = False,
35
+ with_samples: bool = False,
36
+ sample_limit: int = DEFAULT_SAMPLE_LIMIT,
37
+ max_samples: int = DEFAULT_MAX_SAMPLES,
38
+ ) -> dict[str, Any]:
39
+ """Pull all registered projects in parallel.
40
+
41
+ For each project, creates ``base_dir/<alias>/`` and initializes if no
42
+ manifest exists yet, then pulls. Returns a dict with per-project results and
43
+ a summary.
44
+ """
45
+ projects = service.resolve_projects(None)
46
+ results: dict[str, Any] = {}
47
+ success_count = 0
48
+ failed_count = 0
49
+
50
+ def _worker(alias: str) -> None:
51
+ nonlocal success_count, failed_count
52
+ project_root = base_dir / alias
53
+ manifest_path = project_root / KEBOOLA_DIR_NAME / "manifest.json"
54
+ try:
55
+ if not manifest_path.exists():
56
+ service.init_sync(alias, project_root)
57
+ result = service.pull(
58
+ alias,
59
+ project_root,
60
+ force=force,
61
+ dry_run=dry_run,
62
+ job_limit=job_limit,
63
+ no_storage=no_storage,
64
+ no_jobs=no_jobs,
65
+ with_samples=with_samples,
66
+ sample_limit=sample_limit,
67
+ max_samples=max_samples,
68
+ )
69
+ results[alias] = result
70
+ success_count += 1
71
+ except SyncConflictError as exc:
72
+ # Preserve the structured conflict so a programmatic / AI consumer of
73
+ # `--all-projects --json` can tell a merge conflict apart from any
74
+ # other error and read the conflicting configs -- the single-project
75
+ # path emits the same code + conflicts.
76
+ results[alias] = {
77
+ "error": exc.message,
78
+ "error_code": exc.error_code,
79
+ "conflicts": exc.conflicts,
80
+ }
81
+ failed_count += 1
82
+ except Exception as exc:
83
+ results[alias] = {"error": str(exc)}
84
+ failed_count += 1
85
+
86
+ max_workers = min(len(projects), service._resolve_max_workers()) if projects else 1
87
+ with ThreadPoolExecutor(max_workers=max_workers) as executor:
88
+ futures = {executor.submit(_worker, alias): alias for alias in projects}
89
+ for future in as_completed(futures):
90
+ # Exceptions are captured inside _worker; this catches truly
91
+ # unexpected failures (e.g. threading errors).
92
+ try:
93
+ future.result()
94
+ except Exception as exc:
95
+ alias = futures[future]
96
+ results[alias] = {"error": str(exc)}
97
+ failed_count += 1
98
+
99
+ total = len(projects)
100
+ return {
101
+ "projects": results,
102
+ "summary": {
103
+ "total": total,
104
+ "success": success_count,
105
+ "failed": failed_count,
106
+ },
107
+ }
108
+
109
+
110
+ def diff_all(service: SyncService, base_dir: Path) -> dict[str, Any]:
111
+ """Diff all registered projects that have a local manifest.
112
+
113
+ Projects without an existing manifest are skipped. Returns a dict with
114
+ per-project diff results, a summary, and a skipped list.
115
+ """
116
+ projects = service.resolve_projects(None)
117
+ results: dict[str, Any] = {}
118
+ skipped: list[str] = []
119
+ success_count = 0
120
+ failed_count = 0
121
+
122
+ actionable: list[str] = []
123
+ for alias in projects:
124
+ manifest_path = base_dir / alias / KEBOOLA_DIR_NAME / "manifest.json"
125
+ if manifest_path.exists():
126
+ actionable.append(alias)
127
+ else:
128
+ skipped.append(alias)
129
+
130
+ def _worker(alias: str) -> None:
131
+ nonlocal success_count, failed_count
132
+ project_root = base_dir / alias
133
+ try:
134
+ results[alias] = service.diff(alias, project_root)
135
+ success_count += 1
136
+ except Exception as exc:
137
+ results[alias] = {"error": str(exc)}
138
+ failed_count += 1
139
+
140
+ max_workers = min(len(actionable), service._resolve_max_workers()) if actionable else 1
141
+ with ThreadPoolExecutor(max_workers=max_workers) as executor:
142
+ futures = {executor.submit(_worker, alias): alias for alias in actionable}
143
+ for future in as_completed(futures):
144
+ try:
145
+ future.result()
146
+ except Exception as exc:
147
+ alias = futures[future]
148
+ results[alias] = {"error": str(exc)}
149
+ failed_count += 1
150
+
151
+ total = len(projects)
152
+ return {
153
+ "projects": results,
154
+ "summary": {
155
+ "total": total,
156
+ "success": success_count,
157
+ "failed": failed_count,
158
+ "skipped": len(skipped),
159
+ },
160
+ "skipped": skipped,
161
+ }
162
+
163
+
164
+ def push_all(
165
+ service: SyncService,
166
+ base_dir: Path,
167
+ dry_run: bool = False,
168
+ force: bool = False,
169
+ allow_plaintext_fallback: bool = False,
170
+ ) -> dict[str, Any]:
171
+ """Push all registered projects that have a local manifest.
172
+
173
+ Projects without an existing manifest are skipped. Returns a dict with
174
+ per-project push results, a summary, and a skipped list.
175
+ """
176
+ projects = service.resolve_projects(None)
177
+ results: dict[str, Any] = {}
178
+ skipped: list[str] = []
179
+ success_count = 0
180
+ failed_count = 0
181
+
182
+ actionable: list[str] = []
183
+ for alias in projects:
184
+ manifest_path = base_dir / alias / KEBOOLA_DIR_NAME / "manifest.json"
185
+ if manifest_path.exists():
186
+ actionable.append(alias)
187
+ else:
188
+ skipped.append(alias)
189
+
190
+ def _worker(alias: str) -> None:
191
+ nonlocal success_count, failed_count
192
+ project_root = base_dir / alias
193
+ try:
194
+ result = service.push(
195
+ alias,
196
+ project_root,
197
+ dry_run=dry_run,
198
+ force=force,
199
+ allow_plaintext_fallback=allow_plaintext_fallback,
200
+ )
201
+ results[alias] = result
202
+ success_count += 1
203
+ except Exception as exc:
204
+ results[alias] = {"error": str(exc)}
205
+ failed_count += 1
206
+
207
+ max_workers = min(len(actionable), service._resolve_max_workers()) if actionable else 1
208
+ with ThreadPoolExecutor(max_workers=max_workers) as executor:
209
+ futures = {executor.submit(_worker, alias): alias for alias in actionable}
210
+ for future in as_completed(futures):
211
+ try:
212
+ future.result()
213
+ except Exception as exc:
214
+ alias = futures[future]
215
+ results[alias] = {"error": str(exc)}
216
+ failed_count += 1
217
+
218
+ total = len(projects)
219
+ return {
220
+ "projects": results,
221
+ "summary": {
222
+ "total": total,
223
+ "success": success_count,
224
+ "failed": failed_count,
225
+ "skipped": len(skipped),
226
+ },
227
+ "skipped": skipped,
228
+ }
@@ -0,0 +1,163 @@
1
+ """The ``sync clone`` composite orchestration (#426).
2
+
3
+ Extracted from ``sync_service.py``. ``SyncService.clone_project`` is a thin
4
+ delegator to :func:`clone_project` here; the pure, client-free override helpers
5
+ live in ``..sync.clone``. This function only orchestrates: validate the
6
+ reference, copy + re-point + parameterize the tree, run the fresh-target guard,
7
+ and push (so push Phase C/D remaps the flow/variable links).
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from pathlib import Path
13
+ from typing import TYPE_CHECKING, Any
14
+ from urllib.parse import urlparse
15
+
16
+ from ..errors import ConfigError
17
+ from ..sync.clone import (
18
+ apply_bucket_map,
19
+ apply_instance_rename,
20
+ apply_variable_values,
21
+ copy_reference_tree,
22
+ repoint_manifest_project,
23
+ )
24
+ from ..sync.manifest import load_manifest, save_manifest
25
+
26
+ if TYPE_CHECKING:
27
+ from .sync_service import SyncService
28
+
29
+
30
+ def clone_project(
31
+ service: SyncService,
32
+ source: str | Path,
33
+ target_alias: str,
34
+ target_dir: str | Path,
35
+ *,
36
+ overrides: dict[str, Any] | None = None,
37
+ dry_run: bool = False,
38
+ branch_override: int | None = None,
39
+ ) -> dict[str, Any]:
40
+ """Clone a reference synced project into a fresh target project (#426).
41
+
42
+ Copies the reference tree at ``source`` into ``target_dir``, applies the
43
+ declarative ``overrides`` (``bucket_map``, ``variable_values``,
44
+ ``instance_rename``), re-points the manifest at ``target_alias``'s project,
45
+ and pushes -- so every config is CREATEd fresh and its flow task / variable
46
+ links are remapped reference->ULID by push Phase C/D.
47
+
48
+ Cloning into a fresh target needs no id surgery: the reference's config ids
49
+ do not exist in the target remote, so the diff classifies every config as
50
+ ``added`` and ``created_id_map`` (keyed by the reference id) drives the link
51
+ remaps.
52
+
53
+ Idempotent: re-running with an existing ``target_dir`` skips the copy +
54
+ overrides and just pushes, so a clean clone then reports ``no_changes`` /
55
+ ``created: 0``.
56
+
57
+ Args:
58
+ service: The owning :class:`SyncService` (for ``resolve_projects`` /
59
+ ``diff`` / ``push``).
60
+ source: A reference synced project dir (must contain
61
+ ``.keboola/manifest.json``).
62
+ target_alias: The project alias to clone INTO (must be a fresh project on
63
+ the first clone).
64
+ target_dir: Where to materialise the clone.
65
+ overrides: Optional dict with ``bucket_map`` (old->new bucket id),
66
+ ``variable_values`` (var name->value), and ``instance_rename`` (old
67
+ path prefix->new path prefix) keys.
68
+ dry_run: Apply overrides + report the diff without pushing.
69
+ branch_override: Optional target branch id.
70
+
71
+ Returns:
72
+ A dict matching ``CloneResult``: ``status``
73
+ (``cloned`` | ``no_changes`` | ``dry_run``), ``target_alias``,
74
+ ``target_dir``, ``created``, ``bucket_rewrites``, ``variable_overrides``,
75
+ ``renamed_instances``, ``flow_task_remaps``, ``push`` (the underlying
76
+ push result), ``errors``.
77
+
78
+ Raises:
79
+ ConfigError: ``source`` is not a synced project, ``target_alias`` is
80
+ unknown, or (first clone) the target project already contains the
81
+ reference's configs (not a fresh target).
82
+ """
83
+ overrides = overrides or {}
84
+ bucket_map = overrides.get("bucket_map") or {}
85
+ variable_values = overrides.get("variable_values") or {}
86
+ instance_rename = overrides.get("instance_rename") or {}
87
+ source_dir = Path(source)
88
+ target_path = Path(target_dir)
89
+
90
+ # Validate the reference is a synced project.
91
+ try:
92
+ load_manifest(source_dir)
93
+ except FileNotFoundError as exc:
94
+ raise ConfigError(
95
+ f"Source {source_dir} is not a synced project (no "
96
+ ".keboola/manifest.json). Run `kbagent sync pull` there first."
97
+ ) from exc
98
+
99
+ target_project = service.resolve_projects([target_alias])[target_alias]
100
+
101
+ bucket_rewrites = 0
102
+ variable_overrides = 0
103
+ renamed_instances = 0
104
+ already_cloned = target_path.exists()
105
+
106
+ if not already_cloned:
107
+ copy_reference_tree(source_dir, target_path)
108
+ manifest = load_manifest(target_path)
109
+ repoint_manifest_project(
110
+ manifest,
111
+ project_id=target_project.project_id or 0,
112
+ api_host=urlparse(target_project.stack_url).netloc,
113
+ )
114
+ bucket_rewrites = apply_bucket_map(target_path, manifest, bucket_map)
115
+ variable_overrides = apply_variable_values(target_path, manifest, variable_values)
116
+ renamed_instances = apply_instance_rename(target_path, manifest, instance_rename)
117
+ save_manifest(target_path, manifest)
118
+
119
+ override_counts = {
120
+ "bucket_rewrites": bucket_rewrites,
121
+ "variable_overrides": variable_overrides,
122
+ "renamed_instances": renamed_instances,
123
+ }
124
+
125
+ if dry_run:
126
+ diff_result = service.diff(target_alias, target_path, branch_override=branch_override)
127
+ return {
128
+ "status": "dry_run",
129
+ "target_alias": target_alias,
130
+ "target_dir": str(target_path),
131
+ "summary": diff_result["summary"],
132
+ **override_counts,
133
+ }
134
+
135
+ # Fresh-target guard: on a first clone every one of OUR configs must be a
136
+ # CREATE. A non-'added' change means a reference id already exists in the
137
+ # target -> not a fresh target; refuse rather than UPDATE a stranger's config.
138
+ if not already_cloned:
139
+ diff_result = service.diff(target_alias, target_path, branch_override=branch_override)
140
+ collisions = [
141
+ f"{c.get('component_id')}/{c.get('config_id')}"
142
+ for c in diff_result["changes"]
143
+ if c["change_type"] != "added"
144
+ ]
145
+ if collisions:
146
+ raise ConfigError(
147
+ "Clone requires a fresh target project, but these configs already "
148
+ f"exist there: {', '.join(collisions[:10])}. Use a new/empty target "
149
+ "project, or remove the existing configs first."
150
+ )
151
+
152
+ push_result = service.push(target_alias, target_path, branch_override=branch_override)
153
+ status = "no_changes" if push_result.get("status") == "no_changes" else "cloned"
154
+ return {
155
+ "status": status,
156
+ "target_alias": target_alias,
157
+ "target_dir": str(target_path),
158
+ "created": push_result.get("created", 0),
159
+ "flow_task_remaps": push_result.get("flow_task_remaps", 0),
160
+ "push": push_result,
161
+ "errors": push_result.get("errors", []),
162
+ **override_counts,
163
+ }
@@ -0,0 +1,97 @@
1
+ """Shared dataclasses + component-id constants for the sync service.
2
+
3
+ Extracted from ``sync_service.py`` (which had grown to ~4000 lines, far past the
4
+ 1500-LOC ceiling) so the binding helpers in ``_sync_bindings.py`` can import them
5
+ without a circular import. ``sync_service`` re-exports the names that external
6
+ callers/tests rely on (e.g. ``CreatedConfig``), so the public surface is
7
+ unchanged.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from dataclasses import dataclass, field
13
+ from pathlib import Path
14
+
15
+ from ..sync.manifest import ManifestConfiguration
16
+
17
+ # Sibling component that backs a transformation's variable links. A
18
+ # transformation references it via ``configuration.variables_id`` (the config)
19
+ # and ``configuration.variables_values_id`` (a row id).
20
+ VARIABLES_COMPONENT_ID = "keboola.variables"
21
+
22
+ # Conditional-flow component. A flow runs other configs via
23
+ # ``configuration.tasks[].task.configId`` (job-type tasks); the Phase-D backfill
24
+ # remaps those ids placeholder/source -> ULID after a fresh create (e.g. clone).
25
+ FLOW_COMPONENT_ID = "keboola.flow"
26
+
27
+
28
+ @dataclass
29
+ class WritebackResult:
30
+ """Outcome of recording a freshly-created config in the manifest.
31
+
32
+ ``previous_id`` is the manifest entry's id **before** the placeholder ->
33
+ ULID overwrite (empty string when a brand-new entry was appended). The
34
+ create pass uses it to key ``created_id_map`` so row parents and
35
+ transformation variable links can be remapped placeholder -> ULID.
36
+ """
37
+
38
+ entry: ManifestConfiguration
39
+ previous_id: str
40
+
41
+
42
+ @dataclass
43
+ class CreatedConfig:
44
+ """A config created during a single ``push`` create pass.
45
+
46
+ Carries just enough to drive the Phase-C variable-link backfill: the
47
+ component id, the API-assigned ULID, and the on-disk directory holding
48
+ the (post-writeback) ``_config.yml``.
49
+ """
50
+
51
+ component_id: str
52
+ config_id: str
53
+ config_dir: Path
54
+
55
+
56
+ @dataclass
57
+ class VariableBindingResult:
58
+ """Outcome of the Phase-C variable-link backfill.
59
+
60
+ ``configs_rewritten`` counts transformations whose remote configuration +
61
+ local ``_configuration_extra`` were rebound to ULIDs (drives the
62
+ manifest-dirty flag). ``errors`` accumulates unresolved links so the push
63
+ envelope surfaces them instead of leaving a broken link silently.
64
+ """
65
+
66
+ errors: list[dict[str, str]] = field(default_factory=list)
67
+ configs_rewritten: int = 0
68
+
69
+
70
+ @dataclass
71
+ class FlowBindingResult:
72
+ """Outcome of the Phase-D flow-task-link backfill (#426).
73
+
74
+ ``configs_rewritten`` counts flows whose task ``configId``s were remapped to
75
+ ULIDs (drives the manifest-dirty flag); ``tasks_remapped`` is the total task
76
+ references rewritten; ``errors`` accumulates PUT failures so the push
77
+ envelope surfaces them.
78
+ """
79
+
80
+ errors: list[dict[str, str]] = field(default_factory=list)
81
+ configs_rewritten: int = 0
82
+ tasks_remapped: int = 0
83
+
84
+
85
+ @dataclass
86
+ class LocalConfigHashes:
87
+ """Hashes describing a config dir's on-disk state after a push.
88
+
89
+ ``file_hash`` is the ``_config.yml`` content hash, ``cfg_hash`` the
90
+ normalized config hash (see :func:`config_hash`), and ``extra_hashes``
91
+ maps each extracted code/companion file to its hash. Stored on the
92
+ manifest entry so the next ``sync diff`` recognises local == remote.
93
+ """
94
+
95
+ file_hash: str
96
+ cfg_hash: str
97
+ extra_hashes: dict[str, str] = field(default_factory=dict)