dirsql 0.4.50__tar.gz → 0.4.52__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 (240) hide show
  1. {dirsql-0.4.50 → dirsql-0.4.52}/Cargo.lock +2 -2
  2. {dirsql-0.4.50 → dirsql-0.4.52}/PKG-INFO +1 -1
  3. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/__init__.py +2 -2
  4. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/_dirsql.pyi +12 -0
  5. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/Cargo.toml +1 -1
  6. dirsql-0.4.52/packages/python/changelog.d/2026-09-18-export-scan-failure.md +7 -0
  7. dirsql-0.4.52/packages/python/e2e-attestations/claude-1139-sse-flatten.json +7 -0
  8. dirsql-0.4.52/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +7 -0
  9. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/Cargo.toml +1 -1
  10. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/serialize.rs +36 -46
  11. {dirsql-0.4.50 → dirsql-0.4.52}/Cargo.toml +0 -0
  12. {dirsql-0.4.50 → dirsql-0.4.52}/README.md +0 -0
  13. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/_async.py +0 -0
  14. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/__init__.py +0 -0
  15. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/discover_plugins/__init__.py +0 -0
  16. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  17. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  18. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  19. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
  20. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  21. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/main.py +0 -0
  22. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/cli/resolve_config_extensions.py +0 -0
  23. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/plan_entry_path.py +0 -0
  24. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/py.typed +0 -0
  25. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/read_config.py +0 -0
  26. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/resolve_configs_extension_specs.py +0 -0
  27. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/resolve_extension.py +0 -0
  28. {dirsql-0.4.50 → dirsql-0.4.52}/dirsql/resolve_package.py +0 -0
  29. {dirsql-0.4.50 → dirsql-0.4.52}/docs/.claude/CLAUDE.md +0 -0
  30. {dirsql-0.4.50 → dirsql-0.4.52}/docs/.vitepress/config.ts +0 -0
  31. {dirsql-0.4.50 → dirsql-0.4.52}/docs/.vitepress/theme/index.ts +0 -0
  32. {dirsql-0.4.50 → dirsql-0.4.52}/docs/.vitepress/theme/lang.ts +0 -0
  33. {dirsql-0.4.50 → dirsql-0.4.52}/docs/AGENTS.md +0 -0
  34. {dirsql-0.4.50 → dirsql-0.4.52}/docs/explanation.md +0 -0
  35. {dirsql-0.4.50 → dirsql-0.4.52}/docs/getting-started.md +0 -0
  36. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/columns-from-paths.md +0 -0
  37. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/define-tables.md +0 -0
  38. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/embed.md +0 -0
  39. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/extract-from-contents.md +0 -0
  40. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/load-extension.md +0 -0
  41. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/parse-files-into-columns.md +0 -0
  42. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/persist.md +0 -0
  43. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/query-json.md +0 -0
  44. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/query-without-config.md +0 -0
  45. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/react-to-changes.md +0 -0
  46. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/search-by-meaning.md +0 -0
  47. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/search-indexes.md +0 -0
  48. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/skip-files.md +0 -0
  49. {dirsql-0.4.50 → dirsql-0.4.52}/docs/howto/write-a-plugin.md +0 -0
  50. {dirsql-0.4.50 → dirsql-0.4.52}/docs/index.md +0 -0
  51. {dirsql-0.4.50 → dirsql-0.4.52}/docs/package.json +0 -0
  52. {dirsql-0.4.50 → dirsql-0.4.52}/docs/plugins.md +0 -0
  53. {dirsql-0.4.50 → dirsql-0.4.52}/docs/pnpm-lock.yaml +0 -0
  54. {dirsql-0.4.50 → dirsql-0.4.52}/docs/pnpm-workspace.yaml +0 -0
  55. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/cli.md +0 -0
  56. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/columns.md +0 -0
  57. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/config.md +0 -0
  58. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/hooks.md +0 -0
  59. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/http-api.md +0 -0
  60. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/path-tables.md +0 -0
  61. {dirsql-0.4.50 → dirsql-0.4.52}/docs/reference/sdk.md +0 -0
  62. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/CHANGELOG.md +0 -0
  63. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/MIGRATIONS.md +0 -0
  64. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/README.md +0 -0
  65. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  66. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  67. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  68. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  69. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  70. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  71. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  72. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  73. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  74. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  75. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  76. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  77. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  78. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  79. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  80. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  81. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  82. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  83. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  84. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  85. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  86. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  87. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  88. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  89. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  90. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  91. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  92. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/changelog.d/README.md +0 -0
  93. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/conftest.py +0 -0
  94. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/.claude/CLAUDE.md +0 -0
  95. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/.vitepress/config.ts +0 -0
  96. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  97. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  98. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/AGENTS.md +0 -0
  99. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/explanation.md +0 -0
  100. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/getting-started.md +0 -0
  101. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/columns-from-paths.md +0 -0
  102. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/define-tables.md +0 -0
  103. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/embed.md +0 -0
  104. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/extract-from-contents.md +0 -0
  105. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/load-extension.md +0 -0
  106. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  107. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/persist.md +0 -0
  108. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/query-json.md +0 -0
  109. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/query-without-config.md +0 -0
  110. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/react-to-changes.md +0 -0
  111. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/search-by-meaning.md +0 -0
  112. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/search-indexes.md +0 -0
  113. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/skip-files.md +0 -0
  114. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/howto/write-a-plugin.md +0 -0
  115. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/index.md +0 -0
  116. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/package.json +0 -0
  117. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/plugins.md +0 -0
  118. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/pnpm-lock.yaml +0 -0
  119. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/pnpm-workspace.yaml +0 -0
  120. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/cli.md +0 -0
  121. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/columns.md +0 -0
  122. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/config.md +0 -0
  123. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/hooks.md +0 -0
  124. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/http-api.md +0 -0
  125. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/path-tables.md +0 -0
  126. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/docs/reference/sdk.md +0 -0
  127. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  128. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  129. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  130. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  131. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  132. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  133. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  134. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  135. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  136. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  137. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  138. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  139. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  140. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  141. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  142. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  143. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  144. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  145. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  146. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  147. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  148. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  149. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  150. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  151. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  152. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  153. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  154. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  155. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  156. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  157. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  158. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  159. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  160. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  161. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  162. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  163. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  164. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  165. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  166. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/migrations.d/README.md +0 -0
  167. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/src/lib.rs +0 -0
  168. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/testing-conventions.toml +0 -0
  169. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/__init__.py +0 -0
  170. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/conftest.py +0 -0
  171. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/e2e/__init__.py +0 -0
  172. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  173. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  174. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/integration/__init__.py +0 -0
  175. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/integration/binding/__init__.py +0 -0
  176. {dirsql-0.4.50 → dirsql-0.4.52}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  177. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/CHANGELOG.md +0 -0
  178. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/MIGRATIONS.md +0 -0
  179. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/README.md +0 -0
  180. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/benches/db_bench.rs +0 -0
  181. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/benches/differ_bench.rs +0 -0
  182. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/benches/matcher_bench.rs +0 -0
  183. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/benches/scanner_bench.rs +0 -0
  184. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/explanation.md +0 -0
  185. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/getting-started.md +0 -0
  186. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  187. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/define-tables.md +0 -0
  188. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/embed.md +0 -0
  189. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  190. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/load-extension.md +0 -0
  191. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  192. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/persist.md +0 -0
  193. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/query-json.md +0 -0
  194. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/query-without-config.md +0 -0
  195. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/react-to-changes.md +0 -0
  196. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  197. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/search-indexes.md +0 -0
  198. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/skip-files.md +0 -0
  199. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  200. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/index.md +0 -0
  201. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/plugins.md +0 -0
  202. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/cli.md +0 -0
  203. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/columns.md +0 -0
  204. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/config.md +0 -0
  205. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/hooks.md +0 -0
  206. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/http-api.md +0 -0
  207. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/path-tables.md +0 -0
  208. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/docs/reference/sdk.md +0 -0
  209. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/bin/dirsql.rs +0 -0
  210. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/execute.rs +0 -0
  211. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/init.rs +0 -0
  212. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/mod.rs +0 -0
  213. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/repl.rs +0 -0
  214. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/router.rs +0 -0
  215. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/run.rs +0 -0
  216. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/server.rs +0 -0
  217. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/cli/table.rs +0 -0
  218. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/command.rs +0 -0
  219. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/config.rs +0 -0
  220. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/db.rs +0 -0
  221. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/default_config.toml +0 -0
  222. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/differ.rs +0 -0
  223. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/extension_resolution.rs +0 -0
  224. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/functions.rs +0 -0
  225. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/infer.rs +0 -0
  226. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/launcher.rs +0 -0
  227. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/lib.rs +0 -0
  228. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/matcher.rs +0 -0
  229. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/parsed_cache.rs +0 -0
  230. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/parsed_vtab.rs +0 -0
  231. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/path_table.rs +0 -0
  232. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/persist.rs +0 -0
  233. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/progress.rs +0 -0
  234. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/row_event_flat.rs +0 -0
  235. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/scanner.rs +0 -0
  236. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/sql_literal.rs +0 -0
  237. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/vtab.rs +0 -0
  238. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/vtab_scaffold.rs +0 -0
  239. {dirsql-0.4.50 → dirsql-0.4.52}/packages/rust/src/watcher.rs +0 -0
  240. {dirsql-0.4.50 → dirsql-0.4.52}/pyproject.toml +0 -0
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
552
552
 
