dirsql 0.4.87__tar.gz → 0.4.89__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 (365) hide show
  1. {dirsql-0.4.87 → dirsql-0.4.89}/Cargo.lock +2 -2
  2. {dirsql-0.4.87 → dirsql-0.4.89}/PKG-INFO +1 -1
  3. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/Cargo.toml +1 -1
  4. dirsql-0.4.89/packages/python/changelog.d/2026-10-06-config-directory.md +3 -0
  5. dirsql-0.4.89/packages/python/changelog.d/2026-10-06-config-gitignore.md +3 -0
  6. dirsql-0.4.89/packages/python/e2e-attestations/claude-1258-config-directory.json +7 -0
  7. dirsql-0.4.89/packages/python/e2e-attestations/claude-1258-config-gitignore.json +7 -0
  8. dirsql-0.4.89/packages/python/migrations.d/2026-10-06-config-directory.md +39 -0
  9. dirsql-0.4.89/packages/python/migrations.d/2026-10-06-config-gitignore.md +45 -0
  10. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/Cargo.toml +1 -1
  11. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/lib.rs +36 -1
  12. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/matcher.rs +19 -0
  13. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/path_table.rs +50 -0
  14. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/scanner.rs +41 -3
  15. {dirsql-0.4.87 → dirsql-0.4.89}/Cargo.toml +0 -0
  16. {dirsql-0.4.87 → dirsql-0.4.89}/README.md +0 -0
  17. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/__init__.py +0 -0
  18. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/_async.py +0 -0
  19. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/_dirsql.pyi +0 -0
  20. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/__init__.py +0 -0
  21. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/discover_plugins/__init__.py +0 -0
  22. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  23. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  24. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  25. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  26. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/main.py +0 -0
  27. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/cli/resolve_config_extensions.py +0 -0
  28. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/plan_entry_path.py +0 -0
  29. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/py.typed +0 -0
  30. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/read_config.py +0 -0
  31. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/resolve_configs_extension_specs.py +0 -0
  32. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/resolve_extension.py +0 -0
  33. {dirsql-0.4.87 → dirsql-0.4.89}/dirsql/resolve_package.py +0 -0
  34. {dirsql-0.4.87 → dirsql-0.4.89}/docs/.claude/CLAUDE.md +0 -0
  35. {dirsql-0.4.87 → dirsql-0.4.89}/docs/.vitepress/config.ts +0 -0
  36. {dirsql-0.4.87 → dirsql-0.4.89}/docs/.vitepress/theme/index.ts +0 -0
  37. {dirsql-0.4.87 → dirsql-0.4.89}/docs/.vitepress/theme/lang.ts +0 -0
  38. {dirsql-0.4.87 → dirsql-0.4.89}/docs/AGENTS.md +0 -0
  39. {dirsql-0.4.87 → dirsql-0.4.89}/docs/context/.gitattributes +0 -0
  40. {dirsql-0.4.87 → dirsql-0.4.89}/docs/context/recipes.md +0 -0
  41. {dirsql-0.4.87 → dirsql-0.4.89}/docs/context/troubleshooting.md +0 -0
  42. {dirsql-0.4.87 → dirsql-0.4.89}/docs/context/usage.md +0 -0
  43. {dirsql-0.4.87 → dirsql-0.4.89}/docs/explanation.md +0 -0
  44. {dirsql-0.4.87 → dirsql-0.4.89}/docs/getting-started.md +0 -0
  45. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/agent-skill.md +0 -0
  46. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/columns-from-paths.md +0 -0
  47. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/define-tables.md +0 -0
  48. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/embed.md +0 -0
  49. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/extract-from-contents.md +0 -0
  50. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/load-extension.md +0 -0
  51. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/parse-files-into-columns.md +0 -0
  52. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/persist.md +0 -0
  53. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/query-json.md +0 -0
  54. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/query-without-config.md +0 -0
  55. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/react-to-changes.md +0 -0
  56. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/search-by-meaning.md +0 -0
  57. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/search-indexes.md +0 -0
  58. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/skip-files.md +0 -0
  59. {dirsql-0.4.87 → dirsql-0.4.89}/docs/howto/write-a-plugin.md +0 -0
  60. {dirsql-0.4.87 → dirsql-0.4.89}/docs/index.md +0 -0
  61. {dirsql-0.4.87 → dirsql-0.4.89}/docs/package.json +0 -0
  62. {dirsql-0.4.87 → dirsql-0.4.89}/docs/plugins.md +0 -0
  63. {dirsql-0.4.87 → dirsql-0.4.89}/docs/pnpm-lock.yaml +0 -0
  64. {dirsql-0.4.87 → dirsql-0.4.89}/docs/pnpm-workspace.yaml +0 -0
  65. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/cli.md +0 -0
  66. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/columns.md +0 -0
  67. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/config.md +0 -0
  68. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/hooks.md +0 -0
  69. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/http-api.md +0 -0
  70. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/path-tables.md +0 -0
  71. {dirsql-0.4.87 → dirsql-0.4.89}/docs/reference/sdk.md +0 -0
  72. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/CHANGELOG.md +0 -0
  73. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/MIGRATIONS.md +0 -0
  74. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/README.md +0 -0
  75. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  76. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  77. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  78. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  79. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  80. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  81. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  82. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  83. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  84. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  85. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  86. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  87. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  88. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  89. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  90. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  91. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  92. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  93. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  94. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  95. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  96. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  97. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  98. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  99. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  100. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  101. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  102. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  103. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  104. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  105. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  106. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  107. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  108. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  109. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  110. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  111. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  112. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  113. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  114. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  115. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  116. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  117. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  118. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  119. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  120. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  121. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/changelog.d/README.md +0 -0
  122. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/conftest.py +0 -0
  123. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/.claude/CLAUDE.md +0 -0
  124. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/.vitepress/config.ts +0 -0
  125. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  126. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  127. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/AGENTS.md +0 -0
  128. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/context/.gitattributes +0 -0
  129. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/context/recipes.md +0 -0
  130. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/context/troubleshooting.md +0 -0
  131. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/context/usage.md +0 -0
  132. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/explanation.md +0 -0
  133. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/getting-started.md +0 -0
  134. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/agent-skill.md +0 -0
  135. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/columns-from-paths.md +0 -0
  136. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/define-tables.md +0 -0
  137. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/embed.md +0 -0
  138. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/extract-from-contents.md +0 -0
  139. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/load-extension.md +0 -0
  140. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  141. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/persist.md +0 -0
  142. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/query-json.md +0 -0
  143. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/query-without-config.md +0 -0
  144. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/react-to-changes.md +0 -0
  145. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/search-by-meaning.md +0 -0
  146. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/search-indexes.md +0 -0
  147. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/skip-files.md +0 -0
  148. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/howto/write-a-plugin.md +0 -0
  149. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/index.md +0 -0
  150. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/package.json +0 -0
  151. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/plugins.md +0 -0
  152. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/pnpm-lock.yaml +0 -0
  153. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/pnpm-workspace.yaml +0 -0
  154. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/cli.md +0 -0
  155. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/columns.md +0 -0
  156. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/config.md +0 -0
  157. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/hooks.md +0 -0
  158. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/http-api.md +0 -0
  159. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/path-tables.md +0 -0
  160. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/docs/reference/sdk.md +0 -0
  161. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  162. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  163. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  164. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  165. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  166. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  167. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  168. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  169. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  170. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  171. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  172. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  173. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  174. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  175. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  176. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  177. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  178. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  179. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  180. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  181. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  182. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  183. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  184. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  185. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  186. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  187. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  188. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  189. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  190. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  191. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  192. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  193. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  194. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  195. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  196. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  197. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  198. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  199. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  200. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  201. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  202. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  203. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  204. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  205. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  206. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  207. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  208. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  209. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  210. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  211. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  212. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  213. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  214. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  215. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  216. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  217. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  218. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  219. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  220. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  221. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  222. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  223. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  224. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  225. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  226. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  227. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  228. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  229. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  230. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  231. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  232. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  233. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  234. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  235. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  236. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  237. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  238. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  239. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  240. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  241. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  242. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  243. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  244. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  245. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  246. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  247. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  248. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  249. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  250. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  251. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  252. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  253. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  254. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  255. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  256. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  257. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  258. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  259. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  260. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  261. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  262. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  263. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  264. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  265. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  266. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  267. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  268. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  269. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  270. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  271. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  272. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  273. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  274. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  275. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  276. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  277. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  278. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  279. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  280. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  281. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  282. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  283. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/migrations.d/README.md +0 -0
  284. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/src/lib.rs +0 -0
  285. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/testing-conventions.toml +0 -0
  286. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/__init__.py +0 -0
  287. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/conftest.py +0 -0
  288. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/e2e/__init__.py +0 -0
  289. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  290. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  291. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/e2e/speed_of_light.py +0 -0
  292. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/integration/__init__.py +0 -0
  293. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/integration/binding/__init__.py +0 -0
  294. {dirsql-0.4.87 → dirsql-0.4.89}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  295. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/CHANGELOG.md +0 -0
  296. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/MIGRATIONS.md +0 -0
  297. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/README.md +0 -0
  298. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/benches/db_bench.rs +0 -0
  299. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/benches/differ_bench.rs +0 -0
  300. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/benches/matcher_bench.rs +0 -0
  301. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/benches/scanner_bench.rs +0 -0
  302. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/context/.gitattributes +0 -0
  303. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/context/recipes.md +0 -0
  304. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/context/troubleshooting.md +0 -0
  305. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/context/usage.md +0 -0
  306. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/explanation.md +0 -0
  307. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/getting-started.md +0 -0
  308. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/agent-skill.md +0 -0
  309. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  310. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/define-tables.md +0 -0
  311. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/embed.md +0 -0
  312. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  313. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/load-extension.md +0 -0
  314. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  315. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/persist.md +0 -0
  316. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/query-json.md +0 -0
  317. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/query-without-config.md +0 -0
  318. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/react-to-changes.md +0 -0
  319. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  320. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/search-indexes.md +0 -0
  321. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/skip-files.md +0 -0
  322. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  323. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/index.md +0 -0
  324. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/plugins.md +0 -0
  325. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/cli.md +0 -0
  326. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/columns.md +0 -0
  327. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/config.md +0 -0
  328. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/hooks.md +0 -0
  329. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/http-api.md +0 -0
  330. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/path-tables.md +0 -0
  331. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/docs/reference/sdk.md +0 -0
  332. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/bin/dirsql.rs +0 -0
  333. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/brace.rs +0 -0
  334. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/context.rs +0 -0
  335. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/execute.rs +0 -0
  336. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/init.rs +0 -0
  337. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/mod.rs +0 -0
  338. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/repl.rs +0 -0
  339. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/router.rs +0 -0
  340. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/run.rs +0 -0
  341. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/serialize.rs +0 -0
  342. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/server.rs +0 -0
  343. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/cli/table.rs +0 -0
  344. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/command.rs +0 -0
  345. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/config.rs +0 -0
  346. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/db.rs +0 -0
  347. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/default_config.toml +0 -0
  348. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/differ.rs +0 -0
  349. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/extension_resolution.rs +0 -0
  350. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/functions.rs +0 -0
  351. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/infer.rs +0 -0
  352. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/launcher.rs +0 -0
  353. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/listing.rs +0 -0
  354. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/on_file.rs +0 -0
  355. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/parsed_vtab.rs +0 -0
  356. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/persist.rs +0 -0
  357. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/posix_class.rs +0 -0
  358. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/progress.rs +0 -0
  359. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/row_event_flat.rs +0 -0
  360. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/sql_literal.rs +0 -0
  361. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/tree_walk.rs +0 -0
  362. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/vtab.rs +0 -0
  363. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/vtab_scaffold.rs +0 -0
  364. {dirsql-0.4.87 → dirsql-0.4.89}/packages/rust/src/watcher.rs +0 -0
  365. {dirsql-0.4.87 → dirsql-0.4.89}/pyproject.toml +0 -0
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
552
552
 
