keboola-cli 0.97.0__tar.gz → 0.98.0__tar.gz

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 (620) hide show
  1. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/CLAUDE.md +73 -10
  2. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/PKG-INFO +1 -1
  3. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/pyproject.toml +1 -1
  4. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/__init__.py +2 -0
  5. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/changelog.py +38 -0
  6. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/__init__.py +4 -0
  7. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_core.py +61 -5
  8. keboola_cli-0.98.0/src/keboola_agent_cli/client/_s3_multipart.py +626 -0
  9. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_transfer.py +155 -21
  10. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/storage_files.py +83 -18
  11. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/storage_tables.py +289 -31
  12. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_helpers.py +22 -0
  13. keboola_cli-0.98.0/src/keboola_agent_cli/commands/_progress.py +314 -0
  14. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_crud.py +8 -1
  15. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_helpers.py +24 -10
  16. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_describe.py +18 -6
  17. keboola_cli-0.98.0/src/keboola_agent_cli/commands/_storage_jobs.py +158 -0
  18. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_sync_clone_render.py +19 -6
  19. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/context.py +80 -14
  20. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/flow.py +15 -2
  21. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/org.py +27 -0
  22. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/project.py +16 -1
  23. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/semantic_layer.py +68 -1
  24. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/storage.py +128 -66
  25. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/sync.py +78 -37
  26. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/workspace.py +15 -4
  27. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/constants.py +41 -0
  28. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/lib.py +111 -10
  29. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/metastore_client.py +27 -15
  30. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/permissions.py +6 -0
  31. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/result_models.py +70 -0
  32. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/_serve_command_map.py +1 -0
  33. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/semantic_layer.py +7 -3
  34. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/storage.py +64 -8
  35. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_internals.py +46 -5
  36. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_scope.py +88 -2
  37. keboola_cli-0.98.0/src/keboola_agent_cli/services/_storage_downloads.py +101 -0
  38. keboola_cli-0.98.0/src/keboola_agent_cli/services/_storage_jobs.py +276 -0
  39. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_bulk.py +9 -2
  40. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/flow_service.py +9 -4
  41. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/semantic_layer_service.py +57 -24
  42. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/storage_service.py +148 -140
  43. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_api_call_counts.py +20 -0
  44. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_client.py +12 -2
  45. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e.py +185 -0
  46. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_service.py +32 -0
  47. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_lib.py +117 -5
  48. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_metastore_client.py +18 -1
  49. keboola_cli-0.98.0/tests/test_partial_failure_exit_code.py +1151 -0
  50. keboola_cli-0.98.0/tests/test_s3_multipart.py +869 -0
  51. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_cli.py +17 -2
  52. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_scope.py +223 -1
  53. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_scope_cli.py +172 -3
  54. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_router_calls.py +3 -1
  55. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_describe_cli.py +5 -2
  56. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_empty_definition.py +1 -1
  57. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_files.py +74 -3
  58. keboola_cli-0.98.0/tests/test_storage_import_jobs.py +1013 -0
  59. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_write.py +74 -23
  60. keboola_cli-0.98.0/tests/test_transfer_progress.py +517 -0
  61. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/.gitignore +0 -0
  62. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/CONTRIBUTING.md +0 -0
  63. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/LICENSE +0 -0
  64. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/Makefile +0 -0
  65. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/README.md +0 -0
  66. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/examples/README.md +0 -0
  67. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/examples/storage_tui/README.md +0 -0
  68. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/formal/sync/README.md +0 -0
  69. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/plugins/kbagent/.claude-plugin/CLAUDE.md +0 -0
  70. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/plugins/kbagent/skills/kbagent-cicd-migration/scripts/migrate_cicd.py +0 -0
  71. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/plugins/kbagent/skills/kbagent-promotion-pipeline/scripts/generate_promotion_pipeline.py +0 -0
  72. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_command_sync.py +0 -0
  73. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_error_codes.py +0 -0
  74. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_file_size.py +0 -0
  75. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_release_scope.py +0 -0
  76. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_sentinel_guards.py +0 -0
  77. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_version_gates.py +0 -0
  78. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_wheel_ui.py +0 -0
  79. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/debug_linkedby_type.sh +0 -0
  80. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/file_size_baseline.json +0 -0
  81. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/gen_command_reference.py +0 -0
  82. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/gen_endpoint_reference.py +0 -0
  83. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/gen_release_notes.py +0 -0
  84. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/generate_changelog.py +0 -0
  85. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/generate_skill.py +0 -0
  86. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/hatch_build.py +0 -0
  87. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/lineage_deep.py +0 -0
  88. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/post-edit-quality.sh +0 -0
  89. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/pre-commit +0 -0
  90. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/sync_version.py +0 -0
  91. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/web-dev.sh +0 -0
  92. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/__main__.py +0 -0
  93. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/ai_client.py +0 -0
  94. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/__init__.py +0 -0
  95. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/auth_client.py +0 -0
  96. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/device.py +0 -0
  97. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/environment.py +0 -0
  98. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/models.py +0 -0
  99. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/pkce.py +0 -0
  100. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/sentinel.py +0 -0
  101. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/state_store.py +0 -0
  102. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/token_provider.py +0 -0
  103. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/totp.py +0 -0
  104. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auto_update.py +0 -0
  105. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/cli.py +0 -0
  106. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_client.py +0 -0
  107. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/billing.py +0 -0
  108. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/branches.py +0 -0
  109. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/configs.py +0 -0
  110. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/editor.py +0 -0
  111. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/merge_requests.py +0 -0
  112. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/misc.py +0 -0
  113. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/notifications.py +0 -0
  114. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/query.py +0 -0
  115. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/queue.py +0 -0
  116. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/stream.py +0 -0
  117. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/tokens.py +0 -0
  118. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/triggers.py +0 -0
  119. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/workspaces.py +0 -0
  120. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/__init__.py +0 -0
  121. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_auth_picker.py +0 -0
  122. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_checkbox_select.py +0 -0
  123. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_clone_cmd.py +0 -0
  124. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_oauth.py +0 -0
  125. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_trash_cmd.py +0 -0
  126. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_git.py +0 -0
  127. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_password.py +0 -0
  128. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_runtime.py +0 -0
  129. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_flow_triggers.py +0 -0
  130. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_common.py +0 -0
  131. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_render.py +0 -0
  132. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_writes.py +0 -0
  133. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_metadata_input.py +0 -0
  134. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_project_create.py +0 -0
  135. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_project_ref.py +0 -0
  136. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_reference_data.py +0 -0
  137. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_scope.py +0 -0
  138. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_snapshots.py +0 -0
  139. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_table_detail.py +0 -0
  140. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_tables_render.py +0 -0
  141. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_sync_push_render.py +0 -0
  142. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_url_copy.py +0 -0
  143. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/agent.py +0 -0
  144. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/auth.py +0 -0
  145. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/billing.py +0 -0
  146. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/branch.py +0 -0
  147. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/changelog.py +0 -0
  148. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/component.py +0 -0
  149. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/config.py +0 -0
  150. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/config_state.py +0 -0
  151. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/data_app.py +0 -0
  152. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/dev_portal.py +0 -0
  153. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/docs.py +0 -0
  154. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/doctor.py +0 -0
  155. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/encrypt.py +0 -0
  156. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/feature.py +0 -0
  157. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/http_client.py +0 -0
  158. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/init.py +0 -0
  159. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/job.py +0 -0
  160. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/kai.py +0 -0
  161. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/lineage.py +0 -0
  162. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/merge_request.py +0 -0
  163. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/notification.py +0 -0
  164. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/permissions.py +0 -0
  165. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/repl.py +0 -0
  166. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/schedule.py +0 -0
  167. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/search.py +0 -0
  168. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/serve.py +0 -0
  169. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/sharing.py +0 -0
  170. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/stream.py +0 -0
  171. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/token.py +0 -0
  172. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/transformation.py +0 -0
  173. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/version.py +0 -0
  174. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/config_store.py +0 -0
  175. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/data_science_client.py +0 -0
  176. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/dev_portal_client.py +0 -0
  177. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/effective_branch.py +0 -0
  178. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/errors.py +0 -0
  179. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/frozen_dist.py +0 -0
  180. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/http_base.py +0 -0
  181. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/json_utils.py +0 -0
  182. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/manage_client.py +0 -0
  183. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/models.py +0 -0
  184. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/output.py +0 -0
  185. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/project_ref.py +0 -0
  186. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/py.typed +0 -0
  187. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/__init__.py +0 -0
  188. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/__init__.py +0 -0
  189. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/conditional-flow-schema.json +0 -0
  190. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/conditional_flow_examples.jsonl +0 -0
  191. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/flow-schema.json +0 -0
  192. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/legacy_flow_examples.jsonl +0 -0
  193. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/scheduler_client.py +0 -0
  194. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/__init__.py +0 -0
  195. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/agent_runner.py +0 -0
  196. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/agents_store.py +0 -0
  197. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/app.py +0 -0
  198. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/auth.py +0 -0
  199. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/dependencies.py +0 -0
  200. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/pricing.py +0 -0
  201. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/__init__.py +0 -0
  202. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/agents.py +0 -0
  203. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/ai_chat.py +0 -0
  204. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/auth.py +0 -0
  205. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/billing.py +0 -0
  206. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/branches.py +0 -0
  207. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/components.py +0 -0
  208. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/configs.py +0 -0
  209. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/data_apps.py +0 -0
  210. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/dev_portal.py +0 -0
  211. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/docs.py +0 -0
  212. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/encrypt.py +0 -0
  213. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/feature.py +0 -0
  214. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/flows.py +0 -0
  215. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/health.py +0 -0
  216. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/jobs.py +0 -0
  217. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/kai.py +0 -0
  218. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/lineage.py +0 -0
  219. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/members.py +0 -0
  220. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/merge_requests.py +0 -0
  221. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/notifications.py +0 -0
  222. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/org.py +0 -0
  223. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/projects.py +0 -0
  224. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/schedules.py +0 -0
  225. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/search.py +0 -0
  226. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/sharing.py +0 -0
  227. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/stream.py +0 -0
  228. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/token.py +0 -0
  229. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/transformation.py +0 -0
  230. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/workspaces.py +0 -0
  231. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/run_broadcaster.py +0 -0
  232. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/sse.py +0 -0
  233. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/__init__.py +0 -0
  234. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_auth_registration.py +0 -0
  235. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_column_descriptions.py +0 -0
  236. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_clone.py +0 -0
  237. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_set_guard.py +0 -0
  238. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_trash.py +0 -0
  239. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_data_app_bodies.py +0 -0
  240. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_data_app_password.py +0 -0
  241. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_describe_batch_input.py +0 -0
  242. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_encryption.py +0 -0
  243. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_cascade.py +0 -0
  244. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_crud.py +0 -0
  245. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_fqn.py +0 -0
  246. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_lookup.py +0 -0
  247. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_reference_data.py +0 -0
  248. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_storage_tables.py +0 -0
  249. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_baseline.py +0 -0
  250. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_bindings.py +0 -0
  251. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_branch.py +0 -0
  252. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_clone.py +0 -0
  253. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_clone_warnings.py +0 -0
  254. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_data_app.py +0 -0
  255. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_models.py +0 -0
  256. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_push_ops.py +0 -0
  257. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_stale.py +0 -0
  258. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_storage.py +0 -0
  259. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_workspace.py +0 -0
  260. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_writeback.py +0 -0
  261. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_table_detail.py +0 -0
  262. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_token_last_used.py +0 -0
  263. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_transformation_ops.py +0 -0
  264. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_workspace_load_plan.py +0 -0
  265. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/agent_service.py +0 -0
  266. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/auth_service.py +0 -0
  267. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/base.py +0 -0
  268. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/billing_service.py +0 -0
  269. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/branch_service.py +0 -0
  270. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/component_service.py +0 -0
  271. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/config_service.py +0 -0
  272. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/data_app_git_service.py +0 -0
  273. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/data_app_service.py +0 -0
  274. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/deep_lineage_service.py +0 -0
  275. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/dev_portal_service.py +0 -0
  276. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/docs_service.py +0 -0
  277. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/doctor_service.py +0 -0
  278. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/encrypt_service.py +0 -0
  279. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/feature_service.py +0 -0
  280. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/flow_validation.py +0 -0
  281. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/http_forwarder_service.py +0 -0
  282. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/job_idempotency_store.py +0 -0
  283. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/job_service.py +0 -0
  284. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/kai_service.py +0 -0
  285. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/lineage_service.py +0 -0
  286. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/member_service.py +0 -0
  287. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/merge_request_service.py +0 -0
  288. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/notification_service.py +0 -0
  289. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/org_service.py +0 -0
  290. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/project_service.py +0 -0
  291. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/repo_validate_service.py +0 -0
  292. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/schedule_service.py +0 -0
  293. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/search_service.py +0 -0
  294. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/sharing_service.py +0 -0
  295. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/snapshot_service.py +0 -0
  296. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/stream_service.py +0 -0
  297. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/sync_service.py +0 -0
  298. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/table_usage.py +0 -0
  299. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/token_service.py +0 -0
  300. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/transformation_service.py +0 -0
  301. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/variables_service.py +0 -0
  302. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/version_service.py +0 -0
  303. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/workspace_service.py +0 -0
  304. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/stream_client.py +0 -0
  305. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/__init__.py +0 -0
  306. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_mapping.py +0 -0
  307. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_registry.py +0 -0
  308. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_scope.py +0 -0
  309. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/clone.py +0 -0
  310. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/code_extraction.py +0 -0
  311. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/config_format.py +0 -0
  312. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/diff_engine.py +0 -0
  313. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/git_utils.py +0 -0
  314. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/manifest.py +0 -0
  315. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/naming.py +0 -0
  316. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/secrets.py +0 -0
  317. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/sql_split.py +0 -0
  318. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/telemetry.py +0 -0
  319. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/update_runner.py +0 -0
  320. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/yaml_input.py +0 -0
  321. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/__init__.py +0 -0
  322. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/conftest.py +0 -0
  323. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/helpers.py +0 -0
  324. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_cli.py +0 -0
  325. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_prompt.py +0 -0
  326. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_prompt_helper.py +0 -0
  327. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_runner.py +0 -0
  328. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_service.py +0 -0
  329. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_tombstone.py +0 -0
  330. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agents_store_events.py +0 -0
  331. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_ai_client.py +0 -0
  332. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_client.py +0 -0
  333. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_device.py +0 -0
  334. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_environment.py +0 -0
  335. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_models.py +0 -0
  336. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_picker.py +0 -0
  337. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_pkce.py +0 -0
  338. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_register_projects.py +0 -0
  339. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_sentinel.py +0 -0
  340. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_sentinel_guards.py +0 -0
  341. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_service.py +0 -0
  342. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_state_store.py +0 -0
  343. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_totp.py +0 -0
  344. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auto_update.py +0 -0
  345. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_base_service.py +0 -0
  346. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_billing_cli.py +0 -0
  347. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_billing_client.py +0 -0
  348. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_billing_service.py +0 -0
  349. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_metadata_cli.py +0 -0
  350. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_metadata_service.py +0 -0
  351. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_registry.py +0 -0
  352. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_service.py +0 -0
  353. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_build_hook.py +0 -0
  354. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_changelog_check.py +0 -0
  355. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_changelog_render.py +0 -0
  356. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_command_sync.py +0 -0
  357. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_file_size.py +0 -0
  358. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_release_scope.py +0 -0
  359. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_sentinel_guards.py +0 -0
  360. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_version_gates.py +0 -0
  361. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_checkbox_select.py +0 -0
  362. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_choice_enums.py +0 -0
  363. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_cli.py +0 -0
  364. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_cli_auth.py +0 -0
  365. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_client_device_enrollment.py +0 -0
  366. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_client_token_events.py +0 -0
  367. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_component_cli.py +0 -0
  368. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_component_service.py +0 -0
  369. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_component_sync_action.py +0 -0
  370. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_clone_cli.py +0 -0
  371. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_clone_service.py +0 -0
  372. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_create_cli.py +0 -0
  373. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_create_service.py +0 -0
  374. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_encryption.py +0 -0
  375. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_examples.py +0 -0
  376. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_metadata.py +0 -0
  377. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_rename.py +0 -0
  378. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_rename_cli.py +0 -0
  379. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_resolution.py +0 -0
  380. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_row_cli.py +0 -0
  381. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_row_service.py +0 -0
  382. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_search.py +0 -0
  383. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_search_cli.py +0 -0
  384. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_set_default_bucket.py +0 -0
  385. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_set_guard.py +0 -0
  386. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_state.py +0 -0
  387. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_store.py +0 -0
  388. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_trash.py +0 -0
  389. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_update.py +0 -0
  390. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_cli.py +0 -0
  391. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_git_repo.py +0 -0
  392. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_password.py +0 -0
  393. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_plain_env_keys.py +0 -0
  394. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_secrets_cli.py +0 -0
  395. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_secrets_service.py +0 -0
  396. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_service.py +0 -0
  397. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_validate_repo_service.py +0 -0
  398. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_deep_lineage_service.py +0 -0
  399. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_dev_portal_cli.py +0 -0
  400. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_dev_portal_client.py +0 -0
  401. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_dev_portal_service.py +0 -0
  402. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_docs_cli.py +0 -0
  403. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_doctor_service.py +0 -0
  404. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e_auth.py +0 -0
  405. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e_config_dir_mode.py +0 -0
  406. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e_lineage_deep.py +0 -0
  407. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_effective_branch.py +0 -0
  408. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_encrypt_cli.py +0 -0
  409. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_encrypt_service.py +0 -0
  410. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_encryption.py +0 -0
  411. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_errors.py +0 -0
  412. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_feature_cli.py +0 -0
  413. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_feature_service.py +0 -0
  414. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_file_locking.py +0 -0
  415. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_cli.py +0 -0
  416. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_examples.py +0 -0
  417. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_validation.py +0 -0
  418. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_frozen_dist.py +0 -0
  419. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_gen_command_reference.py +0 -0
  420. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_gen_endpoint_reference.py +0 -0
  421. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_gen_release_notes.py +0 -0
  422. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_generate_promotion_pipeline.py +0 -0
  423. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_helpers.py +0 -0
  424. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_base.py +0 -0
  425. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_base_auth.py +0 -0
  426. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_client_cmd.py +0 -0
  427. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_forwarder_service.py +0 -0
  428. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_integration.py +0 -0
  429. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_job_idempotency_store.py +0 -0
  430. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_job_options.py +0 -0
  431. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_json_utils.py +0 -0
  432. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_kai_cli.py +0 -0
  433. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_kai_service.py +0 -0
  434. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_lib_device_enrollment.py +0 -0
  435. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_license_consistency.py +0 -0
  436. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_lineage_service.py +0 -0
  437. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_local_ai_chat.py +0 -0
  438. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_manage_client.py +0 -0
  439. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_manage_token_bulk.py +0 -0
  440. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_manage_token_cli.py +0 -0
  441. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_mcp_migration_recipe.py +0 -0
  442. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_member_cli.py +0 -0
  443. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_member_service.py +0 -0
  444. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_merge_request_cli.py +0 -0
  445. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_merge_request_client.py +0 -0
  446. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_merge_request_service.py +0 -0
  447. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_migrate_cicd.py +0 -0
  448. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_models.py +0 -0
  449. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_normalize_script.py +0 -0
  450. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_notification_cli.py +0 -0
  451. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_notification_client.py +0 -0
  452. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_notification_service.py +0 -0
  453. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_org_service.py +0 -0
  454. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_output.py +0 -0
  455. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_permissions.py +0 -0
  456. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_permissions_cli.py +0 -0
  457. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_pricing.py +0 -0
  458. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_create_cli.py +0 -0
  459. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_edit.py +0 -0
  460. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_edit_cli.py +0 -0
  461. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_info_cli.py +0 -0
  462. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_info_service.py +0 -0
  463. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_ref.py +0 -0
  464. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_release_kbagent_ai_kit_sync.py +0 -0
  465. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_repl.py +0 -0
  466. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_result_models.py +0 -0
  467. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_run_broadcaster.py +0 -0
  468. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_schedule_cli.py +0 -0
  469. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_schedule_service.py +0 -0
  470. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_scheduler_client.py +0 -0
  471. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_search_cli.py +0 -0
  472. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_search_service.py +0 -0
  473. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_schema.py +0 -0
  474. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_service.py +0 -0
  475. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_banner_encoding.py +0 -0
  476. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_conversation_id.py +0 -0
  477. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_telemetry.py +0 -0
  478. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_ui.py +0 -0
  479. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_auth.py +0 -0
  480. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_permissions.py +0 -0
  481. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_project_ref.py +0 -0
  482. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_semantic_layer_routes_e2e.py +0 -0
  483. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_smoke.py +0 -0
  484. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_services.py +0 -0
  485. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sharing_cli.py +0 -0
  486. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sharing_service.py +0 -0
  487. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_skill_frontmatter.py +0 -0
  488. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sql_split.py +0 -0
  489. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_clone.py +0 -0
  490. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_create_table.py +0 -0
  491. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_delete.py +0 -0
  492. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_describe_service.py +0 -0
  493. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_export_filters.py +0 -0
  494. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_snapshots.py +0 -0
  495. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_swap.py +0 -0
  496. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_table_definition.py +0 -0
  497. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_tables.py +0 -0
  498. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_truncate.py +0 -0
  499. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_stream_cli.py +0 -0
  500. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_stream_client.py +0 -0
  501. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_stream_service.py +0 -0
  502. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_baseline_stamping.py +0 -0
  503. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_branch_mapping.py +0 -0
  504. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_branch_scope.py +0 -0
  505. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_cli.py +0 -0
  506. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_cli_behavior.py +0 -0
  507. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_clone.py +0 -0
  508. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_clone_links.py +0 -0
  509. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_code_extraction.py +0 -0
  510. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_config_format.py +0 -0
  511. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_data_app_type.py +0 -0
  512. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_diff_engine.py +0 -0
  513. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_e2e.py +0 -0
  514. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_encrypt.py +0 -0
  515. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_force_pull_baseline.py +0 -0
  516. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_formal_counterexamples.py +0 -0
  517. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_manifest.py +0 -0
  518. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_naming.py +0 -0
  519. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_plaintext_audit.py +0 -0
  520. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_pull_companion_files.py +0 -0
  521. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_push_script_guard.py +0 -0
  522. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_reconcile.py +0 -0
  523. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_secrets.py +0 -0
  524. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_service.py +0 -0
  525. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_storage_jobs.py +0 -0
  526. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_version_script.py +0 -0
  527. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_workspaces.py +0 -0
  528. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_table_usage.py +0 -0
  529. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_telemetry.py +0 -0
  530. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_token_cli.py +0 -0
  531. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_token_provider.py +0 -0
  532. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_token_service.py +0 -0
  533. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_transformation_cli.py +0 -0
  534. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_transformation_ops.py +0 -0
  535. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_triggers_client.py +0 -0
  536. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_update_runner.py +0 -0
  537. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_url_copy.py +0 -0
  538. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_variables_cli.py +0 -0
  539. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_variables_service.py +0 -0
  540. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_version_service.py +0 -0
  541. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_cli.py +0 -0
  542. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_gc.py +0 -0
  543. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_service.py +0 -0
  544. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_sql_helper.py +0 -0
  545. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_yaml_input.py +0 -0
  546. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/README.md +0 -0
  547. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/index.html +0 -0
  548. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/package-lock.json +0 -0
  549. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/package.json +0 -0
  550. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/postcss.config.js +0 -0
  551. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/App.tsx +0 -0
  552. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/api/client.test.ts +0 -0
  553. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/api/client.ts +0 -0
  554. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/changelogNotes.test.ts +0 -0
  555. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/changelogNotes.ts +0 -0
  556. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/AgentRunView.tsx +0 -0
  557. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/CommandPalette.tsx +0 -0
  558. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/ConfirmModal.tsx +0 -0
  559. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/DetailTabs.tsx +0 -0
  560. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/Drawer.tsx +0 -0
  561. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/Empty.tsx +0 -0
  562. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/JsonView.tsx +0 -0
  563. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/KeyValueGrid.tsx +0 -0
  564. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/ManageTokenModal.tsx +0 -0
  565. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/PillList.tsx +0 -0
  566. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/RawDetail.tsx +0 -0
  567. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/SessionExpiredBanner.tsx +0 -0
  568. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/Table.tsx +0 -0
  569. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/WhatsNew.tsx +0 -0
  570. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/config/credits.test.ts +0 -0
  571. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/config/credits.ts +0 -0
  572. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/index.css +0 -0
  573. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/Shell.tsx +0 -0
  574. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/Sidebar.tsx +0 -0
  575. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/StatusBar.tsx +0 -0
  576. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/TopBar.tsx +0 -0
  577. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/lib/time.test.ts +0 -0
  578. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/lib/time.ts +0 -0
  579. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/main.tsx +0 -0
  580. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Agents.tsx +0 -0
  581. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Branches.tsx +0 -0
  582. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Changelog.tsx +0 -0
  583. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Components.tsx +0 -0
  584. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Configs.tsx +0 -0
  585. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Dashboard.tsx +0 -0
  586. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/DataApps.tsx +0 -0
  587. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Doctor.tsx +0 -0
  588. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Encrypt.tsx +0 -0
  589. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Flows.tsx +0 -0
  590. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Jobs.tsx +0 -0
  591. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/JobsAll.tsx +0 -0
  592. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Lineage.tsx +0 -0
  593. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/LocalAi.tsx +0 -0
  594. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Members.tsx +0 -0
  595. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Org.tsx +0 -0
  596. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Projects.tsx +0 -0
  597. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Schedules.tsx +0 -0
  598. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Search.tsx +0 -0
  599. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/SemanticLayer.tsx +0 -0
  600. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/SemanticLayerDialogs.tsx +0 -0
  601. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Sharing.tsx +0 -0
  602. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Storage.tsx +0 -0
  603. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Streams.tsx +0 -0
  604. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Tokens.tsx +0 -0
  605. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/TokensAll.tsx +0 -0
  606. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Workspaces.tsx +0 -0
  607. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/jobsShared.tsx +0 -0
  608. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/storageSel.test.ts +0 -0
  609. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/tokensShared.test.ts +0 -0
  610. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/tokensShared.tsx +0 -0
  611. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/router.test.ts +0 -0
  612. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/router.ts +0 -0
  613. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/state.tsx +0 -0
  614. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/theme.tsx +0 -0
  615. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/types.ts +0 -0
  616. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/useHashSelection.ts +0 -0
  617. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/whatsnew.ts +0 -0
  618. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/tailwind.config.ts +0 -0
  619. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/tsconfig.json +0 -0
  620. {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/vite.config.ts +0 -0
@@ -627,8 +627,37 @@ kbagent storage table-detail --project NAME --table-id ID [--branch ID]
627
627
  kbagent storage create-bucket --project NAME --stage STAGE --name NAME [--description D] [--backend B] [--branch ID]
628
628
  kbagent storage create-table --project NAME --bucket-id ID --name NAME [--column COL:TYPE[(length)] ...] [--primary-key COL] [--not-null COL ...] [--default NAME=VALUE ...] [--source-table-id ID] [--source-branch-id N] [--time-partitioning-type DAY|HOUR|MONTH|YEAR] [--time-partitioning-field COL] [--time-partitioning-expiration-ms MS] [--range-partitioning-field COL --range-partitioning-start S --range-partitioning-end E --range-partitioning-interval I] [--clustering-field COL ...] [--branch ID] [--if-not-exists]
629
629
  # --column XOR --source-table-id (0.66.0+, BigQuery only): --source-table-id copies an existing table's data into the requested partition/clustering layout (schema derived from source) -> swap into place with swap-tables. Partition/clustering flags work in both modes (BigQuery only); time vs range partitioning are mutually exclusive. A non-BigQuery project fails fast (pre-flight backend check).
630
- kbagent storage upload-table --project NAME --table-id ID --file PATH [--incremental] [--branch ID]
631
- kbagent storage download-table --project NAME --table-id ID [--output FILE] [--columns COL ...] [--limit N] [--where-column COL --where-value VAL ... [--where-operator eq|neq]] [--changed-since WHEN] [--changed-until WHEN] [--branch ID]
630
+ kbagent storage upload-table --project NAME --table-id ID --file PATH [--incremental] [--delimiter D] [--enclosure E] [--no-auto-create] [--wait/--no-wait] [--timeout SECONDS] [--branch ID] [--progress]
631
+ # upload-table / file-upload cloud upload (#834): on AWS stacks a file above 64 MiB goes up as an S3
632
+ # MULTIPART upload -- 64 MiB parts (auto-scaled so the file fits in 10,000 parts), 4 in parallel,
633
+ # per-part retry on 429/5xx/transport errors, peak memory ~4 x part size. Before, the whole file was
634
+ # read into RAM and sent as one PutObject (hard 5 GiB ceiling). Also covers the SDK
635
+ # Client.upload_table. Azure/GCP stacks unchanged (they already stream; chunked upload there is a
636
+ # follow-up in #834). Limits: S3 federation credentials last 12 h (200 GB needs ~5 MB/s sustained);
637
+ # the source file must not change during the upload (size/mtime checked); no resume across runs; an
638
+ # aborted multipart upload may leave orphaned parts (the token cannot abort). A .csv.gz is uploaded
639
+ # byte-for-byte and imported by Storage; auto-create reads its header through gzip. Human mode shows
640
+ # a progress bar on stderr. `serve`'s upload route streams the body to a temp file (needs temp disk
641
+ # of the file size) instead of holding it in memory.
642
+ # upload-table / load-file async import (#834): --wait (default) waits --timeout SECONDS (default 600)
643
+ # for the Storage import job; --no-wait still waits for the cloud upload, then enqueues the import and
644
+ # returns file_id / job_id / job_status (imported_rows null while pending; keys are additive). A wait
645
+ # timeout is STORAGE_JOB_TIMEOUT, exit 4, retryable=false: the import KEEPS RUNNING server-side, the
646
+ # error names job_id + file_id and `storage job-detail --job-id ID --wait`. Never re-run the upload
647
+ # while that job is waiting/processing -- an incremental re-run duplicates rows. An enqueue failure
648
+ # after the upload carries file_id -> `storage load-file --file-id` instead of re-uploading.
649
+ # Workflow: plugins/kbagent/skills/kbagent/references/large-upload-workflow.md. Version gate for this
650
+ # entry lives in gotchas.md.
651
+ kbagent storage download-table --project NAME --table-id ID [--output FILE] [--columns COL ...] [--limit N] [--where-column COL --where-value VAL ... [--where-operator eq|neq]] [--changed-since WHEN] [--changed-until WHEN] [--branch ID] [--progress]
652
+ # --progress on upload-table / file-upload / download-table / file-download / unload-table (with
653
+ # --download): ALWAYS report transfer progress on stderr -- also with --json and with no terminal.
654
+ # A terminal gets a Rich bar (percent, transferred/total, speed, elapsed, ETA); otherwise one plain line
655
+ # every 10 s plus a final line, e.g. `upload big.csv: 42.0% 4.20/10.00 GiB, 67.30 MiB/s, elapsed
656
+ # 0:01:03, ETA 0:01:27` (last line: `avg` speed + `done`/`failed`). stdout (the JSON envelope) is
657
+ # untouched. Speed/ETA use a trailing 30 s window; downloads count network (compressed) bytes and start
658
+ # the clock when the download starts, not during the export job; a sliced download with no sizes in
659
+ # its manifest shows bytes + speed only. Without the flag nothing changes: a transient bar only in
660
+ # human mode on a terminal. Terminal-only: no serve / SDK surface. Version gate in gotchas.md.
632
661
  kbagent storage add-column --project NAME --table-id ID --column COL:TYPE[(length)] [--not-null] [--default VALUE] [--branch ID]
633
662
  kbagent storage delete-table --project NAME --table-id ID [--table-id ...] [--force] [--dry-run] [--yes] [--branch ID]
634
663
  kbagent storage truncate-table --project NAME --table-id ID [--table-id ...] [--dry-run] [--yes] [--branch ID]
@@ -675,13 +704,19 @@ kbagent storage describe-migrate --project ALIAS [--table-id ID ...] [--bucket-i
675
704
  # application are still accumulated into errors[] (exit 1) -- shape is a usage error, an API
676
705
  # refusal is not.
677
706
  kbagent storage files --project NAME [--tag TAG ...] [--limit N] [--offset N] [--query Q] [--branch ID]
678
- kbagent storage file-upload --project NAME --file PATH [--name NAME] [--tag TAG ...] [--permanent] [--branch ID]
679
- kbagent storage file-download --project NAME [--file-id ID | --tag TAG ...] [--output FILE]
707
+ kbagent storage file-upload --project NAME --file PATH [--name NAME] [--tag TAG ...] [--permanent] [--branch ID] [--progress]
708
+ kbagent storage file-download --project NAME [--file-id ID | --tag TAG ...] [--output FILE] [--progress]
680
709
  kbagent storage file-detail --project NAME --file-id ID
681
710
  kbagent storage file-delete --project NAME --file-id ID [--file-id ...] [--dry-run] [--yes]
682
711
  kbagent storage file-tag --project NAME --file-id ID [--add TAG ...] [--remove TAG ...]
683
- kbagent storage load-file --project NAME --file-id ID --table-id ID [--incremental] [--delimiter D] [--enclosure E] [--branch ID]
684
- kbagent storage unload-table --project NAME --table-id ID [--columns COL ...] [--limit N] [--tag TAG ...] [--download] [--output FILE|DIR] [--file-type csv|parquet] [--branch ID]
712
+ kbagent storage load-file --project NAME --file-id ID --table-id ID [--incremental] [--delimiter D] [--enclosure E] [--wait/--no-wait] [--timeout SECONDS] [--branch ID]
713
+ kbagent storage job-detail --project NAME --job-id ID [--wait] [--timeout SECONDS]
714
+ # storage job-detail (#834): read-class; shows a Storage API job (status, operation_name, table_id,
715
+ # file_id, times, imported_rows, warnings, results, error). Exit 0 success/waiting/processing, exit 1
716
+ # STORAGE_JOB_FAILED when the job ended in error (details still returned), exit 4 on --wait timeout.
717
+ # Job ids are project-scoped, independent of the active branch (no --branch). Serve:
718
+ # GET /storage/jobs/{project}/{job_id}?wait=&timeout=. Version gate for this entry lives in gotchas.md.
719
+ kbagent storage unload-table --project NAME --table-id ID [--columns COL ...] [--limit N] [--tag TAG ...] [--download] [--output FILE|DIR] [--file-type csv|parquet] [--branch ID] [--progress]
685
720
 
686
721
  # stream: Data Streams (OpenTelemetry/OTLP). Storage token from config (no manage token).
687
722
  # Control plane = stream.<region> (derived from connection.<region>); the OTLP ingest URL
@@ -1007,6 +1042,26 @@ kbagent sync push --project ALIAS [--all-projects] [--dry-run] [--force] [--allo
1007
1042
  # what push would delete. A config/row deleted on the remote since the last pull diffs as remote_deleted and
1008
1043
  # is never re-created (it lands in skipped). Version gate in gotchas.md.
1009
1044
  # sync push workspace delete (CLI-25): in a `syncWorkspaces` tree, a `push --force` that deletes a shared SQL workspace also deletes its SQL editor sessions (every user's, push branch) and their backend workspaces, which `config restore` does not bring back; `push --dry-run --force` lists them (warnings[] workspace_sessions), a plain push lists the workspace under skipped_deletions and touches no session. `--force` is destructive-class (FLAG_ESCALATIONS `sync.push --force`), so `--deny-destructive` / a cli:destructive deny blocks it while a plain push stays write-class. Version gate for this entry lives in gotchas.md.
1045
+ # Partial failures change the exit code (#745): commands that collect per-item failures
1046
+ # and keep going exit 1 (was 0) when at least one item failed:
1047
+ # `sync push`, `sync push/pull/diff --all-projects`, `sync clone` (also `bucket_errors`),
1048
+ # `org setup`, `project refresh`, `project invite --from-csv`, `workspace gc`,
1049
+ # `semantic-layer import/promote/build/edit metric`, `storage describe-batch --json`,
1050
+ # `flow schedule-remove` (new `errors[]` key, always present, empty when nothing
1051
+ # failed; a partial failure fills it and exits 1; when every schedule delete
1052
+ # fails it still raises `SCHEDULE_DELETE_FAILED`). Only `sync push`, `sync clone`,
1053
+ # `storage describe-batch`, `storage describe-migrate` and `flow schedule-remove` print
1054
+ # a `Failed:` headline instead of a green `Success:`; the others list the failed items
1055
+ # in a table or in summary lines, and the `--all-projects` variants state the count in
1056
+ # their summary line. `sync push --all-projects` counts a project
1057
+ # whose push returned `errors[]` in `summary.failed`. The --json payload is emitted
1058
+ # BEFORE the exit; the items that succeeded stay written. A `--dry-run` of these
1059
+ # exits 1 when it reports a failed item, like the real run. `sync diff --all-projects`
1060
+ # exits 1 when a project failed. Other read-only fan-outs (`billing credits`, `job list`,
1061
+ # `schedule list`, ...) still exit 0. The helper is `item_failure_exit_code()` in
1062
+ # commands/_helpers.py (returns the code, the caller raises). Version gate for this
1063
+ # entry lives in gotchas.md -- the placeholder cannot be written on these `# ` comment
1064
+ # lines (check_version_gates.py parses them as ATX markdown headings).
1010
1065
  # sync push (since 0.91.0, #686): the manifest baseline `pull_config_hash` is stamped from the API
1011
1066
  # response (or a read-back), never from disk -- push-deployed multi-statement SQL transformations
1012
1067
  # (and anything disabled in the UI whose local YAML lacks `is_disabled`) no longer show permanent
@@ -1077,7 +1132,7 @@ kbagent semantic-layer add dataset --project P [--model M] --name N --table-id T
1077
1132
  # --overwrite. Version gate lives in gotchas.md (no `(since vNEXT)` on `# ` lines).
1078
1133
  kbagent semantic-layer add relationship --project P [--model M] --name N --from TABLE_ID --to TABLE_ID --on EXPR [--type left|inner]
1079
1134
  kbagent semantic-layer add constraint --project P [--model M] --name N --constraint-type inequality|equality|range|composition|exclusion|temporal|conditional --rule "EXPR" --metrics M1,M2 [--severity error|warning|info]
1080
- kbagent semantic-layer add glossary --project P [--model M] --term TERM [--definition D]
1135
+ kbagent semantic-layer add glossary --project P [--model M] --term TERM --definition D
1081
1136
  kbagent semantic-layer edit metric --project P [--model M] --name N [--new-name N2] [--new-sql SQL] [--new-dataset TABLE_ID] [--new-description D] [--yes]
1082
1137
  kbagent semantic-layer edit dataset --project P [--model M] --name N [--new-name N2] [--new-description D] [--new-grain G]
1083
1138
  kbagent semantic-layer edit constraint --project P [--model M] --name N [--new-name N2] [--new-rule "EXPR"] [--new-constraint-type T] [--new-severity error|warning|info] [--new-metrics M1,M2]
@@ -1088,8 +1143,8 @@ kbagent semantic-layer remove dataset --project P [--model M] --name N [--yes]
1088
1143
  kbagent semantic-layer remove constraint --project P [--model M] --name N [--yes]
1089
1144
  kbagent semantic-layer remove relationship --project P [--model M] --name N [--yes]
1090
1145
  kbagent semantic-layer remove glossary --project P [--model M] --term TERM [--yes]
1091
- kbagent semantic-layer import --project P --file PATH [--model M] [--types T,T,...] [--dry-run] [--yes] [--overwrite]
1092
- kbagent semantic-layer promote --from-project A --to-project B [--from-model M] [--to-model M] [--types T,T,...] [--dry-run] [--yes]
1146
+ kbagent semantic-layer import --project P --file PATH [--model M] [--types T,T,...] [--dry-run] [--yes] [--overwrite] [--scope project|organization|targeted] [--target-project ALIAS|ID ...]
1147
+ kbagent semantic-layer promote --from-project A --to-project B [--from-model M] [--to-model M] [--types T,T,...] [--dry-run] [--yes] [--scope project|organization|targeted] [--target-project ALIAS|ID ...]
1093
1148
  kbagent semantic-layer build --project P [--model M] --tables T,T,... [--name N] [--dry-run] [--keep-on-failure] [--output PATH]
1094
1149
  kbagent semantic-layer token --encrypt --project P --component-id C
1095
1150
  # scope (PSGO-140, new): visibility scope for a semantic-layer item -- "project"
@@ -1098,7 +1153,15 @@ kbagent semantic-layer token --encrypt --project P --component-id C
1098
1153
  # create` and every `add <kind>` above. --scope omitted: `model create` makes a "project"
1099
1154
  # item, `add <kind>` INHERITS its model's scope (an org-level model gets org-level children;
1100
1155
  # a targeted model, its target projects); an inherited organization scope is permission-gated
1101
- # like a typed one, and a non-org-admin gets a 403 on it (pass --scope project). --target-project takes a registered alias OR a
1156
+ # like a typed one, and a non-org-admin gets a 403 on it (pass --scope project). `import`,
1157
+ # `promote` and `build --model` create their NEW items at the target model's scope the same way
1158
+ # (same gate: FLAG_ESCALATIONS `semantic-layer.import|promote|build --scope organization`);
1159
+ # `import` / `promote --scope` (+ --target-project) override it, e.g. `--scope project` for a
1160
+ # non-org-admin under an org-level model; items they overwrite keep their own scope. Item names are unique per object type across ALL
1161
+ # models of a project (ALREADY_EXISTS says "in this project"), so a model cannot be copied into
1162
+ # a second model of the same project under the same item names. An item stored at schema version
1163
+ # 1.0.0 (created before 0.97.0) cannot be elevated: the error names the stored version and the
1164
+ # fix (export, delete, create again, import). --target-project takes a registered alias OR a
1102
1165
  # numeric project ID (repeatable or comma-separated; an alias must be on the owner's stack);
1103
1166
  # without --scope targeted it exits 2. With --scope targeted and no --target-project: a real
1104
1167
  # terminal launches an interactive picker over the other projects on the stack; --json fails
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: keboola-cli
3
- Version: 0.97.0
3
+ Version: 0.98.0
4
4
  Summary: AI-friendly CLI for managing Keboola projects
5
5
  Author-email: Keboola <dev@keboola.com>
6
6
  License-Expression: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "keboola-cli"
3
- version = "0.97.0"
3
+ version = "0.98.0"
4
4
  description = "AI-friendly CLI for managing Keboola projects"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -10,6 +10,7 @@ from .result_models import (
10
10
  JobResult,
11
11
  QueryResult,
12
12
  ScopedTokenResult,
13
+ StorageJobResult,
13
14
  StreamSourceResult,
14
15
  SyncPushResult,
15
16
  TokenListEntryResult,
@@ -32,6 +33,7 @@ __all__ = [
32
33
  "JobResult",
33
34
  "QueryResult",
34
35
  "ScopedTokenResult",
36
+ "StorageJobResult",
35
37
  "StreamSourceResult",
36
38
  "SyncPushResult",
37
39
  "TokenListEntryResult",
@@ -26,6 +26,44 @@ from .constants import CHANGELOG_HEADLINE_MAX_CHARS
26
26
 
27
27
  # Ordered newest-first. Each value is a list of brief one-line descriptions.
28
28
  CHANGELOG: dict[str, list[str]] = {
29
+ "0.98.0": [
30
+ "New (#837): `storage upload-table` and `file-upload` now upload large files to AWS "
31
+ "stacks in parts, so files over 5 GB work and memory stays flat. Files above 64 MiB are "
32
+ "sent as an S3 multipart upload: 64 MiB parts, four in parallel, each part retried on "
33
+ "its own. Before, kbagent read the whole file into memory and S3 refused anything over "
34
+ "5 GB. In a test, a 10 GB file that 0.97.0 could not upload (it used 10 GB of memory and "
35
+ "then failed) uploaded in about four minutes with under 350 MB of memory. A `.csv.gz` "
36
+ "file is uploaded as it is. Azure and GCP stacks are unchanged.",
37
+ "New (#837): `storage upload-table` and `load-file` can queue the import without waiting "
38
+ "for it, and the new `storage job-detail` command follows the import. `--no-wait` "
39
+ "returns `job_id` and `file_id` as soon as the import is queued; `--timeout` sets how "
40
+ "long the default `--wait` waits. `storage job-detail --job-id ID [--wait]` shows the "
41
+ "status, the table and the imported rows. When the wait times out, the error says the "
42
+ "import keeps running, names the job, and is no longer marked retryable, so a long "
43
+ "upload is not repeated by mistake. `kbagent serve` (`GET /storage/jobs/{project}/"
44
+ "{job_id}`) and the SDK (`Client.storage_job()`) have the same functions.",
45
+ "New (#837): `--progress` shows percent, speed, elapsed time and time left for storage "
46
+ "uploads and downloads. It works on `storage upload-table`, `file-upload`, "
47
+ "`download-table`, `file-download` and `unload-table --download`, and writes to stderr, also with `--json`: a progress bar in "
48
+ "a terminal, otherwise one line every 10 seconds.",
49
+ "Fix (#837): `storage download-table --keep-slices`, `file-download` and `unload-table` "
50
+ "now keep every slice file inside the output directory. A slice name from the export manifest that "
51
+ "could point outside it (`..`, a backslash, a drive letter) is replaced by "
52
+ "`part-NNNNN`.",
53
+ "Fix (#747): commands that process several items now exit 1 and print `Failed:` when "
54
+ "an item fails. Before, `sync push`, `sync clone`, `org setup`, `project refresh`, "
55
+ "`workspace gc`, several `semantic-layer` commands, `storage describe-batch --json`, "
56
+ "`flow schedule-remove` and others printed `Success:` and exited 0 even when items "
57
+ "failed. A `--dry-run` that reports a failed item exits 1 too. The `--json` output "
58
+ "keeps its keys, with a few additions such as `errors[]` in `flow schedule-remove`.",
59
+ "Fix (#836): `semantic-layer import`, `promote` and `build --model` now give new items "
60
+ "the scope of the target model. Before, they created every item at `project` scope, "
61
+ "also in a shared model, so the other projects could not see it. Items they overwrite "
62
+ "keep their own scope. Duplicate-name and elevation errors now say what is wrong and "
63
+ "how to fix it.",
64
+ "Change (#836): `semantic-layer add glossary` now requires `--definition`. Without it the "
65
+ "Metastore always rejected the item with a bare 422 error, so no working call breaks.",
66
+ ],
29
67
  "0.97.0": [
30
68
  "New (#715): semantic-layer items can now be shared with chosen projects or with the "
31
69
  "whole organization, not only kept in the owning project (AI-3790). `model create` and "
@@ -16,6 +16,7 @@ import time # noqa: F401 -- re-exported: tests patch keboola_agent_cli.client.
16
16
 
17
17
  from ..constants import QUERY_RESULTS_PAGE_SIZE
18
18
  from ._client import KeboolaClient
19
+ from ._core import storage_job_error_message
19
20
  from ._transfer import (
20
21
  InlineQueryResult,
21
22
  _assert_safe_download_url,
@@ -27,11 +28,13 @@ from ._transfer import (
27
28
  _iter_poll_intervals,
28
29
  _unwrap_bigquery_error,
29
30
  )
31
+ from .storage_tables import TableUploadOutcome
30
32
 
31
33
  __all__ = [
32
34
  "QUERY_RESULTS_PAGE_SIZE",
33
35
  "InlineQueryResult",
34
36
  "KeboolaClient",
37
+ "TableUploadOutcome",
35
38
  "_CloudDownloader",
36
39
  "_assert_safe_download_url",
37
40
  "_build_abs_upload_url",
@@ -40,4 +43,5 @@ __all__ = [
40
43
  "_extract_query_job_error",
41
44
  "_iter_poll_intervals",
42
45
  "_unwrap_bigquery_error",
46
+ "storage_job_error_message",
43
47
  ]
@@ -16,13 +16,18 @@ from typing import Any, Self
16
16
 
17
17
  import httpx
18
18
 
19
- from ..constants import DEFAULT_TIMEOUT, STORAGE_JOB_MAX_WAIT, STORAGE_JOB_POLL_INTERVAL
19
+ from ..constants import (
20
+ DEFAULT_TIMEOUT,
21
+ IMPORT_JOB_MAX_WAIT,
22
+ STORAGE_JOB_MAX_WAIT,
23
+ STORAGE_JOB_POLL_INTERVAL,
24
+ )
20
25
  from ..errors import ErrorCode, KeboolaApiError
21
26
  from ..http_base import BaseHttpClient
22
27
  from ..stream_client import StreamClient
23
28
 
24
29
 
25
- def _storage_job_error_message(job: dict[str, Any]) -> str:
30
+ def storage_job_error_message(job: dict[str, Any]) -> str:
26
31
  """Best-effort human message out of a failed Storage job's ``error`` field.
27
32
 
28
33
  Written tolerantly on purpose. An API ``error`` field is not reliably a
@@ -278,6 +283,8 @@ class _CoreClient(BaseHttpClient):
278
283
  self,
279
284
  job: dict[str, Any],
280
285
  max_wait: float | None = None,
286
+ *,
287
+ raise_on_error: bool = True,
281
288
  ) -> dict[str, Any]:
282
289
  """Poll a Storage API job until it reaches a terminal state.
283
290
 
@@ -309,12 +316,20 @@ class _CoreClient(BaseHttpClient):
309
316
  ``STORAGE_JOB_MAX_WAIT``. Callers whose jobs are legitimately
310
317
  slower pass their own budget -- e.g. a workspace load moving
311
318
  gigabytes (``WORKSPACE_LOAD_JOB_MAX_WAIT``).
319
+ raise_on_error: When False, a job that ended in ``error`` is
320
+ returned like a successful one instead of raising
321
+ ``STORAGE_JOB_FAILED`` -- for a caller that reports the job
322
+ itself (``storage job-detail --wait``) and would otherwise
323
+ lose every field but the message.
312
324
 
313
325
  Returns:
314
- Completed job dict (with results on success).
326
+ Terminal job dict (with results on success; with ``error`` when
327
+ ``raise_on_error`` is False and the job failed).
315
328
 
316
329
  Raises:
317
- KeboolaApiError: If the job fails or times out.
330
+ KeboolaApiError: If the job fails (unless ``raise_on_error`` is
331
+ False) or the budget runs out. The timeout carries
332
+ ``details={"job_id": ...}``.
318
333
  """
319
334
  budget = STORAGE_JOB_MAX_WAIT if max_wait is None else max_wait
320
335
  job_id = job.get("id")
@@ -324,8 +339,10 @@ class _CoreClient(BaseHttpClient):
324
339
  if status == "success":
325
340
  return job
326
341
  if status == "error":
342
+ if not raise_on_error:
343
+ return job
327
344
  raise KeboolaApiError(
328
- message=_storage_job_error_message(job),
345
+ message=storage_job_error_message(job),
329
346
  status_code=500,
330
347
  error_code=ErrorCode.STORAGE_JOB_FAILED,
331
348
  retryable=False,
@@ -351,4 +368,43 @@ class _CoreClient(BaseHttpClient):
351
368
  status_code=504,
352
369
  error_code=ErrorCode.STORAGE_JOB_TIMEOUT,
353
370
  retryable=True,
371
+ details={"job_id": job_id},
372
+ )
373
+
374
+ def get_storage_job(self, job_id: int | str) -> dict[str, Any]:
375
+ """Fetch one Storage API job (``GET /v2/storage/jobs/{id}``).
376
+
377
+ Job IDs are project-scoped and branch-independent: the route has no
378
+ ``/branch/{id}`` variant, so no branch is taken here.
379
+
380
+ Args:
381
+ job_id: Storage job ID (as returned by any async Storage write).
382
+
383
+ Returns:
384
+ The raw job dict (``id``, ``status``, ``operationName``,
385
+ ``operationParams``, ``results``, ``error``, timestamps, ...).
386
+ """
387
+ return self._request("GET", f"/v2/storage/jobs/{job_id}").json()
388
+
389
+ def follow_storage_job(
390
+ self, job_id: int | str, max_wait: float | None = None
391
+ ) -> dict[str, Any]:
392
+ """Fetch a Storage job and poll it to a terminal state.
393
+
394
+ Unlike the write paths, a job that ended in ``error`` is RETURNED, not
395
+ raised: the caller asked about the job, and the error is part of the
396
+ answer. A job already terminal costs exactly one GET.
397
+
398
+ Args:
399
+ job_id: Storage job ID.
400
+ max_wait: Seconds to poll. ``None`` means ``IMPORT_JOB_MAX_WAIT``
401
+ -- the jobs worth following by hand are the long imports.
402
+
403
+ Raises:
404
+ KeboolaApiError: ``STORAGE_JOB_TIMEOUT`` when the budget runs out
405
+ (the job keeps running; following it again is safe).
406
+ """
407
+ budget = IMPORT_JOB_MAX_WAIT if max_wait is None else max_wait
408
+ return self._wait_for_storage_job(
409
+ self.get_storage_job(job_id), max_wait=budget, raise_on_error=False
354
410
  )