sqlrite 0.10.0__tar.gz → 0.10.2__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 (297) hide show
  1. {sqlrite-0.10.0 → sqlrite-0.10.2}/.github/workflows/ci.yml +87 -1
  2. sqlrite-0.10.2/.github/workflows/journal-release.yml +103 -0
  3. {sqlrite-0.10.0 → sqlrite-0.10.2}/.github/workflows/release-pr.yml +9 -7
  4. {sqlrite-0.10.0 → sqlrite-0.10.2}/.github/workflows/release.yml +130 -1
  5. {sqlrite-0.10.0 → sqlrite-0.10.2}/.gitignore +9 -0
  6. sqlrite-0.10.2/AGENTS.md +102 -0
  7. {sqlrite-0.10.0 → sqlrite-0.10.2}/Cargo.lock +20 -7
  8. {sqlrite-0.10.0 → sqlrite-0.10.2}/Cargo.toml +2 -2
  9. {sqlrite-0.10.0 → sqlrite-0.10.2}/PKG-INFO +1 -1
  10. {sqlrite-0.10.0 → sqlrite-0.10.2}/README.md +10 -0
  11. sqlrite-0.10.2/desktop/README.md +52 -0
  12. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/package-lock.json +2 -2
  13. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/package.json +1 -1
  14. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/src/App.svelte +19 -0
  15. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/src/app.css +9 -0
  16. sqlrite-0.10.2/desktop/src/lib/SettingsPanel.svelte +327 -0
  17. sqlrite-0.10.2/desktop/src/lib/api.ts +45 -0
  18. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/release-plan.md +74 -4
  19. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/release-secrets.md +58 -9
  20. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/sql-engine.md +1 -1
  21. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/README.md +30 -0
  22. sqlrite-0.10.2/examples/desktop-journal/.gitignore +9 -0
  23. sqlrite-0.10.2/examples/desktop-journal/README.md +231 -0
  24. sqlrite-0.10.2/examples/desktop-journal/demo/.gitignore +9 -0
  25. sqlrite-0.10.2/examples/desktop-journal/demo/README.md +57 -0
  26. sqlrite-0.10.2/examples/desktop-journal/demo/package-lock.json +2943 -0
  27. sqlrite-0.10.2/examples/desktop-journal/demo/package.json +26 -0
  28. sqlrite-0.10.2/examples/desktop-journal/demo/remotion.config.ts +9 -0
  29. sqlrite-0.10.2/examples/desktop-journal/demo/src/Caption.tsx +62 -0
  30. sqlrite-0.10.2/examples/desktop-journal/demo/src/Demo.tsx +120 -0
  31. sqlrite-0.10.2/examples/desktop-journal/demo/src/Pan.tsx +74 -0
  32. sqlrite-0.10.2/examples/desktop-journal/demo/src/Root.tsx +21 -0
  33. sqlrite-0.10.2/examples/desktop-journal/demo/src/index.ts +7 -0
  34. sqlrite-0.10.2/examples/desktop-journal/demo/tsconfig.json +15 -0
  35. sqlrite-0.10.2/examples/desktop-journal/docs/demo.gif +0 -0
  36. sqlrite-0.10.2/examples/desktop-journal/docs/demo.mp4 +0 -0
  37. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/01-empty.png +0 -0
  38. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/02-new-entry.png +0 -0
  39. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/03-markdown-preview.png +0 -0
  40. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/04-list-and-tags.png +0 -0
  41. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/05-fts-highlight.png +0 -0
  42. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/06-settings.png +0 -0
  43. sqlrite-0.10.2/examples/desktop-journal/docs/screenshots/07-ask-panel.png +0 -0
  44. sqlrite-0.10.2/examples/desktop-journal/index.html +12 -0
  45. sqlrite-0.10.2/examples/desktop-journal/package-lock.json +2298 -0
  46. sqlrite-0.10.2/examples/desktop-journal/package.json +30 -0
  47. sqlrite-0.10.2/examples/desktop-journal/src/App.svelte +317 -0
  48. sqlrite-0.10.2/examples/desktop-journal/src/app.css +123 -0
  49. sqlrite-0.10.2/examples/desktop-journal/src/lib/AskPanel.svelte +137 -0
  50. sqlrite-0.10.2/examples/desktop-journal/src/lib/EntryEditor.svelte +172 -0
  51. sqlrite-0.10.2/examples/desktop-journal/src/lib/EntryList.svelte +66 -0
  52. sqlrite-0.10.2/examples/desktop-journal/src/lib/SettingsPanel.svelte +171 -0
  53. sqlrite-0.10.2/examples/desktop-journal/src/lib/api.ts +134 -0
  54. sqlrite-0.10.2/examples/desktop-journal/src/main.ts +11 -0
  55. sqlrite-0.10.2/examples/desktop-journal/src/vite-env.d.ts +2 -0
  56. sqlrite-0.10.2/examples/desktop-journal/svelte.config.js +5 -0
  57. sqlrite-0.10.2/examples/desktop-journal/tsconfig.json +17 -0
  58. sqlrite-0.10.2/examples/desktop-journal/vite.config.ts +30 -0
  59. sqlrite-0.10.2/examples/nodejs-notes/.gitignore +6 -0
  60. sqlrite-0.10.2/examples/nodejs-notes/README.md +340 -0
  61. sqlrite-0.10.2/examples/nodejs-notes/bin/sqlrite-notes.mjs +15 -0
  62. sqlrite-0.10.2/examples/nodejs-notes/package-lock.json +31 -0
  63. sqlrite-0.10.2/examples/nodejs-notes/package.json +46 -0
  64. sqlrite-0.10.2/examples/nodejs-notes/src/chunker.mjs +191 -0
  65. sqlrite-0.10.2/examples/nodejs-notes/src/claude-config.mjs +65 -0
  66. sqlrite-0.10.2/examples/nodejs-notes/src/cli.mjs +357 -0
  67. sqlrite-0.10.2/examples/nodejs-notes/src/config.mjs +71 -0
  68. sqlrite-0.10.2/examples/nodejs-notes/src/db.mjs +400 -0
  69. sqlrite-0.10.2/examples/nodejs-notes/src/embeddings.mjs +152 -0
  70. sqlrite-0.10.2/examples/nodejs-notes/src/ingest.mjs +235 -0
  71. sqlrite-0.10.2/examples/nodejs-notes/src/search.mjs +51 -0
  72. sqlrite-0.10.2/examples/nodejs-notes/src/serve.mjs +113 -0
  73. sqlrite-0.10.2/examples/nodejs-notes/src/sqlutil.mjs +63 -0
  74. sqlrite-0.10.2/examples/nodejs-notes/test/chunker.test.mjs +85 -0
  75. sqlrite-0.10.2/examples/nodejs-notes/test/claude-config.test.mjs +36 -0
  76. sqlrite-0.10.2/examples/nodejs-notes/test/db.test.mjs +272 -0
  77. sqlrite-0.10.2/examples/nodejs-notes/test/embeddings.test.mjs +104 -0
  78. sqlrite-0.10.2/examples/nodejs-notes/test/fixtures/crdts.md +23 -0
  79. sqlrite-0.10.2/examples/nodejs-notes/test/fixtures/postgres.md +18 -0
  80. sqlrite-0.10.2/examples/nodejs-notes/test/fixtures/running.md +8 -0
  81. sqlrite-0.10.2/examples/nodejs-notes/test/ingest.test.mjs +131 -0
  82. sqlrite-0.10.2/examples/nodejs-notes/test/serve.test.mjs +38 -0
  83. sqlrite-0.10.2/examples/nodejs-notes/test/sqlutil.test.mjs +47 -0
  84. sqlrite-0.10.2/examples/python-agent/.gitignore +12 -0
  85. sqlrite-0.10.2/examples/python-agent/README.md +275 -0
  86. sqlrite-0.10.2/examples/python-agent/pyproject.toml +55 -0
  87. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/__init__.py +4 -0
  88. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/__main__.py +4 -0
  89. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/agent.py +163 -0
  90. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/chat.py +113 -0
  91. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/cli.py +194 -0
  92. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/db.py +349 -0
  93. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/embeddings.py +141 -0
  94. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/facts.py +137 -0
  95. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/memory.py +216 -0
  96. sqlrite-0.10.2/examples/python-agent/sqlrite_agent/sqlutil.py +39 -0
  97. sqlrite-0.10.2/examples/python-agent/tests/conftest.py +38 -0
  98. sqlrite-0.10.2/examples/python-agent/tests/test_agent.py +100 -0
  99. sqlrite-0.10.2/examples/python-agent/tests/test_db.py +172 -0
  100. sqlrite-0.10.2/examples/python-agent/tests/test_facts.py +57 -0
  101. sqlrite-0.10.2/examples/python-agent/tests/test_memory.py +85 -0
  102. sqlrite-0.10.2/examples/python-agent/tests/test_sqlutil.py +28 -0
  103. {sqlrite-0.10.0 → sqlrite-0.10.2}/pyproject.toml +1 -1
  104. {sqlrite-0.10.0 → sqlrite-0.10.2}/scripts/bump-version.sh +55 -6
  105. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/python/Cargo.toml +1 -1
  106. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/Cargo.toml +1 -1
  107. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/db/table.rs +48 -3
  108. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/executor.rs +10 -7
  109. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/hnsw.rs +96 -45
  110. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/mod.rs +55 -0
  111. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/mod.rs +4 -48
  112. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/README.md +50 -1
  113. sqlrite-0.10.2/web/content/blog/shipping-concurrent-writes-mvcc-v010.mdx +395 -0
  114. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/package-lock.json +500 -2
  115. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/package.json +1 -0
  116. sqlrite-0.10.2/web/seo/keywords.md +161 -0
  117. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/docs/page.tsx +23 -8
  118. sqlrite-0.10.2/web/src/app/examples/page.tsx +335 -0
  119. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/layout.tsx +29 -11
  120. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/page.tsx +5 -2
  121. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/sitemap.ts +1 -0
  122. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/benchmarks.tsx +7 -6
  123. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/features.tsx +15 -8
  124. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/hero.tsx +8 -8
  125. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/nav.tsx +8 -0
  126. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/roadmap.tsx +23 -6
  127. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/lib/site.ts +1 -1
  128. sqlrite-0.10.2/web/src/middleware.ts +31 -0
  129. {sqlrite-0.10.0 → sqlrite-0.10.2}/.github/workflows/rust.yml +0 -0
  130. {sqlrite-0.10.0 → sqlrite-0.10.2}/CLAUDE.md +0 -0
  131. {sqlrite-0.10.0 → sqlrite-0.10.2}/CODE_OF_CONDUCT.md +0 -0
  132. {sqlrite-0.10.0 → sqlrite-0.10.2}/LICENSE +0 -0
  133. {sqlrite-0.10.0 → sqlrite-0.10.2}/MAINTAINERS +0 -0
  134. {sqlrite-0.10.0 → sqlrite-0.10.2}/Makefile +0 -0
  135. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/index.html +0 -0
  136. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/src/main.ts +0 -0
  137. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/src/vite-env.d.ts +0 -0
  138. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/svelte.config.js +0 -0
  139. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/tsconfig.json +0 -0
  140. {sqlrite-0.10.0 → sqlrite-0.10.2}/desktop/vite.config.ts +0 -0
  141. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/_index.md +0 -0
  142. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/architecture.md +0 -0
  143. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/ask-backend-examples.md +0 -0
  144. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/ask.md +0 -0
  145. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/benchmarks-plan.md +0 -0
  146. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/benchmarks.md +0 -0
  147. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/concurrent-writes-plan.md +0 -0
  148. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/concurrent-writes.md +0 -0
  149. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/design-decisions.md +0 -0
  150. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/desktop.md +0 -0
  151. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/embedding.md +0 -0
  152. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/file-format.md +0 -0
  153. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/fts.md +0 -0
  154. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/getting-started.md +0 -0
  155. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/mcp.md +0 -0
  156. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/pager.md +0 -0
  157. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/phase-7-plan.md +0 -0
  158. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/phase-8-plan.md +0 -0
  159. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/roadmap.md +0 -0
  160. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/smoke-test.md +0 -0
  161. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/storage-model.md +0 -0
  162. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/supported-sql.md +0 -0
  163. {sqlrite-0.10.0 → sqlrite-0.10.2}/docs/usage.md +0 -0
  164. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/c/Makefile +0 -0
  165. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/c/hello.c +0 -0
  166. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/go/go.mod +0 -0
  167. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/go/hello.go +0 -0
  168. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/hybrid-retrieval/README.md +0 -0
  169. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/hybrid-retrieval/hybrid_retrieval.rs +0 -0
  170. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/nodejs/hello.mjs +0 -0
  171. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/python/hello.py +0 -0
  172. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/rust/concurrent_writers.rs +0 -0
  173. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/rust/quickstart.rs +0 -0
  174. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/wasm/Makefile +0 -0
  175. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/wasm/index.html +0 -0
  176. {sqlrite-0.10.0 → sqlrite-0.10.2}/examples/wasm/server.mjs +0 -0
  177. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/SQLRite - Desktop.png +0 -0
  178. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/SQLRite Data Structures.png +0 -0
  179. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/SQLRite Simple SQL Execution High Level Diagram.png +0 -0
  180. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/SQLRite Simple SQL INSERT Execution High Level Diagram (Insert Row).png +0 -0
  181. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/SQLRite Simple SQL INSERT Execution High Level Diagram.png +0 -0
  182. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/SQLRite_logo.png +0 -0
  183. {sqlrite-0.10.0 → sqlrite-0.10.2}/images/architecture.png +0 -0
  184. {sqlrite-0.10.0 → sqlrite-0.10.2}/rust-toolchain.toml +0 -0
  185. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/AST.delete.example +0 -0
  186. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/AST.insert.exemple +0 -0
  187. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/AST.select.example +0 -0
  188. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/AST.update.example +0 -0
  189. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/CREATE TABLE sqlrite_schema.sql +0 -0
  190. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/CREATE_TABLE with duplicate.sql +0 -0
  191. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/CREATE_TABLE.sql +0 -0
  192. {sqlrite-0.10.0 → sqlrite-0.10.2}/samples/INSERT.sql +0 -0
  193. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/README.md +0 -0
  194. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/ask.go +0 -0
  195. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/ask_test.go +0 -0
  196. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/conn.go +0 -0
  197. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/go.mod +0 -0
  198. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/rows.go +0 -0
  199. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/sqlrite.go +0 -0
  200. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/sqlrite_test.go +0 -0
  201. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/go/stmt.go +0 -0
  202. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/python/README.md +0 -0
  203. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/python/src/lib.rs +0 -0
  204. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/python/tests/test_ask.py +0 -0
  205. {sqlrite-0.10.0 → sqlrite-0.10.2}/sdk/python/tests/test_sqlrite.py +0 -0
  206. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/README.md +0 -0
  207. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/src/lib.rs +0 -0
  208. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/src/prompt.rs +0 -0
  209. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/src/provider/anthropic.rs +0 -0
  210. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/src/provider/mock.rs +0 -0
  211. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/src/provider/mod.rs +0 -0
  212. {sqlrite-0.10.0 → sqlrite-0.10.2}/sqlrite-ask/tests/anthropic_http.rs +0 -0
  213. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/ask/mod.rs +0 -0
  214. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/ask/schema.rs +0 -0
  215. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/connection.rs +0 -0
  216. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/error.rs +0 -0
  217. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/lib.rs +0 -0
  218. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/main.rs +0 -0
  219. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/meta_command/mod.rs +0 -0
  220. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/mvcc/clock.rs +0 -0
  221. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/mvcc/log.rs +0 -0
  222. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/mvcc/mod.rs +0 -0
  223. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/mvcc/registry.rs +0 -0
  224. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/mvcc/store.rs +0 -0
  225. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/mvcc/transaction.rs +0 -0
  226. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/repl/mod.rs +0 -0
  227. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/agg.rs +0 -0
  228. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/db/database.rs +0 -0
  229. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/db/mod.rs +0 -0
  230. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/db/secondary_index.rs +0 -0
  231. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/dialect.rs +0 -0
  232. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/fts/bm25.rs +0 -0
  233. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/fts/mod.rs +0 -0
  234. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/fts/posting_list.rs +0 -0
  235. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/fts/tokenizer.rs +0 -0
  236. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/allocator.rs +0 -0
  237. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/cell.rs +0 -0
  238. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/file.rs +0 -0
  239. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/freelist.rs +0 -0
  240. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/fts_cell.rs +0 -0
  241. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/header.rs +0 -0
  242. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/hnsw_cell.rs +0 -0
  243. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/index_cell.rs +0 -0
  244. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/interior_page.rs +0 -0
  245. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/overflow.rs +0 -0
  246. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/page.rs +0 -0
  247. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/pager.rs +0 -0
  248. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/table_page.rs +0 -0
  249. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/varint.rs +0 -0
  250. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pager/wal.rs +0 -0
  251. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/params.rs +0 -0
  252. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/parser/create.rs +0 -0
  253. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/parser/insert.rs +0 -0
  254. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/parser/mod.rs +0 -0
  255. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/parser/select.rs +0 -0
  256. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/pragma.rs +0 -0
  257. {sqlrite-0.10.0 → sqlrite-0.10.2}/src/sql/tokenizer.rs +0 -0
  258. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/.gitignore +0 -0
  259. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/components.json +0 -0
  260. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/content/blog/adding-vector-search-with-hnsw.mdx +0 -0
  261. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/content/blog/how-sqlrite-stores-rows-on-disk.mdx +0 -0
  262. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/content/blog/shipping-sqlrite-tauri-mcp-sdks.mdx +0 -0
  263. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/content/blog/sqlrite-vs-sqlite-benchmarks.mdx +0 -0
  264. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/content/blog/why-im-building-sqlrite.mdx +0 -0
  265. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/eslint.config.mjs +0 -0
  266. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/next.config.ts +0 -0
  267. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/postcss.config.mjs +0 -0
  268. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/blog/[slug]/opengraph-image.tsx +0 -0
  269. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/blog/[slug]/page.tsx +0 -0
  270. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/blog/[slug]/twitter-image.tsx +0 -0
  271. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/blog/page.tsx +0 -0
  272. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/blog/rss.xml/route.ts +0 -0
  273. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/blog/tags/[tag]/page.tsx +0 -0
  274. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/docs/opengraph-image.tsx +0 -0
  275. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/docs/twitter-image.tsx +0 -0
  276. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/globals.css +0 -0
  277. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/opengraph-image.tsx +0 -0
  278. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/robots.ts +0 -0
  279. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/app/twitter-image.tsx +0 -0
  280. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/architecture.tsx +0 -0
  281. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/blog-mdx.tsx +0 -0
  282. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/blog.tsx +0 -0
  283. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/cta-strip.tsx +0 -0
  284. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/desktop.tsx +0 -0
  285. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/footer.tsx +0 -0
  286. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/icons.tsx +0 -0
  287. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/install-bar.tsx +0 -0
  288. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/sdk-showcase-client.tsx +0 -0
  289. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/sdk-showcase.tsx +0 -0
  290. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/sql-ref.tsx +0 -0
  291. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/components/terminal.tsx +0 -0
  292. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/lib/benchmarks.ts +0 -0
  293. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/lib/blog.ts +0 -0
  294. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/lib/highlight.ts +0 -0
  295. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/lib/og.tsx +0 -0
  296. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/src/lib/utils.ts +0 -0
  297. {sqlrite-0.10.0 → sqlrite-0.10.2}/web/tsconfig.json +0 -0
