keboola-cli 0.99.0__tar.gz → 0.99.1__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 (635) hide show
  1. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/PKG-INFO +1 -1
  2. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/pyproject.toml +1 -1
  3. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/file_size_baseline.json +4 -5
  4. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/changelog.py +15 -0
  5. keboola_cli-0.99.1/src/keboola_agent_cli/commands/_lineage_build_output.py +74 -0
  6. keboola_cli-0.99.1/src/keboola_agent_cli/commands/_lineage_tree.py +276 -0
  7. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/context.py +10 -2
  8. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/lineage.py +77 -328
  9. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/lineage.py +14 -24
  10. keboola_cli-0.99.1/src/keboola_agent_cli/services/_lineage_ai.py +447 -0
  11. keboola_cli-0.99.1/src/keboola_agent_cli/services/_lineage_er.py +182 -0
  12. keboola_cli-0.99.1/src/keboola_agent_cli/services/_lineage_mermaid.py +244 -0
  13. keboola_cli-0.99.1/src/keboola_agent_cli/services/_lineage_paths.py +91 -0
  14. keboola_cli-0.99.1/src/keboola_agent_cli/services/_lineage_trace.py +323 -0
  15. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/deep_lineage_service.py +112 -532
  16. keboola_cli-0.99.1/tests/test_deep_lineage_ai.py +659 -0
  17. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_deep_lineage_service.py +8 -3
  18. keboola_cli-0.99.1/tests/test_lineage_view.py +771 -0
  19. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/.gitignore +0 -0
  20. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/CLAUDE.md +0 -0
  21. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/CONTRIBUTING.md +0 -0
  22. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/LICENSE +0 -0
  23. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/Makefile +0 -0
  24. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/README.md +0 -0
  25. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/examples/README.md +0 -0
  26. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/examples/storage_tui/README.md +0 -0
  27. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/formal/sync/README.md +0 -0
  28. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/plugins/kbagent/.claude-plugin/CLAUDE.md +0 -0
  29. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/plugins/kbagent/skills/kbagent-cicd-migration/scripts/migrate_cicd.py +0 -0
  30. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/plugins/kbagent/skills/kbagent-promotion-pipeline/scripts/generate_promotion_pipeline.py +0 -0
  31. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_command_sync.py +0 -0
  32. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_error_codes.py +0 -0
  33. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_file_size.py +0 -0
  34. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_release_scope.py +0 -0
  35. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_sentinel_guards.py +0 -0
  36. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_version_gates.py +0 -0
  37. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/check_wheel_ui.py +0 -0
  38. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/debug_linkedby_type.sh +0 -0
  39. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/gen_command_reference.py +0 -0
  40. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/gen_endpoint_reference.py +0 -0
  41. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/gen_release_notes.py +0 -0
  42. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/generate_changelog.py +0 -0
  43. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/generate_skill.py +0 -0
  44. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/hatch_build.py +0 -0
  45. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/lineage_deep.py +0 -0
  46. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/post-edit-quality.sh +0 -0
  47. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/pre-commit +0 -0
  48. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/sync_version.py +0 -0
  49. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/scripts/web-dev.sh +0 -0
  50. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/__init__.py +0 -0
  51. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/__main__.py +0 -0
  52. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/ai_client.py +0 -0
  53. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/__init__.py +0 -0
  54. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/auth_client.py +0 -0
  55. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/device.py +0 -0
  56. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/environment.py +0 -0
  57. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/models.py +0 -0
  58. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/pkce.py +0 -0
  59. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/sentinel.py +0 -0
  60. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/state_store.py +0 -0
  61. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/token_provider.py +0 -0
  62. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auth/totp.py +0 -0
  63. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/auto_update.py +0 -0
  64. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/cli.py +0 -0
  65. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/__init__.py +0 -0
  66. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/_client.py +0 -0
  67. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/_core.py +0 -0
  68. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/_s3_multipart.py +0 -0
  69. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/_transfer.py +0 -0
  70. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/billing.py +0 -0
  71. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/branches.py +0 -0
  72. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/configs.py +0 -0
  73. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/editor.py +0 -0
  74. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/merge_requests.py +0 -0
  75. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/misc.py +0 -0
  76. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/notifications.py +0 -0
  77. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/query.py +0 -0
  78. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/queue.py +0 -0
  79. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/storage_files.py +0 -0
  80. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/storage_tables.py +0 -0
  81. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/stream.py +0 -0
  82. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/tokens.py +0 -0
  83. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/triggers.py +0 -0
  84. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/client/workspaces.py +0 -0
  85. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/__init__.py +0 -0
  86. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_auth_picker.py +0 -0
  87. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_checkbox_select.py +0 -0
  88. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_config_clone_cmd.py +0 -0
  89. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_config_oauth.py +0 -0
  90. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_config_trash_cmd.py +0 -0
  91. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_data_app_git.py +0 -0
  92. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_data_app_password.py +0 -0
  93. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_data_app_runtime.py +0 -0
  94. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_flow_triggers.py +0 -0
  95. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_helpers.py +0 -0
  96. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_merge_request_common.py +0 -0
  97. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_merge_request_render.py +0 -0
  98. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_merge_request_writes.py +0 -0
  99. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_metadata_input.py +0 -0
  100. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_progress.py +0 -0
  101. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_project_create.py +0 -0
  102. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_project_ref.py +0 -0
  103. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_semantic_layer_crud.py +0 -0
  104. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_semantic_layer_helpers.py +0 -0
  105. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_semantic_layer_reference_data.py +0 -0
  106. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_semantic_layer_scope.py +0 -0
  107. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_storage_describe.py +0 -0
  108. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_storage_jobs.py +0 -0
  109. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_storage_snapshots.py +0 -0
  110. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_storage_table_detail.py +0 -0
  111. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_storage_tables_render.py +0 -0
  112. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_sync_clone_render.py +0 -0
  113. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_sync_push_render.py +0 -0
  114. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/_url_copy.py +0 -0
  115. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/agent.py +0 -0
  116. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/auth.py +0 -0
  117. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/billing.py +0 -0
  118. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/branch.py +0 -0
  119. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/changelog.py +0 -0
  120. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/component.py +0 -0
  121. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/config.py +0 -0
  122. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/config_state.py +0 -0
  123. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/data_app.py +0 -0
  124. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/dev_portal.py +0 -0
  125. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/docs.py +0 -0
  126. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/doctor.py +0 -0
  127. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/encrypt.py +0 -0
  128. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/feature.py +0 -0
  129. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/flow.py +0 -0
  130. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/http_client.py +0 -0
  131. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/init.py +0 -0
  132. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/job.py +0 -0
  133. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/kai.py +0 -0
  134. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/merge_request.py +0 -0
  135. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/notification.py +0 -0
  136. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/org.py +0 -0
  137. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/permissions.py +0 -0
  138. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/project.py +0 -0
  139. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/repl.py +0 -0
  140. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/schedule.py +0 -0
  141. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/search.py +0 -0
  142. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/semantic_layer.py +0 -0
  143. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/serve.py +0 -0
  144. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/sharing.py +0 -0
  145. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/storage.py +0 -0
  146. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/stream.py +0 -0
  147. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/sync.py +0 -0
  148. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/token.py +0 -0
  149. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/transformation.py +0 -0
  150. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/version.py +0 -0
  151. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/commands/workspace.py +0 -0
  152. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/config_store.py +0 -0
  153. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/constants.py +0 -0
  154. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/data_science_client.py +0 -0
  155. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/dev_portal_client.py +0 -0
  156. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/effective_branch.py +0 -0
  157. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/errors.py +0 -0
  158. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/frozen_dist.py +0 -0
  159. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/http_base.py +0 -0
  160. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/json_utils.py +0 -0
  161. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/lib.py +0 -0
  162. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/manage_client.py +0 -0
  163. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/metastore_client.py +0 -0
  164. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/models.py +0 -0
  165. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/output.py +0 -0
  166. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/permissions.py +0 -0
  167. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/project_ref.py +0 -0
  168. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/py.typed +0 -0
  169. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/resources/__init__.py +0 -0
  170. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/resources/flow/__init__.py +0 -0
  171. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/resources/flow/conditional-flow-schema.json +0 -0
  172. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/resources/flow/conditional_flow_examples.jsonl +0 -0
  173. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/resources/flow/flow-schema.json +0 -0
  174. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/resources/flow/legacy_flow_examples.jsonl +0 -0
  175. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/result_models.py +0 -0
  176. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/scheduler_client.py +0 -0
  177. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/__init__.py +0 -0
  178. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/_serve_command_map.py +0 -0
  179. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/agent_runner.py +0 -0
  180. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/agents_store.py +0 -0
  181. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/app.py +0 -0
  182. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/auth.py +0 -0
  183. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/dependencies.py +0 -0
  184. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/pricing.py +0 -0
  185. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/route_permissions.py +0 -0
  186. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/__init__.py +0 -0
  187. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/agents.py +0 -0
  188. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/ai_chat.py +0 -0
  189. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/auth.py +0 -0
  190. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/billing.py +0 -0
  191. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/branches.py +0 -0
  192. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/components.py +0 -0
  193. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/configs.py +0 -0
  194. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/data_apps.py +0 -0
  195. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/dev_portal.py +0 -0
  196. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/docs.py +0 -0
  197. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/encrypt.py +0 -0
  198. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/feature.py +0 -0
  199. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/flows.py +0 -0
  200. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/health.py +0 -0
  201. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/jobs.py +0 -0
  202. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/kai.py +0 -0
  203. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/members.py +0 -0
  204. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/merge_requests.py +0 -0
  205. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/notifications.py +0 -0
  206. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/org.py +0 -0
  207. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/permissions.py +0 -0
  208. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/projects.py +0 -0
  209. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/schedules.py +0 -0
  210. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/search.py +0 -0
  211. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/semantic_layer.py +0 -0
  212. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/sharing.py +0 -0
  213. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/storage.py +0 -0
  214. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/stream.py +0 -0
  215. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/token.py +0 -0
  216. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/transformation.py +0 -0
  217. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/routers/workspaces.py +0 -0
  218. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/run_broadcaster.py +0 -0
  219. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/server/sse.py +0 -0
  220. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/__init__.py +0 -0
  221. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_auth_registration.py +0 -0
  222. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_column_descriptions.py +0 -0
  223. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_config_clone.py +0 -0
  224. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_config_set_guard.py +0 -0
  225. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_config_trash.py +0 -0
  226. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_data_app_bodies.py +0 -0
  227. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_data_app_password.py +0 -0
  228. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_describe_batch_input.py +0 -0
  229. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_encryption.py +0 -0
  230. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_cascade.py +0 -0
  231. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_crud.py +0 -0
  232. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_fqn.py +0 -0
  233. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_internals.py +0 -0
  234. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_lookup.py +0 -0
  235. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_reference_data.py +0 -0
  236. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_semantic_layer_scope.py +0 -0
  237. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_storage_downloads.py +0 -0
  238. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_storage_jobs.py +0 -0
  239. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_storage_tables.py +0 -0
  240. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_baseline.py +0 -0
  241. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_bindings.py +0 -0
  242. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_branch.py +0 -0
  243. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_bulk.py +0 -0
  244. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_clone.py +0 -0
  245. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_clone_warnings.py +0 -0
  246. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_data_app.py +0 -0
  247. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_models.py +0 -0
  248. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_push_ops.py +0 -0
  249. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_stale.py +0 -0
  250. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_storage.py +0 -0
  251. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_workspace.py +0 -0
  252. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_sync_writeback.py +0 -0
  253. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_table_detail.py +0 -0
  254. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_token_last_used.py +0 -0
  255. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_transformation_ops.py +0 -0
  256. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/_workspace_load_plan.py +0 -0
  257. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/agent_service.py +0 -0
  258. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/auth_service.py +0 -0
  259. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/base.py +0 -0
  260. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/billing_service.py +0 -0
  261. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/branch_service.py +0 -0
  262. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/component_service.py +0 -0
  263. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/config_service.py +0 -0
  264. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/data_app_git_service.py +0 -0
  265. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/data_app_service.py +0 -0
  266. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/dev_portal_service.py +0 -0
  267. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/docs_service.py +0 -0
  268. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/doctor_service.py +0 -0
  269. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/encrypt_service.py +0 -0
  270. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/feature_service.py +0 -0
  271. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/flow_service.py +0 -0
  272. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/flow_validation.py +0 -0
  273. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/http_forwarder_service.py +0 -0
  274. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/job_idempotency_store.py +0 -0
  275. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/job_service.py +0 -0
  276. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/kai_service.py +0 -0
  277. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/lineage_service.py +0 -0
  278. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/member_service.py +0 -0
  279. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/merge_request_service.py +0 -0
  280. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/notification_service.py +0 -0
  281. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/org_service.py +0 -0
  282. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/project_service.py +0 -0
  283. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/repo_validate_service.py +0 -0
  284. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/schedule_service.py +0 -0
  285. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/search_service.py +0 -0
  286. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/semantic_layer_service.py +0 -0
  287. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/sharing_service.py +0 -0
  288. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/snapshot_service.py +0 -0
  289. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/storage_service.py +0 -0
  290. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/stream_service.py +0 -0
  291. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/sync_service.py +0 -0
  292. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/table_usage.py +0 -0
  293. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/token_service.py +0 -0
  294. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/transformation_service.py +0 -0
  295. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/variables_service.py +0 -0
  296. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/version_service.py +0 -0
  297. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/services/workspace_service.py +0 -0
  298. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/stream_client.py +0 -0
  299. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/__init__.py +0 -0
  300. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/branch_mapping.py +0 -0
  301. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/branch_registry.py +0 -0
  302. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/branch_scope.py +0 -0
  303. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/clone.py +0 -0
  304. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/code_extraction.py +0 -0
  305. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/config_format.py +0 -0
  306. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/diff_engine.py +0 -0
  307. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/git_utils.py +0 -0
  308. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/manifest.py +0 -0
  309. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/naming.py +0 -0
  310. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/secrets.py +0 -0
  311. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/sync/sql_split.py +0 -0
  312. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/telemetry.py +0 -0
  313. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/update_runner.py +0 -0
  314. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/src/keboola_agent_cli/yaml_input.py +0 -0
  315. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/__init__.py +0 -0
  316. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/conftest.py +0 -0
  317. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/helpers.py +0 -0
  318. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agent_cli.py +0 -0
  319. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agent_prompt.py +0 -0
  320. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agent_prompt_helper.py +0 -0
  321. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agent_runner.py +0 -0
  322. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agent_service.py +0 -0
  323. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agent_tombstone.py +0 -0
  324. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_agents_store_events.py +0 -0
  325. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_ai_client.py +0 -0
  326. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_api_call_counts.py +0 -0
  327. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_client.py +0 -0
  328. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_device.py +0 -0
  329. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_environment.py +0 -0
  330. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_models.py +0 -0
  331. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_picker.py +0 -0
  332. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_pkce.py +0 -0
  333. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_register_projects.py +0 -0
  334. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_sentinel.py +0 -0
  335. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_sentinel_guards.py +0 -0
  336. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_service.py +0 -0
  337. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_state_store.py +0 -0
  338. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auth_totp.py +0 -0
  339. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_auto_update.py +0 -0
  340. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_base_service.py +0 -0
  341. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_billing_cli.py +0 -0
  342. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_billing_client.py +0 -0
  343. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_billing_service.py +0 -0
  344. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_branch_metadata_cli.py +0 -0
  345. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_branch_metadata_service.py +0 -0
  346. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_branch_registry.py +0 -0
  347. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_branch_service.py +0 -0
  348. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_build_hook.py +0 -0
  349. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_changelog_check.py +0 -0
  350. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_changelog_render.py +0 -0
  351. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_check_command_sync.py +0 -0
  352. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_check_file_size.py +0 -0
  353. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_check_release_scope.py +0 -0
  354. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_check_sentinel_guards.py +0 -0
  355. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_check_version_gates.py +0 -0
  356. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_checkbox_select.py +0 -0
  357. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_choice_enums.py +0 -0
  358. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_cli.py +0 -0
  359. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_cli_auth.py +0 -0
  360. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_client.py +0 -0
  361. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_client_device_enrollment.py +0 -0
  362. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_client_token_events.py +0 -0
  363. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_component_cli.py +0 -0
  364. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_component_service.py +0 -0
  365. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_component_sync_action.py +0 -0
  366. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_clone_cli.py +0 -0
  367. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_clone_service.py +0 -0
  368. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_create_cli.py +0 -0
  369. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_create_service.py +0 -0
  370. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_encryption.py +0 -0
  371. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_examples.py +0 -0
  372. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_metadata.py +0 -0
  373. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_rename.py +0 -0
  374. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_rename_cli.py +0 -0
  375. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_resolution.py +0 -0
  376. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_row_cli.py +0 -0
  377. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_row_service.py +0 -0
  378. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_search.py +0 -0
  379. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_search_cli.py +0 -0
  380. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_set_default_bucket.py +0 -0
  381. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_set_guard.py +0 -0
  382. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_state.py +0 -0
  383. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_store.py +0 -0
  384. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_trash.py +0 -0
  385. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_config_update.py +0 -0
  386. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_cli.py +0 -0
  387. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_git_repo.py +0 -0
  388. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_password.py +0 -0
  389. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_plain_env_keys.py +0 -0
  390. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_secrets_cli.py +0 -0
  391. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_secrets_service.py +0 -0
  392. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_service.py +0 -0
  393. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_data_app_validate_repo_service.py +0 -0
  394. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_dev_portal_cli.py +0 -0
  395. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_dev_portal_client.py +0 -0
  396. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_dev_portal_service.py +0 -0
  397. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_docs_cli.py +0 -0
  398. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_doctor_service.py +0 -0
  399. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_e2e.py +0 -0
  400. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_e2e_auth.py +0 -0
  401. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_e2e_config_dir_mode.py +0 -0
  402. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_e2e_lineage_deep.py +0 -0
  403. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_effective_branch.py +0 -0
  404. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_encrypt_cli.py +0 -0
  405. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_encrypt_service.py +0 -0
  406. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_encryption.py +0 -0
  407. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_errors.py +0 -0
  408. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_feature_cli.py +0 -0
  409. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_feature_service.py +0 -0
  410. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_file_locking.py +0 -0
  411. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_flow_cli.py +0 -0
  412. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_flow_examples.py +0 -0
  413. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_flow_service.py +0 -0
  414. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_flow_validation.py +0 -0
  415. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_frozen_dist.py +0 -0
  416. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_gen_command_reference.py +0 -0
  417. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_gen_endpoint_reference.py +0 -0
  418. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_gen_release_notes.py +0 -0
  419. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_generate_promotion_pipeline.py +0 -0
  420. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_helpers.py +0 -0
  421. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_http_base.py +0 -0
  422. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_http_base_auth.py +0 -0
  423. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_http_client_cmd.py +0 -0
  424. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_http_forwarder_service.py +0 -0
  425. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_integration.py +0 -0
  426. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_job_idempotency_store.py +0 -0
  427. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_job_options.py +0 -0
  428. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_json_utils.py +0 -0
  429. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_kai_cli.py +0 -0
  430. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_kai_service.py +0 -0
  431. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_lib.py +0 -0
  432. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_lib_device_enrollment.py +0 -0
  433. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_license_consistency.py +0 -0
  434. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_lineage_service.py +0 -0
  435. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_local_ai_chat.py +0 -0
  436. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_manage_client.py +0 -0
  437. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_manage_token_bulk.py +0 -0
  438. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_manage_token_cli.py +0 -0
  439. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_mcp_migration_recipe.py +0 -0
  440. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_member_cli.py +0 -0
  441. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_member_service.py +0 -0
  442. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_merge_request_cli.py +0 -0
  443. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_merge_request_client.py +0 -0
  444. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_merge_request_service.py +0 -0
  445. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_metastore_client.py +0 -0
  446. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_migrate_cicd.py +0 -0
  447. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_models.py +0 -0
  448. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_normalize_script.py +0 -0
  449. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_notification_cli.py +0 -0
  450. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_notification_client.py +0 -0
  451. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_notification_service.py +0 -0
  452. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_org_service.py +0 -0
  453. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_output.py +0 -0
  454. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_partial_failure_exit_code.py +0 -0
  455. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_permissions.py +0 -0
  456. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_permissions_cli.py +0 -0
  457. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_pricing.py +0 -0
  458. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_create_cli.py +0 -0
  459. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_edit.py +0 -0
  460. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_edit_cli.py +0 -0
  461. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_info_cli.py +0 -0
  462. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_info_service.py +0 -0
  463. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_ref.py +0 -0
  464. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_project_token_stdin_no_leak.py +0 -0
  465. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_release_kbagent_ai_kit_sync.py +0 -0
  466. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_repl.py +0 -0
  467. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_result_models.py +0 -0
  468. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_run_broadcaster.py +0 -0
  469. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_s3_multipart.py +0 -0
  470. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_schedule_cli.py +0 -0
  471. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_schedule_service.py +0 -0
  472. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_scheduler_client.py +0 -0
  473. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_search_cli.py +0 -0
  474. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_search_service.py +0 -0
  475. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_semantic_layer_cli.py +0 -0
  476. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_semantic_layer_schema.py +0 -0
  477. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_semantic_layer_scope.py +0 -0
  478. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_semantic_layer_scope_cli.py +0 -0
  479. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_semantic_layer_service.py +0 -0
  480. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_serve_banner_encoding.py +0 -0
  481. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_serve_conversation_id.py +0 -0
  482. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_serve_telemetry.py +0 -0
  483. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_serve_ui.py +0 -0
  484. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_auth.py +0 -0
  485. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_permissions.py +0 -0
  486. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_project_ref.py +0 -0
  487. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_route_permissions.py +0 -0
  488. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_router_calls.py +0 -0
  489. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_semantic_layer_routes_e2e.py +0 -0
  490. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_server_smoke.py +0 -0
  491. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_services.py +0 -0
  492. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sharing_cli.py +0 -0
  493. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sharing_service.py +0 -0
  494. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_skill_frontmatter.py +0 -0
  495. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sql_split.py +0 -0
  496. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_clone.py +0 -0
  497. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_create_table.py +0 -0
  498. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_delete.py +0 -0
  499. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_describe_cli.py +0 -0
  500. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_describe_service.py +0 -0
  501. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_empty_definition.py +0 -0
  502. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_export_filters.py +0 -0
  503. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_files.py +0 -0
  504. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_import_jobs.py +0 -0
  505. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_snapshots.py +0 -0
  506. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_swap.py +0 -0
  507. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_table_definition.py +0 -0
  508. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_tables.py +0 -0
  509. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_truncate.py +0 -0
  510. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_storage_write.py +0 -0
  511. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_stream_cli.py +0 -0
  512. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_stream_client.py +0 -0
  513. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_stream_service.py +0 -0
  514. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_adopted_files.py +0 -0
  515. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_baseline_stamping.py +0 -0
  516. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_branch_mapping.py +0 -0
  517. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_branch_scope.py +0 -0
  518. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_cli.py +0 -0
  519. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_cli_behavior.py +0 -0
  520. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_clone.py +0 -0
  521. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_clone_links.py +0 -0
  522. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_code_extraction.py +0 -0
  523. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_config_format.py +0 -0
  524. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_data_app_type.py +0 -0
  525. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_diff_engine.py +0 -0
  526. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_e2e.py +0 -0
  527. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_encrypt.py +0 -0
  528. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_force_pull_baseline.py +0 -0
  529. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_formal_counterexamples.py +0 -0
  530. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_manifest.py +0 -0
  531. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_naming.py +0 -0
  532. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_plaintext_audit.py +0 -0
  533. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_pull_companion_files.py +0 -0
  534. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_push_encrypt_first.py +0 -0
  535. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_push_script_guard.py +0 -0
  536. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_reconcile.py +0 -0
  537. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_secrets.py +0 -0
  538. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_service.py +0 -0
  539. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_storage_jobs.py +0 -0
  540. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_version_script.py +0 -0
  541. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_sync_workspaces.py +0 -0
  542. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_table_usage.py +0 -0
  543. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_telemetry.py +0 -0
  544. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_token_cli.py +0 -0
  545. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_token_provider.py +0 -0
  546. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_token_service.py +0 -0
  547. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_transfer_progress.py +0 -0
  548. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_transformation_cli.py +0 -0
  549. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_transformation_ops.py +0 -0
  550. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_triggers_client.py +0 -0
  551. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_update_runner.py +0 -0
  552. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_url_copy.py +0 -0
  553. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_variables_cli.py +0 -0
  554. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_variables_service.py +0 -0
  555. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_version_service.py +0 -0
  556. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_workspace_cli.py +0 -0
  557. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_workspace_gc.py +0 -0
  558. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_workspace_service.py +0 -0
  559. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_workspace_sql_helper.py +0 -0
  560. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/tests/test_yaml_input.py +0 -0
  561. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/README.md +0 -0
  562. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/index.html +0 -0
  563. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/package-lock.json +0 -0
  564. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/package.json +0 -0
  565. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/postcss.config.js +0 -0
  566. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/App.tsx +0 -0
  567. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/api/client.test.ts +0 -0
  568. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/api/client.ts +0 -0
  569. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/changelogNotes.test.ts +0 -0
  570. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/changelogNotes.ts +0 -0
  571. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/AgentRunView.tsx +0 -0
  572. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/CommandPalette.tsx +0 -0
  573. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/ConfirmModal.tsx +0 -0
  574. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/DetailTabs.tsx +0 -0
  575. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/Drawer.tsx +0 -0
  576. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/Empty.tsx +0 -0
  577. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/JsonView.tsx +0 -0
  578. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/KeyValueGrid.tsx +0 -0
  579. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/ManageTokenModal.tsx +0 -0
  580. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/PillList.tsx +0 -0
  581. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/RawDetail.tsx +0 -0
  582. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/SessionExpiredBanner.tsx +0 -0
  583. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/Table.tsx +0 -0
  584. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/components/WhatsNew.tsx +0 -0
  585. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/config/credits.test.ts +0 -0
  586. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/config/credits.ts +0 -0
  587. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/index.css +0 -0
  588. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/layout/Shell.tsx +0 -0
  589. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/layout/Sidebar.tsx +0 -0
  590. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/layout/StatusBar.tsx +0 -0
  591. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/layout/TopBar.tsx +0 -0
  592. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/lib/time.test.ts +0 -0
  593. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/lib/time.ts +0 -0
  594. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/main.tsx +0 -0
  595. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Agents.tsx +0 -0
  596. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Branches.tsx +0 -0
  597. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Changelog.tsx +0 -0
  598. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Components.tsx +0 -0
  599. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Configs.tsx +0 -0
  600. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Dashboard.tsx +0 -0
  601. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/DataApps.tsx +0 -0
  602. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Doctor.tsx +0 -0
  603. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Encrypt.tsx +0 -0
  604. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Flows.tsx +0 -0
  605. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Jobs.tsx +0 -0
  606. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/JobsAll.tsx +0 -0
  607. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Lineage.tsx +0 -0
  608. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/LocalAi.tsx +0 -0
  609. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Members.tsx +0 -0
  610. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Org.tsx +0 -0
  611. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Projects.tsx +0 -0
  612. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Schedules.tsx +0 -0
  613. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Search.tsx +0 -0
  614. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/SemanticLayer.tsx +0 -0
  615. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/SemanticLayerDialogs.tsx +0 -0
  616. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Sharing.tsx +0 -0
  617. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Storage.tsx +0 -0
  618. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Streams.tsx +0 -0
  619. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Tokens.tsx +0 -0
  620. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/TokensAll.tsx +0 -0
  621. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/Workspaces.tsx +0 -0
  622. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/jobsShared.tsx +0 -0
  623. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/storageSel.test.ts +0 -0
  624. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/tokensShared.test.ts +0 -0
  625. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/pages/tokensShared.tsx +0 -0
  626. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/router.test.ts +0 -0
  627. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/router.ts +0 -0
  628. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/state.tsx +0 -0
  629. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/theme.tsx +0 -0
  630. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/types.ts +0 -0
  631. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/useHashSelection.ts +0 -0
  632. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/src/whatsnew.ts +0 -0
  633. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/tailwind.config.ts +0 -0
  634. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/tsconfig.json +0 -0
  635. {keboola_cli-0.99.0 → keboola_cli-0.99.1}/web/frontend/vite.config.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: keboola-cli