553
553
  [[package]]
554
554
  name = "dirsql"
555
- version = "0.4.87"
555
+ version = "0.4.89"
556
556
  dependencies = [
557
557
  "assert_cmd",
558
558
  "axum",
@@ -603,7 +603,7 @@ dependencies = [
603
603
 
604
604
  [[package]]
605
605
  name = "dirsql-py-ext"
606
- version = "0.4.87"
606
+ version = "0.4.89"
607
607
  dependencies = [
608
608
  "dirsql",
609
609
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.87
3
+ Version: 0.4.89
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
@@ -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.87"
7
+ version = "0.4.89"
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,3 @@
1
+ **Changed** A declared `[[table]] glob` that names a directory, `glob = "docs"`
2
+ or `glob = "docs/"`, lists the files directly inside it, like `FROM './docs'`.
3
+ It used to match nothing.
@@ -0,0 +1,3 @@
1
+ **Changed** Declared `[[table]]` tables respect `.gitignore` by default, as
2
+ path-tables do: inside a git repo, a file a `.gitignore` ignores is no longer a
3
+ row, at startup or while watching. `--no-ignore` turns this off for them too.
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_one_level_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791331926,
4
+ "exit_code": 0,
5
+ "commit": "04430dd3eae48a6936b5ff45c9c51a38900fbacc",
6
+ "branch": "claude/1258-config-directory"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_gitignore_test.py tests/e2e/glob_speed_dotfiles_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791329772,
4
+ "exit_code": 0,
5
+ "commit": "f828a8181c981ab9c5c775117cb60edf3ccd9dcc",
6
+ "branch": "claude/1258-config-gitignore"
7
+ }
@@ -0,0 +1,39 @@
1
+ ### A config glob naming a directory lists its files
2
+
3
+ #### Summary
4
+
5
+ `glob = "docs"` used to match nothing, because no file is named `docs`. It now
6
+ lists the files directly inside `docs`, as `FROM './docs'` does. A config that
7
+ relied on the empty result gains rows.
8
+
9
+ #### Required changes
10
+
11
+ | Before | After |
12
+ | --- | --- |
13
+ | `glob = "docs"` (no rows) | `glob = "docs"` lists `docs/*`; write `docs/**` for every depth |
14
+
15
+ #### Deprecations removed
16
+
17
+ _None._
18
+
19
+ #### Behavior changes without code changes
20
+
21
+ - A glob with no wildcard that names a directory expands to `<dir>/*`.
22
+ - A glob with no wildcard that names a file still names only that file.
23
+
24
+ #### Verification
25
+
26
+ ```bash
27
+ cd "$(mktemp -d)"
28
+ mkdir docs
29
+ echo '[{"p":"a"}]' > docs/a.json
30
+ cat > .dirsql.toml <<'TOML'
31
+ [[table]]
32
+ name = "t"
33
+ glob = "docs"
34
+ ddl = "CREATE TABLE t (p TEXT)"
35
+ on-file = "jq -sc add"
36
+ TOML
37
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
38
+ # expected: [{"p":"a"}]
39
+ ```
@@ -0,0 +1,45 @@
1
+ ### Config tables respect .gitignore
2
+
3
+ #### Summary
4
+
5
+ A declared `[[table]]` used to read every file its glob matched, whatever
6
+ `.gitignore` said. It now skips gitignored files, as a path-table does. This
7
+ breaks a config that relied on indexing an ignored file; pass `--no-ignore`
8
+ (or `no_ignore` in the SDKs) to restore the old behavior.
9
+
10
+ #### Required changes
11
+
12
+ | Before | After |
13
+ | --- | --- |
14
+ | a table indexed gitignored files | pass `--no-ignore`, or stop ignoring the file |
15
+
16
+ #### Deprecations removed
17
+
18
+ _None._
19
+
20
+ #### Behavior changes without code changes
21
+
22
+ - Inside a git repo (a directory holding `.git`), files a `.gitignore` ignores
23
+ are not rows of a `[[table]]`, at startup or while watching.
24
+ - Outside a repo nothing changes.
25
+
26
+ #### Verification
27
+
28
+ ```bash
29
+ cd "$(mktemp -d)"
30
+ git init -q
31
+ printf 'skip.json\n' > .gitignore
32
+ echo '[{"p":"keep"}]' > keep.json
33
+ echo '[{"p":"skip"}]' > skip.json
34
+ cat > .dirsql.toml <<'TOML'
35
+ [[table]]
36
+ name = "t"
37
+ glob = "*.json"
38
+ ddl = "CREATE TABLE t (p TEXT)"
39
+ on-file = "jq -sc add"
40
+ TOML
41
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
42
+ # expected: [{"p":"keep"}]
43
+ dirsql query "SELECT p FROM t ORDER BY p" -c .dirsql.toml --no-ignore
44
+ # expected: [{"p":"keep"},{"p":"skip"}]
45
+ ```
@@ -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.87"
9
+ version = "0.4.89"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -732,6 +732,14 @@ impl DirSQL {
732
732
  if group.matcher.is_ignored(&rel_path_buf) {
733
733
  continue;
734
734
  }
735
+ if group.matcher.respects_gitignore()
736
+ && scanner::is_gitignored_path(
737
+ &abs_path,
738
+ self.inner.fs.is_dir(&abs_path).unwrap_or(false),
739
+ )
740
+ {
741
+ continue;
742
+ }
735
743
 
736
744
  // A directory that appears whole (`mkdir`, or a populated directory
737
745
  // renamed into the tree) arrives as one event naming the directory and
@@ -1110,6 +1118,13 @@ impl DirSQL {
1110
1118
  } = resolved;
1111
1119
 
1112
1120
  let (groups, anchors, table_names) = compile_groups(&tables, &ignore, &root)?;
1121
+ let groups = groups
1122
+ .into_iter()
1123
+ .map(|group| AnchorGroup {
1124
+ matcher: group.matcher.with_gitignore(!no_ignore),
1125
+ ..group
1126
+ })
1127
+ .collect::<Vec<_>>();
1113
1128
 
1114
1129
  // Resolve the persistent context before scanning, so the scan can
1115
1130
  // consult the cached file index.
@@ -1996,7 +2011,10 @@ fn compile_groups(
1996
2011
  }
1997
2012
  None => root.to_path_buf(),
1998
2013
  };
1999
- let mapping = (table.glob.clone(), table_name.clone());
2014
+ let mapping = (
2015
+ path_table::directory_as_glob(&table.glob, &anchor, &|p| p.is_dir()),
2016
+ table_name.clone(),
2017
+ );
2000
2018
  match grouped
2001
2019
  .iter_mut()
2002
2020
  .find(|(a, i, _)| *a == anchor && *i == table.ignore)
@@ -2935,6 +2953,23 @@ mod internal_tests {
2935
2953
  assert_eq!(found, vec!["a.txt"]);
2936
2954
  }
2937
2955
 
2956
+ /// The startup walk honors `.gitignore` unless the build asked not to.
2957
+ #[test]
2958
+ fn prepare_hands_the_walk_a_matcher_that_honors_gitignore_unless_no_ignore() {
2959
+ let dir = TempDir::new().unwrap();
2960
+ for no_ignore in [false, true] {
2961
+ let honored = Cell::new(None);
2962
+ let mut resolved = resolved_over(dir.path(), vec![txt_table()], false);
2963
+ resolved.no_ignore = no_ignore;
2964
+ DirSQL::prepare_resolved_with(resolved, &|_, matcher, _| {
2965
+ honored.set(Some(matcher.respects_gitignore()));
2966
+ Vec::new()
2967
+ })
2968
+ .unwrap();
2969
+ assert_eq!(honored.get(), Some(!no_ignore));
2970
+ }
2971
+ }
2972
+
2938
2973
  /// Skipping the walk skips only the walk: with persist on, the cache is
2939
2974
  /// still opened and reconciled against the (empty) scan.
2940
2975
  #[test]
@@ -97,6 +97,7 @@ pub struct TableMatcher {
97
97
  entries: Vec<PatternEntry>,
98
98
  ignore_set: Vec<Pattern>,
99
99
  ignore_dir_set: Vec<Pattern>,
100
+ gitignore: bool,
100
101
  }
101
102
 
102
103
  /// Byte spans of the `{name}` placeholders in `pattern`, in order: `(start,
@@ -182,9 +183,20 @@ impl TableMatcher {
182
183
  entries,
183
184
  ignore_set,
184
185
  ignore_dir_set,
186
+ gitignore: false,
185
187
  })
186
188
  }
