roar-cli 0.2.11__tar.gz → 0.3.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.
- {roar_cli-0.2.11 → roar_cli-0.3.0}/PKG-INFO +176 -14
- {roar_cli-0.2.11 → roar_cli-0.3.0}/README.md +174 -13
- {roar_cli-0.2.11 → roar_cli-0.3.0}/pyproject.toml +18 -2
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/__main__.py +1 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/git.py +12 -3
- roar_cli-0.3.0/roar/application/labels.py +861 -0
- roar_cli-0.3.0/roar/application/lookup/__init__.py +21 -0
- roar_cli-0.3.0/roar/application/lookup/models.py +52 -0
- roar_cli-0.3.0/roar/application/lookup/policy.py +35 -0
- roar_cli-0.3.0/roar/application/lookup/refs.py +38 -0
- roar_cli-0.3.0/roar/application/lookup/remote_artifacts.py +40 -0
- roar_cli-0.3.0/roar/application/lookup/runner.py +32 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/collection.py +48 -9
- roar_cli-0.3.0/roar/application/publish/git_remote.py +124 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/put_composites.py +11 -4
- roar_cli-0.3.0/roar/application/publish/put_execution.py +1048 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/put_preparation.py +12 -1
- roar_cli-0.3.0/roar/application/publish/register_execution.py +545 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/register_preparation.py +30 -1
- roar_cli-0.3.0/roar/application/publish/register_tag_push.py +157 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/registration.py +26 -9
- roar_cli-0.3.0/roar/application/publish/registration_package.py +511 -0
- roar_cli-0.3.0/roar/application/publish/remote_job_uids.py +50 -0
- roar_cli-0.3.0/roar/application/publish/remote_registry.py +85 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/requests.py +4 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/results.py +17 -0
- roar_cli-0.3.0/roar/application/publish/runtime.py +77 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/service.py +209 -88
- roar_cli-0.3.0/roar/application/publish/session.py +429 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/__init__.py +6 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/dag.py +27 -7
- roar_cli-0.3.0/roar/application/query/diff.py +69 -0
- roar_cli-0.3.0/roar/application/query/diff_engine.py +535 -0
- roar_cli-0.3.0/roar/application/query/diff_graph.py +427 -0
- roar_cli-0.3.0/roar/application/query/diff_refs.py +159 -0
- roar_cli-0.3.0/roar/application/query/git_readiness.py +216 -0
- roar_cli-0.3.0/roar/application/query/label.py +368 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/requests.py +36 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/results.py +90 -2
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/show.py +178 -40
- roar_cli-0.3.0/roar/application/query/status.py +194 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/environment.py +1 -1
- roar_cli-0.3.0/roar/application/reproduce/lookup.py +287 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/requests.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/results.py +3 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/service.py +63 -15
- roar_cli-0.3.0/roar/application/run/dirty_tree_error.py +163 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/execution.py +70 -40
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/requests.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/service.py +121 -33
- roar_cli-0.3.0/roar/application/run/verbosity.py +112 -0
- roar_cli-0.3.0/roar/application/system_labels.py +612 -0
- roar_cli-0.3.0/roar/application/workflow/__init__.py +13 -0
- roar_cli-0.3.0/roar/application/workflow/requests.py +18 -0
- roar_cli-0.3.0/roar/application/workflow/results.py +27 -0
- roar_cli-0.3.0/roar/application/workflow/service.py +359 -0
- roar_cli-0.3.0/roar/auth_store.py +148 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/host_execution.py +7 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/workflow.py +1 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/env_contract.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/fragment_reconstituter.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/runtime_hooks.py +4 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/submit_context.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/__init__.py +37 -40
- roar_cli-0.3.0/roar/cli/_format.py +70 -0
- roar_cli-0.3.0/roar/cli/command_registry.py +271 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/__init__.py +1 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/config.py +13 -2
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/dag.py +28 -0
- roar_cli-0.3.0/roar/cli/commands/diff.py +77 -0
- roar_cli-0.3.0/roar/cli/commands/export_registration_package.py +80 -0
- roar_cli-0.3.0/roar/cli/commands/init.py +407 -0
- roar_cli-0.3.0/roar/cli/commands/init_agents.py +292 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/label.py +61 -1
- roar_cli-0.3.0/roar/cli/commands/login.py +219 -0
- roar_cli-0.3.0/roar/cli/commands/logout.py +24 -0
- roar_cli-0.3.0/roar/cli/commands/projects.py +195 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/put.py +62 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/register.py +121 -5
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/reproduce.py +22 -9
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/reset.py +14 -5
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/run.py +37 -2
- roar_cli-0.3.0/roar/cli/commands/scope.py +375 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/show.py +29 -3
- roar_cli-0.3.0/roar/cli/commands/status.py +37 -0
- roar_cli-0.3.0/roar/cli/commands/telemetry.py +86 -0
- roar_cli-0.3.0/roar/cli/commands/tracer.py +661 -0
- roar_cli-0.3.0/roar/cli/commands/tui.py +22 -0
- roar_cli-0.3.0/roar/cli/commands/whoami.py +95 -0
- roar_cli-0.3.0/roar/cli/commands/workflow.py +94 -0
- roar_cli-0.3.0/roar/cli/publish_intent.py +65 -0
- roar_cli-0.3.0/roar/cli/templates/agents/SKILL.md.tmpl +103 -0
- roar_cli-0.3.0/roar/cli/templates/agents/agents_section.md.tmpl +11 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/__init__.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/bootstrap.py +2 -20
- roar_cli-0.3.0/roar/core/canonical_session.py +98 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/exceptions.py +25 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/provenance.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/registration.py +24 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/repositories.py +5 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/reproduction.py +3 -1
- roar_cli-0.3.0/roar/core/label_constants.py +15 -0
- roar_cli-0.3.0/roar/core/label_origins.py +72 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/provenance.py +32 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/run.py +41 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/session_hash.py +5 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/models.py +1 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/query_context.py +52 -5
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/label.py +3 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/session.py +8 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/schema.py +9 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/job_recording.py +24 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/lineage.py +36 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/assembler.py +2 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/file_filter.py +67 -29
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/service.py +12 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/dataset_metadata.py +7 -11
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/job_recording.py +19 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/__init__.py +9 -7
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/coordinator.py +213 -80
- roar_cli-0.3.0/roar/execution/runtime/errors.py +5 -0
- roar_cli-0.3.0/roar/execution/runtime/host_execution.py +26 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/sitecustomize.py +18 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/tracker.py +22 -0
- roar_cli-0.3.0/roar/execution/runtime/proxy_resource.py +81 -0
- roar_cli-0.3.0/roar/execution/runtime/resources.py +133 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/tracer.py +183 -32
- roar_cli-0.3.0/roar/execution/runtime/tracer_backends.py +905 -0
- roar_cli-0.3.0/roar/execution/runtime/tracer_banner.py +45 -0
- roar_cli-0.3.0/roar/glaas_auth.py +456 -0
- roar_cli-0.3.0/roar/glaas_client.py +162 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/__init__.py +3 -0
- roar_cli-0.3.0/roar/integrations/bootstrap.py +27 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/__init__.py +3 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/access.py +376 -27
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/loader.py +3 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/raw.py +37 -3
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/schema.py +61 -1
- roar_cli-0.3.0/roar/integrations/discovery.py +107 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/provider.py +11 -1
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/client.py +312 -12
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/coordinator.py +136 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/job.py +293 -0
- roar_cli-0.3.0/roar/integrations/glaas/registration/session.py +269 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/transport.py +62 -5
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/dag_data_builder.py +5 -1
- roar_cli-0.3.0/roar/presenters/diff_renderer.py +273 -0
- roar_cli-0.3.0/roar/presenters/run_report.py +430 -0
- roar_cli-0.3.0/roar/presenters/show_renderer.py +482 -0
- roar_cli-0.3.0/roar/presenters/spinner.py +104 -0
- roar_cli-0.3.0/roar/presenters/terminal.py +81 -0
- roar_cli-0.3.0/roar/publish_auth.py +220 -0
- roar_cli-0.3.0/roar/require.py +115 -0
- roar_cli-0.3.0/roar/scope_config.py +155 -0
- roar_cli-0.3.0/roar/telemetry/__init__.py +171 -0
- roar_cli-0.3.0/roar/telemetry/_io.py +65 -0
- roar_cli-0.3.0/roar/telemetry/capabilities.py +103 -0
- roar_cli-0.3.0/roar/telemetry/config.py +328 -0
- roar_cli-0.3.0/roar/telemetry/hooks.py +109 -0
- roar_cli-0.3.0/roar/telemetry/install.py +42 -0
- roar_cli-0.3.0/roar/telemetry/paths.py +72 -0
- roar_cli-0.3.0/roar/telemetry/payload.py +144 -0
- roar_cli-0.3.0/roar/telemetry/queue.py +122 -0
- roar_cli-0.3.0/roar/telemetry/stats.py +284 -0
- roar_cli-0.3.0/roar/telemetry/uploader.py +104 -0
- roar_cli-0.3.0/roar/tui/__init__.py +19 -0
- roar_cli-0.3.0/roar/tui/app.py +100 -0
- roar_cli-0.3.0/roar/tui/data.py +252 -0
- roar_cli-0.3.0/roar/tui/screens/__init__.py +0 -0
- roar_cli-0.3.0/roar/tui/screens/config_editor.py +402 -0
- roar_cli-0.3.0/roar/tui/screens/label_editor.py +346 -0
- roar_cli-0.3.0/roar/tui/screens/launcher.py +260 -0
- roar_cli-0.3.0/roar/tui/screens/log.py +122 -0
- roar_cli-0.3.0/roar/tui/screens/main.py +581 -0
- roar_cli-0.3.0/roar/tui/screens/search.py +83 -0
- roar_cli-0.3.0/roar/tui/screens/session_picker.py +126 -0
- roar_cli-0.3.0/roar/tui/tmux.py +127 -0
- roar_cli-0.3.0/roar/tui/widgets/__init__.py +1 -0
- roar_cli-0.3.0/roar/tui/widgets/detail.py +574 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/Cargo.lock +4 -0
- roar_cli-0.3.0/rust/crates/tracer-fd/Cargo.toml +14 -0
- roar_cli-0.3.0/rust/crates/tracer-fd/src/lib.rs +741 -0
- roar_cli-0.3.0/rust/crates/tracer-runtime/Cargo.toml +8 -0
- roar_cli-0.3.0/rust/crates/tracer-runtime/src/lib.rs +121 -0
- roar_cli-0.3.0/rust/crates/tracer-schema/Cargo.toml +11 -0
- roar_cli-0.3.0/rust/crates/tracer-schema/src/lib.rs +146 -0
- roar_cli-0.3.0/rust/services/proxy/Cargo.lock +2521 -0
- roar_cli-0.3.0/rust/services/proxy/Cargo.toml +29 -0
- roar_cli-0.3.0/rust/services/proxy/src/forward.rs +331 -0
- roar_cli-0.3.0/rust/services/proxy/src/main.rs +301 -0
- roar_cli-0.3.0/rust/services/proxy/src/s3.rs +472 -0
- roar_cli-0.3.0/rust/tracers/ebpf/common/Cargo.toml +12 -0
- roar_cli-0.3.0/rust/tracers/ebpf/common/src/lib.rs +121 -0
- roar_cli-0.3.0/rust/tracers/ebpf/probe/Cargo.toml +13 -0
- roar_cli-0.3.0/rust/tracers/ebpf/probe/rust-toolchain.toml +3 -0
- roar_cli-0.3.0/rust/tracers/ebpf/probe/src/main.rs +919 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/Cargo.toml +39 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/build.rs +16 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/attach.rs +132 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/bin/roard.rs +58 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/client.rs +104 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/daemon.rs +706 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/events.rs +686 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/ipc.rs +187 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/lib.rs +6 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/main.rs +505 -0
- roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/state.rs +539 -0
- roar_cli-0.3.0/rust/tracers/preload/Cargo.toml +32 -0
- roar_cli-0.3.0/rust/tracers/preload/build.rs +7 -0
- roar_cli-0.3.0/rust/tracers/preload/src/bin/io_fixture.rs +166 -0
- roar_cli-0.3.0/rust/tracers/preload/src/interpose.c +186 -0
- roar_cli-0.3.0/rust/tracers/preload/src/ipc.rs +20 -0
- roar_cli-0.3.0/rust/tracers/preload/src/lib.rs +1639 -0
- roar_cli-0.3.0/rust/tracers/preload/src/main.rs +814 -0
- roar_cli-0.3.0/rust/tracers/preload/tests/comprehensive.rs +507 -0
- roar_cli-0.3.0/rust/tracers/preload/tests/standalone.rs +200 -0
- roar_cli-0.3.0/rust/tracers/ptrace/Cargo.toml +26 -0
- roar_cli-0.3.0/rust/tracers/ptrace/rustfmt.toml +4 -0
- roar_cli-0.3.0/rust/tracers/ptrace/src/arch.rs +203 -0
- roar_cli-0.3.0/rust/tracers/ptrace/src/main.rs +1014 -0
- roar_cli-0.3.0/rust/tracers/ptrace/src/seccomp.rs +108 -0
- roar_cli-0.3.0/scripts/sync_packaged_rust_artifacts.py +355 -0
- roar_cli-0.2.11/roar/application/labels.py +0 -368
- roar_cli-0.2.11/roar/application/publish/put_execution.py +0 -627
- roar_cli-0.2.11/roar/application/publish/register_execution.py +0 -359
- roar_cli-0.2.11/roar/application/publish/runtime.py +0 -33
- roar_cli-0.2.11/roar/application/publish/session.py +0 -84
- roar_cli-0.2.11/roar/application/query/label.py +0 -115
- roar_cli-0.2.11/roar/application/query/status.py +0 -106
- roar_cli-0.2.11/roar/application/reproduce/lookup.py +0 -144
- roar_cli-0.2.11/roar/bin/libroar_tracer_preload.so +0 -0
- roar_cli-0.2.11/roar/bin/roar-proxy +0 -0
- roar_cli-0.2.11/roar/bin/roar-tracer +0 -0
- roar_cli-0.2.11/roar/bin/roar-tracer-ebpf +0 -0
- roar_cli-0.2.11/roar/bin/roar-tracer-preload +0 -0
- roar_cli-0.2.11/roar/bin/roard +0 -0
- roar_cli-0.2.11/roar/cli/commands/init.py +0 -299
- roar_cli-0.2.11/roar/cli/commands/status.py +0 -21
- roar_cli-0.2.11/roar/cli/commands/tracer.py +0 -304
- roar_cli-0.2.11/roar/execution/runtime/host_execution.py +0 -39
- roar_cli-0.2.11/roar/execution/runtime/tracer_backends.py +0 -371
- roar_cli-0.2.11/roar/integrations/discovery.py +0 -54
- roar_cli-0.2.11/roar/integrations/glaas/registration/session.py +0 -142
- roar_cli-0.2.11/roar/presenters/run_report.py +0 -180
- roar_cli-0.2.11/roar/presenters/show_renderer.py +0 -379
- roar_cli-0.2.11/roar/presenters/spinner.py +0 -60
- {roar_cli-0.2.11 → roar_cli-0.3.0}/LICENSE +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/analyzers/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/analyzers/base.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/analyzers/experiment_trackers.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/requests.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/results.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/service.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/transfer.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/label_rendering.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/blake3_upgrade.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/composite_builder.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/composites.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/datasets.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/job_links.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/job_preparation.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/lineage_composites.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/metadata.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/register_preview_jobs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/secrets.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/source_resolution.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/targets.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/inputs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/log.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/dag_references.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/local/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/local/plugin.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/config.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/export.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/plugin.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/runtime_bundle.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/submit.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/_agent_names.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/collector.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/config.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/constants.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/fragment.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/node_agent.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/plugin.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/proxy_fragments.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/roar_worker.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/s3_key_paths.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/submit.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/auth.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/build.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/env.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/get.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/inputs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/log.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/osmo.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/pop.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/proxy.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/context.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/decorators.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/digests.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/dto/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/dto/registration.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/config.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/logger.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/presenter.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/run.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/services.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/telemetry.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/vcs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/logging.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/artifact.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/base.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/dag.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/dataset_identifier.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/glaas.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/job.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/session.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/telemetry.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/vcs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/operation_metadata.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/step_name.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/tracer_modes.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/validation.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/context.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/engine.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/hashing/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/hashing/backend.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/hashing/blake3.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/artifact.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/collection.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/composite.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/hash_cache.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/job.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/hashing.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/lineage.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/session.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/step_priority.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/bridge.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/proxy.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/proxy_config.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/models.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/reconstitution.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/sessions.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/transport.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/contract.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/planning.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/registry.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/runtime_imports.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/build_pip_collector.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/build_tool_collector.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/data_loader.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/package_collector.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/process_summarizer.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/runtime_collector.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/dataset_identifier.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/dataset_profile.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/environment_setup.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/installers.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/pipeline_executor.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/pipeline_metadata.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/backup.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/driver_entrypoint.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/support.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/signal_handler.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/worker_bootstrap.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/filters/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/filters/files.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/filters/omit.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/base.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/gcs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/get.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/http.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/noop.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/s3.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/base.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/context.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/auth.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/fragment_streamer.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/_artifact_ref.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/artifact.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/registry.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/resolution.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/base.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/gcs.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/memory.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/noop.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/publish.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/s3.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/telemetry/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/telemetry/base.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/telemetry/wandb.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/console.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/dag_renderer.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/formatting.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/null.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/utils/__init__.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/utils/cloud.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/utils/git_url.py +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/Cargo.toml +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-core/Cargo.toml +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-core/src/lib.rs +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-py/Cargo.toml +0 -0
- {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-py/src/lib.rs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roar-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -23,6 +23,7 @@ Requires-Dist: sqlalchemy>=2.0.0
|
|
|
23
23
|
Requires-Dist: pysqlite3-binary>=0.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'
|
|
24
24
|
Requires-Dist: pydantic>=2.0.0
|
|
25
25
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
26
|
+
Requires-Dist: textual>=0.80
|
|
26
27
|
Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
|
|
27
28
|
Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
|
|
28
29
|
Requires-Dist: pytest-timeout>=2.0.0 ; extra == 'dev'
|
|
@@ -66,6 +67,11 @@ uv pip install roar-cli
|
|
|
66
67
|
|
|
67
68
|
Requires Python 3.10+.
|
|
68
69
|
|
|
70
|
+
> For the full prereqs, platform support matrix, tracer-backend setup,
|
|
71
|
+
> macOS SIP notes, and sdist build steps, see the canonical
|
|
72
|
+
> [Installing roar](https://glaas.ai/docs/roar-guide#installing-roar) docs page.
|
|
73
|
+
> What's below is a TL;DR.
|
|
74
|
+
|
|
69
75
|
### Platform Support
|
|
70
76
|
|
|
71
77
|
| Platform | Status |
|
|
@@ -75,7 +81,12 @@ Requires Python 3.10+.
|
|
|
75
81
|
| macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
|
|
76
82
|
| Windows | Coming soon |
|
|
77
83
|
|
|
78
|
-
PyPI wheels are published for Linux and macOS (`x86_64
|
|
84
|
+
PyPI wheels are published for Linux (`x86_64`, `aarch64`) and macOS (`x86_64`, `arm64`).
|
|
85
|
+
|
|
86
|
+
If a matching wheel isn't available, `pip install` falls through to the
|
|
87
|
+
source distribution. The sdist ships the Rust tracer source but no
|
|
88
|
+
pre-built binaries, so it requires a C toolchain (`gcc` / `clang`), Rust
|
|
89
|
+
(`rustup`), and a few minutes to compile the tracers on first install.
|
|
79
90
|
|
|
80
91
|
### Development Installation
|
|
81
92
|
|
|
@@ -84,12 +95,20 @@ PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
|
|
|
84
95
|
git clone https://github.com/treqs/roar.git
|
|
85
96
|
cd roar
|
|
86
97
|
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
-
# or without uv
|
|
90
|
-
pip install -e ".[dev]"
|
|
98
|
+
# One-shot dev install: Python package + Rust tracer binaries
|
|
99
|
+
bash scripts/install-dev.sh
|
|
91
100
|
```
|
|
92
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
|
+
|
|
93
112
|
## Quick Start
|
|
94
113
|
|
|
95
114
|
```bash
|
|
@@ -103,6 +122,53 @@ roar run python train.py --data features.parquet --output model.pt
|
|
|
103
122
|
roar run python evaluate.py --model model.pt --output metrics.json
|
|
104
123
|
```
|
|
105
124
|
|
|
125
|
+
## Product Telemetry
|
|
126
|
+
|
|
127
|
+
`roar` keeps anonymous product telemetry counters by default so maintainers can
|
|
128
|
+
prioritize reliability and platform support work. Telemetry is local-first:
|
|
129
|
+
small counters are stored under the XDG cache directory and uploaded
|
|
130
|
+
opportunistically in a background process. Telemetry never uploads file
|
|
131
|
+
contents, command arguments, file paths, environment variables, repository
|
|
132
|
+
names, hostnames, usernames, lineage payloads, or GLaaS auth tokens.
|
|
133
|
+
|
|
134
|
+
Uploaded payloads are limited to:
|
|
135
|
+
|
|
136
|
+
- A random `install_id`, event id, sequence number, and coarse timestamps.
|
|
137
|
+
- The installed `roar` version.
|
|
138
|
+
- Coarse platform values: OS family, CPU architecture, Python major/minor,
|
|
139
|
+
shell name, installer class, and whether the process appears containerized.
|
|
140
|
+
- Allowlisted command counters such as `run`, `init`, `register`, and
|
|
141
|
+
successful or failed `roar run` outcomes.
|
|
142
|
+
- Allowlisted tracer selection counters and coarse feature capability flags.
|
|
143
|
+
|
|
144
|
+
Inspect the current status and exact next payload preview:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
roar telemetry --status
|
|
148
|
+
roar telemetry --print
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
When `telemetry.endpoint` is unset, roar derives the upload endpoint from the
|
|
152
|
+
configured GLaaS API URL. For example, `glaas.url = "https://api.dev.glaas.ai"`
|
|
153
|
+
uses `https://api.dev.glaas.ai/api/v1/telemetry/roar`.
|
|
154
|
+
|
|
155
|
+
Disable telemetry globally or for a single project:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
roar telemetry --disable
|
|
159
|
+
roar config set telemetry.enabled false
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Environment opt-outs always win over saved config:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
DO_NOT_TRACK=1 roar run python train.py
|
|
166
|
+
ROAR_NO_TELEMETRY=1 roar run python train.py
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Telemetry is also suppressed automatically in CI, pytest, and Roar-managed
|
|
170
|
+
backend worker environments such as Ray and OSMO jobs.
|
|
171
|
+
|
|
106
172
|
## Tracer Backends
|
|
107
173
|
|
|
108
174
|
`roar run` relies on a Rust "tracer" binary to observe file I/O. If you see an error like "No tracer binary found", build one of the backends below.
|
|
@@ -136,10 +202,16 @@ By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
|
|
|
136
202
|
|
|
137
203
|
```bash
|
|
138
204
|
# Show what roar can currently find and whether it looks usable
|
|
139
|
-
roar tracer
|
|
205
|
+
roar tracer
|
|
140
206
|
|
|
141
207
|
# Set a default backend (auto|ebpf|preload|ptrace)
|
|
142
|
-
roar tracer
|
|
208
|
+
roar tracer use preload
|
|
209
|
+
|
|
210
|
+
# Deep preflight for one backend, with the exact failure cause
|
|
211
|
+
roar tracer check ebpf
|
|
212
|
+
|
|
213
|
+
# One-shot host setup for the eBPF backend (applies CAP_BPF)
|
|
214
|
+
roar tracer enable ebpf
|
|
143
215
|
```
|
|
144
216
|
|
|
145
217
|
### macOS Tracing Limitations
|
|
@@ -214,9 +286,13 @@ roar reproduce abc123de --run --package-sync
|
|
|
214
286
|
|
|
215
287
|
# Show all required packages (no truncation)
|
|
216
288
|
roar reproduce abc123de --list-requirements
|
|
289
|
+
|
|
290
|
+
# Reproduce a full lineage/session by its 64-character DAG hash
|
|
291
|
+
roar reproduce <lineage-hash> --lineage
|
|
292
|
+
roar reproduce <lineage-hash> --lineage --run
|
|
217
293
|
```
|
|
218
294
|
|
|
219
|
-
Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
|
|
295
|
+
Unflagged `roar reproduce <hash>` continues to default to artifact reproduction. Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
|
|
220
296
|
|
|
221
297
|
### `roar build <command>`
|
|
222
298
|
|
|
@@ -235,7 +311,7 @@ Use for setup that should run before the main pipeline (compiling, installing).
|
|
|
235
311
|
|
|
236
312
|
### `roar auth`
|
|
237
313
|
|
|
238
|
-
Manage GLaaS
|
|
314
|
+
Manage SSH-key-based GLaaS registration settings.
|
|
239
315
|
|
|
240
316
|
```bash
|
|
241
317
|
roar auth register # Show SSH public key for registration
|
|
@@ -243,7 +319,7 @@ roar auth test # Test connection to GLaaS server
|
|
|
243
319
|
roar auth status # Show current auth status
|
|
244
320
|
```
|
|
245
321
|
|
|
246
|
-
To register with GLaaS:
|
|
322
|
+
To register SSH auth with GLaaS:
|
|
247
323
|
|
|
248
324
|
1. Run `roar auth register` to display your public key
|
|
249
325
|
2. Sign up at <https://glaas.ai> where you can paste your public key
|
|
@@ -271,6 +347,7 @@ Run `roar config list` to see all available options with descriptions. Common op
|
|
|
271
347
|
| `filters.ignore_tmp_files` | true | Ignore /tmp files |
|
|
272
348
|
| `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
|
|
273
349
|
| `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
|
|
350
|
+
| `registration.public_by_default` | false | Default `register`/`put` visibility |
|
|
274
351
|
| `registration.omit.enabled` | true | Enable secret filtering |
|
|
275
352
|
| `hash.primary` | blake3 | Primary hash algorithm |
|
|
276
353
|
| `logging.level` | warning | Log level (debug, info, warning, error) |
|
|
@@ -315,6 +392,9 @@ roar label set dag current owner=alice team=ml
|
|
|
315
392
|
roar label set job @2 phase=train lr=0.001
|
|
316
393
|
roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
|
|
317
394
|
|
|
395
|
+
# Remove labels
|
|
396
|
+
roar label unset artifact ./outputs/model.pt stage
|
|
397
|
+
|
|
318
398
|
# Copy labels from one entity to another
|
|
319
399
|
roar label cp job @2 artifact ./outputs/model.pt
|
|
320
400
|
|
|
@@ -326,6 +406,11 @@ roar label show artifact ./outputs/model.pt
|
|
|
326
406
|
# Show label history (all versions)
|
|
327
407
|
roar label history dag current
|
|
328
408
|
roar label history artifact <artifact-hash>
|
|
409
|
+
|
|
410
|
+
# Sync local user-managed labels to GLaaS
|
|
411
|
+
roar label sync
|
|
412
|
+
roar label sync job @2
|
|
413
|
+
roar label sync artifact ./outputs/model.pt --dry-run
|
|
329
414
|
```
|
|
330
415
|
|
|
331
416
|
**Entity targets:**
|
|
@@ -334,7 +419,7 @@ roar label history artifact <artifact-hash>
|
|
|
334
419
|
- `job`: step ref (`@N` or `@BN`) or job UID
|
|
335
420
|
- `artifact`: file path or artifact hash
|
|
336
421
|
|
|
337
|
-
Labels are stored locally and included in lineage registration/publish flows
|
|
422
|
+
Labels are stored locally by default. You can explicitly reconcile current local user-managed labels to GLaaS with `roar label sync ...`, and labels are also included in lineage registration/publish flows when supported by the configured server.
|
|
338
423
|
|
|
339
424
|
### `roar register`
|
|
340
425
|
|
|
@@ -362,6 +447,14 @@ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
|
|
|
362
447
|
|
|
363
448
|
For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
|
|
364
449
|
|
|
450
|
+
To make public publication the default for `roar register` and `roar put`:
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
roar config set registration.public_by_default true
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Override per command with `--public` or `--private`. Use `--anonymous` on `roar register` or `roar put` to force public anonymous publication even when local GLaaS auth is configured. When public visibility comes from config rather than an explicit flag, `roar` prints a warning before publishing.
|
|
457
|
+
|
|
365
458
|
### `roar put`
|
|
366
459
|
|
|
367
460
|
Upload artifacts to cloud storage and register lineage with GLaaS.
|
|
@@ -377,6 +470,8 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
|
|
|
377
470
|
- `-m, --message` — Description of the upload (required)
|
|
378
471
|
- `--dry-run` — Preview without uploading
|
|
379
472
|
- `--no-tag` — Skip git tagging
|
|
473
|
+
- `--public` / `--private` — Override configured publish visibility
|
|
474
|
+
- `--anonymous` — Force public anonymous registration even when local GLaaS auth is configured
|
|
380
475
|
|
|
381
476
|
**Source formats:**
|
|
382
477
|
|
|
@@ -435,6 +530,21 @@ Show a summary of the active session, including the current DAG hash.
|
|
|
435
530
|
roar status
|
|
436
531
|
```
|
|
437
532
|
|
|
533
|
+
### `roar workflow`
|
|
534
|
+
|
|
535
|
+
Generate TReqs workflow YAML from a local session.
|
|
536
|
+
|
|
537
|
+
```bash
|
|
538
|
+
roar workflow generate
|
|
539
|
+
roar workflow generate .treqs/workflows/train.yaml
|
|
540
|
+
roar workflow generate --session 8d7a1f2c --name train
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
Generated workflows follow the TReqs workflow format: `name`, optional
|
|
544
|
+
`working_directory`, and one YAML key per task in session step order.
|
|
545
|
+
By default, `roar workflow generate` uses the active session and writes the
|
|
546
|
+
workflow under `.treqs/workflows/` at the repo root.
|
|
547
|
+
|
|
438
548
|
### `roar pop`
|
|
439
549
|
|
|
440
550
|
Remove the most recent job from the active session. Useful for undoing a mistaken `roar run` or correcting the pipeline before registration.
|
|
@@ -545,10 +655,62 @@ roar auth test
|
|
|
545
655
|
### Setup
|
|
546
656
|
|
|
547
657
|
```bash
|
|
548
|
-
|
|
549
|
-
|
|
658
|
+
bash scripts/install-dev.sh
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
The script handles Python install + Rust tracer builds + staging
|
|
662
|
+
binaries into `roar/bin/`. See [Building from source](#building-from-source)
|
|
663
|
+
for what it does and how to run the steps manually.
|
|
664
|
+
|
|
665
|
+
### Building from source
|
|
666
|
+
|
|
667
|
+
`pip install -e .` runs `maturin develop` to build the `artifact-hash-py`
|
|
668
|
+
pyo3 extension, but the tracer binaries (`roar-tracer*`, `roard`,
|
|
669
|
+
`roar-proxy`) are separate cargo packages outside the maturin manifest.
|
|
670
|
+
The PyPI wheels bundle them under `roar/bin/`; an editable install
|
|
671
|
+
does not, and `roar run` fails until they're built and staged.
|
|
672
|
+
|
|
673
|
+
The fastest path is `scripts/install-dev.sh`, which does this:
|
|
674
|
+
|
|
675
|
+
```bash
|
|
676
|
+
# 1. Python package (editable, with dev extras)
|
|
677
|
+
uv pip install -e ".[dev]" # or pip install -e ".[dev]"
|
|
678
|
+
|
|
679
|
+
# 2. Build the per-platform tracer crates
|
|
680
|
+
cd rust
|
|
681
|
+
# Linux:
|
|
682
|
+
cargo build --release \
|
|
683
|
+
-p roar-tracer -p roar-tracer-preload -p roar-tracer-ebpf -p roar-proxy
|
|
684
|
+
# macOS:
|
|
685
|
+
cargo build --release -p roar-tracer-preload -p roar-proxy
|
|
686
|
+
|
|
687
|
+
# 3. Stage the built binaries where the editable install looks for them
|
|
688
|
+
cd ..
|
|
689
|
+
mkdir -p roar/bin
|
|
690
|
+
# Linux: install five binaries + the preload .so
|
|
691
|
+
install -m 0755 rust/target/release/{roar-tracer,roar-tracer-preload,roar-tracer-ebpf,roard,roar-proxy} roar/bin/
|
|
692
|
+
install -m 0755 rust/target/release/libroar_tracer_preload.so roar/bin/
|
|
693
|
+
# macOS: install the launcher + the preload .dylib + roar-proxy
|
|
694
|
+
# install -m 0755 rust/target/release/{roar-tracer-preload,roar-proxy} roar/bin/
|
|
695
|
+
# install -m 0755 rust/target/release/libroar_tracer_preload.dylib roar/bin/
|
|
550
696
|
```
|
|
551
697
|
|
|
698
|
+
The eBPF tracer (Linux only) needs `bpf-linker` and a Rust nightly
|
|
699
|
+
toolchain with `rust-src` for the BPF probe build:
|
|
700
|
+
|
|
701
|
+
```bash
|
|
702
|
+
cargo install bpf-linker
|
|
703
|
+
rustup install nightly
|
|
704
|
+
rustup component add rust-src --toolchain nightly
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
`scripts/install-dev.sh` skips eBPF gracefully when `bpf-linker` is
|
|
708
|
+
absent — the other tracers still work.
|
|
709
|
+
|
|
710
|
+
Verify the install with `roar tracer`; every backend listed should be
|
|
711
|
+
`ready` (or have a clear platform-specific reason it isn't, like
|
|
712
|
+
`perf_event_paranoid=4 (needs <= 1)` for eBPF on a hardened kernel).
|
|
713
|
+
|
|
552
714
|
### Running Quality Checks
|
|
553
715
|
|
|
554
716
|
```bash
|
|
@@ -18,6 +18,11 @@ uv pip install roar-cli
|
|
|
18
18
|
|
|
19
19
|
Requires Python 3.10+.
|
|
20
20
|
|
|
21
|
+
> For the full prereqs, platform support matrix, tracer-backend setup,
|
|
22
|
+
> macOS SIP notes, and sdist build steps, see the canonical
|
|
23
|
+
> [Installing roar](https://glaas.ai/docs/roar-guide#installing-roar) docs page.
|
|
24
|
+
> What's below is a TL;DR.
|
|
25
|
+
|
|
21
26
|
### Platform Support
|
|
22
27
|
|
|
23
28
|
| Platform | Status |
|
|
@@ -27,7 +32,12 @@ Requires Python 3.10+.
|
|
|
27
32
|
| macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
|
|
28
33
|
| Windows | Coming soon |
|
|
29
34
|
|
|
30
|
-
PyPI wheels are published for Linux and macOS (`x86_64
|
|
35
|
+
PyPI wheels are published for Linux (`x86_64`, `aarch64`) and macOS (`x86_64`, `arm64`).
|
|
36
|
+
|
|
37
|
+
If a matching wheel isn't available, `pip install` falls through to the
|
|
38
|
+
source distribution. The sdist ships the Rust tracer source but no
|
|
39
|
+
pre-built binaries, so it requires a C toolchain (`gcc` / `clang`), Rust
|
|
40
|
+
(`rustup`), and a few minutes to compile the tracers on first install.
|
|
31
41
|
|
|
32
42
|
### Development Installation
|
|
33
43
|
|
|
@@ -36,12 +46,20 @@ PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
|
|
|
36
46
|
git clone https://github.com/treqs/roar.git
|
|
37
47
|
cd roar
|
|
38
48
|
|
|
39
|
-
#
|
|
40
|
-
|
|
41
|
-
# or without uv
|
|
42
|
-
pip install -e ".[dev]"
|
|
49
|
+
# One-shot dev install: Python package + Rust tracer binaries
|
|
50
|
+
bash scripts/install-dev.sh
|
|
43
51
|
```
|
|
44
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
|
+
|
|
45
63
|
## Quick Start
|
|
46
64
|
|
|
47
65
|
```bash
|
|
@@ -55,6 +73,53 @@ roar run python train.py --data features.parquet --output model.pt
|
|
|
55
73
|
roar run python evaluate.py --model model.pt --output metrics.json
|
|
56
74
|
```
|
|
57
75
|
|
|
76
|
+
## Product Telemetry
|
|
77
|
+
|
|
78
|
+
`roar` keeps anonymous product telemetry counters by default so maintainers can
|
|
79
|
+
prioritize reliability and platform support work. Telemetry is local-first:
|
|
80
|
+
small counters are stored under the XDG cache directory and uploaded
|
|
81
|
+
opportunistically in a background process. Telemetry never uploads file
|
|
82
|
+
contents, command arguments, file paths, environment variables, repository
|
|
83
|
+
names, hostnames, usernames, lineage payloads, or GLaaS auth tokens.
|
|
84
|
+
|
|
85
|
+
Uploaded payloads are limited to:
|
|
86
|
+
|
|
87
|
+
- A random `install_id`, event id, sequence number, and coarse timestamps.
|
|
88
|
+
- The installed `roar` version.
|
|
89
|
+
- Coarse platform values: OS family, CPU architecture, Python major/minor,
|
|
90
|
+
shell name, installer class, and whether the process appears containerized.
|
|
91
|
+
- Allowlisted command counters such as `run`, `init`, `register`, and
|
|
92
|
+
successful or failed `roar run` outcomes.
|
|
93
|
+
- Allowlisted tracer selection counters and coarse feature capability flags.
|
|
94
|
+
|
|
95
|
+
Inspect the current status and exact next payload preview:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
roar telemetry --status
|
|
99
|
+
roar telemetry --print
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
When `telemetry.endpoint` is unset, roar derives the upload endpoint from the
|
|
103
|
+
configured GLaaS API URL. For example, `glaas.url = "https://api.dev.glaas.ai"`
|
|
104
|
+
uses `https://api.dev.glaas.ai/api/v1/telemetry/roar`.
|
|
105
|
+
|
|
106
|
+
Disable telemetry globally or for a single project:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
roar telemetry --disable
|
|
110
|
+
roar config set telemetry.enabled false
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Environment opt-outs always win over saved config:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
DO_NOT_TRACK=1 roar run python train.py
|
|
117
|
+
ROAR_NO_TELEMETRY=1 roar run python train.py
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Telemetry is also suppressed automatically in CI, pytest, and Roar-managed
|
|
121
|
+
backend worker environments such as Ray and OSMO jobs.
|
|
122
|
+
|
|
58
123
|
## Tracer Backends
|
|
59
124
|
|
|
60
125
|
`roar run` relies on a Rust "tracer" binary to observe file I/O. If you see an error like "No tracer binary found", build one of the backends below.
|
|
@@ -88,10 +153,16 @@ By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
|
|
|
88
153
|
|
|
89
154
|
```bash
|
|
90
155
|
# Show what roar can currently find and whether it looks usable
|
|
91
|
-
roar tracer
|
|
156
|
+
roar tracer
|
|
92
157
|
|
|
93
158
|
# Set a default backend (auto|ebpf|preload|ptrace)
|
|
94
|
-
roar tracer
|
|
159
|
+
roar tracer use preload
|
|
160
|
+
|
|
161
|
+
# Deep preflight for one backend, with the exact failure cause
|
|
162
|
+
roar tracer check ebpf
|
|
163
|
+
|
|
164
|
+
# One-shot host setup for the eBPF backend (applies CAP_BPF)
|
|
165
|
+
roar tracer enable ebpf
|
|
95
166
|
```
|
|
96
167
|
|
|
97
168
|
### macOS Tracing Limitations
|
|
@@ -166,9 +237,13 @@ roar reproduce abc123de --run --package-sync
|
|
|
166
237
|
|
|
167
238
|
# Show all required packages (no truncation)
|
|
168
239
|
roar reproduce abc123de --list-requirements
|
|
240
|
+
|
|
241
|
+
# Reproduce a full lineage/session by its 64-character DAG hash
|
|
242
|
+
roar reproduce <lineage-hash> --lineage
|
|
243
|
+
roar reproduce <lineage-hash> --lineage --run
|
|
169
244
|
```
|
|
170
245
|
|
|
171
|
-
Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
|
|
246
|
+
Unflagged `roar reproduce <hash>` continues to default to artifact reproduction. Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
|
|
172
247
|
|
|
173
248
|
### `roar build <command>`
|
|
174
249
|
|
|
@@ -187,7 +262,7 @@ Use for setup that should run before the main pipeline (compiling, installing).
|
|
|
187
262
|
|
|
188
263
|
### `roar auth`
|
|
189
264
|
|
|
190
|
-
Manage GLaaS
|
|
265
|
+
Manage SSH-key-based GLaaS registration settings.
|
|
191
266
|
|
|
192
267
|
```bash
|
|
193
268
|
roar auth register # Show SSH public key for registration
|
|
@@ -195,7 +270,7 @@ roar auth test # Test connection to GLaaS server
|
|
|
195
270
|
roar auth status # Show current auth status
|
|
196
271
|
```
|
|
197
272
|
|
|
198
|
-
To register with GLaaS:
|
|
273
|
+
To register SSH auth with GLaaS:
|
|
199
274
|
|
|
200
275
|
1. Run `roar auth register` to display your public key
|
|
201
276
|
2. Sign up at <https://glaas.ai> where you can paste your public key
|
|
@@ -223,6 +298,7 @@ Run `roar config list` to see all available options with descriptions. Common op
|
|
|
223
298
|
| `filters.ignore_tmp_files` | true | Ignore /tmp files |
|
|
224
299
|
| `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
|
|
225
300
|
| `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
|
|
301
|
+
| `registration.public_by_default` | false | Default `register`/`put` visibility |
|
|
226
302
|
| `registration.omit.enabled` | true | Enable secret filtering |
|
|
227
303
|
| `hash.primary` | blake3 | Primary hash algorithm |
|
|
228
304
|
| `logging.level` | warning | Log level (debug, info, warning, error) |
|
|
@@ -267,6 +343,9 @@ roar label set dag current owner=alice team=ml
|
|
|
267
343
|
roar label set job @2 phase=train lr=0.001
|
|
268
344
|
roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
|
|
269
345
|
|
|
346
|
+
# Remove labels
|
|
347
|
+
roar label unset artifact ./outputs/model.pt stage
|
|
348
|
+
|
|
270
349
|
# Copy labels from one entity to another
|
|
271
350
|
roar label cp job @2 artifact ./outputs/model.pt
|
|
272
351
|
|
|
@@ -278,6 +357,11 @@ roar label show artifact ./outputs/model.pt
|
|
|
278
357
|
# Show label history (all versions)
|
|
279
358
|
roar label history dag current
|
|
280
359
|
roar label history artifact <artifact-hash>
|
|
360
|
+
|
|
361
|
+
# Sync local user-managed labels to GLaaS
|
|
362
|
+
roar label sync
|
|
363
|
+
roar label sync job @2
|
|
364
|
+
roar label sync artifact ./outputs/model.pt --dry-run
|
|
281
365
|
```
|
|
282
366
|
|
|
283
367
|
**Entity targets:**
|
|
@@ -286,7 +370,7 @@ roar label history artifact <artifact-hash>
|
|
|
286
370
|
- `job`: step ref (`@N` or `@BN`) or job UID
|
|
287
371
|
- `artifact`: file path or artifact hash
|
|
288
372
|
|
|
289
|
-
Labels are stored locally and included in lineage registration/publish flows
|
|
373
|
+
Labels are stored locally by default. You can explicitly reconcile current local user-managed labels to GLaaS with `roar label sync ...`, and labels are also included in lineage registration/publish flows when supported by the configured server.
|
|
290
374
|
|
|
291
375
|
### `roar register`
|
|
292
376
|
|
|
@@ -314,6 +398,14 @@ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
|
|
|
314
398
|
|
|
315
399
|
For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
|
|
316
400
|
|
|
401
|
+
To make public publication the default for `roar register` and `roar put`:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
roar config set registration.public_by_default true
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Override per command with `--public` or `--private`. Use `--anonymous` on `roar register` or `roar put` to force public anonymous publication even when local GLaaS auth is configured. When public visibility comes from config rather than an explicit flag, `roar` prints a warning before publishing.
|
|
408
|
+
|
|
317
409
|
### `roar put`
|
|
318
410
|
|
|
319
411
|
Upload artifacts to cloud storage and register lineage with GLaaS.
|
|
@@ -329,6 +421,8 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
|
|
|
329
421
|
- `-m, --message` — Description of the upload (required)
|
|
330
422
|
- `--dry-run` — Preview without uploading
|
|
331
423
|
- `--no-tag` — Skip git tagging
|
|
424
|
+
- `--public` / `--private` — Override configured publish visibility
|
|
425
|
+
- `--anonymous` — Force public anonymous registration even when local GLaaS auth is configured
|
|
332
426
|
|
|
333
427
|
**Source formats:**
|
|
334
428
|
|
|
@@ -387,6 +481,21 @@ Show a summary of the active session, including the current DAG hash.
|
|
|
387
481
|
roar status
|
|
388
482
|
```
|
|
389
483
|
|
|
484
|
+
### `roar workflow`
|
|
485
|
+
|
|
486
|
+
Generate TReqs workflow YAML from a local session.
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
roar workflow generate
|
|
490
|
+
roar workflow generate .treqs/workflows/train.yaml
|
|
491
|
+
roar workflow generate --session 8d7a1f2c --name train
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
Generated workflows follow the TReqs workflow format: `name`, optional
|
|
495
|
+
`working_directory`, and one YAML key per task in session step order.
|
|
496
|
+
By default, `roar workflow generate` uses the active session and writes the
|
|
497
|
+
workflow under `.treqs/workflows/` at the repo root.
|
|
498
|
+
|
|
390
499
|
### `roar pop`
|
|
391
500
|
|
|
392
501
|
Remove the most recent job from the active session. Useful for undoing a mistaken `roar run` or correcting the pipeline before registration.
|
|
@@ -497,10 +606,62 @@ roar auth test
|
|
|
497
606
|
### Setup
|
|
498
607
|
|
|
499
608
|
```bash
|
|
500
|
-
|
|
501
|
-
|
|
609
|
+
bash scripts/install-dev.sh
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
The script handles Python install + Rust tracer builds + staging
|
|
613
|
+
binaries into `roar/bin/`. See [Building from source](#building-from-source)
|
|
614
|
+
for what it does and how to run the steps manually.
|
|
615
|
+
|
|
616
|
+
### Building from source
|
|
617
|
+
|
|
618
|
+
`pip install -e .` runs `maturin develop` to build the `artifact-hash-py`
|
|
619
|
+
pyo3 extension, but the tracer binaries (`roar-tracer*`, `roard`,
|
|
620
|
+
`roar-proxy`) are separate cargo packages outside the maturin manifest.
|
|
621
|
+
The PyPI wheels bundle them under `roar/bin/`; an editable install
|
|
622
|
+
does not, and `roar run` fails until they're built and staged.
|
|
623
|
+
|
|
624
|
+
The fastest path is `scripts/install-dev.sh`, which does this:
|
|
625
|
+
|
|
626
|
+
```bash
|
|
627
|
+
# 1. Python package (editable, with dev extras)
|
|
628
|
+
uv pip install -e ".[dev]" # or pip install -e ".[dev]"
|
|
629
|
+
|
|
630
|
+
# 2. Build the per-platform tracer crates
|
|
631
|
+
cd rust
|
|
632
|
+
# Linux:
|
|
633
|
+
cargo build --release \
|
|
634
|
+
-p roar-tracer -p roar-tracer-preload -p roar-tracer-ebpf -p roar-proxy
|
|
635
|
+
# macOS:
|
|
636
|
+
cargo build --release -p roar-tracer-preload -p roar-proxy
|
|
637
|
+
|
|
638
|
+
# 3. Stage the built binaries where the editable install looks for them
|
|
639
|
+
cd ..
|
|
640
|
+
mkdir -p roar/bin
|
|
641
|
+
# Linux: install five binaries + the preload .so
|
|
642
|
+
install -m 0755 rust/target/release/{roar-tracer,roar-tracer-preload,roar-tracer-ebpf,roard,roar-proxy} roar/bin/
|
|
643
|
+
install -m 0755 rust/target/release/libroar_tracer_preload.so roar/bin/
|
|
644
|
+
# macOS: install the launcher + the preload .dylib + roar-proxy
|
|
645
|
+
# install -m 0755 rust/target/release/{roar-tracer-preload,roar-proxy} roar/bin/
|
|
646
|
+
# install -m 0755 rust/target/release/libroar_tracer_preload.dylib roar/bin/
|
|
502
647
|
```
|
|
503
648
|
|
|
649
|
+
The eBPF tracer (Linux only) needs `bpf-linker` and a Rust nightly
|
|
650
|
+
toolchain with `rust-src` for the BPF probe build:
|
|
651
|
+
|
|
652
|
+
```bash
|
|
653
|
+
cargo install bpf-linker
|
|
654
|
+
rustup install nightly
|
|
655
|
+
rustup component add rust-src --toolchain nightly
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
`scripts/install-dev.sh` skips eBPF gracefully when `bpf-linker` is
|
|
659
|
+
absent — the other tracers still work.
|
|
660
|
+
|
|
661
|
+
Verify the install with `roar tracer`; every backend listed should be
|
|
662
|
+
`ready` (or have a clear platform-specific reason it isn't, like
|
|
663
|
+
`perf_event_paranoid=4 (needs <= 1)` for eBPF on a hardened kernel).
|
|
664
|
+
|
|
504
665
|
### Running Quality Checks
|
|
505
666
|
|
|
506
667
|
```bash
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "roar-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Reproducibility and provenance tracker for ML training pipelines"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name="TReqs Team", email="info@treqs.ai" }
|
|
@@ -46,6 +46,7 @@ dependencies = [
|
|
|
46
46
|
"pysqlite3-binary>=0.5.0; sys_platform == 'linux' and platform_machine == 'x86_64'", # Fallback when stdlib sqlite3 unavailable
|
|
47
47
|
"pydantic>=2.0.0",
|
|
48
48
|
"pydantic-settings>=2.0.0",
|
|
49
|
+
"textual>=0.80",
|
|
49
50
|
"tomli>=2.0.0; python_version < '3.11'",
|
|
50
51
|
]
|
|
51
52
|
|
|
@@ -85,9 +86,24 @@ bindings = "pyo3"
|
|
|
85
86
|
include = [
|
|
86
87
|
{ path = "LICENSE", format = "sdist" },
|
|
87
88
|
{ path = "LICENSE", format = "wheel" },
|
|
88
|
-
|
|
89
|
+
# Pre-built tracer binaries ship in the wheel only, never the sdist.
|
|
90
|
+
# Bundling arch-specific ELFs in a source dist meant aarch64 hosts that
|
|
91
|
+
# fell through to sdist installs got x86_64 binaries that failed at exec
|
|
92
|
+
# time with a confusing "Exec format error". sdist users build the
|
|
93
|
+
# binaries from the rust/ source tree (paths below).
|
|
89
94
|
{ path = "roar/bin/*", format = "wheel" },
|
|
95
|
+
{ path = "roar/cli/templates/**/*", format = "sdist" },
|
|
96
|
+
{ path = "roar/cli/templates/**/*", format = "wheel" },
|
|
90
97
|
{ path = "roar_inject.pth", format = "wheel" },
|
|
98
|
+
# Bundle the tracer + proxy crates into the sdist so aarch64 (or any
|
|
99
|
+
# platform without a published wheel) can `cargo build --release` after
|
|
100
|
+
# extracting the sdist. cargo's auto-included package list only covers
|
|
101
|
+
# the artifact-hash-py crate, so the tracer crates need to be listed
|
|
102
|
+
# explicitly here. See README → Platform Support for the install path.
|
|
103
|
+
{ path = "rust/tracers/**/*", format = "sdist" },
|
|
104
|
+
{ path = "rust/services/**/*", format = "sdist" },
|
|
105
|
+
{ path = "rust/crates/tracer-*/**/*", format = "sdist" },
|
|
106
|
+
{ path = "scripts/sync_packaged_rust_artifacts.py", format = "sdist" },
|
|
91
107
|
]
|
|
92
108
|
|
|
93
109
|
[tool.pytest.ini_options]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Entry point for the `roar` command-line interface.
|
|
3
3
|
|
|
4
4
|
roar (Run Observation & Artifact Registration) is a local front-end to
|
|
5
|
-
|
|
5
|
+
GLaaS (Global Lineage as a Service). It registers data artifacts and
|
|
6
6
|
execution steps (jobs) in ML pipelines.
|
|
7
7
|
|
|
8
8
|
This module provides the main() entry point that delegates to the Click CLI.
|