sqlseed 0.2.4__tar.gz → 0.2.6__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 (91) hide show
  1. {sqlseed-0.2.4 → sqlseed-0.2.6}/.gitignore +10 -0
  2. {sqlseed-0.2.4 → sqlseed-0.2.6}/CHANGELOG.md +76 -0
  3. {sqlseed-0.2.4 → sqlseed-0.2.6}/CHANGELOG.zh-CN.md +76 -0
  4. sqlseed-0.2.6/PKG-INFO +385 -0
  5. sqlseed-0.2.6/README.md +318 -0
  6. sqlseed-0.2.6/README.zh-CN.md +292 -0
  7. {sqlseed-0.2.4 → sqlseed-0.2.6}/pyproject.toml +4 -3
  8. sqlseed-0.2.6/src/sqlseed/AGENTS.md +44 -0
  9. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/__init__.py +76 -32
  10. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/AGENTS.md +10 -6
  11. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/progress.py +89 -13
  12. sqlseed-0.2.6/src/sqlseed/_utils/redaction.py +62 -0
  13. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/config/AGENTS.md +12 -3
  14. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/AGENTS.md +9 -3
  15. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/AGENTS.md +13 -4
  16. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_connection.py +5 -1
  17. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_specs.py +8 -5
  18. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/stream.py +5 -0
  19. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/AGENTS.md +21 -3
  20. sqlseed-0.2.6/src/sqlseed/database/_connection_url.py +24 -0
  21. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/sqlalchemy_adapter.py +38 -22
  22. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/AGENTS.md +14 -3
  23. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/plugins/AGENTS.md +6 -3
  24. sqlseed-0.2.4/PKG-INFO +0 -1279
  25. sqlseed-0.2.4/README.md +0 -1213
  26. sqlseed-0.2.4/README.zh-CN.md +0 -1029
  27. sqlseed-0.2.4/src/sqlseed/AGENTS.md +0 -42
  28. {sqlseed-0.2.4 → sqlseed-0.2.6}/LICENSE +0 -0
  29. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/__init__.py +0 -0
  30. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/daemon_task.py +0 -0
  31. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/logger.py +0 -0
  32. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/metrics.py +0 -0
  33. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/paths.py +0 -0
  34. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/sql_safe.py +0 -0
  35. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_utils/type_checks.py +0 -0
  36. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/_version.py +0 -0
  37. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/config/__init__.py +0 -0
  38. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/config/loader.py +0 -0
  39. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/config/models.py +0 -0
  40. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/config/snapshot.py +0 -0
  41. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/__init__.py +0 -0
  42. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/check_adapt.py +0 -0
  43. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/check_parser.py +0 -0
  44. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/column_dag.py +0 -0
  45. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/constraints.py +0 -0
  46. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/enrichment.py +0 -0
  47. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/expression.py +0 -0
  48. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/features.py +0 -0
  49. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/mapper.py +0 -0
  50. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/__init__.py +0 -0
  51. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_common.py +0 -0
  52. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_generation.py +0 -0
  53. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_query.py +0 -0
  54. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_self_ref.py +0 -0
  55. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/orchestrator/_session.py +0 -0
  56. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/plugin_mediator.py +0 -0
  57. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/relation.py +0 -0
  58. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/result.py +0 -0
  59. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/schema.py +0 -0
  60. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/schema_fallback.py +0 -0
  61. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/schema_metadata.py +0 -0
  62. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/transform.py +0 -0
  63. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/core/unique_adjuster.py +0 -0
  64. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/__init__.py +0 -0
  65. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_base_adapter.py +0 -0
  66. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_bulk_optimizer.py +0 -0
  67. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_dialect.py +0 -0
  68. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_helpers.py +0 -0
  69. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_protocol.py +0 -0
  70. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_sqlite_schema.py +0 -0
  71. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_type_normalizer.py +0 -0
  72. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_unique_keys.py +0 -0
  73. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/_value_normalizer.py +0 -0
  74. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/optimizer.py +0 -0
  75. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/database/raw_sqlite_adapter.py +0 -0
  76. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/__init__.py +0 -0
  77. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_datetime_methods.py +0 -0
  78. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_datetime_utils.py +0 -0
  79. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_dispatch.py +0 -0
  80. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_json_helpers.py +0 -0
  81. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_native_provider.py +0 -0
  82. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_protocol.py +0 -0
  83. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/_string_helpers.py +0 -0
  84. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/base_provider.py +0 -0
  85. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/faker_provider.py +0 -0
  86. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/mimesis_provider.py +0 -0
  87. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/generators/registry.py +0 -0
  88. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/plugins/__init__.py +0 -0
  89. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/plugins/hookspecs.py +0 -0
  90. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/plugins/manager.py +0 -0
  91. {sqlseed-0.2.4 → sqlseed-0.2.6}/src/sqlseed/py.typed +0 -0
@@ -59,6 +59,16 @@ dmypy.json
59
59
  *.db
60
60
  *.sqlite
61
61
  *.sqlite3
62
+ # SQLite runtime sidecars
63
+ *.db-wal
64
+ *.db-shm
65
+ *.db-journal
66
+ *.sqlite-wal
67
+ *.sqlite-shm
68
+ *.sqlite-journal
69
+ *.sqlite3-wal
70
+ *.sqlite3-shm
71
+ *.sqlite3-journal
62
72
  .sqlseed_cache/
63
73
  snapshots/
64
74
  .env
