typedef-data-intelligence 0.32.0__tar.gz → 0.34.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 (252) hide show
  1. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/CHANGELOG.md +59 -0
  2. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/PKG-INFO +1 -1
  3. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/examples/memory_usage_examples.py +72 -101
  4. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/examples/pydantic_tool_customization_example.py +1 -1
  5. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/pyproject.toml +1 -1
  6. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/app.py +57 -1
  7. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_agents.py +223 -21
  8. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_context.py +25 -8
  9. typedef_data_intelligence-0.34.0/src/lineage/api/desktop_logs.py +189 -0
  10. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_quickstart.py +28 -21
  11. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_setup.py +77 -11
  12. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_sync.py +124 -1
  13. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_wizard_sync.py +6 -3
  14. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_workspaces.py +347 -61
  15. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_worktree.py +763 -154
  16. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/unified_cli.py +2 -1
  17. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/dbt.py +237 -7
  18. typedef_data_intelligence-0.34.0/tests/api/test_desktop_agents_clone_backend.py +418 -0
  19. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_airflow_snapshot.py +143 -0
  20. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_context_reader_cache.py +33 -0
  21. typedef_data_intelligence-0.34.0/tests/api/test_desktop_databases_edit.py +275 -0
  22. typedef_data_intelligence-0.34.0/tests/api/test_desktop_logs.py +182 -0
  23. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_orphan_flags.py +65 -0
  24. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_quickstart.py +42 -15
  25. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_setup.py +115 -0
  26. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_sync.py +95 -19
  27. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_summary.py +103 -9
  28. typedef_data_intelligence-0.34.0/tests/api/test_desktop_workspaces_target_scope.py +116 -0
  29. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_worktree.py +260 -0
  30. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_worktree_clone.py +398 -9
  31. typedef_data_intelligence-0.34.0/tests/api/test_desktop_worktree_clone_token_scope.py +44 -0
  32. typedef_data_intelligence-0.34.0/tests/api/test_desktop_worktree_kind_target.py +144 -0
  33. typedef_data_intelligence-0.34.0/tests/api/test_desktop_worktree_resolution_scope.py +229 -0
  34. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_workspace_clone_settings.py +72 -0
  35. typedef_data_intelligence-0.34.0/tests/devtools/test_typedef_home_provision.py +1593 -0
  36. typedef_data_intelligence-0.34.0/tests/devtools/test_worktree_reclaim.py +202 -0
  37. typedef_data_intelligence-0.34.0/tests/test_model_tier_validation.py +55 -0
  38. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_unified_cli_fast.py +6 -0
  39. typedef_data_intelligence-0.34.0/tests/test_unified_cli_semantic.py +40 -0
  40. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/context_projects/test_dbt_plugin.py +13 -9
  41. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/devtools/test_semdiff_harness_units.py +61 -22
  42. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/devtools/test_semdiff_lifecycle.py +15 -6
  43. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/test_dbt_docs_generate.py +107 -0
  44. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/test_run_dbt_command.py +46 -0
  45. typedef_data_intelligence-0.32.0/tests/test_model_tier_validation.py +0 -70
  46. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/.dockerignore +0 -0
  47. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/.env.example +0 -0
  48. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/.gitignore +0 -0
  49. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/.justfile_help.txt +0 -0
  50. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/Dockerfile +0 -0
  51. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/Dockerfile.dev +0 -0
  52. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/Justfile +0 -0
  53. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/README.pypi.md +0 -0
  54. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/config.api.yml +0 -0
  55. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/config.cli.yml +0 -0
  56. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/config.desktop.yml +0 -0
  57. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/config.ingest.unified.yml +0 -0
  58. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/config.ingest.yml +0 -0
  59. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docker-entrypoint.dev.sh +0 -0
  60. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/LINEAR_TICKETING_BACKEND.md +0 -0
  61. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/BUSINESS_CONCEPT_INDEX.md +0 -0
  62. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/CLUSTERING_ALGORITHM_DECISION.md +0 -0
  63. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/GENERIC_REPORT_SCHEMA.md +0 -0
  64. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/HYBRID_ANALYSIS_ARCHITECTURE.md +0 -0
  65. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/PHASE2_IR_STITCHING.md +0 -0
  66. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/PIPELINE_PRIMITIVES_USECASES.md +0 -0
  67. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/SALESFORCE_REPORT_IR.md +0 -0
  68. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/SEMANTIC_JOIN_RESOLUTION.md +0 -0
  69. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/architecture/SEMANTIC_SCHEMA_DESIGN.md +0 -0
  70. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/design/AGENT_DESIGN_NOTES.md +0 -0
  71. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/design/COLUMN_PROFILING.md +0 -0
  72. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/design/COLUMN_PROFILING_IMPLEMENTATION.md +0 -0
  73. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/design/EXTRACTION_DETECTION.md +0 -0
  74. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/design/PERFORMANCE_AND_QUALITY_SPECIALISTS.md +0 -0
  75. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/design/STREAMING_SUBAGENT_ARCHITECTURE.md +0 -0
  76. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/AGENT_USER_GUIDE.md +0 -0
  77. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/GETTING_STARTED.md +0 -0
  78. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/MIGRATION_THREE_SQL.md +0 -0
  79. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/SCOPE_LEVEL_LINEAGE_GUIDE.md +0 -0
  80. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/SEMANTIC_DIFF_HARNESS.md +0 -0
  81. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/SEMANTIC_DIMENSIONS_GUIDE.md +0 -0
  82. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/docs/reference/TYPE_ENUMS.md +0 -0
  83. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/pytest.ini +0 -0
  84. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/create_salesforce_reports.py +0 -0
  85. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/data_generation/utils.py +0 -0
  86. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/databricks-smoke.py +0 -0
  87. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/delete_salesforce_reports.py +0 -0
  88. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/populate_salesforce_schema.py +0 -0
  89. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/reset_demo_git_workspace.py +0 -0
  90. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/reset_demo_linear.py +0 -0
  91. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/snowflake_server.py +0 -0
  92. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/surreal-engine-bench.sh +0 -0
  93. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/surreal-fts-b2-corpus.sh +0 -0
  94. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/surreal-fts-bench.sh +0 -0
  95. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/scripts/surreal-fts-quality.sh +0 -0
  96. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/snowflake-mcp-config.yaml +0 -0
  97. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/__init__.py +0 -0
  98. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/auth_context.py +0 -0
  99. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/concept_cards.py +0 -0
  100. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/controlplane_identity.py +0 -0
  101. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_runtime.py +0 -0
  102. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/desktop_semdiff_provision.py +0 -0
  103. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/graph_availability.py +0 -0
  104. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/posthog_analytics.py +0 -0
  105. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/semantic_runtime.py +0 -0
  106. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/api/serve.py +0 -0
  107. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/context_projects/__init__.py +0 -0
  108. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/context_projects/dbt_plugin.py +0 -0
  109. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/__init__.py +0 -0
  110. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/backward_dryrun.py +0 -0
  111. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/clustering_metrics.py +0 -0
  112. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/drop_snowflake_tables.py +0 -0
  113. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/ephemeral_lineage_report.py +0 -0
  114. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/eval_clustering.py +0 -0
  115. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/list_ephemeral_models.py +0 -0
  116. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/refingerprint_cache.py +0 -0
  117. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/regen_semantic_goldens.py +0 -0
  118. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/reset_git_workspace.py +0 -0
  119. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/reset_linear_workspace.py +0 -0
  120. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/reset_project.py +0 -0
  121. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/run_dbt_workflow.py +0 -0
  122. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/seed_census.py +0 -0
  123. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/semantic_goldens.py +0 -0
  124. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/__init__.py +0 -0
  125. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_bench.py +0 -0
  126. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_cells.py +0 -0
  127. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_corpus.py +0 -0
  128. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_corpus_dump.py +0 -0
  129. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_coverage.py +0 -0
  130. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_coverage_report.py +0 -0
  131. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_oracle.py +0 -0
  132. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_quality.py +0 -0
  133. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/fts_quality_bench.py +0 -0
  134. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/log_parse.py +0 -0
  135. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/report.py +0 -0
  136. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/surreal_bench/runner.py +0 -0
  137. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/__init__.py +0 -0
  138. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/README.md +0 -0
  139. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/__init__.py +0 -0
  140. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/cli.py +0 -0
  141. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/db_names.py +0 -0
  142. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/dbt_compile.py +0 -0
  143. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/diff_runner.py +0 -0
  144. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/expected_changes.py +0 -0
  145. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/column_rename_downstream/fixture.yaml +0 -0
  146. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/column_rename_downstream/mutation.diff +0 -0
  147. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_coarsen/fixture.yaml +0 -0
  148. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_coarsen/mutation.diff +0 -0
  149. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_deleted_leaf_model/fixture.yaml +0 -0
  150. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_deleted_leaf_model/mutation.diff +0 -0
  151. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_fanout_compound_oli/fixture.yaml +0 -0
  152. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_fanout_compound_oli/mutation.diff +0 -0
  153. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_gold_control/fixture.yaml +0 -0
  154. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_gold_control/mutation.diff +0 -0
  155. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_v1_003_user_telemetry/fixture.yaml +0 -0
  156. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures/grain_v1_003_user_telemetry/mutation.diff +0 -0
  157. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/fixtures_loader.py +0 -0
  158. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/ingest.py +0 -0
  159. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/lifecycle.py +0 -0
  160. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/semantic_diff/source_prep.py +0 -0
  161. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/surreal/__init__.py +0 -0
  162. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/devtools/unified_graph/surreal/desktop_mcp.py +0 -0
  163. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/mcp/__init__.py +0 -0
  164. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/mcp/runner.py +0 -0
  165. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/mcp/server.py +0 -0
  166. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/templates/__init__.py +0 -0
  167. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/templates/typedef_config.yaml.j2 +0 -0
  168. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/typedef_cli.py +0 -0
  169. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/__init__.py +0 -0
  170. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/databricks.py +0 -0
  171. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/databricks_oauth.py +0 -0
  172. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/dbt_profile.py +0 -0
  173. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/env.py +0 -0
  174. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/git.py +0 -0
  175. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/gitignore.py +0 -0
  176. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/logging.py +0 -0
  177. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/src/lineage/utils/snowflake.py +0 -0
  178. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/__init__.py +0 -0
  179. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_concept_cards.py +0 -0
  180. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_databricks_auth_wiring.py +0 -0
  181. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_agents_runtime.py +0 -0
  182. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_agents_ticket_resolution.py +0 -0
  183. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_clerk_auth.py +0 -0
  184. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_databases_delete.py +0 -0
  185. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_databricks_oauth.py +0 -0
  186. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_databricks_setup.py +0 -0
  187. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_delete_endpoints.py +0 -0
  188. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_diagnostics.py +0 -0
  189. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_posthog.py +0 -0
  190. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_runtime.py +0 -0
  191. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_salesforce.py +0 -0
  192. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_save_env_credentials.py +0 -0
  193. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_search.py +0 -0
  194. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_secondary_roles_hook.py +0 -0
  195. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_semdiff_provision.py +0 -0
  196. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_setup_clone.py +0 -0
  197. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_setup_env_vars.py +0 -0
  198. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_sync_render_profile.py +0 -0
  199. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_telemetry.py +0 -0
  200. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces.py +0 -0
  201. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_adopt.py +0 -0
  202. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_context_kinds.py +0 -0
  203. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_delete.py +0 -0
  204. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_gold_triggers.py +0 -0
  205. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_integrations.py +0 -0
  206. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_preview_name.py +0 -0
  207. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_projects_and_repos.py +0 -0
  208. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_r3_r10.py +0 -0
  209. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_workspaces_wizard.py +0 -0
  210. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_desktop_worktree_gold_queue.py +0 -0
  211. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_graph_availability_any_sentinel.py +0 -0
  212. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_no_legacy_surface.py +0 -0
  213. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_surreal_graph_availability.py +0 -0
  214. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_target_envelope_reads.py +0 -0
  215. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_validate_project_collisions.py +0 -0
  216. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_wizard_create_project_integration_persistence.py +0 -0
  217. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/api/test_worktree_registry_workspaces_shape.py +0 -0
  218. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/backends/__init__.py +0 -0
  219. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/backends/lineage/__init__.py +0 -0
  220. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/backends/lineage/test_search_enum_coverage.py +0 -0
  221. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/backends/lineage/test_surreal_search.py +0 -0
  222. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/conftest.py +0 -0
  223. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/__init__.py +0 -0
  224. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/surreal_bench/__init__.py +0 -0
  225. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/surreal_bench/test_fts_cells.py +0 -0
  226. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/surreal_bench/test_fts_coverage.py +0 -0
  227. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/surreal_bench/test_fts_quality.py +0 -0
  228. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/surreal_bench/test_log_parse.py +0 -0
  229. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/devtools/surreal_bench/test_report.py +0 -0
  230. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/docs/test_desktop_posthog_event_docs.py +0 -0
  231. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/integration/__init__.py +0 -0
  232. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/integration/test_semantic_diff_harness.py +0 -0
  233. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/mcp/__init__.py +0 -0
  234. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/mcp/test_desktop_mcp_retry.py +0 -0
  235. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/mcp/test_list_projects.py +0 -0
  236. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/mcp/test_server.py +0 -0
  237. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_git_utils.py +0 -0
  238. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_gitignore_utils.py +0 -0
  239. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_helpers_semantic.py +0 -0
  240. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_template_yaml_escaping.py +0 -0
  241. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_typedef_cli_import_budget.py +0 -0
  242. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/test_unified_cli_airflow.py +0 -0
  243. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/devtools/__init__.py +0 -0
  244. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/devtools/test_semdiff_expected_changes.py +0 -0
  245. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/devtools/test_semdiff_lifecycle_io.py +0 -0
  246. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/devtools/test_semdiff_lifecycle_provisioning.py +0 -0
  247. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/formula/__init__.py +0 -0
  248. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/__init__.py +0 -0
  249. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/test_databricks_utils.py +0 -0
  250. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/test_dbt_profile.py +0 -0
  251. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/test_logging.py +0 -0
  252. {typedef_data_intelligence-0.32.0 → typedef_data_intelligence-0.34.0}/tests/unit/utils/test_snowflake_utils.py +0 -0
