dirsql 0.3.4__tar.gz → 0.3.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. {dirsql-0.3.4 → dirsql-0.3.6}/Cargo.lock +1 -1
  2. {dirsql-0.3.4 → dirsql-0.3.6}/PKG-INFO +3 -3
  3. {dirsql-0.3.4/packages/python → dirsql-0.3.6}/README.md +1 -1
  4. dirsql-0.3.6/docs/.vitepress/config.ts +83 -0
  5. {dirsql-0.3.4/packages/python → dirsql-0.3.6}/docs/AGENTS.md +6 -0
  6. {dirsql-0.3.4/packages/rust/docs/guide → dirsql-0.3.6/docs/cli}/config.md +7 -7
  7. dirsql-0.3.4/docs/guide/cli.md → dirsql-0.3.6/docs/cli/http-api.md +12 -58
  8. dirsql-0.3.6/docs/cli/index.md +71 -0
  9. {dirsql-0.3.4/packages/python/docs/guide → dirsql-0.3.6/docs/cli}/init.md +4 -4
  10. dirsql-0.3.6/docs/cli/server.md +41 -0
  11. {dirsql-0.3.4 → dirsql-0.3.6}/docs/getting-started.md +2 -2
  12. {dirsql-0.3.4/packages/python → dirsql-0.3.6}/docs/guide/querying.md +4 -0
  13. {dirsql-0.3.4/packages/rust → dirsql-0.3.6}/docs/guide/watching.md +4 -0
  14. dirsql-0.3.6/docs/tests/unit/config.test.ts +22 -0
  15. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/Cargo.toml +1 -1
  16. {dirsql-0.3.4 → dirsql-0.3.6/packages/python}/README.md +1 -1
  17. dirsql-0.3.6/packages/python/docs/.vitepress/config.ts +83 -0
  18. {dirsql-0.3.4 → dirsql-0.3.6/packages/python}/docs/AGENTS.md +6 -0
  19. {dirsql-0.3.4/packages/python/docs/guide → dirsql-0.3.6/packages/python/docs/cli}/config.md +7 -7
  20. dirsql-0.3.4/packages/rust/docs/guide/cli.md → dirsql-0.3.6/packages/python/docs/cli/http-api.md +12 -58
  21. dirsql-0.3.6/packages/python/docs/cli/index.md +71 -0
  22. {dirsql-0.3.4/docs/guide → dirsql-0.3.6/packages/python/docs/cli}/init.md +4 -4
  23. dirsql-0.3.6/packages/python/docs/cli/server.md +41 -0
  24. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/getting-started.md +2 -2
  25. {dirsql-0.3.4/packages/rust → dirsql-0.3.6/packages/python}/docs/guide/querying.md +4 -0
  26. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/guide/watching.md +4 -0
  27. dirsql-0.3.6/packages/python/docs/tests/unit/config.test.ts +22 -0
  28. dirsql-0.3.6/packages/python/tests/e2e/__init__.py +0 -0
  29. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/Cargo.toml +8 -2
  30. {dirsql-0.3.4/docs/guide → dirsql-0.3.6/packages/rust/docs/cli}/config.md +7 -7
  31. dirsql-0.3.4/packages/python/docs/guide/cli.md → dirsql-0.3.6/packages/rust/docs/cli/http-api.md +12 -58
  32. dirsql-0.3.6/packages/rust/docs/cli/index.md +71 -0
  33. {dirsql-0.3.4/packages/rust/docs/guide → dirsql-0.3.6/packages/rust/docs/cli}/init.md +4 -4
  34. dirsql-0.3.6/packages/rust/docs/cli/server.md +41 -0
  35. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/getting-started.md +2 -2
  36. {dirsql-0.3.4 → dirsql-0.3.6/packages/rust}/docs/guide/querying.md +4 -0
  37. {dirsql-0.3.4 → dirsql-0.3.6/packages/rust}/docs/guide/watching.md +4 -0
  38. dirsql-0.3.6/pyproject.toml +71 -0
  39. dirsql-0.3.4/docs/.vitepress/config.ts +0 -65
  40. dirsql-0.3.4/docs/tests/unit/config.test.ts +0 -9
  41. dirsql-0.3.4/packages/python/docs/.vitepress/config.ts +0 -65
  42. dirsql-0.3.4/packages/python/docs/tests/unit/config.test.ts +0 -9
  43. dirsql-0.3.4/pyproject.toml +0 -59
  44. dirsql-0.3.4/python/dirsql/_cli/binary_path_test.py +0 -70
  45. dirsql-0.3.4/python/dirsql/_cli/is_windows_test.py +0 -15
  46. dirsql-0.3.4/python/dirsql/_cli/main_test.py +0 -77
  47. {dirsql-0.3.4 → dirsql-0.3.6}/Cargo.toml +0 -0
  48. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/__init__.py +0 -0
  49. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/_async.py +0 -0
  50. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/_cli/__init__.py +0 -0
  51. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/_cli/binary_path.py +0 -0
  52. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/_cli/is_windows.py +0 -0
  53. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/_cli/main.py +0 -0
  54. {dirsql-0.3.4/python → dirsql-0.3.6}/dirsql/test_async.py +0 -0
  55. {dirsql-0.3.4 → dirsql-0.3.6}/docs/.claude/CLAUDE.md +0 -0
  56. {dirsql-0.3.4 → dirsql-0.3.6}/docs/.vitepress/theme/index.ts +0 -0
  57. {dirsql-0.3.4 → dirsql-0.3.6}/docs/.vitepress/theme/lang.ts +0 -0
  58. {dirsql-0.3.4 → dirsql-0.3.6}/docs/api/index.md +0 -0
  59. {dirsql-0.3.4 → dirsql-0.3.6}/docs/guide/async.md +0 -0
  60. {dirsql-0.3.4 → dirsql-0.3.6}/docs/guide/crdt.md +0 -0
  61. {dirsql-0.3.4 → dirsql-0.3.6}/docs/guide/persistence.md +0 -0
  62. {dirsql-0.3.4 → dirsql-0.3.6}/docs/guide/tables.md +0 -0
  63. {dirsql-0.3.4 → dirsql-0.3.6}/docs/index.md +0 -0
  64. {dirsql-0.3.4 → dirsql-0.3.6}/docs/migrations.md +0 -0
  65. {dirsql-0.3.4 → dirsql-0.3.6}/docs/package.json +0 -0
  66. {dirsql-0.3.4 → dirsql-0.3.6}/docs/playwright.config.ts +0 -0
  67. {dirsql-0.3.4 → dirsql-0.3.6}/docs/pnpm-lock.yaml +0 -0
  68. {dirsql-0.3.4 → dirsql-0.3.6}/docs/pnpm-workspace.yaml +0 -0
  69. {dirsql-0.3.4 → dirsql-0.3.6}/docs/tests/integration/home.spec.ts +0 -0
  70. {dirsql-0.3.4 → dirsql-0.3.6}/docs/tests/integration/language-flag.spec.ts +0 -0
  71. {dirsql-0.3.4 → dirsql-0.3.6}/docs/tests/unit/lang.test.ts +0 -0
  72. {dirsql-0.3.4 → dirsql-0.3.6}/docs/vitest.config.ts +0 -0
  73. {dirsql-0.3.4/packages/python → dirsql-0.3.6/packages}/python/conftest.py +0 -0
  74. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/.claude/CLAUDE.md +0 -0
  75. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  76. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  77. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/api/index.md +0 -0
  78. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/guide/async.md +0 -0
  79. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/guide/crdt.md +0 -0
  80. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/guide/persistence.md +0 -0
  81. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/guide/tables.md +0 -0
  82. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/index.md +0 -0
  83. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/migrations.md +0 -0
  84. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/package.json +0 -0
  85. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/playwright.config.ts +0 -0
  86. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/pnpm-lock.yaml +0 -0
  87. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/pnpm-workspace.yaml +0 -0
  88. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/tests/integration/home.spec.ts +0 -0
  89. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/tests/integration/language-flag.spec.ts +0 -0
  90. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/tests/unit/lang.test.ts +0 -0
  91. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/docs/vitest.config.ts +0 -0
  92. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/src/lib.rs +0 -0
  93. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/__init__.py +0 -0
  94. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/conftest.py +0 -0
  95. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/__init__.py +0 -0
  96. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_async_dirsql.py +0 -0
  97. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_binding.py +0 -0
  98. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_dirsql.py +0 -0
  99. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_docs_examples.py +0 -0
  100. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_docs_gaps.py +0 -0
  101. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_from_config.py +0 -0
  102. {dirsql-0.3.4 → dirsql-0.3.6}/packages/python/tests/integration/test_persist.py +0 -0
  103. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/README.md +0 -0
  104. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/benches/db_bench.rs +0 -0
  105. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/benches/differ_bench.rs +0 -0
  106. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/benches/matcher_bench.rs +0 -0
  107. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/benches/scanner_bench.rs +0 -0
  108. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/api/index.md +0 -0
  109. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/guide/async.md +0 -0
  110. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/guide/crdt.md +0 -0
  111. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/guide/persistence.md +0 -0
  112. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/guide/tables.md +0 -0
  113. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/index.md +0 -0
  114. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/docs/migrations.md +0 -0
  115. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/bin/dirsql.rs +0 -0
  116. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/cli/init.rs +0 -0
  117. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/cli/mod.rs +0 -0
  118. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/cli/router.rs +0 -0
  119. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/cli/serialize.rs +0 -0
  120. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/cli/server.rs +0 -0
  121. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/config.rs +0 -0
  122. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/db.rs +0 -0
  123. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/differ.rs +0 -0
  124. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/lib.rs +0 -0
  125. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/matcher.rs +0 -0
  126. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/persist.rs +0 -0
  127. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/scanner.rs +0 -0
  128. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/src/watcher.rs +0 -0
  129. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/async_sdk.rs +0 -0
  130. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/cli_e2e.rs +0 -0
  131. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/cli_integration.rs +0 -0
  132. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/docs_examples.rs +0 -0
  133. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/docs_gaps.rs +0 -0
  134. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/from_config.rs +0 -0
  135. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/init_e2e.rs +0 -0
  136. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/init_integration.rs +0 -0
  137. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/persist.rs +0 -0
  138. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/readonly_query.rs +0 -0
  139. {dirsql-0.3.4 → dirsql-0.3.6}/packages/rust/tests/sdk.rs +0 -0
