keboola-cli 0.100.2__tar.gz → 0.100.4__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 (672) hide show
  1. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/CLAUDE.md +3 -3
  2. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/PKG-INFO +1 -1
  3. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/pyproject.toml +1 -1
  4. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/changelog.py +18 -0
  5. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/context.py +4 -4
  6. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/project.py +8 -3
  7. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_writeback.py +9 -1
  8. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_cli.py +64 -0
  9. keboola_cli-0.100.4/tests/test_sync_push_companion_hashes.py +137 -0
  10. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_service.py +9 -1
  11. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/.gitignore +0 -0
  12. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/CONTRIBUTING.md +0 -0
  13. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/LICENSE +0 -0
  14. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/Makefile +0 -0
  15. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/README.md +0 -0
  16. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/examples/README.md +0 -0
  17. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/examples/storage_tui/README.md +0 -0
  18. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/formal/sync/README.md +0 -0
  19. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/plugins/kbagent/.claude-plugin/CLAUDE.md +0 -0
  20. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/plugins/kbagent/skills/kbagent-cicd-migration/scripts/migrate_cicd.py +0 -0
  21. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/plugins/kbagent/skills/kbagent-promotion-pipeline/scripts/generate_promotion_pipeline.py +0 -0
  22. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_cli_spec.py +0 -0
  23. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_command_sync.py +0 -0
  24. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_error_codes.py +0 -0
  25. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_file_size.py +0 -0
  26. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_release_scope.py +0 -0
  27. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_sentinel_guards.py +0 -0
  28. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_version_gates.py +0 -0
  29. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/check_wheel_ui.py +0 -0
  30. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/cli_spec_baseline.json +0 -0
  31. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/debug_linkedby_type.sh +0 -0
  32. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/file_size_baseline.json +0 -0
  33. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/gen_command_reference.py +0 -0
  34. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/gen_endpoint_reference.py +0 -0
  35. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/gen_release_notes.py +0 -0
  36. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/generate_changelog.py +0 -0
  37. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/generate_skill.py +0 -0
  38. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/hatch_build.py +0 -0
  39. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/lineage_deep.py +0 -0
  40. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/post-edit-quality.sh +0 -0
  41. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/pre-commit +0 -0
  42. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/release_latest.py +0 -0
  43. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/sync_version.py +0 -0
  44. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/scripts/web-dev.sh +0 -0
  45. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/__init__.py +0 -0
  46. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/__main__.py +0 -0
  47. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/ai_client.py +0 -0
  48. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/__init__.py +0 -0
  49. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/auth_client.py +0 -0
  50. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/device.py +0 -0
  51. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/environment.py +0 -0
  52. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/models.py +0 -0
  53. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/pkce.py +0 -0
  54. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/sentinel.py +0 -0
  55. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/state_store.py +0 -0
  56. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/token_provider.py +0 -0
  57. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auth/totp.py +0 -0
  58. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/auto_update.py +0 -0
  59. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/cli.py +0 -0
  60. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/__init__.py +0 -0
  61. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/_client.py +0 -0
  62. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/_core.py +0 -0
  63. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/_s3_multipart.py +0 -0
  64. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/_transfer.py +0 -0
  65. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/billing.py +0 -0
  66. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/branches.py +0 -0
  67. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/configs.py +0 -0
  68. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/editor.py +0 -0
  69. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/merge_requests.py +0 -0
  70. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/misc.py +0 -0
  71. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/notifications.py +0 -0
  72. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/query.py +0 -0
  73. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/queue.py +0 -0
  74. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/storage_files.py +0 -0
  75. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/storage_tables.py +0 -0
  76. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/stream.py +0 -0
  77. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/tokens.py +0 -0
  78. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/triggers.py +0 -0
  79. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/client/workspaces.py +0 -0
  80. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/__init__.py +0 -0
  81. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_all_projects.py +0 -0
  82. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_auth_picker.py +0 -0
  83. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_checkbox_select.py +0 -0
  84. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_config_clone_cmd.py +0 -0
  85. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_config_oauth.py +0 -0
  86. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_config_trash_cmd.py +0 -0
  87. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_config_variables_render.py +0 -0
  88. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_data_app_git.py +0 -0
  89. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_data_app_password.py +0 -0
  90. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_data_app_runtime.py +0 -0
  91. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_flow_triggers.py +0 -0
  92. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_helpers.py +0 -0
  93. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_lineage_build_output.py +0 -0
  94. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_lineage_tree.py +0 -0
  95. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_merge_request_common.py +0 -0
  96. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_merge_request_render.py +0 -0
  97. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_merge_request_writes.py +0 -0
  98. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_metadata_input.py +0 -0
  99. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_progress.py +0 -0
  100. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_project_create.py +0 -0
  101. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_project_pin.py +0 -0
  102. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_project_ref.py +0 -0
  103. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_semantic_layer_crud.py +0 -0
  104. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_semantic_layer_helpers.py +0 -0
  105. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_semantic_layer_reference_data.py +0 -0
  106. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_semantic_layer_scope.py +0 -0
  107. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_storage_delete.py +0 -0
  108. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_storage_describe.py +0 -0
  109. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_storage_jobs.py +0 -0
  110. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_storage_snapshots.py +0 -0
  111. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_storage_table_detail.py +0 -0
  112. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_storage_tables_render.py +0 -0
  113. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_sync_clone_render.py +0 -0
  114. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_sync_push_render.py +0 -0
  115. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/_url_copy.py +0 -0
  116. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/agent.py +0 -0
  117. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/auth.py +0 -0
  118. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/billing.py +0 -0
  119. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/branch.py +0 -0
  120. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/changelog.py +0 -0
  121. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/component.py +0 -0
  122. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/config.py +0 -0
  123. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/config_state.py +0 -0
  124. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/data_app.py +0 -0
  125. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/dev_portal.py +0 -0
  126. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/docs.py +0 -0
  127. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/doctor.py +0 -0
  128. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/encrypt.py +0 -0
  129. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/feature.py +0 -0
  130. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/flow.py +0 -0
  131. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/http_client.py +0 -0
  132. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/init.py +0 -0
  133. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/job.py +0 -0
  134. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/kai.py +0 -0
  135. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/lineage.py +0 -0
  136. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/merge_request.py +0 -0
  137. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/notification.py +0 -0
  138. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/org.py +0 -0
  139. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/permissions.py +0 -0
  140. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/repl.py +0 -0
  141. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/schedule.py +0 -0
  142. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/search.py +0 -0
  143. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/semantic_layer.py +0 -0
  144. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/serve.py +0 -0
  145. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/sharing.py +0 -0
  146. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/storage.py +0 -0
  147. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/stream.py +0 -0
  148. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/sync.py +0 -0
  149. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/token.py +0 -0
  150. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/transformation.py +0 -0
  151. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/version.py +0 -0
  152. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/commands/workspace.py +0 -0
  153. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/config_store.py +0 -0
  154. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/constants.py +0 -0
  155. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/data_science_client.py +0 -0
  156. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/dev_portal_client.py +0 -0
  157. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/effective_branch.py +0 -0
  158. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/errors.py +0 -0
  159. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/frozen_dist.py +0 -0
  160. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/http_base.py +0 -0
  161. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/json_utils.py +0 -0
  162. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/lib.py +0 -0
  163. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/manage_client.py +0 -0
  164. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/metastore_client.py +0 -0
  165. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/models.py +0 -0
  166. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/output.py +0 -0
  167. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/permissions.py +0 -0
  168. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/project_ref.py +0 -0
  169. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/py.typed +0 -0
  170. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/resources/__init__.py +0 -0
  171. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/resources/flow/__init__.py +0 -0
  172. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/resources/flow/conditional-flow-schema.json +0 -0
  173. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/resources/flow/conditional_flow_examples.jsonl +0 -0
  174. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/resources/flow/flow-schema.json +0 -0
  175. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/resources/flow/legacy_flow_examples.jsonl +0 -0
  176. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/result_models.py +0 -0
  177. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/scheduler_client.py +0 -0
  178. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/__init__.py +0 -0
  179. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/_serve_command_map.py +0 -0
  180. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/agent_runner.py +0 -0
  181. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/agents_store.py +0 -0
  182. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/app.py +0 -0
  183. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/auth.py +0 -0
  184. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/dependencies.py +0 -0
  185. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/pricing.py +0 -0
  186. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/route_permissions.py +0 -0
  187. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/__init__.py +0 -0
  188. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/agents.py +0 -0
  189. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/ai_chat.py +0 -0
  190. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/auth.py +0 -0
  191. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/billing.py +0 -0
  192. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/branches.py +0 -0
  193. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/components.py +0 -0
  194. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/configs.py +0 -0
  195. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/data_apps.py +0 -0
  196. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/dev_portal.py +0 -0
  197. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/docs.py +0 -0
  198. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/encrypt.py +0 -0
  199. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/feature.py +0 -0
  200. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/flows.py +0 -0
  201. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/health.py +0 -0
  202. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/jobs.py +0 -0
  203. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/kai.py +0 -0
  204. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/lineage.py +0 -0
  205. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/members.py +0 -0
  206. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/merge_requests.py +0 -0
  207. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/notifications.py +0 -0
  208. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/org.py +0 -0
  209. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/permissions.py +0 -0
  210. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/projects.py +0 -0
  211. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/schedules.py +0 -0
  212. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/search.py +0 -0
  213. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/semantic_layer.py +0 -0
  214. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/sharing.py +0 -0
  215. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/storage.py +0 -0
  216. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/stream.py +0 -0
  217. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/token.py +0 -0
  218. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/transformation.py +0 -0
  219. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/routers/workspaces.py +0 -0
  220. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/run_broadcaster.py +0 -0
  221. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/server/sse.py +0 -0
  222. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/__init__.py +0 -0
  223. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_auth_registration.py +0 -0
  224. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_column_descriptions.py +0 -0
  225. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_config_clone.py +0 -0
  226. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_config_set_guard.py +0 -0
  227. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_config_trash.py +0 -0
  228. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_data_app_bodies.py +0 -0
  229. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_data_app_password.py +0 -0
  230. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_describe_batch_input.py +0 -0
  231. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_encryption.py +0 -0
  232. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_lineage_ai.py +0 -0
  233. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_lineage_er.py +0 -0
  234. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_lineage_mermaid.py +0 -0
  235. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_lineage_paths.py +0 -0
  236. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_lineage_trace.py +0 -0
  237. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_cascade.py +0 -0
  238. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_crud.py +0 -0
  239. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_fqn.py +0 -0
  240. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_internals.py +0 -0
  241. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_lookup.py +0 -0
  242. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_reference_data.py +0 -0
  243. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_semantic_layer_scope.py +0 -0
  244. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_storage_downloads.py +0 -0
  245. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_storage_jobs.py +0 -0
  246. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_storage_tables.py +0 -0
  247. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_baseline.py +0 -0
  248. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_bindings.py +0 -0
  249. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_branch.py +0 -0
  250. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_bulk.py +0 -0
  251. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_clone.py +0 -0
  252. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_clone_warnings.py +0 -0
  253. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_data_app.py +0 -0
  254. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_models.py +0 -0
  255. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_project_guard.py +0 -0
  256. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_push_ops.py +0 -0
  257. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_stale.py +0 -0
  258. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_storage.py +0 -0
  259. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_sync_workspace.py +0 -0
  260. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_table_detail.py +0 -0
  261. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_token_last_used.py +0 -0
  262. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_transformation_ops.py +0 -0
  263. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/_workspace_load_plan.py +0 -0
  264. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/agent_service.py +0 -0
  265. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/auth_service.py +0 -0
  266. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/base.py +0 -0
  267. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/billing_service.py +0 -0
  268. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/branch_service.py +0 -0
  269. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/component_service.py +0 -0
  270. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/config_service.py +0 -0
  271. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/data_app_git_service.py +0 -0
  272. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/data_app_service.py +0 -0
  273. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/deep_lineage_service.py +0 -0
  274. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/dev_portal_service.py +0 -0
  275. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/docs_service.py +0 -0
  276. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/doctor_service.py +0 -0
  277. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/encrypt_service.py +0 -0
  278. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/feature_service.py +0 -0
  279. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/flow_service.py +0 -0
  280. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/flow_validation.py +0 -0
  281. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/http_forwarder_service.py +0 -0
  282. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/job_idempotency_store.py +0 -0
  283. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/job_service.py +0 -0
  284. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/kai_service.py +0 -0
  285. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/lineage_service.py +0 -0
  286. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/member_service.py +0 -0
  287. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/merge_request_service.py +0 -0
  288. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/notification_service.py +0 -0
  289. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/org_service.py +0 -0
  290. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/project_service.py +0 -0
  291. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/repo_validate_service.py +0 -0
  292. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/schedule_service.py +0 -0
  293. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/search_service.py +0 -0
  294. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/semantic_layer_service.py +0 -0
  295. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/sharing_service.py +0 -0
  296. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/snapshot_service.py +0 -0
  297. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/storage_service.py +0 -0
  298. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/stream_service.py +0 -0
  299. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/sync_service.py +0 -0
  300. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/table_usage.py +0 -0
  301. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/token_service.py +0 -0
  302. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/transformation_service.py +0 -0
  303. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/variables_service.py +0 -0
  304. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/version_service.py +0 -0
  305. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/services/workspace_service.py +0 -0
  306. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/stream_client.py +0 -0
  307. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/__init__.py +0 -0
  308. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/branch_mapping.py +0 -0
  309. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/branch_registry.py +0 -0
  310. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/branch_scope.py +0 -0
  311. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/clone.py +0 -0
  312. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/code_extraction.py +0 -0
  313. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/config_format.py +0 -0
  314. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/diff_engine.py +0 -0
  315. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/git_utils.py +0 -0
  316. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/manifest.py +0 -0
  317. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/naming.py +0 -0
  318. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/secrets.py +0 -0
  319. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/sync/sql_split.py +0 -0
  320. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/telemetry.py +0 -0
  321. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/update_notice.py +0 -0
  322. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/update_runner.py +0 -0
  323. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/src/keboola_agent_cli/yaml_input.py +0 -0
  324. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/__init__.py +0 -0
  325. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/conftest.py +0 -0
  326. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/helpers.py +0 -0
  327. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/snapshots/human_output/branch_merge_warning.txt +0 -0
  328. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/snapshots/human_output/config_detail_api_error.txt +0 -0
  329. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/snapshots/human_output/config_detail_panel.txt +0 -0
  330. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/snapshots/human_output/config_list_fanout_failure.txt +0 -0
  331. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/snapshots/human_output/config_list_table.txt +0 -0
  332. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/snapshots/human_output/project_remove_success.txt +0 -0
  333. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agent_cli.py +0 -0
  334. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agent_prompt.py +0 -0
  335. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agent_prompt_helper.py +0 -0
  336. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agent_runner.py +0 -0
  337. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agent_service.py +0 -0
  338. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agent_tombstone.py +0 -0
  339. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_agents_store_events.py +0 -0
  340. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_ai_client.py +0 -0
  341. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_all_projects_and_warnings.py +0 -0
  342. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_api_call_counts.py +0 -0
  343. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_client.py +0 -0
  344. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_device.py +0 -0
  345. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_environment.py +0 -0
  346. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_models.py +0 -0
  347. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_picker.py +0 -0
  348. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_pkce.py +0 -0
  349. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_register_projects.py +0 -0
  350. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_sentinel.py +0 -0
  351. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_sentinel_guards.py +0 -0
  352. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_service.py +0 -0
  353. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_state_store.py +0 -0
  354. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auth_totp.py +0 -0
  355. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_auto_update.py +0 -0
  356. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_base_service.py +0 -0
  357. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_billing_cli.py +0 -0
  358. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_billing_client.py +0 -0
  359. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_billing_service.py +0 -0
  360. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_branch_metadata_cli.py +0 -0
  361. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_branch_metadata_service.py +0 -0
  362. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_branch_registry.py +0 -0
  363. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_branch_service.py +0 -0
  364. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_branch_zero.py +0 -0
  365. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_build_hook.py +0 -0
  366. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_changelog_check.py +0 -0
  367. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_changelog_render.py +0 -0
  368. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_check_cli_spec.py +0 -0
  369. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_check_command_sync.py +0 -0
  370. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_check_file_size.py +0 -0
  371. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_check_release_scope.py +0 -0
  372. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_check_sentinel_guards.py +0 -0
  373. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_check_version_gates.py +0 -0
  374. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_checkbox_select.py +0 -0
  375. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_choice_enums.py +0 -0
  376. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_cli_auth.py +0 -0
  377. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_cli_contract.py +0 -0
  378. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_cli_human_snapshots.py +0 -0
  379. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_client.py +0 -0
  380. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_client_device_enrollment.py +0 -0
  381. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_client_token_events.py +0 -0
  382. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_component_cli.py +0 -0
  383. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_component_service.py +0 -0
  384. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_component_sync_action.py +0 -0
  385. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_clone_cli.py +0 -0
  386. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_clone_service.py +0 -0
  387. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_create_cli.py +0 -0
  388. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_create_service.py +0 -0
  389. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_encryption.py +0 -0
  390. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_examples.py +0 -0
  391. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_metadata.py +0 -0
  392. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_rename.py +0 -0
  393. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_rename_cli.py +0 -0
  394. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_resolution.py +0 -0
  395. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_row_cli.py +0 -0
  396. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_row_service.py +0 -0
  397. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_search.py +0 -0
  398. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_search_cli.py +0 -0
  399. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_set_default_bucket.py +0 -0
  400. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_set_guard.py +0 -0
  401. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_state.py +0 -0
  402. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_store.py +0 -0
  403. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_trash.py +0 -0
  404. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_config_update.py +0 -0
  405. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_cli.py +0 -0
  406. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_git_repo.py +0 -0
  407. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_password.py +0 -0
  408. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_plain_env_keys.py +0 -0
  409. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_secrets_cli.py +0 -0
  410. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_secrets_service.py +0 -0
  411. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_service.py +0 -0
  412. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_data_app_validate_repo_service.py +0 -0
  413. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_deep_lineage_ai.py +0 -0
  414. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_deep_lineage_service.py +0 -0
  415. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_dev_portal_cli.py +0 -0
  416. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_dev_portal_client.py +0 -0
  417. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_dev_portal_service.py +0 -0
  418. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_doc_examples.py +0 -0
  419. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_docs_cli.py +0 -0
  420. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_doctor_service.py +0 -0
  421. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_e2e.py +0 -0
  422. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_e2e_auth.py +0 -0
  423. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_e2e_config_dir_mode.py +0 -0
  424. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_e2e_lineage_deep.py +0 -0
  425. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_effective_branch.py +0 -0
  426. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_encrypt_cli.py +0 -0
  427. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_encrypt_service.py +0 -0
  428. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_encryption.py +0 -0
  429. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_error_forwarding.py +0 -0
  430. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_errors.py +0 -0
  431. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_feature_cli.py +0 -0
  432. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_feature_service.py +0 -0
  433. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_file_locking.py +0 -0
  434. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_flow_cli.py +0 -0
  435. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_flow_examples.py +0 -0
  436. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_flow_service.py +0 -0
  437. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_flow_validation.py +0 -0
  438. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_frozen_dist.py +0 -0
  439. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_gen_command_reference.py +0 -0
  440. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_gen_endpoint_reference.py +0 -0
  441. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_gen_release_notes.py +0 -0
  442. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_generate_promotion_pipeline.py +0 -0
  443. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_helpers.py +0 -0
  444. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_http_base.py +0 -0
  445. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_http_base_auth.py +0 -0
  446. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_http_client_cmd.py +0 -0
  447. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_http_forwarder_service.py +0 -0
  448. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_install_script.py +0 -0
  449. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_integration.py +0 -0
  450. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_job_idempotency_store.py +0 -0
  451. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_job_options.py +0 -0
  452. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_json_utils.py +0 -0
  453. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_kai_cli.py +0 -0
  454. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_kai_service.py +0 -0
  455. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_lib.py +0 -0
  456. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_lib_device_enrollment.py +0 -0
  457. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_license_consistency.py +0 -0
  458. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_lineage_service.py +0 -0
  459. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_lineage_view.py +0 -0
  460. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_local_ai_chat.py +0 -0
  461. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_major_gate.py +0 -0
  462. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_manage_client.py +0 -0
  463. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_manage_token_bulk.py +0 -0
  464. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_manage_token_cli.py +0 -0
  465. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_mcp_migration_recipe.py +0 -0
  466. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_member_cli.py +0 -0
  467. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_member_service.py +0 -0
  468. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_merge_request_cli.py +0 -0
  469. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_merge_request_client.py +0 -0
  470. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_merge_request_service.py +0 -0
  471. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_metastore_client.py +0 -0
  472. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_migrate_cicd.py +0 -0
  473. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_migration_page.py +0 -0
  474. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_models.py +0 -0
  475. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_normalize_script.py +0 -0
  476. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_notification_cli.py +0 -0
  477. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_notification_client.py +0 -0
  478. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_notification_service.py +0 -0
  479. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_org_service.py +0 -0
  480. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_output.py +0 -0
  481. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_partial_failure_exit_code.py +0 -0
  482. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_permissions.py +0 -0
  483. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_permissions_cli.py +0 -0
  484. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_pinned_installs.py +0 -0
  485. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_pricing.py +0 -0
  486. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_create_cli.py +0 -0
  487. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_edit.py +0 -0
  488. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_edit_cli.py +0 -0
  489. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_info_cli.py +0 -0
  490. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_info_service.py +0 -0
  491. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_ref.py +0 -0
  492. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_project_token_stdin_no_leak.py +0 -0
  493. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_release_kbagent_ai_kit_sync.py +0 -0
  494. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_release_latest.py +0 -0
  495. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_release_workflow_major.py +0 -0
  496. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_repl.py +0 -0
  497. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_result_models.py +0 -0
  498. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_run_broadcaster.py +0 -0
  499. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_s3_multipart.py +0 -0
  500. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_schedule_cli.py +0 -0
  501. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_schedule_service.py +0 -0
  502. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_scheduler_client.py +0 -0
  503. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_search_cli.py +0 -0
  504. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_search_service.py +0 -0
  505. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_semantic_layer_cli.py +0 -0
  506. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_semantic_layer_schema.py +0 -0
  507. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_semantic_layer_scope.py +0 -0
  508. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_semantic_layer_scope_cli.py +0 -0
  509. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_semantic_layer_service.py +0 -0
  510. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_serve_banner_encoding.py +0 -0
  511. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_serve_conversation_id.py +0 -0
  512. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_serve_extras_hint.py +0 -0
  513. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_serve_telemetry.py +0 -0
  514. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_serve_ui.py +0 -0
  515. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_active_project.py +0 -0
  516. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_auth.py +0 -0
  517. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_dry_run_guard.py +0 -0
  518. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_permissions.py +0 -0
  519. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_production_branch.py +0 -0
  520. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_project_ref.py +0 -0
  521. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_route_permissions.py +0 -0
  522. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_router_calls.py +0 -0
  523. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_semantic_layer_routes_e2e.py +0 -0
  524. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_server_smoke.py +0 -0
  525. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_services.py +0 -0
  526. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sharing_cli.py +0 -0
  527. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sharing_service.py +0 -0
  528. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_skill_frontmatter.py +0 -0
  529. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sql_split.py +0 -0
  530. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_clone.py +0 -0
  531. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_create_table.py +0 -0
  532. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_delete.py +0 -0
  533. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_describe_cli.py +0 -0
  534. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_describe_service.py +0 -0
  535. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_empty_definition.py +0 -0
  536. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_export_filters.py +0 -0
  537. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_files.py +0 -0
  538. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_import_jobs.py +0 -0
  539. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_snapshots.py +0 -0
  540. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_swap.py +0 -0
  541. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_table_definition.py +0 -0
  542. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_tables.py +0 -0
  543. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_truncate.py +0 -0
  544. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_storage_write.py +0 -0
  545. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_stream_cli.py +0 -0
  546. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_stream_client.py +0 -0
  547. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_stream_service.py +0 -0
  548. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_adopted_files.py +0 -0
  549. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_baseline_stamping.py +0 -0
  550. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_branch_mapping.py +0 -0
  551. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_branch_scope.py +0 -0
  552. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_cli.py +0 -0
  553. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_cli_behavior.py +0 -0
  554. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_clone.py +0 -0
  555. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_clone_links.py +0 -0
  556. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_code_extraction.py +0 -0
  557. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_config_format.py +0 -0
  558. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_data_app_type.py +0 -0
  559. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_diff_engine.py +0 -0
  560. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_e2e.py +0 -0
  561. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_encrypt.py +0 -0
  562. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_force_pull_baseline.py +0 -0
  563. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_formal_counterexamples.py +0 -0
  564. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_manifest.py +0 -0
  565. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_naming.py +0 -0
  566. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_plaintext_audit.py +0 -0
  567. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_project_guard.py +0 -0
  568. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_pull_companion_files.py +0 -0
  569. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_push_encrypt_first.py +0 -0
  570. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_push_script_guard.py +0 -0
  571. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_reconcile.py +0 -0
  572. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_secrets.py +0 -0
  573. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_storage_jobs.py +0 -0
  574. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_version_script.py +0 -0
  575. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_sync_workspaces.py +0 -0
  576. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_table_usage.py +0 -0
  577. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_telemetry.py +0 -0
  578. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_token_cli.py +0 -0
  579. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_token_provider.py +0 -0
  580. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_token_service.py +0 -0
  581. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_transfer_progress.py +0 -0
  582. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_transformation_cli.py +0 -0
  583. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_transformation_ops.py +0 -0
  584. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_triggers_client.py +0 -0
  585. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_update_runner.py +0 -0
  586. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_url_copy.py +0 -0
  587. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_variables_cli.py +0 -0
  588. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_variables_service.py +0 -0
  589. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_version_service.py +0 -0
  590. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_workspace_cli.py +0 -0
  591. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_workspace_gc.py +0 -0
  592. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_workspace_service.py +0 -0
  593. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_workspace_sql_helper.py +0 -0
  594. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/tests/test_yaml_input.py +0 -0
  595. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/README.md +0 -0
  596. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/index.html +0 -0
  597. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/package-lock.json +0 -0
  598. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/package.json +0 -0
  599. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/postcss.config.js +0 -0
  600. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/App.tsx +0 -0
  601. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/api/client.test.ts +0 -0
  602. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/api/client.ts +0 -0
  603. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/changelogNotes.test.ts +0 -0
  604. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/changelogNotes.ts +0 -0
  605. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/AgentRunView.tsx +0 -0
  606. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/CommandPalette.tsx +0 -0
  607. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/ConfirmModal.tsx +0 -0
  608. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/DetailTabs.tsx +0 -0
  609. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/Drawer.tsx +0 -0
  610. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/Empty.tsx +0 -0
  611. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/JsonView.tsx +0 -0
  612. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/KeyValueGrid.tsx +0 -0
  613. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/ManageTokenModal.tsx +0 -0
  614. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/PillList.tsx +0 -0
  615. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/RawDetail.tsx +0 -0
  616. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/SessionExpiredBanner.tsx +0 -0
  617. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/Table.tsx +0 -0
  618. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/components/WhatsNew.tsx +0 -0
  619. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/config/credits.test.ts +0 -0
  620. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/config/credits.ts +0 -0
  621. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/index.css +0 -0
  622. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/layout/Shell.tsx +0 -0
  623. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/layout/Sidebar.tsx +0 -0
  624. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/layout/StatusBar.tsx +0 -0
  625. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/layout/TopBar.tsx +0 -0
  626. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/lib/branch.test.ts +0 -0
  627. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/lib/branch.ts +0 -0
  628. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/lib/time.test.ts +0 -0
  629. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/lib/time.ts +0 -0
  630. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/main.tsx +0 -0
  631. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Agents.tsx +0 -0
  632. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Branches.tsx +0 -0
  633. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Changelog.tsx +0 -0
  634. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Components.tsx +0 -0
  635. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Configs.tsx +0 -0
  636. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Dashboard.tsx +0 -0
  637. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/DataApps.tsx +0 -0
  638. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Doctor.tsx +0 -0
  639. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Encrypt.tsx +0 -0
  640. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Flows.tsx +0 -0
  641. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Jobs.tsx +0 -0
  642. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/JobsAll.tsx +0 -0
  643. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Lineage.tsx +0 -0
  644. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/LocalAi.tsx +0 -0
  645. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Members.tsx +0 -0
  646. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Org.tsx +0 -0
  647. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Projects.tsx +0 -0
  648. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Schedules.tsx +0 -0
  649. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Search.tsx +0 -0
  650. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/SemanticLayer.tsx +0 -0
  651. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/SemanticLayerDialogs.tsx +0 -0
  652. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Sharing.tsx +0 -0
  653. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Storage.tsx +0 -0
  654. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Streams.tsx +0 -0
  655. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Tokens.tsx +0 -0
  656. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/TokensAll.tsx +0 -0
  657. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/Workspaces.tsx +0 -0
  658. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/jobsShared.test.ts +0 -0
  659. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/jobsShared.tsx +0 -0
  660. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/storageSel.test.ts +0 -0
  661. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/tokensShared.test.ts +0 -0
  662. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/pages/tokensShared.tsx +0 -0
  663. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/router.test.ts +0 -0
  664. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/router.ts +0 -0
  665. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/state.tsx +0 -0
  666. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/theme.tsx +0 -0
  667. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/types.ts +0 -0
  668. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/useHashSelection.ts +0 -0
  669. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/src/whatsnew.ts +0 -0
  670. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/tailwind.config.ts +0 -0
  671. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/tsconfig.json +0 -0
  672. {keboola_cli-0.100.2 → keboola_cli-0.100.4}/web/frontend/vite.config.ts +0 -0