3
- Version: 0.99.0
3
+ Version: 0.99.1
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.99.0"
3
+ version = "0.99.1"
4
4
  description = "AI-friendly CLI for managing Keboola projects"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "_comment": "Grandfathered files over their CONTRIBUTING.md hard ceiling, in CODE LINES (see scripts/check_file_size.py). They may only shrink. Regenerate with `make loc-baseline` after a split -- never to silence a file you just grew.",
3
3
  "files": {
4
- "commands/config.py": 2007,
5
- "commands/lineage.py": 1271,
6
- "commands/storage.py": 2221,
4
+ "commands/config.py": 1952,
5
+ "commands/storage.py": 2005,
7
6
  "services/data_app_service.py": 1600,
8
- "services/storage_service.py": 1684,
9
- "services/sync_service.py": 1655
7
+ "services/storage_service.py": 1664,
8
+ "services/sync_service.py": 1641
10
9
  }
11
10
  }
@@ -26,6 +26,21 @@ 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.99.1": [
30
+ "Fix (#846, #849): `lineage build --ai` now writes the real path of each code file into "
31
+ "`.lineage_ai_tasks.json`. In a single-project sync every path pointed at a file that "
32
+ "did not exist. The scan also reads each config from its branch directory in the "
33
+ "manifest instead of always `main`, and reads config rows from the config's own folder.",
34
+ "Fix (#847, #849): AI results now add `writes` edges from `outputs`, so tables a Python app "
35
+ "writes through the Storage API get a producer. `external` systems are kept and shown. "
36
+ "Column mappings match the input table exactly. Outputs that cannot be matched, and "
37
+ "results whose code has changed since, are listed in `ai_status` and not applied.",
38
+ "Fix (#848, #849): `lineage show` prints a real tree, with each node under its actual parent. "
39
+ "`--column` follows one column hop by hop and says where its mapping is unknown. Edges "
40
+ "read `reads` / `writes` with an `[AI]` badge. Diagrams always flow left to right, "
41
+ "`-f html` defaults to depth 3, `--columns` now works for diagrams, and the ER view "
42
+ "always lists columns. The server's Both view no longer breaks the ER diagram.",
43
+ ],
29
44
  "0.99.0": [
30
45
  "New (#728): `project add` and `project edit` can take a Storage token without putting "
31
46
  "it on the command line. Use `--token-stdin` (a hidden prompt in a terminal, or a pipe), "
@@ -0,0 +1,74 @@
1
+ """Human-mode ``lineage build`` output for the AI status block (#847).
2
+
3
+ Kept out of ``commands/lineage.py``, which is over its file-size budget.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import Any
9
+
10
+ from rich.markup import escape
11
+
12
+ from ..output import OutputFormatter
13
+
14
+ # Bound the unresolved-outputs / missing-code-file listings in human mode;
15
+ # --json always carries the full lists.
16
+ _MAX_LISTED = 10
17
+
18
+
19
+ def print_ai_status(formatter: OutputFormatter, ai_status: dict[str, Any]) -> None:
20
+ """Print what applying AI results and generating AI tasks did."""
21
+ console = formatter.console
22
+ if ai_status.get("ai_results_applied"):
23
+ console.print(
24
+ f"\n AI results applied: {ai_status.get('ai_edges_added', 0)} edges added"
25
+ f" ({ai_status.get('ai_reads_added', 0)} reads,"
26
+ f" {ai_status.get('ai_writes_added', 0)} writes),"
27
+ f" {ai_status.get('ai_columns_merged', 0)} columns merged,"
28
+ f" {ai_status.get('ai_external_added', 0)} external systems"
29
+ )
30
+ if ai_status.get("ai_col_map_skipped"):
31
+ console.print(
32
+ f" Column mappings skipped (input table not matched exactly):"
33
+ f" {ai_status['ai_col_map_skipped']}"
34
+ )
35
+ _print_bounded(
36
+ formatter,
37
+ "AI outputs not resolved to a table",
38
+ [
39
+ f"{u['config_fqn']}: {u['table']} ({u['reason']}"
40
+ + (f": {', '.join(u['candidates'])}" if u.get("candidates") else "")
41
+ + ")"
42
+ for u in ai_status.get("ai_outputs_unresolved") or []
43
+ ],
44
+ )
45
+ _print_bounded(
46
+ formatter,
47
+ "AI results stale (code changed, not applied)",
48
+ list(ai_status.get("ai_results_stale") or []),
49
+ )
50
+ if ai_status.get("ai_tasks_generated"):
51
+ console.print(
52
+ f"\n [bold]AI tasks generated: {ai_status['ai_tasks_generated']}[/bold]"
53
+ f" (already done: {ai_status.get('ai_already_done', 0)})"
54
+ )
55
+ console.print(f" Task file: {escape(str(ai_status['ai_tasks_file']))}")
56
+ console.print(" Next: let your AI agent process the tasks, then re-run this command.")
57
+ _print_bounded(
58
+ formatter,
59
+ "AI tasks skipped, code file not found",
60
+ [
61
+ f"{m['config_fqn']}: {m['code_file']}"
62
+ for m in ai_status.get("ai_tasks_missing_code_file") or []
63
+ ],
64
+ )
65
+
66
+
67
+ def _print_bounded(formatter: OutputFormatter, title: str, lines: list[str]) -> None:
68
+ if not lines:
69
+ return
70
+ formatter.console.print(f"\n [yellow]{title}: {len(lines)}[/yellow]")
71
+ for line in lines[:_MAX_LISTED]:
72
+ formatter.console.print(f" {escape(line)}")
73
+ if len(lines) > _MAX_LISTED:
74
+ formatter.console.print(f" ... and {len(lines) - _MAX_LISTED} more")
@@ -0,0 +1,276 @@
1
+ """Human output for `kbagent lineage show`: text tree, column trace, diagrams (#848).
2
+
3
+ Split out of ``commands/lineage.py`` (over its file-size budget). Rendering
4
+ only -- every traversal decision is made by the service
5
+ (``services/_lineage_trace.py``); this module turns its result into text.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import re
11
+ from collections.abc import Callable, Hashable
12
+ from typing import Any
13
+
14
+ import typer
15
+ from rich.markup import escape
16
+
17
+ from ..errors import ErrorCode
18
+ from ..output import OutputFormatter
19
+ from ..services._lineage_mermaid import edge_label, is_ai_edge
20
+ from ..services.deep_lineage_service import DeepLineageService, LineageGraph
21
+
22
+ DIAGRAM_FORMATS = ("mermaid", "html", "er")
23
+
24
+ # `-f html` renders a picture; at depth 10 a real project's fan-in renders
25
+ # unreadably small, so html alone defaults shallower (#848). Explicit
26
+ # `--depth` always wins, and `--json` keeps the data default.
27
+ HTML_DEFAULT_DEPTH = 3
28
+ DEFAULT_DEPTH = 10
29
+
30
+ _TERMINAL_TEXT = {
31
+ "column_mapping_unknown": "column mapping unknown beyond this point",
32
+ "ambiguous_output_table": "ambiguous: several output tables carry this column",
33
+ "output_table_unknown": "no output table known to carry this column",
34
+ }
35
+
36
+
37
+ def resolve_depth(depth: int | None, output_format: str, json_mode: bool) -> int:
38
+ """`--depth` when given, else 3 for a rendered html diagram and 10 otherwise."""
39
+ if depth is not None:
40
+ return depth
41
+ return HTML_DEFAULT_DEPTH if output_format == "html" and not json_mode else DEFAULT_DEPTH
42
+
43
+
44
+ def node_description(graph: LineageGraph, fqn: str) -> str:
45
+ """Plain (unescaped) one-line description of a node, type prefix first."""
46
+ if fqn in graph.tables:
47
+ t = graph.tables[fqn]
48
+ return f"[table] {fqn} ({len(t.columns)} cols, {t.rows_count:,} rows)"
49
+ if fqn in graph.configurations:
50
+ c = graph.configurations[fqn]
51
+ return f"[{c.component_type}] {c.project_alias}:{c.config_name} ({c.component_id})"
52
+ return fqn
53
+
54
+
55
+ def _edge_text(edge: dict) -> str:
56
+ """`reads` / `writes` / `shares`, plus an `[AI]` badge for AI-detected edges."""
57
+ return edge_label(edge) + (" [AI]" if is_ai_edge(edge) else "")
58
+
59
+
60
+ def _print(formatter: OutputFormatter, text: str) -> None:
61
+ # soft_wrap: never hard-wrap a tree line -- the indentation is the structure.
62
+ formatter.console.print(text, soft_wrap=True)
63
+
64
+
65
+ def _header(
66
+ formatter: OutputFormatter, graph: LineageGraph, result: dict, direction: str, suffix: str = ""
67
+ ) -> None:
68
+ label = "Upstream dependencies" if direction == "upstream" else "Downstream dependents"
69
+ desc = escape(node_description(graph, result["node"]))
70
+ _print(formatter, f"\n[bold]{label} of {desc}[/bold]{suffix}\n")
71
+
72
+
73
+ def _print_tree(
74
+ formatter: OutputFormatter,
75
+ root: Hashable,
76
+ children: dict[Hashable, list[tuple[dict, Hashable]]],
77
+ max_depth: int,
78
+ render: Callable[[dict, Hashable], str],
79
+ after: Callable[[Hashable, int], None],
80
+ arrow: str,
81
+ detail: Callable[[dict, int], None] | None = None,
82
+ ) -> None:
83
+ """Depth-first print of a real tree: every child under its actual parent.
84
+
85
+ A node already expanded is printed again as a leaf with ``(see above)``
86
+ -- unless this occurrence leaves it MORE depth budget than the earlier
87
+ one had, in which case it is expanded again so nothing within ``depth``
88
+ is hidden behind a back-reference.
89
+
90
+ ``detail(edge, level)`` runs under EVERY printed line, back-references
91
+ included: it describes the edge, not the node. ``after(child, level)``
92
+ runs only where the child is expanded: it describes the node.
93
+ """
94
+ expanded: dict[Hashable, int] = {root: max_depth}
95
+
96
+ def visit(key: Hashable, level: int) -> None:
97
+ for edge, child in children.get(key, []):
98
+ remaining = max_depth - level
99
+ line = f"{' ' * level}{arrow} {render(edge, child)}"
100
+ if expanded.get(child, -1) >= remaining:
101
+ _print(formatter, line + " [dim](see above)[/dim]")
102
+ if detail:
103
+ detail(edge, level)
104
+ continue
105
+ _print(formatter, line)
106
+ if detail:
107
+ detail(edge, level)
108
+ expanded[child] = remaining
109
+ after(child, level + 1)
110
+ if remaining > 0:
111
+ visit(child, level + 1)
112
+
113
+ visit(root, 1)
114
+
115
+
116
+ def _children(
117
+ edges: list[dict], direction: str, key: Callable[[dict, str], Hashable]
118
+ ) -> dict[Hashable, list[tuple[dict, Hashable]]]:
119
+ """Index edges by parent: upstream parents are targets, downstream parents sources."""
120
+ upstream = direction == "upstream"
121
+ index: dict[Hashable, list[tuple[dict, Hashable]]] = {}
122
+ for edge in edges:
123
+ parent, child = ("target", "source") if upstream else ("source", "target")
124
+ index.setdefault(key(edge, parent), []).append((edge, key(edge, child)))
125
+ return index
126
+
127
+
128
+ def print_lineage_tree(
129
+ formatter: OutputFormatter,
130
+ graph: LineageGraph,
131
+ result: dict,
132
+ direction: str,
133
+ show_columns: bool = False,
134
+ depth: int = DEFAULT_DEPTH,
135
+ ) -> None:
136
+ """Print a node's upstream/downstream lineage as a real tree."""
137
+ _header(formatter, graph, result, direction)
138
+ node = result["node"]
139
+ edges = result.get("edges", [])
140
+ cfg = graph.configurations.get(node)
141
+ _print_external(formatter, cfg.external if cfg else [], " ")
142
+ if not edges:
143
+ if not (cfg and cfg.external):
144
+ _print(formatter, " (none found)")
145
+ return
146
+
147
+ def render(edge: dict, child: Hashable) -> str:
148
+ text = f"{escape(_edge_text(edge))} {escape(node_description(graph, str(child)))}"
149
+ cols = edge.get("columns") or []
150
+ if cols and not show_columns:
151
+ more = f"... +{len(cols) - 5}" if len(cols) > 5 else ""
152
+ text += " " + escape(f"[{', '.join(cols[:5])}{more}]")
153
+ return text
154
+
155
+ def detail(edge: dict, level: int) -> None:
156
+ if show_columns:
157
+ _print_edge_columns(formatter, edge, level)
158
+
159
+ def after(child: Hashable, level: int) -> None:
160
+ child_cfg = graph.configurations.get(str(child))
161
+ _print_external(formatter, child_cfg.external if child_cfg else [], " " * (level + 1))
162
+
163
+ max_depth = max([depth, *(e["depth"] for e in edges)])
164
+ arrow = "<-" if direction == "upstream" else "->"
165
+ _print_tree(
166
+ formatter,
167
+ node,
168
+ _children(edges, direction, lambda e, end: e[end]),
169
+ max_depth,
170
+ render,
171
+ after,
172
+ arrow,
173
+ detail,
174
+ )
175
+
176
+
177
+ def _print_external(formatter: OutputFormatter, external: list[dict], indent: str) -> None:
178
+ """One `external: <system> (<op>)` line per AI-recorded external system."""
179
+ for item in external or []:
180
+ system, op = escape(str(item.get("system", ""))), escape(str(item.get("op", "")))
181
+ _print(formatter, f"{indent}external: {system} ({op})")
182
+
183
+
184
+ def _print_edge_columns(formatter: OutputFormatter, edge: dict, level: int) -> None:
185
+ """`--columns`: list the mapping (or the column list) of THIS edge.
186
+
187
+ Per edge, not per child node: two configs reading the same table each
188
+ get their own mapping under their own occurrence of that table (#849).
189
+ """
190
+ indent = " " * (level + 1)
191
+ for out_col, src in (edge.get("column_mapping") or {}).items():
192
+ _print(formatter, f"{indent}[dim]{escape(out_col)}[/dim] <- {escape(src)}")
193
+ if not edge.get("column_mapping"):
194
+ cols = edge.get("columns") or []
195
+ for col in cols[:10]:
196
+ _print(formatter, f"{indent}[dim]{escape(col)}[/dim]")
197
+ if len(cols) > 10:
198
+ _print(formatter, f"{indent}[dim]... +{len(cols) - 10} more[/dim]")
199
+
200
+
201
+ def print_column_trace(
202
+ formatter: OutputFormatter, graph: LineageGraph, result: dict, direction: str
203
+ ) -> None:
204
+ """Print a `--column` trace: one line per hop, terminals marked inline."""
205
+ column = result["column"]
206
+ _header(formatter, graph, result, direction, f" [dim](column: {escape(column)})[/dim]")
207
+ edges = result.get("edges", [])
208
+ terminals: dict[Hashable, list[dict]] = {}
209
+ for terminal in result.get("terminals", []):
210
+ terminals.setdefault((terminal["node"], terminal["column"].lower()), []).append(terminal)
211
+
212
+ def key(edge: dict, end: str) -> tuple[str, str]:
213
+ return edge[end], edge[f"{end}_column"].lower()
214
+
215
+ def render(edge: dict, child: Hashable) -> str:
216
+ end = "source" if direction == "upstream" else "target"
217
+ col = edge[f"{end}_column"]
218
+ return escape(f"{_edge_text(edge)} {node_description(graph, edge[end])} · column {col}")
219
+
220
+ def after(child: Hashable, level: int) -> None:
221
+ for terminal in terminals.get(child, []):
222
+ text = _TERMINAL_TEXT.get(terminal["reason"], terminal["reason"])
223
+ if terminal.get("candidates"):
224
+ text += ": " + ", ".join(terminal["candidates"])
225
+ _print(formatter, f"{' ' * (level + 1)}[yellow]! {escape(text)}[/yellow]")
226
+
227
+ root = (result["node"], column.lower())
228
+ after(root, 0)
229
+ if not edges:
230
+ if not terminals:
231
+ _print(formatter, " (no column lineage found)")
232
+ return
233
+ max_depth = max(e["depth"] for e in edges)
234
+ arrow = "<-" if direction == "upstream" else "->"
235
+ _print_tree(formatter, root, _children(edges, direction, key), max_depth, render, after, arrow)
236
+
237
+
238
+ def output_diagram(
239
+ formatter: OutputFormatter,
240
+ graph: LineageGraph,
241
+ query_result: dict,
242
+ direction: str,
243
+ output_format: str,
244
+ show_columns: bool,
245
+ ) -> None:
246
+ """Render a query result as mermaid, er, or an html file."""
247
+ node_fqn = query_result["node"]
248
+ edges = query_result.get("edges", [])
249
+ warnings: Any = query_result.get("warnings")
250
+ if output_format == "er":
251
+ typer.echo(
252
+ # ER always lists columns; `--columns` only shapes the flowcharts.
253
+ DeepLineageService.render_er_diagram(edges, graph, node_fqn, warnings=warnings)
254
+ )
255
+ return
256
+ code = DeepLineageService.render_mermaid(
257
+ edges, graph, direction, node_fqn, show_columns=show_columns, warnings=warnings
258
+ )
259
+ if output_format == "mermaid":
260
+ typer.echo(code)
261
+ return
262
+ html_content = DeepLineageService.render_html(code, f"Lineage {direction} of {node_fqn}")
263
+ # `--columns` renders a different diagram: its own name, so the two runs
264
+ # do not silently overwrite each other.
265
+ suffix = "_columns" if show_columns else ""
266
+ filename = f"lineage_{direction}_{re.sub(r'[^a-zA-Z0-9_]', '_', node_fqn)}{suffix}.html"
267
+ try:
268
+ with open(filename, "w", encoding="utf-8") as f:
269
+ f.write(html_content)
270
+ except OSError as exc:
271
+ formatter.error(
272
+ message=f"Cannot write HTML file '{filename}': {exc}", error_code=ErrorCode.WRITE_ERROR
273
+ )
274
+ raise typer.Exit(code=1) from None
275
+ if not formatter.json_mode:
276
+ formatter.console.print(f"HTML lineage diagram saved to: {escape(filename)}")
@@ -1086,14 +1086,22 @@ remain branch-aware because modifying a dev branch is the expected intent.
1086
1086
  [--format text|mermaid|html|er]
1087
1087
  Query upstream/downstream from cached lineage graph (from lineage build).
1088
1088
  Node identifiers: full FQN project-alias:bucket_id.table_name or just table_id.
1089
- --columns shows column-level mapping. -c COL traces one column.
1089
+ Text output is a real tree (repeats shown as "(see above)"); edges are
1090
+ labelled reads / writes / shares, "[AI]" = AI-detected. --columns shows
1091
+ column-level mapping. -c COL traces one column of a TABLE hop by hop
1092
+ through mappings recorded by `lineage build --ai` and stops where no
1093
+ mapping is known (JSON: terminals[] with node, column, reason); a config
1094
+ focus, or -c with mermaid/html/er, is a usage error (exit 2). Diagrams are
1095
+ always left-to-right with the queried node highlighted. --depth defaults
1096
+ to 3 for -f html, 10 otherwise.
1090
1097
 
1091
1098
  kbagent lineage info --load PATH
1092
1099
  Show what's in a cached lineage graph: projects, tables, most connected nodes.
1093
1100
 
1094
1101
  kbagent lineage server --load PATH [--port N] [--host HOST]
1095
1102
  Start interactive lineage browser in the web browser. Sidebar-based node
1096
- picker with mermaid/ER diagram rendering and export.
1103
+ picker with mermaid/ER diagram rendering and export. "Both" directions is
1104
+ one server-side union rendered once (direction=both).
1097
1105
 
1098
1106
  ### Organization Management
1099
1107