agentflow-runtime 1.1.0__tar.gz → 1.2.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.
Files changed (106) hide show
  1. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/.gitignore +4 -0
  2. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/CHANGELOG.md +81 -2
  3. agentflow_runtime-1.2.0/PKG-INFO +255 -0
  4. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/README.md +37 -21
  5. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/pyproject.toml +40 -6
  6. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/outbox.py +2 -1
  7. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/monitors/freshness_monitor.py +1 -1
  8. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/validators/schema_validator.py +3 -3
  9. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/analytics.py +9 -7
  10. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/auth/key_rotation.py +3 -2
  11. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/auth/manager.py +3 -0
  12. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/auth/middleware.py +14 -4
  13. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/admin_ui.py +2 -1
  14. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/lineage.py +9 -3
  15. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/stream.py +4 -1
  16. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/security.py +13 -2
  17. agentflow_runtime-1.2.0/src/serving/audit_publisher.py +80 -0
  18. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/backends/duckdb_backend.py +2 -1
  19. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/cache.py +10 -1
  20. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/db_pool.py +3 -1
  21. agentflow_runtime-1.2.0/src/serving/duckdb_connection.py +72 -0
  22. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/entity_type_registry.py +3 -1
  23. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/engine.py +2 -1
  24. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/search_index.py +2 -0
  25. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/sql_guard.py +25 -0
  26. agentflow_runtime-1.1.0/PKG-INFO +0 -55
  27. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/LICENSE +0 -0
  28. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/requirements.txt +0 -0
  29. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/__init__.py +0 -0
  30. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/constants.py +0 -0
  31. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/__init__.py +0 -0
  32. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/cdc/__init__.py +0 -0
  33. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/cdc/normalizer.py +0 -0
  34. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/connectors/__init__.py +0 -0
  35. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/connectors/mysql_cdc.py +0 -0
  36. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/connectors/postgres_cdc.py +0 -0
  37. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/producers/__init__.py +0 -0
  38. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/producers/event_producer.py +0 -0
  39. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/schemas/__init__.py +0 -0
  40. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/schemas/events.py +0 -0
  41. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/ingestion/tenant_router.py +0 -0
  42. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/logger.py +0 -0
  43. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/orchestration/__init__.py +0 -0
  44. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/orchestration/dags/__init__.py +0 -0
  45. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/orchestration/dags/daily_batch.py +0 -0
  46. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/__init__.py +0 -0
  47. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/event_replayer.py +0 -0
  48. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/flink_jobs/Dockerfile +0 -0
  49. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/flink_jobs/__init__.py +0 -0
  50. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/flink_jobs/checkpointing.py +0 -0
  51. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/flink_jobs/session_aggregation.py +0 -0
  52. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/flink_jobs/session_aggregator.py +0 -0
  53. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/flink_jobs/stream_processor.py +0 -0
  54. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/iceberg_sink.py +0 -0
  55. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/local_pipeline.py +0 -0
  56. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/tracing.py +0 -0
  57. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/transformations/__init__.py +0 -0
  58. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/processing/transformations/enrichment.py +0 -0
  59. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/__init__.py +0 -0
  60. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/monitors/__init__.py +0 -0
  61. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/monitors/metrics_collector.py +0 -0
  62. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/validators/__init__.py +0 -0
  63. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/quality/validators/semantic_validator.py +0 -0
  64. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/__init__.py +0 -0
  65. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/__init__.py +0 -0
  66. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/alert_dispatcher.py +0 -0
  67. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/alerts/__init__.py +0 -0
  68. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/alerts/dispatcher.py +0 -0
  69. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/alerts/escalation.py +0 -0
  70. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/alerts/evaluator.py +0 -0
  71. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/alerts/history.py +0 -0
  72. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/auth/__init__.py +0 -0
  73. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/main.py +0 -0
  74. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/middleware/logging.py +0 -0
  75. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/middleware/tracing.py +0 -0
  76. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/rate_limiter.py +0 -0
  77. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/__init__.py +0 -0
  78. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/admin.py +0 -0
  79. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/agent_query.py +0 -0
  80. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/alerts.py +0 -0
  81. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/batch.py +0 -0
  82. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/contracts.py +0 -0
  83. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/deadletter.py +0 -0
  84. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/search.py +0 -0
  85. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/slo.py +0 -0
  86. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/routers/webhooks.py +0 -0
  87. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/telemetry.py +0 -0
  88. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/templates/admin.html +0 -0
  89. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/versioning.py +0 -0
  90. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/api/webhook_dispatcher.py +0 -0
  91. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/backends/__init__.py +0 -0
  92. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/backends/clickhouse_backend.py +0 -0
  93. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/masking.py +0 -0
  94. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/__init__.py +0 -0
  95. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/catalog.py +0 -0
  96. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/contract_registry.py +0 -0
  97. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/nl_engine.py +0 -0
  98. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/__init__.py +0 -0
  99. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/contracts.py +0 -0
  100. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/entity_queries.py +0 -0
  101. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/metric_queries.py +0 -0
  102. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/nl_queries.py +0 -0
  103. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/sql_builder.py +0 -0
  104. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query/sql_guard.py +0 -0
  105. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/query_engine.py +0 -0
  106. {agentflow_runtime-1.1.0 → agentflow_runtime-1.2.0}/src/serving/semantic_layer/schema_evolution.py +0 -0
@@ -72,6 +72,7 @@ mutants/
72
72
  /rep.md
73
73
  /more_help.md
74
74
  /About_DE_project.md
75
+ /audit_*.md
75
76
  /RELEASING.md
76
77
  sdk/agentflow/**/__pycache__/
77
78
  sdk/agentflow/**/*.py[cod]
@@ -84,5 +85,8 @@ integrations/agentflow_integrations/**/*.py[cod]
84
85
  agentflow_bench_debug*.duckdb*
85
86
  agentflow_demo_api.duckdb*
86
87
 
