claude-code-conductor 2.36.0__tar.gz → 2.37.0__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 (205) hide show
  1. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/recall_autorebuild.py +5 -2
  2. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/recall_inject.py +1 -1
  3. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/recall/SKILL.md +1 -1
  4. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/ARCHITECTURE.md +2 -2
  5. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/CHANGELOG.md +14 -0
  6. claude_code_conductor-2.37.0/LICENSES/numpy-LICENSE +32 -0
  7. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/PKG-INFO +5 -5
  8. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/README.md +3 -3
  9. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/pyproject.toml +1 -1
  10. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/__init__.py +1 -1
  11. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_recall.py +18 -7
  12. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/recall_index.py +171 -228
  13. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_recall_index.py +325 -332
  14. claude_code_conductor-2.36.0/LICENSES/chroma-hnswlib-LICENSE +0 -184
  15. claude_code_conductor-2.36.0/LICENSES/chroma-hnswlib-NOTICE +0 -9
  16. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/CLAUDE.md +0 -0
  17. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/architect.md +0 -0
  18. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/code-reviewer.md +0 -0
  19. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/design-critic.md +0 -0
  20. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/developer.md +0 -0
  21. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/doc-writer.md +0 -0
  22. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/interviewer.md +0 -0
  23. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/planner.md +0 -0
  24. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/project-setup.md +0 -0
  25. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/security-reviewer.md +0 -0
  26. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/systematic-debugger.md +0 -0
  27. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/tester.md +0 -0
  28. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/wt_developer.md +0 -0
  29. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  30. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/agents/wt_tester.md +0 -0
  31. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/breaking-changes.txt +0 -0
  32. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/deletions.txt +0 -0
  33. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/docs/config-policy.md +0 -0
  34. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/docs/parallel-agents-setup.md +0 -0
  35. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/docs/platform-adapters.md +0 -0
  36. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/docs/settings.json.md +0 -0
  37. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/_hook_utils.py +0 -0
  38. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/check_agent_invocation.py +0 -0
  39. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/consolidate_memory.py +0 -0
  40. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/permission_handler.py +0 -0
  41. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/permission_handler_toast.py +0 -0
  42. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/planner_check.py +0 -0
  43. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/post_tool.py +0 -0
  44. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/pre_compact.py +0 -0
  45. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/pre_tool.py +0 -0
  46. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/restore_session.py +0 -0
  47. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/select_tier.py +0 -0
  48. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/session_start.py +0 -0
  49. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/session_stop.py +0 -0
  50. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/session_utils.py +0 -0
  51. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/statusline.py +0 -0
  52. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/stop.py +0 -0
  53. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/hooks/worktree_guard.py +0 -0
  54. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/memory/.gitkeep +0 -0
  55. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/permission_rules.json +0 -0
  56. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/rules/promoted/index.md +0 -0
  57. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/settings.json +0 -0
  58. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  59. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/codex-review/SKILL.md +0 -0
  60. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/SKILL.md +0 -0
  61. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  62. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  63. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  64. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  65. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  66. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  67. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  68. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/scripts/record_tier_outcome.py +0 -0
  69. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  70. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/develop/SKILL.md +0 -0
  71. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/doc/SKILL.md +0 -0
  72. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  73. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/init-session/SKILL.md +0 -0
  74. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  75. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/parallel-agents/SKILL.md +0 -0
  76. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  77. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  78. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  79. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  80. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/review-phase/SKILL.md +0 -0
  81. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/setup/SKILL.md +0 -0
  82. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/setup/reference.md +0 -0
  83. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  84. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  85. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/skills/start/SKILL.md +0 -0
  86. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.claude/state/.gitkeep +0 -0
  87. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/.gitignore +0 -0
  88. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/LICENSE +0 -0
  89. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/LICENSES/fastembed-LICENSE +0 -0
  90. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/LICENSES/fastembed-NOTICE +0 -0
  91. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/LICENSES/onnxruntime-LICENSE +0 -0
  92. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  93. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/hatch_build.py +0 -0
  94. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/__main__.py +0 -0
  95. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/_db_params.py +0 -0
  96. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/_excludes.py +0 -0
  97. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/_terminal.py +0 -0
  98. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/adapters.py +0 -0
  99. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli.py +0 -0
  100. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_ask.py +0 -0
  101. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_doctor.py +0 -0
  102. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_init.py +0 -0
  103. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_list.py +0 -0
  104. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_plan.py +0 -0
  105. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_tier.py +0 -0
  106. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/cli_update.py +0 -0
  107. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/db.py +0 -0
  108. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/embedding.py +0 -0
  109. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/mcp_server.py +0 -0
  110. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/migrate.py +0 -0
  111. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/migrations/001_initial.sql +0 -0
  112. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  113. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  114. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/migrations/README.md +0 -0
  115. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/migrations/__init__.py +0 -0
  116. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/paths.py +0 -0
  117. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/plan_validator.py +0 -0
  118. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/platforms.py +0 -0
  119. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/pricing.py +0 -0
  120. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/question.py +0 -0
  121. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/recall_chunker.py +0 -0
  122. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/src/c3/usage_ingester.py +0 -0
  123. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/__init__.py +0 -0
  124. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/conftest.py +0 -0
  125. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/fixtures/usage/README.md +0 -0
  126. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  127. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  128. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  129. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/__init__.py +0 -0
  130. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  131. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_consolidate_memory.py +0 -0
  132. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_hook_utils.py +0 -0
  133. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_permission_handler.py +0 -0
  134. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_permission_handler_toast.py +0 -0
  135. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  136. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_planner_check.py +0 -0
  137. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_planner_check_dev.py +0 -0
  138. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_post_tool.py +0 -0
  139. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_pre_tool.py +0 -0
  140. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_recall_autorebuild.py +0 -0
  141. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_recall_inject.py +0 -0
  142. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_record_review_decision.py +0 -0
  143. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_record_tier_outcome.py +0 -0
  144. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_restore_session.py +0 -0
  145. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_review_hint_inject.py +0 -0
  146. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_select_tier.py +0 -0
  147. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  148. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_session_start.py +0 -0
  149. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_session_stop.py +0 -0
  150. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_session_utils.py +0 -0
  151. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  152. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_similarity_boost.py +0 -0
  153. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_statusline.py +0 -0
  154. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  155. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_sync_check.py +0 -0
  156. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/hooks/test_template_guard.py +0 -0
  157. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/__init__.py +0 -0
  158. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/_skill_helpers.py +0 -0
  159. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  160. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  161. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_planner_lightweight.py +0 -0
  162. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_recall_skill.py +0 -0
  163. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  164. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_setup_templates.py +0 -0
  165. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  166. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  167. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  168. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_adapters.py +0 -0
  169. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_check_deletions.py +0 -0
  170. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_ask.py +0 -0
  171. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_doctor.py +0 -0
  172. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_entry.py +0 -0
  173. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_init.py +0 -0
  174. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_list.py +0 -0
  175. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_plan.py +0 -0
  176. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_recall.py +0 -0
  177. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_tier.py +0 -0
  178. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_update_breaking_changes.py +0 -0
  179. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_cli_update_deletions.py +0 -0
  180. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_db.py +0 -0
  181. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_docstring_consistency.py +0 -0
  182. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_embedding.py +0 -0
  183. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_excludes.py +0 -0
  184. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_extract_breaking_changes.py +0 -0
  185. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_mcp_server_elicit.py +0 -0
  186. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_migrate.py +0 -0
  187. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_paths.py +0 -0
  188. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_plan_validator.py +0 -0
  189. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_pre_compact.py +0 -0
  190. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_pre_tool_hook.py +0 -0
  191. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_precompact_additional.py +0 -0
  192. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_precompact_toctou_fixes.py +0 -0
  193. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_pricing.py +0 -0
  194. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_recall_chunker.py +0 -0
  195. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_references_migration.py +0 -0
  196. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_session_utils_additional.py +0 -0
  197. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  198. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_statusline.py +0 -0
  199. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_stop_additional.py +0 -0
  200. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_stop_hook.py +0 -0
  201. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_stop_precompact_fixes.py +0 -0
  202. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_sync_template_stop.py +0 -0
  203. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_template_pre_tool_hook.py +0 -0
  204. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_usage_ingester.py +0 -0
  205. {claude_code_conductor-2.36.0 → claude_code_conductor-2.37.0}/tests/test_worktree_guard.py +0 -0
