atif-sql 0.3.0__tar.gz → 0.5.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.
- {atif_sql-0.3.0 → atif_sql-0.5.0}/PKG-INFO +5 -5
- {atif_sql-0.3.0 → atif_sql-0.5.0}/README.md +3 -3
- {atif_sql-0.3.0 → atif_sql-0.5.0}/docs/README.md +10 -8
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/README.md +5 -4
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/pyproject.toml +2 -2
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/README.md +6 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/pyproject.toml +7 -7
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/app.py +28 -6
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/README.md +6 -4
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/pyproject.toml +1 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/model_prices.json +2131 -1482
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/pricing.py +2 -2
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/schema_version.py +13 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/pyproject.toml +1 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/README.md +5 -5
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/pyproject.toml +2 -2
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/examples.py +2 -2
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/projections.py +1 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/registry.py +52 -17
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/stored_artifacts.py +40 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/README.md +13 -11
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/pyproject.toml +2 -2
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/corpus_text_rows.py +46 -15
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/README.md +2 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/pyproject.toml +1 -1
- {atif_sql-0.3.0 → atif_sql-0.5.0}/pyproject.toml +3 -10
- {atif_sql-0.3.0 → atif_sql-0.5.0}/.gitignore +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/.vale/styles/Google/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/.vale/styles/proselint/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/.vale/styles/proselint/README.md +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/analyze.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/prompts.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/use_cases/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/use_cases/_shared.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/use_cases/classify.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/use_cases/conflicts.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/use_cases/friction.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/application/use_cases/perceived.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/authorship.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/config.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/costs.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/friction.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/layout.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/models.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/ports.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/domain/transcript.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/corpus_reader.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/parquet_cache.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/settings.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/sqlite_state/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/sqlite_state/checkpointer.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/infrastructure/sqlite_state/retry_queue.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-analytics/src/atif_analytics/py.typed +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/__main__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/converter_adapter.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/corpus.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/cron.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/duck_errors.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/embed_lake.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/errors.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/lake.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/lake_sessions.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/output.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-cli/src/atif_cli/py.typed +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/application/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/application/convert_and_audit.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/application/convert_codex.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/agents.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/agent.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/content.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/final_metrics.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/metrics.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/observation.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/observation_result.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/step.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/subagent_trajectory_ref.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/tool_call.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/trajectory.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/atif/trajectory_validator.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/blobs.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/claude_code_conversion.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/codex_conversion.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/codex_edges.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/codex_enrichment.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/codex_fidelity.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/codex_nested_calls.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/edges.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/enrichment.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/errors.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/fidelity.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/result_signals.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/domain/session_events.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/census.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/claude_code_converter.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/codex_adapter.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/codex_census.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/codex_converter.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/harbor_adapter.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/raw_records.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/infrastructure/source_archive.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-converter/src/atif_converter/py.typed +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/README.md +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/application/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/application/materialize.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/agents.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/generation.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/layout.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/ports.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/session_id.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/sessions.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/slug.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/source_layout.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/domain/watermark.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/atomic.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/compress_artifacts.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/fake_converter.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/scanner.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/settings.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/infrastructure/source_archive.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-corpus/src/atif_corpus/py.typed +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/artifacts.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/authorship.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/catalog.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/columnar.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/embedding_guard.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/lake.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/lake_sessions.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/raw_readers.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/session_id.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/domain/sql_literal.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/analytics.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/authorship.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/columnar.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/lake.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/lake_sessions.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/lake_settings.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/infrastructure/lake_steps.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-duck/src/atif_duck/py.typed +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/application/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/application/embed.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/application/prune.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/discovery.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/embedding_guard.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/errors.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/ports.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/sql_literal.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/domain/text_stamp.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/cohere_bedrock.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/gemma_local.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/lake_text_rows.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/lance_store.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/providers.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/infrastructure/settings.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-embed/src/atif_embed/py.typed +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/LICENSE +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/domain/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/domain/ports.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/domain/registry.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/domain/schema.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/infrastructure/__init__.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/infrastructure/anthropic_bedrock.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/infrastructure/bedrock_common.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/infrastructure/openai_bedrock.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/infrastructure/providers.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/infrastructure/settings.py +0 -0
- {atif_sql-0.3.0 → atif_sql-0.5.0}/packages/atif-models/src/atif_models/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: atif-sql
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: ATIF-native analytics over Claude Code agent trajectories: convert, materialize, and query agent sessions with DuckDB.
|
|
5
5
|
Project-URL: Homepage, https://github.com/laithalsaadoon/atif-sql
|
|
6
6
|
Project-URL: Repository, https://github.com/laithalsaadoon/atif-sql
|
|
@@ -21,7 +21,7 @@ Requires-Dist: anthropic>=1.11.0
|
|
|
21
21
|
Requires-Dist: anyio>=4.11.0
|
|
22
22
|
Requires-Dist: boto3>=1.42.91
|
|
23
23
|
Requires-Dist: cyclopts>=5.1.1
|
|
24
|
-
Requires-Dist: duckdb<2
|
|
24
|
+
Requires-Dist: duckdb<3,>=2.0.0
|
|
25
25
|
Requires-Dist: imagesize>=2.0
|
|
26
26
|
Requires-Dist: lancedb<0.40,>=0.30
|
|
27
27
|
Requires-Dist: loguru>=0.7.3
|
|
@@ -149,7 +149,7 @@ the only thing documented as installable is the `atif-sql` CLI above.
|
|
|
149
149
|
| `atif-converter` | Claude Code and Codex CLI transcript → ATIF converters (ours, built on Harbor's ATIF models, vendored) + per-agent fidelity policy (loss accounting per session) |
|
|
150
150
|
| `atif-corpus` | Corpus materialization: discovery, watermarks, quiescence, atomic artifact writes |
|
|
151
151
|
| `atif-duck` | DuckDB views + macros over the materialized corpus (core surface plus the v2 analytics surface) |
|
|
152
|
-
| `atif-models` | Model alias registry + structured-output LLM clients for GPT-6 and Claude 5.5 on Bedrock; no other package hardcodes
|
|
152
|
+
| `atif-models` | Model alias registry + structured-output LLM clients for GPT-6 and Claude 5.5 on Bedrock; no other package hardcodes an LLM model id |
|
|
153
153
|
| `atif-analytics` | the LLM pipelines `atif-sql analyze` runs: classify, conflicts, friction, and perceived |
|
|
154
154
|
| `atif-embed` | Cohere Embed v4 on Bedrock or EmbeddingGemma 2 on this machine + LanceDB vector store + embedding backfill |
|
|
155
155
|
| `atif-cli` | the composition root, and the source of the `atif-sql` command (see [What you can do](#what-you-can-do)) |
|
|
@@ -194,7 +194,7 @@ matching `ATIF_SQL_*` env var still wins.
|
|
|
194
194
|
```bash
|
|
195
195
|
atif-sql materialize --agent codex
|
|
196
196
|
atif-sql status --agent codex
|
|
197
|
-
atif-sql query "SELECT agent, count(*) FROM sessions GROUP BY 1"
|
|
197
|
+
atif-sql query --agent codex "SELECT agent, count(*) FROM sessions GROUP BY 1"
|
|
198
198
|
```
|
|
199
199
|
|
|
200
200
|
One corpus holds one agent, so a Codex corpus and a Claude Code corpus stay
|
|
@@ -269,7 +269,7 @@ vulnerability in a tool that reads local transcripts are in
|
|
|
269
269
|
corpus is registered (override with `ATIF_SQL_QUERY_MEMORY_LIMIT` and `ATIF_SQL_QUERY_THREADS`),
|
|
270
270
|
a private spill directory outside the corpus that's removed on exit, no extension installs at
|
|
271
271
|
query time (`atif-sql embed --install-extension` is where the lance extension comes from), file
|
|
272
|
-
facing statements (`COPY`, `EXPORT`, `ATTACH`, `INSTALL`, `LOAD`, `PREPARE`, `EXECUTE`) refused
|
|
272
|
+
facing statements (`COPY`, `EXPORT`, `ATTACH`, `DETACH`, `INSTALL`, `LOAD`, `PREPARE`, `EXECUTE`) refused
|
|
273
273
|
before they run, and a refusal to run as root unless `ATIF_SQL_ALLOW_ROOT=1` says so. The details
|
|
274
274
|
and the one accepted disclosure (`duckdb_settings()` lists the granted paths) are in
|
|
275
275
|
[docs/reference/cli.md](docs/reference/cli.md#query).
|
|
@@ -107,7 +107,7 @@ the only thing documented as installable is the `atif-sql` CLI above.
|
|
|
107
107
|
| `atif-converter` | Claude Code and Codex CLI transcript → ATIF converters (ours, built on Harbor's ATIF models, vendored) + per-agent fidelity policy (loss accounting per session) |
|
|
108
108
|
| `atif-corpus` | Corpus materialization: discovery, watermarks, quiescence, atomic artifact writes |
|
|
109
109
|
| `atif-duck` | DuckDB views + macros over the materialized corpus (core surface plus the v2 analytics surface) |
|
|
110
|
-
| `atif-models` | Model alias registry + structured-output LLM clients for GPT-6 and Claude 5.5 on Bedrock; no other package hardcodes
|
|
110
|
+
| `atif-models` | Model alias registry + structured-output LLM clients for GPT-6 and Claude 5.5 on Bedrock; no other package hardcodes an LLM model id |
|
|
111
111
|
| `atif-analytics` | the LLM pipelines `atif-sql analyze` runs: classify, conflicts, friction, and perceived |
|
|
112
112
|
| `atif-embed` | Cohere Embed v4 on Bedrock or EmbeddingGemma 2 on this machine + LanceDB vector store + embedding backfill |
|
|
113
113
|
| `atif-cli` | the composition root, and the source of the `atif-sql` command (see [What you can do](#what-you-can-do)) |
|
|
@@ -152,7 +152,7 @@ matching `ATIF_SQL_*` env var still wins.
|
|
|
152
152
|
```bash
|
|
153
153
|
atif-sql materialize --agent codex
|
|
154
154
|
atif-sql status --agent codex
|
|
155
|
-
atif-sql query "SELECT agent, count(*) FROM sessions GROUP BY 1"
|
|
155
|
+
atif-sql query --agent codex "SELECT agent, count(*) FROM sessions GROUP BY 1"
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
One corpus holds one agent, so a Codex corpus and a Claude Code corpus stay
|
|
@@ -227,7 +227,7 @@ vulnerability in a tool that reads local transcripts are in
|
|
|
227
227
|
corpus is registered (override with `ATIF_SQL_QUERY_MEMORY_LIMIT` and `ATIF_SQL_QUERY_THREADS`),
|
|
228
228
|
a private spill directory outside the corpus that's removed on exit, no extension installs at
|
|
229
229
|
query time (`atif-sql embed --install-extension` is where the lance extension comes from), file
|
|
230
|
-
facing statements (`COPY`, `EXPORT`, `ATTACH`, `INSTALL`, `LOAD`, `PREPARE`, `EXECUTE`) refused
|
|
230
|
+
facing statements (`COPY`, `EXPORT`, `ATTACH`, `DETACH`, `INSTALL`, `LOAD`, `PREPARE`, `EXECUTE`) refused
|
|
231
231
|
before they run, and a refusal to run as root unless `ATIF_SQL_ALLOW_ROOT=1` says so. The details
|
|
232
232
|
and the one accepted disclosure (`duckdb_settings()` lists the granted paths) are in
|
|
233
233
|
[docs/reference/cli.md](docs/reference/cli.md#query).
|
|
@@ -6,9 +6,11 @@ this codebase quietly assumes. Every factual claim carries a `path:LOC` citation
|
|
|
6
6
|
Prose is generated; structure is mechanical. Cross-references are deterministic.
|
|
7
7
|
|
|
8
8
|
Citations come as full paths or as shorthands, and each one resolves into a
|
|
9
|
-
source file.
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
source file. The docs site build turns each one into a link and fails on the first citation naming
|
|
10
|
+
a file that does not exist at the commit it links to, or a shorthand with no resolvable antecedent.
|
|
11
|
+
`mise run docs:citations` also fails on a line outside its file and, against the base commit, on a
|
|
12
|
+
citation whose cited lines a change moved or removed without editing the citation, so a citation
|
|
13
|
+
here resolves to the code it names or the tree does not ship.
|
|
12
14
|
|
|
13
15
|
## Start here
|
|
14
16
|
|
|
@@ -24,8 +26,8 @@ first one, so a citation here resolves or the tree does not ship.
|
|
|
24
26
|
|
|
25
27
|
- [System overview](architecture/system-overview.md): the short version, the stack, and one
|
|
26
28
|
diagram of the workspace members.
|
|
27
|
-
- [Module map](architecture/module-map.md): one section per member,
|
|
28
|
-
|
|
29
|
+
- [Module map](architecture/module-map.md): one section per member, with the files in each that
|
|
30
|
+
carry the weight.
|
|
29
31
|
- [Data flow](architecture/data-flow.md): the flows (`materialize`, `query`, `analyze`) traced end
|
|
30
32
|
to end, each as a sequence diagram.
|
|
31
33
|
|
|
@@ -75,11 +77,11 @@ first one, so a citation here resolves or the tree does not ship.
|
|
|
75
77
|
|
|
76
78
|
## Documents this tree deliberately omits
|
|
77
79
|
|
|
78
|
-
- **`analysis/ownership.md`**: the history
|
|
79
|
-
|
|
80
|
+
- **`analysis/ownership.md`**: every commit in the history names either the one maintainer or a
|
|
81
|
+
GitHub bot account. A per-person ranked table and a bus-factor list would be noise dressed as
|
|
80
82
|
analysis.
|
|
81
83
|
- **`reference/rpc-tools.md`**: there is no RPC, MCP, or HTTP surface. `fastapi`, `uvicorn`,
|
|
82
|
-
`starlette`, and the supabase client stack do appear in the
|
|
84
|
+
`starlette`, and the supabase client stack do appear in the locked dev dependency closure, arriving
|
|
83
85
|
transitively through harbor, and no first-party module imports any of them.
|
|
84
86
|
|
|
85
87
|
An empty file in either slot would imply absence by omission rather than by silence, which is why
|
|
@@ -6,8 +6,8 @@ The v2 analytics pipelines over the materialized ATIF corpus:
|
|
|
6
6
|
read the materialized corpus (`trajectory.json` steps + `edges.jsonl`,
|
|
7
7
|
each stored compressed or plain),
|
|
8
8
|
render session transcripts under the documented caps, and classify through
|
|
9
|
-
`atif_models.LlmStructuredProvider` (GPT-6 or Claude 5.5
|
|
10
|
-
outputs on bedrock-runtime; sizes classify=small, conflicts=large,
|
|
9
|
+
`atif_models.domain.ports.LlmStructuredProvider` (GPT-6 or Claude 5.5
|
|
10
|
+
structured outputs on bedrock-runtime; sizes classify=small, conflicts=large,
|
|
11
11
|
friction=small, perceived=medium). `classify` labels `work_category` and `goal` only.
|
|
12
12
|
`classify` and `conflicts` skip non-interactive sessions (`turn_audit`,
|
|
13
13
|
`one_shot_job`), and `friction` and `perceived` read human turns only.
|
|
@@ -25,8 +25,9 @@ The v2 analytics pipelines over the materialized ATIF corpus:
|
|
|
25
25
|
sharded parquet caches under `<corpus_root>/analytics/<name>/`.
|
|
26
26
|
|
|
27
27
|
Composition: atif-analytics imports **only** atif-models among the workspace
|
|
28
|
-
packages (import-linter
|
|
29
|
-
atif-
|
|
28
|
+
packages (import-linter forbidden contract); atif-cli composes it via the
|
|
29
|
+
`atif-sql analyze` command, handing it a session source over atif-duck's lake
|
|
30
|
+
(`atif_cli.lake_sessions`).
|
|
30
31
|
|
|
31
32
|
All pipelines default to `dry_run=True` and return plan dicts with
|
|
32
33
|
`estimate_cost_tokens` projections (cost guard per CONTRACT-V2).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "atif-analytics"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.5.0"
|
|
4
4
|
description = "LLM analytics pipelines over the materialized ATIF corpus: session classification, stance conflicts, user friction, and perceived errors."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -20,7 +20,7 @@ dependencies = [
|
|
|
20
20
|
# a LOCAL source an external installer never sees, so a bare name would ship as
|
|
21
21
|
# `Requires-Dist: atif-models` and resolve to whatever the newest release of
|
|
22
22
|
# that name is. `[tool.commitizen] version_files` rewrites this line on a bump.
|
|
23
|
-
"atif-models==0.
|
|
23
|
+
"atif-models==0.5.0",
|
|
24
24
|
"loguru>=0.7.3",
|
|
25
25
|
"polars>=1.40.0",
|
|
26
26
|
"pyarrow>=23.0.1",
|
|
@@ -16,7 +16,7 @@ atif-sql materialize [--force] [--quiesce-seconds N]
|
|
|
16
16
|
[--sessions id,id] # contract-compatible extension:
|
|
17
17
|
# plan only the named sessions
|
|
18
18
|
atif-sql status # corpus freshness, read-only
|
|
19
|
-
atif-sql query 'SQL' [--format auto|json|csv]
|
|
19
|
+
atif-sql query 'SQL' [--format auto|table|json|csv]
|
|
20
20
|
atif-sql schema # static catalog, no duckdb bind, <50ms
|
|
21
21
|
atif-sql examples # tested example queries per view/macro
|
|
22
22
|
# (alias: atif-sql query --examples)
|
|
@@ -27,6 +27,11 @@ atif-sql embed --all --no-dry-run # embed corpus steps into LanceDB
|
|
|
27
27
|
atif-sql search '<text>' # embed the text, then semantic kNN
|
|
28
28
|
atif-sql cron install | status # print the refresh crontab block, or
|
|
29
29
|
# report lane locks + last runs
|
|
30
|
+
atif-sql lake rebuild | verify | status | compact
|
|
31
|
+
# build, check, report on, and compact
|
|
32
|
+
# the DuckLake every query reads
|
|
33
|
+
atif-sql corpus slim [--no-dry-run] # convert a corpus to the compressed
|
|
34
|
+
# layout; a dry run by default
|
|
30
35
|
```
|
|
31
36
|
|
|
32
37
|
Conventions: `--format auto` resolves to a table on a TTY and JSON on a pipe;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# import-linter can read what it is allowed to import, and so its tests have a
|
|
6
6
|
# home — none of which needs an index.
|
|
7
7
|
name = "atif-cli"
|
|
8
|
-
version = "0.
|
|
8
|
+
version = "0.5.0"
|
|
9
9
|
description = "ATIF-native analytics over Claude Code agent trajectories: convert, materialize, and query agent sessions with DuckDB."
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
license = "Apache-2.0"
|
|
@@ -29,17 +29,17 @@ dependencies = [
|
|
|
29
29
|
# namespace to whatever the newest release of that name is, by whoever owns it.
|
|
30
30
|
# One version moves the whole workspace, so `==` is the honest constraint, and
|
|
31
31
|
# `[tool.commitizen] version_files` rewrites every one of these on each bump.
|
|
32
|
-
"atif-analytics==0.
|
|
33
|
-
"atif-converter==0.
|
|
34
|
-
"atif-corpus==0.
|
|
35
|
-
"atif-duck==0.
|
|
36
|
-
"atif-embed==0.
|
|
32
|
+
"atif-analytics==0.5.0",
|
|
33
|
+
"atif-converter==0.5.0",
|
|
34
|
+
"atif-corpus==0.5.0",
|
|
35
|
+
"atif-duck==0.5.0",
|
|
36
|
+
"atif-embed==0.5.0",
|
|
37
37
|
"cyclopts>=5.1.1",
|
|
38
38
|
# Imported directly by duck_errors.py to classify a DuckDB failure into the
|
|
39
39
|
# parse/catalog/runtime exit-code taxonomy. Reaching it transitively through
|
|
40
40
|
# atif-duck would make this package's exit codes depend on a sibling's
|
|
41
41
|
# dependency choice.
|
|
42
|
-
"duckdb>=
|
|
42
|
+
"duckdb>=2.0.0,<3",
|
|
43
43
|
"loguru>=0.7.3",
|
|
44
44
|
]
|
|
45
45
|
|
|
@@ -454,6 +454,15 @@ def _refuse_root(command: str, fmt: OutputFormat) -> None:
|
|
|
454
454
|
#: PREPARE and EXECUTE (a prepared COPY parses as PREPARE). An allowlist, so a
|
|
455
455
|
#: statement kind a future DuckDB adds is refused until someone reads what it
|
|
456
456
|
#: does.
|
|
457
|
+
#:
|
|
458
|
+
#: PRAGMA and MULTI are out because DuckDB 2.0's parser no longer says what
|
|
459
|
+
#: they hold. 1.5 expanded a PRAGMA while parsing, so ``PRAGMA table_info``
|
|
460
|
+
#: came back as SELECT and ``COPY FROM DATABASE`` as COPY_DATABASE; 2.0 hands
|
|
461
|
+
#: back the unexpanded PRAGMA for every pragma and for ``COPY FROM DATABASE``
|
|
462
|
+
#: and ``IMPORT DATABASE`` alike, and one MULTI for a PIVOT that has to build
|
|
463
|
+
#: its column list first, whatever statement wraps it (``COPY (PIVOT ...) TO``
|
|
464
|
+
#: is one MULTI). Their SELECT forms still run: ``pragma_table_info('t')``,
|
|
465
|
+
#: ``DESCRIBE``, ``SHOW TABLES``, and PIVOT with an explicit ``IN`` list.
|
|
457
466
|
_QUERY_STATEMENT_KINDS: frozenset[str] = frozenset(
|
|
458
467
|
{
|
|
459
468
|
"SELECT",
|
|
@@ -469,7 +478,6 @@ _QUERY_STATEMENT_KINDS: frozenset[str] = frozenset(
|
|
|
469
478
|
"DELETE",
|
|
470
479
|
"MERGE_INTO",
|
|
471
480
|
"CALL",
|
|
472
|
-
"PRAGMA",
|
|
473
481
|
"TRANSACTION",
|
|
474
482
|
"VACUUM",
|
|
475
483
|
"ANALYZE",
|
|
@@ -485,10 +493,17 @@ def _refused_statement_kinds(con: Any, sql: str) -> list[str]:
|
|
|
485
493
|
connection so a PRAGMA that reads a file while parsing meets the same
|
|
486
494
|
allowlist the query would. A parse error propagates as DuckDB's own
|
|
487
495
|
``ParserException`` (exit 64), exactly as ``execute`` would have raised it.
|
|
496
|
+
|
|
497
|
+
A statement whose type the Python binding has no member for is refused as
|
|
498
|
+
``UNKNOWN``: DuckDB 2.0's ``StatementType`` raises ``ValueError`` there
|
|
499
|
+
(``UPDATE EXTENSIONS`` is type 29), where 1.5 answered ``???``.
|
|
488
500
|
"""
|
|
489
501
|
refused: list[str] = []
|
|
490
502
|
for statement in con.extract_statements(sql):
|
|
491
|
-
|
|
503
|
+
try:
|
|
504
|
+
kind = str(statement.type.name)
|
|
505
|
+
except ValueError:
|
|
506
|
+
kind = "UNKNOWN"
|
|
492
507
|
if kind not in _QUERY_STATEMENT_KINDS and kind not in refused:
|
|
493
508
|
refused.append(kind)
|
|
494
509
|
return refused
|
|
@@ -557,7 +572,7 @@ def _harden_query_connection(
|
|
|
557
572
|
``register`` bound this connection to). A file grant lets
|
|
558
573
|
``read_parquet`` open that exact path. Nothing else under the corpus
|
|
559
574
|
is named, so ``read_text`` of a ``trajectory.json`` is refused. DuckDB
|
|
560
|
-
|
|
575
|
+
has no read-only grant, on 1.5.5 or 2.0.0 (measured: a ``read_parquet`` relation
|
|
561
576
|
bound before ``enable_external_access=false`` is refused at query time
|
|
562
577
|
without a grant, and ``duckdb_settings()`` lists no write switch), so
|
|
563
578
|
each grant is read-write and ``COPY ... TO <granted parquet>
|
|
@@ -1364,7 +1379,11 @@ def query(
|
|
|
1364
1379
|
parquet> (USE_TMP_FILE false)`` used to overwrite one, so every
|
|
1365
1380
|
statement kind that names a file is refused BEFORE execution, for any
|
|
1366
1381
|
uid, by DuckDB's own parser: COPY, EXPORT, ATTACH, DETACH, INSTALL,
|
|
1367
|
-
LOAD, and PREPARE/EXECUTE (which could defer one).
|
|
1382
|
+
LOAD, and PREPARE/EXECUTE (which could defer one). So are PRAGMA and
|
|
1383
|
+
MULTI, which DuckDB 2.0 no longer expands while parsing (a PRAGMA can be
|
|
1384
|
+
``COPY FROM DATABASE`` or ``IMPORT DATABASE``, and a MULTI can wrap a
|
|
1385
|
+
COPY): run ``pragma_table_info(...)``, ``DESCRIBE`` or ``SHOW`` instead,
|
|
1386
|
+
and give a PIVOT an explicit ``IN`` list. Exit 70, kind
|
|
1368
1387
|
``sandbox_refused``.
|
|
1369
1388
|
* A 0444 file mode does not bind root, so ``query`` refuses to run as
|
|
1370
1389
|
uid 0 (exit 77) unless ``ATIF_SQL_ALLOW_ROOT=1`` is set, which logs a
|
|
@@ -1405,7 +1424,7 @@ def query(
|
|
|
1405
1424
|
* 65 catalog_error unknown view/macro/column (try ``atif-sql schema``)
|
|
1406
1425
|
* 65 embedding_mismatch the Lance store was written by another provider
|
|
1407
1426
|
* 70 sandbox_refused a statement kind the sandbox never runs (COPY,
|
|
1408
|
-
EXPORT, ATTACH, INSTALL, LOAD, PREPARE, ...)
|
|
1427
|
+
EXPORT, ATTACH, INSTALL, LOAD, PREPARE, PRAGMA, ...)
|
|
1409
1428
|
* 70 runtime_error everything else (an unmaterialized corpus, or SQL
|
|
1410
1429
|
the sandbox refused)
|
|
1411
1430
|
* 77 root_refused running as uid 0 without ``ATIF_SQL_ALLOW_ROOT=1``
|
|
@@ -1507,7 +1526,10 @@ def query(
|
|
|
1507
1526
|
message=f"the query sandbox does not run {', '.join(refused)} statements",
|
|
1508
1527
|
hint="query runs SELECT and in-memory DDL/DML only; COPY, EXPORT, "
|
|
1509
1528
|
"ATTACH, DETACH, INSTALL, LOAD, PREPARE and EXECUTE are refused "
|
|
1510
|
-
"because they reach files or defer a statement past this check"
|
|
1529
|
+
"because they reach files or defer a statement past this check, and "
|
|
1530
|
+
"PRAGMA and MULTI because the parser no longer says what they hold "
|
|
1531
|
+
"(use pragma_table_info(...), DESCRIBE or SHOW for a PRAGMA, and an "
|
|
1532
|
+
"explicit IN list for a PIVOT)",
|
|
1511
1533
|
)
|
|
1512
1534
|
emit_error(err, fmt)
|
|
1513
1535
|
raise SystemExit(err.exit_code)
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Converts Claude Code session JSONL and Codex rollouts into ATIF trajectories
|
|
4
4
|
(converters ported from harbor and held to parity with harbor 0.24.0, on harbor's ATIF models vendored in
|
|
5
|
-
`atif_converter.domain.atif`), and owns the FIDELITY POLICY: the
|
|
6
|
-
conversion gaps are encoded as `atif_converter.domain.fidelity.FidelityGap
|
|
5
|
+
`atif_converter.domain.atif`), and owns the FIDELITY POLICY: the known upstream
|
|
6
|
+
conversion gaps are encoded as `atif_converter.domain.fidelity.FidelityGap` (six
|
|
7
|
+
for Claude Code, plus one retired number) and
|
|
8
|
+
`atif_converter.domain.codex_fidelity.CodexFidelityGap` (six for Codex),
|
|
7
9
|
and every conversion is audited into a `LossReport` (raw-side census vs
|
|
8
10
|
converted output). harbor is a dev dependency only; the tests pin harbor 0.24.0
|
|
9
11
|
behavior and hold the vendored models to it, so they are the drift alarm for a
|
|
@@ -14,7 +16,7 @@ harbor bump.
|
|
|
14
16
|
`LossReport.record_counts` (and therefore `records_total` / `records_dropped`)
|
|
15
17
|
counts every record of every `*.jsonl` discovered under the session's side
|
|
16
18
|
directory, at any depth and regardless of whether a `subagents/` part appears
|
|
17
|
-
in the path. That is the same file set the
|
|
19
|
+
in the path. That is the same file set the converter reads and the
|
|
18
20
|
same set `edges.jsonl` is built from, so `records_total` always equals the
|
|
19
21
|
edges line count. A session with a side-file outside `subagents/` reports a
|
|
20
22
|
higher `records_total` than a census scoped to `subagents/` alone would.
|
|
@@ -27,7 +29,7 @@ value: `atif_converter.domain.pricing` returns the same floats, bit for bit,
|
|
|
27
29
|
without litellm being installed. It reads `domain/model_prices.json`, a
|
|
28
30
|
filtered copy of litellm's public `model_prices_and_context_window.json` (MIT;
|
|
29
31
|
the notice and source ref are in its `meta` block), and repeats litellm
|
|
30
|
-
1.
|
|
32
|
+
1.104.2's arithmetic in the same float operation order. The table holds the
|
|
31
33
|
Claude and OpenAI text models our transcripts name under the `anthropic`,
|
|
32
34
|
`openai`, `bedrock` and `bedrock_converse` providers, and keeps litellm's
|
|
33
35
|
`fallback_generalizations` rules, which route an unmapped `claude-<family>-<n>`
|