blq-cli 1.2.0__tar.gz → 1.2.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.
- {blq_cli-1.2.0 → blq_cli-1.2.2}/CHANGELOG.md +32 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/PKG-INFO +2 -1
- {blq_cli-1.2.0 → blq_cli-1.2.2}/pyproject.toml +4 -1
- blq_cli-1.2.2/src/blq/__init__.py +32 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/serve.py +13 -3
- blq_cli-1.2.2/tests/test_version.py +37 -0
- blq_cli-1.2.0/src/blq/__init__.py +0 -21
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.claude/hooks/blq-suggest.sh +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.github/workflows/ci.yml +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.github/workflows/docs.yml +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.github/workflows/publish.yml +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.gitignore +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.mcp.json +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/.readthedocs.yml +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/AGENT.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/AGENTS.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/CLAUDE.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/CONTRIBUTING.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/README.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/SKILL.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/api-reference.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/capture.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/ci.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/completions.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/errors.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/exec.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/filter.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/index.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/init.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/maintenance.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/query.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/registry.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/report.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/run.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/sql.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/status.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/sync.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/commands/watch.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-bird-migration.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-commands.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-config-command.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-extensions.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-git-integration.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-hooks-v2.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-live-inspection.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-parameterized-commands.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-run-args.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-sandbox-specs.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-sync.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/design-track-save.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/duck-hunt-v2-migration.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/duck-hunt-v3-migration.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/proposal-bird-v5.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/design/skill-inspect-enrichment.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/getting-started.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/index.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/integration.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/mcp.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/plans/explore-bird-sqlite-backend.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/plans/explore-nsjail-python-wrapper.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/plans/explore-nsjail-spack-package.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/plans/patterns-integration-prompt.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/plans/roadmap-to-1.0.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/plugin-guide.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/python-api.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/query-guide.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/requirements.txt +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/sandbox.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/schema-stability.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/schema.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/plans/2026-03-22-extension-system.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/plans/2026-03-28-bwrap-engine.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/plans/2026-03-28-command-locks.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/plans/2026-03-29-annotators-and-tighten.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/plans/2026-03-29-service-layer-phase1.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/plans/2026-03-29-strace-profiling.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/specs/2026-03-22-extension-system-design.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/specs/2026-03-29-unified-service-layer-design.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/experiments/agent-build-test.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/mkdocs.yml +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/__main__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/bird.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/bird_schema.sql +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/cli.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/README.md +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/ci_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/clean_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/config_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/core.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/events.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/execution.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/hooks_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/hooks_gen.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/init_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/management.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/management_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/mcp_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/migrate.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/query_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/record_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/registry.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/report_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/sandbox_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/serve_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/sync_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/commands/watch_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/config_format.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/ext/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/ext/annotator.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/ext/discovery.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/ext/local_executor.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/ext/pipeline.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/git.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/github.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/locks.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/output.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/query.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/runtime.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/schema.sql +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/services/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/services/execution.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/services/inspect.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/services/query.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/services/refs.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/storage.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/templates/drone.yml.j2 +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/templates/git_hook.sh.j2 +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/templates/github_workflow.yml.j2 +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/templates/gitlab_ci.yml.j2 +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/templates/hook_script.sh.j2 +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq/user_config.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/engines.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/profile.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/source_annotator.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/spec.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/strace_parser.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/tighten.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox/violations.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox_bwrap/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox_bwrap/args.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/src/blq_sandbox_systemd/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/__init__.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/conftest.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/sql/test_duck_hunt_v2_migration.sql +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_annotator.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_attempts_outcomes.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_auto_init.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_autoprune.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_bird.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_bwrap_args.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_bwrap_engine.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ci.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ci_generators.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_command_args.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_command_lock_field.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_config_consumption.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_core.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_execution_locks.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_exit_code_reason.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ext_discovery.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ext_integration.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ext_local_executor.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ext_pipeline.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_ext_types.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_git.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_hooks.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_hooks_gen.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_import_capture_storage.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_inspect.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_json_null_filter.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_locks.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_log_content_persistence.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_mcp_ci_tools.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_mcp_merge.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_mcp_server.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_output_schemas.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_phase1_structured_output.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_phase2_command_registry.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_query_api.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_query_filter.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_record_invocation.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_report.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_runtime_config.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_cmd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_events.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_ext.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_profile.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_register.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_systemd.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_tighten.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_sandbox_violations.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_schema_repair.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_security_containment.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_services_execution.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_services_inspect.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_services_query.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_services_refs.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_source_annotator.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_storage.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_storage_prune.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_strace_parser.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_user_config.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/tests/test_watch.py +0 -0
- {blq_cli-1.2.0 → blq_cli-1.2.2}/uv.lock +0 -0
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.2.2
|
|
4
|
+
|
|
5
|
+
### Fixed — Suppress FastMCP banners on stdio transport
|
|
6
|
+
|
|
7
|
+
When starting the MCP server over stdio, FastMCP banner rendering is suppressed
|
|
8
|
+
(`show_banner=False`) so that stdout contains strictly valid JSON-RPC messages
|
|
9
|
+
without terminal box decorations. Also derives `__version__` from installed package
|
|
10
|
+
metadata.
|
|
11
|
+
|
|
12
|
+
## v1.2.1
|
|
13
|
+
|
|
14
|
+
### Fixed — 1.2.0 was broken on Python 3.10 and 3.11
|
|
15
|
+
|
|
16
|
+
The TypedDicts added in 1.2.0 were imported from `typing`. pydantic refuses to
|
|
17
|
+
build a schema from `typing.TypedDict` below 3.12 ("Please use
|
|
18
|
+
`typing_extensions.TypedDict` instead"), so importing `blq.serve` raised on
|
|
19
|
+
every supported Python under 3.12 — which is to say the MCP server did not
|
|
20
|
+
start at all there.
|
|
21
|
+
|
|
22
|
+
`requires-python` is `>=3.10`, so 1.2.0 should not have shipped. It passed
|
|
23
|
+
local checks because the development interpreter was 3.14; CI caught it on the
|
|
24
|
+
3.10 matrix entry, but the publish workflow triggers on release rather than on
|
|
25
|
+
a green CI run, so the package reached PyPI anyway.
|
|
26
|
+
|
|
27
|
+
Now imported from `typing_extensions` below 3.12, with the backport declared as
|
|
28
|
+
a conditional dependency. Verified against a real 3.11 interpreter: 1382 tests
|
|
29
|
+
pass, where 1.2.0 could not import.
|
|
30
|
+
|
|
31
|
+
**If you installed 1.2.0 on Python 3.10 or 3.11, upgrade.** On 3.12+ it was
|
|
32
|
+
unaffected.
|
|
33
|
+
|
|
34
|
+
|
|
3
35
|
## v1.2.0
|
|
4
36
|
|
|
5
37
|
### Added — MCP tools publish the names of the keys they return (#47)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: blq-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: Build Log Query - capture and query build/test logs with DuckDB
|
|
5
5
|
Project-URL: Homepage, https://blq-cli.readthedocs.io/
|
|
6
6
|
Project-URL: Repository, https://github.com/teaguesterling/blq-cli
|
|
@@ -27,6 +27,7 @@ Requires-Dist: pyyaml>=6.0
|
|
|
27
27
|
Requires-Dist: tabulate>=0.9.0
|
|
28
28
|
Requires-Dist: tomli-w>=1.0.0
|
|
29
29
|
Requires-Dist: tomli>=2.0.0; python_version < '3.11'
|
|
30
|
+
Requires-Dist: typing-extensions>=4.0; python_version < '3.12'
|
|
30
31
|
Requires-Dist: watchdog>=3.0.0
|
|
31
32
|
Provides-Extra: dev
|
|
32
33
|
Requires-Dist: fastmcp>=2.0.0; extra == 'dev'
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "blq-cli"
|
|
7
|
-
version = "1.2.
|
|
7
|
+
version = "1.2.2"
|
|
8
8
|
description = "Build Log Query - capture and query build/test logs with DuckDB"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -33,6 +33,9 @@ dependencies = [
|
|
|
33
33
|
"pyyaml>=6.0",
|
|
34
34
|
"tabulate>=0.9.0",
|
|
35
35
|
"tomli>=2.0.0;python_version<'3.11'",
|
|
36
|
+
# pydantic will not build a schema from `typing.TypedDict` below 3.12, so
|
|
37
|
+
# the MCP tools' output schemas need the backport there.
|
|
38
|
+
"typing_extensions>=4.0;python_version<'3.12'",
|
|
36
39
|
"tomli-w>=1.0.0",
|
|
37
40
|
"watchdog>=3.0.0",
|
|
38
41
|
]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""
|
|
2
|
+
blq - Log Query
|
|
3
|
+
|
|
4
|
+
Capture and query build/test logs with DuckDB.
|
|
5
|
+
|
|
6
|
+
Example usage:
|
|
7
|
+
from blq import LogStore, LogQuery
|
|
8
|
+
|
|
9
|
+
# Query stored events
|
|
10
|
+
store = LogStore.open()
|
|
11
|
+
errors = store.errors().filter(ref_file="%main%").df()
|
|
12
|
+
|
|
13
|
+
# Query a log file directly
|
|
14
|
+
events = LogQuery.from_file("build.log").filter(severity="error").df()
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from importlib.metadata import PackageNotFoundError, version as _dist_version
|
|
18
|
+
|
|
19
|
+
# Derived, never written by hand. The literal here read "1.0.1" against a
|
|
20
|
+
# distribution version of 1.2.1 — two releases stale, and immune to
|
|
21
|
+
# --force-reinstall because it was not derived from anything. Nothing consumes
|
|
22
|
+
# it today (the CLI reads importlib.metadata directly), which is exactly why it
|
|
23
|
+
# drifted unnoticed; a version string that lies makes a healthy install look
|
|
24
|
+
# broken, which is the most expensive direction to send a reader.
|
|
25
|
+
try:
|
|
26
|
+
__version__ = _dist_version("blq-cli")
|
|
27
|
+
except PackageNotFoundError: # running from a source tree with no install
|
|
28
|
+
__version__ = "0.0.0.dev0"
|
|
29
|
+
|
|
30
|
+
from blq.query import LogQuery, LogQueryGrouped, LogStore
|
|
31
|
+
|
|
32
|
+
__all__ = ["LogQuery", "LogStore", "LogQueryGrouped", "__version__"]
|
|
@@ -34,7 +34,17 @@ import re as _re
|
|
|
34
34
|
import shlex
|
|
35
35
|
import subprocess
|
|
36
36
|
import sys
|
|
37
|
-
from typing import Any
|
|
37
|
+
from typing import Any
|
|
38
|
+
|
|
39
|
+
# pydantic rejects `typing.TypedDict` below 3.12 and refuses to build a schema
|
|
40
|
+
# from it ("Please use typing_extensions.TypedDict instead"). This package
|
|
41
|
+
# supports 3.10+, so the stdlib import breaks every MCP tool on 3.10/3.11 —
|
|
42
|
+
# which is exactly how it shipped in 1.2.0, because the dev interpreter was
|
|
43
|
+
# 3.14 and only CI runs the older matrix.
|
|
44
|
+
if sys.version_info >= (3, 12):
|
|
45
|
+
from typing import TypedDict
|
|
46
|
+
else:
|
|
47
|
+
from typing_extensions import TypedDict
|
|
38
48
|
|
|
39
49
|
import pandas as pd # type: ignore[import-untyped]
|
|
40
50
|
from fastmcp import FastMCP
|
|
@@ -4164,9 +4174,9 @@ def serve(
|
|
|
4164
4174
|
_init_disabled_tools(cli_disabled=disabled_tools, safe_mode=safe_mode)
|
|
4165
4175
|
|
|
4166
4176
|
if transport == "stdio":
|
|
4167
|
-
mcp.run()
|
|
4177
|
+
mcp.run(show_banner=False)
|
|
4168
4178
|
elif transport == "sse":
|
|
4169
|
-
mcp.run(transport="sse", port=port)
|
|
4179
|
+
mcp.run(transport="sse", port=port, show_banner=False)
|
|
4170
4180
|
else:
|
|
4171
4181
|
raise ValueError(f"Unknown transport: {transport}")
|
|
4172
4182
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""The exported version must match the installed distribution.
|
|
2
|
+
|
|
3
|
+
`__version__` was a hand-written literal and drifted two releases behind
|
|
4
|
+
pyproject.toml before anyone noticed — nothing consumes it (the CLI reads
|
|
5
|
+
importlib.metadata directly), so nothing failed. The same defect in squackit
|
|
6
|
+
reached four releases of drift.
|
|
7
|
+
|
|
8
|
+
Asserting a hardcoded string here would recreate the problem: the module and
|
|
9
|
+
its test would agree with each other and with nothing else. Assert the
|
|
10
|
+
correspondence instead.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_version_matches_the_installed_distribution():
|
|
17
|
+
import blq
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
expected = version("blq-cli")
|
|
21
|
+
except PackageNotFoundError:
|
|
22
|
+
expected = "0.0.0.dev0"
|
|
23
|
+
assert blq.__version__ == expected
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_version_is_not_a_hardcoded_literal():
|
|
27
|
+
"""Guard the mechanism, not just today's value."""
|
|
28
|
+
import pathlib
|
|
29
|
+
|
|
30
|
+
src = pathlib.Path(blq_init()).read_text()
|
|
31
|
+
assert "_dist_version" in src, "version is no longer derived from metadata"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def blq_init():
|
|
35
|
+
import blq
|
|
36
|
+
|
|
37
|
+
return blq.__file__
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
blq - Log Query
|
|
3
|
-
|
|
4
|
-
Capture and query build/test logs with DuckDB.
|
|
5
|
-
|
|
6
|
-
Example usage:
|
|
7
|
-
from blq import LogStore, LogQuery
|
|
8
|
-
|
|
9
|
-
# Query stored events
|
|
10
|
-
store = LogStore.open()
|
|
11
|
-
errors = store.errors().filter(ref_file="%main%").df()
|
|
12
|
-
|
|
13
|
-
# Query a log file directly
|
|
14
|
-
events = LogQuery.from_file("build.log").filter(severity="error").df()
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
__version__ = "1.0.1"
|
|
18
|
-
|
|
19
|
-
from blq.query import LogQuery, LogQueryGrouped, LogStore
|
|
20
|
-
|
|
21
|
-
__all__ = ["LogQuery", "LogStore", "LogQueryGrouped", "__version__"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/specs/2026-03-22-extension-system-design.md
RENAMED
|
File without changes
|
{blq_cli-1.2.0 → blq_cli-1.2.2}/docs/superpowers/specs/2026-03-29-unified-service-layer-design.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|