88
+ # Local autopilot runtime state.
89
+ .autopilot/
90
+
87
91
  # Security scan workdir (generated by .github/workflows/security.yml safety job)
88
92
  .tmp-security/
@@ -4,6 +4,51 @@ All notable changes to AgentFlow are documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.2.0] - 2026-05-23
8
+
9
+ ### Documentation
10
+
11
+ - Documented the demo-key requirement, current DuckDB/ClickHouse serving
12
+ story, Docker Redis dependency for the local demo, example-agent dry-run
13
+ flow, and local compose environment placeholders.
14
+ - Refreshed release, SDK, and integrations docs after the live v1.1.0
15
+ registry publish: README status, release-readiness handoff, SDK README,
16
+ integrations local-install note, and the T31 task closeout now match the
17
+ current post-release state.
18
+ - Prepared npm publishing for Trusted Publishing through GitHub Actions OIDC:
19
+ the TypeScript SDK publish workflow now requires npm CLI 11.5.1+ and no
20
+ longer passes `NPM_TOKEN` to the production `npm publish` step.
21
+ - Recorded the npm Trusted Publishing handoff: the new package was first
22
+ published as `@yuliaedomskikh/agentflow-client@1.1.0`, Trusted Publisher
23
+ setup succeeded for `brownjuly2003-code/agentflow` with workflow
24
+ `publish-npm.yml`, CLI `npm trust list` readback is complete, and future
25
+ recovery-code use must keep a two-code reserve through the
26
+ `npm-recovery-codes` skill.
27
+ - Documented the completed replacement npm account bootstrap for
28
+ `yulia.edomskikh@gmail.com`, the saved 2FA recovery-code reserve, and the
29
+ switch of future TypeScript SDK publishing to
30
+ `@yuliaedomskikh/agentflow-client`.
31
+ - Clarified that legacy `NPM_TOKEN` revocation remains blocked until a
32
+ successful trusted-publish workflow run for `@yuliaedomskikh/agentflow-client`
33
+ and accepted external-gate intake evidence exist.
34
+ - Added a project-local Pi skill at `.pi/skills/external-gate-evidence-intake`
35
+ for external release-gate evidence intake without adding runtime dependencies.
36
+ - Added a production CDC onboarding runbook that blocks real source attachment
37
+ until source ownership, table scope, network path, credential ownership,
38
+ monitoring, and rollback decisions are recorded.
39
+
40
+ ### Fixed
41
+
42
+ - Treated corrupt Redis cache payloads as cache misses instead of surfacing
43
+ JSON decode failures to API requests.
44
+ - Fixed TypeScript SDK SSE parsing so a final frame with `id:` or `event:`
45
+ metadata before `data:` is still emitted.
46
+ - Made the TypeScript SDK unit-test script include all `sdk-ts/tests` files and
47
+ included `CHANGELOG.md` in the npm dry-run package contents.
48
+ - Allowed packaged SDK starter templates to include placeholder
49
+ `.env.example.tmpl` files while keeping the release artifact checker strict
50
+ for real `.env` files, API-key configs, webhook configs, and secret paths.
51
+
7
52
  ### Security (audit follow-up sprint 2026-04-27/28)
8
53
 
