roar-cli 0.3.4__tar.gz → 0.3.5__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.
- {roar_cli-0.3.4 → roar_cli-0.3.5}/PKG-INFO +43 -77
- {roar_cli-0.3.4 → roar_cli-0.3.5}/README.md +42 -76
- {roar_cli-0.3.4 → roar_cli-0.3.5}/pyproject.toml +1 -1
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/get/transfer.py +33 -4
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/dag.py +16 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/execution.py +6 -0
- roar_cli-0.3.5/roar/cli/commands/auth.py +329 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/dag.py +14 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/__init__.py +2 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/exceptions.py +18 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/runtime_collector.py +21 -2
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/coordinator.py +11 -1
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/inject/tracker.py +9 -1
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/tracer.py +13 -1
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/tracer_backends.py +11 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/run_report.py +33 -34
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/config.py +12 -2
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/Cargo.lock +12 -14
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/artifact-hash-py/Cargo.toml +1 -1
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/artifact-hash-py/src/lib.rs +3 -3
- roar_cli-0.3.4/roar/cli/commands/auth.py +0 -271
- {roar_cli-0.3.4 → roar_cli-0.3.5}/LICENSE +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/__main__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/analyzers/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/analyzers/base.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/analyzers/experiment_trackers.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/composite/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/composite/canonical.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/composite/detect.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/composite/qualifying.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/get/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/get/requests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/get/results.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/get/service.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/git.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/label_rendering.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/labels.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/lookup/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/lookup/models.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/lookup/policy.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/lookup/refs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/lookup/remote_artifacts.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/lookup/runner.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/anchor_attribution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/blake3_upgrade.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/collection.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/composite_builder.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/composites.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/datasets.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/form_composites.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/git_remote.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/job_links.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/job_preparation.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/lineage_composite_formation.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/lineage_composites.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/metadata.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/put_composites.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/put_execution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/put_preparation.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/register_execution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/register_preparation.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/register_preview_jobs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/register_tag_push.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/registration.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/registration_package.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/remote_job_uids.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/remote_registry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/requests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/results.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/runtime.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/secrets.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/service.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/session.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/source_resolution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/targets.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/publish/view_edges.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/db_status.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/diff.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/diff_engine.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/diff_graph.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/diff_refs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/git_readiness.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/inputs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/label.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/log.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/requests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/results.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/show.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/query/status.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/reproduce/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/reproduce/environment.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/reproduce/lookup.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/reproduce/requests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/reproduce/results.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/reproduce/service.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/dag_references.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/dirty_tree_classify.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/dirty_tree_error.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/gitignore_suggest.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/output_followup.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/requests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/service.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/run/verbosity.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/system_labels.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/workflow/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/workflow/requests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/workflow/results.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/application/workflow/service.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/auth_store.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/local/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/local/plugin.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/config.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/export.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/host_execution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/plugin.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/runtime_bundle.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/submit.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/osmo/workflow.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/_agent_names.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/collector.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/config.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/constants.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/env_contract.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/fragment.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/fragment_reconstituter.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/node_agent.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/plugin.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/proxy_fragments.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/roar_worker.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/runtime_hooks.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/s3_key_paths.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/submit.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/backends/ray/submit_context.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/_format.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/command_registry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/build.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/config.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/db.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/diff.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/env.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/export_registration_package.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/filter.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/get.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/init.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/init_agents.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/inputs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/label.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/log.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/login.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/logout.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/osmo.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/pop.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/projects.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/proxy.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/put.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/register.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/reproduce.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/reset.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/run.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/scope.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/show.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/status.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/telemetry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/tracer.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/tui.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/whoami.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/commands/workflow.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/context.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/decorators.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/publish_intent.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/templates/agents/SKILL.md.tmpl +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/cli/templates/agents/agents_section.md.tmpl +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/bootstrap.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/canonical_session.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/digests.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/dto/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/dto/registration.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/config.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/logger.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/presenter.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/provenance.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/registration.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/repositories.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/reproduction.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/run.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/services.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/telemetry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/interfaces/vcs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/label_constants.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/label_origins.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/logging.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/artifact.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/base.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/dag.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/dataset_identifier.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/glaas.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/job.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/provenance.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/run.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/session.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/telemetry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/models/vcs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/operation_metadata.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/session_hash.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/step_name.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/tracer_modes.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/core/validation.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/context.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/engine.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/hashing/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/hashing/backend.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/hashing/blake3.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/models.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/query_context.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/artifact.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/collection.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/composite.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/hash_cache.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/job.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/label.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/repositories/session.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/schema.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/services/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/services/hashing.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/services/job_recording.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/services/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/services/session.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/db/step_priority.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/cluster/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/cluster/bridge.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/cluster/proxy.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/cluster/proxy_config.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/fragments/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/fragments/lineage.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/fragments/models.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/fragments/reconstitution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/fragments/sessions.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/fragments/transport.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/framework/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/framework/contract.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/framework/planning.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/framework/registry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/framework/runtime_imports.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/assembler.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/build_pip_collector.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/build_tool_collector.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/data_loader.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/file_filter.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/package_collector.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/process_summarizer.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/provenance/service.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/recording/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/recording/dataset_identifier.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/recording/dataset_metadata.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/recording/dataset_profile.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/recording/job_recording.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/reproduction/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/reproduction/environment_setup.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/reproduction/installers.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/reproduction/pipeline_executor.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/reproduction/pipeline_metadata.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/abi_probe.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/backup.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/driver_entrypoint.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/errors.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/host_execution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/inject/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/inject/sitecustomize.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/inject/support.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/lazy_install.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/proxy_resource.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/resources.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/signal_handler.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/tracer_banner.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/execution/runtime/worker_bootstrap.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/filters/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/filters/files.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/filters/omit.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/glaas_auth.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/glaas_client.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/bootstrap.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/config/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/config/access.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/config/loader.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/config/raw.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/config/schema.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/discovery.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/base.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/gcs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/get.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/hf.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/http.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/noop.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/download/s3.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/git/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/git/base.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/git/context.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/git/provider.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/auth.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/client.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/fragment_streamer.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/registration/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/registration/_artifact_ref.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/registration/artifact.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/registration/coordinator.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/registration/job.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/registration/session.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/glaas/transport.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/registry.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/resolution.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/base.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/gcs.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/memory.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/noop.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/publish.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/storage/s3.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/telemetry/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/telemetry/base.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/integrations/telemetry/wandb.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/console.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/dag_data_builder.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/dag_renderer.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/diff_renderer.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/formatting.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/null.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/show_renderer.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/spinner.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/presenters/terminal.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/publish_auth.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/require.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/scope_config.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/_io.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/capabilities.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/hooks.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/install.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/paths.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/payload.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/queue.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/stats.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/telemetry/uploader.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/app.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/data.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/config_editor.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/label_editor.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/launcher.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/log.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/main.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/search.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/screens/session_picker.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/tmux.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/widgets/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/tui/widgets/detail.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/utils/__init__.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/utils/cloud.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/utils/git_url.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/roar/version_check.py +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/artifact-hash-core/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/artifact-hash-core/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/tracer-fd/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/tracer-fd/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/tracer-runtime/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/tracer-runtime/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/tracer-schema/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/crates/tracer-schema/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/services/proxy/Cargo.lock +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/services/proxy/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/services/proxy/src/forward.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/services/proxy/src/main.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/services/proxy/src/s3.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/common/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/common/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/probe/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/probe/rust-toolchain.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/probe/src/main.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/build.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/attach.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/bin/roard.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/client.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/daemon.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/events.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/ipc.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/main.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ebpf/userspace/src/state.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/build.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/src/bin/io_fixture.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/src/interpose.c +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/src/ipc.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/src/lib.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/src/main.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/tests/comprehensive.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/preload/tests/standalone.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ptrace/Cargo.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ptrace/rustfmt.toml +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ptrace/src/arch.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ptrace/src/main.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/rust/tracers/ptrace/src/seccomp.rs +0 -0
- {roar_cli-0.3.4 → roar_cli-0.3.5}/scripts/sync_packaged_rust_artifacts.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roar-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -51,6 +51,14 @@ Project-URL: Repository, https://github.com/treqs/roar
|
|
|
51
51
|
|
|
52
52
|
**Run Observation & Artifact Registration**
|
|
53
53
|
|
|
54
|
+
## Quickstart
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
uv tool install roar-cli # installs the `roar` command (Python 3.10+)
|
|
58
|
+
roar init # set up roar in your project
|
|
59
|
+
roar run <command> # track a run — then `roar dag` to see it
|
|
60
|
+
```
|
|
61
|
+
|
|
54
62
|
`roar` tracks data artifacts and execution steps in ML pipelines, enabling reproducibility and lineage queries. `roar` tracking happens automagically by observing your commands as they run, capturing essential context without requiring you to define a pipeline explicitly.
|
|
55
63
|
|
|
56
64
|
By identifying files based on their actual content rather than their names, it ensures you can always trace a result back to the exact inputs and code that produced it. This gives you reliable reproducibility and a clear history of your artifacts, all derived naturally from your workflow.
|
|
@@ -60,12 +68,16 @@ While `roar` captures your work locally, connecting it to a GLaaS (Global Lineag
|
|
|
60
68
|
## Installation
|
|
61
69
|
|
|
62
70
|
```bash
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
# Recommended: install the `roar` command in an isolated tool environment
|
|
72
|
+
uv tool install roar-cli
|
|
73
|
+
# or: pipx install roar-cli
|
|
74
|
+
|
|
75
|
+
# Into an existing environment (e.g. to use roar alongside Ray in the same venv)
|
|
65
76
|
uv pip install roar-cli
|
|
77
|
+
# or: pip install roar-cli
|
|
66
78
|
```
|
|
67
79
|
|
|
68
|
-
Requires Python 3.10+.
|
|
80
|
+
Requires Python 3.10+. (A single stable-ABI wheel covers every Python 3.10+.)
|
|
69
81
|
|
|
70
82
|
> For the full prereqs, platform support matrix, tracer-backend setup,
|
|
71
83
|
> macOS SIP notes, and sdist build steps, see the canonical
|
|
@@ -83,44 +95,17 @@ Requires Python 3.10+.
|
|
|
83
95
|
|
|
84
96
|
PyPI wheels are published for Linux (`x86_64`, `aarch64`) and macOS (`x86_64`, `arm64`).
|
|
85
97
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
On platforms without a published wheel (e.g. musl/Alpine, Windows, or glibc
|
|
99
|
+
older than the manylinux baseline), `pip install` falls through to the
|
|
100
|
+
source distribution, which ships the Rust tracer source but no pre-built
|
|
101
|
+
binaries — so it needs a C toolchain (`gcc` / `clang`), Rust (`rustup`),
|
|
102
|
+
and a few minutes to compile the tracers on first install.
|
|
90
103
|
|
|
91
104
|
### Development Installation
|
|
92
105
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
cd roar
|
|
97
|
-
|
|
98
|
-
# One-shot dev install: Python package + Rust tracer binaries
|
|
99
|
-
bash scripts/install-dev.sh
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
`scripts/install-dev.sh` runs `pip install -e ".[dev]"` (preferring `uv`
|
|
103
|
-
when available) and then builds the Rust tracer binaries
|
|
104
|
-
(`roar-tracer`, `roar-tracer-preload`, `roar-tracer-ebpf`, `roard`,
|
|
105
|
-
`roar-proxy`) and stages them into `roar/bin/`. A bare
|
|
106
|
-
`pip install -e .` does _not_ build the tracer binaries because they
|
|
107
|
-
live in separate cargo crates outside the maturin manifest, so
|
|
108
|
-
`roar run` would fail with "No tracer binary found" until the script
|
|
109
|
-
runs. See [Building from source](#building-from-source) below for
|
|
110
|
-
details and the manual flow.
|
|
111
|
-
|
|
112
|
-
## Quick Start
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# Initialize roar in your project
|
|
116
|
-
cd my-ml-project
|
|
117
|
-
roar init
|
|
118
|
-
|
|
119
|
-
# Run commands with provenance tracking
|
|
120
|
-
roar run python preprocess.py --input data.csv --output features.parquet
|
|
121
|
-
roar run python train.py --data features.parquet --output model.pt
|
|
122
|
-
roar run python evaluate.py --model model.pt --output metrics.json
|
|
123
|
-
```
|
|
106
|
+
Installing from source (editable Python package + Rust tracer binaries) is
|
|
107
|
+
covered under [Development → Building from source](#building-from-source).
|
|
108
|
+
The fast path is `bash scripts/install-dev.sh`.
|
|
124
109
|
|
|
125
110
|
## Product Telemetry
|
|
126
111
|
|
|
@@ -162,8 +147,8 @@ roar config set telemetry.enabled false
|
|
|
162
147
|
Environment opt-outs always win over saved config:
|
|
163
148
|
|
|
164
149
|
```bash
|
|
165
|
-
DO_NOT_TRACK=1 roar run
|
|
166
|
-
ROAR_NO_TELEMETRY=1 roar run
|
|
150
|
+
DO_NOT_TRACK=1 roar run python3 train.py
|
|
151
|
+
ROAR_NO_TELEMETRY=1 roar run python3 train.py
|
|
167
152
|
```
|
|
168
153
|
|
|
169
154
|
Telemetry is also suppressed automatically in CI, pytest, and Roar-managed
|
|
@@ -258,7 +243,7 @@ Run a command with provenance tracking. Roar captures:
|
|
|
258
243
|
- Command arguments
|
|
259
244
|
|
|
260
245
|
```bash
|
|
261
|
-
roar run
|
|
246
|
+
roar run python3 train.py --epochs 10 --lr 0.001
|
|
262
247
|
roar run ./scripts/preprocess.sh
|
|
263
248
|
roar run torchrun --nproc_per_node=4 train.py
|
|
264
249
|
|
|
@@ -611,9 +596,9 @@ Named groups of artifacts, used for downloaded datasets or upload bundles.
|
|
|
611
596
|
|
|
612
597
|
```bash
|
|
613
598
|
# Record your pipeline
|
|
614
|
-
roar run
|
|
615
|
-
roar run
|
|
616
|
-
roar run
|
|
599
|
+
roar run python3 preprocess.py
|
|
600
|
+
roar run python3 train.py --epochs 10
|
|
601
|
+
roar run python3 evaluate.py
|
|
617
602
|
|
|
618
603
|
# Later, reproduce an artifact
|
|
619
604
|
roar reproduce <model-hash> --run
|
|
@@ -639,40 +624,21 @@ Add `.roar/` to your `.gitignore` (roar offers to do this during `roar init`).
|
|
|
639
624
|
|
|
640
625
|
## GLaaS Server
|
|
641
626
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
```bash
|
|
647
|
-
# Install with server dependencies
|
|
648
|
-
uv pip install -e ".[server]"
|
|
649
|
-
# or without uv
|
|
650
|
-
pip install -e ".[server]"
|
|
651
|
-
|
|
652
|
-
# Run the server
|
|
653
|
-
glaas-server
|
|
654
|
-
|
|
655
|
-
# Or with custom host/port
|
|
656
|
-
GLAAS_HOST=0.0.0.0 GLAAS_PORT=8080 glaas-server
|
|
657
|
-
```
|
|
658
|
-
|
|
659
|
-
The server provides:
|
|
660
|
-
|
|
661
|
-
- REST API for artifact and job registration
|
|
662
|
-
- Web UI at `/` with artifact and job browsers
|
|
663
|
-
- Search and filtering by command, GPU, file type, etc.
|
|
664
|
-
|
|
665
|
-
### Client Configuration
|
|
627
|
+
GLaaS (Global Lineage-as-a-Service) is the shared registry roar publishes to
|
|
628
|
+
with `roar register` and `roar put`. It's hosted at
|
|
629
|
+
[glaas.ai](https://glaas.ai) (default API endpoint `https://api.glaas.ai`),
|
|
630
|
+
so there's nothing to run yourself — sign in and publish.
|
|
666
631
|
|
|
667
632
|
```bash
|
|
668
|
-
#
|
|
669
|
-
roar
|
|
633
|
+
# Sign in (browser/device flow) for attributed, private, or project publishing
|
|
634
|
+
roar login
|
|
670
635
|
|
|
671
|
-
#
|
|
672
|
-
roar auth register
|
|
636
|
+
# Or register an SSH key for programmatic auth
|
|
637
|
+
roar auth register # show your public key to paste at glaas.ai
|
|
638
|
+
roar auth test # verify the connection
|
|
673
639
|
|
|
674
|
-
#
|
|
675
|
-
roar
|
|
640
|
+
# Point roar at a different GLaaS deployment if needed
|
|
641
|
+
roar config set glaas.url https://api.glaas.ai
|
|
676
642
|
```
|
|
677
643
|
|
|
678
644
|
> [!TIP]
|
|
@@ -751,13 +717,13 @@ Verify the install with `roar tracer`; every backend listed should be
|
|
|
751
717
|
ruff check .
|
|
752
718
|
|
|
753
719
|
# Format check
|
|
754
|
-
ruff format --check
|
|
720
|
+
ruff format --check .
|
|
755
721
|
|
|
756
722
|
# Type checking
|
|
757
723
|
mypy roar
|
|
758
724
|
|
|
759
725
|
# Run all checks at once
|
|
760
|
-
ruff check . && ruff format --check && mypy roar
|
|
726
|
+
ruff check . && ruff format --check . && mypy roar
|
|
761
727
|
```
|
|
762
728
|
|
|
763
729
|
### Running Tests
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
**Run Observation & Artifact Registration**
|
|
4
4
|
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv tool install roar-cli # installs the `roar` command (Python 3.10+)
|
|
9
|
+
roar init # set up roar in your project
|
|
10
|
+
roar run <command> # track a run — then `roar dag` to see it
|
|
11
|
+
```
|
|
12
|
+
|
|
5
13
|
`roar` tracks data artifacts and execution steps in ML pipelines, enabling reproducibility and lineage queries. `roar` tracking happens automagically by observing your commands as they run, capturing essential context without requiring you to define a pipeline explicitly.
|
|
6
14
|
|
|
7
15
|
By identifying files based on their actual content rather than their names, it ensures you can always trace a result back to the exact inputs and code that produced it. This gives you reliable reproducibility and a clear history of your artifacts, all derived naturally from your workflow.
|
|
@@ -11,12 +19,16 @@ While `roar` captures your work locally, connecting it to a GLaaS (Global Lineag
|
|
|
11
19
|
## Installation
|
|
12
20
|
|
|
13
21
|
```bash
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
# Recommended: install the `roar` command in an isolated tool environment
|
|
23
|
+
uv tool install roar-cli
|
|
24
|
+
# or: pipx install roar-cli
|
|
25
|
+
|
|
26
|
+
# Into an existing environment (e.g. to use roar alongside Ray in the same venv)
|
|
16
27
|
uv pip install roar-cli
|
|
28
|
+
# or: pip install roar-cli
|
|
17
29
|
```
|
|
18
30
|
|
|
19
|
-
Requires Python 3.10+.
|
|
31
|
+
Requires Python 3.10+. (A single stable-ABI wheel covers every Python 3.10+.)
|
|
20
32
|
|
|
21
33
|
> For the full prereqs, platform support matrix, tracer-backend setup,
|
|
22
34
|
> macOS SIP notes, and sdist build steps, see the canonical
|
|
@@ -34,44 +46,17 @@ Requires Python 3.10+.
|
|
|
34
46
|
|
|
35
47
|
PyPI wheels are published for Linux (`x86_64`, `aarch64`) and macOS (`x86_64`, `arm64`).
|
|
36
48
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
On platforms without a published wheel (e.g. musl/Alpine, Windows, or glibc
|
|
50
|
+
older than the manylinux baseline), `pip install` falls through to the
|
|
51
|
+
source distribution, which ships the Rust tracer source but no pre-built
|
|
52
|
+
binaries — so it needs a C toolchain (`gcc` / `clang`), Rust (`rustup`),
|
|
53
|
+
and a few minutes to compile the tracers on first install.
|
|
41
54
|
|
|
42
55
|
### Development Installation
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
cd roar
|
|
48
|
-
|
|
49
|
-
# One-shot dev install: Python package + Rust tracer binaries
|
|
50
|
-
bash scripts/install-dev.sh
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
`scripts/install-dev.sh` runs `pip install -e ".[dev]"` (preferring `uv`
|
|
54
|
-
when available) and then builds the Rust tracer binaries
|
|
55
|
-
(`roar-tracer`, `roar-tracer-preload`, `roar-tracer-ebpf`, `roard`,
|
|
56
|
-
`roar-proxy`) and stages them into `roar/bin/`. A bare
|
|
57
|
-
`pip install -e .` does _not_ build the tracer binaries because they
|
|
58
|
-
live in separate cargo crates outside the maturin manifest, so
|
|
59
|
-
`roar run` would fail with "No tracer binary found" until the script
|
|
60
|
-
runs. See [Building from source](#building-from-source) below for
|
|
61
|
-
details and the manual flow.
|
|
62
|
-
|
|
63
|
-
## Quick Start
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
# Initialize roar in your project
|
|
67
|
-
cd my-ml-project
|
|
68
|
-
roar init
|
|
69
|
-
|
|
70
|
-
# Run commands with provenance tracking
|
|
71
|
-
roar run python preprocess.py --input data.csv --output features.parquet
|
|
72
|
-
roar run python train.py --data features.parquet --output model.pt
|
|
73
|
-
roar run python evaluate.py --model model.pt --output metrics.json
|
|
74
|
-
```
|
|
57
|
+
Installing from source (editable Python package + Rust tracer binaries) is
|
|
58
|
+
covered under [Development → Building from source](#building-from-source).
|
|
59
|
+
The fast path is `bash scripts/install-dev.sh`.
|
|
75
60
|
|
|
76
61
|
## Product Telemetry
|
|
77
62
|
|
|
@@ -113,8 +98,8 @@ roar config set telemetry.enabled false
|
|
|
113
98
|
Environment opt-outs always win over saved config:
|
|
114
99
|
|
|
115
100
|
```bash
|
|
116
|
-
DO_NOT_TRACK=1 roar run
|
|
117
|
-
ROAR_NO_TELEMETRY=1 roar run
|
|
101
|
+
DO_NOT_TRACK=1 roar run python3 train.py
|
|
102
|
+
ROAR_NO_TELEMETRY=1 roar run python3 train.py
|
|
118
103
|
```
|
|
119
104
|
|
|
120
105
|
Telemetry is also suppressed automatically in CI, pytest, and Roar-managed
|
|
@@ -209,7 +194,7 @@ Run a command with provenance tracking. Roar captures:
|
|
|
209
194
|
- Command arguments
|
|
210
195
|
|
|
211
196
|
```bash
|
|
212
|
-
roar run
|
|
197
|
+
roar run python3 train.py --epochs 10 --lr 0.001
|
|
213
198
|
roar run ./scripts/preprocess.sh
|
|
214
199
|
roar run torchrun --nproc_per_node=4 train.py
|
|
215
200
|
|
|
@@ -562,9 +547,9 @@ Named groups of artifacts, used for downloaded datasets or upload bundles.
|
|
|
562
547
|
|
|
563
548
|
```bash
|
|
564
549
|
# Record your pipeline
|
|
565
|
-
roar run
|
|
566
|
-
roar run
|
|
567
|
-
roar run
|
|
550
|
+
roar run python3 preprocess.py
|
|
551
|
+
roar run python3 train.py --epochs 10
|
|
552
|
+
roar run python3 evaluate.py
|
|
568
553
|
|
|
569
554
|
# Later, reproduce an artifact
|
|
570
555
|
roar reproduce <model-hash> --run
|
|
@@ -590,40 +575,21 @@ Add `.roar/` to your `.gitignore` (roar offers to do this during `roar init`).
|
|
|
590
575
|
|
|
591
576
|
## GLaaS Server
|
|
592
577
|
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
```bash
|
|
598
|
-
# Install with server dependencies
|
|
599
|
-
uv pip install -e ".[server]"
|
|
600
|
-
# or without uv
|
|
601
|
-
pip install -e ".[server]"
|
|
602
|
-
|
|
603
|
-
# Run the server
|
|
604
|
-
glaas-server
|
|
605
|
-
|
|
606
|
-
# Or with custom host/port
|
|
607
|
-
GLAAS_HOST=0.0.0.0 GLAAS_PORT=8080 glaas-server
|
|
608
|
-
```
|
|
609
|
-
|
|
610
|
-
The server provides:
|
|
611
|
-
|
|
612
|
-
- REST API for artifact and job registration
|
|
613
|
-
- Web UI at `/` with artifact and job browsers
|
|
614
|
-
- Search and filtering by command, GPU, file type, etc.
|
|
615
|
-
|
|
616
|
-
### Client Configuration
|
|
578
|
+
GLaaS (Global Lineage-as-a-Service) is the shared registry roar publishes to
|
|
579
|
+
with `roar register` and `roar put`. It's hosted at
|
|
580
|
+
[glaas.ai](https://glaas.ai) (default API endpoint `https://api.glaas.ai`),
|
|
581
|
+
so there's nothing to run yourself — sign in and publish.
|
|
617
582
|
|
|
618
583
|
```bash
|
|
619
|
-
#
|
|
620
|
-
roar
|
|
584
|
+
# Sign in (browser/device flow) for attributed, private, or project publishing
|
|
585
|
+
roar login
|
|
621
586
|
|
|
622
|
-
#
|
|
623
|
-
roar auth register
|
|
587
|
+
# Or register an SSH key for programmatic auth
|
|
588
|
+
roar auth register # show your public key to paste at glaas.ai
|
|
589
|
+
roar auth test # verify the connection
|
|
624
590
|
|
|
625
|
-
#
|
|
626
|
-
roar
|
|
591
|
+
# Point roar at a different GLaaS deployment if needed
|
|
592
|
+
roar config set glaas.url https://api.glaas.ai
|
|
627
593
|
```
|
|
628
594
|
|
|
629
595
|
> [!TIP]
|
|
@@ -702,13 +668,13 @@ Verify the install with `roar tracer`; every backend listed should be
|
|
|
702
668
|
ruff check .
|
|
703
669
|
|
|
704
670
|
# Format check
|
|
705
|
-
ruff format --check
|
|
671
|
+
ruff format --check .
|
|
706
672
|
|
|
707
673
|
# Type checking
|
|
708
674
|
mypy roar
|
|
709
675
|
|
|
710
676
|
# Run all checks at once
|
|
711
|
-
ruff check . && ruff format --check && mypy roar
|
|
677
|
+
ruff check . && ruff format --check . && mypy roar
|
|
712
678
|
```
|
|
713
679
|
|
|
714
680
|
### Running Tests
|
|
@@ -11,6 +11,8 @@ or roar register.
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
+
import threading
|
|
15
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
14
16
|
from dataclasses import dataclass, field
|
|
15
17
|
from pathlib import Path
|
|
16
18
|
|
|
@@ -20,6 +22,8 @@ from ...integrations.download.base import DownloadBackend, Source
|
|
|
20
22
|
from ...presenters.spinner import Spinner
|
|
21
23
|
from .results import GetDownloadedFile, GetDryRunItem
|
|
22
24
|
|
|
25
|
+
_DEFAULT_DOWNLOAD_WORKERS = 8
|
|
26
|
+
|
|
23
27
|
|
|
24
28
|
def _download_progress_message(done: int, total: int, downloaded_bytes: int) -> str:
|
|
25
29
|
"""Status line for the download spinner, e.g. ``Downloading 47/100 · 4.31 GB``."""
|
|
@@ -288,11 +292,36 @@ class GetService:
|
|
|
288
292
|
# Downloads are the long pole of a get (multi-GB datasets); show a live
|
|
289
293
|
# N/M + cumulative-bytes counter so the terminal isn't dead for minutes.
|
|
290
294
|
downloaded_bytes = 0
|
|
295
|
+
workers = min(_DEFAULT_DOWNLOAD_WORKERS, total)
|
|
291
296
|
with Spinner(_download_progress_message(0, total, 0)) as spin:
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
297
|
+
if workers <= 1:
|
|
298
|
+
for index, pending in enumerate(pending_downloads, start=1):
|
|
299
|
+
self._download_to_tmp(pending)
|
|
300
|
+
downloaded_bytes += pending.tmp_path.stat().st_size
|
|
301
|
+
spin.update(_download_progress_message(index, total, downloaded_bytes))
|
|
302
|
+
else:
|
|
303
|
+
lock = threading.Lock()
|
|
304
|
+
done = 0
|
|
305
|
+
errors: list[BaseException] = []
|
|
306
|
+
with ThreadPoolExecutor(max_workers=workers) as executor:
|
|
307
|
+
futures = {
|
|
308
|
+
executor.submit(self._download_to_tmp, pending): pending
|
|
309
|
+
for pending in pending_downloads
|
|
310
|
+
}
|
|
311
|
+
for future in as_completed(futures):
|
|
312
|
+
exc = future.exception()
|
|
313
|
+
if exc is not None:
|
|
314
|
+
errors.append(exc)
|
|
315
|
+
else:
|
|
316
|
+
pending = futures[future]
|
|
317
|
+
with lock:
|
|
318
|
+
done += 1
|
|
319
|
+
downloaded_bytes += pending.tmp_path.stat().st_size
|
|
320
|
+
spin.update(
|
|
321
|
+
_download_progress_message(done, total, downloaded_bytes)
|
|
322
|
+
)
|
|
323
|
+
if errors:
|
|
324
|
+
raise errors[0]
|
|
296
325
|
|
|
297
326
|
with Spinner(f"Hashing {total} file(s)..."):
|
|
298
327
|
hashes_by_tmp_path = self._hash_files_batch(
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
|
+
from pathlib import Path
|
|
6
7
|
|
|
7
8
|
from ...core.models.dag import DagVisualization
|
|
8
9
|
from ...db.context import create_database_context
|
|
@@ -91,6 +92,21 @@ def build_dag_visualization(request: DagQueryRequest) -> DagVisualization:
|
|
|
91
92
|
)
|
|
92
93
|
|
|
93
94
|
|
|
95
|
+
def session_has_unsynced(roar_dir: Path, session_ref: str | None = None) -> bool:
|
|
96
|
+
"""True if the resolved session has any job not yet pushed to GLaaS.
|
|
97
|
+
|
|
98
|
+
A job's ``synced_at`` is ``NULL`` until it is registered, so this gates
|
|
99
|
+
the ``roar dag`` "save lineage" nudge: once everything is registered the
|
|
100
|
+
hint stops showing. Returns ``False`` when there's no session to inspect.
|
|
101
|
+
"""
|
|
102
|
+
with create_database_context(roar_dir) as db_ctx:
|
|
103
|
+
session = _resolve_session(db_ctx, session_ref)
|
|
104
|
+
if not session:
|
|
105
|
+
return False
|
|
106
|
+
jobs = db_ctx.jobs.get_by_session(int(session["id"]), limit=10000)
|
|
107
|
+
return any(job.get("synced_at") is None for job in jobs)
|
|
108
|
+
|
|
109
|
+
|
|
94
110
|
def render_dag(request: DagQueryRequest) -> str:
|
|
95
111
|
"""Render the current session DAG."""
|
|
96
112
|
from ...presenters.dag_renderer import DagRenderer
|
|
@@ -10,6 +10,7 @@ from typing import Any, Literal, cast
|
|
|
10
10
|
|
|
11
11
|
import click
|
|
12
12
|
|
|
13
|
+
from ...core.exceptions import CommandNotFoundError
|
|
13
14
|
from ...core.models.run import RunContext
|
|
14
15
|
from ...execution.framework.registry import get_execution_backend
|
|
15
16
|
from ...execution.runtime.errors import ExecutionSetupError
|
|
@@ -194,6 +195,11 @@ def execute_and_report(
|
|
|
194
195
|
backend = get_execution_backend(backend_name)
|
|
195
196
|
try:
|
|
196
197
|
result = backend.host_execution.execute(run_ctx)
|
|
198
|
+
except CommandNotFoundError as exc:
|
|
199
|
+
# Nothing ran: report it like a shell would (clean line, exit 127),
|
|
200
|
+
# with no lineage job, done line, or register hints.
|
|
201
|
+
ConsolePresenter().print_error(exc.message)
|
|
202
|
+
return ExecutionReport(exit_code=exc.exit_code, setup_error=True)
|
|
197
203
|
except ExecutionSetupError as exc:
|
|
198
204
|
click.echo(str(exc), err=True)
|
|
199
205
|
return ExecutionReport(exit_code=1, setup_error=True)
|