dirsql 0.4.46__tar.gz → 0.4.47__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.46 → dirsql-0.4.47}/Cargo.lock +2 -2
- {dirsql-0.4.46 → dirsql-0.4.47}/PKG-INFO +1 -1
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/_dirsql.pyi +3 -1
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/resolve_extension.py +6 -14
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/Cargo.toml +1 -1
- dirsql-0.4.47/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +8 -0
- dirsql-0.4.47/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +7 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/src/lib.rs +31 -9
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/extension_resolution.rs +98 -1
- {dirsql-0.4.46 → dirsql-0.4.47}/Cargo.toml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/README.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/_async.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/py.typed +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/read_config.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/AGENTS.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/explanation.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/getting-started.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/embed.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/persist.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/index.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/package.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/plugins.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/cli.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/columns.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/README.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/conftest.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/cli.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/README.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/cli.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/db.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/lib.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/parsed_cache.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/scanner.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.46 → dirsql-0.4.47}/pyproject.toml +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.47"
|
|
556
556
|
dependencies = [
|
|
557
557
|
"assert_cmd",
|
|
558
558
|
"axum",
|
|
@@ -597,7 +597,7 @@ dependencies = [
|
|
|
597
597
|
|
|
598
598
|
[[package]]
|
|
599
599
|
name = "dirsql-py-ext"
|
|
600
|
-
version = "0.4.
|
|
600
|
+
version = "0.4.47"
|
|
601
601
|
dependencies = [
|
|
602
602
|
"dirsql",
|
|
603
603
|
"pyo3",
|
|
@@ -97,4 +97,6 @@ def plan_config_extensions(
|
|
|
97
97
|
configs: list[tuple[str, str | None]],
|
|
98
98
|
) -> list[ExtensionPlanEntry] | None: ...
|
|
99
99
|
def select_loadable(name: str, dirs: list[str], candidates: list[str]) -> str: ...
|
|
100
|
-
def
|
|
100
|
+
def plan_extension_path(
|
|
101
|
+
path: str, base: str, resolve_relative: bool
|
|
102
|
+
) -> ExtensionPlanEntry: ...
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"""Resolve an extension entry's ``path`` to a concrete loadable file.
|
|
2
2
|
|
|
3
|
-
Resolution is an ordered probe (file-first, then package),
|
|
4
|
-
|
|
3
|
+
Resolution is an ordered probe (file-first, then package), planned by the core
|
|
4
|
+
(``_dirsql.plan_extension_path``) and carried out here: only locating an
|
|
5
|
+
installed package is host-specific.
|
|
5
6
|
|
|
6
7
|
1. **Path-looking** (contains a separator, or ends in ``.so`` / ``.dylib`` /
|
|
7
8
|
``.dll`` / ``.pyd``) -- returned as a file path: made absolute against
|
|
@@ -13,10 +14,8 @@ package name reaches the package machinery:
|
|
|
13
14
|
picked from inside it.
|
|
14
15
|
"""
|
|
15
16
|
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
from ._dirsql import is_bare_name
|
|
19
|
-
from .resolve_package import _resolve_package
|
|
17
|
+
from ._dirsql import plan_extension_path
|
|
18
|
+
from .plan_entry_path import _plan_entry_path
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
def resolve_extension_path(path, base, resolve_relative):
|
|
@@ -28,11 +27,4 @@ def resolve_extension_path(path, base, resolve_relative):
|
|
|
28
27
|
against ``base`` (config-file semantics); when false it is returned verbatim
|
|
29
28
|
(programmatic semantics).
|
|
30
29
|
"""
|
|
31
|
-
|
|
32
|
-
if resolve_relative and not os.path.isabs(path):
|
|
33
|
-
return os.path.join(base, path)
|
|
34
|
-
return path
|
|
35
|
-
local = os.path.join(base, path)
|
|
36
|
-
if os.path.isfile(local):
|
|
37
|
-
return local
|
|
38
|
-
return _resolve_package(path)
|
|
30
|
+
return _plan_entry_path(plan_extension_path(path, base, resolve_relative))
|
|
@@ -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.47"
|
|
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,8 @@
|
|
|
1
|
+
**Changed**
|
|
2
|
+
|
|
3
|
+
- `resolve_extension_path` now plans through the core
|
|
4
|
+
(`_dirsql.plan_extension_path`) instead of re-implementing the ordered probe,
|
|
5
|
+
so a programmatic `extensions=[{path}]` entry is classified by the same code
|
|
6
|
+
as a config entry. `importlib` package lookup is unchanged, and so is the
|
|
7
|
+
resolved path. The internal `_dirsql.is_bare_name` binding export is gone,
|
|
8
|
+
replaced by `plan_extension_path`. No change to the published API. (#1122)
|
|
@@ -573,10 +573,19 @@ mod python {
|
|
|
573
573
|
.map_err(|err| err.to_string())
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
-
///
|
|
576
|
+
/// Plan one extension path given outside a config file.
|
|
577
|
+
///
|
|
578
|
+
/// `base` is the directory a relative path and the bare-name shadow probe
|
|
579
|
+
/// resolve against; `resolve_relative` makes a relative path-looking value
|
|
580
|
+
/// absolute against it (config semantics) rather than verbatim.
|
|
577
581
|
#[pyfunction]
|
|
578
|
-
fn
|
|
579
|
-
extension_resolution::
|
|
582
|
+
fn plan_extension_path(path: &str, base: &str, resolve_relative: bool) -> PyExtensionPlanEntry {
|
|
583
|
+
plan_entry_to_py(extension_resolution::plan_extension_path(
|
|
584
|
+
path,
|
|
585
|
+
Path::new(base),
|
|
586
|
+
resolve_relative,
|
|
587
|
+
PY_SUFFIXES,
|
|
588
|
+
))
|
|
580
589
|
}
|
|
581
590
|
|
|
582
591
|
#[pymodule]
|
|
@@ -591,7 +600,7 @@ mod python {
|
|
|
591
600
|
m.add_function(wrap_pyfunction!(config_paths_from_argv, m)?)?;
|
|
592
601
|
m.add_function(wrap_pyfunction!(plan_config_extensions, m)?)?;
|
|
593
602
|
m.add_function(wrap_pyfunction!(select_loadable, m)?)?;
|
|
594
|
-
m.add_function(wrap_pyfunction!(
|
|
603
|
+
m.add_function(wrap_pyfunction!(plan_extension_path, m)?)?;
|
|
595
604
|
m.add_class::<PyExtensionPlanEntry>()?;
|
|
596
605
|
Ok(())
|
|
597
606
|
}
|
|
@@ -763,11 +772,24 @@ mod python {
|
|
|
763
772
|
}
|
|
764
773
|
|
|
765
774
|
#[test]
|
|
766
|
-
fn
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
775
|
+
fn a_programmatic_path_marshals_as_a_literal_entry() {
|
|
776
|
+
let entry = plan_extension_path("ext/vec0.so", "/cwd", false);
|
|
777
|
+
assert_eq!(entry.path.as_deref(), Some("ext/vec0.so"));
|
|
778
|
+
assert_eq!(entry.package, None);
|
|
779
|
+
assert_eq!(
|
|
780
|
+
plan_extension_path("ext/vec0.so", "/cwd", true)
|
|
781
|
+
.path
|
|
782
|
+
.as_deref(),
|
|
783
|
+
Some("/cwd/ext/vec0.so")
|
|
784
|
+
);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
#[test]
|
|
788
|
+
fn a_programmatic_entry_applies_the_cpython_suffix_list() {
|
|
789
|
+
let entry = plan_extension_path("vec0.node", "/cwd", false);
|
|
790
|
+
assert_eq!(entry.package.as_deref(), Some("vec0.node"));
|
|
791
|
+
assert_eq!(entry.shadow.as_deref(), Some("/cwd/vec0.node"));
|
|
792
|
+
assert_eq!(plan_extension_path("vec0.pyd", "/cwd", false).package, None);
|
|
771
793
|
}
|
|
772
794
|
|
|
773
795
|
#[test]
|
|
@@ -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.47"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -169,6 +169,38 @@ fn spec_is_bare_name(extension: &ExtensionSpec, suffixes: &[&str]) -> bool {
|
|
|
169
169
|
.is_some_and(|path| is_bare_name(path, suffixes))
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
+
/// Plan one extension path given outside a config file.
|
|
173
|
+
///
|
|
174
|
+
/// A constructor's `extensions=[{path}]` entry takes the same ordered probe as
|
|
175
|
+
/// a config entry: a path-looking value is literal, made absolute against
|
|
176
|
+
/// `base` only when `resolve_relative` is set (config semantics; programmatic
|
|
177
|
+
/// entries keep a relative path verbatim), and a bare name is a package whose
|
|
178
|
+
/// shadow probe sits under `base`. The entry's `entrypoint` travels with the
|
|
179
|
+
/// caller, so the returned entry carries none.
|
|
180
|
+
pub fn plan_extension_path(
|
|
181
|
+
path: &str,
|
|
182
|
+
base: &Path,
|
|
183
|
+
resolve_relative: bool,
|
|
184
|
+
suffixes: &[&str],
|
|
185
|
+
) -> PlanEntry {
|
|
186
|
+
if is_bare_name(path, suffixes) {
|
|
187
|
+
return PlanEntry::Package {
|
|
188
|
+
name: path.to_owned(),
|
|
189
|
+
shadow: base.join(path),
|
|
190
|
+
entrypoint: None,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
PlanEntry::Literal {
|
|
194
|
+
// `join` yields an absolute path verbatim.
|
|
195
|
+
path: if resolve_relative {
|
|
196
|
+
base.join(path)
|
|
197
|
+
} else {
|
|
198
|
+
PathBuf::from(path)
|
|
199
|
+
},
|
|
200
|
+
entrypoint: None,
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
172
204
|
/// Pick the single loadable file for package `name` out of a host's listing.
|
|
173
205
|
///
|
|
174
206
|
/// `dirs` are the package's directories (used only for the not-found message);
|
|
@@ -209,7 +241,8 @@ pub fn select_loadable(
|
|
|
209
241
|
#[cfg(test)]
|
|
210
242
|
mod tests {
|
|
211
243
|
use super::{
|
|
212
|
-
ConfigSource, PlanEntry, SelectError, is_bare_name, plan_config_extensions,
|
|
244
|
+
ConfigSource, PlanEntry, SelectError, is_bare_name, plan_config_extensions,
|
|
245
|
+
plan_extension_path, select_loadable,
|
|
213
246
|
};
|
|
214
247
|
use std::path::{Path, PathBuf};
|
|
215
248
|
|
|
@@ -357,6 +390,70 @@ mod tests {
|
|
|
357
390
|
);
|
|
358
391
|
}
|
|
359
392
|
|
|
393
|
+
#[test]
|
|
394
|
+
fn a_programmatic_relative_path_is_made_absolute_only_when_asked() {
|
|
395
|
+
let base = Path::new("/cwd");
|
|
396
|
+
assert_eq!(
|
|
397
|
+
plan_extension_path("ext/vec0.so", base, true, PY),
|
|
398
|
+
PlanEntry::Literal {
|
|
399
|
+
path: PathBuf::from("/cwd/ext/vec0.so"),
|
|
400
|
+
entrypoint: None,
|
|
401
|
+
}
|
|
402
|
+
);
|
|
403
|
+
assert_eq!(
|
|
404
|
+
plan_extension_path("ext/vec0.so", base, false, PY),
|
|
405
|
+
PlanEntry::Literal {
|
|
406
|
+
path: PathBuf::from("ext/vec0.so"),
|
|
407
|
+
entrypoint: None,
|
|
408
|
+
}
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
#[test]
|
|
413
|
+
fn a_programmatic_absolute_path_is_left_alone() {
|
|
414
|
+
assert_eq!(
|
|
415
|
+
plan_extension_path("/opt/vec0.so", Path::new("/cwd"), true, PY),
|
|
416
|
+
PlanEntry::Literal {
|
|
417
|
+
path: PathBuf::from("/opt/vec0.so"),
|
|
418
|
+
entrypoint: None,
|
|
419
|
+
}
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
#[test]
|
|
424
|
+
fn a_programmatic_bare_name_plans_a_package_shadowed_by_base() {
|
|
425
|
+
for resolve_relative in [true, false] {
|
|
426
|
+
assert_eq!(
|
|
427
|
+
plan_extension_path("sqlite_vec", Path::new("/cwd"), resolve_relative, PY),
|
|
428
|
+
PlanEntry::Package {
|
|
429
|
+
name: "sqlite_vec".into(),
|
|
430
|
+
shadow: PathBuf::from("/cwd/sqlite_vec"),
|
|
431
|
+
entrypoint: None,
|
|
432
|
+
}
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
#[test]
|
|
438
|
+
fn a_programmatic_entry_uses_the_hosts_own_suffix_list() {
|
|
439
|
+
let base = Path::new("/cwd");
|
|
440
|
+
assert_eq!(
|
|
441
|
+
plan_extension_path("vec0.node", base, true, PY),
|
|
442
|
+
PlanEntry::Package {
|
|
443
|
+
name: "vec0.node".into(),
|
|
444
|
+
shadow: PathBuf::from("/cwd/vec0.node"),
|
|
445
|
+
entrypoint: None,
|
|
446
|
+
}
|
|
447
|
+
);
|
|
448
|
+
assert_eq!(
|
|
449
|
+
plan_extension_path("vec0.node", base, true, NODE),
|
|
450
|
+
PlanEntry::Literal {
|
|
451
|
+
path: PathBuf::from("/cwd/vec0.node"),
|
|
452
|
+
entrypoint: None,
|
|
453
|
+
}
|
|
454
|
+
);
|
|
455
|
+
}
|
|
456
|
+
|
|
360
457
|
#[test]
|
|
361
458
|
fn select_loadable_returns_the_single_matching_file() {
|
|
362
459
|
let dir = PathBuf::from("/site-packages/sqlite_vec");
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-07-29-restore-python-310.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-08-20-declared-table-name.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md
RENAMED
|
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
|
|
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
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json
RENAMED
|
File without changes
|
{dirsql-0.4.46 → dirsql-0.4.47}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|