187
189
 
190
+ /// Whether a scan under this matcher honors `.gitignore` files.
191
+ pub fn with_gitignore(mut self, gitignore: bool) -> Self {
192
+ self.gitignore = gitignore;
193
+ self
194
+ }
195
+
196
+ pub(crate) fn respects_gitignore(&self) -> bool {
197
+ self.gitignore
198
+ }
199
+
188
200
  /// Returns one [`MatchResult`] per matching pattern, in declaration order.
189
201
  /// A file matching N patterns yields N results (fan-out). Empty when
190
202
  /// nothing matches.
@@ -230,6 +242,13 @@ mod tests {
230
242
  assert_eq!(names(&matcher, "report.csv"), vec!["data"]);
231
243
  }
232
244
 
245
+ #[test]
246
+ fn a_matcher_honors_gitignore_only_once_asked_to() {
247
+ let matcher = TableMatcher::new(&[], &[]).unwrap();
248
+ assert!(!matcher.respects_gitignore());
249
+ assert!(matcher.with_gitignore(true).respects_gitignore());
250
+ }
251
+
233
252
  #[test]
234
253
  fn match_all_returns_empty_for_no_match() {
235
254
  let matcher = TableMatcher::new(&[("*.csv", "data")], &[]).unwrap();
@@ -149,6 +149,17 @@ fn resolve_as<S: Syntax>(
149
149
  }
150
150
  }
