blq-cli 0.11.0__tar.gz → 0.11.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 (191) hide show
  1. {blq_cli-0.11.0 → blq_cli-0.11.2}/PKG-INFO +1 -1
  2. blq_cli-0.11.2/docs/superpowers/plans/2026-03-29-service-layer-phase1.md +22 -0
  3. {blq_cli-0.11.0 → blq_cli-0.11.2}/pyproject.toml +1 -1
  4. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/serve.py +124 -573
  5. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/services/query.py +42 -26
  6. {blq_cli-0.11.0 → blq_cli-0.11.2}/.claude/hooks/blq-suggest.sh +0 -0
  7. {blq_cli-0.11.0 → blq_cli-0.11.2}/.github/workflows/ci.yml +0 -0
  8. {blq_cli-0.11.0 → blq_cli-0.11.2}/.github/workflows/docs.yml +0 -0
  9. {blq_cli-0.11.0 → blq_cli-0.11.2}/.github/workflows/publish.yml +0 -0
  10. {blq_cli-0.11.0 → blq_cli-0.11.2}/.gitignore +0 -0
  11. {blq_cli-0.11.0 → blq_cli-0.11.2}/.mcp.json +0 -0
  12. {blq_cli-0.11.0 → blq_cli-0.11.2}/.readthedocs.yml +0 -0
  13. {blq_cli-0.11.0 → blq_cli-0.11.2}/AGENT.md +0 -0
  14. {blq_cli-0.11.0 → blq_cli-0.11.2}/AGENTS.md +0 -0
  15. {blq_cli-0.11.0 → blq_cli-0.11.2}/CLAUDE.md +0 -0
  16. {blq_cli-0.11.0 → blq_cli-0.11.2}/CONTRIBUTING.md +0 -0
  17. {blq_cli-0.11.0 → blq_cli-0.11.2}/README.md +0 -0
  18. {blq_cli-0.11.0 → blq_cli-0.11.2}/SKILL.md +0 -0
  19. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/capture.md +0 -0
  20. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/ci.md +0 -0
  21. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/completions.md +0 -0
  22. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/errors.md +0 -0
  23. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/exec.md +0 -0
  24. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/filter.md +0 -0
  25. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/index.md +0 -0
  26. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/init.md +0 -0
  27. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/maintenance.md +0 -0
  28. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/query.md +0 -0
  29. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/registry.md +0 -0
  30. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/report.md +0 -0
  31. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/run.md +0 -0
  32. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/sql.md +0 -0
  33. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/status.md +0 -0
  34. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/sync.md +0 -0
  35. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/commands/watch.md +0 -0
  36. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-bird-migration.md +0 -0
  37. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-commands.md +0 -0
  38. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-config-command.md +0 -0
  39. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-extensions.md +0 -0
  40. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-git-integration.md +0 -0
  41. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-hooks-v2.md +0 -0
  42. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-live-inspection.md +0 -0
  43. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-parameterized-commands.md +0 -0
  44. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-run-args.md +0 -0
  45. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-sandbox-specs.md +0 -0
  46. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-sync.md +0 -0
  47. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/design-track-save.md +0 -0
  48. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/duck-hunt-v2-migration.md +0 -0
  49. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/duck-hunt-v3-migration.md +0 -0
  50. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/proposal-bird-v5.md +0 -0
  51. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/design/skill-inspect-enrichment.md +0 -0
  52. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/getting-started.md +0 -0
  53. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/index.md +0 -0
  54. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/integration.md +0 -0
  55. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/mcp.md +0 -0
  56. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/plans/explore-nsjail-python-wrapper.md +0 -0
  57. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/plans/explore-nsjail-spack-package.md +0 -0
  58. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/plans/patterns-integration-prompt.md +0 -0
  59. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/plans/roadmap-to-1.0.md +0 -0
  60. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/python-api.md +0 -0
  61. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/query-guide.md +0 -0
  62. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/requirements.txt +0 -0
  63. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/sandbox.md +0 -0
  64. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/schema.md +0 -0
  65. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/plans/2026-03-22-extension-system.md +0 -0
  66. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/plans/2026-03-28-bwrap-engine.md +0 -0
  67. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/plans/2026-03-28-command-locks.md +0 -0
  68. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/plans/2026-03-29-annotators-and-tighten.md +0 -0
  69. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/plans/2026-03-29-strace-profiling.md +0 -0
  70. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/specs/2026-03-22-extension-system-design.md +0 -0
  71. {blq_cli-0.11.0 → blq_cli-0.11.2}/docs/superpowers/specs/2026-03-29-unified-service-layer-design.md +0 -0
  72. {blq_cli-0.11.0 → blq_cli-0.11.2}/experiments/agent-build-test.md +0 -0
  73. {blq_cli-0.11.0 → blq_cli-0.11.2}/mkdocs.yml +0 -0
  74. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/__init__.py +0 -0
  75. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/__main__.py +0 -0
  76. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/bird.py +0 -0
  77. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/bird_schema.sql +0 -0
  78. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/cli.py +0 -0
  79. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/README.md +0 -0
  80. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/__init__.py +0 -0
  81. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/ci_cmd.py +0 -0
  82. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/clean_cmd.py +0 -0
  83. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/config_cmd.py +0 -0
  84. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/core.py +0 -0
  85. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/events.py +0 -0
  86. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/execution.py +0 -0
  87. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/hooks_cmd.py +0 -0
  88. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/hooks_gen.py +0 -0
  89. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/init_cmd.py +0 -0
  90. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/management.py +0 -0
  91. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/management_cmd.py +0 -0
  92. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/mcp_cmd.py +0 -0
  93. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/migrate.py +0 -0
  94. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/query_cmd.py +0 -0
  95. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/record_cmd.py +0 -0
  96. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/registry.py +0 -0
  97. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/report_cmd.py +0 -0
  98. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/sandbox_cmd.py +0 -0
  99. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/serve_cmd.py +0 -0
  100. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/sync_cmd.py +0 -0
  101. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/commands/watch_cmd.py +0 -0
  102. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/config_format.py +0 -0
  103. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/ext/__init__.py +0 -0
  104. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/ext/annotator.py +0 -0
  105. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/ext/discovery.py +0 -0
  106. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/ext/local_executor.py +0 -0
  107. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/ext/pipeline.py +0 -0
  108. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/git.py +0 -0
  109. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/github.py +0 -0
  110. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/locks.py +0 -0
  111. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/output.py +0 -0
  112. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/query.py +0 -0
  113. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/schema.sql +0 -0
  114. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/services/__init__.py +0 -0
  115. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/services/execution.py +0 -0
  116. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/services/inspect.py +0 -0
  117. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/services/refs.py +0 -0
  118. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/storage.py +0 -0
  119. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/templates/drone.yml.j2 +0 -0
  120. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/templates/git_hook.sh.j2 +0 -0
  121. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/templates/github_workflow.yml.j2 +0 -0
  122. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/templates/gitlab_ci.yml.j2 +0 -0
  123. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/templates/hook_script.sh.j2 +0 -0
  124. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq/user_config.py +0 -0
  125. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/__init__.py +0 -0
  126. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/engines.py +0 -0
  127. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/profile.py +0 -0
  128. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/source_annotator.py +0 -0
  129. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/spec.py +0 -0
  130. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/strace_parser.py +0 -0
  131. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/tighten.py +0 -0
  132. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox/violations.py +0 -0
  133. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox_bwrap/__init__.py +0 -0
  134. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox_bwrap/args.py +0 -0
  135. {blq_cli-0.11.0 → blq_cli-0.11.2}/src/blq_sandbox_systemd/__init__.py +0 -0
  136. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/__init__.py +0 -0
  137. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/conftest.py +0 -0
  138. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/sql/test_duck_hunt_v2_migration.sql +0 -0
  139. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_annotator.py +0 -0
  140. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_attempts_outcomes.py +0 -0
  141. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_auto_init.py +0 -0
  142. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_autoprune.py +0 -0
  143. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_bird.py +0 -0
  144. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_bwrap_args.py +0 -0
  145. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_bwrap_engine.py +0 -0
  146. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ci.py +0 -0
  147. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ci_generators.py +0 -0
  148. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_command_args.py +0 -0
  149. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_command_lock_field.py +0 -0
  150. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_core.py +0 -0
  151. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_execution_locks.py +0 -0
  152. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_exit_code_reason.py +0 -0
  153. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ext_discovery.py +0 -0
  154. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ext_integration.py +0 -0
  155. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ext_local_executor.py +0 -0
  156. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ext_pipeline.py +0 -0
  157. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_ext_types.py +0 -0
  158. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_git.py +0 -0
  159. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_hooks.py +0 -0
  160. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_hooks_gen.py +0 -0
  161. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_inspect.py +0 -0
  162. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_json_null_filter.py +0 -0
  163. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_locks.py +0 -0
  164. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_mcp_ci_tools.py +0 -0
  165. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_mcp_merge.py +0 -0
  166. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_mcp_server.py +0 -0
  167. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_phase1_structured_output.py +0 -0
  168. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_phase2_command_registry.py +0 -0
  169. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_query_api.py +0 -0
  170. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_query_filter.py +0 -0
  171. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_record_invocation.py +0 -0
  172. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_report.py +0 -0
  173. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox.py +0 -0
  174. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_cmd.py +0 -0
  175. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_events.py +0 -0
  176. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_ext.py +0 -0
  177. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_profile.py +0 -0
  178. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_register.py +0 -0
  179. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_systemd.py +0 -0
  180. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_tighten.py +0 -0
  181. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_sandbox_violations.py +0 -0
  182. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_services_execution.py +0 -0
  183. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_services_inspect.py +0 -0
  184. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_services_query.py +0 -0
  185. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_services_refs.py +0 -0
  186. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_source_annotator.py +0 -0
  187. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_storage.py +0 -0
  188. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_storage_prune.py +0 -0
  189. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_strace_parser.py +0 -0
  190. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_user_config.py +0 -0
  191. {blq_cli-0.11.0 → blq_cli-0.11.2}/tests/test_watch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: blq-cli