@@ -10,6 +10,7 @@
10
10
  # - go-sdk {ubuntu, macos} cgo against libsqlrite_c + go test
11
11
  # - wasm-build ubuntu wasm-pack build + size report
12
12
  # - desktop-build ubuntu npm ci + cargo build -p sqlrite-desktop
13
+ # - journal-build ubuntu npm ci + cargo build -p sqlrite-journal (SQLR-41 example)
13
14
  #
14
15
  # All jobs use caching so a warm PR run takes 2–3 minutes on ubuntu.
15
16
  # Go CI skips Windows for Phase 6b — Go's cgo on Windows needs a mingw
@@ -102,6 +103,7 @@ jobs:
102
103
  run: |
103
104
  cargo build --workspace \
104
105
  --exclude sqlrite-desktop \
106
+ --exclude sqlrite-journal \
105
107
  --exclude sqlrite-python \
106
108
  --exclude sqlrite-nodejs \
107
109
  --exclude sqlrite-benchmarks \
@@ -111,6 +113,7 @@ jobs:
111
113
  run: |
112
114
  cargo test --workspace \
113
115
  --exclude sqlrite-desktop \
116
+ --exclude sqlrite-journal \
114
117
  --exclude sqlrite-python \
115
118
  --exclude sqlrite-nodejs \