151
151
 
152
+ /// `glob` as a path-table reads the same string after `FROM './`: a trailing
153
+ /// separator or a wholly literal name that is a directory under `index_root`
154
+ /// lists the files directly inside it.
155
+ pub fn directory_as_glob(glob: &str, index_root: &Path, is_dir: &dyn Fn(&Path) -> bool) -> String {
156
+ let target = trailing_separator_as_star::<Utf8UnixEncoding>(glob);
157
+ if !target.is_empty() && !has_glob_metacharacter(&target) && is_dir(&index_root.join(&target)) {
158
+ return format!("{target}/{DIRECTORY_GLOB}");
159
+ }
160
+ target
161
+ }
162
+
152
163
  /// Where a config `[[table]] glob` anchors, and the glob to match beneath it.
153
164
  ///
154
165
  /// A glob with a path-table prefix (`/`, `../`, `~/`, a drive or UNC root)
@@ -360,6 +371,45 @@ mod tests {
360
371
  }
361
372
  }
362
373
 
374
+ fn directory_glob(glob: &str, is_dir: &dyn Fn(&Path) -> bool) -> String {
375
+ directory_as_glob(glob, Path::new(ROOT), is_dir)
376
+ }
377
+
378
+ #[test]
379
+ fn a_literal_directory_name_lists_one_level() {
380
+ assert_eq!(directory_glob("docs", &everything_is_a_dir), "docs/*");
381
+ }
382
+
383
+ #[test]
384
+ fn a_literal_directory_is_looked_up_under_the_index_root() {
385
+ let only_docs = |p: &Path| p == Path::new("/index/docs");
386
+ assert_eq!(directory_glob("docs", &only_docs), "docs/*");
387
+ assert_eq!(directory_glob("other", &only_docs), "other");
388
+ }
389
+
390
+ #[test]
391
+ fn a_literal_file_name_is_left_alone() {
392
+ assert_eq!(directory_glob("top.md", &nothing_is_a_dir), "top.md");
393
+ }
394
+
395
+ #[test]
396
+ fn a_glob_is_left_alone_even_when_a_directory_has_its_name() {
397
+ assert_eq!(
398
+ directory_glob("docs/*.md", &everything_is_a_dir),
399
+ "docs/*.md"
400
+ );
401
+ }
402
+
403
+ #[test]
404
+ fn a_trailing_separator_lists_one_level() {
405
+ assert_eq!(directory_glob("docs/", &nothing_is_a_dir), "docs/*");
406
+ }
407
+
408
+ #[test]
409
+ fn an_empty_glob_is_left_alone() {
410
+ assert_eq!(directory_glob("", &everything_is_a_dir), "");
411
+ }
412
+
363
413
  #[test]