@@ -490,7 +490,7 @@ kbagent auth register-projects [--stack URL|alias] [--all] [--project-id ID ...]
490
490
  # starts the server and blocks every destructive route (none of them under `/auth/*`).
491
491
  # See docs/web-server.md.
492
492
 
493
- kbagent project create --url URL [--project ALIAS] [--name NAME] [--backend snowflake|bigquery] [--sync-backend-init]
493
+ kbagent project create --url URL [--project|--alias ALIAS] [--name NAME] [--backend snowflake|bigquery] [--sync-backend-init]
494
494
  # project create (since 0.95.0, DMD-1940): the ONLY kbagent command that works from nothing --
495
495
  # no account, no token, no `auth login`. POSTs the unauthenticated provisioning endpoint
496
496
  # (`/manage/programmatic-projects`, gated by the `agent-provisioning` stack feature
@@ -515,13 +515,13 @@ kbagent project create --url URL [--project ALIAS] [--name NAME] [--backend snow
515
515
  # delivered and may have succeeded (retryable:false, message says not to repeat -- check
516
516
  # `auth status`, whose stored session + claim link is the evidence). `--sync-backend-init`
517
517
  # raises that call's read timeout to 300s, which can outlast an agent's foreground shell.
518
- kbagent project add --project NAME --url URL [--token-stdin | --token-file PATH [--keep-token-file] | --token-env NAME | --token TOKEN]
518
+ kbagent project add --project|--alias NAME --url URL [--token-stdin | --token-file PATH [--keep-token-file] | --token-env NAME | --token TOKEN]
519
519
  kbagent project list
520
520
  kbagent project remove --project NAME
521
521
  kbagent project edit --project NAME [--url URL] [--token-stdin | --token-file PATH [--keep-token-file] | --token-env NAME | --token TOKEN] [--new-alias NEW]
522
522
  kbagent project status [--project NAME | --all-projects]
523
523
  kbagent project refresh --project ALIAS [--dry-run] [--force] [--yes] [--token-description DESC] [--token-expires-in N]
524
- kbagent project refresh --all [--dry-run] [--force] [--yes] [--token-description DESC] [--token-expires-in N]
524
+ kbagent project refresh --all|--all-projects [--dry-run] [--force] [--yes] [--token-description DESC] [--token-expires-in N]
525
525
  kbagent project description-get --project NAME
526
526
  kbagent project description-set --project NAME [--text STR | --file PATH | --stdin]
527
527
  kbagent project use ALIAS
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: keboola-cli
3
- Version: 0.100.2
3
+ Version: 0.100.4
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.100.2"
3
+ version = "0.100.4"
4
4
  description = "AI-friendly CLI for managing Keboola projects"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -26,6 +26,24 @@ 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.100.4": [
30
+ "Fix (#919, backport of #917): `sync push` now sends an edit to `transform.sql` or another code file "
31
+ "of a config that a push created. Before, it found no change in such a file "
32
+ "(`transform.sql`, `transform.py`, `code.py`, `pyproject.toml`, `_description.md`): "
33
+ "`sync diff` said in sync, `sync push` said there was nothing to push, and the job "
34
+ "kept running the old code. With the same gap, `sync pull --force` could "
35
+ "replace such an edit with the remote code; it now stops with `SYNC_CONFLICT`. An edit "
36
+ "to `_config.yml` was always detected. A tree written by an older version is fixed by "
37
+ "one `sync pull`; copy edited code files aside before it.",
38
+ ],
39
+ "0.100.3": [
40
+ "New (#911): `project add` and `project create` also take the alias of the new project "
41
+ "as `--alias`, and `project refresh` also takes `--all-projects`. These are the names of "
42
+ "kbagent 1.0.0, which removes `--project` from these two commands and `--all` from "
43
+ "`project refresh`. A script with the new names works on 0.100.3 and on 1.x. On 0.x, "
44
+ "`--project` and `--all` keep working.",
45
+ "Note (#912): housekeeping with no user-facing change. It updates the filelock package.",
46
+ ],
29
47
  "0.100.2": [
30
48
  "Fix (#898): `kbagent update --beta` now allows a pre-release of kbagent itself, not of "
31
49
  "the Python packages that kbagent uses. Before, it allowed pre-releases of every package, "
@@ -268,7 +268,7 @@ Use `kbagent <command> --help` for full flag details and examples.
268
268
 
269
269
  ### Project Management
270
270
 
271
- kbagent project create --url URL [--project ALIAS] [--name NAME]
271
+ kbagent project create --url URL [--project|--alias ALIAS] [--name NAME]
272
272
  [--backend snowflake|bigquery] [--sync-backend-init]
273
273
  Create a BRAND-NEW Keboola project from a machine with no Keboola
274
274
  identity -- no account, no token, no `auth login` first. The only command
@@ -300,7 +300,7 @@ Use `kbagent <command> --help` for full flag details and examples.
300
300
  the stack finish it in the background (the async default warns that the
301
301
  first Storage command may fail until it lands).
302
302
 
303
- kbagent project add --project NAME --url URL [--token-stdin | --token-file PATH | --token-env NAME | --token TOKEN]
303
+ kbagent project add --project|--alias NAME --url URL [--token-stdin | --token-file PATH | --token-env NAME | --token TOKEN]
304
304
  Add a new project connection. Token verified against API.
305
305
  See "Getting a Storage token in" below before you pick a flag.
306
306
 
@@ -374,8 +374,8 @@ Use `kbagent <command> --help` for full flag details and examples.
374
374
  `project list`, including on an ERROR row.
375
375
 
376
376
  kbagent project refresh --project ALIAS [--dry-run] [--force] [--yes] [--token-description ...] [--token-expires-in N]
377
- kbagent project refresh --all [--dry-run] [--force] [--yes] [--token-description ...] [--token-expires-in N]
378
- Refresh project tokens via Manage API. --all refreshes all projects. --force replaces non-expiring tokens.
377
+ kbagent project refresh --all|--all-projects [--dry-run] [--force] [--yes] [--token-description ...] [--token-expires-in N]
378
+ Refresh project tokens via Manage API. --all (or --all-projects) refreshes all projects. --force replaces non-expiring tokens.
379
379
  Browser-login (session) projects are reported under "skipped" with the
380
380
  reason that there is no static token to replace -- their access token
381
381
  rotates on its own from auth.json. --force does NOT convert them either;
@@ -172,7 +172,9 @@ def _format_status_table(console: Console, statuses: list[dict[str, Any]]) -> No
172
172
  @project_app.command("add")
173
173
  def project_add(
174
174
  ctx: typer.Context,
175
- alias: str = typer.Option(..., "--project", help="Human-friendly name for this project"),
175
+ alias: str = typer.Option(
176
+ ..., "--project", "--alias", help="Human-friendly name for this project"
177
+ ),
176
178
  url: str = typer.Option(
177
179
  DEFAULT_STACK_URL,
178
180
  help="Keboola stack URL",
@@ -244,7 +246,10 @@ def project_create(
244
246
  help="Keboola stack URL to create the project on (required -- never guessed)",
245
247
  ),
246
248
  alias: str | None = typer.Option(
247
- None, "--project", help="Local alias for the new project (default: from its name)"
249
+ None,
250
+ "--project",
251
+ "--alias",
252
+ help="Local alias for the new project (default: from its name)",
248
253
  ),
249
254
  name: str | None = typer.Option(None, "--name", help="Name for the new Keboola project"),
250
255
  backend: ProjectBackend | None = typer.Option(
@@ -574,7 +579,7 @@ def project_refresh(
574
579
  None, "--project", "-p", help="Refresh token for a specific project"
575
580
  ),
576
581
  all_projects: bool = typer.Option(
577
- False, "--all", help="Refresh all projects with invalid tokens"
582
+ False, "--all", "--all-projects", help="Refresh all projects with invalid tokens"
578
583
  ),
579
584
  dry_run: bool = typer.Option(
580
585
  False, "--dry-run", help="Preview what would be refreshed without making changes"
@@ -61,6 +61,7 @@ def stamp_created_config(
61
61
  new_id=new_id,
62
62
  file_hash=hashes.file_hash,
63
63
  cfg_hash=stamp.cfg_hash,
64
+ extra_hashes=hashes.extra_hashes,
64
65
  )
65
66
  apply_stamp(writeback.entry.metadata, stamp)
66
67
  return writeback
@@ -112,6 +113,7 @@ def stamp_updated_config(
112
113
  new_id=config_id,
113
114
  file_hash=hashes.file_hash,
114
115
  cfg_hash=stamp.cfg_hash,
116
+ extra_hashes=hashes.extra_hashes,
115
117
  ).entry
116
118
  apply_stamp(entry.metadata, stamp)
117
119
 
@@ -125,6 +127,7 @@ def writeback_create_config_in_manifest(
125
127
  new_id: str,
126
128
  file_hash: str,
127
129
  cfg_hash: str,
130
+ extra_hashes: dict[str, str],
128
131
  ) -> WritebackResult:
129
132
  """Record a freshly-created config in the manifest.
130
133
 
@@ -154,13 +157,18 @@ def writeback_create_config_in_manifest(
154
157
  entry.id = new_id
155
158
  entry.metadata["pull_hash"] = file_hash
156
159
  entry.metadata["pull_config_hash"] = cfg_hash
160
+ entry.metadata["pull_extra_hashes"] = extra_hashes
157
161
  return WritebackResult(entry=entry, previous_id=previous_id)
158
162
  new_entry = ManifestConfiguration(
159
163
  branchId=target_branch,
160
164
  componentId=component_id,
161
165
  id=new_id,
162
166
  path=config_path_str,
163
- metadata={"pull_hash": file_hash, "pull_config_hash": cfg_hash},
167
+ metadata={
168
+ "pull_hash": file_hash,
169
+ "pull_config_hash": cfg_hash,
170
+ "pull_extra_hashes": extra_hashes,
171
+ },
164
172
  )
165
173
  manifest.configurations.append(new_entry)
166
174
  return WritebackResult(entry=new_entry, previous_id="")
@@ -10,6 +10,7 @@ from typing import Any
10
10
  from unittest.mock import MagicMock, patch
11
11
 
12
12
  import pytest
13
+ import typer.main
13
14
  from typer.testing import CliRunner
14
15
 
15
16
  from helpers import make_mock_client
@@ -75,6 +76,48 @@ class TestProjectAdd:
75
76
  # Token should be masked
76
77
  assert "55555" not in output["data"]["token"]
77
78
 
79
+ def test_project_add_alias_option(self, tmp_path: Path) -> None:
80
+ """--alias is the 1.x name of --project here, so one command works on 0.x and 1.x."""
81
+ mock_client = make_mock_client(project_name="Prod Project", project_id=5678)
82
+ config_dir = tmp_path / "config"
83
+ config_dir.mkdir()
84
+
85
+ with (
86
+ patch("keboola_agent_cli.cli.ConfigStore") as MockStore,
87
+ patch("keboola_agent_cli.cli.ProjectService") as MockService,
88
+ patch.dict(os.environ, {"KBC_TOKEN": TEST_TOKEN}),
89
+ ):
90
+ store_instance = ConfigStore(config_dir=config_dir)
91
+ MockStore.return_value = store_instance
92
+ MockService.return_value = ProjectService(
93
+ config_store=store_instance,
94
+ client_factory=lambda url, token: mock_client,
95
+ )
96
+
97
+ result = runner.invoke(
98
+ app,
99
+ [
100
+ "--json",
101
+ "project",
102
+ "add",
103
+ "--alias",
104
+ "prod",
105
+ "--url",
106
+ "https://connection.keboola.com",
107
+ ],
108
+ )
109
+
110
+ assert result.exit_code == 0, f"Exit code {result.exit_code}: {result.output}"
111
+ assert json.loads(result.output)["data"]["alias"] == "prod"
112
+ assert "prod" in store_instance.load().projects
113
+
114
+ def test_project_create_takes_alias_option(self) -> None:
115
+ """project create accepts --alias, the 1.x name of its --project."""
116
+ root: Any = typer.main.get_command(app)
117
+ create = root.commands["project"].commands["create"]
118
+ alias = next(p for p in create.params if p.name == "alias")
119
+ assert alias.opts == ["--project", "--alias"]
120
+
78
121
  def test_project_add_success_human(self, tmp_path: Path) -> None:
79
122
  """project add in human mode outputs success message."""
80
123
  mock_client = make_mock_client()
@@ -8520,6 +8563,27 @@ class TestProjectRefresh:
8520
8563
  assert output["status"] == "error"
8521
8564
  assert "not both" in output["error"]["message"]
8522
8565
 
8566
+ def test_project_refresh_all_projects_is_the_all_option(self, tmp_path: Path) -> None:
8567
+ """--all-projects is the 1.x name of --all: with --project it is the same usage error."""
8568
+ config_dir = tmp_path / "config"
8569
+ config_dir.mkdir()
8570
+ store = ConfigStore(config_dir=config_dir)
8571
+
8572
+ with (
8573
+ patch("keboola_agent_cli.cli.ConfigStore") as MockStore,
8574
+ patch("keboola_agent_cli.cli.OrgService"),
8575
+ ):
8576
+ MockStore.return_value = store
8577
+
8578
+ result = runner.invoke(
8579
+ app,
8580
+ ["--json", "project", "refresh", "--project", "prod", "--all-projects", "--yes"],
8581
+ )
8582
+
8583
+ assert result.exit_code == 2, f"Exit code {result.exit_code}: {result.output}"
8584
+ output = json.loads(result.output)
8585
+ assert "not both" in output["error"]["message"]
8586
+
8523
8587
  def test_project_refresh_dry_run(self, tmp_path: Path) -> None:
8524
8588
  """project refresh --all --dry-run --json shows preview without changes."""
8525
8589
  config_dir = tmp_path / "config"
@@ -0,0 +1,137 @@
1
+ """A config CREATED by `sync push` must track its companion code files.
2
+
3
+ `sync pull` records a hash for every companion file (`transform.sql`,
4
+ `code.py`, ...) under `pull_extra_hashes`; diff reads an edit to one of them
5
+ only through that record. The create path recorded `_config.yml` alone, so
6
+ after a push that created a config, a later edit to its SQL diffed as
7
+ "unchanged" and the next push sent nothing -- exit 0, the job kept running the
8
+ old code. Reported by a customer on a dev-branch loop (author in `main/`,
9
+ `sync push --branch <dev>`, edit `transform.sql`, push again).
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ from pathlib import Path
15
+
16
+ import pytest
17
+
18
+ import test_sync_formal_counterexamples as formal
19
+ from test_sync_formal_counterexamples import DEV, PROD, World
20
+
21
+ TRANSFORMATION = "keboola.snowflake-transformation"
22
+
23
+
24
+ @pytest.fixture
25
+ def world(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> World:
26
+ """A sync world whose fake remote lists configs under a SQL transformation."""
27
+ monkeypatch.setattr(formal, "COMP", TRANSFORMATION)
28
+ w = World(tmp_path)
29
+ return w
30
+
31
+
32
+ def _author_transformation(root: Path) -> Path:
33
+ """Write a new, untracked transformation under main/ (no config id yet)."""
34
+ config_dir = root / "main" / "transformation" / TRANSFORMATION / "orders-model"
35
+ config_dir.mkdir(parents=True)
36
+ (config_dir / "_config.yml").write_text(
37
+ "version: 2\nname: orders-model\ndescription: ''\nparameters: {}\n"
38
+ f"_keboola:\n component_id: {TRANSFORMATION}\n"
39
+ )
40
+ (config_dir / "transform.sql").write_text("SELECT 1 FROM VALUES (1);\n")
41
+ return config_dir
42
+
43
+
44
+ def _edit_sql(config_dir: Path) -> None:
45
+ sql = config_dir / "transform.sql"
46
+ sql.write_text(sql.read_text().replace("VALUES", "VALUEZ"))
47
+
48
+
49
+ def _remote_sql(world: World, branch: int, config_id: str) -> str:
50
+ blocks = world.api.remote[branch][config_id]["configuration"]["parameters"]["blocks"]
51
+ return "".join(s for b in blocks for c in b["codes"] for s in c["script"])
52
+
53
+
54
+ def test_sql_edit_after_create_on_default_branch_is_pushed(world: World) -> None:
55
+ world.init()
56
+ world.pull()
57
+ config_dir = _author_transformation(world.root)
58
+ assert world.push().get("created", 0) == 1
59
+ (config_id,) = world.api.ids(PROD)
60
+
61
+ _edit_sql(config_dir)
62
+
63
+ assert world.diff()["summary"]["modified"] == 1
64
+ assert world.push().get("updated", 0) == 1
65
+ assert "VALUEZ" in _remote_sql(world, PROD, config_id)
66
+
67
+
68
+ def test_sql_edit_after_promote_create_to_dev_branch_is_pushed(world: World) -> None:
69
+ """The customer's loop: author in main/, push to a dev branch, edit, push."""
70
+ world.init()
71
+ world.pull()
72
+ config_dir = _author_transformation(world.root)
73
+ assert world.push(branch=DEV).get("created", 0) == 1
74
+ (config_id,) = world.api.ids(DEV)
75
+
76
+ _edit_sql(config_dir)
77
+
78
+ assert world.diff(branch=DEV)["summary"]["modified"] == 1
79
+ second = world.push(branch=DEV)
80
+ assert second.get("updated", 0) == 1
81
+ assert second.get("created", 0) == 0
82
+ assert "VALUEZ" in _remote_sql(world, DEV, config_id)
83
+ assert world.api.ids(PROD) == []
84
+
85
+
86
+ def test_sql_edit_after_promoting_a_pulled_config_is_pushed(world: World) -> None:
87
+ """A production config promoted to a dev branch gets a NEW dev entry."""
88
+ world.api.put(
89
+ PROD,
90
+ "cfg-1",
91
+ "Orders",
92
+ "a",
93
+ extra={"blocks": [{"name": "B", "codes": [{"name": "C", "script": ["SELECT 1;"]}]}]},
94
+ )
95
+ world.init()
96
+ world.pull()
97
+ world.push(branch=DEV)
98
+ (dev_id,) = world.api.ids(DEV)
99
+ sql = world.config_dir("orders") / "transform.sql"
100
+ sql.write_text(sql.read_text().replace("SELECT 1", "SELECT 2"))
101
+
102
+ assert world.diff(branch=DEV)["summary"]["modified"] == 1
103
+ assert world.push(branch=DEV).get("updated", 0) == 1
104
+ assert "SELECT 2" in _remote_sql(world, DEV, dev_id)
105
+ assert "SELECT 1" in _remote_sql(world, PROD, "cfg-1")
106
+
107
+
108
+ def test_unedited_config_stays_clean_after_create(world: World) -> None:
109
+ """Recording the companion hashes must not turn a clean tree dirty."""
110
+ world.init()
111
+ world.pull()
112
+ _author_transformation(world.root)
113
+ world.push(branch=DEV)
114
+
115
+ summary = world.diff(branch=DEV)["summary"]
116
+ assert summary["modified"] == 0
117
+ assert summary["added"] == 0
118
+ assert world.push(branch=DEV).get("updated", 0) == 0
119
+
120
+
121
+ def test_force_pull_does_not_overwrite_sql_edit_after_create(world: World) -> None:
122
+ """Without the companion hashes, pull read an edited `transform.sql` as
123
+ untouched and `--force` replaced it with the remote code once the config
124
+ changed remotely (here: renamed in the UI). It is now a conflict."""
125
+ from keboola_agent_cli.errors import SyncConflictError
126
+
127
+ world.init()
128
+ world.pull()
129
+ config_dir = _author_transformation(world.root)
130
+ world.push()
131
+ (config_id,) = world.api.ids(PROD)
132
+ _edit_sql(config_dir)
133
+ world.api.remote[PROD][config_id]["name"] = "renamed in the UI"
134
+
135
+ with pytest.raises(SyncConflictError):
136
+ world.pull(force=True)
137
+ assert "VALUEZ" in (config_dir / "transform.sql").read_text()
@@ -3194,6 +3194,7 @@ class TestFreshCreateWriteback:
3194
3194
  new_id="123456789",
3195
3195
  file_hash="abc123",
3196
3196
  cfg_hash="def456",
3197
+ extra_hashes={"transform.sql": "sql789"},
3197
3198
  )
3198
3199
 
3199
3200
  entry = writeback.entry
@@ -3205,6 +3206,7 @@ class TestFreshCreateWriteback:
3205
3206
  assert entry.branch_id == 12345
3206
3207
  assert entry.metadata["pull_hash"] == "abc123"
3207
3208
  assert entry.metadata["pull_config_hash"] == "def456"
3209
+ assert entry.metadata["pull_extra_hashes"] == {"transform.sql": "sql789"}
3208
3210
  assert entry.metadata["KBC.configuration.folderName"] == "FI Pipeline", (
3209
3211
  "user-declared KBC.* metadata must survive the writeback"
3210
3212
  )
@@ -3238,6 +3240,7 @@ class TestFreshCreateWriteback:
3238
3240
  new_id="dev-id-002",
3239
3241
  file_hash="h1",
3240
3242
  cfg_hash="h2",
3243
+ extra_hashes={},
3241
3244
  )
3242
3245
 
3243
3246
  entry = writeback.entry
@@ -3269,6 +3272,7 @@ class TestFreshCreateWriteback:
3269
3272
  new_id="999",
3270
3273
  file_hash="h1",
3271
3274
  cfg_hash="h2",
3275
+ extra_hashes={},
3272
3276
  )
3273
3277
 
3274
3278
  entry = writeback.entry
@@ -3276,7 +3280,11 @@ class TestFreshCreateWriteback:
3276
3280
  assert len(manifest.configurations) == 1
3277
3281
  assert manifest.configurations[0] is entry
3278
3282
  assert entry.id == "999"
3279
- assert entry.metadata == {"pull_hash": "h1", "pull_config_hash": "h2"}
3283
+ assert entry.metadata == {
3284
+ "pull_hash": "h1",
3285
+ "pull_config_hash": "h2",
3286
+ "pull_extra_hashes": {},
3287
+ }
3280
3288
 
3281
3289
  def test_propagate_kbc_metadata_calls_set_config_metadata(self, tmp_config_dir: Path) -> None:
3282
3290
  """KBC.* keys are POSTed via client.set_config_metadata; bookkeeping
File without changes
File without changes
File without changes
File without changes