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.
Files changed (90) hide show
  1. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/.gitignore +7 -0
  2. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/PKG-INFO +1 -1
  3. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/auth_local.py +10 -39
  4. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/dev.py +9 -15
  5. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/context.py +3 -2
  6. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/pyproject.toml +1 -1
  7. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/AGENTS.md +0 -0
  8. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.hand-labels-export +0 -0
  9. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.hand-labels-export.dockerignore +0 -0
  10. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.rescaling-migration-jobs +0 -0
  11. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/Dockerfile.rescaling-migration-jobs.dockerignore +0 -0
  12. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/buildai_bootstrap.py +0 -0
  13. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/__init__.py +0 -0
  14. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/_has_core.py +0 -0
  15. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/__init__.py +0 -0
  16. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/api_proxy.py +0 -0
  17. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/auth.py +0 -0
  18. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/__init__.py +0 -0
  19. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/broker.py +0 -0
  20. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/common.py +0 -0
  21. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/migrate.py +0 -0
  22. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/query.py +0 -0
  23. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/rescaling.py +0 -0
  24. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/schema.py +0 -0
  25. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/status.py +0 -0
  26. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/db/tunnel.py +0 -0
  27. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/doctor.py +0 -0
  28. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/ego_frame_search.py +0 -0
  29. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/gigcamera.py +0 -0
  30. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/hand_labels_export.py +0 -0
  31. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/ingest.py +0 -0
  32. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/ingest_docs.py +0 -0
  33. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/intake.py +0 -0
  34. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/label_accounts.py +0 -0
  35. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/label_replay_recovery.py +0 -0
  36. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/labeling.py +0 -0
  37. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/processing.py +0 -0
  38. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/rescaling.py +0 -0
  39. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/spec.py +0 -0
  40. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/commands/spec_pr.py +0 -0
  41. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/config.py +0 -0
  42. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/console.py +0 -0
  43. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/db_broker.py +0 -0
  44. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/guard.py +0 -0
  45. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/internal_api.py +0 -0
  46. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/labeling_onboarding.py +0 -0
  47. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/main.py +0 -0
  48. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/nl_query/__init__.py +0 -0
  49. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/nl_query/dataset_tools.py +0 -0
  50. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/ops_init.py +0 -0
  51. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/output.py +0 -0
  52. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/pagination.py +0 -0
  53. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/__init__.py +0 -0
  54. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/canonical.py +0 -0
  55. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/export.py +0 -0
  56. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/feed_proofs.py +0 -0
  57. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/fence.py +0 -0
  58. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/importer.py +0 -0
  59. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/jobs.py +0 -0
  60. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/management.py +0 -0
  61. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/orchestrator.py +0 -0
  62. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/probes.py +0 -0
  63. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/reconcile.py +0 -0
  64. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/run_record.py +0 -0
  65. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/runtime.py +0 -0
  66. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_export_closeout.sql +0 -0
  67. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_export_prepare.sql +0 -0
  68. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_fence.sql +0 -0
  69. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/legacy_unfreeze.sql +0 -0
  70. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_export_closeout.sql +0 -0
  71. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_export_prepare.sql +0 -0
  72. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_fence.sql +0 -0
  73. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/sql/v2_unfreeze.sql +0 -0
  74. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/storage.py +0 -0
  75. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rescaling_migration/transform.py +0 -0
  76. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/cli/rls_guard.py +0 -0
  77. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/__init__.py +0 -0
  78. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/__main__.py +0 -0
  79. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/encode.py +0 -0
  80. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/export.py +0 -0
  81. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/reader.py +0 -0
  82. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/schema.py +0 -0
  83. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/store.py +0 -0
  84. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/hand_labels_export/validate.py +0 -0
  85. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_logical_backup/__init__.py +0 -0
  86. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_logical_backup/__main__.py +0 -0
  87. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_migration_job/__init__.py +0 -0
  88. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_migration_job/__main__.py +0 -0
  89. {buildai_cli-0.3.172 → buildai_cli-0.3.174}/rescaling_recovery_extractor/__init__.py +0 -0
  90. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: buildai-cli
3
- Version: 0.3.172
3
+ Version: 0.3.174
4
4
  Summary: Build AI CLI (Typer)
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: google-crc32c>=1.7.1
@@ -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 dev service account exists in repo truth."""
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
- db_paths = (
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
- for db_path in db_paths:
587
- if not db_path.exists() or "engineers-dev-sa@" not in db_path.read_text(encoding="utf-8"):
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/dev DB repo truth."
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-dev/terragrunt.hcl` before treating it as the default engineer path."
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
- _DEFAULT_DEV_INSTANCE_URI = (
23
- "projects/data-470400/locations/asia-south1/clusters/buildai-india-dev/"
24
- "instances/buildai-india-dev-primary"
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
- instance_uri = _DEFAULT_DEV_INSTANCE_URI
79
- elif resolved_env == Environment.STAGING:
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
- database_name = _DEFAULT_DEV_DATABASE
89
- elif resolved_env == Environment.STAGING:
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.DEVELOPMENT:
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 "postgres")
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 "postgres",
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
  )
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "buildai-cli"
7
- version = "0.3.172"
7
+ version = "0.3.174"
8
8
  description = "Build AI CLI (Typer)"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
File without changes
File without changes