553
553
  [[package]]
554
554
  name = "dirsql"
555
- version = "0.4.50"
555
+ version = "0.4.52"
556
556
  dependencies = [
557
557
  "assert_cmd",
558
558
  "axum",
@@ -599,7 +599,7 @@ dependencies = [
599
599
 
600
600
  [[package]]
601
601
  name = "dirsql-py-ext"
602
- version = "0.4.50"
602
+ version = "0.4.52"
603
603
  dependencies = [
604
604
  "dirsql",
605
605
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.50
3
+ Version: 0.4.52
4
4
  Requires-Dist: bin-shim>=0.1
5
5
  Summary: Ephemeral SQL index over a local directory
6
6
  Keywords: sql,filesystem,directory,sqlite,index
@@ -3,7 +3,7 @@
3
3
  Also available for Rust (crates.io: ``dirsql``) and TypeScript (npm: ``dirsql``).
4
4
  """
5
5
 
6
- from dirsql._dirsql import Table, RowEvent, __version__
6
+ from dirsql._dirsql import Table, RowEvent, ScanFailure, __version__
7
7
  from dirsql._async import DirSQL
8
8
 
9
- __all__ = ["DirSQL", "Table", "RowEvent", "__version__"]
9
+ __all__ = ["DirSQL", "Table", "RowEvent", "ScanFailure", "__version__"]
@@ -33,6 +33,7 @@ class Table:
33
33
  name: str
34
34
  ddl: str
35
35
  glob: str
36
+ on_file: Callable[[str], list[Row]]
36
37
  strict: bool
37
38
 
38
39
  def __init__(
@@ -58,6 +59,15 @@ class RowEvent:
58
59
  @override
59
60
  def __repr__(self) -> str: ...
60
61
 
62
+ class ScanFailure:
63
+ """One file the initial scan could not index, with the hook's own error."""
64
+
65
+ path: str
66
+ message: str
67
+
68
+ @override
69
+ def __repr__(self) -> str: ...
70
+
61
71
  class DirSQL:
62
72
  """Synchronous binding class. ``dirsql._async.DirSQL`` wraps it."""
63
73
 
@@ -75,6 +85,7 @@ class DirSQL:
75
85
  suppress_config_extensions: bool = False,
76
86
  ) -> None: ...
77
87
  def query(self, sql: str) -> list[Row]: ...
88
+ def scan_failures(self) -> list[ScanFailure]: ...
78
89
  def _start_watcher(self) -> None: ...
79
90
  def _poll_events(self, timeout_ms: int) -> list[RowEvent]: ...
80
91
 
@@ -92,6 +103,7 @@ class ExtensionPlanEntry:
92
103
  @override
93
104
  def __repr__(self) -> str: ...
94
105
 
106
+ def run_cli(argv: list[str]) -> int: ...
95
107
  def config_paths_from_argv(argv: list[str]) -> list[str]: ...
96
108
  def plan_config_extensions(
97
109
  configs: list[tuple[str, str | None]],
@@ -4,7 +4,7 @@ name = "dirsql-py-ext"
4
4
  # pypi/maturin handler can rewrite it via `write-version` before
5
5
  # `maturin build`. `pyproject.toml` declares `dynamic = ["version"]`
6
6
  # and maturin reads this field. Mirrors `packages/rust/Cargo.toml`.
7
- version = "0.4.50"
7
+ version = "0.4.52"
8
8
  # abi3 note: the `abi3-py310` pyo3 feature (below) builds ONE stable-ABI
9
9
  # `cp310-abi3` wheel per platform that loads on every CPython >= 3.10
10
10
  # (matching `pyproject.toml`'s `requires-python = ">=3.10"`), instead of
@@ -0,0 +1,7 @@
1
+ **Added**
2
+
3
+ `ScanFailure` is now importable from the package root (`from dirsql import
4
+ ScanFailure`), so the objects `await db.scan_failures()` returns can be
5
+ annotated without reaching into `dirsql._dirsql`. The bundled type stub now
6
+ also declares `ScanFailure`, `DirSQL.scan_failures`, `run_cli`, and
7
+ `Table.on_file`, which it had been missing. No runtime behavior changes.
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "just test-e2e",
3
+ "ran_at": 1789750671,
4
+ "exit_code": 0,
5
+ "commit": "5c33ad533545ff8791f462f42b2c3869b871ec7a",
6
+ "branch": "claude/1139-sse-flatten"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "just test-e2e",
3
+ "ran_at": 1789750809,
4
+ "exit_code": 0,
5
+ "commit": "333d87fd6e4338e2cddddd9db1954eb63318e04b",
6
+ "branch": "claude/1140-scan-failure-export"
7
+ }
@@ -6,7 +6,7 @@ description = "Ephemeral SQL index over a local directory"
6
6
  # version stays for the binding crates (publish = false). The literal
7
7
  # intentionally lags the published version: putitoutthere rewrites it to
8
8
  # the planned release version at build time and never commits it back.
9
- version = "0.4.50"
9
+ version = "0.4.52"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -1,10 +1,11 @@
1
1
  //! `Row` / `RowEvent` → JSON serialization for the HTTP API.
2
2
 
3
- use serde_json::{Map, Value, json};
3
+ use serde_json::{Map, Value};
4
4
 
5
5
  use crate::Row;
6
6
  use crate::db::Value as CellValue;
7
7
  use crate::differ::RowEvent;
8
+ use crate::row_event_flat::flatten_row_event;
8
9
 
9
10
  pub(super) fn rows_to_json(rows: &[Row]) -> Vec<Value> {
10
11
  rows.iter().map(row_to_json).collect()
@@ -35,52 +36,27 @@ pub(super) fn event_to_json(event: &RowEvent) -> String {
35
36
  }
36
37
 
37
38
  fn event_to_value(event: &RowEvent) -> Value {
38
- match event {
39
- RowEvent::Insert {
40
- table,
41
- row,
42
- file_path,
43
- } => json!({
44
- "action": "insert",
45
- "table": table,
46
- "file_path": file_path,
47
- "row": row_to_json(row),
48
- "old_row": Value::Null,
49
- }),
50
- RowEvent::Update {
51
- table,
52
- old_row,
53
- new_row,
54
- file_path,
55
- } => json!({
56
- "action": "update",
57
- "table": table,
58
- "file_path": file_path,
59
- "row": row_to_json(new_row),
60
- "old_row": row_to_json(old_row),
61
- }),
62
- RowEvent::Delete {
63
- table,
64
- row,
65
- file_path,
66
- } => json!({
67
- "action": "delete",
68
- "table": table,
69
- "file_path": file_path,
70
- "row": row_to_json(row),
71
- "old_row": Value::Null,
72
- }),
73
- RowEvent::Error {
74
- table,
75
- file_path,
76
- error,
77
- } => json!({
78
- "action": "error",
79
- "table": table,
80
- "file_path": file_path.to_string_lossy(),
81
- "error": error,
82
- }),
39
+ let flat = flatten_row_event(event);
40
+ let mut map = Map::new();
41
+ map.insert("action".into(), Value::from(flat.action));
42
+ map.insert(
43
+ "table".into(),
44
+ flat.table.map_or(Value::Null, Value::String),
45
+ );
46
+ map.insert("file_path".into(), Value::String(flat.file_path));
47
+ match flat.error {
48
+ Some(error) => {
49
+ map.insert("error".into(), Value::String(error));
50
+ }
51
+ None => {
52
+ map.insert("row".into(), flat.row.map_or(Value::Null, row_to_json));
53
+ map.insert(
54
+ "old_row".into(),
55
+ flat.old_row.map_or(Value::Null, row_to_json),
56
+ );
57
+ }
83
58
  }
59
+ Value::Object(map)
84
60
  }
85
61
 
86
62
  #[cfg(test)]
@@ -116,6 +92,7 @@ mod tests {
116
92
  Some("posts/a.json"),
117
93
  );
118
94
  assert!(parsed.get("old_row").unwrap().is_null());
95
+ assert!(parsed.get("error").is_none());
119
96
  assert_eq!(event_to_json(&event), parsed.to_string());
120
97
  }
121
98
 
@@ -157,6 +134,19 @@ mod tests {
157
134
  );
158
135
  }
159
136
 
137
+ #[test]
138
+ fn error_event_omits_the_row_keys() {
139
+ let event = RowEvent::Error {
140
+ table: None,
141
+ file_path: PathBuf::from("bad.json"),
142
+ error: "parse failed".into(),
143
+ };
144
+ let parsed = event_to_value(&event);
145
+ assert!(parsed.get("table").unwrap().is_null());
146
+ assert!(parsed.get("row").is_none());
147
+ assert!(parsed.get("old_row").is_none());
148
+ }
149
+
160
150
  #[test]
161
151
  fn delete_event_emits_expected_shape() {
162
152
  let mut row: Row = HashMap::new();
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes