keboola-cli 0.97.0__tar.gz → 0.98.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/CLAUDE.md +73 -10
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/PKG-INFO +1 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/pyproject.toml +1 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/__init__.py +2 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/changelog.py +38 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/__init__.py +4 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_core.py +61 -5
- keboola_cli-0.98.0/src/keboola_agent_cli/client/_s3_multipart.py +626 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_transfer.py +155 -21
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/storage_files.py +83 -18
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/storage_tables.py +289 -31
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_helpers.py +22 -0
- keboola_cli-0.98.0/src/keboola_agent_cli/commands/_progress.py +314 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_crud.py +8 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_helpers.py +24 -10
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_describe.py +18 -6
- keboola_cli-0.98.0/src/keboola_agent_cli/commands/_storage_jobs.py +158 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_sync_clone_render.py +19 -6
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/context.py +80 -14
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/flow.py +15 -2
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/org.py +27 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/project.py +16 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/semantic_layer.py +68 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/storage.py +128 -66
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/sync.py +78 -37
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/workspace.py +15 -4
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/constants.py +41 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/lib.py +111 -10
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/metastore_client.py +27 -15
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/permissions.py +6 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/result_models.py +70 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/_serve_command_map.py +1 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/semantic_layer.py +7 -3
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/storage.py +64 -8
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_internals.py +46 -5
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_scope.py +88 -2
- keboola_cli-0.98.0/src/keboola_agent_cli/services/_storage_downloads.py +101 -0
- keboola_cli-0.98.0/src/keboola_agent_cli/services/_storage_jobs.py +276 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_bulk.py +9 -2
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/flow_service.py +9 -4
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/semantic_layer_service.py +57 -24
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/storage_service.py +148 -140
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_api_call_counts.py +20 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_client.py +12 -2
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e.py +185 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_service.py +32 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_lib.py +117 -5
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_metastore_client.py +18 -1
- keboola_cli-0.98.0/tests/test_partial_failure_exit_code.py +1151 -0
- keboola_cli-0.98.0/tests/test_s3_multipart.py +869 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_cli.py +17 -2
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_scope.py +223 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_scope_cli.py +172 -3
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_router_calls.py +3 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_describe_cli.py +5 -2
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_empty_definition.py +1 -1
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_files.py +74 -3
- keboola_cli-0.98.0/tests/test_storage_import_jobs.py +1013 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_write.py +74 -23
- keboola_cli-0.98.0/tests/test_transfer_progress.py +517 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/.gitignore +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/CONTRIBUTING.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/LICENSE +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/Makefile +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/README.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/examples/README.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/examples/storage_tui/README.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/formal/sync/README.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/plugins/kbagent/.claude-plugin/CLAUDE.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/plugins/kbagent/skills/kbagent-cicd-migration/scripts/migrate_cicd.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/plugins/kbagent/skills/kbagent-promotion-pipeline/scripts/generate_promotion_pipeline.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_command_sync.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_error_codes.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_file_size.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_release_scope.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_sentinel_guards.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_version_gates.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/check_wheel_ui.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/debug_linkedby_type.sh +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/file_size_baseline.json +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/gen_command_reference.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/gen_endpoint_reference.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/gen_release_notes.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/generate_changelog.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/generate_skill.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/hatch_build.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/lineage_deep.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/post-edit-quality.sh +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/pre-commit +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/sync_version.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/scripts/web-dev.sh +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/__main__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/ai_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/auth_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/device.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/environment.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/models.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/pkce.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/sentinel.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/state_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/token_provider.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/totp.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/auto_update.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/billing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/branches.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/configs.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/editor.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/merge_requests.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/misc.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/notifications.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/query.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/queue.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/stream.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/tokens.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/triggers.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/workspaces.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_auth_picker.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_checkbox_select.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_clone_cmd.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_oauth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_trash_cmd.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_git.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_password.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_runtime.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_flow_triggers.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_common.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_render.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_writes.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_metadata_input.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_project_create.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_project_ref.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_reference_data.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_scope.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_snapshots.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_table_detail.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_tables_render.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_sync_push_render.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_url_copy.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/agent.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/billing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/branch.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/changelog.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/component.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/config.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/config_state.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/data_app.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/dev_portal.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/docs.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/doctor.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/encrypt.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/feature.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/http_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/init.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/job.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/kai.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/lineage.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/merge_request.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/notification.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/permissions.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/repl.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/schedule.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/search.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/serve.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/sharing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/stream.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/token.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/transformation.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/version.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/config_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/data_science_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/dev_portal_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/effective_branch.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/errors.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/frozen_dist.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/http_base.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/json_utils.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/manage_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/models.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/output.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/project_ref.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/py.typed +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/conditional-flow-schema.json +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/conditional_flow_examples.jsonl +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/flow-schema.json +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/legacy_flow_examples.jsonl +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/scheduler_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/agent_runner.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/agents_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/app.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/dependencies.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/pricing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/agents.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/ai_chat.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/billing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/branches.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/components.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/configs.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/data_apps.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/dev_portal.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/docs.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/encrypt.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/feature.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/flows.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/health.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/jobs.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/kai.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/lineage.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/members.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/merge_requests.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/notifications.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/org.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/projects.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/schedules.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/search.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/sharing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/stream.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/token.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/transformation.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/workspaces.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/run_broadcaster.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/sse.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_auth_registration.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_column_descriptions.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_clone.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_set_guard.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_trash.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_data_app_bodies.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_data_app_password.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_describe_batch_input.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_encryption.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_cascade.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_crud.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_fqn.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_lookup.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_reference_data.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_storage_tables.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_baseline.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_bindings.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_branch.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_clone.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_clone_warnings.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_data_app.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_models.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_push_ops.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_stale.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_storage.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_workspace.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_writeback.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_table_detail.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_token_last_used.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_transformation_ops.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_workspace_load_plan.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/agent_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/auth_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/base.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/billing_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/branch_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/component_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/config_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/data_app_git_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/data_app_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/deep_lineage_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/dev_portal_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/docs_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/doctor_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/encrypt_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/feature_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/flow_validation.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/http_forwarder_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/job_idempotency_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/job_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/kai_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/lineage_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/member_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/merge_request_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/notification_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/org_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/project_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/repo_validate_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/schedule_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/search_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/sharing_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/snapshot_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/stream_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/sync_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/table_usage.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/token_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/transformation_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/variables_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/version_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/workspace_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/stream_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_mapping.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_registry.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_scope.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/clone.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/code_extraction.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/config_format.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/diff_engine.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/git_utils.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/manifest.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/naming.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/secrets.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/sql_split.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/telemetry.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/update_runner.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/src/keboola_agent_cli/yaml_input.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/__init__.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/conftest.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/helpers.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_prompt.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_prompt_helper.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_runner.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agent_tombstone.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_agents_store_events.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_ai_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_device.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_environment.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_models.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_picker.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_pkce.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_register_projects.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_sentinel.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_sentinel_guards.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_state_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auth_totp.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_auto_update.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_base_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_billing_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_billing_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_billing_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_metadata_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_metadata_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_registry.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_branch_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_build_hook.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_changelog_check.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_changelog_render.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_command_sync.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_file_size.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_release_scope.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_sentinel_guards.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_check_version_gates.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_checkbox_select.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_choice_enums.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_cli_auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_client_device_enrollment.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_client_token_events.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_component_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_component_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_component_sync_action.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_clone_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_clone_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_create_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_create_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_encryption.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_examples.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_metadata.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_rename.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_rename_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_resolution.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_row_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_row_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_search.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_search_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_set_default_bucket.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_set_guard.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_state.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_trash.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_config_update.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_git_repo.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_password.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_plain_env_keys.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_secrets_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_secrets_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_data_app_validate_repo_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_deep_lineage_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_dev_portal_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_dev_portal_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_dev_portal_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_docs_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_doctor_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e_auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e_config_dir_mode.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_e2e_lineage_deep.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_effective_branch.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_encrypt_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_encrypt_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_encryption.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_errors.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_feature_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_feature_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_file_locking.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_examples.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_flow_validation.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_frozen_dist.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_gen_command_reference.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_gen_endpoint_reference.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_gen_release_notes.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_generate_promotion_pipeline.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_helpers.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_base.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_base_auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_client_cmd.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_http_forwarder_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_integration.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_job_idempotency_store.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_job_options.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_json_utils.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_kai_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_kai_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_lib_device_enrollment.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_license_consistency.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_lineage_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_local_ai_chat.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_manage_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_manage_token_bulk.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_manage_token_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_mcp_migration_recipe.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_member_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_member_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_merge_request_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_merge_request_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_merge_request_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_migrate_cicd.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_models.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_normalize_script.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_notification_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_notification_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_notification_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_org_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_output.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_permissions.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_permissions_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_pricing.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_create_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_edit.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_edit_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_info_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_info_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_project_ref.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_release_kbagent_ai_kit_sync.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_repl.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_result_models.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_run_broadcaster.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_schedule_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_schedule_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_scheduler_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_search_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_search_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_schema.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_semantic_layer_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_banner_encoding.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_conversation_id.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_telemetry.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_serve_ui.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_auth.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_permissions.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_project_ref.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_semantic_layer_routes_e2e.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_server_smoke.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_services.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sharing_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sharing_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_skill_frontmatter.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sql_split.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_clone.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_create_table.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_delete.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_describe_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_export_filters.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_snapshots.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_swap.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_table_definition.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_tables.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_storage_truncate.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_stream_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_stream_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_stream_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_baseline_stamping.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_branch_mapping.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_branch_scope.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_cli_behavior.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_clone.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_clone_links.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_code_extraction.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_config_format.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_data_app_type.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_diff_engine.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_e2e.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_encrypt.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_force_pull_baseline.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_formal_counterexamples.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_manifest.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_naming.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_plaintext_audit.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_pull_companion_files.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_push_script_guard.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_reconcile.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_secrets.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_storage_jobs.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_version_script.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_sync_workspaces.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_table_usage.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_telemetry.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_token_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_token_provider.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_token_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_transformation_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_transformation_ops.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_triggers_client.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_update_runner.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_url_copy.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_variables_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_variables_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_version_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_cli.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_gc.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_service.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_workspace_sql_helper.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/tests/test_yaml_input.py +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/README.md +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/index.html +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/package-lock.json +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/package.json +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/postcss.config.js +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/App.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/api/client.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/api/client.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/changelogNotes.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/changelogNotes.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/AgentRunView.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/CommandPalette.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/ConfirmModal.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/DetailTabs.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/Drawer.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/Empty.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/JsonView.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/KeyValueGrid.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/ManageTokenModal.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/PillList.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/RawDetail.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/SessionExpiredBanner.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/Table.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/components/WhatsNew.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/config/credits.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/config/credits.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/index.css +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/Shell.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/Sidebar.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/StatusBar.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/layout/TopBar.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/lib/time.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/lib/time.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/main.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Agents.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Branches.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Changelog.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Components.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Configs.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Dashboard.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/DataApps.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Doctor.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Encrypt.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Flows.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Jobs.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/JobsAll.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Lineage.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/LocalAi.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Members.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Org.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Projects.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Schedules.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Search.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/SemanticLayer.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/SemanticLayerDialogs.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Sharing.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Storage.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Streams.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Tokens.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/TokensAll.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/Workspaces.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/jobsShared.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/storageSel.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/tokensShared.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/pages/tokensShared.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/router.test.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/router.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/state.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/theme.tsx +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/types.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/useHashSelection.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/src/whatsnew.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/tailwind.config.ts +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/tsconfig.json +0 -0
- {keboola_cli-0.97.0 → keboola_cli-0.98.0}/web/frontend/vite.config.ts +0 -0
|
@@ -627,8 +627,37 @@ kbagent storage table-detail --project NAME --table-id ID [--branch ID]
|
|
|
627
627
|
kbagent storage create-bucket --project NAME --stage STAGE --name NAME [--description D] [--backend B] [--branch ID]
|
|
628
628
|
kbagent storage create-table --project NAME --bucket-id ID --name NAME [--column COL:TYPE[(length)] ...] [--primary-key COL] [--not-null COL ...] [--default NAME=VALUE ...] [--source-table-id ID] [--source-branch-id N] [--time-partitioning-type DAY|HOUR|MONTH|YEAR] [--time-partitioning-field COL] [--time-partitioning-expiration-ms MS] [--range-partitioning-field COL --range-partitioning-start S --range-partitioning-end E --range-partitioning-interval I] [--clustering-field COL ...] [--branch ID] [--if-not-exists]
|
|
629
629
|
# --column XOR --source-table-id (0.66.0+, BigQuery only): --source-table-id copies an existing table's data into the requested partition/clustering layout (schema derived from source) -> swap into place with swap-tables. Partition/clustering flags work in both modes (BigQuery only); time vs range partitioning are mutually exclusive. A non-BigQuery project fails fast (pre-flight backend check).
|
|
630
|
-
kbagent storage upload-table --project NAME --table-id ID --file PATH [--incremental] [--branch ID]
|
|
631
|
-
|
|
630
|
+
kbagent storage upload-table --project NAME --table-id ID --file PATH [--incremental] [--delimiter D] [--enclosure E] [--no-auto-create] [--wait/--no-wait] [--timeout SECONDS] [--branch ID] [--progress]
|
|
631
|
+
# upload-table / file-upload cloud upload (#834): on AWS stacks a file above 64 MiB goes up as an S3
|
|
632
|
+
# MULTIPART upload -- 64 MiB parts (auto-scaled so the file fits in 10,000 parts), 4 in parallel,
|
|
633
|
+
# per-part retry on 429/5xx/transport errors, peak memory ~4 x part size. Before, the whole file was
|
|
634
|
+
# read into RAM and sent as one PutObject (hard 5 GiB ceiling). Also covers the SDK
|
|
635
|
+
# Client.upload_table. Azure/GCP stacks unchanged (they already stream; chunked upload there is a
|
|
636
|
+
# follow-up in #834). Limits: S3 federation credentials last 12 h (200 GB needs ~5 MB/s sustained);
|
|
637
|
+
# the source file must not change during the upload (size/mtime checked); no resume across runs; an
|
|
638
|
+
# aborted multipart upload may leave orphaned parts (the token cannot abort). A .csv.gz is uploaded
|
|
639
|
+
# byte-for-byte and imported by Storage; auto-create reads its header through gzip. Human mode shows
|
|
640
|
+
# a progress bar on stderr. `serve`'s upload route streams the body to a temp file (needs temp disk
|
|
641
|
+
# of the file size) instead of holding it in memory.
|
|
642
|
+
# upload-table / load-file async import (#834): --wait (default) waits --timeout SECONDS (default 600)
|
|
643
|
+
# for the Storage import job; --no-wait still waits for the cloud upload, then enqueues the import and
|
|
644
|
+
# returns file_id / job_id / job_status (imported_rows null while pending; keys are additive). A wait
|
|
645
|
+
# timeout is STORAGE_JOB_TIMEOUT, exit 4, retryable=false: the import KEEPS RUNNING server-side, the
|
|
646
|
+
# error names job_id + file_id and `storage job-detail --job-id ID --wait`. Never re-run the upload
|
|
647
|
+
# while that job is waiting/processing -- an incremental re-run duplicates rows. An enqueue failure
|
|
648
|
+
# after the upload carries file_id -> `storage load-file --file-id` instead of re-uploading.
|
|
649
|
+
# Workflow: plugins/kbagent/skills/kbagent/references/large-upload-workflow.md. Version gate for this
|
|
650
|
+
# entry lives in gotchas.md.
|
|
651
|
+
kbagent storage download-table --project NAME --table-id ID [--output FILE] [--columns COL ...] [--limit N] [--where-column COL --where-value VAL ... [--where-operator eq|neq]] [--changed-since WHEN] [--changed-until WHEN] [--branch ID] [--progress]
|
|
652
|
+
# --progress on upload-table / file-upload / download-table / file-download / unload-table (with
|
|
653
|
+
# --download): ALWAYS report transfer progress on stderr -- also with --json and with no terminal.
|
|
654
|
+
# A terminal gets a Rich bar (percent, transferred/total, speed, elapsed, ETA); otherwise one plain line
|
|
655
|
+
# every 10 s plus a final line, e.g. `upload big.csv: 42.0% 4.20/10.00 GiB, 67.30 MiB/s, elapsed
|
|
656
|
+
# 0:01:03, ETA 0:01:27` (last line: `avg` speed + `done`/`failed`). stdout (the JSON envelope) is
|
|
657
|
+
# untouched. Speed/ETA use a trailing 30 s window; downloads count network (compressed) bytes and start
|
|
658
|
+
# the clock when the download starts, not during the export job; a sliced download with no sizes in
|
|
659
|
+
# its manifest shows bytes + speed only. Without the flag nothing changes: a transient bar only in
|
|
660
|
+
# human mode on a terminal. Terminal-only: no serve / SDK surface. Version gate in gotchas.md.
|
|
632
661
|
kbagent storage add-column --project NAME --table-id ID --column COL:TYPE[(length)] [--not-null] [--default VALUE] [--branch ID]
|
|
633
662
|
kbagent storage delete-table --project NAME --table-id ID [--table-id ...] [--force] [--dry-run] [--yes] [--branch ID]
|
|
634
663
|
kbagent storage truncate-table --project NAME --table-id ID [--table-id ...] [--dry-run] [--yes] [--branch ID]
|
|
@@ -675,13 +704,19 @@ kbagent storage describe-migrate --project ALIAS [--table-id ID ...] [--bucket-i
|
|
|
675
704
|
# application are still accumulated into errors[] (exit 1) -- shape is a usage error, an API
|
|
676
705
|
# refusal is not.
|
|
677
706
|
kbagent storage files --project NAME [--tag TAG ...] [--limit N] [--offset N] [--query Q] [--branch ID]
|
|
678
|
-
kbagent storage file-upload --project NAME --file PATH [--name NAME] [--tag TAG ...] [--permanent] [--branch ID]
|
|
679
|
-
kbagent storage file-download --project NAME [--file-id ID | --tag TAG ...] [--output FILE]
|
|
707
|
+
kbagent storage file-upload --project NAME --file PATH [--name NAME] [--tag TAG ...] [--permanent] [--branch ID] [--progress]
|
|
708
|
+
kbagent storage file-download --project NAME [--file-id ID | --tag TAG ...] [--output FILE] [--progress]
|
|
680
709
|
kbagent storage file-detail --project NAME --file-id ID
|
|
681
710
|
kbagent storage file-delete --project NAME --file-id ID [--file-id ...] [--dry-run] [--yes]
|
|
682
711
|
kbagent storage file-tag --project NAME --file-id ID [--add TAG ...] [--remove TAG ...]
|
|
683
|
-
kbagent storage load-file --project NAME --file-id ID --table-id ID [--incremental] [--delimiter D] [--enclosure E] [--branch ID]
|
|
684
|
-
kbagent storage
|
|
712
|
+
kbagent storage load-file --project NAME --file-id ID --table-id ID [--incremental] [--delimiter D] [--enclosure E] [--wait/--no-wait] [--timeout SECONDS] [--branch ID]
|
|
713
|
+
kbagent storage job-detail --project NAME --job-id ID [--wait] [--timeout SECONDS]
|
|
714
|
+
# storage job-detail (#834): read-class; shows a Storage API job (status, operation_name, table_id,
|
|
715
|
+
# file_id, times, imported_rows, warnings, results, error). Exit 0 success/waiting/processing, exit 1
|
|
716
|
+
# STORAGE_JOB_FAILED when the job ended in error (details still returned), exit 4 on --wait timeout.
|
|
717
|
+
# Job ids are project-scoped, independent of the active branch (no --branch). Serve:
|
|
718
|
+
# GET /storage/jobs/{project}/{job_id}?wait=&timeout=. Version gate for this entry lives in gotchas.md.
|
|
719
|
+
kbagent storage unload-table --project NAME --table-id ID [--columns COL ...] [--limit N] [--tag TAG ...] [--download] [--output FILE|DIR] [--file-type csv|parquet] [--branch ID] [--progress]
|
|
685
720
|
|
|
686
721
|
# stream: Data Streams (OpenTelemetry/OTLP). Storage token from config (no manage token).
|
|
687
722
|
# Control plane = stream.<region> (derived from connection.<region>); the OTLP ingest URL
|
|
@@ -1007,6 +1042,26 @@ kbagent sync push --project ALIAS [--all-projects] [--dry-run] [--force] [--allo
|
|
|
1007
1042
|
# what push would delete. A config/row deleted on the remote since the last pull diffs as remote_deleted and
|
|
1008
1043
|
# is never re-created (it lands in skipped). Version gate in gotchas.md.
|
|
1009
1044
|
# sync push workspace delete (CLI-25): in a `syncWorkspaces` tree, a `push --force` that deletes a shared SQL workspace also deletes its SQL editor sessions (every user's, push branch) and their backend workspaces, which `config restore` does not bring back; `push --dry-run --force` lists them (warnings[] workspace_sessions), a plain push lists the workspace under skipped_deletions and touches no session. `--force` is destructive-class (FLAG_ESCALATIONS `sync.push --force`), so `--deny-destructive` / a cli:destructive deny blocks it while a plain push stays write-class. Version gate for this entry lives in gotchas.md.
|
|
1045
|
+
# Partial failures change the exit code (#745): commands that collect per-item failures
|
|
1046
|
+
# and keep going exit 1 (was 0) when at least one item failed:
|
|
1047
|
+
# `sync push`, `sync push/pull/diff --all-projects`, `sync clone` (also `bucket_errors`),
|
|
1048
|
+
# `org setup`, `project refresh`, `project invite --from-csv`, `workspace gc`,
|
|
1049
|
+
# `semantic-layer import/promote/build/edit metric`, `storage describe-batch --json`,
|
|
1050
|
+
# `flow schedule-remove` (new `errors[]` key, always present, empty when nothing
|
|
1051
|
+
# failed; a partial failure fills it and exits 1; when every schedule delete
|
|
1052
|
+
# fails it still raises `SCHEDULE_DELETE_FAILED`). Only `sync push`, `sync clone`,
|
|
1053
|
+
# `storage describe-batch`, `storage describe-migrate` and `flow schedule-remove` print
|
|
1054
|
+
# a `Failed:` headline instead of a green `Success:`; the others list the failed items
|
|
1055
|
+
# in a table or in summary lines, and the `--all-projects` variants state the count in
|
|
1056
|
+
# their summary line. `sync push --all-projects` counts a project
|
|
1057
|
+
# whose push returned `errors[]` in `summary.failed`. The --json payload is emitted
|
|
1058
|
+
# BEFORE the exit; the items that succeeded stay written. A `--dry-run` of these
|
|
1059
|
+
# exits 1 when it reports a failed item, like the real run. `sync diff --all-projects`
|
|
1060
|
+
# exits 1 when a project failed. Other read-only fan-outs (`billing credits`, `job list`,
|
|
1061
|
+
# `schedule list`, ...) still exit 0. The helper is `item_failure_exit_code()` in
|
|
1062
|
+
# commands/_helpers.py (returns the code, the caller raises). Version gate for this
|
|
1063
|
+
# entry lives in gotchas.md -- the placeholder cannot be written on these `# ` comment
|
|
1064
|
+
# lines (check_version_gates.py parses them as ATX markdown headings).
|
|
1010
1065
|
# sync push (since 0.91.0, #686): the manifest baseline `pull_config_hash` is stamped from the API
|
|
1011
1066
|
# response (or a read-back), never from disk -- push-deployed multi-statement SQL transformations
|
|
1012
1067
|
# (and anything disabled in the UI whose local YAML lacks `is_disabled`) no longer show permanent
|
|
@@ -1077,7 +1132,7 @@ kbagent semantic-layer add dataset --project P [--model M] --name N --table-id T
|
|
|
1077
1132
|
# --overwrite. Version gate lives in gotchas.md (no `(since vNEXT)` on `# ` lines).
|
|
1078
1133
|
kbagent semantic-layer add relationship --project P [--model M] --name N --from TABLE_ID --to TABLE_ID --on EXPR [--type left|inner]
|
|
1079
1134
|
kbagent semantic-layer add constraint --project P [--model M] --name N --constraint-type inequality|equality|range|composition|exclusion|temporal|conditional --rule "EXPR" --metrics M1,M2 [--severity error|warning|info]
|
|
1080
|
-
kbagent semantic-layer add glossary --project P [--model M] --term TERM
|
|
1135
|
+
kbagent semantic-layer add glossary --project P [--model M] --term TERM --definition D
|
|
1081
1136
|
kbagent semantic-layer edit metric --project P [--model M] --name N [--new-name N2] [--new-sql SQL] [--new-dataset TABLE_ID] [--new-description D] [--yes]
|
|
1082
1137
|
kbagent semantic-layer edit dataset --project P [--model M] --name N [--new-name N2] [--new-description D] [--new-grain G]
|
|
1083
1138
|
kbagent semantic-layer edit constraint --project P [--model M] --name N [--new-name N2] [--new-rule "EXPR"] [--new-constraint-type T] [--new-severity error|warning|info] [--new-metrics M1,M2]
|
|
@@ -1088,8 +1143,8 @@ kbagent semantic-layer remove dataset --project P [--model M] --name N [--yes]
|
|
|
1088
1143
|
kbagent semantic-layer remove constraint --project P [--model M] --name N [--yes]
|
|
1089
1144
|
kbagent semantic-layer remove relationship --project P [--model M] --name N [--yes]
|
|
1090
1145
|
kbagent semantic-layer remove glossary --project P [--model M] --term TERM [--yes]
|
|
1091
|
-
kbagent semantic-layer import --project P --file PATH [--model M] [--types T,T,...] [--dry-run] [--yes] [--overwrite]
|
|
1092
|
-
kbagent semantic-layer promote --from-project A --to-project B [--from-model M] [--to-model M] [--types T,T,...] [--dry-run] [--yes]
|
|
1146
|
+
kbagent semantic-layer import --project P --file PATH [--model M] [--types T,T,...] [--dry-run] [--yes] [--overwrite] [--scope project|organization|targeted] [--target-project ALIAS|ID ...]
|
|
1147
|
+
kbagent semantic-layer promote --from-project A --to-project B [--from-model M] [--to-model M] [--types T,T,...] [--dry-run] [--yes] [--scope project|organization|targeted] [--target-project ALIAS|ID ...]
|
|
1093
1148
|
kbagent semantic-layer build --project P [--model M] --tables T,T,... [--name N] [--dry-run] [--keep-on-failure] [--output PATH]
|
|
1094
1149
|
kbagent semantic-layer token --encrypt --project P --component-id C
|
|
1095
1150
|
# scope (PSGO-140, new): visibility scope for a semantic-layer item -- "project"
|
|
@@ -1098,7 +1153,15 @@ kbagent semantic-layer token --encrypt --project P --component-id C
|
|
|
1098
1153
|
# create` and every `add <kind>` above. --scope omitted: `model create` makes a "project"
|
|
1099
1154
|
# item, `add <kind>` INHERITS its model's scope (an org-level model gets org-level children;
|
|
1100
1155
|
# a targeted model, its target projects); an inherited organization scope is permission-gated
|
|
1101
|
-
# like a typed one, and a non-org-admin gets a 403 on it (pass --scope project).
|
|
1156
|
+
# like a typed one, and a non-org-admin gets a 403 on it (pass --scope project). `import`,
|
|
1157
|
+
# `promote` and `build --model` create their NEW items at the target model's scope the same way
|
|
1158
|
+
# (same gate: FLAG_ESCALATIONS `semantic-layer.import|promote|build --scope organization`);
|
|
1159
|
+
# `import` / `promote --scope` (+ --target-project) override it, e.g. `--scope project` for a
|
|
1160
|
+
# non-org-admin under an org-level model; items they overwrite keep their own scope. Item names are unique per object type across ALL
|
|
1161
|
+
# models of a project (ALREADY_EXISTS says "in this project"), so a model cannot be copied into
|
|
1162
|
+
# a second model of the same project under the same item names. An item stored at schema version
|
|
1163
|
+
# 1.0.0 (created before 0.97.0) cannot be elevated: the error names the stored version and the
|
|
1164
|
+
# fix (export, delete, create again, import). --target-project takes a registered alias OR a
|
|
1102
1165
|
# numeric project ID (repeatable or comma-separated; an alias must be on the owner's stack);
|
|
1103
1166
|
# without --scope targeted it exits 2. With --scope targeted and no --target-project: a real
|
|
1104
1167
|
# terminal launches an interactive picker over the other projects on the stack; --json fails
|
|
@@ -10,6 +10,7 @@ from .result_models import (
|
|
|
10
10
|
JobResult,
|
|
11
11
|
QueryResult,
|
|
12
12
|
ScopedTokenResult,
|
|
13
|
+
StorageJobResult,
|
|
13
14
|
StreamSourceResult,
|
|
14
15
|
SyncPushResult,
|
|
15
16
|
TokenListEntryResult,
|
|
@@ -32,6 +33,7 @@ __all__ = [
|
|
|
32
33
|
"JobResult",
|
|
33
34
|
"QueryResult",
|
|
34
35
|
"ScopedTokenResult",
|
|
36
|
+
"StorageJobResult",
|
|
35
37
|
"StreamSourceResult",
|
|
36
38
|
"SyncPushResult",
|
|
37
39
|
"TokenListEntryResult",
|
|
@@ -26,6 +26,44 @@ from .constants import CHANGELOG_HEADLINE_MAX_CHARS
|
|
|
26
26
|
|
|
27
27
|
# Ordered newest-first. Each value is a list of brief one-line descriptions.
|
|
28
28
|
CHANGELOG: dict[str, list[str]] = {
|
|
29
|
+
"0.98.0": [
|
|
30
|
+
"New (#837): `storage upload-table` and `file-upload` now upload large files to AWS "
|
|
31
|
+
"stacks in parts, so files over 5 GB work and memory stays flat. Files above 64 MiB are "
|
|
32
|
+
"sent as an S3 multipart upload: 64 MiB parts, four in parallel, each part retried on "
|
|
33
|
+
"its own. Before, kbagent read the whole file into memory and S3 refused anything over "
|
|
34
|
+
"5 GB. In a test, a 10 GB file that 0.97.0 could not upload (it used 10 GB of memory and "
|
|
35
|
+
"then failed) uploaded in about four minutes with under 350 MB of memory. A `.csv.gz` "
|
|
36
|
+
"file is uploaded as it is. Azure and GCP stacks are unchanged.",
|
|
37
|
+
"New (#837): `storage upload-table` and `load-file` can queue the import without waiting "
|
|
38
|
+
"for it, and the new `storage job-detail` command follows the import. `--no-wait` "
|
|
39
|
+
"returns `job_id` and `file_id` as soon as the import is queued; `--timeout` sets how "
|
|
40
|
+
"long the default `--wait` waits. `storage job-detail --job-id ID [--wait]` shows the "
|
|
41
|
+
"status, the table and the imported rows. When the wait times out, the error says the "
|
|
42
|
+
"import keeps running, names the job, and is no longer marked retryable, so a long "
|
|
43
|
+
"upload is not repeated by mistake. `kbagent serve` (`GET /storage/jobs/{project}/"
|
|
44
|
+
"{job_id}`) and the SDK (`Client.storage_job()`) have the same functions.",
|
|
45
|
+
"New (#837): `--progress` shows percent, speed, elapsed time and time left for storage "
|
|
46
|
+
"uploads and downloads. It works on `storage upload-table`, `file-upload`, "
|
|
47
|
+
"`download-table`, `file-download` and `unload-table --download`, and writes to stderr, also with `--json`: a progress bar in "
|
|
48
|
+
"a terminal, otherwise one line every 10 seconds.",
|
|
49
|
+
"Fix (#837): `storage download-table --keep-slices`, `file-download` and `unload-table` "
|
|
50
|
+
"now keep every slice file inside the output directory. A slice name from the export manifest that "
|
|
51
|
+
"could point outside it (`..`, a backslash, a drive letter) is replaced by "
|
|
52
|
+
"`part-NNNNN`.",
|
|
53
|
+
"Fix (#747): commands that process several items now exit 1 and print `Failed:` when "
|
|
54
|
+
"an item fails. Before, `sync push`, `sync clone`, `org setup`, `project refresh`, "
|
|
55
|
+
"`workspace gc`, several `semantic-layer` commands, `storage describe-batch --json`, "
|
|
56
|
+
"`flow schedule-remove` and others printed `Success:` and exited 0 even when items "
|
|
57
|
+
"failed. A `--dry-run` that reports a failed item exits 1 too. The `--json` output "
|
|
58
|
+
"keeps its keys, with a few additions such as `errors[]` in `flow schedule-remove`.",
|
|
59
|
+
"Fix (#836): `semantic-layer import`, `promote` and `build --model` now give new items "
|
|
60
|
+
"the scope of the target model. Before, they created every item at `project` scope, "
|
|
61
|
+
"also in a shared model, so the other projects could not see it. Items they overwrite "
|
|
62
|
+
"keep their own scope. Duplicate-name and elevation errors now say what is wrong and "
|
|
63
|
+
"how to fix it.",
|
|
64
|
+
"Change (#836): `semantic-layer add glossary` now requires `--definition`. Without it the "
|
|
65
|
+
"Metastore always rejected the item with a bare 422 error, so no working call breaks.",
|
|
66
|
+
],
|
|
29
67
|
"0.97.0": [
|
|
30
68
|
"New (#715): semantic-layer items can now be shared with chosen projects or with the "
|
|
31
69
|
"whole organization, not only kept in the owning project (AI-3790). `model create` and "
|
|
@@ -16,6 +16,7 @@ import time # noqa: F401 -- re-exported: tests patch keboola_agent_cli.client.
|
|
|
16
16
|
|
|
17
17
|
from ..constants import QUERY_RESULTS_PAGE_SIZE
|
|
18
18
|
from ._client import KeboolaClient
|
|
19
|
+
from ._core import storage_job_error_message
|
|
19
20
|
from ._transfer import (
|
|
20
21
|
InlineQueryResult,
|
|
21
22
|
_assert_safe_download_url,
|
|
@@ -27,11 +28,13 @@ from ._transfer import (
|
|
|
27
28
|
_iter_poll_intervals,
|
|
28
29
|
_unwrap_bigquery_error,
|
|
29
30
|
)
|
|
31
|
+
from .storage_tables import TableUploadOutcome
|
|
30
32
|
|
|
31
33
|
__all__ = [
|
|
32
34
|
"QUERY_RESULTS_PAGE_SIZE",
|
|
33
35
|
"InlineQueryResult",
|
|
34
36
|
"KeboolaClient",
|
|
37
|
+
"TableUploadOutcome",
|
|
35
38
|
"_CloudDownloader",
|
|
36
39
|
"_assert_safe_download_url",
|
|
37
40
|
"_build_abs_upload_url",
|
|
@@ -40,4 +43,5 @@ __all__ = [
|
|
|
40
43
|
"_extract_query_job_error",
|
|
41
44
|
"_iter_poll_intervals",
|
|
42
45
|
"_unwrap_bigquery_error",
|
|
46
|
+
"storage_job_error_message",
|
|
43
47
|
]
|
|
@@ -16,13 +16,18 @@ from typing import Any, Self
|
|
|
16
16
|
|
|
17
17
|
import httpx
|
|
18
18
|
|
|
19
|
-
from ..constants import
|
|
19
|
+
from ..constants import (
|
|
20
|
+
DEFAULT_TIMEOUT,
|
|
21
|
+
IMPORT_JOB_MAX_WAIT,
|
|
22
|
+
STORAGE_JOB_MAX_WAIT,
|
|
23
|
+
STORAGE_JOB_POLL_INTERVAL,
|
|
24
|
+
)
|
|
20
25
|
from ..errors import ErrorCode, KeboolaApiError
|
|
21
26
|
from ..http_base import BaseHttpClient
|
|
22
27
|
from ..stream_client import StreamClient
|
|
23
28
|
|
|
24
29
|
|
|
25
|
-
def
|
|
30
|
+
def storage_job_error_message(job: dict[str, Any]) -> str:
|
|
26
31
|
"""Best-effort human message out of a failed Storage job's ``error`` field.
|
|
27
32
|
|
|
28
33
|
Written tolerantly on purpose. An API ``error`` field is not reliably a
|
|
@@ -278,6 +283,8 @@ class _CoreClient(BaseHttpClient):
|
|
|
278
283
|
self,
|
|
279
284
|
job: dict[str, Any],
|
|
280
285
|
max_wait: float | None = None,
|
|
286
|
+
*,
|
|
287
|
+
raise_on_error: bool = True,
|
|
281
288
|
) -> dict[str, Any]:
|
|
282
289
|
"""Poll a Storage API job until it reaches a terminal state.
|
|
283
290
|
|
|
@@ -309,12 +316,20 @@ class _CoreClient(BaseHttpClient):
|
|
|
309
316
|
``STORAGE_JOB_MAX_WAIT``. Callers whose jobs are legitimately
|
|
310
317
|
slower pass their own budget -- e.g. a workspace load moving
|
|
311
318
|
gigabytes (``WORKSPACE_LOAD_JOB_MAX_WAIT``).
|
|
319
|
+
raise_on_error: When False, a job that ended in ``error`` is
|
|
320
|
+
returned like a successful one instead of raising
|
|
321
|
+
``STORAGE_JOB_FAILED`` -- for a caller that reports the job
|
|
322
|
+
itself (``storage job-detail --wait``) and would otherwise
|
|
323
|
+
lose every field but the message.
|
|
312
324
|
|
|
313
325
|
Returns:
|
|
314
|
-
|
|
326
|
+
Terminal job dict (with results on success; with ``error`` when
|
|
327
|
+
``raise_on_error`` is False and the job failed).
|
|
315
328
|
|
|
316
329
|
Raises:
|
|
317
|
-
KeboolaApiError: If the job fails
|
|
330
|
+
KeboolaApiError: If the job fails (unless ``raise_on_error`` is
|
|
331
|
+
False) or the budget runs out. The timeout carries
|
|
332
|
+
``details={"job_id": ...}``.
|
|
318
333
|
"""
|
|
319
334
|
budget = STORAGE_JOB_MAX_WAIT if max_wait is None else max_wait
|
|
320
335
|
job_id = job.get("id")
|
|
@@ -324,8 +339,10 @@ class _CoreClient(BaseHttpClient):
|
|
|
324
339
|
if status == "success":
|
|
325
340
|
return job
|
|
326
341
|
if status == "error":
|
|
342
|
+
if not raise_on_error:
|
|
343
|
+
return job
|
|
327
344
|
raise KeboolaApiError(
|
|
328
|
-
message=
|
|
345
|
+
message=storage_job_error_message(job),
|
|
329
346
|
status_code=500,
|
|
330
347
|
error_code=ErrorCode.STORAGE_JOB_FAILED,
|
|
331
348
|
retryable=False,
|
|
@@ -351,4 +368,43 @@ class _CoreClient(BaseHttpClient):
|
|
|
351
368
|
status_code=504,
|
|
352
369
|
error_code=ErrorCode.STORAGE_JOB_TIMEOUT,
|
|
353
370
|
retryable=True,
|
|
371
|
+
details={"job_id": job_id},
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
def get_storage_job(self, job_id: int | str) -> dict[str, Any]:
|
|
375
|
+
"""Fetch one Storage API job (``GET /v2/storage/jobs/{id}``).
|
|
376
|
+
|
|
377
|
+
Job IDs are project-scoped and branch-independent: the route has no
|
|
378
|
+
``/branch/{id}`` variant, so no branch is taken here.
|
|
379
|
+
|
|
380
|
+
Args:
|
|
381
|
+
job_id: Storage job ID (as returned by any async Storage write).
|
|
382
|
+
|
|
383
|
+
Returns:
|
|
384
|
+
The raw job dict (``id``, ``status``, ``operationName``,
|
|
385
|
+
``operationParams``, ``results``, ``error``, timestamps, ...).
|
|
386
|
+
"""
|
|
387
|
+
return self._request("GET", f"/v2/storage/jobs/{job_id}").json()
|
|
388
|
+
|
|
389
|
+
def follow_storage_job(
|
|
390
|
+
self, job_id: int | str, max_wait: float | None = None
|
|
391
|
+
) -> dict[str, Any]:
|
|
392
|
+
"""Fetch a Storage job and poll it to a terminal state.
|
|
393
|
+
|
|
394
|
+
Unlike the write paths, a job that ended in ``error`` is RETURNED, not
|
|
395
|
+
raised: the caller asked about the job, and the error is part of the
|
|
396
|
+
answer. A job already terminal costs exactly one GET.
|
|
397
|
+
|
|
398
|
+
Args:
|
|
399
|
+
job_id: Storage job ID.
|
|
400
|
+
max_wait: Seconds to poll. ``None`` means ``IMPORT_JOB_MAX_WAIT``
|
|
401
|
+
-- the jobs worth following by hand are the long imports.
|
|
402
|
+
|
|
403
|
+
Raises:
|
|
404
|
+
KeboolaApiError: ``STORAGE_JOB_TIMEOUT`` when the budget runs out
|
|
405
|
+
(the job keeps running; following it again is safe).
|
|
406
|
+
"""
|
|
407
|
+
budget = IMPORT_JOB_MAX_WAIT if max_wait is None else max_wait
|
|
408
|
+
return self._wait_for_storage_job(
|
|
409
|
+
self.get_storage_job(job_id), max_wait=budget, raise_on_error=False
|
|
354
410
|
)
|