keboola-cli 0.96.2__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.96.2 → keboola_cli-0.98.0}/CLAUDE.md +117 -18
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/PKG-INFO +1 -1
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/pyproject.toml +1 -1
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/__init__.py +2 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/changelog.py +54 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/__init__.py +4 -0
- {keboola_cli-0.96.2 → 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.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_transfer.py +155 -21
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/storage_files.py +83 -18
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/storage_tables.py +289 -31
- {keboola_cli-0.96.2 → 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.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_crud.py +87 -6
- keboola_cli-0.98.0/src/keboola_agent_cli/commands/_semantic_layer_helpers.py +195 -0
- keboola_cli-0.98.0/src/keboola_agent_cli/commands/_semantic_layer_scope.py +252 -0
- {keboola_cli-0.96.2 → 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.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_sync_clone_render.py +19 -6
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/context.py +170 -25
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/flow.py +15 -2
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/org.py +27 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/project.py +16 -1
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/semantic_layer.py +98 -3
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/storage.py +128 -66
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/sync.py +78 -37
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/workspace.py +15 -4
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/constants.py +41 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/lib.py +111 -10
- keboola_cli-0.98.0/src/keboola_agent_cli/metastore_client.py +505 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/permissions.py +29 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/result_models.py +70 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/_serve_command_map.py +14 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/semantic_layer.py +160 -10
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/storage.py +64 -8
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_crud.py +11 -76
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_internals.py +48 -9
- keboola_cli-0.98.0/src/keboola_agent_cli/services/_semantic_layer_scope.py +307 -0
- 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.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_bulk.py +9 -2
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/flow_service.py +9 -4
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/semantic_layer_service.py +276 -20
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/storage_service.py +148 -140
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_api_call_counts.py +20 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_client.py +12 -2
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_e2e.py +226 -5
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_flow_service.py +32 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_lib.py +117 -5
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_metastore_client.py +232 -10
- keboola_cli-0.98.0/tests/test_partial_failure_exit_code.py +1151 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_project_ref.py +5 -1
- keboola_cli-0.98.0/tests/test_s3_multipart.py +869 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_semantic_layer_cli.py +17 -2
- keboola_cli-0.98.0/tests/test_semantic_layer_scope.py +680 -0
- keboola_cli-0.98.0/tests/test_semantic_layer_scope_cli.py +609 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_semantic_layer_service.py +61 -44
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_server_router_calls.py +148 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_server_semantic_layer_routes_e2e.py +3 -3
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_describe_cli.py +5 -2
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_empty_definition.py +1 -1
- {keboola_cli-0.96.2 → 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.96.2 → 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.96.2/src/keboola_agent_cli/commands/_semantic_layer_helpers.py +0 -44
- keboola_cli-0.96.2/src/keboola_agent_cli/metastore_client.py +0 -315
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/.gitignore +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/CONTRIBUTING.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/LICENSE +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/Makefile +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/README.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/examples/README.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/examples/storage_tui/README.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/formal/sync/README.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/plugins/kbagent/.claude-plugin/CLAUDE.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/plugins/kbagent/skills/kbagent-cicd-migration/scripts/migrate_cicd.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/plugins/kbagent/skills/kbagent-promotion-pipeline/scripts/generate_promotion_pipeline.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_command_sync.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_error_codes.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_file_size.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_release_scope.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_sentinel_guards.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_version_gates.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/check_wheel_ui.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/debug_linkedby_type.sh +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/file_size_baseline.json +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/gen_command_reference.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/gen_endpoint_reference.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/gen_release_notes.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/generate_changelog.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/generate_skill.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/hatch_build.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/lineage_deep.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/post-edit-quality.sh +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/pre-commit +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/sync_version.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/scripts/web-dev.sh +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/__main__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/ai_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/auth_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/device.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/environment.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/models.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/pkce.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/sentinel.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/state_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/token_provider.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auth/totp.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/auto_update.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/billing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/branches.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/configs.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/editor.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/merge_requests.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/misc.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/notifications.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/query.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/queue.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/stream.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/tokens.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/triggers.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/client/workspaces.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_auth_picker.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_checkbox_select.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_clone_cmd.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_oauth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_config_trash_cmd.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_git.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_password.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_data_app_runtime.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_flow_triggers.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_common.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_render.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_merge_request_writes.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_metadata_input.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_project_create.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_project_ref.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_semantic_layer_reference_data.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_snapshots.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_table_detail.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_storage_tables_render.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_sync_push_render.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/_url_copy.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/agent.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/billing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/branch.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/changelog.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/component.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/config.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/config_state.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/data_app.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/dev_portal.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/docs.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/doctor.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/encrypt.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/feature.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/http_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/init.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/job.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/kai.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/lineage.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/merge_request.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/notification.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/permissions.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/repl.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/schedule.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/search.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/serve.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/sharing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/stream.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/token.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/transformation.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/commands/version.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/config_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/data_science_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/dev_portal_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/effective_branch.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/errors.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/frozen_dist.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/http_base.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/json_utils.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/manage_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/models.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/output.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/project_ref.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/py.typed +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/conditional-flow-schema.json +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/conditional_flow_examples.jsonl +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/flow-schema.json +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/resources/flow/legacy_flow_examples.jsonl +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/scheduler_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/agent_runner.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/agents_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/app.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/dependencies.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/pricing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/agents.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/ai_chat.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/billing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/branches.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/components.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/configs.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/data_apps.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/dev_portal.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/docs.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/encrypt.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/feature.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/flows.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/health.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/jobs.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/kai.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/lineage.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/members.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/merge_requests.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/notifications.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/org.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/projects.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/schedules.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/search.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/sharing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/stream.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/token.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/transformation.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/routers/workspaces.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/run_broadcaster.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/server/sse.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_auth_registration.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_column_descriptions.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_clone.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_set_guard.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_config_trash.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_data_app_bodies.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_data_app_password.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_describe_batch_input.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_encryption.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_cascade.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_fqn.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_lookup.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_semantic_layer_reference_data.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_storage_tables.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_baseline.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_bindings.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_branch.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_clone.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_clone_warnings.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_data_app.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_models.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_push_ops.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_stale.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_storage.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_workspace.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_sync_writeback.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_table_detail.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_token_last_used.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_transformation_ops.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/_workspace_load_plan.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/agent_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/auth_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/base.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/billing_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/branch_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/component_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/config_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/data_app_git_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/data_app_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/deep_lineage_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/dev_portal_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/docs_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/doctor_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/encrypt_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/feature_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/flow_validation.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/http_forwarder_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/job_idempotency_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/job_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/kai_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/lineage_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/member_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/merge_request_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/notification_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/org_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/project_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/repo_validate_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/schedule_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/search_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/sharing_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/snapshot_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/stream_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/sync_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/table_usage.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/token_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/transformation_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/variables_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/version_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/services/workspace_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/stream_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_mapping.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_registry.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/branch_scope.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/clone.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/code_extraction.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/config_format.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/diff_engine.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/git_utils.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/manifest.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/naming.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/secrets.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/sync/sql_split.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/telemetry.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/update_runner.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/src/keboola_agent_cli/yaml_input.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/__init__.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/conftest.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/helpers.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agent_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agent_prompt.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agent_prompt_helper.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agent_runner.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agent_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agent_tombstone.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_agents_store_events.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_ai_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_device.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_environment.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_models.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_picker.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_pkce.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_register_projects.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_sentinel.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_sentinel_guards.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_state_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auth_totp.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_auto_update.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_base_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_billing_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_billing_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_billing_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_branch_metadata_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_branch_metadata_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_branch_registry.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_branch_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_build_hook.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_changelog_check.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_changelog_render.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_check_command_sync.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_check_file_size.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_check_release_scope.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_check_sentinel_guards.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_check_version_gates.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_checkbox_select.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_choice_enums.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_cli_auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_client_device_enrollment.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_client_token_events.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_component_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_component_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_component_sync_action.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_clone_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_clone_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_create_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_create_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_encryption.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_examples.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_metadata.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_rename.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_rename_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_resolution.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_row_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_row_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_search.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_search_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_set_default_bucket.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_set_guard.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_state.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_trash.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_config_update.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_git_repo.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_password.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_plain_env_keys.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_secrets_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_secrets_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_data_app_validate_repo_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_deep_lineage_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_dev_portal_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_dev_portal_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_dev_portal_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_docs_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_doctor_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_e2e_auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_e2e_config_dir_mode.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_e2e_lineage_deep.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_effective_branch.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_encrypt_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_encrypt_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_encryption.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_errors.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_feature_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_feature_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_file_locking.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_flow_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_flow_examples.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_flow_validation.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_frozen_dist.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_gen_command_reference.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_gen_endpoint_reference.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_gen_release_notes.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_generate_promotion_pipeline.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_helpers.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_http_base.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_http_base_auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_http_client_cmd.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_http_forwarder_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_integration.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_job_idempotency_store.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_job_options.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_json_utils.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_kai_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_kai_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_lib_device_enrollment.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_license_consistency.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_lineage_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_local_ai_chat.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_manage_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_manage_token_bulk.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_manage_token_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_mcp_migration_recipe.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_member_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_member_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_merge_request_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_merge_request_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_merge_request_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_migrate_cicd.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_models.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_normalize_script.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_notification_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_notification_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_notification_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_org_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_output.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_permissions.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_permissions_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_pricing.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_project_create_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_project_edit.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_project_edit_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_project_info_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_project_info_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_release_kbagent_ai_kit_sync.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_repl.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_result_models.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_run_broadcaster.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_schedule_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_schedule_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_scheduler_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_search_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_search_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_semantic_layer_schema.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_serve_banner_encoding.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_serve_conversation_id.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_serve_telemetry.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_serve_ui.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_server_auth.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_server_permissions.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_server_project_ref.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_server_smoke.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_services.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sharing_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sharing_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_skill_frontmatter.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sql_split.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_clone.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_create_table.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_delete.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_describe_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_export_filters.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_snapshots.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_swap.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_table_definition.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_tables.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_storage_truncate.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_stream_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_stream_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_stream_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_baseline_stamping.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_branch_mapping.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_branch_scope.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_cli_behavior.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_clone.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_clone_links.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_code_extraction.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_config_format.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_data_app_type.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_diff_engine.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_e2e.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_encrypt.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_force_pull_baseline.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_formal_counterexamples.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_manifest.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_naming.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_plaintext_audit.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_pull_companion_files.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_push_script_guard.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_reconcile.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_secrets.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_storage_jobs.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_version_script.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_sync_workspaces.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_table_usage.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_telemetry.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_token_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_token_provider.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_token_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_transformation_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_transformation_ops.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_triggers_client.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_update_runner.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_url_copy.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_variables_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_variables_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_version_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_workspace_cli.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_workspace_gc.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_workspace_service.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_workspace_sql_helper.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/tests/test_yaml_input.py +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/README.md +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/index.html +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/package-lock.json +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/package.json +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/postcss.config.js +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/App.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/api/client.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/api/client.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/changelogNotes.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/changelogNotes.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/AgentRunView.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/CommandPalette.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/ConfirmModal.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/DetailTabs.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/Drawer.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/Empty.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/JsonView.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/KeyValueGrid.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/ManageTokenModal.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/PillList.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/RawDetail.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/SessionExpiredBanner.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/Table.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/components/WhatsNew.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/config/credits.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/config/credits.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/index.css +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/layout/Shell.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/layout/Sidebar.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/layout/StatusBar.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/layout/TopBar.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/lib/time.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/lib/time.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/main.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Agents.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Branches.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Changelog.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Components.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Configs.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Dashboard.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/DataApps.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Doctor.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Encrypt.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Flows.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Jobs.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/JobsAll.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Lineage.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/LocalAi.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Members.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Org.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Projects.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Schedules.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Search.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/SemanticLayer.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/SemanticLayerDialogs.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Sharing.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Storage.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Streams.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Tokens.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/TokensAll.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/Workspaces.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/jobsShared.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/storageSel.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/tokensShared.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/pages/tokensShared.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/router.test.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/router.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/state.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/theme.tsx +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/types.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/useHashSelection.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/src/whatsnew.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/tailwind.config.ts +0 -0
- {keboola_cli-0.96.2 → keboola_cli-0.98.0}/web/frontend/tsconfig.json +0 -0
- {keboola_cli-0.96.2 → 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
|
|
@@ -1054,7 +1109,7 @@ kbagent dev-portal deprecate --app VENDOR.APP_ID [--identity A] [--dry-run]
|
|
|
1054
1109
|
kbagent encrypt values --project ALIAS --component-id ID --input JSON|@file|- [--output-file PATH]
|
|
1055
1110
|
|
|
1056
1111
|
kbagent semantic-layer model list --project P
|
|
1057
|
-
kbagent semantic-layer model create --project P --name N [--description D] [--sql-dialect Snowflake]
|
|
1112
|
+
kbagent semantic-layer model create --project P --name N [--description D] [--sql-dialect Snowflake] [--scope project|organization|targeted] [--target-project ALIAS|ID ...]
|
|
1058
1113
|
kbagent semantic-layer model delete --project P --model M [--yes]
|
|
1059
1114
|
kbagent semantic-layer show --project P [--model M] [--type dataset|metric|relationship|constraint|glossary]
|
|
1060
1115
|
kbagent semantic-layer search-context --project P [--pattern G ...] [--type model|dataset|metric|relationship|constraint|glossary|all] [--limit N]
|
|
@@ -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,23 +1143,67 @@ 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
|
|
1150
|
+
# scope (PSGO-140, new): visibility scope for a semantic-layer item -- "project"
|
|
1151
|
+
# (owner only), "organization" (every project in the org), or "targeted" (owner +
|
|
1152
|
+
# explicit --target-project grants). --scope/--target-project are also accepted by `model
|
|
1153
|
+
# create` and every `add <kind>` above. --scope omitted: `model create` makes a "project"
|
|
1154
|
+
# item, `add <kind>` INHERITS its model's scope (an org-level model gets org-level children;
|
|
1155
|
+
# a targeted model, its target projects); an inherited organization scope is permission-gated
|
|
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
|
|
1165
|
+
# numeric project ID (repeatable or comma-separated; an alias must be on the owner's stack);
|
|
1166
|
+
# without --scope targeted it exits 2. With --scope targeted and no --target-project: a real
|
|
1167
|
+
# terminal launches an interactive picker over the other projects on the stack; --json fails
|
|
1168
|
+
# fast (exit 2). A bad alias/ID/--scope/--type is a usage error (exit 2), never a traceback.
|
|
1169
|
+
# Creating directly at --scope organization requires the organization-admin ROLE (403
|
|
1170
|
+
# otherwise) -- an ordinary token instead uses `scope request-create` + an org-admin's
|
|
1171
|
+
# `scope set --scope organization`. Elevation is ONE-WAY (no downgrade endpoint), which is why
|
|
1172
|
+
# every `--scope organization` (here and on `model create` / `add <kind>`) is destructive-class
|
|
1173
|
+
# (FLAG_ESCALATIONS). `edit`, `import --overwrite` and `promote` update in place (PUT): an item
|
|
1174
|
+
# keeps its id, scope, grants and pending elevation request. `scope add|remove` merge into the
|
|
1175
|
+
# grants client-side (not atomic; refused from a project that does not own the item, because
|
|
1176
|
+
# the server hides the grants from a non-owner -- use `scope set --target-project` there).
|
|
1177
|
+
# Verbs follow the CLI spec (#791): get / add / remove / set / request-create / request-delete /
|
|
1178
|
+
# request-list; `scope set` takes exactly ONE of --scope organization, --target-project (replace
|
|
1179
|
+
# the whole list) or --clear.
|
|
1180
|
+
kbagent semantic-layer scope get --project P --type model|dataset|metric|relationship|constraint|glossary --context-id ID
|
|
1181
|
+
kbagent semantic-layer scope add --project P --type T --context-id ID --target-project ALIAS|ID [--target-project ...]
|
|
1182
|
+
kbagent semantic-layer scope remove --project P --type T --context-id ID --target-project ALIAS|ID [--target-project ...]
|
|
1183
|
+
kbagent semantic-layer scope set --project P --type T --context-id ID (--scope organization | --target-project ALIAS|ID [...] | --clear) [--dry-run] [--yes]
|
|
1184
|
+
kbagent semantic-layer scope request-create --project P --type T --context-id ID
|
|
1185
|
+
kbagent semantic-layer scope request-delete --project P --type T --context-id ID
|
|
1186
|
+
kbagent semantic-layer scope request-list --project P --type T [--limit N] [--offset N]
|
|
1187
|
+
# scope over `kbagent serve`: GET/PUT /semantic-layer/scope/{context_id}, POST/DELETE
|
|
1188
|
+
# .../target-projects, PUT/DELETE .../elevation-request, GET /semantic-layer/scope/elevation-requests;
|
|
1189
|
+
# POST /semantic-layer/models and /items/{kind} take `scope` + `target_projects`.
|
|
1095
1190
|
kbagent semantic-layer reference-data list --project P [--model M]
|
|
1096
1191
|
kbagent semantic-layer reference-data get --project P (--id ID | --dimension D)
|
|
1097
1192
|
kbagent semantic-layer reference-data set --project P [--model M] --dimension D --members-file PATH [--dataset-id T] [--description X]
|
|
1098
1193
|
kbagent semantic-layer reference-data delete --project P --id ID [--yes]
|
|
1099
1194
|
# Alias: `kbagent sl ...` (hidden) is equivalent to `kbagent semantic-layer ...`.
|
|
1100
|
-
# semantic-layer
|
|
1101
|
-
#
|
|
1102
|
-
#
|
|
1103
|
-
#
|
|
1104
|
-
# the
|
|
1105
|
-
#
|
|
1106
|
-
#
|
|
1107
|
-
#
|
|
1195
|
+
# semantic-layer READS work with any valid, non-disabled, non-expired Storage token
|
|
1196
|
+
# (0.97.0, PSGO-282): the Metastore no longer requires a master token for GET/List. WRITES
|
|
1197
|
+
# (add/edit/remove/import/promote/build/scope add|remove|set) still need a project-admin token
|
|
1198
|
+
# (master token or any admin-role user token) -- a non-admin token 403s on the write. Before
|
|
1199
|
+
# PSGO-282 the Metastore's auth gate rejected EVERY valid non-master token, including reads,
|
|
1200
|
+
# with an opaque 401 "Failed to create project scope" (#711, MasterTokenRequiredError swallowed
|
|
1201
|
+
# server-side); kbagent still reclassifies exactly that 401 to MISSING_MASTER_TOKEN (exit 3) as
|
|
1202
|
+
# a safety net for a deployment that predates the fix. Other unexplained 401s anywhere map to
|
|
1203
|
+
# AUTH_REJECTED instead of the false "Invalid or expired token" (INVALID_TOKEN stays for 401s
|
|
1204
|
+
# that DO blame the credential). Version gate for this entry lives in gotchas.md -- `(since
|
|
1205
|
+
# 0.97.0)` cannot be written on these `# ` comment lines (check_version_gates.py parses them as
|
|
1206
|
+
# ATX headings).
|
|
1108
1207
|
|
|
1109
1208
|
kbagent http get PATH [--timeout SECONDS]
|
|
1110
1209
|
kbagent http post PATH [--body JSON|@file|-] [--timeout SECONDS]
|
|
@@ -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,60 @@ 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
|
+
],
|
|
67
|
+
"0.97.0": [
|
|
68
|
+
"New (#715): semantic-layer items can now be shared with chosen projects or with the "
|
|
69
|
+
"whole organization, not only kept in the owning project (AI-3790). `model create` and "
|
|
70
|
+
"every `add <kind>` take `--scope project|targeted|organization` and `--target-project` "
|
|
71
|
+
"(a registered alias or a project ID). The new `semantic-layer scope` command group "
|
|
72
|
+
"shows and changes who sees an existing item: `get`, `add`, `remove` and `set`, plus "
|
|
73
|
+
"`request-create`, `request-delete` and `request-list` for requests to make an item "
|
|
74
|
+
"organization-wide. Without `--scope`, `model create` keeps the model in its project, "
|
|
75
|
+
"and `add <kind>` uses the scope of its model. Making an item organization-wide needs "
|
|
76
|
+
"the organization-admin role and cannot be reverted, so `--deny-destructive` blocks it. "
|
|
77
|
+
"`kbagent serve` has the same functions under `/semantic-layer/scope`.",
|
|
78
|
+
"Fix (#715): `semantic-layer edit`, `import --overwrite` and `promote` now update an item "
|
|
79
|
+
"in place, so it keeps its ID, its visibility and its history. Before, they deleted the "
|
|
80
|
+
"item and created it again with a new ID. A failed update changes nothing, so the "
|
|
81
|
+
"`rollback` field in the result is now always `null`.",
|
|
82
|
+
],
|
|
29
83
|
"0.96.2": [
|
|
30
84
|
"Fix (#825): the `data-app` commands now label the app link `Open the app:` and the "
|
|
31
85
|
"Keboola UI link `Configuration:`, so it is clear which link opens what. Before, the "
|
|
@@ -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
|
)
|