@@ -9,6 +9,82 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.2.6] - 2026-10-07
13
+
14
+ ### Changed
15
+
16
+ - Refine Web surface hierarchy, contrast and selection motion, keeping data panels opaque and applying translucent materials to navigation and overlays. Preserve reduced-motion, reduced-transparency and unsupported-filter fallbacks.
17
+ - Make workbench guidance more compact, collapse the table directory on narrow screens, enlarge touch targets and keep generation status, blocking reasons and keyboard focus easier to follow. Shorten the English navigation label from Configurations to Configs without changing its page or actions.
18
+ - Provide English and Simplified Chinese documentation with localized navigation, refreshed package guidance and macOS setup instructions. Expand native macOS regression coverage across Apple Silicon and Intel.
19
+ - Retire obsolete standalone defect probes in favor of the maintained regression suite, and ignore SQLite runtime journal and shared-memory sidecars in the repository.
20
+
21
+ ### Fixed
22
+
23
+ - Align dependency controls and display generation-locale labels without diagnostic prefixes. Prevent open dropdowns from throwing a `Node.contains` error on window resize.
24
+ - Resolve equivalent macOS SQLite path spellings to the same target without folding distinct filenames or opening an extra database descriptor.
25
+ - Distinguish Apple unified memory from Intel/shared or dedicated GPU memory. Report unified-memory model capacity as a heuristic budget rather than measured free VRAM or verified backend compatibility.
26
+ - Close AI clients, response streams and failed HTTP probes on error paths.
27
+ - Install all five local packages together in the quickstart environment, reject unusable virtual environments and print correctly quoted commands for the selected interpreter and shell.
28
+ - Distinguish AI rule-cache column sets containing separator characters. Use a versioned, unambiguous column-name hash; legacy hashes are safely invalidated and refreshed on the next suggestion request.
29
+ - Adapt terminal progress rendering when the output stream or encoding changes, including UTF-8 capture returning to GBK, and safely display non-ASCII descriptions in narrow terminals without replacing the original generation error.
30
+ - Retain ownership of a newly started Web worker if its resume acknowledgement fails, drain it before returning to maintenance, and restore the recovery page after delayed shutdown. Preserve startup diagnostics for service-only recovery without repeating the component installation.
31
+
32
+ ### Compatibility
33
+
34
+ - Retain the plugin requirement for Core `>=0.2.5.dev0,<0.3`; install matching package versions. Existing Python, CLI and configuration entry points remain unchanged, while AI rule-cache entries with the old column hash are refreshed on demand.
35
+ - SQLite cycle appends still require existing non-NULL single-column parent keys and retain the 100,000-key source-pool limit. Ordinary acyclic appends still commit batch by batch; a later failure can leave earlier batches committed. This release does not change those generation or transaction boundaries.
36
+
37
+ ## [0.2.5] - 2026-10-02
38
+
39
+ ### Added
40
+
41
+ - Add reusable `FillOptions` for single-table generation. Existing `fill()` keyword calls and defaults remain supported; explicit keywords override shared settings.
42
+ - Add Simplified Chinese and English interface switching across the Web workbench, configurations, run history and settings, preserving edits and keeping interface language separate from generated-data locale. Bundled message resources also translate supported backend diagnostics.
43
+ - Add light, dark and system appearance, browser-local defaults for new configurations, and a shared Web component reference with bundled fonts.
44
+ - Support managed component changes on Windows and reviewed updates of optional components with fixed dependencies, wheel hashes and service recovery.
45
+ - Add editable AI suggestions and contextual preview-rule editing, keeping unapplied changes separate from active generation rules.
46
+ - Support Web preview and atomic append for SQLite cross-table cycles when every internal edge is a single-column foreign key with existing non-NULL parent keys. Freeze the available keys before insertion, recheck sources and rules before writing, and roll back all newly inserted rows in the selected scope if any batch fails.
47
+
48
+ ### Changed
49
+
50
+ - Split complex AI parsing and graph layout stages into focused helpers, and merge duplicate CSS declarations while preserving rendering and interaction behavior. `fill()` introspection now shows grouped options and typed compatibility keywords; the complete parameter reference remains in the API guide.
51
+ - Simplify workbench guidance, configuration actions and relationship views; add pointer-centered graph zoom, stable hover geometry and actionable cycle locations.
52
+ - Add editable graph zoom percentages, clearer node and relationship legends, and brief selection feedback for tabs, workflow stages and checkboxes. Respect reduced-motion preferences and keep dependency arrows static rather than implying an active data transfer.
53
+ - Guide SQLite clear-and-regenerate failures through a reviewed downstream-table expansion while preserving the selected write mode and final confirmation.
54
+ - Deliver Core, CLI, AI, Core MCP and Web together at version 0.2.5. Plugins require Core `>=0.2.5.dev0,<0.3` for shared connection parsing and credential redaction; the 0.2.4 release retains its original dependency metadata.
55
+ - Refresh bilingual package and architecture documentation, update the wordmark, and replace obsolete audit logs with concise historical decision records.
56
+
57
+ ### Fixed
58
+
59
+ - Make both Core MCP tools explicitly use Faker, matching their generated YAML templates and avoiding a fallback to Base when optional Mimesis is absent. The existing target-table-only YAML execution scope is unchanged.
60
+ - Close tutorial SQLite connections and explicitly clean up temporary Notebook databases and cache settings, with complete offline execution checks for four affected notebooks.
61
+ - Preserve SQLite `mode=memory` connection-pool behavior explicitly across SQLAlchemy 2.0/2.1, avoiding a deprecated implicit default without changing URI parsing or thread policy.
62
+ - Reject non-object AI tool arguments through the normal format-error path, apply strict output-limit checks to streaming refinement, and ignore malformed suggestion cache envelopes.
63
+ - Bound Web update checks across DNS and response-header waits, retain in-flight request limits after timeouts, and prevent late responses from replacing the active cache result.
64
+ - Publish a terminal component-operation failure when temporary-file cleanup fails, preserving installer exit information and service recovery without automatically retrying installation.
65
+ - Reject missing or columnless AI refinement targets before reading cached suggestions or calling a model, preserving valid empty tables and SQLite identifier resolution.
66
+ - Keep AI-refined suggestions and cached configurations bound to the requested table; retry wrong-target model responses and ignore mismatched caches without silently renaming them.
67
+ - Preserve quoted colon identifiers in database sampling, column-value and row-count queries without treating them as SQL parameters or changing sampled JSON/date values.
68
+ - Refresh the installer snapshot when reviewing a new component operation plan, so temporary pip/uv detection changes do not permanently block installation; environment and dependency changes are still checked before execution.
69
+ - Preserve SQLite file URL identity across encoded and special-character paths; opening an existing file or restoring a session cannot create a missing replacement database.
70
+ - Restore each database connection's own unsaved workbench state when switching connections. Distinguish a configuration/database mismatch from a connection failure, offer a route back to the current database or to the matching target, and ignore stale responses after switching.
71
+ - Report invalid generator bounds before applying rules; recover empty schemas after a refresh and restore keyboard focus after failed connections or background run polling.
72
+ - Keep database credentials out of connection responses, validation errors, exception messages and diagnostic logs without changing runtime connection targets.
73
+ - Treat invalid date ranges as configuration errors instead of exhausting random-generation retries; clarify the existing date/time contract in AI prompts and validate malformed JSON containers normally.
74
+ - Distinguish malformed AI JSON from empty configurations and feed safe format diagnostics into existing bounded retries; unknown generators follow the existing validation recovery path.
75
+ - Constrain strict local AI responses with LM Studio JSON-schema mode or Ollama JSON-object mode. Allow one text-mode compatibility attempt only when the server explicitly rejects the requested format; preserve strict parsing, output-limit checks, authentication failures and unrelated server errors.
76
+ - Connect local AI services at `localhost` and loopback IP addresses directly when environment proxies are present, without changing remote proxy routing or HTTPS certificate settings.
77
+ - Explain unsupported generation scopes, missing previews and disabled identity-reset controls with their actual cause. Preserve successfully returned samples and keep existing database records separately available for read-only inspection.
78
+ - Preserve frontend error feedback and interaction state after failed asynchronous operations; improve light-theme control contrast, selected checkboxes, inspector spacing and diagnostic/example typography.
79
+ - Update the PyPI uploader for Core Metadata 2.5 and allow the maintained workflow to publish an existing release tag without changing its source commit.
80
+ - Use the shared `pypi` environment for all five existing packages while retaining separate upload jobs and post-publication acceptance; verify publisher permissions using unchanged public release files.
81
+ - Upload only the measured Python coverage report, verify the Codecov signer in an isolated keyring, and deploy documentation through the supported GitHub Pages API with artifact provenance checks, bounded polling and cancellation.
82
+
83
+ ### Compatibility
84
+
85
+ - SQLite cycle appends reuse existing parent records; newly generated cyclic records do not reference one another. Each source pool contains at most 100,000 distinct non-NULL keys. This does not bypass UNIQUE/CHECK constraints or add cross-table backfill. Empty-source cycles, cycles involving composite/overlapping foreign keys or configured associations, PostgreSQL cycles, and clearing cyclic tables before regeneration remain unsupported in the Web workbench.
86
+ - Selecting every table or resetting IDs cannot remove an unsupported cycle. Ordinary acyclic appends process tables sequentially and commit each batch, so a later failure can leave earlier batches committed. Atomic rollback applies to the supported SQLite cycle-append and clear-and-regenerate paths. See the [Web workbench guide](docs/web-workbench.md) for the full boundaries.
87
+
12
88
  ## [0.2.4] - 2026-09-13
