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.
Files changed (427) hide show
  1. {conexus-3.2.2 → conexus-3.2.3}/.claude-plugin/marketplace.json +2 -2
  2. {conexus-3.2.2 → conexus-3.2.3}/CHANGELOG.md +5 -0
  3. {conexus-3.2.2 → conexus-3.2.3}/PKG-INFO +1 -1
  4. {conexus-3.2.2 → conexus-3.2.3}/nx/.claude-plugin/plugin.json +1 -1
  5. {conexus-3.2.2 → conexus-3.2.3}/nx/CHANGELOG.md +4 -0
  6. {conexus-3.2.2 → conexus-3.2.3}/pyproject.toml +1 -1
  7. {conexus-3.2.2 → conexus-3.2.3}/sn/.claude-plugin/plugin.json +1 -1
  8. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/catalog.py +19 -6
  9. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/mcp_server.py +70 -14
  10. {conexus-3.2.2 → conexus-3.2.3}/uv.lock +1 -1
  11. {conexus-3.2.2 → conexus-3.2.3}/.beads/.gitignore +0 -0
  12. {conexus-3.2.2 → conexus-3.2.3}/.beads/README.md +0 -0
  13. {conexus-3.2.2 → conexus-3.2.3}/.beads/config.yaml +0 -0
  14. {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/post-checkout +0 -0
  15. {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/post-merge +0 -0
  16. {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/pre-commit +0 -0
  17. {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/pre-push +0 -0
  18. {conexus-3.2.2 → conexus-3.2.3}/.beads/hooks/prepare-commit-msg +0 -0
  19. {conexus-3.2.2 → conexus-3.2.3}/.beads/interactions.jsonl +0 -0
  20. {conexus-3.2.2 → conexus-3.2.3}/.beads/issues.jsonl +0 -0
  21. {conexus-3.2.2 → conexus-3.2.3}/.beads/metadata.json +0 -0
  22. {conexus-3.2.2 → conexus-3.2.3}/.claude/skills/release.md +0 -0
  23. {conexus-3.2.2 → conexus-3.2.3}/.devcontainer/Dockerfile +0 -0
  24. {conexus-3.2.2 → conexus-3.2.3}/.devcontainer/devcontainer.json +0 -0
  25. {conexus-3.2.2 → conexus-3.2.3}/.dockerignore +0 -0
  26. {conexus-3.2.2 → conexus-3.2.3}/.env.example +0 -0
  27. {conexus-3.2.2 → conexus-3.2.3}/.gitattributes +0 -0
  28. {conexus-3.2.2 → conexus-3.2.3}/.github/workflows/ci.yml +0 -0
  29. {conexus-3.2.2 → conexus-3.2.3}/.github/workflows/release.yml +0 -0
  30. {conexus-3.2.2 → conexus-3.2.3}/.gitignore +0 -0
  31. {conexus-3.2.2 → conexus-3.2.3}/.markdownlint.json +0 -0
  32. {conexus-3.2.2 → conexus-3.2.3}/AGENTS.md +0 -0
  33. {conexus-3.2.2 → conexus-3.2.3}/CLAUDE.md +0 -0
  34. {conexus-3.2.2 → conexus-3.2.3}/Formula/nx.rb +0 -0
  35. {conexus-3.2.2 → conexus-3.2.3}/LICENSE +0 -0
  36. {conexus-3.2.2 → conexus-3.2.3}/README.md +0 -0
  37. {conexus-3.2.2 → conexus-3.2.3}/docs/README.md +0 -0
  38. {conexus-3.2.2 → conexus-3.2.3}/docs/architecture.md +0 -0
  39. {conexus-3.2.2 → conexus-3.2.3}/docs/catalog.md +0 -0
  40. {conexus-3.2.2 → conexus-3.2.3}/docs/cli-reference.md +0 -0
  41. {conexus-3.2.2 → conexus-3.2.3}/docs/configuration.md +0 -0
  42. {conexus-3.2.2 → conexus-3.2.3}/docs/contributing.md +0 -0
  43. {conexus-3.2.2 → conexus-3.2.3}/docs/getting-started.md +0 -0
  44. {conexus-3.2.2 → conexus-3.2.3}/docs/historical.md +0 -0
  45. {conexus-3.2.2 → conexus-3.2.3}/docs/memory-and-tasks.md +0 -0
  46. {conexus-3.2.2 → conexus-3.2.3}/docs/postmortem/2026-03-23-pdf-index-collection-mismatch.md +0 -0
  47. {conexus-3.2.2 → conexus-3.2.3}/docs/postmortem/2026-03-24-pdf-index-fix-not-applied.md +0 -0
  48. {conexus-3.2.2 → conexus-3.2.3}/docs/querying-guide.md +0 -0
  49. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/README.md +0 -0
  50. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/001-rdr-process-validation.md +0 -0
  51. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/002-t2-status-synchronization.md +0 -0
  52. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/010-t1-http-server.md +0 -0
  53. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/011-pdf-ingest-test-coverage.md +0 -0
  54. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/012-pdfplumber-extraction-tier.md +0 -0
  55. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/014-knowledge-base-retrieval-quality.md +0 -0
  56. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/015-indexing-pipeline-rethink.md +0 -0
  57. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/016-ast-chunk-line-range-bug.md +0 -0
  58. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/017-indexing-progress-reporting.md +0 -0
  59. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/018-replace-serve-with-git-hooks.md +0 -0
  60. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/023-agent-tool-permissions-audit.md +0 -0
  61. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/024-rdr-process-guardrails.md +0 -0
  62. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/028-language-registry-unification.md +0 -0
  63. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/029-pipeline-versioning.md +0 -0
  64. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/049-git-backed-catalog.md +0 -0
  65. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/050-catalog-query-integration.md +0 -0
  66. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/051-link-lifecycle.md +0 -0
  67. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/052-catalog-first-query-routing.md +0 -0
  68. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/053-xanadu-fidelity.md +0 -0
  69. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/post-mortem/cce-query-model-mismatch.md +0 -0
  70. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-001-rdr-process-validation.md +0 -0
  71. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-002-t2-status-synchronization.md +0 -0
  72. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-004-four-store-architecture.md +0 -0
  73. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-005-chromadb-cloud-quota-enforcement.md +0 -0
  74. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-006-chunk-size-configuration.md +0 -0
  75. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-007-claude-adoption-session-context-and-search-guidance.md +0 -0
  76. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-008-nx-workflow-integration.md +0 -0
  77. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-009-remove-agentic-and-answer-flags.md +0 -0
  78. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-010-t1-scratch-persistent-bounded-store.md +0 -0
  79. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-011-pdf-ingest-test-coverage.md +0 -0
  80. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-012-pdfplumber-extraction-tier.md +0 -0
  81. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-013-remove-nx-pm-layer.md +0 -0
  82. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-014-knowledge-base-retrieval-quality.md +0 -0
  83. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-015-indexing-pipeline-rethink.md +0 -0
  84. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-016-ast-chunk-line-range-bug.md +0 -0
  85. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-017-indexing-progress-reporting.md +0 -0
  86. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-018-replace-serve-with-git-hooks.md +0 -0
  87. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-019-chromadb-transient-retry.md +0 -0
  88. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-020-voyage-chromadb-read-timeout.md +0 -0
  89. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-021-docling-pdf-extraction.md +0 -0
  90. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-022-memory-delete-command.md +0 -0
  91. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-023-agent-tool-permissions-audit.md +0 -0
  92. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-024-rdr-process-guardrails.md +0 -0
  93. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-025-language-agnostic-agents.md +0 -0
  94. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-026-hybrid-search-fusion.md +0 -0
  95. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-027-search-results-ux.md +0 -0
  96. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-028-code-search-recall.md +0 -0
  97. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-029-pipeline-versioning.md +0 -0
  98. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-030-reliability-hardening.md +0 -0
  99. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-031-collection-portability.md +0 -0
  100. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-032-indexer-decomposition.md +0 -0
  101. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-033-pdf-agent-nx-index-alignment.md +0 -0
  102. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-034-mcp-server-agent-storage.md +0 -0
  103. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-035-plugin-agent-mcp-tool-access.md +0 -0
  104. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-036-post-accept-planning-workflow.md +0 -0
  105. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-037-t3-database-consolidation.md +0 -0
  106. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-038-local-t3-backend.md +0 -0
  107. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-039-claude-code-framework-alignment.md +0 -0
  108. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-040-cce-postmortem-gaps-mcp-enhancement.md +0 -0
  109. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-040-developer-agent-circuit-breaker.md +0 -0
  110. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-041-t1-scratch-inter-agent-context.md +0 -0
  111. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-042-agenticscholar-enhancements.md +0 -0
  112. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-043-plan-enricher-scope.md +0 -0
  113. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-044-math-aware-pdf-extraction.md +0 -0
  114. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-045-post-implementation-verification.md +0 -0
  115. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-046-mineru-server-backed-extraction.md +0 -0
  116. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-047-large-pdf-extraction-resilience.md +0 -0
  117. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-048-streaming-pdf-pipeline.md +0 -0
  118. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-049-consolidation-plan.md +0 -0
  119. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-049-git-backed-catalog.md +0 -0
  120. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-050-knowledge-graph-query-planning.md +0 -0
  121. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-051-link-lifecycle.md +0 -0
  122. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-052-catalog-first-query-routing.md +0 -0
  123. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr/rdr-053-xanadu-fidelity.md +0 -0
  124. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-nexus-integration.md +0 -0
  125. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-overview.md +0 -0
  126. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-templates.md +0 -0
  127. {conexus-3.2.2 → conexus-3.2.3}/docs/rdr-workflow.md +0 -0
  128. {conexus-3.2.2 → conexus-3.2.3}/docs/repo-indexing.md +0 -0
  129. {conexus-3.2.2 → conexus-3.2.3}/docs/storage-tiers.md +0 -0
  130. {conexus-3.2.2 → conexus-3.2.3}/docs/xanadu-in-nexus.md +0 -0
  131. {conexus-3.2.2 → conexus-3.2.3}/nx/.mcp.json +0 -0
  132. {conexus-3.2.2 → conexus-3.2.3}/nx/README.md +0 -0
  133. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/CONTEXT_PROTOCOL.md +0 -0
  134. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/ERROR_HANDLING.md +0 -0
  135. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/MAINTENANCE.md +0 -0
  136. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/README.md +0 -0
  137. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/_shared/RELAY_TEMPLATE.md +0 -0
  138. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/analytical-operator.md +0 -0
  139. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/architect-planner.md +0 -0
  140. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/code-review-expert.md +0 -0
  141. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/codebase-deep-analyzer.md +0 -0
  142. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/debugger.md +0 -0
  143. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/deep-analyst.md +0 -0
  144. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/deep-research-synthesizer.md +0 -0
  145. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/developer.md +0 -0
  146. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/knowledge-tidier.md +0 -0
  147. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/orchestrator.md +0 -0
  148. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/pdf-chromadb-processor.md +0 -0
  149. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/plan-auditor.md +0 -0
  150. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/plan-enricher.md +0 -0
  151. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/query-planner.md +0 -0
  152. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/strategic-planner.md +0 -0
  153. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/substantive-critic.md +0 -0
  154. {conexus-3.2.2 → conexus-3.2.3}/nx/agents/test-validator.md +0 -0
  155. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/analyze-code.md +0 -0
  156. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/architecture.md +0 -0
  157. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/create-plan.md +0 -0
  158. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/debug.md +0 -0
  159. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/deep-analysis.md +0 -0
  160. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/enrich-plan.md +0 -0
  161. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/implement.md +0 -0
  162. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/knowledge-tidy.md +0 -0
  163. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/nx-preflight.md +0 -0
  164. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/pdf-process.md +0 -0
  165. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/plan-audit.md +0 -0
  166. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-accept.md +0 -0
  167. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-close.md +0 -0
  168. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-create.md +0 -0
  169. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-gate.md +0 -0
  170. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-list.md +0 -0
  171. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-research.md +0 -0
  172. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/rdr-show.md +0 -0
  173. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/research.md +0 -0
  174. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/review-code.md +0 -0
  175. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/substantive-critique.md +0 -0
  176. {conexus-3.2.2 → conexus-3.2.3}/nx/commands/test-validate.md +0 -0
  177. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/hooks.json +0 -0
  178. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/auto-approve-nx-mcp.sh +0 -0
  179. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/post_compact_hook.sh +0 -0
  180. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/pre_close_verification_hook.sh +0 -0
  181. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/rdr_hook.py +0 -0
  182. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/read_verification_config.py +0 -0
  183. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/session_start_hook.py +0 -0
  184. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/stop_failure_hook.py +0 -0
  185. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/stop_verification_hook.sh +0 -0
  186. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/subagent-start.sh +0 -0
  187. {conexus-3.2.2 → conexus-3.2.3}/nx/hooks/scripts/t2_prefix_scan.py +0 -0
  188. {conexus-3.2.2 → conexus-3.2.3}/nx/registry.yaml +0 -0
  189. {conexus-3.2.2 → conexus-3.2.3}/nx/resources/rdr/README-TEMPLATE.md +0 -0
  190. {conexus-3.2.2 → conexus-3.2.3}/nx/resources/rdr/TEMPLATE.md +0 -0
  191. {conexus-3.2.2 → conexus-3.2.3}/nx/resources/rdr/post-mortem/TEMPLATE.md +0 -0
  192. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/architecture/SKILL.md +0 -0
  193. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/brainstorming-gate/SKILL.md +0 -0
  194. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/cli-controller/SKILL.md +0 -0
  195. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/code-review/SKILL.md +0 -0
  196. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/codebase-analysis/SKILL.md +0 -0
  197. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/debugging/SKILL.md +0 -0
  198. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/deep-analysis/SKILL.md +0 -0
  199. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/development/SKILL.md +0 -0
  200. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/enrich-plan/SKILL.md +0 -0
  201. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/finishing-branch/SKILL.md +0 -0
  202. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/git-worktrees/SKILL.md +0 -0
  203. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/knowledge-tidying/SKILL.md +0 -0
  204. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/nexus/SKILL.md +0 -0
  205. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/nexus/reference.md +0 -0
  206. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/orchestration/SKILL.md +0 -0
  207. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/pdf-processing/SKILL.md +0 -0
  208. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/plan-validation/SKILL.md +0 -0
  209. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/query/SKILL.md +0 -0
  210. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-accept/SKILL.md +0 -0
  211. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-close/SKILL.md +0 -0
  212. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-create/SKILL.md +0 -0
  213. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-gate/SKILL.md +0 -0
  214. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-list/SKILL.md +0 -0
  215. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-research/SKILL.md +0 -0
  216. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/rdr-show/SKILL.md +0 -0
  217. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/receiving-review/SKILL.md +0 -0
  218. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/research-synthesis/SKILL.md +0 -0
  219. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/serena-code-nav/SKILL.md +0 -0
  220. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/strategic-planning/SKILL.md +0 -0
  221. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/substantive-critique/SKILL.md +0 -0
  222. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/test-validation/SKILL.md +0 -0
  223. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/using-nx-skills/SKILL.md +0 -0
  224. {conexus-3.2.2 → conexus-3.2.3}/nx/skills/writing-nx-skills/SKILL.md +0 -0
  225. {conexus-3.2.2 → conexus-3.2.3}/scripts/reinstall-tool.sh +0 -0
  226. {conexus-3.2.2 → conexus-3.2.3}/sn/.mcp.json +0 -0
  227. {conexus-3.2.2 → conexus-3.2.3}/sn/README.md +0 -0
  228. {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/hooks.json +0 -0
  229. {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/scripts/auto-approve-sn-mcp.sh +0 -0
  230. {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/scripts/mcp-inject.sh +0 -0
  231. {conexus-3.2.2 → conexus-3.2.3}/sn/hooks/scripts/session-start.sh +0 -0
  232. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/__init__.py +0 -0
  233. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/bib_enricher.py +0 -0
  234. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/__init__.py +0 -0
  235. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/auto_linker.py +0 -0
  236. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/catalog.py +0 -0
  237. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/catalog_db.py +0 -0
  238. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/consolidation.py +0 -0
  239. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/link_generator.py +0 -0
  240. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/catalog/tumbler.py +0 -0
  241. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/checkpoint.py +0 -0
  242. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/chunker.py +0 -0
  243. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/classifier.py +0 -0
  244. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/cli.py +0 -0
  245. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/code_indexer.py +0 -0
  246. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/__init__.py +0 -0
  247. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/_helpers.py +0 -0
  248. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/_provision.py +0 -0
  249. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/collection.py +0 -0
  250. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/config_cmd.py +0 -0
  251. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/doctor.py +0 -0
  252. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/enrich.py +0 -0
  253. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/hook.py +0 -0
  254. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/hooks.py +0 -0
  255. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/index.py +0 -0
  256. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/memory.py +0 -0
  257. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/mineru.py +0 -0
  258. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/scratch.py +0 -0
  259. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/search_cmd.py +0 -0
  260. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/commands/store.py +0 -0
  261. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/config.py +0 -0
  262. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/corpus.py +0 -0
  263. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/__init__.py +0 -0
  264. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/chroma_quotas.py +0 -0
  265. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/local_ef.py +0 -0
  266. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/t1.py +0 -0
  267. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/t2.py +0 -0
  268. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/db/t3.py +0 -0
  269. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/doc_indexer.py +0 -0
  270. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/errors.py +0 -0
  271. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/exporter.py +0 -0
  272. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/formatters.py +0 -0
  273. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/frecency.py +0 -0
  274. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/hooks.py +0 -0
  275. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/index_context.py +0 -0
  276. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/indexer.py +0 -0
  277. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/indexer_utils.py +0 -0
  278. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/languages.py +0 -0
  279. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/md_chunker.py +0 -0
  280. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pdf_chunker.py +0 -0
  281. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pdf_extractor.py +0 -0
  282. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pipeline_buffer.py +0 -0
  283. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/pipeline_stages.py +0 -0
  284. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/prose_indexer.py +0 -0
  285. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/registry.py +0 -0
  286. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/retry.py +0 -0
  287. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/ripgrep_cache.py +0 -0
  288. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/scoring.py +0 -0
  289. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/search_engine.py +0 -0
  290. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/session.py +0 -0
  291. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/ttl.py +0 -0
  292. {conexus-3.2.2 → conexus-3.2.3}/src/nexus/types.py +0 -0
  293. {conexus-3.2.2 → conexus-3.2.3}/tests/__init__.py +0 -0
  294. {conexus-3.2.2 → conexus-3.2.3}/tests/__snapshots__/test_search_snapshot.ambr +0 -0
  295. {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/__init__.py +0 -0
  296. {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/corpus.json +0 -0
  297. {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/queries.json +0 -0
  298. {conexus-3.2.2 → conexus-3.2.3}/tests/benchmarks/test_retrieval_ndcg.py +0 -0
  299. {conexus-3.2.2 → conexus-3.2.3}/tests/conftest.py +0 -0
  300. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/auth-login.sh +0 -0
  301. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/lib.sh +0 -0
  302. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/run.sh +0 -0
  303. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/sandbox.sh +0 -0
  304. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/00_debug_load.sh +0 -0
  305. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/01_smoke.sh +0 -0
  306. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/02_sequential_thinking.sh +0 -0
  307. {conexus-3.2.2 → conexus-3.2.3}/tests/e2e/scenarios/03_skills.sh +0 -0
  308. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/__init__.py +0 -0
  309. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_permission_request_hooks.py +0 -0
  310. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_post_compact_hook.py +0 -0
  311. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_pre_close_verification_hook.py +0 -0
  312. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_read_verification_config.py +0 -0
  313. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_stop_failure_hook.py +0 -0
  314. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_stop_verification_hook.py +0 -0
  315. {conexus-3.2.2 → conexus-3.2.3}/tests/hooks/test_verification_integration.py +0 -0
  316. {conexus-3.2.2 → conexus-3.2.3}/tests/test_ast_languages.py +0 -0
  317. {conexus-3.2.2 → conexus-3.2.3}/tests/test_auto_linker.py +0 -0
  318. {conexus-3.2.2 → conexus-3.2.3}/tests/test_backfill_hash.py +0 -0
  319. {conexus-3.2.2 → conexus-3.2.3}/tests/test_bib_enricher.py +0 -0
  320. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog.py +0 -0
  321. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_backfill.py +0 -0
  322. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_cli.py +0 -0
  323. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_consolidation.py +0 -0
  324. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_db.py +0 -0
  325. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_e2e.py +0 -0
  326. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_git.py +0 -0
  327. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_indexer_hook.py +0 -0
  328. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_jsonl.py +0 -0
  329. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_knowledge_hook.py +0 -0
  330. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_link_generation.py +0 -0
  331. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_links.py +0 -0
  332. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_mcp.py +0 -0
  333. {conexus-3.2.2 → conexus-3.2.3}/tests/test_catalog_pdf_hook.py +0 -0
  334. {conexus-3.2.2 → conexus-3.2.3}/tests/test_checkpoint.py +0 -0
  335. {conexus-3.2.2 → conexus-3.2.3}/tests/test_chroma_quotas.py +0 -0
  336. {conexus-3.2.2 → conexus-3.2.3}/tests/test_chroma_retry.py +0 -0
  337. {conexus-3.2.2 → conexus-3.2.3}/tests/test_chunker.py +0 -0
  338. {conexus-3.2.2 → conexus-3.2.3}/tests/test_chunker_ast_languages.py +0 -0
  339. {conexus-3.2.2 → conexus-3.2.3}/tests/test_classifier.py +0 -0
  340. {conexus-3.2.2 → conexus-3.2.3}/tests/test_collection_cmd.py +0 -0
  341. {conexus-3.2.2 → conexus-3.2.3}/tests/test_config.py +0 -0
  342. {conexus-3.2.2 → conexus-3.2.3}/tests/test_config_cmd.py +0 -0
  343. {conexus-3.2.2 → conexus-3.2.3}/tests/test_corpus.py +0 -0
  344. {conexus-3.2.2 → conexus-3.2.3}/tests/test_doc_indexer.py +0 -0
  345. {conexus-3.2.2 → conexus-3.2.3}/tests/test_doc_indexer_hash_sync.py +0 -0
  346. {conexus-3.2.2 → conexus-3.2.3}/tests/test_doc_indexer_pagination.py +0 -0
  347. {conexus-3.2.2 → conexus-3.2.3}/tests/test_doctor_cmd.py +0 -0
  348. {conexus-3.2.2 → conexus-3.2.3}/tests/test_doctor_integrity.py +0 -0
  349. {conexus-3.2.2 → conexus-3.2.3}/tests/test_e2e.py +0 -0
  350. {conexus-3.2.2 → conexus-3.2.3}/tests/test_enrich_command.py +0 -0
  351. {conexus-3.2.2 → conexus-3.2.3}/tests/test_exporter.py +0 -0
  352. {conexus-3.2.2 → conexus-3.2.3}/tests/test_formatters.py +0 -0
  353. {conexus-3.2.2 → conexus-3.2.3}/tests/test_frecency.py +0 -0
  354. {conexus-3.2.2 → conexus-3.2.3}/tests/test_git_hooks.py +0 -0
  355. {conexus-3.2.2 → conexus-3.2.3}/tests/test_hooks.py +0 -0
  356. {conexus-3.2.2 → conexus-3.2.3}/tests/test_hybrid_boost.py +0 -0
  357. {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_cmd.py +0 -0
  358. {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_lock.py +0 -0
  359. {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_pdf_batch.py +0 -0
  360. {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_rdr_cmd.py +0 -0
  361. {conexus-3.2.2 → conexus-3.2.3}/tests/test_index_reminder.py +0 -0
  362. {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer.py +0 -0
  363. {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer_chunk_flow.py +0 -0
  364. {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer_e2e.py +0 -0
  365. {conexus-3.2.2 → conexus-3.2.3}/tests/test_indexer_modules.py +0 -0
  366. {conexus-3.2.2 → conexus-3.2.3}/tests/test_integration.py +0 -0
  367. {conexus-3.2.2 → conexus-3.2.3}/tests/test_jsonl.py +0 -0
  368. {conexus-3.2.2 → conexus-3.2.3}/tests/test_languages.py +0 -0
  369. {conexus-3.2.2 → conexus-3.2.3}/tests/test_local_mode.py +0 -0
  370. {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_concurrency.py +0 -0
  371. {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_integration.py +0 -0
  372. {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_server.py +0 -0
  373. {conexus-3.2.2 → conexus-3.2.3}/tests/test_mcp_session.py +0 -0
  374. {conexus-3.2.2 → conexus-3.2.3}/tests/test_md_chunker.py +0 -0
  375. {conexus-3.2.2 → conexus-3.2.3}/tests/test_md_chunker_semantic_integrity.py +0 -0
  376. {conexus-3.2.2 → conexus-3.2.3}/tests/test_md_preservation.py +0 -0
  377. {conexus-3.2.2 → conexus-3.2.3}/tests/test_memory.py +0 -0
  378. {conexus-3.2.2 → conexus-3.2.3}/tests/test_mineru_cmd.py +0 -0
  379. {conexus-3.2.2 → conexus-3.2.3}/tests/test_mineru_extractor.py +0 -0
  380. {conexus-3.2.2 → conexus-3.2.3}/tests/test_minified_chunking.py +0 -0
  381. {conexus-3.2.2 → conexus-3.2.3}/tests/test_p0_regressions.py +0 -0
  382. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_chunker.py +0 -0
  383. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_chunker_integration.py +0 -0
  384. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_e2e.py +0 -0
  385. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor.py +0 -0
  386. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor_integration.py +0 -0
  387. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor_normalization.py +0 -0
  388. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_extractor_server.py +0 -0
  389. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_normalization.py +0 -0
  390. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pdf_subsystem.py +0 -0
  391. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pipeline_buffer.py +0 -0
  392. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pipeline_stages.py +0 -0
  393. {conexus-3.2.2 → conexus-3.2.3}/tests/test_pipeline_version.py +0 -0
  394. {conexus-3.2.2 → conexus-3.2.3}/tests/test_plan_library.py +0 -0
  395. {conexus-3.2.2 → conexus-3.2.3}/tests/test_plugin.py +0 -0
  396. {conexus-3.2.2 → conexus-3.2.3}/tests/test_plugin_install.py +0 -0
  397. {conexus-3.2.2 → conexus-3.2.3}/tests/test_plugin_structure.py +0 -0
  398. {conexus-3.2.2 → conexus-3.2.3}/tests/test_ppid_chain_hypothesis.py +0 -0
  399. {conexus-3.2.2 → conexus-3.2.3}/tests/test_provision.py +0 -0
  400. {conexus-3.2.2 → conexus-3.2.3}/tests/test_rdr052_verification.py +0 -0
  401. {conexus-3.2.2 → conexus-3.2.3}/tests/test_rdr053_verification.py +0 -0
  402. {conexus-3.2.2 → conexus-3.2.3}/tests/test_registry.py +0 -0
  403. {conexus-3.2.2 → conexus-3.2.3}/tests/test_ripgrep_cache.py +0 -0
  404. {conexus-3.2.2 → conexus-3.2.3}/tests/test_schema.py +0 -0
  405. {conexus-3.2.2 → conexus-3.2.3}/tests/test_scoring.py +0 -0
  406. {conexus-3.2.2 → conexus-3.2.3}/tests/test_scratch.py +0 -0
  407. {conexus-3.2.2 → conexus-3.2.3}/tests/test_scratch_cmd.py +0 -0
  408. {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_cmd.py +0 -0
  409. {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_engine.py +0 -0
  410. {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_modules.py +0 -0
  411. {conexus-3.2.2 → conexus-3.2.3}/tests/test_search_snapshot.py +0 -0
  412. {conexus-3.2.2 → conexus-3.2.3}/tests/test_session.py +0 -0
  413. {conexus-3.2.2 → conexus-3.2.3}/tests/test_session_propagation_hypotheses.py +0 -0
  414. {conexus-3.2.2 → conexus-3.2.3}/tests/test_silent_error_logging.py +0 -0
  415. {conexus-3.2.2 → conexus-3.2.3}/tests/test_sn_plugin.py +0 -0
  416. {conexus-3.2.2 → conexus-3.2.3}/tests/test_store_cmd.py +0 -0
  417. {conexus-3.2.2 → conexus-3.2.3}/tests/test_t1.py +0 -0
  418. {conexus-3.2.2 → conexus-3.2.3}/tests/test_t2.py +0 -0
  419. {conexus-3.2.2 → conexus-3.2.3}/tests/test_t2_prefix_scan.py +0 -0
  420. {conexus-3.2.2 → conexus-3.2.3}/tests/test_t3.py +0 -0
  421. {conexus-3.2.2 → conexus-3.2.3}/tests/test_t3_quota_enforcement.py +0 -0
  422. {conexus-3.2.2 → conexus-3.2.3}/tests/test_table_extraction.py +0 -0
  423. {conexus-3.2.2 → conexus-3.2.3}/tests/test_ttl.py +0 -0
  424. {conexus-3.2.2 → conexus-3.2.3}/tests/test_tumbler.py +0 -0
  425. {conexus-3.2.2 → conexus-3.2.3}/tests/test_tuning_config.py +0 -0
  426. {conexus-3.2.2 → conexus-3.2.3}/tests/test_types_and_errors.py +0 -0
  427. {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.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.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.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.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",
@@ -6,6 +6,10 @@ 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
+ Plugin version aligned with Nexus CLI 3.2.3. No plugin-level functional changes.
12
+
9
13
  ## [3.2.2] - 2026-04-07
10
14
 
11
15
  ### Fixed
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "conexus"
7
- version = "3.2.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"
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "sn",
3
- "version": "3.2.2",
3
+ "version": "3.2.3",
4
4
  "description": "Injects Serena and Context7 MCP tool usage guidance into subagents via SubagentStart hook."
5
5
  }
@@ -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
- entries = entries[:limit]
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
- results = cat.find(query)[:limit]
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
- sorted_docs = sorted(docs.values(), key=lambda d: d["distance"])[:limit]
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
- results = db.search_plans(query, limit=limit, project=project)
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 `search` tool for semantic content search within collections.
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.append(limit)
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
- return [_entry_to_dict(e) for e in entries]
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
- results = cat.find(fts_query, content_type=content_type or None)[:limit]
1272
- return [_entry_to_dict(e) for e in results]
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
- return [_entry_to_dict(e) for e in entries[:limit]]
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
- return [_link_to_dict(l) for l in links]
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
 
@@ -673,7 +673,7 @@ wheels = [
673
673
 
674
674
  [[package]]
675
675
  name = "conexus"
676
- version = "3.2.2"
676
+ version = "3.2.3"
677
677
  source = { editable = "." }
678
678
  dependencies = [
679
679
  { name = "chromadb" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes