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.
- keboola_agent_cli/__init__.py +34 -0
- keboola_agent_cli/__main__.py +5 -0
- keboola_agent_cli/_ui_dist/assets/arc-DhFYIddx.js +2 -0
- keboola_agent_cli/_ui_dist/assets/arc-DhFYIddx.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/architecture-7EHR7CIX-hNCijx_H.js +1 -0
- keboola_agent_cli/_ui_dist/assets/architectureDiagram-3BPJPVTR-C6hUlprM.js +37 -0
- keboola_agent_cli/_ui_dist/assets/architectureDiagram-3BPJPVTR-C6hUlprM.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/array-BifhSqXX.js +2 -0
- keboola_agent_cli/_ui_dist/assets/array-BifhSqXX.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/blockDiagram-GPEHLZMM-DC7qY9i4.js +133 -0
- keboola_agent_cli/_ui_dist/assets/blockDiagram-GPEHLZMM-DC7qY9i4.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/c4Diagram-AAUBKEIU-5Lh44evt.js +11 -0
- keboola_agent_cli/_ui_dist/assets/c4Diagram-AAUBKEIU-5Lh44evt.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/channel-DBMrXlxx.js +2 -0
- keboola_agent_cli/_ui_dist/assets/channel-DBMrXlxx.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-2J33WTMH-Coy82EBh.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-2J33WTMH-Coy82EBh.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-3OPIFGDE-BQC5CRHI.js +63 -0
- keboola_agent_cli/_ui_dist/assets/chunk-3OPIFGDE-BQC5CRHI.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-4BX2VUAB-DUuEt70o.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-4BX2VUAB-DUuEt70o.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-55IACEB6-BvR-6chF.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-55IACEB6-BvR-6chF.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-5ZQYHXKU-BjcTN7ul.js +3 -0
- keboola_agent_cli/_ui_dist/assets/chunk-5ZQYHXKU-BjcTN7ul.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-727SXJPM-C0zxqqRN.js +207 -0
- keboola_agent_cli/_ui_dist/assets/chunk-727SXJPM-C0zxqqRN.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-AQP2D5EJ-CXf7rIlZ.js +232 -0
- keboola_agent_cli/_ui_dist/assets/chunk-AQP2D5EJ-CXf7rIlZ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-BSJP7CBP-Oj_FO9Q7.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-BSJP7CBP-Oj_FO9Q7.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-CSCIHK7Q-CcTsLrFc.js +124 -0
- keboola_agent_cli/_ui_dist/assets/chunk-CSCIHK7Q-CcTsLrFc.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-FMBD7UC4-FH-zLkkW.js +16 -0
- keboola_agent_cli/_ui_dist/assets/chunk-FMBD7UC4-FH-zLkkW.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-L5ZTLDWV-B1Ky_e7O.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-L5ZTLDWV-B1Ky_e7O.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-ND2GUHAM-BHz1rpbm.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-ND2GUHAM-BHz1rpbm.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NNHCCRGN-DlpIbxXb.js +160 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NNHCCRGN-DlpIbxXb.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NZK2D7GU-tnrSoegS.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-NZK2D7GU-tnrSoegS.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-O5CBEL6O-DxxqDH0l.js +71 -0
- keboola_agent_cli/_ui_dist/assets/chunk-O5CBEL6O-DxxqDH0l.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/chunk-QZHKN3VN-CSjc2gjj.js +2 -0
- keboola_agent_cli/_ui_dist/assets/chunk-QZHKN3VN-CSjc2gjj.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-4FO5ZUOK-BuZcZu85.js +2 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-4FO5ZUOK-BuZcZu85.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-v2-Q7XG4LA2-BuZcZu85.js +2 -0
- keboola_agent_cli/_ui_dist/assets/classDiagram-v2-Q7XG4LA2-BuZcZu85.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/cose-bilkent-S5V4N54A-Y0L8LDMa.js +2 -0
- keboola_agent_cli/_ui_dist/assets/cose-bilkent-S5V4N54A-Y0L8LDMa.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/cytoscape.esm-C8YCVR3_.js +322 -0
- keboola_agent_cli/_ui_dist/assets/cytoscape.esm-C8YCVR3_.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/dagre-BM42HDAG-UZ-9BTqF.js +5 -0
- keboola_agent_cli/_ui_dist/assets/dagre-BM42HDAG-UZ-9BTqF.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/dagre-Bx709z4p.js +2 -0
- keboola_agent_cli/_ui_dist/assets/dagre-Bx709z4p.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/defaultLocale-C8Fc0cco.js +2 -0
- keboola_agent_cli/_ui_dist/assets/defaultLocale-C8Fc0cco.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-2AECGRRQ-DoDQ60wi.js +44 -0
- keboola_agent_cli/_ui_dist/assets/diagram-2AECGRRQ-DoDQ60wi.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-5GNKFQAL-CMGFxpUs.js +11 -0
- keboola_agent_cli/_ui_dist/assets/diagram-5GNKFQAL-CMGFxpUs.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-KO2AKTUF-1uGDa-Iu.js +4 -0
- keboola_agent_cli/_ui_dist/assets/diagram-KO2AKTUF-1uGDa-Iu.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-LMA3HP47-XtFH7B51.js +25 -0
- keboola_agent_cli/_ui_dist/assets/diagram-LMA3HP47-XtFH7B51.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/diagram-OG6HWLK6-B4_Te1T5.js +25 -0
- keboola_agent_cli/_ui_dist/assets/diagram-OG6HWLK6-B4_Te1T5.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/dist-Di6zmlv0.js +2 -0
- keboola_agent_cli/_ui_dist/assets/dist-Di6zmlv0.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/erDiagram-TEJ5UH35-NjQkrdFt.js +86 -0
- keboola_agent_cli/_ui_dist/assets/erDiagram-TEJ5UH35-NjQkrdFt.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/eventmodeling-FCH6USID-BrJMIks8.js +1 -0
- keboola_agent_cli/_ui_dist/assets/flowDiagram-I6XJVG4X-CIr8DWl7.js +163 -0
- keboola_agent_cli/_ui_dist/assets/flowDiagram-I6XJVG4X-CIr8DWl7.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/ganttDiagram-6RSMTGT7-C1VY_xbQ.js +293 -0
- keboola_agent_cli/_ui_dist/assets/ganttDiagram-6RSMTGT7-C1VY_xbQ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/gitGraph-WXDBUCRP-COacYjo-.js +1 -0
- keboola_agent_cli/_ui_dist/assets/gitGraphDiagram-PVQCEYII-DQT8-kg2.js +107 -0
- keboola_agent_cli/_ui_dist/assets/gitGraphDiagram-PVQCEYII-DQT8-kg2.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/graphlib-B8gBHxth.js +2 -0
- keboola_agent_cli/_ui_dist/assets/graphlib-B8gBHxth.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/index-CMq50kkV.css +1 -0
- keboola_agent_cli/_ui_dist/assets/index-D8W97DAz.js +118 -0
- keboola_agent_cli/_ui_dist/assets/index-D8W97DAz.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/info-J43DQDTF-DdCTRIzU.js +1 -0
- keboola_agent_cli/_ui_dist/assets/infoDiagram-5YYISTIA-C77rsoTp.js +3 -0
- keboola_agent_cli/_ui_dist/assets/infoDiagram-5YYISTIA-C77rsoTp.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/init-D6jRqBbL.js +2 -0
- keboola_agent_cli/_ui_dist/assets/init-D6jRqBbL.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/ishikawaDiagram-YF4QCWOH-BcTbXaLy.js +71 -0
- keboola_agent_cli/_ui_dist/assets/ishikawaDiagram-YF4QCWOH-BcTbXaLy.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/journeyDiagram-JHISSGLW-BejeAJQ_.js +140 -0
- keboola_agent_cli/_ui_dist/assets/journeyDiagram-JHISSGLW-BejeAJQ_.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/kanban-definition-UN3LZRKU-BRNz_UrH.js +90 -0
- keboola_agent_cli/_ui_dist/assets/kanban-definition-UN3LZRKU-BRNz_UrH.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/katex-C4eR7coU.js +258 -0
- keboola_agent_cli/_ui_dist/assets/katex-C4eR7coU.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/line-CzAQKFbJ.js +2 -0
- keboola_agent_cli/_ui_dist/assets/line-CzAQKFbJ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/linear-DUNFFdck.js +2 -0
- keboola_agent_cli/_ui_dist/assets/linear-DUNFFdck.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/mermaid-parser.core-CpuBOkFa.js +5 -0
- keboola_agent_cli/_ui_dist/assets/mermaid-parser.core-CpuBOkFa.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/mindmap-definition-RKZ34NQL-9EJQNjH0.js +97 -0
- keboola_agent_cli/_ui_dist/assets/mindmap-definition-RKZ34NQL-9EJQNjH0.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/ordinal-hYBb2elL.js +2 -0
- keboola_agent_cli/_ui_dist/assets/ordinal-hYBb2elL.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/packet-YPE3B663-DLiiw_B2.js +1 -0
- keboola_agent_cli/_ui_dist/assets/path-BWPyau1x.js +2 -0
- keboola_agent_cli/_ui_dist/assets/path-BWPyau1x.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/pie-LRSECV5Y-CRoO8G1g.js +1 -0
- keboola_agent_cli/_ui_dist/assets/pieDiagram-4H26LBE5-XH4cy6Cb.js +31 -0
- keboola_agent_cli/_ui_dist/assets/pieDiagram-4H26LBE5-XH4cy6Cb.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/quadrantDiagram-W4KKPZXB-fdhc93U8.js +8 -0
- keboola_agent_cli/_ui_dist/assets/quadrantDiagram-W4KKPZXB-fdhc93U8.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/radar-GUYGQ44K-DAlLVJHm.js +1 -0
- keboola_agent_cli/_ui_dist/assets/requirementDiagram-4Y6WPE33-a94eP3R9.js +85 -0
- keboola_agent_cli/_ui_dist/assets/requirementDiagram-4Y6WPE33-a94eP3R9.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/rough.esm-CSKSodPl.js +2 -0
- keboola_agent_cli/_ui_dist/assets/rough.esm-CSKSodPl.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/sankeyDiagram-5OEKKPKP-jcBa02sp.js +41 -0
- keboola_agent_cli/_ui_dist/assets/sankeyDiagram-5OEKKPKP-jcBa02sp.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/sequenceDiagram-3UESZ5HK-A5-GGM-e.js +163 -0
- keboola_agent_cli/_ui_dist/assets/sequenceDiagram-3UESZ5HK-A5-GGM-e.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/src-ZI-V_AF0.js +2 -0
- keboola_agent_cli/_ui_dist/assets/src-ZI-V_AF0.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-AJRCARHV-BKAA5rqE.js +2 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-AJRCARHV-BKAA5rqE.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-v2-BHNVJYJU-DnJwJBsE.js +2 -0
- keboola_agent_cli/_ui_dist/assets/stateDiagram-v2-BHNVJYJU-DnJwJBsE.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/timeline-definition-PNZ67QCA-Cy39jp8b.js +121 -0
- keboola_agent_cli/_ui_dist/assets/timeline-definition-PNZ67QCA-Cy39jp8b.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/treeView-BLDUP644-DbLYl23-.js +1 -0
- keboola_agent_cli/_ui_dist/assets/treemap-LRROVOQU-Bp0eGlOt.js +1 -0
- keboola_agent_cli/_ui_dist/assets/vennDiagram-CIIHVFJN-BGECKubd.js +35 -0
- keboola_agent_cli/_ui_dist/assets/vennDiagram-CIIHVFJN-BGECKubd.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/wardley-L42UT6IY-D4yH4jqS.js +1 -0
- keboola_agent_cli/_ui_dist/assets/wardleyDiagram-YWT4CUSO-D6XRG3cZ.js +79 -0
- keboola_agent_cli/_ui_dist/assets/wardleyDiagram-YWT4CUSO-D6XRG3cZ.js.map +1 -0
- keboola_agent_cli/_ui_dist/assets/xychartDiagram-2RQKCTM6-DRre-pfZ.js +8 -0
- keboola_agent_cli/_ui_dist/assets/xychartDiagram-2RQKCTM6-DRre-pfZ.js.map +1 -0
- keboola_agent_cli/_ui_dist/index.html +50 -0
- keboola_agent_cli/ai_client.py +83 -0
- keboola_agent_cli/auto_update.py +550 -0
- keboola_agent_cli/changelog.py +1198 -0
- keboola_agent_cli/cli.py +448 -0
- keboola_agent_cli/client.py +3422 -0
- keboola_agent_cli/commands/__init__.py +0 -0
- keboola_agent_cli/commands/_data_app_git.py +343 -0
- keboola_agent_cli/commands/_helpers.py +377 -0
- keboola_agent_cli/commands/_metadata_input.py +49 -0
- keboola_agent_cli/commands/_semantic_layer_crud.py +632 -0
- keboola_agent_cli/commands/_semantic_layer_helpers.py +44 -0
- keboola_agent_cli/commands/_semantic_layer_reference_data.py +247 -0
- keboola_agent_cli/commands/agent.py +968 -0
- keboola_agent_cli/commands/branch.py +423 -0
- keboola_agent_cli/commands/changelog.py +168 -0
- keboola_agent_cli/commands/component.py +216 -0
- keboola_agent_cli/commands/config.py +2442 -0
- keboola_agent_cli/commands/context.py +1481 -0
- keboola_agent_cli/commands/data_app.py +1279 -0
- keboola_agent_cli/commands/dev_portal.py +584 -0
- keboola_agent_cli/commands/doctor.py +37 -0
- keboola_agent_cli/commands/encrypt.py +145 -0
- keboola_agent_cli/commands/feature.py +311 -0
- keboola_agent_cli/commands/flow.py +948 -0
- keboola_agent_cli/commands/http_client.py +157 -0
- keboola_agent_cli/commands/init.py +279 -0
- keboola_agent_cli/commands/job.py +661 -0
- keboola_agent_cli/commands/kai.py +301 -0
- keboola_agent_cli/commands/lineage.py +1464 -0
- keboola_agent_cli/commands/org.py +292 -0
- keboola_agent_cli/commands/permissions.py +360 -0
- keboola_agent_cli/commands/project.py +1192 -0
- keboola_agent_cli/commands/repl.py +243 -0
- keboola_agent_cli/commands/schedule.py +340 -0
- keboola_agent_cli/commands/search.py +178 -0
- keboola_agent_cli/commands/semantic_layer.py +939 -0
- keboola_agent_cli/commands/serve.py +272 -0
- keboola_agent_cli/commands/sharing.py +340 -0
- keboola_agent_cli/commands/storage.py +2630 -0
- keboola_agent_cli/commands/stream.py +266 -0
- keboola_agent_cli/commands/sync.py +1277 -0
- keboola_agent_cli/commands/tool.py +206 -0
- keboola_agent_cli/commands/version.py +186 -0
- keboola_agent_cli/commands/workspace.py +635 -0
- keboola_agent_cli/config_store.py +582 -0
- keboola_agent_cli/constants.py +528 -0
- keboola_agent_cli/data_science_client.py +342 -0
- keboola_agent_cli/dev_portal_client.py +323 -0
- keboola_agent_cli/errors.py +248 -0
- keboola_agent_cli/http_base.py +315 -0
- keboola_agent_cli/json_utils.py +126 -0
- keboola_agent_cli/lib.py +536 -0
- keboola_agent_cli/manage_client.py +324 -0
- keboola_agent_cli/metastore_client.py +214 -0
- keboola_agent_cli/models.py +427 -0
- keboola_agent_cli/output.py +1084 -0
- keboola_agent_cli/permissions.py +469 -0
- keboola_agent_cli/py.typed +3 -0
- keboola_agent_cli/result_models.py +271 -0
- keboola_agent_cli/server/__init__.py +34 -0
- keboola_agent_cli/server/agent_runner.py +1289 -0
- keboola_agent_cli/server/agents_store.py +325 -0
- keboola_agent_cli/server/app.py +764 -0
- keboola_agent_cli/server/auth.py +117 -0
- keboola_agent_cli/server/dependencies.py +149 -0
- keboola_agent_cli/server/pricing.py +303 -0
- keboola_agent_cli/server/routers/__init__.py +1 -0
- keboola_agent_cli/server/routers/agents.py +616 -0
- keboola_agent_cli/server/routers/ai_chat.py +129 -0
- keboola_agent_cli/server/routers/branches.py +133 -0
- keboola_agent_cli/server/routers/components.py +48 -0
- keboola_agent_cli/server/routers/configs.py +507 -0
- keboola_agent_cli/server/routers/data_apps.py +384 -0
- keboola_agent_cli/server/routers/dev_portal.py +67 -0
- keboola_agent_cli/server/routers/encrypt.py +35 -0
- keboola_agent_cli/server/routers/feature.py +179 -0
- keboola_agent_cli/server/routers/flows.py +204 -0
- keboola_agent_cli/server/routers/health.py +53 -0
- keboola_agent_cli/server/routers/jobs.py +175 -0
- keboola_agent_cli/server/routers/kai.py +80 -0
- keboola_agent_cli/server/routers/lineage.py +226 -0
- keboola_agent_cli/server/routers/mcp.py +70 -0
- keboola_agent_cli/server/routers/members.py +170 -0
- keboola_agent_cli/server/routers/org.py +96 -0
- keboola_agent_cli/server/routers/projects.py +106 -0
- keboola_agent_cli/server/routers/schedules.py +54 -0
- keboola_agent_cli/server/routers/search.py +30 -0
- keboola_agent_cli/server/routers/semantic_layer.py +650 -0
- keboola_agent_cli/server/routers/sharing.py +86 -0
- keboola_agent_cli/server/routers/storage.py +574 -0
- keboola_agent_cli/server/routers/stream.py +100 -0
- keboola_agent_cli/server/routers/workspaces.py +302 -0
- keboola_agent_cli/server/run_broadcaster.py +329 -0
- keboola_agent_cli/server/sse.py +25 -0
- keboola_agent_cli/services/__init__.py +0 -0
- keboola_agent_cli/services/_encryption.py +217 -0
- keboola_agent_cli/services/_semantic_layer_cascade.py +147 -0
- keboola_agent_cli/services/_semantic_layer_crud.py +382 -0
- keboola_agent_cli/services/_semantic_layer_internals.py +1078 -0
- keboola_agent_cli/services/_semantic_layer_lookup.py +181 -0
- keboola_agent_cli/services/_semantic_layer_reference_data.py +217 -0
- keboola_agent_cli/services/_sync_bindings.py +456 -0
- keboola_agent_cli/services/_sync_branch.py +191 -0
- keboola_agent_cli/services/_sync_bulk.py +228 -0
- keboola_agent_cli/services/_sync_clone.py +163 -0
- keboola_agent_cli/services/_sync_models.py +97 -0
- keboola_agent_cli/services/_sync_push_ops.py +369 -0
- keboola_agent_cli/services/_sync_storage.py +376 -0
- keboola_agent_cli/services/_sync_writeback.py +167 -0
- keboola_agent_cli/services/agent_service.py +458 -0
- keboola_agent_cli/services/base.py +175 -0
- keboola_agent_cli/services/branch_service.py +588 -0
- keboola_agent_cli/services/component_service.py +694 -0
- keboola_agent_cli/services/config_service.py +2099 -0
- keboola_agent_cli/services/data_app_git_service.py +224 -0
- keboola_agent_cli/services/data_app_service.py +2082 -0
- keboola_agent_cli/services/deep_lineage_service.py +1322 -0
- keboola_agent_cli/services/dev_portal_service.py +345 -0
- keboola_agent_cli/services/doctor_service.py +445 -0
- keboola_agent_cli/services/encrypt_service.py +87 -0
- keboola_agent_cli/services/feature_service.py +268 -0
- keboola_agent_cli/services/flow_service.py +769 -0
- keboola_agent_cli/services/flow_validation.py +188 -0
- keboola_agent_cli/services/http_forwarder_service.py +236 -0
- keboola_agent_cli/services/job_idempotency_store.py +285 -0
- keboola_agent_cli/services/job_service.py +797 -0
- keboola_agent_cli/services/kai_service.py +367 -0
- keboola_agent_cli/services/lineage_service.py +274 -0
- keboola_agent_cli/services/mcp_service.py +1498 -0
- keboola_agent_cli/services/mcp_transport.py +259 -0
- keboola_agent_cli/services/member_service.py +593 -0
- keboola_agent_cli/services/org_service.py +619 -0
- keboola_agent_cli/services/project_service.py +947 -0
- keboola_agent_cli/services/repo_validate_service.py +767 -0
- keboola_agent_cli/services/schedule_service.py +731 -0
- keboola_agent_cli/services/search_service.py +331 -0
- keboola_agent_cli/services/semantic_layer_service.py +1497 -0
- keboola_agent_cli/services/sharing_service.py +307 -0
- keboola_agent_cli/services/storage_service.py +2524 -0
- keboola_agent_cli/services/stream_service.py +395 -0
- keboola_agent_cli/services/sync_service.py +2244 -0
- keboola_agent_cli/services/variables_service.py +447 -0
- keboola_agent_cli/services/version_service.py +1038 -0
- keboola_agent_cli/services/workspace_service.py +1103 -0
- keboola_agent_cli/stream_client.py +217 -0
- keboola_agent_cli/sync/__init__.py +1 -0
- keboola_agent_cli/sync/branch_mapping.py +174 -0
- keboola_agent_cli/sync/clone.py +211 -0
- keboola_agent_cli/sync/code_extraction.py +655 -0
- keboola_agent_cli/sync/config_format.py +290 -0
- keboola_agent_cli/sync/diff_engine.py +566 -0
- keboola_agent_cli/sync/git_utils.py +93 -0
- keboola_agent_cli/sync/manifest.py +162 -0
- keboola_agent_cli/sync/naming.py +90 -0
- keboola_agent_cli/sync/secrets.py +62 -0
- keboola_agent_cli/sync/sql_split.py +134 -0
- keboola_cli-0.63.4.dist-info/METADATA +308 -0
- keboola_cli-0.63.4.dist-info/RECORD +306 -0
- keboola_cli-0.63.4.dist-info/WHEEL +4 -0
- keboola_cli-0.63.4.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"""MCP tool commands - list and call tools from keboola-mcp-server.
|
|
2
|
+
|
|
3
|
+
Thin CLI layer: parses arguments, calls McpService, formats output.
|
|
4
|
+
No business logic belongs here.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
import typer
|
|
12
|
+
|
|
13
|
+
from ..config_store import ConfigStore
|
|
14
|
+
from ..errors import ConfigError, ErrorCode
|
|
15
|
+
from ..output import OutputFormatter, format_tool_result, format_tools_table
|
|
16
|
+
from ._helpers import (
|
|
17
|
+
check_cli_permission,
|
|
18
|
+
emit_project_warnings,
|
|
19
|
+
get_formatter,
|
|
20
|
+
get_service,
|
|
21
|
+
resolve_branch,
|
|
22
|
+
validate_branch_requires_project,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
tool_app = typer.Typer(help="MCP tools - interact with Keboola via MCP server")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@tool_app.callback(invoke_without_command=True)
|
|
29
|
+
def _tool_permission_check(ctx: typer.Context) -> None:
|
|
30
|
+
check_cli_permission(ctx, "tool")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _read_input(value: str, formatter: OutputFormatter) -> str:
|
|
34
|
+
"""Read tool input from a string, file (@path), or stdin (-).
|
|
35
|
+
|
|
36
|
+
Supports:
|
|
37
|
+
- Inline JSON string: '{"key": "value"}'
|
|
38
|
+
- File reference: @payload.json or @/absolute/path.json
|
|
39
|
+
- Stdin: -
|
|
40
|
+
"""
|
|
41
|
+
if value == "-":
|
|
42
|
+
return sys.stdin.read()
|
|
43
|
+
|
|
44
|
+
if value.startswith("@"):
|
|
45
|
+
file_path = Path(value[1:])
|
|
46
|
+
if not file_path.is_file():
|
|
47
|
+
formatter.error(
|
|
48
|
+
message=f"Input file not found: {file_path}",
|
|
49
|
+
error_code=ErrorCode.INVALID_ARGUMENT,
|
|
50
|
+
)
|
|
51
|
+
raise typer.Exit(code=2) from None
|
|
52
|
+
return file_path.read_text(encoding="utf-8")
|
|
53
|
+
|
|
54
|
+
return value
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _resolve_branch_str(
|
|
58
|
+
config_store: ConfigStore,
|
|
59
|
+
formatter: OutputFormatter,
|
|
60
|
+
project: str | None,
|
|
61
|
+
branch: int | None,
|
|
62
|
+
) -> tuple[str | None, str | None]:
|
|
63
|
+
"""Resolve branch and return branch_id as string (for MCP service compatibility)."""
|
|
64
|
+
proj, branch_id = resolve_branch(config_store, formatter, project, branch)
|
|
65
|
+
return proj, str(branch_id) if branch_id is not None else None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@tool_app.command("list")
|
|
69
|
+
def tool_list(
|
|
70
|
+
ctx: typer.Context,
|
|
71
|
+
project: str | None = typer.Option(
|
|
72
|
+
None,
|
|
73
|
+
"--project",
|
|
74
|
+
help="Project alias to query tools from (uses first available if not set)",
|
|
75
|
+
),
|
|
76
|
+
branch: int | None = typer.Option(
|
|
77
|
+
None,
|
|
78
|
+
"--branch",
|
|
79
|
+
help="Development branch ID (requires --project or active branch)",
|
|
80
|
+
),
|
|
81
|
+
) -> None:
|
|
82
|
+
"""List available MCP tools from the keboola-mcp-server."""
|
|
83
|
+
formatter = get_formatter(ctx)
|
|
84
|
+
service = get_service(ctx, "mcp_service")
|
|
85
|
+
config_store: ConfigStore = ctx.obj["config_store"]
|
|
86
|
+
|
|
87
|
+
validate_branch_requires_project(formatter, branch, project)
|
|
88
|
+
|
|
89
|
+
# Auto-resolve active branch from config
|
|
90
|
+
project, branch_str = _resolve_branch_str(config_store, formatter, project, branch)
|
|
91
|
+
|
|
92
|
+
if branch_str and not project:
|
|
93
|
+
formatter.error(
|
|
94
|
+
message="--branch requires --project (branch ID is per-project)",
|
|
95
|
+
error_code=ErrorCode.INVALID_ARGUMENT,
|
|
96
|
+
)
|
|
97
|
+
raise typer.Exit(code=2) from None
|
|
98
|
+
|
|
99
|
+
aliases = [project] if project else None
|
|
100
|
+
|
|
101
|
+
try:
|
|
102
|
+
result = service.list_tools(aliases=aliases, branch_id=branch_str)
|
|
103
|
+
except ConfigError as exc:
|
|
104
|
+
formatter.error(message=exc.message, error_code=ErrorCode.CONFIG_ERROR)
|
|
105
|
+
raise typer.Exit(code=5) from None
|
|
106
|
+
|
|
107
|
+
if formatter.json_mode:
|
|
108
|
+
formatter.output(result)
|
|
109
|
+
else:
|
|
110
|
+
format_tools_table(formatter.console, result)
|
|
111
|
+
emit_project_warnings(formatter, result)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@tool_app.command("call")
|
|
115
|
+
def tool_call(
|
|
116
|
+
ctx: typer.Context,
|
|
117
|
+
tool_name: str = typer.Argument(help="Name of the MCP tool to call"),
|
|
118
|
+
project: str | None = typer.Option(
|
|
119
|
+
None,
|
|
120
|
+
"--project",
|
|
121
|
+
help="Project alias (required for write tools, optional for read tools)",
|
|
122
|
+
),
|
|
123
|
+
tool_input: str | None = typer.Option(
|
|
124
|
+
None,
|
|
125
|
+
"--input",
|
|
126
|
+
help="Tool input as JSON string, @file.json, or - for stdin",
|
|
127
|
+
),
|
|
128
|
+
branch: int | None = typer.Option(
|
|
129
|
+
None,
|
|
130
|
+
"--branch",
|
|
131
|
+
help="Development branch ID (forces single-project mode)",
|
|
132
|
+
),
|
|
133
|
+
) -> None:
|
|
134
|
+
"""Call an MCP tool on keboola-mcp-server.
|
|
135
|
+
|
|
136
|
+
Read tools (list_*, get_*, search, docs_query, find_*) run across ALL
|
|
137
|
+
connected projects in parallel and return aggregated results.
|
|
138
|
+
|
|
139
|
+
Write tools (create_*, update_*, delete_*, add_*) run on a single project.
|
|
140
|
+
Use --project to specify the target, or the default project is used.
|
|
141
|
+
|
|
142
|
+
If an active branch is set for the project, it is used automatically.
|
|
143
|
+
Use --branch to override or scope the call to a specific development branch.
|
|
144
|
+
"""
|
|
145
|
+
formatter = get_formatter(ctx)
|
|
146
|
+
service = get_service(ctx, "mcp_service")
|
|
147
|
+
config_store: ConfigStore = ctx.obj["config_store"]
|
|
148
|
+
|
|
149
|
+
validate_branch_requires_project(formatter, branch, project)
|
|
150
|
+
|
|
151
|
+
# Auto-resolve active branch from config
|
|
152
|
+
project, branch_str = _resolve_branch_str(config_store, formatter, project, branch)
|
|
153
|
+
|
|
154
|
+
if branch_str and not project:
|
|
155
|
+
formatter.error(
|
|
156
|
+
message="--branch requires --project (branch ID is per-project)",
|
|
157
|
+
error_code=ErrorCode.INVALID_ARGUMENT,
|
|
158
|
+
)
|
|
159
|
+
raise typer.Exit(code=2) from None
|
|
160
|
+
|
|
161
|
+
# Parse tool input JSON (supports inline JSON, @file.json, or - for stdin)
|
|
162
|
+
parsed_input: dict = {}
|
|
163
|
+
if tool_input:
|
|
164
|
+
raw_json = _read_input(tool_input, formatter)
|
|
165
|
+
try:
|
|
166
|
+
parsed_input = json.loads(raw_json)
|
|
167
|
+
except json.JSONDecodeError as exc:
|
|
168
|
+
formatter.error(
|
|
169
|
+
message=f"Invalid JSON in --input: {exc}",
|
|
170
|
+
error_code=ErrorCode.INVALID_ARGUMENT,
|
|
171
|
+
)
|
|
172
|
+
raise typer.Exit(code=2) from None
|
|
173
|
+
|
|
174
|
+
if not isinstance(parsed_input, dict):
|
|
175
|
+
formatter.error(
|
|
176
|
+
message='--input must be a JSON object (e.g. \'{"key": "value"}\')',
|
|
177
|
+
error_code=ErrorCode.INVALID_ARGUMENT,
|
|
178
|
+
)
|
|
179
|
+
raise typer.Exit(code=2) from None
|
|
180
|
+
|
|
181
|
+
# Validate + call in a single MCP session (eliminates double subprocess spawn)
|
|
182
|
+
try:
|
|
183
|
+
result = service.validate_and_call_tool(
|
|
184
|
+
tool_name=tool_name,
|
|
185
|
+
tool_input=parsed_input,
|
|
186
|
+
alias=project,
|
|
187
|
+
branch_id=branch_str,
|
|
188
|
+
)
|
|
189
|
+
except ConfigError as exc:
|
|
190
|
+
# ConfigError covers: unknown tool, missing params, config issues
|
|
191
|
+
error_code = ErrorCode.CONFIG_ERROR
|
|
192
|
+
exit_code = 5
|
|
193
|
+
if "Missing required parameter" in exc.message:
|
|
194
|
+
error_code = ErrorCode.MISSING_PARAMETER
|
|
195
|
+
exit_code = 2
|
|
196
|
+
elif "Unknown MCP tool" in exc.message:
|
|
197
|
+
error_code = ErrorCode.CONFIG_ERROR
|
|
198
|
+
exit_code = 5
|
|
199
|
+
formatter.error(message=exc.message, error_code=error_code)
|
|
200
|
+
raise typer.Exit(code=exit_code) from None
|
|
201
|
+
|
|
202
|
+
if formatter.json_mode:
|
|
203
|
+
formatter.output(result)
|
|
204
|
+
else:
|
|
205
|
+
format_tool_result(formatter.console, result)
|
|
206
|
+
emit_project_warnings(formatter, result)
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"""Version command - show kbagent version and dependency update checks.
|
|
2
|
+
|
|
3
|
+
Thin CLI layer: calls VersionService and formats output.
|
|
4
|
+
No business logic belongs here.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import typer
|
|
8
|
+
from rich.console import Console
|
|
9
|
+
from rich.panel import Panel
|
|
10
|
+
from rich.text import Text
|
|
11
|
+
|
|
12
|
+
from ._helpers import get_formatter, get_service
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _format_dep_standard(text: Text, dep: dict) -> None:
|
|
16
|
+
"""Format a standard dependency (local install with upgrade check)."""
|
|
17
|
+
name = dep["name"]
|
|
18
|
+
desc = dep["description"]
|
|
19
|
+
local = dep.get("local_version")
|
|
20
|
+
latest = dep.get("latest_version")
|
|
21
|
+
up_to_date = dep.get("up_to_date")
|
|
22
|
+
|
|
23
|
+
if local is None:
|
|
24
|
+
text.append(f" {name:<28}", style="dim")
|
|
25
|
+
text.append("not installed\n", style="red")
|
|
26
|
+
return
|
|
27
|
+
|
|
28
|
+
label = f"{name} ({desc})"
|
|
29
|
+
text.append(f" {label:<28}")
|
|
30
|
+
text.append(f"v{local}")
|
|
31
|
+
|
|
32
|
+
if up_to_date is False and latest is not None:
|
|
33
|
+
text.append(f" -> v{latest} available", style="yellow")
|
|
34
|
+
text.append(f" ({dep['upgrade_command']})", style="dim")
|
|
35
|
+
elif up_to_date is True:
|
|
36
|
+
text.append(" up to date", style="green")
|
|
37
|
+
else:
|
|
38
|
+
text.append(" (update check failed)", style="dim")
|
|
39
|
+
|
|
40
|
+
text.append("\n")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _format_dep_auto_update(text: Text, dep: dict) -> None:
|
|
44
|
+
"""Format an auto-updating dependency.
|
|
45
|
+
|
|
46
|
+
Since v0.30.1: dependencies are auto-updated by ``auto_update.py`` on
|
|
47
|
+
kbagent startup (and explicitly by ``kbagent update``). The renderer
|
|
48
|
+
surfaces the locally installed version + up-to-date status so a user
|
|
49
|
+
in the terminal sees the staleness signal immediately, not just in
|
|
50
|
+
JSON mode.
|
|
51
|
+
"""
|
|
52
|
+
name = dep["name"]
|
|
53
|
+
desc = dep["description"]
|
|
54
|
+
local = dep.get("version")
|
|
55
|
+
latest = dep.get("latest_version")
|
|
56
|
+
up_to_date = dep.get("up_to_date")
|
|
57
|
+
install_method = dep.get("install_method", "?")
|
|
58
|
+
upgrade_cmd = dep.get("upgrade_command", "")
|
|
59
|
+
|
|
60
|
+
label = f"{name} ({desc})"
|
|
61
|
+
text.append(f" {label:<28}")
|
|
62
|
+
|
|
63
|
+
if local is None:
|
|
64
|
+
if install_method == "none":
|
|
65
|
+
text.append("not installed", style="yellow")
|
|
66
|
+
if upgrade_cmd:
|
|
67
|
+
text.append(f" ({upgrade_cmd})", style="dim")
|
|
68
|
+
else:
|
|
69
|
+
text.append("local version unknown", style="dim")
|
|
70
|
+
if latest:
|
|
71
|
+
text.append(f" (latest on PyPI: v{latest})", style="dim")
|
|
72
|
+
text.append("\n")
|
|
73
|
+
return
|
|
74
|
+
|
|
75
|
+
text.append(f"v{local}")
|
|
76
|
+
|
|
77
|
+
if up_to_date is False and latest is not None:
|
|
78
|
+
text.append(f" -> v{latest} (auto-updates on next startup)", style="yellow")
|
|
79
|
+
elif up_to_date is True:
|
|
80
|
+
text.append(" auto-updates (up to date)", style="green")
|
|
81
|
+
else:
|
|
82
|
+
text.append(" (update check failed)", style="dim")
|
|
83
|
+
|
|
84
|
+
text.append("\n")
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _format_version_panel(console: Console, data: dict) -> None:
|
|
88
|
+
"""Render version information as a Rich panel."""
|
|
89
|
+
text = Text()
|
|
90
|
+
kbagent = data["kbagent"]
|
|
91
|
+
text.append(f"kbagent v{kbagent['version']}", style="bold")
|
|
92
|
+
|
|
93
|
+
if kbagent.get("up_to_date") is False and kbagent.get("latest_version"):
|
|
94
|
+
text.append(f" -> v{kbagent['latest_version']} available", style="yellow")
|
|
95
|
+
text.append(" (run: kbagent update)", style="dim")
|
|
96
|
+
elif kbagent.get("up_to_date") is True:
|
|
97
|
+
text.append(" up to date", style="green")
|
|
98
|
+
|
|
99
|
+
text.append("\n\nDependencies:\n")
|
|
100
|
+
|
|
101
|
+
for dep in data["dependencies"]:
|
|
102
|
+
if dep.get("auto_updates"):
|
|
103
|
+
_format_dep_auto_update(text, dep)
|
|
104
|
+
else:
|
|
105
|
+
_format_dep_standard(text, dep)
|
|
106
|
+
|
|
107
|
+
console.print(Panel(text, title="Version Info", border_style="blue"))
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def version_command(
|
|
111
|
+
ctx: typer.Context,
|
|
112
|
+
beta: bool = typer.Option(
|
|
113
|
+
False,
|
|
114
|
+
"--beta",
|
|
115
|
+
help="Report the latest pre-release (beta / rc) instead of the latest stable.",
|
|
116
|
+
),
|
|
117
|
+
) -> None:
|
|
118
|
+
"""Show kbagent version and check for dependency updates."""
|
|
119
|
+
formatter = get_formatter(ctx)
|
|
120
|
+
version_service = get_service(ctx, "version_service")
|
|
121
|
+
include_prerelease = beta or _env_opted_into_prerelease()
|
|
122
|
+
result = version_service.get_versions(include_prerelease=include_prerelease)
|
|
123
|
+
formatter.output(result, _format_version_panel)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def update_command(
|
|
127
|
+
ctx: typer.Context,
|
|
128
|
+
beta: bool = typer.Option(
|
|
129
|
+
False,
|
|
130
|
+
"--beta",
|
|
131
|
+
help=(
|
|
132
|
+
"Opt into pre-release versions (beta / rc). Without this flag (the "
|
|
133
|
+
"default) and without KBAGENT_INCLUDE_PRERELEASE=1 in env, the "
|
|
134
|
+
"GitHub /releases/latest endpoint -- which filters out prereleases "
|
|
135
|
+
"server-side -- is used, so a beta release will never silently "
|
|
136
|
+
"install. With --beta, the resolver opts into PEP 440 prereleases "
|
|
137
|
+
"(``uv --prerelease=allow`` / ``pip --pre``)."
|
|
138
|
+
),
|
|
139
|
+
),
|
|
140
|
+
) -> None:
|
|
141
|
+
"""Update kbagent + keboola-mcp-server to the latest versions.
|
|
142
|
+
|
|
143
|
+
Two-stage upgrade (since v0.30.1):
|
|
144
|
+
|
|
145
|
+
1. **kbagent** -- ``uv tool install --upgrade`` (preferred) or
|
|
146
|
+
``pip install --upgrade`` from the GitHub repository.
|
|
147
|
+
2. **keboola-mcp-server** -- detects install method and runs the
|
|
148
|
+
matching upgrade command (``uv tool upgrade`` / ``pip install -U``
|
|
149
|
+
/ ``uvx --refresh``). Always runs, regardless of whether kbagent
|
|
150
|
+
itself needed an upgrade.
|
|
151
|
+
|
|
152
|
+
JSON output reports both stages independently. Human mode prints a
|
|
153
|
+
one-line summary such as
|
|
154
|
+
``kbagent v0.30.0 -> v0.30.1 | keboola-mcp-server v1.49.0 -> v1.59.1``.
|
|
155
|
+
|
|
156
|
+
Pre-release channel (since v0.42.0): use ``--beta`` (or set
|
|
157
|
+
``KBAGENT_INCLUDE_PRERELEASE=1`` in env) to opt into beta / rc
|
|
158
|
+
releases. The startup auto-update hook never auto-installs a beta;
|
|
159
|
+
only this explicit command does.
|
|
160
|
+
"""
|
|
161
|
+
formatter = get_formatter(ctx)
|
|
162
|
+
version_service = get_service(ctx, "version_service")
|
|
163
|
+
include_prerelease = beta or _env_opted_into_prerelease()
|
|
164
|
+
result = version_service.self_update(include_prerelease=include_prerelease)
|
|
165
|
+
|
|
166
|
+
if formatter.json_mode:
|
|
167
|
+
formatter.output(result)
|
|
168
|
+
else:
|
|
169
|
+
if result["updated"]:
|
|
170
|
+
formatter.success(result["message"])
|
|
171
|
+
else:
|
|
172
|
+
formatter.console.print(result["message"])
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _env_opted_into_prerelease() -> bool:
|
|
176
|
+
"""Honour ``KBAGENT_INCLUDE_PRERELEASE=1`` as a per-shell opt-in.
|
|
177
|
+
|
|
178
|
+
Some users want every kbagent invocation in a session to use the beta
|
|
179
|
+
channel without re-typing ``--beta`` (e.g. CI smoke-tests for an
|
|
180
|
+
upcoming release). Mirrors the truthy parse pattern used by
|
|
181
|
+
``KBAGENT_SKIP_UPDATE`` so the two env vars behave consistently.
|
|
182
|
+
"""
|
|
183
|
+
import os
|
|
184
|
+
|
|
185
|
+
raw = os.environ.get("KBAGENT_INCLUDE_PRERELEASE", "").strip().lower()
|
|
186
|
+
return raw in {"1", "true", "yes", "on"}
|