13
89
 
14
90
  ### Added
@@ -9,6 +9,82 @@
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.2.6] - 2026-10-07
13
+
14
+ ### 变更
15
+
16
+ - 优化 Web 界面的材质层级、对比度和选择动效,数据面板保持实色,导航与浮层使用半透明材质;保留减少动态效果、减少透明度及不支持背景滤镜时的降级显示。
17
+ - 压缩工作台流程引导,在窄屏折叠数据表目录、扩大触控区域,并改善生成状态、阻塞原因与键盘焦点的呈现。英文导航将 Configurations 简写为 Configs,页面与操作保持不变。
18
+ - 文档站提供英文和简体中文导航,同步包安装说明与 macOS 使用指南;扩展 Apple Silicon 和 Intel Mac 的原生回归覆盖。
19
+ - 用维护中的回归测试替代过期独立缺陷探针,并在仓库中忽略 SQLite 运行时日志及共享内存旁文件。
20
+
21
+ ### 修复
22
+
23
+ - 对齐依赖视图控件,移除数据语言选项中误加的诊断前缀;修复下拉展开时调整窗口大小触发的 `Node.contains` 异常。
24
+ - 将 macOS 上指向同一 SQLite 文件的不同路径写法识别为同一目标,不混淆不同文件,也不额外打开数据库文件描述符。
25
+ - 正确区分 Apple 统一内存、Intel 共享显存与独立显存;统一内存的模型容量仅作为估算预算,不等同于实测可用显存或已验证的后端兼容性。
26
+ - 在异常路径关闭 AI 客户端、响应流和失败的 HTTP 探测。
27
+ - Quickstart 在同一次解析中安装五个本地包,拒绝无法使用的虚拟环境,并按实际解释器和 shell 输出正确引用的后续命令。
28
+ - 修复 AI 规则缓存对包含分隔符的不同列名集合判断相同的问题,改用带版本且无歧义的列名 hash;旧 hash 安全失效,在下次请求规则建议时重新生成缓存。
29
+ - 终端进度条在输出流或编码变化时重新选择可显示的字符,覆盖 UTF-8 捕获结束后恢复 GBK 的情况;中文描述与窄终端显示也不会因编码异常覆盖原始生成错误。
30
+ - Web 新业务进程启动后若恢复确认失败,继续保留其管理权,安全排空并停止后再返回维护状态,延迟退出后也会重新提供恢复页面;保留启动诊断,重试仅恢复服务,不重复安装组件。
31
+
32
+ ### 兼容性
33
+
34
+ - 插件沿用 Core `>=0.2.5.dev0,<0.3` 的依赖要求,请使用匹配的包版本。Python、CLI 和配置入口保持兼容,旧列名 hash 对应的 AI 规则缓存会按需重新生成。
35
+ - SQLite 循环追加仍要求已有非空单列父键,来源池上限仍为 100,000 个键。普通无跨表循环的追加仍逐批提交,后续失败可能保留先前已提交的批次;本版不改变这些生成与事务边界。
36
+
37
+ ## [0.2.5] - 2026-10-02
38
+
39
+ ### 新增
40
+
41
+ - 增加可复用的 `FillOptions` 单表生成参数。既有 `fill()` 关键字调用和默认值保持兼容,显式关键字优先于共享设置。
42
+ - Web 工作台、配置管理、运行记录与设置支持简体中文和 English 切换,保留编辑状态,界面语言与生成数据的 locale 分离;随包分发的消息资源同时翻译受支持的后端诊断。
43
+ - 增加浅色、深色及跟随系统外观、保存在浏览器中的新建配置偏好,以及包含分发字体的 Web 共用组件样板。
44
+ - 支持 Windows 受管组件变更;可选组件更新需审阅依赖、固定其他包版本、核验 wheel 哈希,并恢复服务。
45
+ - AI 建议支持应用前微调,预览可在保留上下文的情况下编辑字段规则;未应用修改与当前生成规则分开保存。
46
+ - Web 支持 SQLite 已有来源的跨表循环预览与原子追加:环内每条关系必须是已有非空父键的单列外键。生成前固定引用来源,写入前重新核对来源与规则,任一批次失败时回滚整个所选范围的本次新增记录。
47
+
48
+ ### 变更
49
+
50
+ - 将复杂 AI 解析与关系图布局阶段拆分为职责明确的辅助函数,合并重复 CSS 声明并保持渲染与交互行为。`fill()` 签名内省改为分组参数和带类型的兼容关键字,API 指南保留完整参数参考。
51
+ - 简化工作台引导、配置操作与关系图;增加鼠标位置缩放、稳定的悬停几何和可定位到具体表的循环问题。
52
+ - 关系图支持手动输入缩放比例,明确节点与关系图例;标签页、流程阶段和复选框提供短暂选择反馈并遵循减少动态效果设置。依赖箭头保持静态,避免暗示正在传输数据。
53
+ - SQLite 清空重建受阻时,引导审阅并补齐下游关联表,保留已选写入方式和最后确认步骤。
54
+ - Core、CLI、AI、Core MCP 与 Web 统一以 0.2.5 版本交付。插件要求 Core `>=0.2.5.dev0,<0.3`,使用共享连接解析与凭据脱敏;0.2.4 发行包保留原有依赖元数据。
55
+ - 同步双语包说明与架构文档,更新品牌标识;用简明历史决策记录替换过期验收日志。
56
+
57
+ ### 修复
58
+
59
+ - 两个 Core MCP 工具显式使用 Faker,与生成的 YAML 模板一致,避免未安装可选 Mimesis 时回退到 Base;YAML 仍只执行工具指定目标表的既有配置范围。
60
+ - 关闭教程 SQLite 连接,显式清理 Notebook 临时数据库并恢复缓存设置;四份受影响示例增加完整离线执行验收。
61
+ - 显式保留 SQLAlchemy 2.0/2.1 下 SQLite `mode=memory` 的连接池行为,消除已弃用的隐式选择,不改变 URI 解析或线程策略。
62
+ - AI 工具参数为非对象 JSON 时进入正常格式错误处理;流式优化同样严格检查输出截断,结构损坏的建议缓存按失效处理。
63
+ - Web 检查更新的等待预算覆盖 DNS 与响应头阶段;超时后保留在途请求数量限制,迟到响应不会覆盖当前缓存结果。
64
+ - 组件操作临时文件清理失败时仍发布明确失败终态,保留安装器退出信息并恢复服务,不自动重试安装。
65
+ - AI 单表配置优化在读取建议缓存或调用模型前拒绝不存在或没有列的目标,保留合法空表及 SQLite 标识符解析行为。
66
+ - AI 优化建议与缓存配置必须属于请求的同一张表;目标错误的模型响应进入重试,错目标缓存重新生成,不静默改名。
67
+ - 数据库采样、列值与行数查询保留已引用的冒号标识符,不再将其误判为 SQL 参数,并保持 JSON 与日期采样值的既有表示。
68
+ - 重新审阅组件操作计划时更新安装器快照,避免 pip/uv 临时探测变化持续阻塞安装;执行前仍核验环境与依赖是否改变。
69
+ - 保留编码及特殊字符 SQLite 文件 URL 的真实目标身份;打开已有文件或恢复会话时,不会创建已丢失数据库的替代空库。
70
+ - 切换数据库时恢复各自未保存的工作台状态;区分配置与数据库不匹配和连接失败,提供返回当前数据库或选择对应目标的入口,切换后的迟到响应不会覆盖新状态。
71
+ - 应用规则前定位非法生成器边界;重新读取空库结构后能进入新表;连接失败或运行记录轮询后恢复键盘焦点。
72
+ - 连接响应、参数校验错误、异常与诊断日志不再回显数据库凭据;实际运行连接目标保持原样。
73
+ - 无效日期范围按配置错误报告,不再耗尽随机取值重试;AI 提示明确既有日期时间合同,错误 JSON 容器交给正常配置校验。
74
+ - 区分 AI 的非法 JSON 与空配置,在既有有界重试中反馈安全的格式诊断;未知生成器进入已有配置校验恢复路径。
75
+ - 本地 AI 严格输出使用 LM Studio JSON-schema 模式或 Ollama JSON-object 模式。仅在服务器明确拒绝指定格式时尝试一次文本兼容请求;仍执行严格解析与截断检查,认证失败及无关服务器错误不会因此降级。
76
+ - 配置了环境代理时,`localhost` 与回环 IP 上的本地 AI 服务仍直接连接;远程服务代理与 HTTPS 证书设置保持不变。
77
+ - 按实际原因说明不支持的生成范围、缺失的新样例与自增重置禁用状态;保留其他已成功返回的样例,并将数据库已有记录作为独立只读入口。
78
+ - 异步操作失败后保留前端错误反馈与交互状态;改善浅色主题控件对比度、复选框选中状态、检查区间距及诊断和示例字体。
79
+ - 升级 PyPI 上传工具以支持 Core Metadata 2.5,并允许通过维护后的工作流发布现有版本 tag,保持其源码提交不变。
80
+ - 五个已创建的包统一使用 `pypi` 发布环境,保留各包独立上传任务及发布后验收,并通过保持不变的公开发行文件核验发布权限。
81
+ - 覆盖率只上传实际测量的 Python 报告,并在独立密钥环中核验 Codecov 签名者;文档通过受支持的 GitHub Pages API 部署,核对产物来源并限制轮询与取消的等待时间。
82
+
83
+ ### 兼容性
84
+
85
+ - SQLite 循环追加引用已有父表记录,新生成的循环表记录不会互相引用;每个来源最多使用 100,000 个非空不同键,不绕过 UNIQUE/CHECK 约束,也不增加跨表回填。来源为空、涉及组合或重叠外键或配置关联、PostgreSQL 循环,以及清空循环表后重建,仍不属于当前 Web 工作台支持范围。
86
+ - 全选数据表或重置 ID 不能解除不支持的循环。普通无跨表循环的追加保持逐表执行、逐批提交,后续失败可能保留先前已提交的批次;原子回滚适用于已支持的 SQLite 循环追加与清空重建流程。完整边界见 [Web 工作台指南](docs/web-workbench.md)。
87
+
12
88
  ## [0.2.4] - 2026-09-13
