dirsql 0.4.80__tar.gz → 0.4.82__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.
- {dirsql-0.4.80 → dirsql-0.4.82}/Cargo.lock +2 -2
- {dirsql-0.4.80 → dirsql-0.4.82}/PKG-INFO +1 -1
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/_async.py +4 -1
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/discover_plugins/with_discovered_plugins.py +3 -8
- {dirsql-0.4.80/packages/rust → dirsql-0.4.82}/docs/howto/write-a-plugin.md +3 -4
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/cli.md +2 -1
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/Cargo.toml +1 -1
- dirsql-0.4.82/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +1 -0
- {dirsql-0.4.80 → dirsql-0.4.82/packages/python}/docs/howto/write-a-plugin.md +3 -4
- {dirsql-0.4.80/packages/rust → dirsql-0.4.82/packages/python}/docs/reference/cli.md +2 -1
- dirsql-0.4.82/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +7 -0
- dirsql-0.4.82/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +7 -0
- dirsql-0.4.82/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +7 -0
- dirsql-0.4.82/packages/python/e2e-attestations/claude-1330-scanner-effects.json +7 -0
- dirsql-0.4.82/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +7 -0
- dirsql-0.4.82/packages/python/e2e-attestations/claude-1330-vtab-read.json +7 -0
- dirsql-0.4.82/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +30 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/testing-conventions.toml +0 -11
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.80/packages/python → dirsql-0.4.82/packages/rust}/docs/howto/write-a-plugin.md +3 -4
- {dirsql-0.4.80/packages/python → dirsql-0.4.82/packages/rust}/docs/reference/cli.md +2 -1
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/init.rs +2 -4
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/run.rs +5 -73
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/launcher.rs +1 -7
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/lib.rs +382 -99
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/persist.rs +23 -3
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/scanner.rs +22 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/vtab.rs +68 -2
- {dirsql-0.4.80 → dirsql-0.4.82}/pyproject.toml +0 -3
- dirsql-0.4.80/dirsql/cli/discover_plugins/user_passed_config.py +0 -15
- {dirsql-0.4.80 → dirsql-0.4.82}/Cargo.toml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/README.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/py.typed +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/read_config.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/AGENTS.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/context/.gitattributes +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/context/recipes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/context/usage.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/explanation.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/getting-started.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/embed.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/persist.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/index.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/package.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/plugins.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/columns.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/README.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/conftest.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/context/.gitattributes +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/context/recipes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/context/usage.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/e2e/speed_of_light.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/README.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/context/.gitattributes +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/context/recipes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/context/usage.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/brace.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/context.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/db.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/listing.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/on_file.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/posix_class.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/tree_walk.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.80 → dirsql-0.4.82}/packages/rust/src/watcher.rs +0 -0
|
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
|
|
|
552
552
|
|
|
553
553
|
[[package]]
|
|
554
554
|
name = "dirsql"
|
|
555
|
-
version = "0.4.
|
|
555
|
+
version = "0.4.82"
|
|
556
556
|
dependencies = [
|
|
557
557
|
"assert_cmd",
|
|
558
558
|
"axum",
|
|
@@ -602,7 +602,7 @@ dependencies = [
|
|
|
602
602
|
|
|
603
603
|
[[package]]
|
|
604
604
|
name = "dirsql-py-ext"
|
|
605
|
-
version = "0.4.
|
|
605
|
+
version = "0.4.82"
|
|
606
606
|
dependencies = [
|
|
607
607
|
"dirsql",
|
|
608
608
|
"pyo3",
|
|
@@ -137,7 +137,7 @@ class DirSQL:
|
|
|
137
137
|
if config_extensions is not None:
|
|
138
138
|
extensions = [*(extensions or []), *config_extensions]
|
|
139
139
|
suppress = True
|
|
140
|
-
return
|
|
140
|
+
return self._new_core(
|
|
141
141
|
self._root,
|
|
142
142
|
tables=self._tables,
|
|
143
143
|
ignore=self._ignore,
|
|
@@ -149,6 +149,9 @@ class DirSQL:
|
|
|
149
149
|
suppress_config_extensions=suppress,
|
|
150
150
|
)
|
|
151
151
|
|
|
152
|
+
def _new_core(self, root, **kwargs):
|
|
153
|
+
return _RustDirSQL(root, **kwargs)
|
|
154
|
+
|
|
152
155
|
def _resolved_extensions(self):
|
|
153
156
|
"""Resolve each programmatic extension's ``path`` to a loadable file.
|
|
154
157
|
|
|
@@ -4,24 +4,21 @@ This is the public entry point of the ``discover_plugins`` package (installed =
|
|
|
4
4
|
active, CLI only; #363/#529). A plugin is an ordinary Python package that
|
|
5
5
|
declares ``[project.entry-points.dirsql]`` naming its top-level module and ships
|
|
6
6
|
a ``dirsql.toml`` fragment there; when installed alongside ``dirsql``, the
|
|
7
|
-
``pip``/``uvx`` launcher discovers it and injects the fragment as a ``-c`` flag
|
|
8
|
-
plus the hidden ``--include-default`` (#604) when the user gave no ``-c``.
|
|
7
|
+
``pip``/``uvx`` launcher discovers it and injects the fragment as a ``-c`` flag.
|
|
9
8
|
Opt out via ``--no-plugin`` / ``DIRSQL_NO_PLUGIN=1``. The compiled binary knows
|
|
10
9
|
nothing about plugins, and the SDK never discovers -- only this CLI launcher.
|
|
11
|
-
The helpers each live in their own module (``
|
|
12
|
-
``discovery_disabled``, ``fragment_path``, ``discovered_fragments``).
|
|
10
|
+
The helpers each live in their own module (``discovery_disabled``, ``fragment_path``, ``discovered_fragments``).
|
|
13
11
|
"""
|
|
14
12
|
|
|
15
13
|
from __future__ import annotations
|
|
16
14
|
|
|
17
15
|
from .discovered_fragments import discovered_fragments
|
|
18
16
|
from .discovery_disabled import NO_PLUGIN_FLAG, discovery_disabled
|
|
19
|
-
from .user_passed_config import user_passed_config
|
|
20
17
|
|
|
21
18
|
|
|
22
19
|
def with_discovered_plugins(argv: list[str]) -> list[str]:
|
|
23
20
|
"""Return ``argv`` with each installed plugin's fragment appended as ``-c``
|
|
24
|
-
|
|
21
|
+
``--no-plugin``
|
|
25
22
|
/ ``DIRSQL_NO_PLUGIN`` skip discovery, consuming the flag. ``init`` and ``context`` take no
|
|
26
23
|
config, so they are left untouched. Raises if a declared plugin is missing its
|
|
27
24
|
module or fragment (the launcher surfaces a clean error).
|
|
@@ -40,8 +37,6 @@ def with_discovered_plugins(argv: list[str]) -> list[str]:
|
|
|
40
37
|
if not fragments:
|
|
41
38
|
return argv
|
|
42
39
|
injected: list[str] = []
|
|
43
|
-
if not user_passed_config(argv):
|
|
44
|
-
injected.append("--include-default")
|
|
45
40
|
for fragment in fragments:
|
|
46
41
|
injected.append("-c")
|
|
47
42
|
injected.append(fragment)
|
|
@@ -195,10 +195,9 @@ Discovery is deliberately narrow. Know exactly who does what:
|
|
|
195
195
|
- **The `uvx`/`pip` launcher injects `-c <fragment>` per installed plugin.**
|
|
196
196
|
Each discovered plugin's fragment is appended after your own `-c` configs, so
|
|
197
197
|
your config still takes ordering precedence
|
|
198
|
-
([composing configs](../reference/config.md#composing-multiple-configs)).
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
**add** tables rather than standing alone. Discovery is **pip/uvx only** for now — the `npx`
|
|
198
|
+
([composing configs](../reference/config.md#composing-multiple-configs)). The
|
|
199
|
+
launcher adds only the plugin's tables and functions; it seeds no `records`
|
|
200
|
+
table. Discovery is **pip/uvx only** for now — the `npx`
|
|
202
201
|
launcher does not yet discover — and is switched off per invocation with
|
|
203
202
|
[`--no-plugin` or `DIRSQL_NO_PLUGIN=1`](../reference/cli.md#plugins).
|
|
204
203
|
- **The SDK never auto-discovers.** Pass a plugin's config explicitly (the
|
|
@@ -465,7 +465,8 @@ installed in the same environment as `dirsql` (`pip install …`, or
|
|
|
465
465
|
loads its fragment — its tables are queryable with zero config edits.
|
|
466
466
|
Installed = active: there is no enable step and no naming convention. The
|
|
467
467
|
fragment is composed *after* your own `-c` configs (so your config takes
|
|
468
|
-
precedence in ordering)
|
|
468
|
+
precedence in ordering). A plugin adds its own tables and nothing else: no
|
|
469
|
+
`records` table is seeded.
|
|
469
470
|
|
|
470
471
|
Discovery is **launcher-only** — the standalone `cargo`-installed binary does no
|
|
471
472
|
discovery, and the SDKs never auto-discover (pass a plugin's config explicitly
|
|
@@ -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.
|
|
7
|
+
version = "0.4.82"
|
|
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 @@
|
|
|
1
|
+
**Removed** — an installed plugin no longer seeds a phantom `records` table. The `uvx`/`pip` launcher used to append the hidden `--include-default` whenever it discovered a plugin and the user passed no `-c`, so `SELECT * FROM records` returned one all-NULL row per `**/*.json` file and every query paid a full walk of those files first. A plugin now adds its own tables and functions and nothing else; the internal `--include-default` flag is gone.
|
|
@@ -195,10 +195,9 @@ Discovery is deliberately narrow. Know exactly who does what:
|
|
|
195
195
|
- **The `uvx`/`pip` launcher injects `-c <fragment>` per installed plugin.**
|
|
196
196
|
Each discovered plugin's fragment is appended after your own `-c` configs, so
|
|
197
197
|
your config still takes ordering precedence
|
|
198
|
-
([composing configs](../reference/config.md#composing-multiple-configs)).
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
**add** tables rather than standing alone. Discovery is **pip/uvx only** for now — the `npx`
|
|
198
|
+
([composing configs](../reference/config.md#composing-multiple-configs)). The
|
|
199
|
+
launcher adds only the plugin's tables and functions; it seeds no `records`
|
|
200
|
+
table. Discovery is **pip/uvx only** for now — the `npx`
|
|
202
201
|
launcher does not yet discover — and is switched off per invocation with
|
|
203
202
|
[`--no-plugin` or `DIRSQL_NO_PLUGIN=1`](../reference/cli.md#plugins).
|
|
204
203
|
- **The SDK never auto-discovers.** Pass a plugin's config explicitly (the
|
|
@@ -465,7 +465,8 @@ installed in the same environment as `dirsql` (`pip install …`, or
|
|
|
465
465
|
loads its fragment — its tables are queryable with zero config edits.
|
|
466
466
|
Installed = active: there is no enable step and no naming convention. The
|
|
467
467
|
fragment is composed *after* your own `-c` configs (so your config takes
|
|
468
|
-
precedence in ordering)
|
|
468
|
+
precedence in ordering). A plugin adds its own tables and nothing else: no
|
|
469
|
+
`records` table is seeded.
|
|
469
470
|
|
|
470
471
|
Discovery is **launcher-only** — the standalone `cargo`-installed binary does no
|
|
471
472
|
discovery, and the SDKs never auto-discover (pass a plugin's config explicitly
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/plugin_discovery_test.py tests/e2e/plugin_extension_discovery_test.py tests/e2e/extension_package_test.py tests/e2e/cli_version_test.py tests/e2e/query_contract_test.py -x -q",
|
|
3
|
+
"ran_at": 1791301754,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "9a556e333ff2cbcbcba2e6eba31a3e14c7aab008",
|
|
6
|
+
"branch": "claude/1225-plugin-no-default"
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/capture_collision_test.py tests/e2e/declared_table_name_test.py tests/e2e/extension_package_test.py tests/e2e/query_contract_test.py tests/e2e/plugin_discovery_test.py tests/e2e/sigint_interrupt_test.py tests/e2e/fanout_test.py tests/e2e/use_case_transcripts_test.py tests/e2e/plugin_extension_discovery_test.py tests/e2e/on_file_query_test.py -x -q",
|
|
3
|
+
"ran_at": 1791302031,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "1746a7286f9b11c9ecb0078ec263e69ecce29d7f",
|
|
6
|
+
"branch": "claude/1232-anchor-plumbing"
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/capture_collision_test.py tests/e2e/fanout_test.py tests/e2e/cli_version_test.py tests/e2e/extension_package_test.py tests/e2e/on_file_query_test.py tests/e2e/sigint_interrupt_test.py tests/e2e/plugin_extension_discovery_test.py tests/e2e/plugin_discovery_test.py tests/e2e/query_contract_test.py -x -q",
|
|
3
|
+
"ran_at": 1791302200,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "1553e866cb8da7050a1c444833e269c831f6e0a1",
|
|
6
|
+
"branch": "claude/1330-python-dirsql-patch"
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
### Plugin launcher no longer seeds a `records` table
|
|
2
|
+
|
|
3
|
+
#### Summary
|
|
4
|
+
|
|
5
|
+
With a plugin installed, the `uvx`/`pip` launcher used to add the hidden `--include-default`, which seeded a placeholder `records` table (glob `**/*.json`, every row all-NULL) alongside the plugin's tables. It now injects only `-c <fragment>` per plugin. Queries that never named `records` are unaffected and no longer walk every JSON file first; a query that read the placeholder `records` now fails with `no such table: records`.
|
|
6
|
+
|
|
7
|
+
#### Required changes
|
|
8
|
+
|
|
9
|
+
| Surface | Before | After |
|
|
10
|
+
| ------- | ------ | ----- |
|
|
11
|
+
| `SELECT count(*) FROM records` with a plugin installed | one row per `*.json` file | `no such table: records` |
|
|
12
|
+
| Want a real `records` table | (placeholder) | define it in your own config and pass it with `-c` |
|
|
13
|
+
|
|
14
|
+
#### Deprecations removed
|
|
15
|
+
|
|
16
|
+
The hidden `--include-default` flag (internal, never documented) is removed.
|
|
17
|
+
|
|
18
|
+
#### Behavior changes without code changes
|
|
19
|
+
|
|
20
|
+
- Plugin-enabled queries no longer show a `dirsql: indexing N/M files` progress line for files no plugin table matches.
|
|
21
|
+
|
|
22
|
+
#### Verification
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
cd "$(mktemp -d)"
|
|
26
|
+
echo '{"id":1}' > a.json
|
|
27
|
+
uvx --with dirsql-plugin-embeddings dirsql query "SELECT count(*) FROM records"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Expected: `no such table: records`.
|
|
@@ -14,17 +14,6 @@ extra_scope = ["packages/rust/src", "packages/python/src", "packages/python/test
|
|
|
14
14
|
fail_under = 100
|
|
15
15
|
branch = true
|
|
16
16
|
|
|
17
|
-
# The hermetic integration tier is defined by patching the first-party core
|
|
18
|
-
# boundary: `dirsql._async._RustDirSQL` is the PyO3 class, and replacing it is
|
|
19
|
-
# what lets these tests run SQLite-free and native-build-free. There is no
|
|
20
|
-
# third-party target to re-root onto, so `no-first-party-patch` has nothing to
|
|
21
|
-
# say about this seam. Every other patch in both files targets stdlib and stays
|
|
22
|
-
# gated.
|
|
23
|
-
[[python.exempt]]
|
|
24
|
-
path = "tests/integration/hermetic/dirsql_test.py"
|
|
25
|
-
rules = ["no-first-party-patch"]
|
|
26
|
-
reason = "the hermetic tier IS the _RustDirSQL core-boundary patch; no third-party target exists to move it to"
|
|
27
|
-
|
|
28
17
|
[[python.exempt]]
|
|
29
18
|
path = "tests/integration/hermetic/extensions_test.py"
|
|
30
19
|
rules = ["no-first-party-patch"]
|
|
@@ -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.
|
|
9
|
+
version = "0.4.82"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -195,10 +195,9 @@ Discovery is deliberately narrow. Know exactly who does what:
|
|
|
195
195
|
- **The `uvx`/`pip` launcher injects `-c <fragment>` per installed plugin.**
|
|
196
196
|
Each discovered plugin's fragment is appended after your own `-c` configs, so
|
|
197
197
|
your config still takes ordering precedence
|
|
198
|
-
([composing configs](../reference/config.md#composing-multiple-configs)).
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
**add** tables rather than standing alone. Discovery is **pip/uvx only** for now — the `npx`
|
|
198
|
+
([composing configs](../reference/config.md#composing-multiple-configs)). The
|
|
199
|
+
launcher adds only the plugin's tables and functions; it seeds no `records`
|
|
200
|
+
table. Discovery is **pip/uvx only** for now — the `npx`
|
|
202
201
|
launcher does not yet discover — and is switched off per invocation with
|
|
203
202
|
[`--no-plugin` or `DIRSQL_NO_PLUGIN=1`](../reference/cli.md#plugins).
|
|
204
203
|
- **The SDK never auto-discovers.** Pass a plugin's config explicitly (the
|
|
@@ -465,7 +465,8 @@ installed in the same environment as `dirsql` (`pip install …`, or
|
|
|
465
465
|
loads its fragment — its tables are queryable with zero config edits.
|
|
466
466
|
Installed = active: there is no enable step and no naming convention. The
|
|
467
467
|
fragment is composed *after* your own `-c` configs (so your config takes
|
|
468
|
-
precedence in ordering)
|
|
468
|
+
precedence in ordering). A plugin adds its own tables and nothing else: no
|
|
469
|
+
`records` table is seeded.
|
|
469
470
|
|
|
470
471
|
Discovery is **launcher-only** — the standalone `cargo`-installed binary does no
|
|
471
472
|
discovery, and the SDKs never auto-discover (pass a plugin's config explicitly
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
//!
|
|
4
4
|
//! `init` does not inspect the target directory at all: it writes
|
|
5
5
|
//! [`super::DEFAULT_CONFIG_TOML`] verbatim -- the escalation scaffold (a named
|
|
6
|
-
//! `[[table]]` with glob, DDL, and a real `on-file` hook)
|
|
7
|
-
//!
|
|
8
|
-
//! a loadable, working config to hand-edit, and the two surfaces can never
|
|
9
|
-
//! drift apart. No LLM, no network, no filesystem walk.
|
|
6
|
+
//! `[[table]]` with glob, DDL, and a real `on-file` hook) -- so a
|
|
7
|
+
//! user always has a loadable, working config to hand-edit. No LLM, no network, no filesystem walk.
|
|
10
8
|
|
|
11
9
|
use std::path::PathBuf;
|
|
12
10
|
|
|
@@ -25,7 +25,7 @@ use super::{
|
|
|
25
25
|
repl::run_repl,
|
|
26
26
|
serve_with_state, table,
|
|
27
27
|
};
|
|
28
|
-
use crate::{DirSQL, Extension
|
|
28
|
+
use crate::{DirSQL, Extension};
|
|
29
29
|
use clap::{Args, Parser, Subcommand, ValueEnum};
|
|
30
30
|
use serde_json::Value;
|
|
31
31
|
|
|
@@ -104,17 +104,6 @@ struct ConfigArgs {
|
|
|
104
104
|
#[arg(short = 'c', long)]
|
|
105
105
|
config: Vec<PathBuf>,
|
|
106
106
|
|
|
107
|
-
/// Internal (launcher-only): seed the resolved config set with the shipped
|
|
108
|
-
/// starter `records` table *before* the `-c` configs, so an explicit `-c`
|
|
109
|
-
/// composes with it instead of standing alone. `--include-default -c
|
|
110
|
-
/// <plugin>` yields that table **plus** the plugin's tables — the additive
|
|
111
|
-
/// composition the plugin launcher (#529) injects for the no-user-`-c`
|
|
112
|
-
/// case (#604). This is an explicit opt-in, not the implicit no-`-c`
|
|
113
|
-
/// fallback (which was retired in #636). Hidden from `--help`: it is
|
|
114
|
-
/// internal plumbing for the launcher, not a documented public flag.
|
|
115
|
-
#[arg(long = "include-default", hide = true)]
|
|
116
|
-
include_default: bool,
|
|
117
|
-
|
|
118
107
|
/// Load a SQLite extension by literal path, overriding a TOML config's
|
|
119
108
|
/// `[[dirsql.extension]]` entries. Repeatable. Format: `<path>` or
|
|
120
109
|
/// `<path>::<entrypoint>`.
|
|
@@ -502,23 +491,14 @@ async fn run_server(args: ServerArgs) -> u8 {
|
|
|
502
491
|
}
|
|
503
492
|
|
|
504
493
|
fn load_state(cfg: &ConfigArgs, path_table_parser: Option<String>) -> AppState {
|
|
505
|
-
//
|
|
506
|
-
//
|
|
507
|
-
//
|
|
508
|
-
if cfg.config.is_empty()
|
|
494
|
+
// No `-c` -> index the invocation directory with no named tables. A
|
|
495
|
+
// `./.dirsql.toml` on disk is NOT consulted (#602); pass it explicitly
|
|
496
|
+
// with `-c` to use it.
|
|
497
|
+
if cfg.config.is_empty() {
|
|
509
498
|
return load_configless_state(cfg, path_table_parser);
|
|
510
499
|
}
|
|
511
500
|
|
|
512
501
|
let mut builder = DirSQL::builder();
|
|
513
|
-
// `--include-default` seeds the shipped starter `records` table before the
|
|
514
|
-
// `-c` configs, so an explicit config composes with it instead of standing
|
|
515
|
-
// alone (#604). Programmatic tables sort before config tables in
|
|
516
|
-
// `resolve`, giving `[starter] ++ [-c]`; a starter-vs-config `records`
|
|
517
|
-
// collision hits the existing dedup in `compile_matcher`. With no `-c` at
|
|
518
|
-
// all the flag still applies, yielding just the starter table.
|
|
519
|
-
if cfg.include_default {
|
|
520
|
-
builder = builder.table(default_records_table());
|
|
521
|
-
}
|
|
522
502
|
for config_path in &cfg.config {
|
|
523
503
|
// Canonicalize so config-relative paths (extension libraries, hook
|
|
524
504
|
// working directories) resolve against an absolute parent — `notify`
|
|
@@ -616,22 +596,6 @@ fn load_configless_state(cfg: &ConfigArgs, path_table_parser: Option<String>) ->
|
|
|
616
596
|
}
|
|
617
597
|
}
|
|
618
598
|
|
|
619
|
-
/// The shipped starter `records` table, parsed from the [`crate::DEFAULT_CONFIG_TOML`]
|
|
620
|
-
/// asset `dirsql init` writes. Used only by the explicit `--include-default`
|
|
621
|
-
/// compose path (#604), which seeds it as a programmatic table *before* the
|
|
622
|
-
/// `-c` configs. There is no implicit no-`-c` fallback (#636).
|
|
623
|
-
fn default_records_table() -> Table {
|
|
624
|
-
let config = crate::config::load_config_str(crate::DEFAULT_CONFIG_TOML)
|
|
625
|
-
.expect("DEFAULT_CONFIG_TOML must be valid dirsql config TOML");
|
|
626
|
-
let table_config = &config.tables[0];
|
|
627
|
-
Table::new(
|
|
628
|
-
table_config.name.clone(),
|
|
629
|
-
table_config.ddl.clone(),
|
|
630
|
-
table_config.glob.clone(),
|
|
631
|
-
|_path| vec![Row::new()],
|
|
632
|
-
)
|
|
633
|
-
}
|
|
634
|
-
|
|
635
599
|
#[cfg(unix)]
|
|
636
600
|
async fn wait_for_shutdown() -> std::io::Result<()> {
|
|
637
601
|
use tokio::signal::unix::{SignalKind, signal};
|
|
@@ -947,29 +911,6 @@ mod tests {
|
|
|
947
911
|
);
|
|
948
912
|
}
|
|
949
913
|
|
|
950
|
-
#[test]
|
|
951
|
-
fn include_default_defaults_false_without_the_flag() {
|
|
952
|
-
// Absent -> false: `-c` keeps its replacement semantics unless the
|
|
953
|
-
// launcher explicitly opts the baked-in default back in (#604).
|
|
954
|
-
let cli = Cli::parse_from(["dirsql"]);
|
|
955
|
-
assert!(!cli.common.include_default);
|
|
956
|
-
}
|
|
957
|
-
|
|
958
|
-
#[test]
|
|
959
|
-
fn include_default_flag_sets_true() {
|
|
960
|
-
let cli = Cli::parse_from(["dirsql", "--include-default"]);
|
|
961
|
-
assert!(cli.common.include_default);
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
#[test]
|
|
965
|
-
fn include_default_parses_after_the_query_subcommand() {
|
|
966
|
-
// Subcommand-local (#609): the launcher injects it AFTER `query`
|
|
967
|
-
// alongside `-c <plugin>`.
|
|
968
|
-
assert!(
|
|
969
|
-
query_common(&["dirsql", "query", "SELECT 1", "--include-default"]).include_default
|
|
970
|
-
);
|
|
971
|
-
}
|
|
972
|
-
|
|
973
914
|
#[test]
|
|
974
915
|
fn persist_flag_absent_is_none() {
|
|
975
916
|
let cli = Cli::parse_from(["dirsql"]);
|
|
@@ -1104,7 +1045,6 @@ mod tests {
|
|
|
1104
1045
|
// integration tier.
|
|
1105
1046
|
let cfg = ConfigArgs {
|
|
1106
1047
|
config: Vec::new(),
|
|
1107
|
-
include_default: false,
|
|
1108
1048
|
extension: vec!["/ext/vec0.so::sqlite3_vec_init".to_string()],
|
|
1109
1049
|
persist: None,
|
|
1110
1050
|
no_ignore: false,
|
|
@@ -1192,12 +1132,4 @@ mod tests {
|
|
|
1192
1132
|
]);
|
|
1193
1133
|
assert_eq!(code, 2);
|
|
1194
1134
|
}
|
|
1195
|
-
|
|
1196
|
-
#[test]
|
|
1197
|
-
fn default_records_table_is_built_from_the_shipped_starter_config() {
|
|
1198
|
-
// `--include-default` seeds this table, so a starter config that
|
|
1199
|
-
// stopped parsing would break that flag rather than `dirsql init`.
|
|
1200
|
-
let table = default_records_table();
|
|
1201
|
-
assert!(table.ddl.contains("records"));
|
|
1202
|
-
}
|
|
1203
1135
|
}
|
|
@@ -94,13 +94,7 @@ mod tests {
|
|
|
94
94
|
#[test]
|
|
95
95
|
fn collects_a_discovery_injected_fragment_rather_than_the_default() {
|
|
96
96
|
assert_eq!(
|
|
97
|
-
scan(&[
|
|
98
|
-
"query",
|
|
99
|
-
"SELECT 1",
|
|
100
|
-
"--include-default",
|
|
101
|
-
"-c",
|
|
102
|
-
"/frag/dirsql.toml"
|
|
103
|
-
]),
|
|
97
|
+
scan(&["query", "SELECT 1", "-c", "/frag/dirsql.toml"]),
|
|
104
98
|
["/frag/dirsql.toml"]
|
|
105
99
|
);
|
|
106
100
|
}
|