116
119
  --exclude sqlrite-benchmarks
@@ -147,6 +150,7 @@ jobs:
147
150
  run: |
148
151
  cargo clippy --workspace \
149
152
  --exclude sqlrite-desktop \
153
+ --exclude sqlrite-journal \
150
154
  --exclude sqlrite-python \
151
155
  --exclude sqlrite-nodejs \
152
156
  --exclude sqlrite-benchmarks \
@@ -158,6 +162,7 @@ jobs:
158
162
  run: |
159
163
  cargo doc --workspace \
160
164
  --exclude sqlrite-desktop \
165
+ --exclude sqlrite-journal \
161
166
  --exclude sqlrite-python \
162
167
  --exclude sqlrite-nodejs \
163
168
  --exclude sqlrite-benchmarks \
@@ -299,6 +304,15 @@ jobs:
299
304
  wasm-build:
300
305
  name: wasm-build
301
306
  runs-on: ubuntu-latest
307
+ # Pinned binaryen version — see docs/release-plan.md
308
+ # ("Pinned binaryen / wasm-opt") for the bump procedure. Older
309
+ # binaryen rejects rustc's multi-table WASM output with
310
+ # "Only 1 table definition allowed in MVP", which the runner
311
+ # image's cache state used to surface non-deterministically
312
+ # (SQLR-58). Pinning keeps wasm-opt out of "whatever's cached"
313
+ # territory.
314
+ env:
315
+ BINARYEN_VERSION: version_122
302
316
  steps:
303
317
  - uses: actions/checkout@v4
304
318
 
@@ -313,12 +327,29 @@ jobs:
313
327
  workspaces: sdk/wasm
314
328
  shared-key: wasm-build
315
329
 
330
+ - name: Install pinned binaryen (wasm-opt)
331
+ # MUST run before wasm-pack: wasm-pack picks up wasm-opt from
332
+ # PATH if present, otherwise downloads whatever binaryen its
333
+ # own internal cache happens to have. Pinning + prepending
334
+ # to PATH forces a deterministic version across runner images.
335
+ run: |
336
+ set -euo pipefail
337
+ curl -fsSL "https://github.com/WebAssembly/binaryen/releases/download/${BINARYEN_VERSION}/binaryen-${BINARYEN_VERSION}-x86_64-linux.tar.gz" \
338
+ -o "$RUNNER_TEMP/binaryen.tar.gz"
339
+ tar -xzf "$RUNNER_TEMP/binaryen.tar.gz" -C "$RUNNER_TEMP"
340
+ echo "$RUNNER_TEMP/binaryen-${BINARYEN_VERSION}/bin" >> "$GITHUB_PATH"
341
+ "$RUNNER_TEMP/binaryen-${BINARYEN_VERSION}/bin/wasm-opt" --version
342
+
316
343
  - name: Install wasm-pack
317
344
  uses: jetli/wasm-pack-action@v0.4.0
318
345
 
319
346
  - name: wasm-pack build --target web --release
320
347
  working-directory: sdk/wasm
321
- run: wasm-pack build --target web --release
348
+ run: |
349
+ # Sanity-check that the pinned wasm-opt is what wasm-pack sees.
350
+ which wasm-opt
351
+ wasm-opt --version
352
+ wasm-pack build --target web --release
322
353
 
323
354
  - name: Report .wasm size
324
355
  # Surfaces size regressions in PR logs. Not a hard limit yet;
@@ -374,3 +405,58 @@ jobs:
374
405
 
375
406
  - name: Build Rust side
376
407
  run: cargo build -p sqlrite-desktop
408
+
409
+ # ---------------------------------------------------------------------------
410
+ # Journal example (SQLR-41): Tauri 2 + Svelte 5 daily-notes app under
411
+ # `examples/desktop-journal/`. Same shape as `desktop-build` — frontend
412
+ # first, then `cargo build -p sqlrite-journal`. Excluded from the
413
+ # default workspace commands for the same reasons (Svelte build is a
414
+ # prerequisite that the main rust-build-and-test job can't satisfy).
415
+ journal-build:
416
+ name: journal-build
417
+ runs-on: ubuntu-latest
418
+ steps:
419
+ - uses: actions/checkout@v4
420
+
421
+ - uses: actions/setup-node@v4
422
+ with:
423
+ node-version: '20'
424
+ cache: 'npm'
425
+ cache-dependency-path: examples/desktop-journal/package-lock.json
426
+
427
+ - uses: dtolnay/rust-toolchain@stable
428
+
429
+ - name: Install Tauri Linux deps
430
+ run: |
431
+ sudo apt-get update
432
+ sudo apt-get install -y \
433
+ libwebkit2gtk-4.1-dev \
434
+ libayatana-appindicator3-dev \
435
+ librsvg2-dev \
436
+ patchelf
437
+
438
+ - uses: Swatinem/rust-cache@v2
439
+ with:
440
+ shared-key: journal-build
441
+
442
+ - name: npm install
443
+ working-directory: examples/desktop-journal
444
+ # `npm ci` would be ideal, but the example doesn't ship a
445
+ # lockfile in version control (it's listed in .gitignore so
446
+ # downstream forkers don't have to fight a node-version-pinned
447
+ # lockfile). `npm install` is acceptable for an example app;
448
+ # the engine API surface is what we're really exercising.
449
+ run: npm install
450
+
451
+ - name: Build frontend
452
+ working-directory: examples/desktop-journal
453
+ run: npm run build
454
+
455
+ - name: Build Rust side (with ask)
456
+ run: cargo build -p sqlrite-journal --all-targets
457
+
458
+ - name: Build Rust side (no ask)
459
+ run: cargo build -p sqlrite-journal --no-default-features --all-targets
460
+
461
+ - name: Run journal unit tests
462
+ run: cargo test -p sqlrite-journal
@@ -0,0 +1,103 @@
1
+ # SQLRite Journal — installer build workflow (SQLR-41).
2
+ #
3
+ # Produces packaged installers for the example desktop journal app:
4
+ # - macOS: .dmg + .app bundle
5
+ # - Linux: .deb + .AppImage
6
+ # - Windows: .msi (best-effort; flag in README if it lights up red)
7
+ #
8
+ # Manual trigger by default — installers are heavy (~30–40 min total
9
+ # wall clock across the matrix), and the example app changes much less
10
+ # often than the engine. Tagged pushes matching `journal-v*` also fire.
11
+ # Artifacts are attached to a draft GitHub release rather than the
12
+ # engine's own release stream so engine releases don't accidentally
13
+ # ship a journal binary baseline that's lagging behind.
14
+
15
+ name: Journal example — installers
16
+
17
+ on:
18
+ workflow_dispatch:
19
+ push:
20
+ tags:
21
+ - 'journal-v*'
22
+
23
+ permissions:
24
+ contents: write # tauri-action needs this to upload to the draft release
25
+
26
+ jobs:
27
+ build:
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ include:
32
+ - os: macos-latest
33
+ label: macos-arm64
34
+ target: aarch64-apple-darwin
35
+ - os: macos-13
36
+ label: macos-x86_64
37
+ target: x86_64-apple-darwin
38
+ - os: ubuntu-latest
39
+ label: linux-x86_64
40
+ target: x86_64-unknown-linux-gnu
41
+ - os: windows-latest
42
+ label: windows-x86_64
43
+ target: x86_64-pc-windows-msvc
44
+
45
+ name: build (${{ matrix.label }})
46
+ runs-on: ${{ matrix.os }}
47
+
48
+ steps:
49
+ - uses: actions/checkout@v4
50
+
51
+ - uses: actions/setup-node@v4
52
+ with:
53
+ node-version: '20'
54
+
55
+ - uses: dtolnay/rust-toolchain@stable
56
+ with:
57
+ targets: ${{ matrix.target }}
58
+
59
+ - name: Install Tauri Linux deps
60
+ if: matrix.os == 'ubuntu-latest'
61
+ run: |
62
+ sudo apt-get update
63
+ sudo apt-get install -y \
64
+ libwebkit2gtk-4.1-dev \
65
+ libayatana-appindicator3-dev \
66
+ librsvg2-dev \
67
+ patchelf \
68
+ libsoup-3.0-dev \
69
+ libjavascriptcoregtk-4.1-dev
70
+
71
+ - uses: Swatinem/rust-cache@v2
72
+ with:
73
+ workspaces: ./examples/desktop-journal/src-tauri
74
+ shared-key: journal-release-${{ matrix.label }}
75
+
76
+ - name: npm install
77
+ working-directory: examples/desktop-journal
78
+ run: npm install
79
+
80
+ # tauri-action does the magic: builds frontend, runs `cargo tauri
81
+ # build`, and uploads the resulting installers to a draft release
82
+ # tagged with `tagName`. We deliberately don't auto-publish — a
83
+ # human reviews the draft and clicks publish.
84
+ - uses: tauri-apps/tauri-action@v0
85
+ env:
86
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
87
+ with:
88
+ projectPath: examples/desktop-journal
89
+ tagName: ${{ startsWith(github.ref, 'refs/tags/journal-v') && github.ref_name || format('journal-v{0}', github.run_number) }}
90
+ releaseName: 'SQLRite Journal ${{ startsWith(github.ref, ''refs/tags/journal-v'') && github.ref_name || format(''build-{0}'', github.run_number) }}'
91
+ releaseBody: |
92
+ Installer artifacts for the SQLRite Journal example app
93
+ (SQLR-41). Built against the engine version pinned in
94
+ `examples/desktop-journal/src-tauri/Cargo.toml`.
95
+
96
+ * macOS: `.dmg` (Apple Silicon + Intel)
97
+ * Linux: `.deb` + `.AppImage`
98
+ * Windows: `.msi`
99
+
100
+ Source: <https://github.com/joaoh82/rust_sqlite/tree/main/examples/desktop-journal>
101
+ releaseDraft: true
102
+ prerelease: false
103
+ args: --target ${{ matrix.target }}
@@ -86,13 +86,15 @@ jobs:
86
86
 
87
87
  - name: Refresh Cargo.lock
88
88
  # `cargo build` updates Cargo.lock with the new workspace
89
- # member versions. `--exclude sqlrite-desktop` because the
90
- # desktop crate needs the Svelte frontend compiled first
91
- # (Tauri's build.rs looks for `desktop/dist/`) — we're not
92
- # building a release artifact here, just refreshing the lock.
93
- # `--quiet` keeps the log tidy; a real compile failure still
94
- # surfaces.
95
- run: cargo build --workspace --exclude sqlrite-desktop --quiet
89
+ # member versions. We exclude the two Tauri crates
90
+ # (`sqlrite-desktop`, `sqlrite-journal`): both need their Svelte
91
+ # frontend compiled first (Tauri's build.rs looks for a `dist/`)
92
+ # and pull in the GTK/glib system stack that this runner doesn't
93
+ # install we're not building a release artifact here, just
94
+ # refreshing the lock. Keep this exclude list in sync with the
95
+ # cargo steps in ci.yml. `--quiet` keeps the log tidy; a real
96
+ # compile failure still surfaces.
97
+ run: cargo build --workspace --exclude sqlrite-desktop --exclude sqlrite-journal --quiet
96
98
 
97
99
  - name: Configure git identity
98
100
  # Use the github-actions[bot] identity so the commit shows
@@ -131,6 +131,7 @@ jobs:
131
131
  "sqlrite-desktop-v$V"
132
132
  "sqlrite-py-v$V"
133
133
  "sqlrite-node-v$V"
134
+ "sqlrite-notes-v$V"
134
135
  "sqlrite-wasm-v$V"
135
136
  "sdk/go/v$V"
136
137
  "v$V"
@@ -1154,6 +1155,108 @@ jobs:
1154
1155
  See the umbrella release [v${{ needs.detect.outputs.version }}](../../releases/tag/v${{ needs.detect.outputs.version }}) for the full changelog.
1155
1156
  generate_release_notes: true
1156
1157
 
1158
+ # ---------------------------------------------------------------------------
1159
+ # Step 3g': publish the `sqlrite-notes` example as a pure-JS npm
1160
+ # package so users can `npx sqlrite-notes init <dir>` on a fresh
1161
+ # machine without cloning the repo. (SQLR-64, follow-up from SQLR-40.)
1162
+ #
1163
+ # The package itself ships no binaries — it's a thin CLI on top of
1164
+ # the `@joaoh82/sqlrite` N-API package (which carries the prebuilt
1165
+ # `.node` binaries via the platform-dispatch shim) and spawns
1166
+ # `sqlrite-mcp` as a subprocess for the read side. The Node bits
1167
+ # are platform-agnostic JS modules, so this job is a single ubuntu
1168
+ # cell instead of the publish-nodejs build matrix.
1169
+ #
1170
+ # `needs: publish-nodejs` is load-bearing: the example's
1171
+ # `@joaoh82/sqlrite` dep pin resolves against the version that
1172
+ # publish-nodejs just put on npm. Without that ordering, `npx
1173
+ # sqlrite-notes@<new>` would resolve a slightly-stale engine on
1174
+ # the first install after release (caret pin floats up *eventually*
1175
+ # but the npm cache will have served the old one for minutes).
1176
+ #
1177
+ # Package name: **unscoped `sqlrite-notes`** (per ticket). The
1178
+ # similarity rejection that hit `sqlrite` (vs `sqlite`) doesn't
1179
+ # apply here — `notes` isn't a confusable suffix. If the registry
1180
+ # ever rejects this on a future bootstrap, fall back to
1181
+ # `@joaoh82/sqlrite-notes` and update both `package.json` and
1182
+ # `docs/release-secrets.md`'s trusted-publisher section.
1183
+ #
1184
+ # OIDC trusted-publisher setup mirrors publish-nodejs verbatim —
1185
+ # see that job's comment block for the long-form rationale on why
1186
+ # `registry-url` is omitted, why we force-upgrade npm to 11.5+, and
1187
+ # why `--provenance --access public --loglevel verbose` is the
1188
+ # canonical flag combo.
1189
+ publish-notes-example:
1190
+ name: Publish sqlrite-notes example to npm
1191
+ needs: [detect, tag-all, publish-nodejs]
1192
+ if: needs.detect.outputs.should_release == 'true'
1193
+ runs-on: ubuntu-latest
1194
+ environment: release
1195
+ permissions:
1196
+ # OIDC for npm trusted publisher + provenance signing.
1197
+ id-token: write
1198
+ # For softprops/action-gh-release at the end.
1199
+ contents: write
1200
+ steps:
1201
+ - uses: actions/checkout@v4
1202
+
1203
+ # Same OIDC dance as publish-nodejs — see that job's comment
1204
+ # block for why we deliberately do NOT set `registry-url:`.
1205
+ - uses: actions/setup-node@v4
1206
+ with:
1207
+ node-version: '20'
1208
+
1209
+ - name: Upgrade npm to latest (need 11.5+ for trusted publishing)
1210
+ run: npm install -g npm@latest
1211
+
1212
+ - name: List publish payload + OIDC env diagnostics
1213
+ working-directory: examples/nodejs-notes
1214
+ run: |
1215
+ ls -la
1216
+ echo "---"
1217
+ npm --version
1218
+ echo "---"
1219
+ echo "ACTIONS_ID_TOKEN_REQUEST_URL is set: ${ACTIONS_ID_TOKEN_REQUEST_URL:+yes}${ACTIONS_ID_TOKEN_REQUEST_URL:-NO}"
1220
+ echo "ACTIONS_ID_TOKEN_REQUEST_TOKEN is set: ${ACTIONS_ID_TOKEN_REQUEST_TOKEN:+yes}${ACTIONS_ID_TOKEN_REQUEST_TOKEN:-NO}"
1221
+ echo "---"
1222
+ # `npm pack --dry-run` prints exactly what will end up in
1223
+ # the tarball. The `files` whitelist in package.json should
1224
+ # produce: bin/sqlrite-notes.mjs, src/*.mjs, README.md,
1225
+ # package.json — nothing else (no test fixtures, no
1226
+ # node_modules).
1227
+ npm pack --dry-run
1228
+
1229
+ - name: Publish to npm
1230
+ working-directory: examples/nodejs-notes
1231
+ run: npm publish --access public --provenance --loglevel verbose
1232
+
1233
+ - name: GitHub Release
1234
+ uses: softprops/action-gh-release@v2
1235
+ with:
1236
+ tag_name: sqlrite-notes-v${{ needs.detect.outputs.version }}
1237
+ name: sqlrite-notes example v${{ needs.detect.outputs.version }}
1238
+ body: |
1239
+ Published to npm: https://www.npmjs.com/package/sqlrite-notes/v/${{ needs.detect.outputs.version }}
1240
+
1241
+ ```bash
1242
+ # Ingest a folder of markdown notes into a SQLRite database
1243
+ # — no clone, no Rust toolchain, no env setup beyond an
1244
+ # optional embedding API key.
1245
+ npx sqlrite-notes@${{ needs.detect.outputs.version }} init ~/Documents/notes
1246
+ ```
1247
+
1248
+ The example uses `@joaoh82/sqlrite@^${{ needs.detect.outputs.version }}` for storage + retrieval (HNSW + BM25) and spawns [`sqlrite-mcp`](../../releases/tag/sqlrite-mcp-v${{ needs.detect.outputs.version }}) as a subprocess to expose the database to Claude Desktop / any MCP client. Install `sqlrite-mcp` separately — `cargo install sqlrite-mcp` or a prebuilt binary from the MCP release.
1249
+
1250
+ Verify package provenance:
1251
+ ```bash
1252
+ npm audit signatures
1253
+ ```
1254
+
1255
+ Full docs: [`examples/nodejs-notes/README.md`](https://github.com/joaoh82/rust_sqlite/blob/main/examples/nodejs-notes/README.md).
1256
+
1257
+ See the umbrella release [v${{ needs.detect.outputs.version }}](../../releases/tag/v${{ needs.detect.outputs.version }}) for the full changelog.
1258
+ generate_release_notes: true
1259
+
1157
1260
  # ---------------------------------------------------------------------------
1158
1261
  # Step 3h: build the WASM package via wasm-pack and publish to
1159
1262
  # npm as @joaoh82/sqlrite-wasm. (Phase 6h.)
@@ -1189,6 +1292,14 @@ jobs:
1189
1292
  if: needs.detect.outputs.should_release == 'true'
1190
1293
  runs-on: ubuntu-latest
1191
1294
  environment: release
1295
+ # Pinned binaryen version — see docs/release-plan.md
1296
+ # ("Pinned binaryen / wasm-opt") for the bump procedure. Older
1297
+ # binaryen rejects rustc's multi-table WASM output with
1298
+ # "Only 1 table definition allowed in MVP" (SQLR-58). The
1299
+ # release pipeline can't tolerate that flake — a failed
1300
+ # publish-wasm leaves the rest of the release wave inconsistent.
1301
+ env:
1302
+ BINARYEN_VERSION: version_122
1192
1303
  permissions:
1193
1304
  # OIDC: required for npm trusted-publisher token exchange.
1194
1305
  # Same flow proven in publish-nodejs after the v0.1.5–0.1.7
@@ -1207,6 +1318,20 @@ jobs:
1207
1318
  shared-key: publish-wasm
1208
1319
  workspaces: 'sdk/wasm -> target'
1209
1320
 
1321
+ - name: Install pinned binaryen (wasm-opt)
1322
+ # MUST run before wasm-pack: wasm-pack picks up wasm-opt
1323
+ # from PATH if present, otherwise downloads whatever
1324
+ # binaryen its own internal cache happens to have. Pinning
1325
+ # + prepending to PATH forces a deterministic version
1326
+ # across runner images.
1327
+ run: |
1328
+ set -euo pipefail
1329
+ curl -fsSL "https://github.com/WebAssembly/binaryen/releases/download/${BINARYEN_VERSION}/binaryen-${BINARYEN_VERSION}-x86_64-linux.tar.gz" \
1330
+ -o "$RUNNER_TEMP/binaryen.tar.gz"
1331
+ tar -xzf "$RUNNER_TEMP/binaryen.tar.gz" -C "$RUNNER_TEMP"
1332
+ echo "$RUNNER_TEMP/binaryen-${BINARYEN_VERSION}/bin" >> "$GITHUB_PATH"
1333
+ "$RUNNER_TEMP/binaryen-${BINARYEN_VERSION}/bin/wasm-opt" --version
1334
+
1210
1335
  # Install wasm-pack — the canonical tool for building +
1211
1336
  # packaging Rust crates as npm-publishable WASM modules.
1212
1337
  # `cargo binstall` would be faster than `cargo install`
@@ -1239,6 +1364,9 @@ jobs:
1239
1364
  - name: Build WASM package
1240
1365
  working-directory: sdk/wasm
1241
1366
  run: |
1367
+ # Sanity-check that the pinned wasm-opt is on PATH (SQLR-58).
1368
+ which wasm-opt
1369
+ wasm-opt --version
1242
1370
  wasm-pack build --release --target bundler --scope joaoh82
1243
1371
  echo "--- generated pkg/ contents ---"
1244
1372
  ls -la pkg/
@@ -1455,7 +1583,7 @@ jobs:
1455
1583
  # config if we add one later.
1456
1584
  finalize:
1457
1585
  name: Finalize umbrella release
1458
- needs: [detect, publish-crate, publish-ask, publish-mcp, build-mcp-binaries, publish-ffi, publish-desktop, publish-python, publish-nodejs, publish-wasm, publish-go]
1586
+ needs: [detect, publish-crate, publish-ask, publish-mcp, build-mcp-binaries, publish-ffi, publish-desktop, publish-python, publish-nodejs, publish-notes-example, publish-wasm, publish-go]
1459
1587
  if: needs.detect.outputs.should_release == 'true'
1460
1588
  runs-on: ubuntu-latest
1461
1589
  steps:
@@ -1479,6 +1607,7 @@ jobs:
1479
1607
  - 🖥️ [Desktop](../../releases/tag/sqlrite-desktop-v${{ needs.detect.outputs.version }}) — unsigned installers for Linux (AppImage + deb), macOS (dmg aarch64), Windows (msi)
1480
1608
  - 🐍 [Python](../../releases/tag/sqlrite-py-v${{ needs.detect.outputs.version }}) → [PyPI](https://pypi.org/project/sqlrite/${{ needs.detect.outputs.version }}/) — abi3-py38 wheels for Linux x86_64/aarch64, macOS aarch64, Windows x86_64 + sdist
1481
1609
  - 🟢 [Node.js](../../releases/tag/sqlrite-node-v${{ needs.detect.outputs.version }}) → [npm](https://www.npmjs.com/package/@joaoh82/sqlrite/v/${{ needs.detect.outputs.version }}) — N-API bindings with prebuilt `.node` binaries for Linux x86_64/aarch64, macOS aarch64, Windows x86_64
1610
+ - 📝 [`sqlrite-notes` example](../../releases/tag/sqlrite-notes-v${{ needs.detect.outputs.version }}) → [npm](https://www.npmjs.com/package/sqlrite-notes/v/${{ needs.detect.outputs.version }}) — `npx sqlrite-notes init <dir>` ingests a folder of markdown notes into a SQLRite DB and exposes it to Claude Desktop / any MCP client
1482
1611
  - 🌐 [WASM](../../releases/tag/sqlrite-wasm-v${{ needs.detect.outputs.version }}) → [npm](https://www.npmjs.com/package/@joaoh82/sqlrite-wasm/v/${{ needs.detect.outputs.version }}) — browser/bundler-target WebAssembly build via wasm-pack
1483
1612
  - 🐹 [Go SDK](../../releases/tag/sdk%2Fgo%2Fv${{ needs.detect.outputs.version }}) → `go get github.com/joaoh82/rust_sqlite/sdk/go@v${{ needs.detect.outputs.version }}` — `database/sql` driver via cgo against `libsqlrite_c`
1484
1613
 
@@ -44,3 +44,12 @@ examples/wasm/pkg
44
44
 
45
45
  # macOS
46
46
  .DS_Store
47
+
48
+ # Local agent / Claude Code worktrees. These shouldn't ever get
49
+ # committed — but `git add -A` from main while a worktree is live
50
+ # under .claude/worktrees/<name>/ will capture it as a gitlink
51
+ # (mode 160000) because the worktree dir looks like a submodule to
52
+ # the parent index. Ignoring the whole tree prevents that whole
53
+ # class of accident. (The release commit 937f8b4 hit exactly this
54
+ # bug; the next commit untracks the leftover gitlinks.)
55
+ .claude/worktrees/
@@ -0,0 +1,102 @@
1
+ # AGENTS.md
2
+
3
+ This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
4
+
5
+ ## Project
6
+
7
+ SQLRite is a from-scratch SQLite-style embedded database written in Rust. It's published on crates.io as `sqlrite-engine` (imported as `use sqlrite::…` — the lib target keeps the short name) and ships as: a REPL binary (`sqlrite`), a Tauri 2 + Svelte 5 desktop app, a Model Context Protocol stdio server (`sqlrite-mcp`), a C FFI shim (`sqlrite-ffi`), and language SDKs (Python via PyO3, Node via napi-rs, Go via cgo, WASM via wasm-bindgen). Phases 1–7 are shipped; the current branch `phase-8-plan` drafts inverted-index + BM25 full-text search and hybrid retrieval.
8
+
9
+ ## Workspace layout
10
+
11
+ `Cargo.toml` is a workspace whose members are: `.` (the engine, package `sqlrite-engine`, lib `sqlrite`), `desktop/src-tauri`, `examples/desktop-journal/src-tauri`, `sqlrite-ffi`, `sqlrite-ask`, `sqlrite-mcp`, `sdk/python`, `sdk/nodejs`, `benchmarks`. `sdk/wasm` and `sdk/go` are deliberately **not** workspace members (wasm32 target / cgo separation).
12
+
13
+ - `src/` — engine. Public API is `Connection`/`Statement`/`Rows`/`Row`/`Value` from [src/connection.rs](src/connection.rs), re-exported via [src/lib.rs](src/lib.rs). Any new SDK should bind only to this surface.
14
+ - `sqlrite-ask/` — pure-Rust LLM adapter (Anthropic/OpenAI/Ollama) for natural-language → SQL. The engine's `ask` feature provides the thin `ConnectionAskExt::ask` glue.
15
+ - `sqlrite-mcp/` — MCP stdio server. Seven tools: `list_tables`, `describe_table`, `query`, `execute`, `schema_dump`, `vector_search`, `ask`. `--read-only` opens with a shared lock and hides `execute`.
16
+ - `sqlrite-ffi/` — C ABI cdylib + generated `sqlrite.h` header. Backs the Go SDK and any C consumer.
17
+ - `desktop/` — Tauri 2 + Svelte 5 generic SQL playground GUI. Embeds the engine directly (no FFI hop).
18
+ - `examples/desktop-journal/` — Tauri 2 + Svelte 5 local-first journaling app (SQLR-41). Showcase for Phase 8 BM25 + `ask` in a non-AI-native product. Mirrors `desktop/`'s engine-as-Cargo-dep pattern but uses the modern `Connection` API.
19
+ - `benchmarks/` — SQLR-4 / SQLR-16 bench harness. `Driver` trait + SQLRite + SQLite (rusqlite-bundled) drivers + criterion-driven workloads. Excluded from the default CI build/test/clippy/doc commands; run locally with `make bench` (or `make bench-duckdb`). See [docs/benchmarks-plan.md](docs/benchmarks-plan.md).
20
+ - `web/` — marketing + docs site (Next.js 15 + Tailwind v4). Independent of the Cargo workspace; lives in-repo for now but is structured to lift into its own repository later. See [web/README.md](web/README.md).
21
+
22
+ Architecture deep-dive: [docs/architecture.md](docs/architecture.md). The full doc index is [docs/_index.md](docs/_index.md).
23
+
24
+ ## Engine data flow
25
+
26
+ SQL string → [src/sql/mod.rs](src/sql/mod.rs) `process_command` parses with the external `sqlparser` crate (SQLite dialect) → [src/sql/parser/](src/sql/parser/) trims the AST into internal structs (`CreateQuery`, `InsertQuery`, `SelectQuery`) → [src/sql/executor.rs](src/sql/executor.rs) runs the statement against the in-memory `Database` ([src/sql/db/database.rs](src/sql/db/database.rs)). On any write, auto-save serializes changed pages through [src/sql/pager/](src/sql/pager/) — 4 KiB pages, cell-encoded B-trees per table and index, WAL + crash-safe checkpoint, fs2 advisory locks. Vector search (Phase 7d) goes through [src/sql/hnsw.rs](src/sql/hnsw.rs); KNN uses a bounded-heap top-k in the executor. Transactions snapshot the in-memory state; ROLLBACK restores it. There is no query optimizer beyond the KNN/HNSW shortcut, no joins, no aggregates yet.
27
+
28
+ ## Commands
29
+
30
+ CI is the source of truth — the workspace excludes that follow are required because the desktop crate needs a Svelte build first, the PyO3/napi-rs cdylibs can't link standalone test binaries, and the `benchmarks/` harness deliberately stays out of CI (criterion is noisy on shared runners; the rusqlite-bundled build is heavy).
31
+
32
+ ```sh
33
+ # Build / test the Rust workspace (matches CI)
34
+ cargo build --workspace --exclude sqlrite-desktop --exclude sqlrite-journal --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks --all-targets
35
+ cargo test --workspace --exclude sqlrite-desktop --exclude sqlrite-journal --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks
36
+
37
+ # Single test (exact name; --nocapture to see println!)
38
+ cargo test <test_name> -- --nocapture
39
+
40
+ # Lint (CI runs all three)
41
+ cargo fmt --all -- --check
42
+ cargo clippy --workspace --exclude sqlrite-desktop --exclude sqlrite-journal --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks --all-targets
43
+ cargo doc --workspace --exclude sqlrite-desktop --exclude sqlrite-journal --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks --no-deps
44
+
45
+ # Run the REPL (default features include cli + ask + file-locks)
46
+ cargo run # in-memory
47
+ cargo run -- path/to/db.sqlrite # open/create file
48
+ cargo run -- --readonly path/to/db.sqlrite # shared-lock open
49
+
50
+ # Crate-specific
51
+ cargo build --release -p sqlrite-ffi # C cdylib + sqlrite.h
52
+ cd desktop && npm install && npm run tauri dev # desktop app dev mode
53
+ cargo run -p sqlrite-mcp -- /path/to.sqlrite # MCP server (stdio)
54
+ cd examples/desktop-journal && npm install && npm run tauri dev # journal example app
55
+
56
+ # Benchmarks (SQLR-4 / SQLR-16) — local-only, never CI
57
+ make bench # SQLRite + SQLite (lean)
58
+ make bench-duckdb # adds DuckDB driver (Group B only)
59
+
60
+ # Release plumbing
61
+ scripts/bump-version.sh 0.2.0 # bumps version across 11 manifests
62
+ ```
63
+
64
+ `SQLRITE_LLM_API_KEY` is required for the `.ask` REPL command, the engine's `ask` feature, and the MCP `ask` tool. Clippy is **not** `-D warnings` yet (intentional — see top of [.github/workflows/ci.yml](.github/workflows/ci.yml)); deny-by-default lints still fail CI.
65
+
66
+ ## Project-specific conventions
67
+
68
+ - **Errors.** Single `SQLRiteError` enum (thiserror, six variants) with a project-wide `Result<T>` alias. All public APIs return typed errors; no panics. The enum hand-rolls `PartialEq` because `std::io::Error` doesn't derive it.
69
+ - **Storage isn't bincode.** Tables and indexes share a cell-encoded B-tree format with a 4 KiB page size; the file header carries a format version (currently v4 after the Phase 7a vector column work). The diff-based pager only writes changed pages. See [docs/file-format.md](docs/file-format.md) and [docs/pager.md](docs/pager.md).
70
+ - **B-tree commit strategy.** Bottom-up rebuild on every commit (O(N), correct-by-construction). No in-place splits — deferred design decision.
71
+ - **Feature gates matter.** `default = ["cli", "ask", "file-locks"]`. The REPL `[[bin]]` `required-features = ["cli", "ask"]`. WASM and lean library embeddings build with `default-features = false` to avoid rustyline / clap / fs2 / sqlrite-ask. Don't pull these into the always-on dependency set.
72
+ - **Don't reinvent the SQL parser.** `sqlparser` is the tokenizer and AST source; project code only narrows that AST. New SQL features start by mapping the existing `sqlparser` AST node, not by extending a custom grammar.
73
+ - **Phase numbering is real.** The roadmap is sequenced in [docs/roadmap.md](docs/roadmap.md); design discussions live at github.com/sqlrite/design and feature work generally tracks an open phase plan in `docs/phase-*-plan.md`. Treat in-flight phase plans as load-bearing context.
74
+ - **Concurrency.** Engine mutates state through `Arc<Mutex<_>>` (Tauri-friendly). On-disk concurrency uses fs2 advisory locks: shared for readers, exclusive for the single writer.
75
+
76
+ ## Knowledge Base
77
+
78
+ ### Project-specific — `~/Documents/josh-obsidian-synced/Projects/rust_sqlite/`
79
+
80
+ - **Code:** `/Users/joaoh82/projects/rust_sqlite`
81
+ - **Context (read first):** `~/Documents/josh-obsidian-synced/Projects/rust_sqlite/context.md`
82
+ - **Notes (running journal):** `~/Documents/josh-obsidian-synced/Projects/rust_sqlite/notes.md`
83
+ - **Project wiki:** `~/Documents/josh-obsidian-synced/Projects/rust_sqlite/wiki/`
84
+
85
+ **How to use each:**
86
+
87
+ - `context.md` — stable background (product goals, stakeholders, domain). Read before starting non-trivial work. Update only when underlying facts change.
88
+ - `notes.md` — append-only dated journal. Add entries under `## YYYY-MM-DD` headings for decisions, blockers, TODOs, and incidents — anything worth preserving but not stable enough for `context.md`.
89
+ - `wiki/` — reference sub-docs (e.g. `Architecture.md`, `Local Dev Setup.md`, `Tech Services.md`). Create new files as topics emerge.
90
+
91
+ **When to save:**
92
+
93
+ - New stable fact about the product/domain → update `context.md`.
94
+ - A decision, incident, or working note → append a dated entry to `notes.md`.
95
+ - Reusable reference material (setup steps, credential locations, architecture) → new/updated file in `wiki/`.
96
+
97
+ ### Cross-project knowledge — `~/Documents/josh-obsidian-synced/vault/`
98
+
99
+ - **General wiki:** `~/Documents/josh-obsidian-synced/vault/wiki/` — start at `_master-index.md`, then drill into the relevant topic's `_index.md`.
100
+ - **Raw dumps:** `~/Documents/josh-obsidian-synced/vault/raw/` — drop unprocessed research here as `YYYY-MM-DD-{slug}.md`.
101
+
102
+ Read the general wiki when the question isn't specific to this project. Drop raw research or imported notes into `vault/raw/` so it's captured even before it's distilled.
@@ -4799,7 +4799,7 @@ dependencies = [
4799
4799
 
4800
4800
  [[package]]
4801
4801
  name = "sqlrite-ask"
4802
- version = "0.10.0"
4802
+ version = "0.10.2"
4803
4803
  dependencies = [
4804
4804
  "serde",
4805
4805
  "serde_json",
@@ -4827,7 +4827,7 @@ dependencies = [
4827
4827
 
4828
4828
  [[package]]
4829
4829
  name = "sqlrite-desktop"
4830
- version = "0.10.0"
4830
+ version = "0.10.2"
4831
4831
  dependencies = [
4832
4832
  "serde",
4833
4833
  "serde_json",
@@ -4839,7 +4839,7 @@ dependencies = [
4839
4839
 
4840
4840
  [[package]]
4841
4841
  name = "sqlrite-engine"
4842
- version = "0.10.0"
4842
+ version = "0.10.2"
4843
4843
  dependencies = [
4844
4844
  "clap",
4845
4845
  "env_logger",
@@ -4856,7 +4856,7 @@ dependencies = [
4856
4856
 
4857
4857
  [[package]]
4858
4858
  name = "sqlrite-ffi"
4859
- version = "0.10.0"
4859
+ version = "0.10.2"
4860
4860
  dependencies = [
4861
4861
  "cbindgen",
4862
4862
  "serde",
@@ -4864,9 +4864,22 @@ dependencies = [
4864
4864
  "sqlrite-engine",
4865
4865
  ]
4866
4866
 
4867
+ [[package]]
4868
+ name = "sqlrite-journal"
4869
+ version = "0.10.1"
4870
+ dependencies = [
4871
+ "serde",
4872
+ "serde_json",
4873
+ "sqlrite-engine",
4874
+ "tauri",
4875
+ "tauri-build",
4876
+ "tauri-plugin-dialog",
4877
+ "thiserror 2.0.18",
4878
+ ]
4879
+
4867
4880
  [[package]]
4868
4881
  name = "sqlrite-mcp"
4869
- version = "0.10.0"
4882
+ version = "0.10.2"
4870
4883
  dependencies = [
4871
4884
  "clap",
4872
4885
  "libc",
@@ -4877,7 +4890,7 @@ dependencies = [
4877
4890
 
4878
4891
  [[package]]
4879
4892
  name = "sqlrite-nodejs"
4880
- version = "0.10.0"
4893
+ version = "0.10.2"
4881
4894
  dependencies = [
4882
4895
  "napi",
4883
4896
  "napi-build",
@@ -4887,7 +4900,7 @@ dependencies = [
4887
4900
 
4888
4901
  [[package]]
4889
4902
  name = "sqlrite-python"
4890
- version = "0.10.0"
4903
+ version = "0.10.2"
4891
4904
  dependencies = [
4892
4905
  "pyo3",
4893
4906
  "sqlrite-engine",
@@ -27,7 +27,7 @@ resolver = "3"
27
27
  # `package =` key so the import name stays `sqlrite` internally:
28
28
  # sqlrite = { package = "sqlrite-engine", path = "…" }
29
29
  name = "sqlrite-engine"
30
- version = "0.10.0"
30
+ version = "0.10.2"
31
31
  authors = ["Joao Henrique Machado Silva <joaoh82@gmail.com>"]
32
32
  edition = "2024"
33
33
  rust-version = "1.85"
@@ -150,4 +150,4 @@ fs2 = { version = "0.4", optional = true }
150
150
  # crate publishes to crates.io, and a path-only dep without a
151
151
  # version field fails the manifest verification step. See PR #58
152
152
  # retrospective in docs/roadmap.md.
153
- sqlrite-ask = { version = "0.10.0", path = "sqlrite-ask", optional = true }
153
+ sqlrite-ask = { version = "0.10.2", path = "sqlrite-ask", optional = true }