@@ -97,11 +97,14 @@ def find_repo_root() -> Path | None:
97
97
 
98
98
 
99
99
  def index_exists(repo_root: Path) -> bool:
100
- """Return True if the recall HNSW index file exists.
100
+ """Return True if the recall index file (``recall.hnsw``) exists.
101
+
102
+ 歴史的経緯でファイル名は ``.hnsw`` を維持しているが、中身は numpy ndarray
103
+ (``.npy`` ペイロード, shape (N, dim) float32) であり HNSW ではない。
101
104
 
102
105
  Only ``recall.hnsw`` is checked — not ``recall_meta.json`` — because
103
106
  this hook's purpose is to trigger a rebuild when the index is stale.
104
- If the binary index is present (even without a metadata sidecar),
107
+ If the index file is present (even without a metadata sidecar),
105
108
  the stale check in ``index_is_stale_fast`` is meaningful and we should
106
109
  proceed. ``recall_inject`` checks both files because it needs a valid
107
110
  meta to run a search; we do not run a search here.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """UserPromptSubmit hook: inject semantically-similar past context (α design).
3
3
 
4
- The hook runs ``c3 recall search`` against the local HNSW index and
4
+ The hook runs ``c3 recall search`` against the recall index (numpy cosine search) and
5
5
  returns the top hits as ``additionalContext`` for the parent Claude to
6
6
  consider. The preface explicitly asks Claude to evaluate the relevance
7
7
  of each hit and ignore unrelated ones — i.e. *AI judges, hook does not
@@ -6,7 +6,7 @@ allowed-tools: Bash, Read
6
6
 
7
7
  # recall
8
8
 
9
- `c3 recall` の HNSW + 多言語 embedding(`sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`)に基づき、
9
+ `c3 recall` の numpy ベクトル検索 + 多言語 embedding(`sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`)に基づき、
10
10
  `.claude/memory/sessions/`・`.claude/agent-memory/`・`.claude/reports/archive/`・
11
11
  `.claude/memory/patterns.json` から類似情報を意味検索する。
12
12
 
@@ -38,7 +38,7 @@ C3 は性質の異なる **2 つの層** からなる。この区別が全体理
38
38
  | 言語 | Python | Markdown(+ hook は Python) |
39
39
  | 配布 | `pip install claude-code-conductor` | `c3 init` が層 A から展開 |
40
40
  | エントリ | `c3 = "c3.cli:main"`(pyproject.toml) | スラッシュコマンド・Agent ツール |
41
- | 依存 | PyYAML / duckdb / chroma-hnswlib / fastembed | Claude Code ランタイム |
41
+ | 依存 | PyYAML / duckdb / numpy / fastembed | Claude Code ランタイム |
42
42
 
43
43
  **配布元リポジトリ内の物理対応**:
44
44
 
@@ -165,7 +165,7 @@ A ヒアリング → B 設計 → C 計画 → D 実装(TDD) → E レビュー
165
165
 
166
166
  ```
167
167
  recall_chunker.py → embedding.py → recall_index.py
168
- (sessions/reports/ (fastembed: paraphrase- (HNSW: chroma-hnswlib・
168
+ (sessions/reports/ (fastembed: paraphrase- (numpy cosine ブルートフォース・
169
169
  patterns をチャンク化) multilingual-MiniLM-L12-v2 .claude/state/ に保存)
170
170
  384次元・約220MB・多言語)
171
171
  ```
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.37.0] - 2026-06-16
4
+
5
+ ### 変更
6
+
7
+ - **recall の索引バックエンドを chroma-hnswlib(C++ 拡張)から numpy ブルートフォース cosine 検索へ置換**: C++ コンパイラ(Microsoft Visual C++ Build Tools)が無い環境で `pip install claude-code-conductor` が失敗する問題を解消。numpy は全環境に wheel が提供されておりコンパイル不要。recall のコーパスは 1 ユーザーの `.claude/` 規模(数千チャンク)で近似最近傍の高速化が不要なため、numpy の総当たり cosine 検索で十分。索引は次回 `c3 recall rebuild` 実行時に自動で numpy 形式へ再生成される。アップグレード直後・初回 rebuild 完了までの間は recall が一時的に結果を返さない(`c3 recall rebuild --force` で即時再生成可能)。`recall.hnsw` ファイル名は後方互換のため維持(中身が numpy ペイロードに変わる)。関連フック(`recall_inject.py` / `recall_autorebuild.py`)は無改修で動作する。`load()` は不正形状・旧 hnswlib バイナリ・破損ファイルを検出すると `False` を返して全再構築フォールバックに繋ぐ(`np.load(allow_pickle=False)` で pickle 経路は遮断)。
8
+
9
+ ### 依存
10
+
11
+ - `chroma-hnswlib>=0.7.6` を削除し `numpy>=1.22` を追加。`LICENSES/chroma-hnswlib-*` を削除し `LICENSES/numpy-LICENSE`(BSD-3-Clause)を追加。
12
+
13
+ ### 後方互換
14
+
15
+ - 公開 API・CLI・索引ファイル名(`recall.hnsw`)・meta スキーマに変更なし。索引は自動再生成のため migration 操作は不要。**破壊的変更なし**。
16
+
3
17
  ## [2.36.0] - 2026-06-14
4
18
 
5
19
  **セッションファイルに「現在地」フィールドを新設し、コンテキスト圧縮(コンパクト)後の肥大ループとワークフロー無視を同時に解消(hook・skill 手順の変更/破壊的変更なし)**: 200K コンテキスト運用で、セッション復元(コンパクト後・`/init-session`)の経路が「構造のない丸投げ」になっていたことが 2 つの症状を生んでいた。(1) **コンパクト肥大ループ**: `pre_compact.py` がコンパクト直前に状態を無上限追記させ、`restore_session.py` がコンパクト後に `## 残タスク` / `## うまくいったアプローチ` / `## 試みたが失敗したアプローチ` の 3 セクションを完了済み `- [x]` 行も含め丸ごと再注入し続けるため、コンテキスト使用率が上がり→さらにコンパクトが早まる正のフィードバックになっていた。(2) **ワークフロー無視**: 復元時にフェーズ状態が単なる ToDo として注入されるだけで「dev-workflow 進行中・skill 経由で再開せよ・Approval Flow を守れ」の指示が無く、`/init-session` の「続きから作業する」も「そのまま作業に入る」となっていたため、復元後に dev-workflow を飛ばして直接着手しがちだった。両症状の根は同じ「復元時に構造化された現在地が無い」ことであり、`現在地:` の 1 行フィールドを新設して構造化することで、再注入を小さく保ちつつワークフロー復帰を確実化する。
@@ -0,0 +1,32 @@
1
+ # Source: https://github.com/numpy/numpy/blob/main/LICENSE.txt
2
+
3
+ Copyright (c) 2005-2024, NumPy Developers.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ * Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ * Redistributions in binary form must reproduce the above
14
+ copyright notice, this list of conditions and the following
15
+ disclaimer in the documentation and/or other materials provided
16
+ with the distribution.
17
+
18
+ * Neither the name of the NumPy Developers nor the names of any
19
+ contributors may be used to endorse or promote products derived
20
+ from this software without specific prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-conductor
3
- Version: 2.36.0
3
+ Version: 2.37.0
4
4
  Summary: Multi-agent orchestration framework for Claude Code with Codex/Cursor adapters (C3)
5
5
  Project-URL: Homepage, https://github.com/satoh-y-0323/claude-code-conductor
6
6
  Project-URL: Repository, https://github.com/satoh-y-0323/claude-code-conductor
@@ -37,9 +37,9 @@ Classifier: Programming Language :: Python :: 3.11
37
37
  Classifier: Programming Language :: Python :: 3.12
38
38
  Classifier: Topic :: Software Development
39
39
  Requires-Python: >=3.10
40
- Requires-Dist: chroma-hnswlib>=0.7.6
41
40
  Requires-Dist: duckdb>=0.10
42
41
  Requires-Dist: fastembed>=0.8.0
42
+ Requires-Dist: numpy>=1.22
43
43
  Requires-Dist: pyyaml>=6.0
44
44
  Provides-Extra: notify
45
45
  Requires-Dist: windows-toasts>=1.0; (sys_platform == 'win32') and extra == 'notify'
@@ -184,7 +184,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
184
184
  | `/doc` | ドキュメントをヒアリングして生成(mermaid 図・README・API 仕様書など) |
185
185
  | `/mcp-config` | MCP サーバーの追加・一覧・削除(プロジェクトスコープ) |
186
186
  | `/extract-lib` | 複数プロジェクトのコードを横断解析し、共通処理をライブラリとして設計・生成 |
187
- | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(HNSW + 多言語 embedding) |
187
+ | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(numpy ベクトル検索 + 多言語 embedding) |
188
188
  | `/brainstorm` | 仕事・設計の相談を、資料(PDF/画像)を読み込んだ上で気軽に発散・壁打ち。視点・選択肢・論点を増やす方向(grill=詰めるとは逆)(v2.29.0〜) |
189
189
 
190
190
  ### ターミナルで使う `c3` CLI(PyPI インストール時)
@@ -200,7 +200,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
200
200
  | `c3 plan validate <plan-report>` | plan-report の YAML フロントマターと agent 存在を検証 |
201
201
  | `c3 plan waves <plan-report>` | plan-report の wave 分解結果を JSON で出力 |
202
202
  | `c3 recall search "<query>"` または `c3 recall "<query>"` | `.claude/memory/sessions/` 等から類似チャンクを意味検索 |
203
- | `c3 recall rebuild [--force]` | HNSW インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
203
+ | `c3 recall rebuild [--force]` | numpy ベクトル検索インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
204
204
  | `c3 recall stats` | チャンク数・モデル名・最終 rebuild 日時を表示 |
205
205
  | `c3 tier stats` | tier-routing(複雑度に応じた Tier 自動ルーティング)の学習データ・Tier 別コスト・現在の routing パラメータ(λ/ε/escalation・v2.27.0〜)を表形式で表示(`--json` で機械可読出力・`--recent N` で直近 outcome 件数指定)。ルーティング挙動は環境変数 `C3_TIER_COST_LAMBDA`(cost-weighted の重み・`0 ≤ λ ≤ 5`・v2.26.0〜、上限拡張 v2.27.0)/ `C3_TIER_EPSILON` / `C3_ESCALATION_THRESHOLD` で調整可([CLI リファレンス](https://satoh-y-0323.github.io/claude-code-conductor/cli-reference/)参照) |
206
206
 
@@ -420,7 +420,7 @@ C3 はセッションをまたいで作業状態を記憶します。
420
420
 
421
421
  | 依存 | ライセンス | 用途 |
422
422
  |---|---|---|
423
- | [chroma-hnswlib](https://github.com/chroma-core/hnswlib) | Apache-2.0 | HNSW 近傍検索インデックス |
423
+ | [numpy](https://github.com/numpy/numpy) | BSD-3-Clause | recall のベクトル類似度検索(cosine ブルートフォース) |
424
424
  | [fastembed](https://github.com/qdrant/fastembed) | Apache-2.0 | embedding 生成ランタイム(ONNX ベース) |
425
425
  | [onnxruntime](https://github.com/microsoft/onnxruntime) | MIT | fastembed の推論バックエンド |
426
426
  | [sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2](https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) | Apache-2.0 | 多言語 embedding モデル(384 次元・約 220MB・約 50 言語対応) |
@@ -137,7 +137,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
137
137
  | `/doc` | ドキュメントをヒアリングして生成(mermaid 図・README・API 仕様書など) |
138
138
  | `/mcp-config` | MCP サーバーの追加・一覧・削除(プロジェクトスコープ) |
139
139
  | `/extract-lib` | 複数プロジェクトのコードを横断解析し、共通処理をライブラリとして設計・生成 |
140
- | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(HNSW + 多言語 embedding) |
140
+ | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(numpy ベクトル検索 + 多言語 embedding) |
141
141
  | `/brainstorm` | 仕事・設計の相談を、資料(PDF/画像)を読み込んだ上で気軽に発散・壁打ち。視点・選択肢・論点を増やす方向(grill=詰めるとは逆)(v2.29.0〜) |
142
142
 
143
143
  ### ターミナルで使う `c3` CLI(PyPI インストール時)
@@ -153,7 +153,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
153
153
  | `c3 plan validate <plan-report>` | plan-report の YAML フロントマターと agent 存在を検証 |
154
154
  | `c3 plan waves <plan-report>` | plan-report の wave 分解結果を JSON で出力 |
155
155
  | `c3 recall search "<query>"` または `c3 recall "<query>"` | `.claude/memory/sessions/` 等から類似チャンクを意味検索 |
156
- | `c3 recall rebuild [--force]` | HNSW インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
156
+ | `c3 recall rebuild [--force]` | numpy ベクトル検索インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
157
157
  | `c3 recall stats` | チャンク数・モデル名・最終 rebuild 日時を表示 |
158
158
  | `c3 tier stats` | tier-routing(複雑度に応じた Tier 自動ルーティング)の学習データ・Tier 別コスト・現在の routing パラメータ(λ/ε/escalation・v2.27.0〜)を表形式で表示(`--json` で機械可読出力・`--recent N` で直近 outcome 件数指定)。ルーティング挙動は環境変数 `C3_TIER_COST_LAMBDA`(cost-weighted の重み・`0 ≤ λ ≤ 5`・v2.26.0〜、上限拡張 v2.27.0)/ `C3_TIER_EPSILON` / `C3_ESCALATION_THRESHOLD` で調整可([CLI リファレンス](https://satoh-y-0323.github.io/claude-code-conductor/cli-reference/)参照) |
159
159
 
@@ -373,7 +373,7 @@ C3 はセッションをまたいで作業状態を記憶します。
373
373
 
374
374
  | 依存 | ライセンス | 用途 |
375
375
  |---|---|---|
376
- | [chroma-hnswlib](https://github.com/chroma-core/hnswlib) | Apache-2.0 | HNSW 近傍検索インデックス |
376
+ | [numpy](https://github.com/numpy/numpy) | BSD-3-Clause | recall のベクトル類似度検索(cosine ブルートフォース) |
377
377
  | [fastembed](https://github.com/qdrant/fastembed) | Apache-2.0 | embedding 生成ランタイム(ONNX ベース) |
378
378
  | [onnxruntime](https://github.com/microsoft/onnxruntime) | MIT | fastembed の推論バックエンド |
379
379
  | [sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2](https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) | Apache-2.0 | 多言語 embedding モデル(384 次元・約 220MB・約 50 言語対応) |
@@ -26,7 +26,7 @@ classifiers = [
26
26
  dependencies = [
27
27
  "PyYAML>=6.0",
28
28
  "duckdb>=0.10",
29
- "chroma-hnswlib>=0.7.6",
29
+ "numpy>=1.22",
30
30
  "fastembed>=0.8.0",
31
31
  ]
32
32
 
@@ -1,3 +1,3 @@
1
1
  """Claude Code Conductor (C3) - multi-agent orchestration framework for Claude Code."""
2
2
 
3
- __version__ = "2.36.0"
3
+ __version__ = "2.37.0"
@@ -2,13 +2,15 @@
2
2
 
3
3
  Subcommands:
4
4
 
5
- * ``c3 recall search <query>`` — query the HNSW index for relevant chunks.
5
+ * ``c3 recall search <query>`` — query the numpy cosine index for relevant chunks.
6
6
  * ``c3 recall rebuild`` — re-embed every source file and rewrite the index.
7
7
  * ``c3 recall stats`` — report what's in the index.
8
8
 
9
- The heavy dependencies (``fastembed``, ``hnswlib``) are imported lazily
10
- inside the handlers so that ``c3 --help`` and unrelated subcommands stay
11
- fast even when the embedding model has not yet been downloaded.
9
+ The heavy dependency (``fastembed``) is imported lazily inside the handlers
10
+ so that ``c3 --help`` and unrelated subcommands stay fast even when the
11
+ embedding model has not yet been downloaded. ``numpy`` is imported eagerly
12
+ at module level (``import numpy as np`` in ``recall_index.py``) and is
13
+ always available when this module is loaded.
12
14
  """