13
89
 
14
90
  ### 新增
sqlseed-0.2.6/PKG-INFO ADDED
@@ -0,0 +1,385 @@
1
+ Metadata-Version: 2.5
2
+ Name: sqlseed
3
+ Version: 0.2.6
4
+ Summary: Offline declarative SQLite and PostgreSQL test data generation for Python
5
+ Project-URL: Homepage, https://github.com/sunbos/sqlseed
6
+ Project-URL: Documentation, https://sunbos.github.io/sqlseed/
7
+ Project-URL: Repository, https://github.com/sunbos/sqlseed
8
+ Project-URL: Issues, https://github.com/sunbos/sqlseed/issues
9
+ Author-email: SunBo <1443584939@qq.com>
10
+ License-Expression: AGPL-3.0-or-later
11
+ License-File: LICENSE
12
+ Keywords: data-generation,database,seed,sqlite,testing
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Database
22
+ Classifier: Topic :: Software Development :: Testing
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: faker>=30.0
25
+ Requires-Dist: pluggy>=1.3
26
+ Requires-Dist: pydantic>=2.0
27
+ Requires-Dist: pyyaml>=6.0
28
+ Requires-Dist: rstr>=3.2
29
+ Requires-Dist: simpleeval>=1.0
30
+ Requires-Dist: sqlalchemy>=2.0
31
+ Requires-Dist: sqlglot>=25.0
32
+ Requires-Dist: structlog>=24.0
33
+ Requires-Dist: typing-extensions>=4.4
34
+ Provides-Extra: all
35
+ Requires-Dist: mimesis>=18.0; extra == 'all'
36
+ Requires-Dist: psycopg[binary]>=3.0; extra == 'all'
37
+ Requires-Dist: sqlseed-cli<0.3,>=0.2.4.dev0; extra == 'all'
38
+ Requires-Dist: testcontainers>=4.0; extra == 'all'
39
+ Requires-Dist: tqdm>=4.66; extra == 'all'
40
+ Provides-Extra: cli
41
+ Requires-Dist: sqlseed-cli<0.3,>=0.2.4.dev0; extra == 'cli'
42
+ Provides-Extra: dev
43
+ Requires-Dist: import-linter>=2.0; extra == 'dev'
44
+ Requires-Dist: mutmut<3,>=2.5; extra == 'dev'
45
+ Requires-Dist: mypy>=1.10; extra == 'dev'
46
+ Requires-Dist: pre-commit>=3.0; extra == 'dev'
47
+ Requires-Dist: psycopg[binary]>=3.0; extra == 'dev'
48
+ Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
49
+ Requires-Dist: pytest-benchmark>=4.0; extra == 'dev'
50
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
51
+ Requires-Dist: pytest>=8.0; extra == 'dev'
52
+ Requires-Dist: ruff>=0.5; extra == 'dev'
53
+ Requires-Dist: sqlseed-cli<0.3,>=0.2.4.dev0; extra == 'dev'
54
+ Requires-Dist: testcontainers>=4.0; extra == 'dev'
55
+ Requires-Dist: tqdm>=4.66; extra == 'dev'
56
+ Provides-Extra: docs
57
+ Requires-Dist: mkdocs-material>=9.0; extra == 'docs'
58
+ Requires-Dist: mkdocs-static-i18n<2,>=1.3.1; extra == 'docs'
59
+ Requires-Dist: mkdocstrings[python]>=0.25; extra == 'docs'
60
+ Provides-Extra: mimesis
61
+ Requires-Dist: mimesis>=18.0; extra == 'mimesis'
62
+ Provides-Extra: notebook
63
+ Requires-Dist: tqdm>=4.66; extra == 'notebook'
64
+ Provides-Extra: postgres
65
+ Requires-Dist: psycopg[binary]>=3.0; extra == 'postgres'
66
+ Description-Content-Type: text/markdown
67
+
68
+ <div align="center">
69
+
70
+ <h1>
71
+ <picture>
72
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/sunbos/sqlseed/main/docs/assets/brand/sqlseed-wordmark-dark.svg">
73
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/sunbos/sqlseed/main/docs/assets/brand/sqlseed-wordmark-light.svg">
74
+ <img src="https://raw.githubusercontent.com/sunbos/sqlseed/main/docs/assets/brand/sqlseed-wordmark-light.svg" width="256" height="80" alt="sqlseed">
75
+ </picture>
76
+ </h1>
77
+
78
+ **Test data for SQLite and PostgreSQL, from your existing schema.**
79
+
80
+ [English](https://github.com/sunbos/sqlseed/blob/main/README.md) · [简体中文](https://github.com/sunbos/sqlseed/blob/main/README.zh-CN.md)
81
+
82
+ [![PyPI](https://img.shields.io/pypi/v/sqlseed.svg)](https://pypi.org/project/sqlseed/)
83
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-3776ab.svg)](https://www.python.org/downloads/)
84
+ [![CI](https://github.com/sunbos/sqlseed/actions/workflows/ci.yml/badge.svg)](https://github.com/sunbos/sqlseed/actions/workflows/ci.yml)
85
+ [![License: AGPL v3](https://img.shields.io/badge/license-AGPL--3.0--or--later-blue.svg)](https://github.com/sunbos/sqlseed/blob/main/LICENSE)
86
+
87
+ [Quick start](#quick-start) · [Web workbench](#web-workbench) · [CLI](#command-line) · [MCP](#mcp-tools) · [Documentation](https://sunbos.github.io/sqlseed/)
88
+
89
+ </div>
90
+
91
+ sqlseed fills existing database tables with generated test data. Start with inferred
92
+ rules for common columns such as names and email addresses, then specify the ranges,
93
+ choices, or relationships your application needs in Python or YAML.
94
+
95
+ - **Prepare development and test databases:** generate rows in batches and coordinate supported foreign-key dependencies.
96
+ - **Keep data rules reusable:** save configuration, preview samples, and use a seed to reproduce a run under the same conditions.
97
+ - **Choose your interface:** use the Python API, terminal, browser, or MCP tools. The Core runs offline; AI assistance is optional.
98
+
99
+ ## Choose an entry point
100
+
101
+ Requires **Python 3.10+**. Use a virtual environment and install the package for the
102
+ interface you want; you do not need to install every row below. `sqlseed` is the
103
+ offline Core library. The other four packages provide optional interfaces and
104
+ capabilities, and install Core as a dependency.
105
+
106
+ This README describes version 0.2.6. Check [Releases](https://github.com/sunbos/sqlseed/releases)
107
+ for publication status; the [source installation guide](https://sunbos.github.io/sqlseed/guide/#source-installation)
108
+ covers unpublished candidates.
109
+
110
+ | Package and purpose | Install | Start here |
111
+ | --- | --- | --- |
112
+ | **Core — `sqlseed`**: infer rules, preview, and generate data through Python or configuration files | `python -m pip install sqlseed` | [Quick start](#quick-start) |
113
+ | **Web — `sqlseed-web`**: edit rules, inspect relationships, preview, and review runs in a browser | `python -m pip install sqlseed-web` | [Web workbench](#web-workbench) |
114
+ | **CLI — `sqlseed-cli`**: inspect schema, fill tables, and save or replay configurations from a terminal | `python -m pip install sqlseed-cli` | [Command line](#command-line) |
115
+ | **AI — `sqlseed-ai`**: use a configured model to suggest or repair generation rules | `python -m pip install sqlseed-ai` | [AI assistance](#optional-ai-assistance) |
116
+ | **MCP — `mcp-server-sqlseed`**: expose rule-driven YAML generation and data filling to an MCP client | `python -m pip install mcp-server-sqlseed` | [MCP tools](#mcp-tools) |
117
+
118
+ Web and the rule-driven MCP server can each be installed without CLI or AI.
119
+ Installing AI also installs CLI and adds its AI commands. The Core `sqlseed[all]`
120
+ extra groups optional dependencies; it does not install all four packages above.
121
+
122
+ On macOS, start with the [macOS setup guide](https://sunbos.github.io/sqlseed/macos/)
123
+ for native Python, virtual environments, Intel dependencies, and desktop MCP paths.
124
+
125
+ Faker is included with Core and is selected explicitly in the examples below.
126
+ Mimesis is optional: install it with `python -m pip install 'sqlseed[mimesis]'`.
127
+ For an older installation, see the [upgrade guide](https://sunbos.github.io/sqlseed/migration/).
128
+
129
+ ## Quick start
130
+
131
+ Install Core in your Python environment:
132
+
133
+ ```bash
134
+ python -m pip install sqlseed
135
+ ```
136
+
137
+ Save the following as `demo.py` in a new directory and run `python demo.py`.
138
+ It creates a SQLite table and adds 100 users. It needs no repository checkout,
139
+ API key, or external database server.
140
+
141
+ ```python
142
+ import sqlite3
143
+ from contextlib import closing
144
+
145
+ import sqlseed
146
+
147
+ with closing(sqlite3.connect("demo.db")) as conn:
148
+ conn.execute("""
149
+ CREATE TABLE IF NOT EXISTS users (
150
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
151
+ name TEXT NOT NULL,
152
+ email TEXT NOT NULL
153
+ )
154
+ """)
155
+ conn.commit()
156
+
157
+ result = sqlseed.fill(
158
+ "demo.db",
159
+ table="users",
160
+ count=100,
161
+ provider="faker",
162
+ seed=42,
163
+ )
164
+ print(result.count, result.errors) # 100 []
165
+ ```
166
+
167
+ Names and email addresses are inferred from the columns. The database assigns the
168
+ primary keys. Each run appends another 100 rows; it does not clear the table.
169
+ Check both `result.count` and `result.errors` after generation.
170
+
171
+ Since version 0.2.5, `sqlseed.FillOptions(provider="faker", seed=42)`
172
+ can share generation settings across `fill(..., options=settings)` calls.
173
+ Existing individual keywords remain supported; see the
174
+ [Python API reference](https://sunbos.github.io/sqlseed/api/#filloptions).
175
+
176
+ To inspect samples without writing rows:
177
+
178
+ ```python
179
+ import sqlseed
180
+
181
+ rows = sqlseed.preview("demo.db", table="users", count=3, provider="faker")
182
+ for row in rows:
183
+ print(row)
184
+ ```
185
+
186
+ ### Reuse your rules with YAML
187
+
188
+ For the same `demo.db`, save this as `generate.yaml`. Here the column generators
189
+ are explicit, so the rules can be reviewed and reused:
190
+
191
+ ```yaml
192
+ db_path: demo.db
193
+ provider: faker
194
+ locale: en_US
195
+ tables:
196
+ - name: users
197
+ count: 100
198
+ seed: 42
199
+ columns:
200
+ - name: name
201
+ generator: name
202
+ - name: email
203
+ generator: email
204
+ ```
205
+
206
+ Run it from the same directory:
207
+
208
+ ```python
209
+ import sqlseed
210
+
211
+ for result in sqlseed.fill_from_config("generate.yaml"):
212
+ print(result.count, result.errors)
213
+ ```
214
+
215
+ The [configuration guide](https://sunbos.github.io/sqlseed/guide/#yaml-configuration)
216
+ covers value ranges, weighted choices, derived columns, and relationships between
217
+ tables. See the [generator reference](https://sunbos.github.io/sqlseed/guide/#generators)
218
+ for supported names and parameters.
219
+
220
+ ## Web workbench
221
+
222
+ ```bash
223
+ python -m pip install sqlseed-web
224
+ sqlseed-web
225
+ ```
226
+
227
+ Open **[http://127.0.0.1:8630](http://127.0.0.1:8630)** and connect to an existing
228
+ SQLite or PostgreSQL database, such as the `demo.db` above.
229
+ For PostgreSQL, install the driver in the same Python environment before starting
230
+ the workbench: `python -m pip install 'sqlseed[postgres]'`.
231
+ The `sqlseed-web` command is installed with the package; no custom startup script
232
+ or source checkout is required.
233
+
234
+ Select the tables to generate, set row counts, and edit column rules. Use the
235
+ relationship view to inspect foreign keys and check dependencies. Preview samples
236
+ without writing to the database, then review the generation plan and confirm the
237
+ write. Save configurations for reuse and inspect the results in run history.
238
+
239
+ ![English Web workbench relationship view for a fictional SQLite order demo](https://raw.githubusercontent.com/sunbos/sqlseed/992ba0e733d5b41f73e37b0a9d02d573d6e2bb23/docs/assets/screenshots/web-workbench-en-light.png)
240
+
241
+ The actual 0.2.5 interface with the repository's
242
+ [fictional SQLite order example](https://github.com/sunbos/sqlseed/tree/main/examples/order_workflow).
243
+ [Open the full-size PNG](https://raw.githubusercontent.com/sunbos/sqlseed/992ba0e733d5b41f73e37b0a9d02d573d6e2bb23/docs/assets/screenshots/web-workbench-en-light.png)
244
+ or [see the read-only sample preview in the dark theme](https://raw.githubusercontent.com/sunbos/sqlseed/992ba0e733d5b41f73e37b0a9d02d573d6e2bb23/docs/assets/screenshots/web-workbench-en-dark.png).
245
+ Previewed samples are generated for inspection and are not inserted into the database.
246
+
247
+ Since version 0.2.5, the workbench offers Simplified Chinese and English from the top
248
+ bar. Changing the interface language keeps your edits and does not change the
249
+ data language and region used for generation. Light and dark themes are also available.
250
+
251
+ Manual editing, preview, and generation work without AI. To add the optional
252
+ configuration assistant, install AI in the same environment:
253
+
254
+ ```bash
255
+ python -m pip install 'sqlseed-web[ai]'
256
+ ```
257
+
258
+ Then configure a model service in settings. AI suggestions remain available for
259
+ review before you apply them; generation uses the rules you have confirmed.
260
+ See the [Web guide](https://sunbos.github.io/sqlseed/web-workbench/) for connection
261
+ settings, optional components, and deployment requirements.
262
+
263
+ ## Command line
264
+
265
+ Install the CLI, then use the database created in the quick start:
266
+
267
+ ```bash
268
+ python -m pip install sqlseed-cli
269
+ sqlseed inspect demo.db --table users --show-mapping
270
+ sqlseed preview demo.db -t users -n 5 --provider faker
271
+ sqlseed fill demo.db -t users -n 100 --provider faker --no-ai
272
+ ```
273
+
274
+ Use `sqlseed --help` or `sqlseed <command> --help` for options. The CLI also supports
275
+ configuration templates, configuration snapshots, and replay; see the
276
+ [CLI reference](https://sunbos.github.io/sqlseed/guide/#cli-reference).
277
+ Installing Core alone provides the Python API; `sqlseed-cli` supplies the `sqlseed`
278
+ command.
279
+
280
+ ## PostgreSQL
281
+
282
+ Install the PostgreSQL driver extra:
283
+
284
+ ```bash
285
+ python -m pip install 'sqlseed[postgres]'
286
+ ```
287
+
288
+ For an existing database and table, supply the connection URL explicitly:
289
+
290
+ ```python
291
+ import sqlseed
292
+
293
+ result = sqlseed.fill(
294
+ url="postgresql+psycopg://user:password@localhost:5432/app",
295
+ table="users",
296
+ count=100,
297
+ provider="faker",
298
+ )
299
+ print(result.count, result.errors)
300
+ ```
301
+
302
+ Do not pass both a SQLite path and `url`. For supported foreign-key layouts and
303
+ entry-point differences, read the [support scope](https://sunbos.github.io/sqlseed/maintainable-release/).
304
+
305
+ ## Optional AI assistance
306
+
307
+ `sqlseed-ai` adds commands for suggesting generation rules and repairing existing
308
+ configurations. Install it, then configure a model backend using the
309
+ [AI setup guide](https://github.com/sunbos/sqlseed/blob/main/plugins/sqlseed-ai/README.md).
310
+
311
+ | Command | Use it to… |
312
+ | --- | --- |
313
+ | `sqlseed ai-suggest` | Suggest rules for one table |
314
+ | `sqlseed ai-analyze` | Analyze selected tables or a database |
315
+ | `sqlseed auto-heal` | Repair rules in an existing, structurally valid YAML configuration |
316
+
317
+ The analysis and repair workflow can infer rules for supported CHECK patterns,
318
+ such as enums, ranges, and relationships between columns. Other constraints can
319
+ require explicit rules or model suggestions; this is not a solver for arbitrary
320
+ SQL CHECK expressions. Review the candidate configuration and verify the data
321
+ before relying on it.
322
+
323
+ See the [AI command reference](https://sunbos.github.io/sqlseed/guide/#ai-suggest)
324
+ and [backend and validation guide](https://sunbos.github.io/sqlseed/gemma4-integration/).
325
+
326
+ ## MCP tools
327
+
328
+ For rule-driven tools that need no model service, install and start the stdio server:
329
+
330
+ ```bash
331
+ python -m pip install mcp-server-sqlseed
332
+ mcp-server-sqlseed
333
+ ```
334
+
335
+ Configure your MCP client to launch `mcp-server-sqlseed` from that environment;
336
+ use the executable's absolute path if the client does not inherit its PATH.
337
+ The server provides `sqlseed_generate_yaml` to prepare rules for review and
338
+ `sqlseed_execute_fill` to write data to the specified existing table. Check the
339
+ returned `count` and `errors` after a fill.
340
+
341
+ Model-assisted tools use a separate stdio server supplied by the AI package:
342
+
343
+ ```bash
344
+ python -m pip install 'sqlseed-ai[mcp]'
345
+ mcp-server-sqlseed-ai
346
+ ```
347
+
348
+ Configure the AI backend for that process using the [AI setup guide](https://github.com/sunbos/sqlseed/blob/main/plugins/sqlseed-ai/README.md).
349
+ It provides AI YAML suggestions, table analysis, an analyze-and-fill tool, and
350
+ model/backend availability information. Installing AI does not add these tools
351
+ to the rule-driven server; configure both processes if you want both tool sets.
352
+ See [MCP setup](https://sunbos.github.io/sqlseed/guide/#mcp-server) for client
353
+ configuration and tool details.
354
+
355
+ ## Working with your own database
356
+
357
+ - **Create tables first.** sqlseed reads existing schemas. Required parent rows must already exist or be generated earlier in the configuration.
358
+ - **Check the outcome.** A failed Core or CLI run can retain earlier committed batches. Inspect `count` and `errors` before retrying.
359
+ - **Keep reproducibility conditions consistent.** A seed alone does not guarantee identical output across dependency versions, providers, configurations, or initial database contents.
360
+
361
+ Complex CHECK constraints and composite foreign keys have database-specific limits.
362
+ See [support and maintenance](https://sunbos.github.io/sqlseed/maintainable-release/)
363
+ for the supported scope and write behavior.
364
+
365
+ ## Documentation
366
+
367
+ | Next step | Read |
368
+ | --- | --- |
369
+ | Configure generators, expressions, and multi-table data | [User guide](https://sunbos.github.io/sqlseed/guide/) |
370
+ | Use `fill`, `FillOptions`, `preview`, `connect`, `fill_from_config`, or `load_config` | [Python API reference](https://sunbos.github.io/sqlseed/api/) |
371
+ | Try a complete multi-table example | [Order workflow](https://github.com/sunbos/sqlseed/tree/main/examples/order_workflow) |
372
+ | Understand package boundaries and extension hooks | [Architecture](https://sunbos.github.io/sqlseed/architecture/) |
373
+ | Upgrade an existing installation | [Migration guide](https://sunbos.github.io/sqlseed/migration/) |
374
+ | Check published changes | [Releases](https://github.com/sunbos/sqlseed/releases) |
375
+
376
+ ## Contributing
377
+
378
+ See [CONTRIBUTING.md](https://github.com/sunbos/sqlseed/blob/main/CONTRIBUTING.md) for
379
+ source installation, development checks, and contribution guidelines. Report bugs
380
+ with a minimal schema, your configuration, package versions, and the full error in
381
+ [GitHub Issues](https://github.com/sunbos/sqlseed/issues).
382
+
383
+ ## License
384
+
385
+ [AGPL-3.0-or-later](https://github.com/sunbos/sqlseed/blob/main/LICENSE).