buildai-cli 0.3.172__tar.gz → 0.3.174__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.
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/.gitignore +7 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/PKG-INFO +1 -1
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/auth_local.py +10 -39
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/dev.py +9 -15
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/context.py +3 -2
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/pyproject.toml +1 -1
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/AGENTS.md +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.hand-labels-export +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.hand-labels-export.dockerignore +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.rescaling-migration-jobs +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.rescaling-migration-jobs.dockerignore +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/buildai_bootstrap.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/_has_core.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/api_proxy.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/auth.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/broker.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/common.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/migrate.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/query.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/rescaling.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/schema.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/status.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/tunnel.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/doctor.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/ego_frame_search.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/gigcamera.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/hand_labels_export.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/ingest.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/ingest_docs.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/intake.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/label_accounts.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/label_replay_recovery.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/labeling.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/processing.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/rescaling.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/spec.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/spec_pr.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/config.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/console.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/db_broker.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/guard.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/internal_api.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/labeling_onboarding.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/main.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/nl_query/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/nl_query/dataset_tools.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/ops_init.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/output.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/pagination.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/canonical.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/export.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/feed_proofs.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/fence.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/importer.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/jobs.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/management.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/orchestrator.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/probes.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/reconcile.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/run_record.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/runtime.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_export_closeout.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_export_prepare.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_fence.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_unfreeze.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_export_closeout.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_export_prepare.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_fence.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_unfreeze.sql +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/storage.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/transform.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rls_guard.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/__main__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/encode.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/export.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/reader.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/schema.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/store.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/validate.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_logical_backup/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_logical_backup/__main__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_migration_job/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_migration_job/__main__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_recovery_extractor/__init__.py +0 -0
- {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_recovery_extractor/__main__.py +0 -0
|
@@ -155,6 +155,13 @@ recording-cache/
|
|
|
155
155
|
/datasets/golden-ego-exo/build/**/out/
|
|
156
156
|
!/datasets/embedding-atlas/build/
|
|
157
157
|
!/datasets/embedding-atlas/build/**
|
|
158
|
+
!/datasets/delivery-1m-hour/build/
|
|
159
|
+
!/datasets/delivery-1m-hour/build/**
|
|
160
|
+
/datasets/delivery-1m-hour/build/**/out/
|
|
161
|
+
/datasets/delivery-1m-hour/build/upload/fleet.local.env
|
|
162
|
+
# Run-time copies from the delivery record: they name the customer, so they never enter the repo.
|
|
163
|
+
/datasets/delivery-1m-hour/build/upload/RELEASE.json
|
|
164
|
+
/datasets/delivery-1m-hour/build/upload/plans/
|
|
158
165
|
!/datasets/buildai-1k-hour-figure-sample/build/
|
|
159
166
|
/datasets/buildai-1k-hour-figure-sample/build/*
|
|
160
167
|
!/datasets/buildai-1k-hour-figure-sample/build/validate_blocked_policies.py
|
|
@@ -516,21 +516,6 @@ def inspect_local_auth_state() -> LocalAuthState:
|
|
|
516
516
|
)
|
|
517
517
|
|
|
518
518
|
|
|
519
|
-
def _development_lane_is_codified() -> tuple[bool, str]:
|
|
520
|
-
"""Report whether the dev AlloyDB lane has repo-owned IAM user truth today."""
|
|
521
|
-
|
|
522
|
-
path = REPO_ROOT / "infra/production/database-dev/terragrunt.hcl"
|
|
523
|
-
if not path.exists():
|
|
524
|
-
return False, f"Missing {path}"
|
|
525
|
-
text = path.read_text(encoding="utf-8")
|
|
526
|
-
if "iam_users = []" in text:
|
|
527
|
-
return (
|
|
528
|
-
False,
|
|
529
|
-
"infra/production/database-dev/terragrunt.hcl still declares `iam_users = []`.",
|
|
530
|
-
)
|
|
531
|
-
return True, "Development lane IAM users are codified in repo truth."
|
|
532
|
-
|
|
533
|
-
|
|
534
519
|
def bootstrap_commands(
|
|
535
520
|
*,
|
|
536
521
|
profile: ResolvedLocalAuthProfile | None = None,
|
|
@@ -572,27 +557,27 @@ def bootstrap_commands(
|
|
|
572
557
|
|
|
573
558
|
|
|
574
559
|
def _engineers_dev_contract_is_modeled() -> tuple[bool, str]:
|
|
575
|
-
"""Report whether the engineer-facing
|
|
560
|
+
"""Report whether the engineer-facing service account exists in repo truth.
|
|
561
|
+
|
|
562
|
+
Only the production cluster counts: the dev cluster (buildai-india-dev) was retired
|
|
563
|
+
on 30 Oct 2026, and local development uses the production cluster.
|
|
564
|
+
"""
|
|
576
565
|
|
|
577
566
|
iam_path = REPO_ROOT / "infra/production/iam/terragrunt.hcl"
|
|
578
|
-
|
|
579
|
-
REPO_ROOT / "infra/production/database/terragrunt.hcl",
|
|
580
|
-
REPO_ROOT / "infra/production/database-dev/terragrunt.hcl",
|
|
581
|
-
)
|
|
567
|
+
db_path = REPO_ROOT / "infra/production/database/terragrunt.hcl"
|
|
582
568
|
missing: list[str] = []
|
|
583
569
|
|
|
584
570
|
if not iam_path.exists() or '"engineers-dev-sa"' not in iam_path.read_text(encoding="utf-8"):
|
|
585
571
|
missing.append(str(iam_path))
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
missing.append(str(db_path))
|
|
572
|
+
if not db_path.exists() or "engineers-dev-sa@" not in db_path.read_text(encoding="utf-8"):
|
|
573
|
+
missing.append(str(db_path))
|
|
589
574
|
|
|
590
575
|
if missing:
|
|
591
576
|
return (
|
|
592
577
|
False,
|
|
593
578
|
"engineers-dev-sa is not fully modeled in repo truth yet: " + ", ".join(missing),
|
|
594
579
|
)
|
|
595
|
-
return True, "engineers-dev-sa is modeled in IAM plus prod
|
|
580
|
+
return True, "engineers-dev-sa is modeled in IAM plus prod DB repo truth."
|
|
596
581
|
|
|
597
582
|
|
|
598
583
|
def build_auth_report(
|
|
@@ -797,21 +782,7 @@ def build_auth_report(
|
|
|
797
782
|
level="error",
|
|
798
783
|
summary=summary,
|
|
799
784
|
fix=(
|
|
800
|
-
"Model engineers-dev-sa in `infra/production/iam/terragrunt.hcl` and `infra/production/database
|
|
801
|
-
if not ok
|
|
802
|
-
else None
|
|
803
|
-
),
|
|
804
|
-
)
|
|
805
|
-
|
|
806
|
-
if resolved_profile and resolved_profile.db_access and environment == "development":
|
|
807
|
-
ok, summary = _development_lane_is_codified()
|
|
808
|
-
add_check(
|
|
809
|
-
"development-lane-contract",
|
|
810
|
-
ok=ok,
|
|
811
|
-
level="error",
|
|
812
|
-
summary=summary,
|
|
813
|
-
fix=(
|
|
814
|
-
"Codify development-lane IAM users in `infra/production/database-dev/terragrunt.hcl` before treating dev auth as reliable."
|
|
785
|
+
"Model engineers-dev-sa in `infra/production/iam/terragrunt.hcl` and `infra/production/database/terragrunt.hcl` before treating it as the default engineer path."
|
|
815
786
|
if not ok
|
|
816
787
|
else None
|
|
817
788
|
),
|
|
@@ -19,11 +19,11 @@ app = typer.Typer(
|
|
|
19
19
|
)
|
|
20
20
|
db_app = typer.Typer(no_args_is_help=True, help="Database access recipes for local dev.")
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
22
|
+
_NO_DEVELOPMENT_CLUSTER = (
|
|
23
|
+
"The development lane has no AlloyDB cluster: buildai-india-dev was retired on "
|
|
24
|
+
"30 Oct 2026. Set ALLOYDB_CLUSTER, ALLOYDB_INSTANCE, ALLOYDB_REGION and DB_NAME "
|
|
25
|
+
"for the database you mean, or pass --env with another lane."
|
|
25
26
|
)
|
|
26
|
-
_DEFAULT_DEV_DATABASE = "buildai_dev"
|
|
27
27
|
_DEFAULT_STAGING_INSTANCE_URI = (
|
|
28
28
|
"projects/data-470400/locations/asia-south1/clusters/buildai-india-staging/"
|
|
29
29
|
"instances/buildai-india-staging-primary"
|
|
@@ -75,8 +75,8 @@ def _db_info_payload(
|
|
|
75
75
|
instance_uri = settings.alloydb_instance_uri
|
|
76
76
|
except RuntimeError:
|
|
77
77
|
if resolved_env == Environment.DEVELOPMENT:
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
raise typer.BadParameter(_NO_DEVELOPMENT_CLUSTER) from None
|
|
79
|
+
if resolved_env == Environment.STAGING:
|
|
80
80
|
instance_uri = _DEFAULT_STAGING_INSTANCE_URI
|
|
81
81
|
else:
|
|
82
82
|
raise
|
|
@@ -85,20 +85,14 @@ def _db_info_payload(
|
|
|
85
85
|
database_name = settings.db_name
|
|
86
86
|
except RuntimeError:
|
|
87
87
|
if resolved_env == Environment.DEVELOPMENT:
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
raise typer.BadParameter(_NO_DEVELOPMENT_CLUSTER) from None
|
|
89
|
+
if resolved_env == Environment.STAGING:
|
|
90
90
|
database_name = _DEFAULT_STAGING_DATABASE
|
|
91
91
|
else:
|
|
92
92
|
raise
|
|
93
93
|
|
|
94
94
|
private_only_note = None
|
|
95
|
-
if resolved_env == Environment.
|
|
96
|
-
private_only_note = (
|
|
97
|
-
"The development AlloyDB cluster is private-only. "
|
|
98
|
-
"If you are outside its VPC, run the Auth Proxy through an approved "
|
|
99
|
-
"intermediary path such as ALL_PROXY / PSC / VPN."
|
|
100
|
-
)
|
|
101
|
-
elif resolved_env == Environment.STAGING:
|
|
95
|
+
if resolved_env == Environment.STAGING:
|
|
102
96
|
private_only_note = (
|
|
103
97
|
"The staging AlloyDB cluster is private-only. Run "
|
|
104
98
|
"`buildai db --env staging tunnel`, then pass "
|
|
@@ -361,14 +361,15 @@ async def _local_connection(
|
|
|
361
361
|
- DB_HOST (default: localhost)
|
|
362
362
|
- DB_PORT (default: 5432)
|
|
363
363
|
- DB_USER (falls back to settings.db_user)
|
|
364
|
-
- DB_PASSWORD (falls back to
|
|
364
|
+
- DB_PASSWORD (falls back to the settings password; with neither set,
|
|
365
|
+
asyncpg's own PGPASSWORD / .pgpass lookup applies)
|
|
365
366
|
- DB_NAME (falls back to settings.db_name)
|
|
366
367
|
"""
|
|
367
368
|
conn = await asyncpg.connect(
|
|
368
369
|
host=os.getenv("DB_HOST", "localhost"),
|
|
369
370
|
port=int(os.getenv("DB_PORT", "5432")),
|
|
370
371
|
user=os.getenv("DB_USER") or settings.effective_db_user,
|
|
371
|
-
password=os.getenv("DB_PASSWORD") or settings.effective_alloydb_password or
|
|
372
|
+
password=os.getenv("DB_PASSWORD") or settings.effective_alloydb_password or None,
|
|
372
373
|
database=os.getenv("DB_NAME", settings.db_name), # Respect DB_NAME env var for CI
|
|
373
374
|
statement_cache_size=0,
|
|
374
375
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.rescaling-migration-jobs.dockerignore
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_export_closeout.sql
RENAMED
|
File without changes
|
{buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_export_prepare.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_export_closeout.sql
RENAMED
|
File without changes
|
{buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_export_prepare.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|