364
414
  fn default_ignores_cover_vcs_and_dependency_directories() {
365
415
  assert_eq!(DEFAULT_IGNORES, ["**/node_modules/**", "**/.git/**"]);
@@ -93,15 +93,23 @@ fn scan_below(
93
93
  ) -> Vec<(PathBuf, String)> {
94
94
  let mut results = Vec::new();
95
95
  let mut seen: u64 = 0;
96
+ let gitignore = matcher.respects_gitignore();
97
+ let repo = if gitignore {
98
+ enclosing_repo(start, &holds_git)
99
+ } else {
100
+ None
101
+ };
96
102
 
97
103
  // Match against relative path so globs like "comments/**/*.jsonl" work
98
104
  // regardless of the absolute root directory.
99
105
  let walker = Walk {
100
106
  ignore: matcher,
101
107
  glob: None,
102
- gitignore: false,
103
- in_repo: false,
104
- frames: Vec::new(),
108
+ gitignore,
109
+ in_repo: repo.is_some(),
110
+ frames: repo.map_or_else(Vec::new, |top| {
111
+ gitignores_above(start, top, &load_gitignore)
112
+ }),
105
113
  dirs: false,
106
114
  };
107
115
  walk(
@@ -741,6 +749,26 @@ fn load_gitignore(dir: &Path) -> Option<Gitignore> {
741
749
  builder.build().ok()
742
750
  }
743
751
 
752
+ /// Whether the `.gitignore` files of the repo enclosing `path` ignore it, or
753
+ /// a directory above it, as the walk would have: for a path a watcher reports
754
+ /// without having walked to it.
755
+ pub(crate) fn is_gitignored_path(path: &Path, is_dir: bool) -> bool {
756
+ let Some(top) = path
757
+ .parent()
758
+ .and_then(|dir| enclosing_repo(dir, &holds_git))
759
+ else {
760
+ return false;
761
+ };
762
+ for frame in gitignores_above(path, top, &load_gitignore).iter().rev() {
763
+ match frame.matched_path_or_any_parents(path, is_dir) {
764
+ Match::Ignore(_) => return true,
765
+ Match::Whitelist(_) => return false,
766
+ Match::None => {}
767
+ }
768
+ }
769
+ false
770
+ }
771
+
744
772
  /// Whether the `.gitignore` files in force mark `path` ignored. Deeper files
745
773
  /// take precedence (git's rule), and a whitelisting `!pattern` un-ignores.
746
774
  fn is_gitignored(frames: &[Arc<Gitignore>], path: &Path, is_dir: bool) -> bool {
@@ -1664,4 +1692,14 @@ mod tests {
1664
1692
  let frames = [frame("", &["!keep.log"]), frame("sub", &["*.log"])];
1665
1693
  assert!(is_gitignored(&frames, Path::new("sub/keep.log"), false));
1666
1694
  }
1695
+
1696
+ #[test]
1697
+ fn is_gitignored_path_ignores_a_path_the_repo_gitignore_matches() {
1698
+ let repo = tempfile::tempdir().unwrap();
1699
+ fs::create_dir(repo.path().join(".git")).unwrap();
1700
+ fs::write(repo.path().join(".gitignore"), "*.log\n").unwrap();
1701
+
1702
+ assert!(is_gitignored_path(&repo.path().join("debug.log"), false));
1703
+ assert!(!is_gitignored_path(&repo.path().join("app.js"), false));
1704
+ }
1667
1705
  }
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
File without changes
File without changes
File without changes
File without changes