9
54
  Two external audits delivered against `4a13d36` (Claude Opus + Codex p1–p9,
@@ -78,7 +123,10 @@ off by default (enable per cluster).
78
123
  `npm ci` + `npm test` + `npm audit` before publish. New `npm-audit` job
79
124
  added to `security.yml`. `aquasecurity/trivy-action` pinned from
80
125
  `@master` to `0.28.0`. Safety scope now includes
81
- `integrations/pyproject.toml` resolved requirements.
126
+ `integrations/pyproject.toml` resolved requirements. TypeScript SDK npm
127
+ publishing now targets `@yuliaedomskikh/agentflow-client` because npm org scope
128
+ `@agentflow` is already owned by another project and the previous user scope is
129
+ legacy.
82
130
 
83
131
  **Vulnerable dep bumps:** `dagster>=1.13.1` (GHSA-mjw2-v2hm-wj34
84
132
  SQL injection via dynamic partition keys), `langchain-core>=1.2.22`
@@ -147,7 +195,7 @@ so the test bypass flag does not leak across `TestClient` instances
147
195
  (closes Codex review P2 on auth/middleware persistence).
148
196
 
149
197
  **Documentation hygiene (Codex p6):** TypeScript SDK examples now
150
- import from `"@agentflow/client"` (was `"agentflow"`); placeholder
198
+ import from `"@yuliaedomskikh/agentflow-client"` (was `"agentflow"`); placeholder
151
199
  `https://api.agentflow.dev` examples replaced with
152
200
  `http://localhost:8000`; clone URL points at
153
201
  `brownjuly2003-code/agentflow`; `docs/quality.md` marked stale;
@@ -172,6 +220,37 @@ README that maps findings to the six closing commits.
172
220
 
173
221
  ### Added
174
222
 
223
+ - **DV2.0 multi-branch demo** (merged via `ddfb863` from
224
+ `feat/dv2-multi-branch`, sessions 1-5). Live Data Vault 2.0
225
+ warehouse on a self-hosted kind cluster with ClickHouse 25.5,
226
+ Postgres 17, and MinIO. Five branches (MSK / SPB / EKB / DXB / ALA),
227
+ three source systems (1C + Bitrix24 + WMS Excel), three jurisdictions
228
+ (RU / UAE / KZ). Artifacts:
229
+ - `warehouse/agentflow/dv2/raw_vault/` — 8 hubs + 8 links + 39
230
+ satellites (generator + jinja template + spec.yaml).
231
+ - `warehouse/agentflow/dv2/business_vault/` — 5 per-branch MDM views
232
+ plus `bv_order_canonical` with `*_source` audit columns.
233
+ - `infrastructure/dv2/` — kind topology, ClickHouse / Postgres / MinIO
234
+ StatefulSets, dbt mart runner, Argo Workflows installer and
235
+ `dv2-refresh` WorkflowTemplate, cold-offload CronJob fanout (5).
236
+ - `warehouse/agentflow/dv2/postgres_oltp/` — pull-based PostgreSQL()
237
+ bridge + push-based MaterializedPostgreSQL CDC (single-DB pattern).
238
+ - `warehouse/agentflow/dv2/postgres_oltp/fanout/` — per-branch CDC
239
+ fan-out via per-database split (`ops_msk_db`, `ops_dxb_db` →
240
+ `oltp_cdc_msk`, `oltp_cdc_dxb`). Native workaround for the
241
+ `materialized_postgresql_publication_name` setting being unsupported
242
+ in ClickHouse 25.5; PeerDB OSS was the originally-planned route but
243
+ does not fit on the 8 GB demo iMac alongside kind + CH + PG + MinIO.
244
+ - `warehouse/agentflow/dv2/dbt/` — three mart models
245
+ (`customer_360`, `branch_pnl`, `returns_velocity`) with 12 data
246
+ tests and a k8s Job runner.
247
+ - `docs/dv2-multi-branch/` — architecture diagram, demo evidence
248
+ (15 sections), 2-minute pitch script, recording-day runbook,
249
+ asciinema cast (`demo.cast`, 42 s, 130×35) plus runner, plain-text
250
+ transcript, self-contained HTML player embed, and a voice-over
251
+ MP4 (`demo_voiced.mp4`, ~92 s) — cast slowed to match a Russian
252
+ TTS narration of the pitch (reproducible via
253
+ `docs/dv2-multi-branch/build/build_voiced_demo.sh`).
175
254
  - **Debezium/Kafka Connect CDC operationalization**: local compose now
176
255
  brings up Postgres/MySQL source databases, Kafka Connect, Debezium
177
256
  connector registration, and raw CDC topic bootstrap for the AgentFlow
@@ -0,0 +1,255 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentflow-runtime
3
+ Version: 1.2.0
4
+ Summary: Real-time data platform serving context to AI agents
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.11
8
+ Requires-Dist: bcrypt<6,>=5
9
+ Requires-Dist: confluent-kafka<3,>=2.5
10
+ Requires-Dist: dagster<2,>=1.13.1
11
+ Requires-Dist: duckdb<2,>=1.1
12
+ Requires-Dist: fastapi<1,>=0.111
13
+ Requires-Dist: httpx<1,>=0.27
14
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2,>=1.41
15
+ Requires-Dist: opentelemetry-instrumentation-fastapi<1,>=0.62b0
16
+ Requires-Dist: opentelemetry-instrumentation-httpx<1,>=0.62b0
17
+ Requires-Dist: opentelemetry-sdk<2,>=1.41
18
+ Requires-Dist: pandera<1,>=0.20
19
+ Requires-Dist: prometheus-client<1,>=0.21
20
+ Requires-Dist: pyarrow<19,>=17
21
+ Requires-Dist: pydantic-settings<3,>=2.5
22
+ Requires-Dist: pydantic<3,>=2.9
23
+ Requires-Dist: pyyaml<7,>=6
24
+ Requires-Dist: sqlglot<31,>=30
25
+ Requires-Dist: structlog<26,>=24.4
26
+ Requires-Dist: uvicorn[standard]<1,>=0.30
27
+ Provides-Extra: cloud
28
+ Requires-Dist: boto3<2,>=1.35; extra == 'cloud'
29
+ Requires-Dist: pyiceberg[pyiceberg-core]<1,>=0.7; extra == 'cloud'
30
+ Provides-Extra: contract
31
+ Requires-Dist: schemathesis==4.10.2; extra == 'contract'
32
+ Provides-Extra: dev
33
+ Requires-Dist: bandit<2,>=1.9; extra == 'dev'
34
+ Requires-Dist: build<2,>=1.2; extra == 'dev'
35
+ Requires-Dist: hatchling<2,>=1.25; extra == 'dev'
36
+ Requires-Dist: hypothesis<7,>=6; extra == 'dev'
37
+ Requires-Dist: jsonschema<5,>=4; extra == 'dev'
38
+ Requires-Dist: mypy<2,>=1.11; extra == 'dev'
39
+ Requires-Dist: pytest-asyncio<1,>=0.24; extra == 'dev'
40
+ Requires-Dist: pytest-cov<6,>=5; extra == 'dev'
41
+ Requires-Dist: pytest<9,>=8.3; extra == 'dev'
42
+ Requires-Dist: ruff<1,>=0.6; extra == 'dev'
43
+ Requires-Dist: testcontainers[kafka]<5,>=4.9; extra == 'dev'
44
+ Provides-Extra: flink
45
+ Requires-Dist: apache-flink==1.19.1; extra == 'flink'
46
+ Provides-Extra: integrations
47
+ Requires-Dist: langchain-core<2,>=1.2.22; extra == 'integrations'
48
+ Requires-Dist: langchain-text-splitters<2,>=1.1.2; extra == 'integrations'
49
+ Requires-Dist: langchain<2,>=0.3.30; extra == 'integrations'
50
+ Requires-Dist: langsmith<1,>=0.7.31; extra == 'integrations'
51
+ Requires-Dist: llama-index-core<1,>=0.12; extra == 'integrations'
52
+ Provides-Extra: llm
53
+ Requires-Dist: anthropic<1,>=0.39; extra == 'llm'
54
+ Provides-Extra: load
55
+ Requires-Dist: locust<3,>=2.29; extra == 'load'
56
+ Description-Content-Type: text/markdown
57
+
58
+ # AgentFlow
59
+
60
+ > Real-time data platform for AI agents. Live entity lookups, typed contracts, dual-language SDKs, and release-gated delivery.
61
+
62
+ [![Release gate](https://img.shields.io/badge/release_gate-v1.1_published-brightgreen)](docs/release-readiness.md)
63
+ [![codecov](https://codecov.io/gh/brownjuly2003-code/agentflow/branch/main/graph/badge.svg)](https://codecov.io/gh/brownjuly2003-code/agentflow)
64
+ [![Python](https://img.shields.io/badge/python-3.11+-blue)](pyproject.toml)
65
+ [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
66
+
67
+ ## Why this exists
68
+
69
+ Most agent demos work until they have to answer from live business state. Support, ops, and merch workflows need current orders, metrics, and health signals while the conversation is happening, not a stale warehouse snapshot and not a pile of one-off service adapters.
70
+
71
+ AgentFlow turns that problem into one serving boundary:
72
+
73
+ - streaming ingestion for operational events
74
+ - a semantic layer that exposes entities, metrics, and query endpoints
75
+ - typed contracts so SDKs and callers know what shape to expect
76
+ - Python and TypeScript clients that speak the same API surface
77
+
78
+ ## Highlights
79
+
80
+ - **Release-line gate:** 752 passed, 4 skipped on 2026-05-04; GitHub environments `staging` and `production` have required reviewers. The 2026-04-27 audit closure sprint (Codex p1–p9 + Opus) shipped six commits closing all P0/P1/P2 findings — see [docs/audits/2026-04-27/README.md](docs/audits/2026-04-27/README.md) and Release Readiness for the live status
81
+ - **Sub-second entity lookups in the checked-in baseline**: entity p50 `38-55 ms`, entity p99 `290-320 ms`, aggregate p50 `56 ms` at `50` users for `60s`
82
+ - **Historical performance remediation is documented**: the serving path moved from an original ~`26,000 ms` baseline to the current `43-55 ms` release range
83
+ - **Dual SDK parity** for Python and TypeScript, including retry policies, circuit breakers, batching, pagination, and contract pinning
84
+ - **Postgres/MySQL CDC path** through Debezium and Kafka Connect, with local compose, Helm manifests, and canonical CDC normalization
85
+ - **Security hardening in the hot path**: parameterized queries, `sqlglot` AST validation for NL-to-SQL, and a Bandit baseline gate for new findings only
86
+ - **Release workflow coverage**: chaos smoke on PRs, performance regression gate, contract drift checks, and a Terraform apply workflow with OIDC-ready auth
87
+
88
+ ## Quick start
89
+
90
+ > **Upgrading from v1.0.x?** See the [v1.1 migration guide](docs/migration/v1.1.md) before installing.
91
+
92
+ Prerequisites:
93
+
94
+ - Python `3.11+`
95
+ - `make`
96
+ - Docker Compose (`make demo` starts Redis)
97
+
98
+ PowerShell 7+:
99
+
100
+ ```powershell
101
+ git clone https://github.com/brownjuly2003-code/agentflow.git
102
+ cd agentflow
103
+ . .\scripts\setup.ps1
104
+ make demo
105
+ ```
106
+
107
+ macOS / Linux:
108
+
109
+ ```bash
110
+ git clone https://github.com/brownjuly2003-code/agentflow.git
111
+ cd agentflow
112
+ source ./scripts/setup.sh
113
+ make demo
114
+ ```
115
+
116
+ `make demo` seeds local data, starts Redis, and serves the API on `http://localhost:8000`. Swagger UI is available at `http://localhost:8000/docs`.
117
+
118
+ Try it:
119
+
120
+ ```bash
121
+ curl http://localhost:8000/v1/entity/order/ORD-20260404-1001
122
+
123
+ curl -X POST http://localhost:8000/v1/query \
124
+ -H "Content-Type: application/json" \
125
+ -d '{"question":"Show me top 3 products"}'
126
+ ```
127
+
128
+ Local demo runs without API-key enforcement unless you explicitly configure `AGENTFLOW_API_KEYS_FILE`.
129
+
130
+ ## Architecture
131
+
132
+ ```text
133
+ Event sources -> Kafka -> Flink -> Iceberg ----\
134
+ -> Semantic layer -> FastAPI -> Agent / SDK
135
+ Local demo -> local_pipeline -> DuckDB ------/
136
+ ```
137
+
138
+ Stack:
139
+
140
+ - **Ingestion**: Kafka producers, Debezium/Kafka Connect CDC, and a local synthetic pipeline
141
+ - **Processing**: Flink plus validation and enrichment stages
142
+ - **Storage**: Iceberg for production-shaped tables, DuckDB for the local serving path
143
+ - **Serving**: FastAPI, contract registry, lineage, search, and operational endpoints
144
+ - **Orchestration**: Dagster
145
+ - **IaC**: Terraform, Helm, Docker Compose, and a Fly.io demo config
146
+
147
+ See [docs/architecture.md](docs/architecture.md) for the detailed design, trade-offs, and deployment topologies.
148
+
149
+ CDC source capture is standardized on Debezium/Kafka Connect; downstream consumers use the canonical AgentFlow CDC contract defined in [ADR 0005](docs/decisions/0005-cdc-ingestion-strategy.md).
150
+
151
+ ## What's inside
152
+
153
+ | Area | Files |
154
+ |------|-------|
155
+ | API core | `src/serving/api/` |
156
+ | Semantic layer | `src/serving/semantic_layer/` |
157
+ | Python SDK | `sdk/agentflow/` |
158
+ | TypeScript SDK | `sdk-ts/src/` |
159
+ | Agent integrations | `integrations/agentflow_integrations/` (LangChain, LlamaIndex, CrewAI, MCP) |
160
+ | Flink jobs | `src/processing/flink_jobs/` |
161
+ | Test suites | `tests/` |
162
+ | Planning trail | `docs/plans/` |
163
+ | Public site | `site/` |
164
+ | IaC | `infrastructure/terraform/`, `infrastructure/dv2/`, `helm/`, `k8s/` |
165
+ | DV2.0 warehouse | `warehouse/agentflow/dv2/` (hubs / links / satellites + X5 loader) |
166
+
167
+ ## Documentation
168
+
169
+ - [Interactive Technical Walkthrough](docs/index.md) - MkDocs Material guide with Mermaid architecture, API, SDK, deployment, observability, and troubleshooting pages
170
+ - [Architecture](docs/architecture.md) - system context, data flow, failure modes
171
+ - [Operational Runbook](docs/runbook.md) - local stack, CDC capture, incident response, and maintenance commands
172
+ - [API Reference](docs/api-reference.md) - endpoint-by-endpoint examples for curl, Python, and TypeScript
173
+ - [Security Audit](docs/security-audit.md) - threat model, controls, and evidence
174
+ - [Competitive Analysis](docs/competitive-analysis.md) - positioning and trade-offs
175
+ - [CDC Deployment Plan](docs/plans/2026-04-debezium-kafka-connect-deployment-plan.md) - Debezium/Kafka Connect rollout decisions and implementation trail
176
+ - [Glossary](docs/glossary.md) - interview-ready explanations of the core technical terms
177
+ - [Release Readiness](docs/release-readiness.md) - checked release evidence through `v1.1.0` and current external-gate handoffs
178
+ - [Customer Discovery Tracker](docs/customer-discovery-tracker.md) - synthetic/modelled PMF planning surface and real-evidence gap
179
+ - [Pricing Validation Plan](docs/pricing-validation-plan.md) - pricing/WTP questions, evidence gates, and current real-evidence gap
180
+ - [AWS OIDC Setup](docs/operations/aws-oidc-setup.md) - Terraform apply readiness handoff
181
+ - [Immutable Retention Evidence Handoff](docs/operations/immutable-retention-evidence-handoff.md) - external audit-retention evidence checklist
182
+ - [Production CDC Source Onboarding](docs/operations/cdc-production-onboarding.md) - production CDC decision record and no-go gates
183
+ - [External Gate Evidence Intake Checklist](docs/operations/external-gate-evidence-intake.md) - required owner evidence before blocked external gates can close
184
+ - [Public Production-Hardware Benchmark Plan](docs/perf/public-production-hardware-benchmark-plan.md) - benchmark evidence plan for `c8g.4xlarge+`
185
+ - [External Pen-Test Attestation Handoff](docs/operations/external-pen-test-attestation-handoff.md) - third-party pen-test evidence checklist
186
+ - [Audit History](docs/audit-history.md) - baseline-to-release remediation trail
187
+ - [Publication Checklist](docs/publication-checklist.md) - final GitHub publishing checklist
188
+ - [Fly.io Demo Deploy](deploy/fly/README.md) - minimal hosted demo instructions
189
+ - [DV2.0 Multi-Branch Extension](docs/dv2-multi-branch/SESSION_HANDOFF.md) - Data Vault 2.0 model for mid-market e-com with 5 locations / 3 jurisdictions; [schema](docs/dv2-multi-branch/schema_dv2.md), [end-to-end flow](docs/dv2-multi-branch/architecture.md), [live demo evidence](docs/dv2-multi-branch/demo_evidence.md), [k8s manifests](infrastructure/dv2/README.md)
190
+ - [Contributing](CONTRIBUTING.md) - development and PR expectations
191
+ - [Changelog](CHANGELOG.md) - project release notes
192
+
193
+ ## Development
194
+
195
+ ```bash
196
+ # verified release slice
197
+ python -m pytest tests/unit tests/integration tests/sdk -q
198
+
199
+ # benchmark and regression gate
200
+ python scripts/run_benchmark.py
201
+ python scripts/check_performance.py --baseline docs/benchmark-baseline.json --current .artifacts/load/results.json --max-regress 20
202
+
203
+ # benchmark trend: [.github/perf-history.json](.github/perf-history.json) is appended on every main push;
204
+ # render the history locally with `make perf-plot` (writes docs/perf/history.html).
205
+
206
+ # contracts and security
207
+ python scripts/generate_contracts.py --check
208
+ bandit -r src sdk --ini .bandit --severity-level medium -f json -o .tmp/bandit-current.json
209
+ python scripts/bandit_diff.py .bandit-baseline.json .tmp/bandit-current.json
210
+ ```
211
+
212
+ ## Status
213
+
214
+ **v1.1.0** is published to PyPI, npm, and GitHub.
215
+ The 2026-04-27 audit closure sprint landed six commits on `main`
216
+ that close all P0/P1/P2 findings from the Claude
217
+ Opus + Codex p1–p9 audits: tenant isolation across the control plane,
218
+ SQL guard centralization, entity allowlist enforcement on every read
219
+ surface, secrets scrubbed and rotated, helm `runAsNonRoot` /
220
+ NetworkPolicy / PodDisruptionBudget, npm lockfile + `npm audit` clean,
221
+ vulnerable dep bumps (`dagster>=1.13.1`, `langchain-core>=1.2.22`),
222
+ trivy pinned, OpenAPI drift gate, branch protection with 12 required
223
+ status checks, GitHub Actions environment reviewers, and Python SDK
224
+ alignment with the server v1 contract (F1–F10). Recent local full-suite
225
+ verification: `752 passed, 4 skipped` on 2026-05-04 after clarifying the
226
+ external-gate handoff. The post-v1.1 CDC operationalization
227
+ for Debezium / Kafka Connect is checked in, while production source
228
+ onboarding remains pending; see [docs/release-readiness.md](docs/release-readiness.md).
229
+ Remaining external gates are AWS OIDC role setup for real Terraform apply,
230
+ external immutable audit retention if claimed beyond local hash-chain evidence,
231
+ production CDC source onboarding, real PMF/pricing evidence, public benchmark
232
+ publication on production hardware, external pen-test attestation, and legacy
233
+ npm `NPM_TOKEN` revocation after a successful new-package trusted-publish run.
234
+ npm Trusted Publishing readback for the new package is complete. A project-local
235
+ Pi skill for evidence intake lives at `.pi/skills/external-gate-evidence-intake`.
236
+
237
+ ## Screenshots
238
+
239
+ | Admin UI | API docs |
240
+ |----------|----------|
241
+ | <img src="docs/screenshots/admin-ui.png" alt="AgentFlow admin UI" width="420"> | <img src="docs/screenshots/swagger-docs.png" alt="AgentFlow API docs" width="420"> |
242
+
243
+ | Landing page | Benchmark run |
244
+ |--------------|---------------|
245
+ | <img src="docs/screenshots/landing-page.png" alt="AgentFlow landing page" width="420"> | <img src="docs/screenshots/benchmark-terminal.png" alt="AgentFlow benchmark terminal" width="420"> |
246
+
247
+ Capture notes and publish-time checks are listed in [docs/publication-checklist.md](docs/publication-checklist.md).
248
+
249
+ ## License
250
+
251
+ MIT. See [LICENSE](LICENSE).
252
+
253
+ ## Credits
254
+
255
+ Built as a data-engineering reference project during the `2026-04-10` -> `2026-04-20` release cycle, with the full implementation trail preserved in `docs/plans/`.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Real-time data platform for AI agents. Live entity lookups, typed contracts, dual-language SDKs, and release-gated delivery.
4
4
 
5
- [![Release gate](https://img.shields.io/badge/release_gate-audit_closed_ready_to_push-brightgreen)](docs/release-readiness.md)
5
+ [![Release gate](https://img.shields.io/badge/release_gate-v1.1_published-brightgreen)](docs/release-readiness.md)
6
6
  [![codecov](https://codecov.io/gh/brownjuly2003-code/agentflow/branch/main/graph/badge.svg)](https://codecov.io/gh/brownjuly2003-code/agentflow)
7
7
  [![Python](https://img.shields.io/badge/python-3.11+-blue)](pyproject.toml)
8
8
  [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
@@ -20,7 +20,7 @@ AgentFlow turns that problem into one serving boundary:
20
20
 
21
21
  ## Highlights
22
22
 
23
- - **Last completed local gate:** 724 passed, 4 skipped on 2026-04-28 at auth-cache commit `97e5d86`. The 2026-04-27 audit closure sprint (Codex p1–p9 + Opus) shipped six commits closing all P0/P1/P2 findings — see [docs/audits/2026-04-27/README.md](docs/audits/2026-04-27/README.md) and Release Readiness for the live status
23
+ - **Release-line gate:** 752 passed, 4 skipped on 2026-05-04; GitHub environments `staging` and `production` have required reviewers. The 2026-04-27 audit closure sprint (Codex p1–p9 + Opus) shipped six commits closing all P0/P1/P2 findings — see [docs/audits/2026-04-27/README.md](docs/audits/2026-04-27/README.md) and Release Readiness for the live status
24
24
  - **Sub-second entity lookups in the checked-in baseline**: entity p50 `38-55 ms`, entity p99 `290-320 ms`, aggregate p50 `56 ms` at `50` users for `60s`
25
25
  - **Historical performance remediation is documented**: the serving path moved from an original ~`26,000 ms` baseline to the current `43-55 ms` release range
26
26
  - **Dual SDK parity** for Python and TypeScript, including retry policies, circuit breakers, batching, pagination, and contract pinning
@@ -104,10 +104,12 @@ CDC source capture is standardized on Debezium/Kafka Connect; downstream consume
104
104
  | Test suites | `tests/` |
105
105
  | Planning trail | `docs/plans/` |
106
106
  | Public site | `site/` |
107
- | IaC | `infrastructure/terraform/`, `helm/`, `k8s/` |
107
+ | IaC | `infrastructure/terraform/`, `infrastructure/dv2/`, `helm/`, `k8s/` |
108
+ | DV2.0 warehouse | `warehouse/agentflow/dv2/` (hubs / links / satellites + X5 loader) |
108
109
 
109
110
  ## Documentation
110
111
 
112
+ - [Interactive Technical Walkthrough](docs/index.md) - MkDocs Material guide with Mermaid architecture, API, SDK, deployment, observability, and troubleshooting pages
111
113
  - [Architecture](docs/architecture.md) - system context, data flow, failure modes
112
114
  - [Operational Runbook](docs/runbook.md) - local stack, CDC capture, incident response, and maintenance commands
113
115
  - [API Reference](docs/api-reference.md) - endpoint-by-endpoint examples for curl, Python, and TypeScript
@@ -115,10 +117,19 @@ CDC source capture is standardized on Debezium/Kafka Connect; downstream consume
115
117
  - [Competitive Analysis](docs/competitive-analysis.md) - positioning and trade-offs
116
118
  - [CDC Deployment Plan](docs/plans/2026-04-debezium-kafka-connect-deployment-plan.md) - Debezium/Kafka Connect rollout decisions and implementation trail
117
119
  - [Glossary](docs/glossary.md) - interview-ready explanations of the core technical terms
118
- - [Release Readiness](docs/release-readiness.md) - checked release evidence through `v1.1.0` and current CDC follow-up work
120
+ - [Release Readiness](docs/release-readiness.md) - checked release evidence through `v1.1.0` and current external-gate handoffs
121
+ - [Customer Discovery Tracker](docs/customer-discovery-tracker.md) - synthetic/modelled PMF planning surface and real-evidence gap
122
+ - [Pricing Validation Plan](docs/pricing-validation-plan.md) - pricing/WTP questions, evidence gates, and current real-evidence gap
123
+ - [AWS OIDC Setup](docs/operations/aws-oidc-setup.md) - Terraform apply readiness handoff
124
+ - [Immutable Retention Evidence Handoff](docs/operations/immutable-retention-evidence-handoff.md) - external audit-retention evidence checklist
125
+ - [Production CDC Source Onboarding](docs/operations/cdc-production-onboarding.md) - production CDC decision record and no-go gates
126
+ - [External Gate Evidence Intake Checklist](docs/operations/external-gate-evidence-intake.md) - required owner evidence before blocked external gates can close
127
+ - [Public Production-Hardware Benchmark Plan](docs/perf/public-production-hardware-benchmark-plan.md) - benchmark evidence plan for `c8g.4xlarge+`
128
+ - [External Pen-Test Attestation Handoff](docs/operations/external-pen-test-attestation-handoff.md) - third-party pen-test evidence checklist
119
129
  - [Audit History](docs/audit-history.md) - baseline-to-release remediation trail
120
130
  - [Publication Checklist](docs/publication-checklist.md) - final GitHub publishing checklist
121
131
  - [Fly.io Demo Deploy](deploy/fly/README.md) - minimal hosted demo instructions
132
+ - [DV2.0 Multi-Branch Extension](docs/dv2-multi-branch/SESSION_HANDOFF.md) - Data Vault 2.0 model for mid-market e-com with 5 locations / 3 jurisdictions; [schema](docs/dv2-multi-branch/schema_dv2.md), [end-to-end flow](docs/dv2-multi-branch/architecture.md), [live demo evidence](docs/dv2-multi-branch/demo_evidence.md), [k8s manifests](infrastructure/dv2/README.md)
122
133
  - [Contributing](CONTRIBUTING.md) - development and PR expectations
123
134
  - [Changelog](CHANGELOG.md) - project release notes
124
135
 
@@ -143,33 +154,38 @@ python scripts/bandit_diff.py .bandit-baseline.json .tmp/bandit-current.json
143
154
 
144
155
  ## Status
145
156
 
146
- **v1.1.0** is prepared in the checked-in repository and ready to publish.
147
- The 2026-04-27 audit closure sprint landed six commits on local `main`
148
- (ahead of `origin`) that close all P0/P1/P2 findings from the Claude
157
+ **v1.1.0** is published to PyPI, npm, and GitHub.
158
+ The 2026-04-27 audit closure sprint landed six commits on `main`
159
+ that close all P0/P1/P2 findings from the Claude
149
160
  Opus + Codex p1–p9 audits: tenant isolation across the control plane,
150
161
  SQL guard centralization, entity allowlist enforcement on every read
151
162
  surface, secrets scrubbed and rotated, helm `runAsNonRoot` /
152
163
  NetworkPolicy / PodDisruptionBudget, npm lockfile + `npm audit` clean,
153
164
  vulnerable dep bumps (`dagster>=1.13.1`, `langchain-core>=1.2.22`),
154
165
  trivy pinned, OpenAPI drift gate, branch protection with 12 required
155
- status checks, and Python SDK alignment with the server v1 contract
156
- (F1–F10). Latest local release-line smoke: `724 passed, 4 skipped`
157
- at auth-cache commit `97e5d86`. The post-v1.1 CDC
158
- operationalization for Debezium / Kafka Connect remains in. Live
159
- release just needs `git push` + `v1.1.0` retag see
160
- [docs/release-readiness.md](docs/release-readiness.md). Remaining open
161
- items are manual environment setup (`staging`/`prod` reviewers, AWS
162
- OIDC role), public benchmark publication on production hardware, and
163
- post-release PMF work.
166
+ status checks, GitHub Actions environment reviewers, and Python SDK
167
+ alignment with the server v1 contract (F1–F10). Recent local full-suite
168
+ verification: `752 passed, 4 skipped` on 2026-05-04 after clarifying the
169
+ external-gate handoff. The post-v1.1 CDC operationalization
170
+ for Debezium / Kafka Connect is checked in, while production source
171
+ onboarding remains pending; see [docs/release-readiness.md](docs/release-readiness.md).
172
+ Remaining external gates are AWS OIDC role setup for real Terraform apply,
173
+ external immutable audit retention if claimed beyond local hash-chain evidence,
174
+ production CDC source onboarding, real PMF/pricing evidence, public benchmark
175
+ publication on production hardware, external pen-test attestation, and legacy
176
+ npm `NPM_TOKEN` revocation after a successful new-package trusted-publish run.
177
+ npm Trusted Publishing readback for the new package is complete. A project-local
178
+ Pi skill for evidence intake lives at `.pi/skills/external-gate-evidence-intake`.
164
179
 
165
180
  ## Screenshots
166
181
 
167
- The repository is prepared for optional README screenshots under `docs/screenshots/`:
182
+ | Admin UI | API docs |
183
+ |----------|----------|
184
+ | <img src="docs/screenshots/admin-ui.png" alt="AgentFlow admin UI" width="420"> | <img src="docs/screenshots/swagger-docs.png" alt="AgentFlow API docs" width="420"> |
168
185
 
169
- - `admin-ui.png`
170
- - `swagger-docs.png`
171
- - `landing-page.png`
172
- - `benchmark-terminal.png`
186
+ | Landing page | Benchmark run |
187
+ |--------------|---------------|
188
+ | <img src="docs/screenshots/landing-page.png" alt="AgentFlow landing page" width="420"> | <img src="docs/screenshots/benchmark-terminal.png" alt="AgentFlow benchmark terminal" width="420"> |
173
189
 
174
190
  Capture notes and publish-time checks are listed in [docs/publication-checklist.md](docs/publication-checklist.md).
175
191
 
@@ -1,7 +1,8 @@
1
1
  [project]
2
2
  name = "agentflow-runtime"
3
- version = "1.1.0"
3
+ version = "1.2.0"
4
4
  description = "Real-time data platform serving context to AI agents"
5
+ readme = "README.md"
5
6
  requires-python = ">=3.11"
6
7
  license = { text = "MIT" }
7
8
 
@@ -115,12 +116,13 @@ line-length = 100
115
116
 
116
117
  [tool.ruff.lint]
117
118
  select = ["E", "F", "W", "I", "N", "UP", "S", "B", "A", "C4", "PT"]
118
- ignore = ["S101", "S311", "S608"]
119
+ ignore = ["S101", "S311"]
119
120
 
120
121
  [tool.ruff.lint.per-file-ignores]
121
122
  "tests/**/*.py" = [
122
123
  "S603",
123
124
  "S607",
125
+ "S608",
124
126
  "S310",
125
127
  "S104",
126
128
  "S106",
@@ -132,16 +134,44 @@ ignore = ["S101", "S311", "S608"]
132
134
  "A002",
133
135
  "E501",
134
136
  ]
137
+ "src/orchestration/dags/daily_batch.py" = [
138
+ "S608",
139
+ ]
140
+ "src/serving/api/routers/lineage.py" = [
141
+ "S608",
142
+ ]
143
+ "src/serving/api/routers/slo.py" = [
144
+ "S608",
145
+ ]
146
+ "src/serving/api/routers/stream.py" = [
147
+ "S608",
148
+ ]
135
149
  "src/serving/backends/clickhouse_backend.py" = [
136
150
  "S310",
151
+ "S608",
137
152
  "E501",
138
153
  ]
139
154
  "src/serving/backends/duckdb_backend.py" = [
155
+ "S608",
140
156
  "E501",
141
157
  ]
158
+ "src/serving/semantic_layer/nl_engine.py" = [
159
+ "S608",
160
+ ]
161
+ "src/serving/semantic_layer/query/entity_queries.py" = [
162
+ "S608",
163
+ ]
164
+ "src/serving/semantic_layer/query/nl_queries.py" = [
165
+ "S608",
166
+ ]
167
+ "src/serving/semantic_layer/search_index.py" = [
168
+ "S608",
169
+ ]
142
170
 
143
171
  [tool.pytest.ini_options]
144
172
  testpaths = ["tests"]
173
+ addopts = ["-p", "no:schemathesis", "--basetemp=.tmp/pytest-basetemp"]
174
+ cache_dir = ".tmp/pytest-cache"
145
175
  markers = [
146
176
  "integration: marks tests requiring Docker services",
147
177
  "requires_docker: marks tests that require local Docker",
@@ -180,6 +210,10 @@ ignore_missing_imports = true
180
210
  module = "src.processing.flink_jobs.*"
181
211
  ignore_errors = true
182
212
 
213
+ [[tool.mypy.overrides]]
214
+ module = "src.quality.validators.*"
215
+ disallow_untyped_defs = true
216
+
183
217
  [tool.agentflow.dependency-profiles.profiles.runtime]
184
218
  editable-installs = ["."]
185
219
 
@@ -299,17 +333,17 @@ job = "mutation"
299
333
  profile = "test"
300
334
 
301
335
  [[tool.agentflow.dependency-profiles.targets]]
302
- name = "performance.performance-regression"
336
+ name = "performance.perf-baseline"
303
337
  kind = "workflow"
304
338
  path = ".github/workflows/performance.yml"
305
- job = "performance-regression"
339
+ job = "perf-baseline"
306
340
  profile = "perf"
307
341
 
308
342
  [[tool.agentflow.dependency-profiles.targets]]
309
- name = "perf-regression.perf-regression"
343
+ name = "perf-regression.perf-smoke"
310
344
  kind = "workflow"
311
345
  path = ".github/workflows/perf-regression.yml"
312
- job = "perf-regression"
346
+ job = "perf-smoke"
313
347
  profile = "perf"
314
348
 
315
349
  [[tool.agentflow.dependency-profiles.targets]]
@@ -13,6 +13,7 @@ from confluent_kafka import KafkaException
13
13
  from opentelemetry import trace
14
14
 
15
15
  from src.processing.tracing import inject_trace_to_kafka_headers, telemetry_disabled
16
+ from src.serving.duckdb_connection import connect_duckdb
16
17
 
17
18
  logger = structlog.get_logger()
18
19
  tracer = trace.get_tracer("agentflow.outbox")
@@ -51,7 +52,7 @@ class OutboxProcessor:
51
52
  if conn is None and duckdb_path is None:
52
53
  raise ValueError("duckdb_path or conn is required")
53
54
  self._owns_conn = conn is None
54
- self._conn = conn if conn is not None else duckdb.connect(str(duckdb_path))
55
+ self._conn = conn if conn is not None else connect_duckdb(str(duckdb_path))
55
56
  self._producer = producer or self._produce_to_kafka
56
57
  self._bootstrap_servers = bootstrap_servers or DEFAULT_KAFKA_BOOTSTRAP
57
58
  self._max_retries = max_retries
@@ -158,7 +158,7 @@ class FreshnessMonitor:
158
158
  )
159
159
 
160
160
 
161
- if __name__ == "__main__":
161
+ if __name__ == "__main__": # pragma: no cover
162
162
  monitor = FreshnessMonitor(
163
163
  bootstrap_servers=os.getenv("KAFKA_BOOTSTRAP_SERVERS", "localhost:9092"),
164
164
  topics=["events.validated", "sessions.aggregated"],
@@ -7,7 +7,7 @@ Returns structured validation results with error details for observability.
7
7
  from dataclasses import dataclass, field
8
8
  from datetime import UTC, datetime
9
9
 
10
- from pydantic import ValidationError
10
+ from pydantic import BaseModel, ValidationError
11
11
 
12
12
  from src.ingestion.schemas.events import (
13
13
  CdcEvent,
@@ -37,7 +37,7 @@ class ValidationResult:
37
37
 
38
38
 
39
39
  # Map event type prefixes to their Pydantic models
40
- _SCHEMA_MAP: dict = {
40
+ _SCHEMA_MAP: dict[str, type[BaseModel]] = {
41
41
  "order.": OrderEvent,
42
42
  "payment.": PaymentEvent,
43
43
  "click": ClickstreamEvent,
@@ -49,7 +49,7 @@ _SCHEMA_MAP: dict = {
49
49
  _CDC_SOURCES = {"postgres_cdc", "mysql_cdc"}
50
50
 
51
51
 
52
- def _get_model_for_event(event_type: str): # -> BaseModel subclass | None
52
+ def _get_model_for_event(event_type: str) -> type[BaseModel] | None:
53
53
  for prefix, model in _SCHEMA_MAP.items():
54
54
  if event_type.startswith(prefix) or event_type == prefix:
55
55
  return model