3
- Version: 0.11.0
3
+ Version: 0.11.2
4
4
  Summary: Buidl Log Query - capture and query build/test logs with DuckDB
5
5
  Project-URL: Homepage, https://blq-cli.readthedocs.com/
6
6
  Project-URL: Repository, https://github.com/teaguesterling/blq-cli
@@ -0,0 +1,22 @@
1
+ # Unified Service Layer — Phase 1: Extract Services
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Create `src/blq/services/` with shared business logic functions that both CLI and MCP can call, without changing any existing callers yet.
6
+
7
+ **Architecture:** Each service function takes a `BlqStorage` instance and parameters, returns structured dicts/lists. No argparse, no MCP, no output formatting. Phase 1 is additive only — existing CLI and MCP code stays untouched. Phase 2 (separate plan) will wire callers to use these services.
8
+
9
+ **Tech Stack:** Python 3.12+, DuckDB, existing `BlqStorage` from `src/blq/storage.py`
10
+
11
+ ---
12
+
13
+ ## Tasks
14
+
15
+ 1. Service package + ref resolution
16
+ 2. Query services (status, history, events, diff)
17
+ 3. Inspect service (source, log, git, fingerprint context)
18
+ 4. Execution service (RunResult to concise dict)
19
+ 5. Package init + full test suite
20
+ 6. Documentation
21
+
22
+ See full task details in the plan body above (conversation context).
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "blq-cli"
7
- version = "0.11.0"
7
+ version = "0.11.2"
8
8
  description = "Buidl Log Query - capture and query build/test logs with DuckDB"
9
9
  readme = "README.md"
10
10
  license = "MIT"