13
15
 
14
16
  from __future__ import annotations
@@ -296,13 +298,22 @@ def _handle_rebuild(args: argparse.Namespace) -> int:
296
298
  dim=embedder.dim,
297
299
  )
298
300
  try:
299
- candidate.load()
300
- old_index = candidate
301
+ # [M-01] load() の戻り値を確認し、False なら増分不可として全再構築する。
302
+ loaded = candidate.load()
303
+ if loaded:
304
+ old_index = candidate
305
+ else:
306
+ print(
307
+ "[recall] 既存 index を読めず増分不可・全再構築にフォールバック:"
308
+ " load() returned False",
309
+ file=sys.stderr,
310
+ )
311
+ old_index = None
301
312
  except Exception as exc:
302
313
  # CR-E-002/SR-R-004: log the failure reason so operators can diagnose
303
314
  # corrupt or mismatched index files. Exception message is intentionally
304
315
  # omitted (type name only) to avoid leaking internal state — consistent
305
- # with the SR-R-001 policy used in _hnsw_save/_hnsw_load.
316
+ # with the SR-R-001 policy used in RecallIndex.load().
306
317
  print(
307
318
  f"[recall] 既存 index を読めず増分不可・全再構築にフォールバック: {type(exc).__name__}",
308
319
  file=sys.stderr,