conexus 3.2.2__tar.gz → 3.2.3__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.
- {conexus-3.2.2 → conexus-3.2.3}/.claude-plugin/marketplace.json +2 -2
- {conexus-3.2.2 → conexus-3.2.3}/CHANGELOG.md +5 -0
- {conexus-3.2.2 → conexus-3.2.3}/PKG-INFO +1 -1
- {conexus-3.2.2 → conexus-3.2.3}/nx/.claude-plugin/plugin.json +1 -1
- {conexus-3.2.2 → conexus-3.2.3}/nx/CHANGELOG.md +4 -0
- {conexus-3.2.2 → conexus-3.2.3}/pyproject.toml +1 -1
- {conexus-3.2.2 → conexus-3.2.3}/sn/.claude-plugin/plugin.json +1 -1
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/catalog.py +19 -6
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/mcp_server.py +70 -14
- {conexus-3.2.2 → conexus-3.2.3}/uv.lock +1 -1
- {conexus-3.2.2 → conexus-3.2.3}/.beads/.gitignore +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/config.yaml +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/post-checkout +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/post-merge +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/pre-commit +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/pre-push +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/prepare-commit-msg +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/interactions.jsonl +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/issues.jsonl +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.beads/metadata.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.claude/skills/release.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.devcontainer/Dockerfile +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.devcontainer/devcontainer.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.dockerignore +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.env.example +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.gitattributes +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.github/workflows/ci.yml +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.github/workflows/release.yml +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.gitignore +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/.markdownlint.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/AGENTS.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/CLAUDE.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/Formula/nx.rb +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/LICENSE +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/architecture.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/catalog.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/cli-reference.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/configuration.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/contributing.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/getting-started.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/historical.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/memory-and-tasks.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/postmortem/2026-03-23-pdf-index-collection-mismatch.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/postmortem/2026-03-24-pdf-index-fix-not-applied.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/querying-guide.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/001-rdr-process-validation.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/002-t2-status-synchronization.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/010-t1-http-server.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/011-pdf-ingest-test-coverage.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/012-pdfplumber-extraction-tier.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/014-knowledge-base-retrieval-quality.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/015-indexing-pipeline-rethink.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/016-ast-chunk-line-range-bug.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/017-indexing-progress-reporting.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/018-replace-serve-with-git-hooks.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/023-agent-tool-permissions-audit.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/024-rdr-process-guardrails.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/028-language-registry-unification.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/029-pipeline-versioning.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/049-git-backed-catalog.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/050-catalog-query-integration.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/051-link-lifecycle.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/052-catalog-first-query-routing.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/053-xanadu-fidelity.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/cce-query-model-mismatch.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-001-rdr-process-validation.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-002-t2-status-synchronization.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-004-four-store-architecture.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-005-chromadb-cloud-quota-enforcement.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-006-chunk-size-configuration.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-007-claude-adoption-session-context-and-search-guidance.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-008-nx-workflow-integration.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-009-remove-agentic-and-answer-flags.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-010-t1-scratch-persistent-bounded-store.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-011-pdf-ingest-test-coverage.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-012-pdfplumber-extraction-tier.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-013-remove-nx-pm-layer.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-014-knowledge-base-retrieval-quality.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-015-indexing-pipeline-rethink.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-016-ast-chunk-line-range-bug.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-017-indexing-progress-reporting.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-018-replace-serve-with-git-hooks.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-019-chromadb-transient-retry.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-020-voyage-chromadb-read-timeout.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-021-docling-pdf-extraction.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-022-memory-delete-command.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-023-agent-tool-permissions-audit.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-024-rdr-process-guardrails.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-025-language-agnostic-agents.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-026-hybrid-search-fusion.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-027-search-results-ux.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-028-code-search-recall.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-029-pipeline-versioning.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-030-reliability-hardening.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-031-collection-portability.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-032-indexer-decomposition.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-033-pdf-agent-nx-index-alignment.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-034-mcp-server-agent-storage.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-035-plugin-agent-mcp-tool-access.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-036-post-accept-planning-workflow.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-037-t3-database-consolidation.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-038-local-t3-backend.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-039-claude-code-framework-alignment.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-040-cce-postmortem-gaps-mcp-enhancement.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-040-developer-agent-circuit-breaker.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-041-t1-scratch-inter-agent-context.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-042-agenticscholar-enhancements.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-043-plan-enricher-scope.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-044-math-aware-pdf-extraction.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-045-post-implementation-verification.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-046-mineru-server-backed-extraction.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-047-large-pdf-extraction-resilience.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-048-streaming-pdf-pipeline.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-049-consolidation-plan.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-049-git-backed-catalog.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-050-knowledge-graph-query-planning.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-051-link-lifecycle.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-052-catalog-first-query-routing.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-053-xanadu-fidelity.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-nexus-integration.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-overview.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-templates.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-workflow.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/repo-indexing.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/storage-tiers.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/docs/xanadu-in-nexus.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/.mcp.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/CONTEXT_PROTOCOL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/ERROR_HANDLING.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/MAINTENANCE.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/RELAY_TEMPLATE.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/analytical-operator.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/architect-planner.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/code-review-expert.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/codebase-deep-analyzer.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/debugger.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/deep-analyst.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/deep-research-synthesizer.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/developer.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/knowledge-tidier.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/orchestrator.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/pdf-chromadb-processor.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/plan-auditor.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/plan-enricher.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/query-planner.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/strategic-planner.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/substantive-critic.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/agents/test-validator.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/analyze-code.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/architecture.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/create-plan.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/debug.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/deep-analysis.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/enrich-plan.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/implement.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/knowledge-tidy.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/nx-preflight.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/pdf-process.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/plan-audit.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-accept.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-close.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-create.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-gate.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-list.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-research.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-show.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/research.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/review-code.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/substantive-critique.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/commands/test-validate.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/hooks.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/auto-approve-nx-mcp.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/post_compact_hook.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/pre_close_verification_hook.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/rdr_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/read_verification_config.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/session_start_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/stop_failure_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/stop_verification_hook.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/subagent-start.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/t2_prefix_scan.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/registry.yaml +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/resources/rdr/README-TEMPLATE.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/resources/rdr/TEMPLATE.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/resources/rdr/post-mortem/TEMPLATE.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/architecture/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/brainstorming-gate/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/cli-controller/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/code-review/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/codebase-analysis/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/debugging/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/deep-analysis/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/development/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/enrich-plan/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/finishing-branch/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/git-worktrees/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/knowledge-tidying/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/nexus/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/nexus/reference.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/orchestration/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/pdf-processing/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/plan-validation/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/query/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-accept/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-close/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-create/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-gate/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-list/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-research/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-show/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/receiving-review/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/research-synthesis/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/serena-code-nav/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/strategic-planning/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/substantive-critique/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/test-validation/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/using-nx-skills/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/nx/skills/writing-nx-skills/SKILL.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/scripts/reinstall-tool.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/sn/.mcp.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/sn/README.md +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/hooks.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/scripts/auto-approve-sn-mcp.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/scripts/mcp-inject.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/scripts/session-start.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/bib_enricher.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/auto_linker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/catalog.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/catalog_db.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/consolidation.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/link_generator.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/tumbler.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/checkpoint.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/chunker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/classifier.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/cli.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/code_indexer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/_helpers.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/_provision.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/collection.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/config_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/doctor.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/enrich.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/hooks.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/index.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/memory.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/mineru.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/scratch.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/search_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/store.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/config.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/corpus.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/chroma_quotas.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/local_ef.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/t1.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/t2.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/t3.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/doc_indexer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/errors.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/exporter.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/formatters.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/frecency.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/hooks.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/index_context.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/indexer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/indexer_utils.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/languages.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/md_chunker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pdf_chunker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pdf_extractor.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pipeline_buffer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pipeline_stages.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/prose_indexer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/registry.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/retry.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/ripgrep_cache.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/scoring.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/search_engine.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/session.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/ttl.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/src/nexus/types.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/__snapshots__/test_search_snapshot.ambr +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/corpus.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/queries.json +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/test_retrieval_ndcg.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/conftest.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/auth-login.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/lib.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/run.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/sandbox.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/00_debug_load.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/01_smoke.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/02_sequential_thinking.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/03_skills.sh +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/__init__.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_permission_request_hooks.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_post_compact_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_pre_close_verification_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_read_verification_config.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_stop_failure_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_stop_verification_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_verification_integration.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_ast_languages.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_auto_linker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_backfill_hash.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_bib_enricher.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_backfill.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_cli.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_consolidation.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_db.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_e2e.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_git.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_indexer_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_jsonl.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_knowledge_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_link_generation.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_links.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_mcp.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_pdf_hook.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_checkpoint.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_chroma_quotas.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_chroma_retry.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_chunker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_chunker_ast_languages.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_classifier.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_collection_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_config.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_config_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_corpus.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_doc_indexer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_doc_indexer_hash_sync.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_doc_indexer_pagination.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_doctor_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_doctor_integrity.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_e2e.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_enrich_command.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_exporter.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_formatters.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_frecency.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_git_hooks.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_hooks.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_hybrid_boost.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_lock.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_pdf_batch.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_rdr_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_reminder.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer_chunk_flow.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer_e2e.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer_modules.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_integration.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_jsonl.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_languages.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_local_mode.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_concurrency.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_integration.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_server.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_session.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_md_chunker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_md_chunker_semantic_integrity.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_md_preservation.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_memory.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_mineru_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_mineru_extractor.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_minified_chunking.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_p0_regressions.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_chunker.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_chunker_integration.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_e2e.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor_integration.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor_normalization.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor_server.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_normalization.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_subsystem.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pipeline_buffer.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pipeline_stages.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_pipeline_version.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_plan_library.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_plugin.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_plugin_install.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_plugin_structure.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_ppid_chain_hypothesis.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_provision.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_rdr052_verification.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_rdr053_verification.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_registry.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_ripgrep_cache.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_schema.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_scoring.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_scratch.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_scratch_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_engine.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_modules.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_snapshot.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_session.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_session_propagation_hypotheses.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_silent_error_logging.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_sn_plugin.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_store_cmd.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_t1.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_t2.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_t2_prefix_scan.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_t3.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_t3_quota_enforcement.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_table_extraction.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_ttl.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_tumbler.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_tuning_config.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_types_and_errors.py +0 -0
- {conexus-3.2.2 → conexus-3.2.3}/tests/test_voyage_retry.py +0 -0
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
"name": "nx",
|
|
10
10
|
"source": "./nx",
|
|
11
11
|
"description": "Self-hosted three-tier knowledge management with 17 specialized agents, analytical query pipelines, semantic search, and RDR decision tracking for Claude Code.",
|
|
12
|
-
"version": "3.2.
|
|
12
|
+
"version": "3.2.3"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "sn",
|
|
16
16
|
"source": "./sn",
|
|
17
17
|
"description": "Injects Serena and Context7 MCP tool usage guidance into subagents via SubagentStart hook.",
|
|
18
|
-
"version": "3.2.
|
|
18
|
+
"version": "3.2.3"
|
|
19
19
|
}
|
|
20
20
|
]
|
|
21
21
|
}
|
|
@@ -6,6 +6,11 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [3.2.3] - 2026-04-07
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- **Pagination completeness** — all list-returning MCP tools and CLI commands now include pagination footers when results are truncated. Tools fixed: `query`, `scratch` (search/list), `plan_search`, `catalog_search`, `catalog_list`, `catalog_link_query`. CLI commands fixed: `nx catalog list`, `nx catalog search`, `nx catalog links`. Docstrings updated to document pagination behavior.
|
|
13
|
+
|
|
9
14
|
## [3.2.2] - 2026-04-07
|
|
10
15
|
|
|
11
16
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: conexus
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: Self-hosted semantic search and knowledge management for LLM-driven development
|
|
5
5
|
Project-URL: Homepage, https://github.com/Hellblazer/nexus
|
|
6
6
|
Project-URL: Repository, https://github.com/Hellblazer/nexus
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nx",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.3",
|
|
4
4
|
"description": "Self-hosted three-tier knowledge management with specialized agents, analytical query pipelines, semantic search, and RDR decision tracking for Claude Code.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Hal Hildebrand",
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "conexus"
|
|
7
|
-
version = "3.2.
|
|
7
|
+
version = "3.2.3"
|
|
8
8
|
description = "Self-hosted semantic search and knowledge management for LLM-driven development"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.12,<3.14"
|
|
@@ -300,23 +300,27 @@ def setup_cmd(remote: str) -> None:
|
|
|
300
300
|
@click.option("--owner", default="")
|
|
301
301
|
@click.option("--type", "content_type", default="")
|
|
302
302
|
@click.option("--limit", "-n", default=50)
|
|
303
|
+
@click.option("--offset", default=0)
|
|
303
304
|
@click.option("--json", "as_json", is_flag=True)
|
|
304
|
-
def list_cmd(owner: str, content_type: str, limit: int, as_json: bool) -> None:
|
|
305
|
+
def list_cmd(owner: str, content_type: str, limit: int, offset: int, as_json: bool) -> None:
|
|
305
306
|
"""List catalog entries."""
|
|
306
307
|
cat = _get_catalog()
|
|
307
308
|
if owner:
|
|
308
309
|
entries = cat.by_owner(Tumbler.parse(owner))
|
|
309
310
|
else:
|
|
310
|
-
entries = cat.all_documents(limit=limit)
|
|
311
|
+
entries = cat.all_documents(limit=limit + offset + 1)
|
|
311
312
|
if content_type:
|
|
312
313
|
entries = [e for e in entries if e.content_type == content_type]
|
|
313
|
-
|
|
314
|
+
total = len(entries)
|
|
315
|
+
entries = entries[offset:offset + limit]
|
|
314
316
|
|
|
315
317
|
if as_json:
|
|
316
318
|
click.echo(json.dumps([_entry_to_dict(e) for e in entries], indent=2))
|
|
317
319
|
else:
|
|
318
320
|
for e in entries:
|
|
319
321
|
click.echo(f"{str(e.tumbler):<12} {e.content_type:<10} {e.title}")
|
|
322
|
+
if offset + limit < total:
|
|
323
|
+
click.echo(f"\n Next page: --offset {offset + limit}")
|
|
320
324
|
|
|
321
325
|
|
|
322
326
|
@catalog.command("show")
|
|
@@ -378,15 +382,18 @@ def show_cmd(tumbler_or_title: str, as_json: bool) -> None:
|
|
|
378
382
|
@catalog.command("search")
|
|
379
383
|
@click.argument("query")
|
|
380
384
|
@click.option("--limit", "-n", default=20)
|
|
385
|
+
@click.option("--offset", default=0)
|
|
381
386
|
@click.option("--json", "as_json", is_flag=True)
|
|
382
|
-
def search_cmd(query: str, limit: int, as_json: bool) -> None:
|
|
387
|
+
def search_cmd(query: str, limit: int, offset: int, as_json: bool) -> None:
|
|
383
388
|
"""Find documents by title, author, corpus, or file path.
|
|
384
389
|
|
|
385
390
|
Uses full-text search across document metadata. Faster than T3 semantic
|
|
386
391
|
search for exact metadata lookups. Returns tumbler, type, and title.
|
|
387
392
|
"""
|
|
388
393
|
cat = _get_catalog()
|
|
389
|
-
|
|
394
|
+
all_results = cat.find(query)
|
|
395
|
+
total = len(all_results)
|
|
396
|
+
results = all_results[offset:offset + limit]
|
|
390
397
|
if as_json:
|
|
391
398
|
click.echo(json.dumps([_entry_to_dict(e) for e in results], indent=2))
|
|
392
399
|
else:
|
|
@@ -395,6 +402,8 @@ def search_cmd(query: str, limit: int, as_json: bool) -> None:
|
|
|
395
402
|
return
|
|
396
403
|
for e in results:
|
|
397
404
|
click.echo(f"{str(e.tumbler):<12} {e.content_type:<10} {e.title}")
|
|
405
|
+
if offset + limit < total:
|
|
406
|
+
click.echo(f"\n Next page: --offset {offset + limit}")
|
|
398
407
|
|
|
399
408
|
|
|
400
409
|
@catalog.command("register", hidden=True)
|
|
@@ -599,8 +608,10 @@ def links_cmd(
|
|
|
599
608
|
links = cat.link_query(
|
|
600
609
|
from_t=resolved_from, to_t=resolved_to,
|
|
601
610
|
link_type=link_type, created_by=created_by,
|
|
602
|
-
limit=limit, offset=offset,
|
|
611
|
+
limit=limit + 1, offset=offset,
|
|
603
612
|
)
|
|
613
|
+
has_more = len(links) > limit
|
|
614
|
+
links = links[:limit]
|
|
604
615
|
if as_json:
|
|
605
616
|
click.echo(json.dumps([_link_to_dict(lnk) for lnk in links], indent=2))
|
|
606
617
|
else:
|
|
@@ -609,6 +620,8 @@ def links_cmd(
|
|
|
609
620
|
return
|
|
610
621
|
for edge in links:
|
|
611
622
|
click.echo(f"{edge.from_tumbler} → {edge.to_tumbler} ({edge.link_type}) by {edge.created_by}")
|
|
623
|
+
if has_more:
|
|
624
|
+
click.echo(f"\n Next page: --offset {offset + limit}")
|
|
612
625
|
|
|
613
626
|
|
|
614
627
|
@catalog.command("link-bulk-delete", hidden=True)
|
|
@@ -391,6 +391,9 @@ def query(
|
|
|
391
391
|
) -> str:
|
|
392
392
|
"""Document-level semantic search for analytical questions.
|
|
393
393
|
|
|
394
|
+
Results are capped at ``limit``. When more documents match, a footer line shows
|
|
395
|
+
the total count. Increase ``limit`` to see more.
|
|
396
|
+
|
|
394
397
|
Unlike ``search`` which returns individual chunks, ``query`` groups results
|
|
395
398
|
by source document and returns the best-matching snippet per document along
|
|
396
399
|
with full metadata (title, year, citations, page count, extraction method).
|
|
@@ -558,7 +561,9 @@ def query(
|
|
|
558
561
|
docs[doc_key]["snippet"] = r.content[:300].replace("\n", " ")
|
|
559
562
|
|
|
560
563
|
# Sort by best match distance, limit
|
|
561
|
-
|
|
564
|
+
all_docs = sorted(docs.values(), key=lambda d: d["distance"])
|
|
565
|
+
sorted_docs = all_docs[:limit]
|
|
566
|
+
total = len(all_docs)
|
|
562
567
|
|
|
563
568
|
header = f"Found {len(sorted_docs)} documents (from {len(results)} chunks across {len(target)} collections)"
|
|
564
569
|
lines: list[str] = [f"{routing_note}\n{header}" if routing_note else header]
|
|
@@ -598,6 +603,9 @@ def query(
|
|
|
598
603
|
lines.append(f" {d['snippet']}")
|
|
599
604
|
lines.append("")
|
|
600
605
|
|
|
606
|
+
if total > limit:
|
|
607
|
+
lines.append(f"\n--- showing 1-{len(sorted_docs)} of {total} documents. Results are capped at limit={limit}.")
|
|
608
|
+
|
|
601
609
|
return "\n".join(lines)
|
|
602
610
|
except Exception as e:
|
|
603
611
|
return f"Error: {e}"
|
|
@@ -936,6 +944,9 @@ def scratch(
|
|
|
936
944
|
) -> str:
|
|
937
945
|
"""T1 session scratch pad — ephemeral within-session storage.
|
|
938
946
|
|
|
947
|
+
For ``search`` and ``list``, results are capped at ``limit``. A footer
|
|
948
|
+
indicates when more entries exist.
|
|
949
|
+
|
|
939
950
|
Args:
|
|
940
951
|
action: One of "put", "search", "list", "get", "delete"
|
|
941
952
|
content: Content to store (for "put")
|
|
@@ -964,17 +975,23 @@ def scratch(
|
|
|
964
975
|
for r in results:
|
|
965
976
|
snippet = r["content"][:200].replace("\n", " ")
|
|
966
977
|
lines.append(f"{prefix}[{r['id'][:12]}] {snippet}")
|
|
978
|
+
if len(results) >= limit:
|
|
979
|
+
lines.append(f"\n--- showing {len(results)} results (limit={limit}). Increase limit to see more.")
|
|
967
980
|
return "\n".join(lines)
|
|
968
981
|
|
|
969
982
|
elif action == "list":
|
|
970
983
|
entries = t1.list_entries()
|
|
971
984
|
if not entries:
|
|
972
985
|
return f"{prefix}No scratch entries."
|
|
986
|
+
total = len(entries)
|
|
987
|
+
entries = entries[:limit]
|
|
973
988
|
lines = []
|
|
974
989
|
for e in entries:
|
|
975
990
|
snippet = e["content"][:80].replace("\n", " ")
|
|
976
991
|
tags_str = f" [{e.get('tags', '')}]" if e.get("tags") else ""
|
|
977
992
|
lines.append(f"{prefix}[{e['id'][:12]}] {snippet}{tags_str}")
|
|
993
|
+
if total > limit:
|
|
994
|
+
lines.append(f"\n--- showing {limit} of {total} entries. Increase limit to see all.")
|
|
978
995
|
return "\n".join(lines)
|
|
979
996
|
|
|
980
997
|
elif action == "get":
|
|
@@ -1159,17 +1176,25 @@ def plan_save(
|
|
|
1159
1176
|
|
|
1160
1177
|
|
|
1161
1178
|
@mcp.tool()
|
|
1162
|
-
def plan_search(query: str, project: str = "", limit: int = 5) -> str:
|
|
1179
|
+
def plan_search(query: str, project: str = "", limit: int = 5, offset: int = 0) -> str:
|
|
1163
1180
|
"""Search the T2 plan library for similar query plans.
|
|
1164
1181
|
|
|
1182
|
+
Results are paged. Response footer shows ``offset=N`` for next page.
|
|
1183
|
+
|
|
1165
1184
|
Args:
|
|
1166
1185
|
query: Search query (matched against plan query text and tags)
|
|
1167
1186
|
project: Optional project filter (e.g. "nexus")
|
|
1168
|
-
limit: Maximum results to return
|
|
1187
|
+
limit: Maximum results to return (default 5)
|
|
1188
|
+
offset: Skip this many results (default 0). Use for pagination.
|
|
1169
1189
|
"""
|
|
1170
1190
|
try:
|
|
1171
1191
|
with _t2_ctx() as db:
|
|
1172
|
-
|
|
1192
|
+
# Over-fetch by 1 to detect if there are more
|
|
1193
|
+
results = db.search_plans(query, limit=limit + 1, project=project)
|
|
1194
|
+
if offset:
|
|
1195
|
+
results = results[offset:]
|
|
1196
|
+
has_more = len(results) > limit
|
|
1197
|
+
results = results[:limit]
|
|
1173
1198
|
if not results:
|
|
1174
1199
|
return "No matching plans."
|
|
1175
1200
|
lines: list[str] = []
|
|
@@ -1180,6 +1205,9 @@ def plan_search(query: str, project: str = "", limit: int = 5) -> str:
|
|
|
1180
1205
|
f" outcome={r['outcome']} tags={r['tags']}\n"
|
|
1181
1206
|
f" plan: {plan_preview}..."
|
|
1182
1207
|
)
|
|
1208
|
+
shown_end = offset + len(results)
|
|
1209
|
+
if has_more:
|
|
1210
|
+
lines.append(f"\n--- showing {offset + 1}-{shown_end}. may have more: offset={shown_end}")
|
|
1183
1211
|
return "\n\n".join(lines)
|
|
1184
1212
|
except Exception as e:
|
|
1185
1213
|
return f"Error: {e}"
|
|
@@ -1205,11 +1233,15 @@ def catalog_search(
|
|
|
1205
1233
|
owner: str = "",
|
|
1206
1234
|
file_path: str = "",
|
|
1207
1235
|
limit: int = 20,
|
|
1236
|
+
offset: int = 0,
|
|
1208
1237
|
) -> list[dict]:
|
|
1209
1238
|
"""Find documents by metadata (title, author, corpus, file path).
|
|
1210
1239
|
|
|
1240
|
+
Results are paged. When results are truncated, a ``_pagination`` entry appears
|
|
1241
|
+
at the end with ``next_offset``. Pass that value as ``offset`` to get the next page.
|
|
1242
|
+
|
|
1211
1243
|
Returns catalog entries with tumbler, physical_collection, and metadata — NOT document
|
|
1212
|
-
content. Use the
|
|
1244
|
+
content. Use the ``search`` tool for semantic content search within collections.
|
|
1213
1245
|
Use catalog_search first to discover WHICH collections to search, then search for content.
|
|
1214
1246
|
|
|
1215
1247
|
Filters: query (free-text), author, corpus, owner, file_path, content_type (exact match).
|
|
@@ -1246,9 +1278,9 @@ def catalog_search(
|
|
|
1246
1278
|
sql = (
|
|
1247
1279
|
"SELECT tumbler, title, author, year, content_type, file_path, "
|
|
1248
1280
|
"corpus, physical_collection, chunk_count, head_hash, indexed_at, metadata "
|
|
1249
|
-
f"FROM documents WHERE {' AND '.join(conditions)} LIMIT ?"
|
|
1281
|
+
f"FROM documents WHERE {' AND '.join(conditions)} LIMIT ? OFFSET ?"
|
|
1250
1282
|
)
|
|
1251
|
-
params.
|
|
1283
|
+
params.extend([limit + 1, offset])
|
|
1252
1284
|
rows = cat._db.execute(sql, params).fetchall()
|
|
1253
1285
|
from nexus.catalog.catalog import CatalogEntry
|
|
1254
1286
|
entries = [
|
|
@@ -1260,7 +1292,12 @@ def catalog_search(
|
|
|
1260
1292
|
)
|
|
1261
1293
|
for r in rows
|
|
1262
1294
|
]
|
|
1263
|
-
|
|
1295
|
+
has_more = len(entries) > limit
|
|
1296
|
+
entries = entries[:limit]
|
|
1297
|
+
result = [_entry_to_dict(e) for e in entries]
|
|
1298
|
+
if has_more:
|
|
1299
|
+
result.append({"_pagination": {"next_offset": offset + limit, "limit": limit}})
|
|
1300
|
+
return result
|
|
1264
1301
|
|
|
1265
1302
|
# FTS5 free-text search (append author to query if both provided)
|
|
1266
1303
|
fts_query = query
|
|
@@ -1268,8 +1305,12 @@ def catalog_search(
|
|
|
1268
1305
|
fts_query = f"{query} {author}"
|
|
1269
1306
|
if not fts_query.strip():
|
|
1270
1307
|
return [{"error": "query or at least one filter required"}]
|
|
1271
|
-
|
|
1272
|
-
|
|
1308
|
+
all_results = cat.find(fts_query, content_type=content_type or None)
|
|
1309
|
+
page = all_results[offset:offset + limit]
|
|
1310
|
+
result = [_entry_to_dict(e) for e in page]
|
|
1311
|
+
if offset + limit < len(all_results):
|
|
1312
|
+
result.append({"_pagination": {"next_offset": offset + limit, "limit": limit}})
|
|
1313
|
+
return result
|
|
1273
1314
|
except Exception as e:
|
|
1274
1315
|
return [{"error": str(e)}]
|
|
1275
1316
|
|
|
@@ -1315,7 +1356,10 @@ def catalog_list(
|
|
|
1315
1356
|
limit: int = 50,
|
|
1316
1357
|
offset: int = 0,
|
|
1317
1358
|
) -> list[dict]:
|
|
1318
|
-
"""List catalog entries with optional filters.
|
|
1359
|
+
"""List catalog entries with optional filters.
|
|
1360
|
+
|
|
1361
|
+
Results are paged. When truncated, a ``_pagination`` entry appears at the end
|
|
1362
|
+
with ``next_offset``. Pass that as ``offset`` to get the next page."""
|
|
1319
1363
|
cat, err = _require_catalog()
|
|
1320
1364
|
if err:
|
|
1321
1365
|
return [{"error": err}]
|
|
@@ -1347,7 +1391,11 @@ def catalog_list(
|
|
|
1347
1391
|
]
|
|
1348
1392
|
if content_type:
|
|
1349
1393
|
entries = [e for e in entries if e.content_type == content_type]
|
|
1350
|
-
|
|
1394
|
+
page = entries[:limit]
|
|
1395
|
+
result = [_entry_to_dict(e) for e in page]
|
|
1396
|
+
if len(entries) > limit:
|
|
1397
|
+
result.append({"_pagination": {"next_offset": offset + limit, "limit": limit}})
|
|
1398
|
+
return result
|
|
1351
1399
|
except Exception as e:
|
|
1352
1400
|
return [{"error": str(e)}]
|
|
1353
1401
|
|
|
@@ -1592,6 +1640,9 @@ def catalog_link_query(
|
|
|
1592
1640
|
) -> list[dict]:
|
|
1593
1641
|
"""Query links by any combination of filters. For admin/audit use.
|
|
1594
1642
|
|
|
1643
|
+
Results are paged. When truncated, a ``_pagination`` entry appears at the end
|
|
1644
|
+
with ``next_offset``. Pass that as ``offset`` to get the next page.
|
|
1645
|
+
|
|
1595
1646
|
NOT a query-planner step — use catalog_links for graph traversal.
|
|
1596
1647
|
Use for: audit by creator, find all links of a type, count generator output.
|
|
1597
1648
|
created_at_before: ISO timestamp — only links created before this time.
|
|
@@ -1606,9 +1657,14 @@ def catalog_link_query(
|
|
|
1606
1657
|
from_t=from_tumbler, to_t=to_tumbler, link_type=link_type,
|
|
1607
1658
|
created_by=created_by, direction=direction, tumbler=tumbler,
|
|
1608
1659
|
created_at_before=created_at_before,
|
|
1609
|
-
limit=limit, offset=offset,
|
|
1660
|
+
limit=limit + 1, offset=offset,
|
|
1610
1661
|
)
|
|
1611
|
-
|
|
1662
|
+
has_more = len(links) > limit
|
|
1663
|
+
links = links[:limit]
|
|
1664
|
+
result = [_link_to_dict(l) for l in links]
|
|
1665
|
+
if has_more:
|
|
1666
|
+
result.append({"_pagination": {"next_offset": offset + limit, "limit": limit}})
|
|
1667
|
+
return result
|
|
1612
1668
|
except Exception as e:
|
|
1613
1669
|
return [{"error": str(e)}]
|
|
1614
1670
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/014-knowledge-base-retrieval-quality.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
|