@@ -1,5 +1,64 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.34.0](https://github.com/typedef-ai/typedef/compare/typedef-data-intelligence-v0.33.0...typedef-data-intelligence-v0.34.0) (2026-07-01)
4
+
5
+
6
+ ### Miscellaneous Chores
7
+
8
+ * **agent:** prune dead PydanticAI orchestrator builders + .yaml.j2 prompts (TD-3776) ([#1065](https://github.com/typedef-ai/typedef/issues/1065)) ([0d05b9d](https://github.com/typedef-ai/typedef/commit/0d05b9d195a921db341252314fed5c286356a5ce))
9
+
10
+
11
+ ### Features
12
+
13
+ * **desktop:** Airflow additional catalogs/databases allowlist + fix DatabaseRef allowlist PATCH (TD-3770, TD-3772) ([#1060](https://github.com/typedef-ai/typedef/issues/1060)) ([60d550c](https://github.com/typedef-ai/typedef/commit/60d550c7beacb9d202e18c2bd93b7901b15e4f50))
14
+ * **desktop:** capture frontend webview console logs (TD-3711) ([#1041](https://github.com/typedef-ai/typedef/issues/1041)) ([cc1a345](https://github.com/typedef-ai/typedef/commit/cc1a345a4f11d6757b4e18334a4f5ac297f58dc4))
15
+ * **testing:** add portable test-home overlays ([#1047](https://github.com/typedef-ai/typedef/issues/1047)) ([56bc013](https://github.com/typedef-ai/typedef/commit/56bc01367995a9c53c66531914302c744548c1bc))
16
+ * **testing:** clone referenced repos during test-home provisioning ([#1048](https://github.com/typedef-ai/typedef/issues/1048)) ([1f38adf](https://github.com/typedef-ai/typedef/commit/1f38adfbd85ad321638429451334069799802794))
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * **core:** remove silent config/workspace fallbacks — fail-fast (TD-3515) ([#1053](https://github.com/typedef-ai/typedef/issues/1053)) ([b599d0a](https://github.com/typedef-ai/typedef/commit/b599d0a111abd9c57ef20ba7e963002c61d468f8))
22
+ * **desktop:** name failing preflight step and pin error banner by Continue (TD-3657) ([#1039](https://github.com/typedef-ai/typedef/issues/1039)) ([8a0c004](https://github.com/typedef-ai/typedef/commit/8a0c004fc4178edba294771caf3160b4cd848ec7))
23
+ * **desktop:** resolve worktree repo from active worktree (TD-3514) ([#1026](https://github.com/typedef-ai/typedef/issues/1026)) ([d033653](https://github.com/typedef-ai/typedef/commit/d0336531c3d723a7194e5491e729c640098b03f0))
24
+
25
+
26
+ ### Code Refactoring
27
+
28
+ * **ingest:** move dbt core behind graph source boundary (TD-3432) ([#1074](https://github.com/typedef-ai/typedef/issues/1074)) ([6c471c5](https://github.com/typedef-ai/typedef/commit/6c471c51e78803568cb52db1fee5d66d023385fc))
29
+
30
+ ## [0.33.0](https://github.com/typedef-ai/typedef/compare/typedef-data-intelligence-v0.32.0...typedef-data-intelligence-v0.33.0) (2026-06-26)
31
+
32
+
33
+ ### Miscellaneous Chores
34
+
35
+ * **typecheck:** bootstrap shared ty burndown helpers (TD-3643) ([#1027](https://github.com/typedef-ai/typedef/issues/1027)) ([8661932](https://github.com/typedef-ai/typedef/commit/866193281039c974cae3b4b8d41b5adc28452dee))
36
+
37
+
38
+ ### Features
39
+
40
+ * **desktop-sync:** add request-scoped matrix sync overrides (TD-3629) ([#1022](https://github.com/typedef-ai/typedef/issues/1022)) ([5db8f29](https://github.com/typedef-ai/typedef/commit/5db8f2945f41b92772bb3786052d2d843822d209))
41
+ * **desktop:** add isolated test home tooling ([#996](https://github.com/typedef-ai/typedef/issues/996)) ([309a5f3](https://github.com/typedef-ai/typedef/commit/309a5f30f944309414e6ee1489fc816e87fe1d60))
42
+ * **desktop:** kind-aware Airflow worktree + project-relative RTIF snapshot (TD-3446, TD-3409) ([#1018](https://github.com/typedef-ai/typedef/issues/1018)) ([edd4ae4](https://github.com/typedef-ai/typedef/commit/edd4ae4d76c792ef48e3fe59566baf82c41309a2))
43
+ * **just:** worktree disk reclaim recipes (tdh-clean + worktree-reclaim) (TD-3660) ([#1036](https://github.com/typedef-ai/typedef/issues/1036)) ([a1d7e7e](https://github.com/typedef-ai/typedef/commit/a1d7e7e9899f5ed0168130a8b6a44d8f67798424))
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * **agent:** await memory observer org writes (TD-3645) ([#1032](https://github.com/typedef-ai/typedef/issues/1032)) ([70abe66](https://github.com/typedef-ai/typedef/commit/70abe66ee1d93adcd715ade66ae7f09a68094299))
49
+ * **core:** refuse to guess workspace for graph reads (TD-3378) ([#978](https://github.com/typedef-ai/typedef/issues/978)) ([036c6bf](https://github.com/typedef-ai/typedef/commit/036c6bf7c26061d8161b71542cf2bb2c03c42f81))
50
+ * **desktop:** make worktree DB clone usable by the agent (TD-3507) ([#974](https://github.com/typedef-ai/typedef/issues/974)) ([beb8e2e](https://github.com/typedef-ai/typedef/commit/beb8e2e60d2c216147259e32624048c5493519df))
51
+ * **desktop:** strip server-owned `unused` flag before connector validation (TD-3632) ([#1013](https://github.com/typedef-ai/typedef/issues/1013)) ([557f832](https://github.com/typedef-ai/typedef/commit/557f832aea36cdce13651472311fafa405105853))
52
+ * **desktop:** workspace-key clone state at the source (TD-3565) ([#1000](https://github.com/typedef-ai/typedef/issues/1000)) ([b8f526b](https://github.com/typedef-ai/typedef/commit/b8f526be3fec093b6d68b53a413355221326a9d0))
53
+ * **desktop:** workspace-scope all worktree-keyed state (TD-3562) ([#988](https://github.com/typedef-ai/typedef/issues/988)) ([b7df8d5](https://github.com/typedef-ai/typedef/commit/b7df8d54485518dcb1eed8d4bf109d62fb940c1c))
54
+ * **desktop:** workspace-scope worktree resolution + write-target guard (TD-3610, TD-3623) ([#1005](https://github.com/typedef-ai/typedef/issues/1005)) ([66e56ec](https://github.com/typedef-ai/typedef/commit/66e56ecf591492ffb6cceea741eae7ee0047210c))
55
+ * **ingest:** lock semantic scoped-write contract and surface failures (TD-3633) ([#1031](https://github.com/typedef-ai/typedef/issues/1031)) ([b804356](https://github.com/typedef-ai/typedef/commit/b8043568ea4fc7e85fde505374ad1005268a0036))
56
+
57
+
58
+ ### Code Refactoring
59
+
60
+ * **desktop:** collapse worktree clone state into one carrier (TD-3507) ([#998](https://github.com/typedef-ai/typedef/issues/998)) ([a9f25f1](https://github.com/typedef-ai/typedef/commit/a9f25f12410b017e0db67629130a73acd0ee72ed))
61
+
3
62
  ## [0.32.0](https://github.com/typedef-ai/typedef/compare/typedef-data-intelligence-v0.31.1...typedef-data-intelligence-v0.32.0) (2026-06-20)
4
63
 
5
64
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: typedef-data-intelligence
3
- Version: 0.32.0
3
+ Version: 0.34.0
4
4
  Summary: Unified lineage management and AI-powered analytics platform for dbt projects
5
5
  Project-URL: Homepage, https://typedef.ai
6
6
  Project-URL: Repository, https://github.com/typedef-ai/data-intelligence
@@ -1,15 +1,18 @@
1
1
  """Memory System Usage Examples.
2
2
 
3
- This module demonstrates how to use the memory system in different scenarios.
3
+ This module demonstrates the async MemoryStorage protocol shape in different
4
+ scenarios.
4
5
 
5
- Prerequisites:
6
- - FalkorDB running on localhost:6379
7
- - Config with memory.enabled=true
8
- - Agents initialized with memory backend
6
+ Note:
7
+ The FalkorDB-backed memory adapters were removed in M6 (TD-3358), and no
8
+ concrete replacement backend is currently registered. This script exits
9
+ early until create_memory_backend() can return a real MemoryStorage backend.
9
10
  """
10
11
 
12
+ import asyncio
11
13
 
12
14
  from agent.memory_observer import MemoryObserver
15
+ from core.backends.config import MemoryConfig
13
16
  from core.backends.memory.factory import create_memory_backend
14
17
  from core.backends.memory.models import (
15
18
  DataPattern,
@@ -17,32 +20,32 @@ from core.backends.memory.models import (
17
20
  EpisodeType,
18
21
  UserPreference,
19
22
  )
23
+ from core.backends.memory.protocol import MemoryStorage
24
+
25
+
26
+ def create_example_memory_backend() -> MemoryStorage | None:
27
+ """Return the example backend, or None until a post-M6 backend exists."""
28
+ return create_memory_backend(
29
+ MemoryConfig(
30
+ backend="none",
31
+ enabled=False,
32
+ default_org_id="example_org",
33
+ default_user_id="local-user",
34
+ )
35
+ )
36
+
20
37
 
21
38
  # ============================================================================
22
39
  # Example 1: Basic Memory Backend Usage
23
40
  # ============================================================================
24
41
 
25
42
 
26
- def example_basic_usage():
43
+ async def example_basic_usage(memory: MemoryStorage):
27
44
  """Basic memory backend initialization and usage."""
28
45
  print("=" * 60)
29
46
  print("Example 1: Basic Memory Backend Usage")
30
47
  print("=" * 60)
31
48
 
32
- # Create memory backend
33
- memory = create_memory_backend(
34
- backend="falkordb",
35
- host="localhost",
36
- port=6379,
37
- username="",
38
- password="",
39
- default_org_id="example_org",
40
- )
41
-
42
- if not memory:
43
- print("❌ Memory backend not available")
44
- return
45
-
46
49
  print("✅ Memory backend initialized")
47
50
 
48
51
  # Store a user preference
@@ -54,18 +57,15 @@ def example_basic_usage():
54
57
  learned_from="Interactive session with Alice",
55
58
  )
56
59
 
57
- memory.store_user_memory(user_id="alice", episode=preference.to_episode())
60
+ await memory.store_user_memory(user_id="alice", episode=preference.to_episode())
58
61
  print("✅ Stored user preference: default_chart_type=bar")
59
62
 
60
63
  # Search user memory
61
- results = memory.search_user_memory(user_id="alice", query="chart", limit=5)
64
+ results = await memory.search_user_memory(user_id="alice", query="chart", limit=5)
62
65
  print(f"✅ Found {len(results)} memories for alice")
63
66
 
64
67
  for result in results:
65
- print(
66
- f" - {result.episode.name} (score: {result.score:.2f}): "
67
- f"{result.episode.content[:50]}..."
68
- )
68
+ print(f" - {result.rank}. {result.fact[:80]}...")
69
69
 
70
70
  # Store organization pattern
71
71
  pattern = DataPattern(
@@ -78,17 +78,17 @@ def example_basic_usage():
78
78
  confidence=0.95,
79
79
  )
80
80
 
81
- memory.store_org_memory(org_id="example_org", episode=pattern.to_episode())
81
+ await memory.store_org_memory(org_id="example_org", episode=pattern.to_episode())
82
82
  print("✅ Stored organization pattern: customers_to_orders join")
83
83
 
84
84
  # Search organization memory
85
- results = memory.search_org_memory(
85
+ results = await memory.search_org_memory(
86
86
  org_id="example_org", query="customer joins", limit=5
87
87
  )
88
88
  print(f"✅ Found {len(results)} org patterns")
89
89
 
90
90
  # Hybrid search (both user and org)
91
- results = memory.search_all(
91
+ results = await memory.search_all(
92
92
  user_id="alice", org_id="example_org", query="customer", limit=10
93
93
  )
94
94
  print(f"✅ Hybrid search found {len(results)} total memories")
@@ -101,29 +101,19 @@ def example_basic_usage():
101
101
  # ============================================================================
102
102
 
103
103
 
104
- def example_memory_observer():
104
+ async def example_memory_observer(memory: MemoryStorage):
105
105
  """Demonstrate automatic pattern capture with MemoryObserver."""
106
106
  print("=" * 60)
107
107
  print("Example 2: Memory Observer for Auto-Capture")
108
108
  print("=" * 60)
109
109
 
110
- memory = create_memory_backend(
111
- backend="falkordb",
112
- host="localhost",
113
- port=6379,
114
- )
115
-
116
- if not memory:
117
- print("❌ Memory backend not available")
118
- return
119
-
120
110
  # Create observer
121
111
  observer = MemoryObserver(memory_backend=memory)
122
112
  print("✅ Memory observer initialized")
123
113
 
124
114
  # Scenario 1: User queries a semantic view
125
115
  print("\n📊 Scenario: User queries ARR by customer segment")
126
- observer.observe_semantic_query(
116
+ await observer.observe_semantic_query(
127
117
  org_id="example_org",
128
118
  view_name="sv_arr_reporting",
129
119
  query_pattern="Group by customer_segment, aggregate total_arr",
@@ -135,7 +125,7 @@ def example_memory_observer():
135
125
 
136
126
  # Scenario 2: Agent discovers a join
137
127
  print("\n🔗 Scenario: Agent joins ARR to customer dimension")
138
- observer.observe_join_pattern(
128
+ await observer.observe_join_pattern(
139
129
  org_id="example_org",
140
130
  models=["fct_arr_reporting", "dim_customers"],
141
131
  join_condition="customer_id",
@@ -145,7 +135,7 @@ def example_memory_observer():
145
135
 
146
136
  # Scenario 3: Agent defines a metric
147
137
  print("\n📈 Scenario: Agent calculates MRR metric")
148
- observer.observe_metric_definition(
138
+ await observer.observe_metric_definition(
149
139
  org_id="example_org",
150
140
  metric_name="MRR",
151
141
  calculation="SUM(subscription_amount) / 12",
@@ -156,7 +146,7 @@ def example_memory_observer():
156
146
 
157
147
  # Scenario 4: Agent finds data quality issue
158
148
  print("\n⚠️ Scenario: Agent finds null email addresses")
159
- observer.observe_data_quality_issue(
149
+ await observer.observe_data_quality_issue(
160
150
  org_id="example_org",
161
151
  issue_type="null_values",
162
152
  description="dim_customers has approximately 5% null email addresses",
@@ -166,7 +156,9 @@ def example_memory_observer():
166
156
  print("✅ Auto-captured data quality issue")
167
157
 
168
158
  # Verify patterns were stored
169
- results = memory.search_org_memory(org_id="example_org", query="patterns", limit=10)
159
+ results = await memory.search_org_memory(
160
+ org_id="example_org", query="patterns", limit=10
161
+ )
170
162
  print(f"\n✅ Total patterns stored: {len(results)}")
171
163
 
172
164
  print()
@@ -177,27 +169,17 @@ def example_memory_observer():
177
169
  # ============================================================================
178
170
 
179
171
 
180
- def example_user_personalization():
172
+ async def example_user_personalization(memory: MemoryStorage):
181
173
  """Demonstrate building user personalization over time."""
182
174
  print("=" * 60)
183
175
  print("Example 3: User Personalization Flow")
184
176
  print("=" * 60)
185
177
 
186
- memory = create_memory_backend(
187
- backend="falkordb",
188
- host="localhost",
189
- port=6379,
190
- )
191
-
192
- if not memory:
193
- print("❌ Memory backend not available")
194
- return
195
-
196
178
  user_id = "bob@example.com"
197
179
 
198
180
  # Session 1: User asks about ARR
199
181
  print("\n📅 Session 1: Bob asks about ARR trends")
200
- memory.store_user_memory(
182
+ await memory.store_user_memory(
201
183
  user_id=user_id,
202
184
  episode=Episode(
203
185
  name="arr_trends_query",
@@ -210,7 +192,7 @@ def example_user_personalization():
210
192
 
211
193
  # Session 2: User expresses chart preference
212
194
  print("\n📅 Session 2: Bob mentions chart preference")
213
- memory.store_user_memory(
195
+ await memory.store_user_memory(
214
196
  user_id=user_id,
215
197
  episode=UserPreference(
216
198
  key="preferred_chart_for_trends",
@@ -224,7 +206,7 @@ def example_user_personalization():
224
206
 
225
207
  # Session 3: User sets default date range
226
208
  print("\n📅 Session 3: Bob sets default date range")
227
- memory.store_user_memory(
209
+ await memory.store_user_memory(
228
210
  user_id=user_id,
229
211
  episode=UserPreference(
230
212
  key="default_date_range",
@@ -238,11 +220,13 @@ def example_user_personalization():
238
220
 
239
221
  # Session 4: Recall context for personalization
240
222
  print("\n📅 Session 4: Bob returns, agent recalls preferences")
241
- results = memory.search_user_memory(user_id=user_id, query="preferences", limit=5)
223
+ results = await memory.search_user_memory(
224
+ user_id=user_id, query="preferences", limit=5
225
+ )
242
226
 
243
227
  print(f"✅ Recalled {len(results)} preferences:")
244
228
  for result in results:
245
- print(f" - {result.episode.name}: {result.episode.content[:60]}...")
229
+ print(f" - {result.rank}. {result.fact[:80]}...")
246
230
 
247
231
  # Agent can now personalize:
248
232
  # - Use line charts for trend queries (not bar charts)
@@ -257,22 +241,12 @@ def example_user_personalization():
257
241
  # ============================================================================
258
242
 
259
243
 
260
- def example_org_knowledge_building():
244
+ async def example_org_knowledge_building(memory: MemoryStorage):
261
245
  """Demonstrate building organization-wide knowledge base."""
262
246
  print("=" * 60)
263
247
  print("Example 4: Organization Knowledge Building")
264
248
  print("=" * 60)
265
249
 
266
- memory = create_memory_backend(
267
- backend="falkordb",
268
- host="localhost",
269
- port=6379,
270
- )
271
-
272
- if not memory:
273
- print("❌ Memory backend not available")
274
- return
275
-
276
250
  org_id = "acme_corp"
277
251
 
278
252
  # Pattern 1: Common fact-to-dimension joins
@@ -294,7 +268,7 @@ def example_org_knowledge_building():
294
268
  discovered_by="data_engineer_agent",
295
269
  confidence=0.95,
296
270
  )
297
- memory.store_org_memory(org_id=org_id, episode=pattern.to_episode())
271
+ await memory.store_org_memory(org_id=org_id, episode=pattern.to_episode())
298
272
 
299
273
  print(f"✅ Stored {len(common_joins)} common join patterns")
300
274
 
@@ -320,7 +294,7 @@ def example_org_knowledge_building():
320
294
  discovered_by="analyst_agent",
321
295
  confidence=0.99,
322
296
  )
323
- memory.store_org_memory(org_id=org_id, episode=pattern.to_episode())
297
+ await memory.store_org_memory(org_id=org_id, episode=pattern.to_episode())
324
298
 
325
299
  print(f"✅ Stored {len(metrics)} metric definitions")
326
300
 
@@ -341,20 +315,17 @@ def example_org_knowledge_building():
341
315
  discovered_by="data_engineer_agent",
342
316
  confidence=0.90,
343
317
  )
344
- memory.store_org_memory(org_id=org_id, episode=pattern.to_episode())
318
+ await memory.store_org_memory(org_id=org_id, episode=pattern.to_episode())
345
319
 
346
320
  print(f"✅ Stored {len(grains)} grain patterns")
347
321
 
348
322
  # Query the built knowledge
349
323
  print("\n🔍 Querying organization knowledge")
350
- results = memory.search_org_memory(org_id=org_id, query="ARR metric", limit=5)
324
+ results = await memory.search_org_memory(org_id=org_id, query="ARR metric", limit=5)
351
325
  print(f"✅ ARR metric search: {len(results)} results")
352
326
 
353
327
  for result in results:
354
- print(
355
- f" - {result.episode.metadata.get('pattern_type', 'unknown')}: "
356
- f"{result.episode.name} (confidence: {result.episode.metadata.get('confidence', 0):.2f})"
357
- )
328
+ print(f" - {result.rank}. {result.fact[:80]}...")
358
329
 
359
330
  print()
360
331
 
@@ -364,39 +335,29 @@ def example_org_knowledge_building():
364
335
  # ============================================================================
365
336
 
366
337
 
367
- def example_memory_management():
338
+ async def example_memory_management(memory: MemoryStorage):
368
339
  """Demonstrate memory statistics and management."""
369
340
  print("=" * 60)
370
341
  print("Example 5: Memory Statistics and Management")
371
342
  print("=" * 60)
372
343
 
373
- memory = create_memory_backend(
374
- backend="falkordb",
375
- host="localhost",
376
- port=6379,
377
- )
378
-
379
- if not memory:
380
- print("❌ Memory backend not available")
381
- return
382
-
383
344
  # Get user statistics
384
345
  print("\n📊 User Memory Statistics")
385
- stats = memory.get_stats(user_id="alice")
346
+ stats = await memory.get_stats(user_id="alice")
386
347
  print(f"User memory: {stats}")
387
348
 
388
349
  # Get organization statistics
389
350
  print("\n📊 Organization Memory Statistics")
390
- stats = memory.get_stats(org_id="example_org")
351
+ stats = await memory.get_stats(org_id="example_org")
391
352
  print(f"Org memory: {stats}")
392
353
 
393
354
  # Clear user memory (GDPR compliance example)
394
355
  print("\n🗑️ GDPR: User requests memory deletion")
395
- memory.clear_user_memory(user_id="alice")
356
+ await memory.clear_user_memory(user_id="alice")
396
357
  print("✅ Alice's memory cleared")
397
358
 
398
359
  # Verify deletion
399
- stats = memory.get_stats(user_id="alice")
360
+ stats = await memory.get_stats(user_id="alice")
400
361
  print(f"Alice's memory after deletion: {stats}")
401
362
 
402
363
  print()
@@ -407,18 +368,28 @@ def example_memory_management():
407
368
  # ============================================================================
408
369
 
409
370
 
410
- if __name__ == "__main__":
371
+ async def main():
372
+ """Run all memory usage examples."""
411
373
  print("\n" + "=" * 60)
412
374
  print("MEMORY SYSTEM USAGE EXAMPLES")
413
375
  print("=" * 60 + "\n")
414
376
 
377
+ memory = create_example_memory_backend()
378
+ if memory is None:
379
+ print("❌ Memory backend not available; examples skipped")
380
+ return
381
+
415
382
  # Run all examples
416
- example_basic_usage()
417
- example_memory_observer()
418
- example_user_personalization()
419
- example_org_knowledge_building()
420
- example_memory_management()
383
+ await example_basic_usage(memory)
384
+ await example_memory_observer(memory)
385
+ await example_user_personalization(memory)
386
+ await example_org_knowledge_building(memory)
387
+ await example_memory_management(memory)
421
388
 
422
389
  print("=" * 60)
423
390
  print("All examples completed!")
424
391
  print("=" * 60)
392
+
393
+
394
+ if __name__ == "__main__":
395
+ asyncio.run(main())
@@ -3,9 +3,9 @@
3
3
  This demonstrates how the same tool can have different descriptions
4
4
  depending on which specialist is using it.
5
5
  """
6
- from agent.orchestrator import AgentDeps
7
6
  from agent.toolsets.data import add_execute_query_tool
8
7
  from agent.toolsets.graph import add_query_graph_tool
8
+ from agent.types import AgentDeps
9
9
  from pydantic_ai import Agent
10
10
 
11
11
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "typedef-data-intelligence"
3
- version = "0.32.0"
3
+ version = "0.34.0"
4
4
  description = "Unified lineage management and AI-powered analytics platform for dbt projects"
5
5
  readme = "README.pypi.md"
6
6
  license = "LicenseRef-Proprietary"
@@ -52,6 +52,15 @@ _HAS_DESKTOP_API = _API_PROFILE.has(ApiCapability.DESKTOP_ROUTES) and _API_PROFI
52
52
  ApiCapability.UNIFIED_GRAPH
53
53
  )
54
54
  _NEEDS_LEGACY_STATE = False
55
+ DYNAMIC_LOCAL_CORS_REGEX = r"^https?://(localhost|127\.0\.0\.1)(:\d+)?$"
56
+
57
+
58
+ def _dynamic_local_cors_regex() -> str | None:
59
+ """Allow arbitrary local dev ports only when explicitly enabled."""
60
+ enabled = os.environ.get("TYPEDEF_ENABLE_DYNAMIC_LOCAL_CORS", "").lower()
61
+ if _HAS_DESKTOP_API and enabled in {"1", "true", "yes"}:
62
+ return DYNAMIC_LOCAL_CORS_REGEX
63
+ return None
55
64
 
56
65
 
57
66
  def _legacy_state_from_request(request: Request) -> Any | None:
@@ -296,7 +305,10 @@ async def lifespan(app: FastAPI):
296
305
  logger.debug("gold-build temp dir cleanup failed", exc_info=True)
297
306
 
298
307
  try:
299
- from core.paths import cleanup_stale_wizard_scratch
308
+ from core.paths import (
309
+ cleanup_stale_frontend_logs,
310
+ cleanup_stale_wizard_scratch,
311
+ )
300
312
 
301
313
  removed_wizard_scratch = cleanup_stale_wizard_scratch()
302
314
  if removed_wizard_scratch:
@@ -305,6 +317,15 @@ async def lifespan(app: FastAPI):
305
317
  len(removed_wizard_scratch),
306
318
  )
307
319
 
320
+ # TD-3711: prune captured frontend (webview) logs by age + total size
321
+ # so optional capture can never grow unbounded.
322
+ removed_frontend_logs = cleanup_stale_frontend_logs()
323
+ if removed_frontend_logs:
324
+ logger.info(
325
+ "Removed %d stale frontend log file(s) on startup",
326
+ len(removed_frontend_logs),
327
+ )
328
+
308
329
  # TD-3200 Phase 3: convert any already-workspaces-shape config from the
309
330
  # pre-envelope ContextEntry/flat-LineageTarget shape to the
310
331
  # ContextProject/BuildTarget envelope. Operates only on
@@ -408,6 +429,9 @@ async def lifespan(app: FastAPI):
408
429
  "Initialized standalone threads backend: %s",
409
430
  _ucfg_for_threads.threads.db_path,
410
431
  )
432
+ _migrate_threads_workspace_scope(
433
+ app.state.standalone_threads_backend, _ucfg_for_threads
434
+ )
411
435
  except Exception as exc:
412
436
  logger.warning(
413
437
  "Could not initialize threads backend for desktop: %s", exc
@@ -1060,6 +1084,35 @@ def initialize_app_state() -> AppState:
1060
1084
  )
1061
1085
 
1062
1086
 
1087
+ def _migrate_threads_workspace_scope(
1088
+ threads_backend: ThreadsBackend, cfg: UnifiedConfig
1089
+ ) -> None:
1090
+ """Run the one-time TD-3562 worktree-scope re-key on the desktop threads DB.
1091
+
1092
+ Re-keys existing chat history from bare worktree ids to workspace-scoped
1093
+ keys so it isn't silently orphaned by the new scoping. Idempotent (the
1094
+ backend guards on a versioned sentinel). Never breaks boot — a migration
1095
+ failure degrades to "history may appear under the wrong key" rather than a
1096
+ dead backend. TEMPORARY: remove with the migration module one release
1097
+ later (TD-3564).
1098
+ """
1099
+ from core.backends.threads.migration import migrate_workspace_scope
1100
+
1101
+ try:
1102
+ workspaces = getattr(cfg, "workspaces", None) or {}
1103
+ workspace_worktrees = {
1104
+ ws_name: list((getattr(ws, "worktrees", None) or {}).keys())
1105
+ for ws_name, ws in workspaces.items()
1106
+ }
1107
+ migrate_workspace_scope(threads_backend, workspace_worktrees)
1108
+ except Exception: # noqa: BLE001 — never break boot on migration issues
1109
+ logger.warning(
1110
+ "[td-3562] threads worktree-scope migration failed; existing chat "
1111
+ "history may appear under its pre-migration key until resolved",
1112
+ exc_info=True,
1113
+ )
1114
+
1115
+
1063
1116
  def _load_unified_config() -> UnifiedConfig:
1064
1117
  """Load UnifiedConfig for desktop profile mode.
1065
1118
 
@@ -1182,6 +1235,7 @@ app.add_middleware(
1182
1235
  "tauri://localhost",
1183
1236
  "https://tauri.localhost",
1184
1237
  ],
1238
+ allow_origin_regex=_dynamic_local_cors_regex(),
1185
1239
  allow_credentials=True,
1186
1240
  allow_methods=["*"],
1187
1241
  allow_headers=["*"],
@@ -1271,6 +1325,7 @@ if _HAS_DESKTOP_API:
1271
1325
  )
1272
1326
  from agent.api.desktop_pty import router as desktop_pty_router # noqa: E402
1273
1327
  from lineage.api.desktop_agents import router as desktop_agents_router # noqa: E402
1328
+ from lineage.api.desktop_logs import router as desktop_logs_router # noqa: E402
1274
1329
  from lineage.api.desktop_quickstart import (
1275
1330
  router as desktop_quickstart_router, # noqa: E402
1276
1331
  )
@@ -1305,6 +1360,7 @@ if _HAS_DESKTOP_API:
1305
1360
  app.include_router(desktop_quickstart_router)
1306
1361
  app.include_router(desktop_sync_router)
1307
1362
  app.include_router(desktop_debug_router)
1363
+ app.include_router(desktop_logs_router)
1308
1364
 
1309
1365
  # Mount desktop-graph MCP server at /mcp/ via streamable-http transport.
1310
1366
  # When running inside the desktop app, the sidecar is always available —