@@ -499,7 +499,7 @@ dependencies = [
499
499
 
500
500
  [[package]]
501
501
  name = "dirsql-py-ext"
502
- version = "0.3.4"
502
+ version = "0.3.6"
503
503
  dependencies = [
504
504
  "dirsql",
505
505
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Requires-Dist: pytest>=8 ; extra == 'dev'
5
5
  Requires-Dist: pytest-describe>=2 ; extra == 'dev'
6
6
  Requires-Dist: pytest-asyncio>=0.23 ; extra == 'dev'
@@ -12,7 +12,7 @@ Summary: Ephemeral SQL index over a local directory
12
12
  Keywords: sql,filesystem,directory,sqlite,index
13
13
  Author: Kevin Scott
14
14
  License-Expression: MIT
15
- Requires-Python: >=3.10
15
+ Requires-Python: >=3.11
16
16
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
17
 
18
18
  # `dirsql` (Python SDK)
@@ -33,7 +33,7 @@ Each wheel also bundles the `dirsql` HTTP-server CLI as a console script, so `pi
33
33
 
34
34
  ## Publishing (maintainers)
35
35
 
36
- Handled by `.github/workflows/publish.yml` (invoked from `minor-release.yml` / `patch-release.yml`). For each target triple the `build` job `cargo build`s the Rust CLI with `--features cli`, stages the binary into `python/dirsql/_binary/`, runs `maturin build` (which picks the binary up via the `[tool.maturin] include` rule in `pyproject.toml`), and the wheels + sdist are then trusted-published to PyPI.
36
+ Handled by `.github/workflows/publish.yml` (invoked from `minor-release.yml` / `patch-release.yml`). For each target triple the `build` job `cargo build`s the Rust CLI with `--features cli`, stages the binary into `dirsql/_binary/`, runs `maturin build` (which picks the binary up via the `[tool.maturin] include` rule in `pyproject.toml`), and the wheels + sdist are then trusted-published to PyPI.
37
37
 
38
38
  ## Quick Start
39
39
 
@@ -16,7 +16,7 @@ Each wheel also bundles the `dirsql` HTTP-server CLI as a console script, so `pi
16
16
 
17
17
  ## Publishing (maintainers)
18
18
 
19
- Handled by `.github/workflows/publish.yml` (invoked from `minor-release.yml` / `patch-release.yml`). For each target triple the `build` job `cargo build`s the Rust CLI with `--features cli`, stages the binary into `python/dirsql/_binary/`, runs `maturin build` (which picks the binary up via the `[tool.maturin] include` rule in `pyproject.toml`), and the wheels + sdist are then trusted-published to PyPI.
19
+ Handled by `.github/workflows/publish.yml` (invoked from `minor-release.yml` / `patch-release.yml`). For each target triple the `build` job `cargo build`s the Rust CLI with `--features cli`, stages the binary into `dirsql/_binary/`, runs `maturin build` (which picks the binary up via the `[tool.maturin] include` rule in `pyproject.toml`), and the wheels + sdist are then trusted-published to PyPI.
20
20
 
21
21
  ## Quick Start
22
22
 
@@ -0,0 +1,83 @@
1
+ import { defineConfig } from 'vitepress'
2
+
3
+ export default defineConfig({
4
+ title: 'dirsql',
5
+ description: 'Ephemeral SQL index over a local directory. Watches a filesystem, ingests structured files into an in-memory SQLite database, and exposes a SQL query interface.',
6
+ base: '/dirsql/',
7
+
8
+ themeConfig: {
9
+ search: {
10
+ provider: 'local'
11
+ },
12
+
13
+ nav: [
14
+ { text: 'Getting Started', link: '/getting-started' },
15
+ { text: 'Guide', link: '/guide/tables' },
16
+ { text: 'CLI', link: '/cli/' },
17
+ { text: 'Reference', link: '/api/' },
18
+ { text: 'Migrations', link: '/migrations' },
19
+ { text: 'GitHub', link: 'https://github.com/thekevinscott/dirsql' }
20
+ ],
21
+
22
+ sidebar: {
23
+ '/cli/': [
24
+ {
25
+ text: 'CLI',
26
+ items: [
27
+ { text: 'Overview & Installation', link: '/cli/' },
28
+ { text: 'Running the Server', link: '/cli/server' },
29
+ { text: 'Generating a Config (`init`)', link: '/cli/init' },
30
+ { text: 'Configuration File', link: '/cli/config' },
31
+ { text: 'HTTP API', link: '/cli/http-api' }
32
+ ]
33
+ }
34
+ ],
35
+ '/': [
36
+ {
37
+ text: 'Tutorials',
38
+ items: [
39
+ { text: 'Getting Started', link: '/getting-started' }
40
+ ]
41
+ },
42
+ {
43
+ text: 'How-to Guides',
44
+ items: [
45
+ { text: 'Defining Tables', link: '/guide/tables' },
46
+ { text: 'Querying', link: '/guide/querying' },
47
+ { text: 'File Watching', link: '/guide/watching' },
48
+ { text: 'Persistence', link: '/guide/persistence' },
49
+ { text: 'Async API', link: '/guide/async' },
50
+ { text: 'Collaboration with CRDTs', link: '/guide/crdt' }
51
+ ]
52
+ },
53
+ {
54
+ text: 'CLI',
55
+ items: [
56
+ { text: 'Using `dirsql` from the CLI', link: '/cli/' }
57
+ ]
58
+ },
59
+ {
60
+ text: 'Reference',
61
+ items: [
62
+ { text: 'API Reference', link: '/api/' },
63
+ { text: 'Migrations', link: '/migrations' }
64
+ ]
65
+ }
66
+ ]
67
+ },
68
+
69
+ outline: {
70
+ level: [2, 3],
71
+ label: 'On this page'
72
+ },
73
+
74
+ socialLinks: [
75
+ { icon: 'github', link: 'https://github.com/thekevinscott/dirsql' }
76
+ ],
77
+
78
+ footer: {
79
+ message: 'Released under the MIT License.',
80
+ copyright: 'Copyright 2024-present'
81
+ }
82
+ }
83
+ })
@@ -42,6 +42,12 @@ The docs follow the [Diataxis](https://diataxis.fr/) framework:
42
42
  - **Reference** (`api/`) -- information-oriented, API details
43
43
  - **Explanation** (`architecture.md`) -- understanding-oriented, design decisions
44
44
 
45
+ The **CLI** (`cli/`) is a self-contained section reachable from its own
46
+ top-level `CLI` nav tab, with a path-scoped sidebar (`/cli/` key in
47
+ `config.ts`). Everything a CLI user needs -- installation, running the server,
48
+ `init`, the `.dirsql.toml` config file, and the HTTP API -- lives under
49
+ `cli/`. Do not move CLI pages back into `guide/`.
50
+
45
51
  ## Conventions
46
52
 
47
53
  - Wrap `dirsql` in backticks in all prose text
@@ -1,10 +1,10 @@
1
1
  ---
2
- canonical: https://thekevinscott.github.io/dirsql/guide/config
2
+ canonical: https://thekevinscott.github.io/dirsql/cli/config
3
3
  ---
4
4
 
5
5
  # Configuration File
6
6
 
7
- > Online: <https://thekevinscott.github.io/dirsql/guide/config>
7
+ > Online: <https://thekevinscott.github.io/dirsql/cli/config>
8
8
 
9
9
  `dirsql` can be configured with a `.dirsql.toml` file. Tables defined this
10
10
  way produce **one row per matched file**. Each row's columns come from
@@ -16,7 +16,7 @@ filesystem facts:
16
16
 
17
17
  Content interpretation (parsing JSON, CSV, frontmatter, etc.) is **not**
18
18
  configured in `.dirsql.toml`. If you need columns derived from file
19
- contents, register a programmatic [`Table`](./tables.md) whose `extract`
19
+ contents, register a programmatic [`Table`](../guide/tables.md) whose `extract`
20
20
  function does the parsing in your host language.
21
21
 
22
22
  ## Basic Example
@@ -131,7 +131,7 @@ ignore = ["node_modules/**", ".git/**", "*.pyc", "__pycache__/**"]
131
131
 
132
132
  The top-level `.dirsql/` directory is always excluded, whether you list it
133
133
  or not — it is a reserved namespace for `dirsql`'s own metadata (see
134
- [Persistence](./persistence.md)).
134
+ [Persistence](../guide/persistence.md)).
135
135
 
136
136
  ## Persistence
137
137
 
@@ -144,7 +144,7 @@ persist = true
144
144
  # persist_path = ".dirsql/cache.db" # optional; this is the default
145
145
  ```
146
146
 
147
- See [Persistence](./persistence.md) for the full reconcile algorithm,
147
+ See [Persistence](../guide/persistence.md) for the full reconcile algorithm,
148
148
  storage layout, and limitations.
149
149
 
150
150
  ## Strict Mode
@@ -163,7 +163,7 @@ strict = true
163
163
  Strict mode does **not** apply to auto-injected stat virtuals — those are
164
164
  always filtered to the DDL's declared columns regardless. Strict mode
165
165
  applies only to keys produced by an extract callback (relevant for
166
- programmatic [tables](./tables.md)).
166
+ programmatic [tables](../guide/tables.md)).
167
167
 
168
168
  ## Full Example
169
169
 
@@ -188,6 +188,6 @@ glob = "logs/*.csv"
188
188
 
189
189
  `.dirsql.toml` does not parse file contents. For columns derived from the
190
190
  *inside* of files (frontmatter keys, JSON values, CSV cells, etc.),
191
- register a programmatic [`Table`](./tables.md) instead, and parse the
191
+ register a programmatic [`Table`](../guide/tables.md) instead, and parse the
192
192
  bytes in your host language. Glob captures and stat virtuals are still
193
193
  auto-injected into rows produced by your extract.
@@ -1,65 +1,16 @@
1
1
  ---
2
- canonical: https://thekevinscott.github.io/dirsql/guide/cli
2
+ canonical: https://thekevinscott.github.io/dirsql/cli/http-api
3
3
  ---
4
4
 
5
- # Command-Line Interface
5
+ # HTTP API
6
6
 
7
- > Online: <https://thekevinscott.github.io/dirsql/guide/cli>
7
+ > Online: <https://thekevinscott.github.io/dirsql/cli/http-api>
8
8
 
9
- `dirsql` starts an HTTP server that exposes identical SDK functionality.
9
+ Once the [server is running](./server.md), `dirsql` exposes two HTTP
10
+ endpoints: `POST /query` for SQL queries and `GET /events` for a real-time
11
+ change stream.
10
12
 
11
- ## Installation
12
-
13
- ::: code-group
14
-
15
- ```bash [npm]
16
- npx dirsql
17
- ```
18
-
19
- ```bash [PyPI]
20
- uvx dirsql
21
- ```
22
-
23
- ```bash [Cargo]
24
- # Installs the binary only (non-default feature)
25
- cargo install dirsql --features cli
26
- dirsql
27
- ```
28
-
29
- :::
30
-
31
- ::: tip For Rust library consumers
32
- The `cli` feature is **opt-in**. Adding `dirsql` as a library dependency (`cargo add dirsql`) pulls no CLI dependencies — only the core library. See the [Rust library README](https://github.com/thekevinscott/dirsql/tree/main/packages/rust) for details.
33
- :::
34
-
35
- ## Subcommands
36
-
37
- | Command | Purpose |
38
- |---|---|
39
- | `dirsql` (no subcommand) | Start the long-lived HTTP server (default behavior, see below). |
40
- | `dirsql init` | Generate a starter `.dirsql.toml` from the contents of a directory. See [Generating a Config](./init.md). |
41
-
42
- ## Running the server
43
-
44
- Run `dirsql` from the directory containing your files:
45
-
46
- ```bash
47
- dirsql
48
-
49
- $ Running at localhost:7117
50
- ```
51
-
52
- ### Flags
53
-
54
- | Flag | Default | Description |
55
- |---|---|---|
56
- | `--config <path>` | `./.dirsql.toml` | Path to the config file. The index is rooted at the directory containing this file. |
57
- | `--host <addr>` | `localhost` | Bind address |
58
- | `--port <n>` | `7117` | TCP port to bind |
59
-
60
- ## HTTP API
61
-
62
- ### `POST /query`
13
+ ## `POST /query`
63
14
 
64
15
  Run a SQL query. Request body is JSON:
65
16
 
@@ -91,9 +42,12 @@ curl -s http://localhost:7117/query \
91
42
  | jq
92
43
  ```
93
44
 
94
- ### `GET /events`
45
+ The query interface is the same one the SDK exposes; see [Querying](../guide/querying.md)
46
+ for SQL semantics, the read-only restriction, and the return format.
47
+
48
+ ## `GET /events`
95
49
 
96
- Opens a [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) stream of change events. Each `data:` payload is the same JSON schema the SDK emits from [`db.watch()`](./watching.md#event-types):
50
+ Opens a [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) stream of change events. Each `data:` payload is the same JSON schema the SDK emits from [`db.watch()`](../guide/watching.md#event-types):
97
51
 
98
52
  ```
99
53
  event: row
@@ -0,0 +1,71 @@
1
+ ---
2
+ canonical: https://thekevinscott.github.io/dirsql/cli/
3
+ ---
4
+
5
+ # Using `dirsql` from the CLI
6
+
7
+ > Online: <https://thekevinscott.github.io/dirsql/cli/>
8
+
9
+ `dirsql` ships a command-line interface that starts an HTTP server exposing
10
+ the same indexing, querying, and watching functionality as the SDK — no host
11
+ language required. Point it at a directory, give it a [`.dirsql.toml`](./config.md)
12
+ config, and query your files over HTTP.
13
+
14
+ Everything you need to run `dirsql` as a CLI lives in this section:
15
+
16
+ - **[Installation](#installation)** — get the `dirsql` binary.
17
+ - **[Running the Server](./server.md)** — subcommands and flags.
18
+ - **[Generating a Config (`init`)](./init.md)** — scaffold a `.dirsql.toml`.
19
+ - **[Configuration File](./config.md)** — the `.dirsql.toml` format. The CLI
20
+ defines tables exclusively through this file.
21
+ - **[HTTP API](./http-api.md)** — the `POST /query` and `GET /events`
22
+ endpoints, status codes, and event streaming.
23
+
24
+ ## Installation
25
+
26
+ ::: code-group
27
+
28
+ ```bash [npm]
29
+ npx dirsql
30
+ ```
31
+
32
+ ```bash [PyPI]
33
+ uvx dirsql
34
+ ```
35
+
36
+ ```bash [Cargo]
37
+ # Installs the binary only (the `cli` feature is non-default)
38
+ cargo install dirsql --features cli
39
+ dirsql
40
+ ```
41
+
42
+ :::
43
+
44
+ ::: tip For Rust library consumers
45
+ The `cli` feature is **opt-in**. Adding `dirsql` as a library dependency
46
+ (`cargo add dirsql`) pulls no CLI dependencies — only the core library. See the
47
+ [Rust library README](https://github.com/thekevinscott/dirsql/tree/main/packages/rust)
48
+ for the library-vs-CLI feature split.
49
+ :::
50
+
51
+ ## Quick start
52
+
53
+ From a directory containing your files and a [`.dirsql.toml`](./config.md):
54
+
55
+ ```bash
56
+ dirsql
57
+
58
+ $ Running at localhost:7117
59
+ ```
60
+
61
+ Then query it over HTTP:
62
+
63
+ ```bash
64
+ curl -s http://localhost:7117/query \
65
+ -H 'content-type: application/json' \
66
+ -d '{"sql":"SELECT COUNT(*) AS n FROM posts"}' \
67
+ | jq
68
+ ```
69
+
70
+ See [Running the Server](./server.md) for flags and [HTTP API](./http-api.md)
71
+ for the full endpoint reference.
@@ -1,14 +1,14 @@
1
1
  ---
2
- canonical: https://thekevinscott.github.io/dirsql/guide/init
2
+ canonical: https://thekevinscott.github.io/dirsql/cli/init
3
3
  ---
4
4
 
5
5
  # Generating a config with `dirsql init`
6
6
 
7
- > Online: <https://thekevinscott.github.io/dirsql/guide/init>
7
+ > Online: <https://thekevinscott.github.io/dirsql/cli/init>
8
8
 
9
- `dirsql init` generates a `.dirsql.toml` by running `claude` over the target directory.
9
+ `dirsql init` generates a [`.dirsql.toml`](./config.md) by running `claude` over the target directory.
10
10
 
11
- The output is limited to filesystem-fact tables. For content-aware schemas, see [Defining Tables](./tables.md).
11
+ The output is limited to filesystem-fact tables. For content-aware schemas, see [Defining Tables](../guide/tables.md).
12
12
 
13
13
  ## Examples
14
14
 
@@ -0,0 +1,41 @@
1
+ ---
2
+ canonical: https://thekevinscott.github.io/dirsql/cli/server
3
+ ---
4
+
5
+ # Running the Server
6
+
7
+ > Online: <https://thekevinscott.github.io/dirsql/cli/server>
8
+
9
+ The `dirsql` CLI is an HTTP server that exposes identical SDK functionality
10
+ over [`POST /query`](./http-api.md#post-query) and [`GET /events`](./http-api.md#get-events).
11
+
12
+ ## Subcommands
13
+
14
+ | Command | Purpose |
15
+ |---|---|
16
+ | `dirsql` (no subcommand) | Start the long-lived HTTP server (default behavior, see below). |
17
+ | `dirsql init` | Generate a starter `.dirsql.toml` from the contents of a directory. See [Generating a Config](./init.md). |
18
+
19
+ ## Running the server
20
+
21
+ Run `dirsql` from the directory containing your files:
22
+
23
+ ```bash
24
+ dirsql
25
+
26
+ $ Running at localhost:7117
27
+ ```
28
+
29
+ The server reads tables from a [`.dirsql.toml`](./config.md) config file. By
30
+ default it looks for `./.dirsql.toml`; override the path with `--config`.
31
+
32
+ ## Flags
33
+
34
+ | Flag | Default | Description |
35
+ |---|---|---|
36
+ | `--config <path>` | `./.dirsql.toml` | Path to the config file. The index is rooted at the directory containing this file. |
37
+ | `--host <addr>` | `localhost` | Bind address |
38
+ | `--port <n>` | `7117` | TCP port to bind |
39
+
40
+ Once the server is running, see the [HTTP API](./http-api.md) for the request
41
+ and response formats.
@@ -31,7 +31,7 @@ cargo install dirsql --features cli
31
31
 
32
32
  :::
33
33
 
34
- See the [CLI guide](./guide/cli.md) for details on the command-line interface, and the [Rust library README](https://github.com/thekevinscott/dirsql/tree/main/packages/rust) for the library-vs-CLI feature split.
34
+ See the [CLI section](./cli/) for details on the command-line interface, and the [Rust library README](https://github.com/thekevinscott/dirsql/tree/main/packages/rust) for the library-vs-CLI feature split.
35
35
 
36
36
  ## Quick start
37
37
 
@@ -182,5 +182,5 @@ The filesystem is always the source of truth. The database is rebuilt from files
182
182
  - [Querying](./guide/querying.md) -- SQL queries and return format
183
183
  - [File Watching](./guide/watching.md) -- real-time change events
184
184
  - [Async API](./guide/async.md) -- async ready(), query(), and watch()
185
- - [Command-Line Interface](./guide/cli.md) -- `dirsql` runs an HTTP server (`POST /query`, `GET /events` SSE)
185
+ - [Using `dirsql` from the CLI](./cli/) -- `dirsql` runs an HTTP server (`POST /query`, `GET /events` SSE)
186
186
  - [Collaboration with CRDTs](./guide/crdt.md) -- multi-writer document merging alongside `dirsql`
@@ -8,6 +8,10 @@ canonical: https://thekevinscott.github.io/dirsql/guide/querying
8
8
 
9
9
  Once a `DirSQL` instance is created, the initial directory scan is complete and you can run SQL queries against the indexed data.
10
10
 
11
+ ::: tip From the CLI
12
+ The `dirsql` HTTP server exposes the same query interface over [`POST /query`](../cli/http-api.md#post-query). Send `{"sql": "..."}` and get back the same JSON array of row objects. See the [CLI section](../cli/) for the full server setup.
13
+ :::
14
+
11
15
  ## Basic queries
12
16
 
13
17
  ::: code-group
@@ -8,6 +8,10 @@ canonical: https://thekevinscott.github.io/dirsql/guide/watching
8
8
 
9
9
  `dirsql` can monitor the filesystem for changes and emit events when rows are inserted, updated, or deleted. This is useful for building reactive applications that respond to file changes in real time.
10
10
 
11
+ ::: tip From the CLI
12
+ The `dirsql` HTTP server streams the same events over [`GET /events`](../cli/http-api.md#get-events) as a [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) stream. Each `data:` payload uses the same JSON schema described in [Event types](#event-types) below. See the [CLI section](../cli/) for the full server setup.
13
+ :::
14
+
11
15
  ## Starting a watch stream
12
16
 
13
17
  ::: code-group
@@ -0,0 +1,22 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import config from '../../.vitepress/config'
3
+
4
+ type SidebarItem = { text?: string; link?: string; items?: SidebarItem[] }
5
+
6
+ describe('vitepress config', () => {
7
+ it('has the expected site title and base path', () => {
8
+ expect(config.title).toBe('dirsql')
9
+ expect(config.base).toBe('/dirsql/')
10
+ })
11
+
12
+ // Regression guard: CLI docs live in their own `/cli/` section, not
13
+ // interleaved with the SDK how-to guides (see #179).
14
+ it('keeps CLI pages out of the How-to Guides group', () => {
15
+ const sidebar = config.themeConfig!.sidebar as Record<string, SidebarItem[]>
16
+ const howTo = sidebar['/'].find((group) => group.text === 'How-to Guides')
17
+ const links = (howTo!.items ?? []).map((item) => item.link)
18
+ expect(links).not.toContain('/guide/cli')
19
+ expect(links).not.toContain('/guide/init')
20
+ expect(links).not.toContain('/guide/config')
21
+ })
22
+ })
@@ -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.3.4"
7
+ version = "0.3.6"
8
8
  edition.workspace = true
9
9
  publish = false
10
10
  readme = "README.md"
@@ -16,7 +16,7 @@ Each wheel also bundles the `dirsql` HTTP-server CLI as a console script, so `pi
16
16
 
17
17
  ## Publishing (maintainers)
18
18
 
19
- Handled by `.github/workflows/publish.yml` (invoked from `minor-release.yml` / `patch-release.yml`). For each target triple the `build` job `cargo build`s the Rust CLI with `--features cli`, stages the binary into `python/dirsql/_binary/`, runs `maturin build` (which picks the binary up via the `[tool.maturin] include` rule in `pyproject.toml`), and the wheels + sdist are then trusted-published to PyPI.
19
+ Handled by `.github/workflows/publish.yml` (invoked from `minor-release.yml` / `patch-release.yml`). For each target triple the `build` job `cargo build`s the Rust CLI with `--features cli`, stages the binary into `dirsql/_binary/`, runs `maturin build` (which picks the binary up via the `[tool.maturin] include` rule in `pyproject.toml`), and the wheels + sdist are then trusted-published to PyPI.
20
20
 
21
21
  ## Quick Start
22
22
 
@@ -0,0 +1,83 @@
1
+ import { defineConfig } from 'vitepress'
2
+
3
+ export default defineConfig({
4
+ title: 'dirsql',
5
+ description: 'Ephemeral SQL index over a local directory. Watches a filesystem, ingests structured files into an in-memory SQLite database, and exposes a SQL query interface.',
6
+ base: '/dirsql/',
7
+
8
+ themeConfig: {
9
+ search: {
10
+ provider: 'local'
11
+ },
12
+
13
+ nav: [
14
+ { text: 'Getting Started', link: '/getting-started' },
15
+ { text: 'Guide', link: '/guide/tables' },
16
+ { text: 'CLI', link: '/cli/' },
17
+ { text: 'Reference', link: '/api/' },
18
+ { text: 'Migrations', link: '/migrations' },
19
+ { text: 'GitHub', link: 'https://github.com/thekevinscott/dirsql' }
20
+ ],
21
+
22
+ sidebar: {
23
+ '/cli/': [
24
+ {
25
+ text: 'CLI',
26
+ items: [
27
+ { text: 'Overview & Installation', link: '/cli/' },
28
+ { text: 'Running the Server', link: '/cli/server' },
29
+ { text: 'Generating a Config (`init`)', link: '/cli/init' },
30
+ { text: 'Configuration File', link: '/cli/config' },
31
+ { text: 'HTTP API', link: '/cli/http-api' }
32
+ ]
33
+ }
34
+ ],
35
+ '/': [
36
+ {
37
+ text: 'Tutorials',
38
+ items: [
39
+ { text: 'Getting Started', link: '/getting-started' }
40
+ ]
41
+ },
42
+ {
43
+ text: 'How-to Guides',
44
+ items: [
45
+ { text: 'Defining Tables', link: '/guide/tables' },
46
+ { text: 'Querying', link: '/guide/querying' },
47
+ { text: 'File Watching', link: '/guide/watching' },
48
+ { text: 'Persistence', link: '/guide/persistence' },
49
+ { text: 'Async API', link: '/guide/async' },
50
+ { text: 'Collaboration with CRDTs', link: '/guide/crdt' }
51
+ ]
52
+ },
53
+ {
54
+ text: 'CLI',
55
+ items: [
56
+ { text: 'Using `dirsql` from the CLI', link: '/cli/' }
57
+ ]
58
+ },
59
+ {
60
+ text: 'Reference',
61
+ items: [
62
+ { text: 'API Reference', link: '/api/' },
63
+ { text: 'Migrations', link: '/migrations' }
64
+ ]
65
+ }
66
+ ]
67
+ },
68
+
69
+ outline: {
70
+ level: [2, 3],
71
+ label: 'On this page'
72
+ },
73
+
74
+ socialLinks: [
75
+ { icon: 'github', link: 'https://github.com/thekevinscott/dirsql' }
76
+ ],
77
+
78
+ footer: {
79
+ message: 'Released under the MIT License.',
80
+ copyright: 'Copyright 2024-present'
81
+ }
82
+ }
83
+ })
@@ -42,6 +42,12 @@ The docs follow the [Diataxis](https://diataxis.fr/) framework:
42
42
  - **Reference** (`api/`) -- information-oriented, API details
43
43
  - **Explanation** (`architecture.md`) -- understanding-oriented, design decisions
44
44
 
45
+ The **CLI** (`cli/`) is a self-contained section reachable from its own
46
+ top-level `CLI` nav tab, with a path-scoped sidebar (`/cli/` key in
47
+ `config.ts`). Everything a CLI user needs -- installation, running the server,
48
+ `init`, the `.dirsql.toml` config file, and the HTTP API -- lives under
49
+ `cli/`. Do not move CLI pages back into `guide/`.
50
+
45
51
  ## Conventions
46
52
 
47
53
  - Wrap `dirsql` in backticks in all prose text
@@ -1,10 +1,10 @@
1
1
  ---
2
- canonical: https://thekevinscott.github.io/dirsql/guide/config
2
+ canonical: https://thekevinscott.github.io/dirsql/cli/config
3
3
  ---
4
4
 
5
5
  # Configuration File
6
6
 
7
- > Online: <https://thekevinscott.github.io/dirsql/guide/config>
7
+ > Online: <https://thekevinscott.github.io/dirsql/cli/config>
8
8
 
9
9
  `dirsql` can be configured with a `.dirsql.toml` file. Tables defined this
10
10
  way produce **one row per matched file**. Each row's columns come from
@@ -16,7 +16,7 @@ filesystem facts:
16
16
 
17
17
  Content interpretation (parsing JSON, CSV, frontmatter, etc.) is **not**
18
18
  configured in `.dirsql.toml`. If you need columns derived from file
19
- contents, register a programmatic [`Table`](./tables.md) whose `extract`
19
+ contents, register a programmatic [`Table`](../guide/tables.md) whose `extract`
20
20
  function does the parsing in your host language.
21
21
 
22
22
  ## Basic Example
@@ -131,7 +131,7 @@ ignore = ["node_modules/**", ".git/**", "*.pyc", "__pycache__/**"]
131
131
 
132
132
  The top-level `.dirsql/` directory is always excluded, whether you list it
133
133
  or not — it is a reserved namespace for `dirsql`'s own metadata (see
134
- [Persistence](./persistence.md)).
134
+ [Persistence](../guide/persistence.md)).
135
135
 
136
136
  ## Persistence
137
137
 
@@ -144,7 +144,7 @@ persist = true
144
144
  # persist_path = ".dirsql/cache.db" # optional; this is the default
145
145
  ```
146
146
 
147
- See [Persistence](./persistence.md) for the full reconcile algorithm,
147
+ See [Persistence](../guide/persistence.md) for the full reconcile algorithm,
148
148
  storage layout, and limitations.
149
149
 
150
150
  ## Strict Mode
@@ -163,7 +163,7 @@ strict = true
163
163
  Strict mode does **not** apply to auto-injected stat virtuals — those are
164
164
  always filtered to the DDL's declared columns regardless. Strict mode
165
165
  applies only to keys produced by an extract callback (relevant for
166
- programmatic [tables](./tables.md)).
166
+ programmatic [tables](../guide/tables.md)).
167
167
 
168
168
  ## Full Example
169
169
 
@@ -188,6 +188,6 @@ glob = "logs/*.csv"
188
188
 
189
189
  `.dirsql.toml` does not parse file contents. For columns derived from the
190
190
  *inside* of files (frontmatter keys, JSON values, CSV cells, etc.),
191
- register a programmatic [`Table`](./tables.md) instead, and parse the
191
+ register a programmatic [`Table`](../guide/tables.md) instead, and parse the
192
192
  bytes in your host language. Glob captures and stat virtuals are still
193
193
  auto-injected into rows produced by your extract.