claude-code-conductor 2.52.0__tar.gz → 2.52.1__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 (226) hide show
  1. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/CHANGELOG.md +11 -0
  2. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/PKG-INFO +1 -1
  3. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/__init__.py +1 -1
  4. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/adapters.py +101 -3
  5. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_adapters.py +641 -2
  6. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/CLAUDE.md +0 -0
  7. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/architect.md +0 -0
  8. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/code-reviewer.md +0 -0
  9. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/design-critic.md +0 -0
  10. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/developer.md +0 -0
  11. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/doc-writer.md +0 -0
  12. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/interviewer.md +0 -0
  13. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/planner.md +0 -0
  14. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/project-setup.md +0 -0
  15. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/security-reviewer.md +0 -0
  16. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/systematic-debugger.md +0 -0
  17. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/tester.md +0 -0
  18. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/wt_developer.md +0 -0
  19. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/wt_systematic-debugger.md +0 -0
  20. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/wt_tester.md +0 -0
  21. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/breaking-changes.txt +0 -0
  22. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/deletions.txt +0 -0
  23. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/config-policy.md +0 -0
  24. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/nul-boundary.md +0 -0
  25. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/parallel-agents-setup.md +0 -0
  26. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/platform-adapters.md +0 -0
  27. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/settings.json.md +0 -0
  28. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/_hook_utils.py +0 -0
  29. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/check_agent_invocation.py +0 -0
  30. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/consolidate_memory.py +0 -0
  31. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/permission_handler.py +0 -0
  32. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/permission_handler_toast.py +0 -0
  33. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/planner_check.py +0 -0
  34. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/post_tool.py +0 -0
  35. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/pre_compact.py +0 -0
  36. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/pre_tool.py +0 -0
  37. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/recall_autorebuild.py +0 -0
  38. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/recall_inject.py +0 -0
  39. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/restore_session.py +0 -0
  40. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/select_tier.py +0 -0
  41. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/session_start.py +0 -0
  42. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/session_stop.py +0 -0
  43. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/session_utils.py +0 -0
  44. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/statusline.py +0 -0
  45. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/stop.py +0 -0
  46. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/tier_autoapply.py +0 -0
  47. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/tier_gap_check.py +0 -0
  48. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/worktree_guard.py +0 -0
  49. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/memory/.gitkeep +0 -0
  50. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/permission_rules.json +0 -0
  51. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/rules/promoted/index.md +0 -0
  52. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/settings.json +0 -0
  53. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/brainstorm/SKILL.md +0 -0
  54. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/codex-review/SKILL.md +0 -0
  55. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/SKILL.md +0 -0
  56. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  57. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  58. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  59. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  60. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  61. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  62. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +0 -0
  63. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  64. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  65. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/develop/SKILL.md +0 -0
  66. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/doc/SKILL.md +0 -0
  67. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/extract-lib/SKILL.md +0 -0
  68. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/init-session/SKILL.md +0 -0
  69. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/init-session/scripts/session_guard.py +0 -0
  70. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/mcp-config/SKILL.md +0 -0
  71. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/parallel-agents/SKILL.md +0 -0
  72. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/pattern-status/SKILL.md +0 -0
  73. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/promote-pattern/SKILL.md +0 -0
  74. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/recall/SKILL.md +0 -0
  75. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/report-timestamp/SKILL.md +0 -0
  76. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  77. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/review-phase/SKILL.md +0 -0
  78. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/SKILL.md +0 -0
  79. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/reference.md +0 -0
  80. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  81. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  82. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/start/SKILL.md +0 -0
  83. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/state/.gitkeep +0 -0
  84. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.gitignore +0 -0
  85. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/ARCHITECTURE.md +0 -0
  86. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSE +0 -0
  87. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/fastembed-LICENSE +0 -0
  88. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/fastembed-NOTICE +0 -0
  89. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/numpy-LICENSE +0 -0
  90. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/onnxruntime-LICENSE +0 -0
  91. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  92. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/README.md +0 -0
  93. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/hatch_build.py +0 -0
  94. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/pyproject.toml +0 -0
  95. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/__main__.py +0 -0
  96. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/_db_params.py +0 -0
  97. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/_excludes.py +0 -0
  98. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/_terminal.py +0 -0
  99. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli.py +0 -0
  100. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_ask.py +0 -0
  101. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_doctor.py +0 -0
  102. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_init.py +0 -0
  103. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_list.py +0 -0
  104. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_metrics.py +0 -0
  105. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_plan.py +0 -0
  106. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_recall.py +0 -0
  107. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_run.py +0 -0
  108. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_tier.py +0 -0
  109. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_update.py +0 -0
  110. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/db.py +0 -0
  111. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/embedding.py +0 -0
  112. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/gitutil.py +0 -0
  113. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/mcp_server.py +0 -0
  114. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrate.py +0 -0
  115. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/001_initial.sql +0 -0
  116. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  117. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/003_tier_cost.sql +0 -0
  118. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/004_agent_outcomes.sql +0 -0
  119. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/005_drop_agent_tier_bandit.sql +0 -0
  120. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/006_review_decisions_severity.sql +0 -0
  121. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/README.md +0 -0
  122. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/__init__.py +0 -0
  123. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/paths.py +0 -0
  124. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/plan_validator.py +0 -0
  125. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/platforms.py +0 -0
  126. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/pricing.py +0 -0
  127. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/question.py +0 -0
  128. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/recall_chunker.py +0 -0
  129. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/recall_index.py +0 -0
  130. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/usage_ingester.py +0 -0
  131. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/__init__.py +0 -0
  132. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/_pre_compact_helpers.py +0 -0
  133. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/conftest.py +0 -0
  134. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/README.md +0 -0
  135. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/mainline.jsonl +0 -0
  136. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  137. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  138. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/__init__.py +0 -0
  139. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_check_agent_invocation.py +0 -0
  140. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_consolidate_memory.py +0 -0
  141. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_hook_utils.py +0 -0
  142. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_permission_handler.py +0 -0
  143. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_permission_handler_toast.py +0 -0
  144. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  145. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_planner_check.py +0 -0
  146. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_planner_check_dev.py +0 -0
  147. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_post_tool.py +0 -0
  148. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_pre_tool.py +0 -0
  149. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_recall_autorebuild.py +0 -0
  150. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_recall_inject.py +0 -0
  151. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_record_agent_outcome.py +0 -0
  152. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_record_review_decision.py +0 -0
  153. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_restore_session.py +0 -0
  154. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_review_hint_inject.py +0 -0
  155. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_select_tier.py +0 -0
  156. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_select_tier_escalation.py +0 -0
  157. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_session_start.py +0 -0
  158. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_session_stop.py +0 -0
  159. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_session_utils.py +0 -0
  160. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  161. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_settings_tier_autoapply_registration.py +0 -0
  162. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_similarity_boost.py +0 -0
  163. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_statusline.py +0 -0
  164. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_statusline_template_sync.py +0 -0
  165. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_sync_check.py +0 -0
  166. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_template_guard.py +0 -0
  167. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_tier_autoapply.py +0 -0
  168. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_tier_gap_check.py +0 -0
  169. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_tier_security_fixes.py +0 -0
  170. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/__init__.py +0 -0
  171. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/_skill_helpers.py +0 -0
  172. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  173. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_init_session_no_task_type.py +0 -0
  174. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_parallel_agents_skill_tier.py +0 -0
  175. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_planner_lightweight.py +0 -0
  176. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_recall_skill.py +0 -0
  177. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  178. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_session_guard.py +0 -0
  179. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_setup_templates.py +0 -0
  180. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  181. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_start_skill_new_flow.py +0 -0
  182. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  183. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_check_deletions.py +0 -0
  184. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_ask.py +0 -0
  185. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_doctor.py +0 -0
  186. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_doctor_launcher.py +0 -0
  187. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_entry.py +0 -0
  188. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_init.py +0 -0
  189. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_list.py +0 -0
  190. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_metrics.py +0 -0
  191. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_plan.py +0 -0
  192. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_recall.py +0 -0
  193. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_run.py +0 -0
  194. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_tier.py +0 -0
  195. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_update_breaking_changes.py +0 -0
  196. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_update_deletions.py +0 -0
  197. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_db.py +0 -0
  198. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_docstring_consistency.py +0 -0
  199. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_embedding.py +0 -0
  200. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_excludes.py +0 -0
  201. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_extract_breaking_changes.py +0 -0
  202. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_gitutil.py +0 -0
  203. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_mcp_server_elicit.py +0 -0
  204. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_migrate.py +0 -0
  205. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_no_bare_python_launcher.py +0 -0
  206. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_nul_boundary_lint.py +0 -0
  207. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_paths.py +0 -0
  208. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_plan_validator.py +0 -0
  209. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_pre_compact.py +0 -0
  210. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_pre_tool_hook.py +0 -0
  211. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_precompact_additional.py +0 -0
  212. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_precompact_toctou_fixes.py +0 -0
  213. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_pricing.py +0 -0
  214. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_recall_chunker.py +0 -0
  215. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_recall_index.py +0 -0
  216. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_references_migration.py +0 -0
  217. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_session_utils_additional.py +0 -0
  218. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_skill_no_builtin_conflict.py +0 -0
  219. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_statusline.py +0 -0
  220. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_stop_additional.py +0 -0
  221. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_stop_hook.py +0 -0
  222. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_stop_precompact_fixes.py +0 -0
  223. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_sync_template_stop.py +0 -0
  224. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_template_pre_tool_hook.py +0 -0
  225. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_usage_ingester.py +0 -0
  226. {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_worktree_guard.py +0 -0
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.52.1] - 2026-07-23
4
+
5
+ ### 修正
6
+
7
+ - **TOML エスケープが制御文字を素通しし、Codex アダプター生成物が不正な TOML になる問題を修正**: `adapters.py` の `_toml_escape()` / `_toml_multiline_escape()` が TOML 仕様上禁止された制御文字をエスケープせず、生成物(`.codex/config.toml` / `.codex/agents/*.toml`)が不正な TOML になる、または行構造を偽装されうる defect を修正した。エスケープ表を `str.translate()` 用の module 定数として構築し、C0 / DEL / C1 / U+2028 / U+2029 を封じる(TOML 必須分に加え、`str.splitlines()` が行境界とみなす 10 文字を対象とする)。複数行用の表は基本文字列用からの派生生成にし、手書きの二重管理で VT(U+000B) が脱落していた問題を解消した。あわせて `_escape_toml_quote_runs()` を 1 パス化し、2 パス構成が自身の出力した `\"` を生クォートと誤認して末尾クォート連 3 個以上で値を破壊していた問題を修正した。境界値テスト 49 件を追加(tomllib 往復検証・行境界 10 種・2 表の対称性・14 agent の不変条件・環境非依存スナップショット)
8
+ - 読み戻し側(`cli_doctor.py` の正規表現)は変更していない。生成側で行境界文字を封じれば行構造偽装は成立しないため
9
+
10
+ ### 後方互換
11
+
12
+ - **破壊的変更なし**。修正は「制御文字を含む入力に対して不正な TOML を生成しなくなる」方向のみで、制御文字を含まない正常な入力の生成結果は不変。既存の Codex アダプター生成物は挙動が変わらない
13
+
3
14
  ## [2.52.0] - 2026-07-23
4
15
 
5
16
  ### 追加
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-conductor
3
- Version: 2.52.0
3
+ Version: 2.52.1
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
@@ -1,3 +1,3 @@
1
1
  """Claude Code Conductor (C3) - multi-agent orchestration framework for Claude Code."""
2
2
 
3
- __version__ = "2.52.0"
3
+ __version__ = "2.52.1"
@@ -342,7 +342,7 @@ def _codex_config_section() -> str:
342
342
  pythonpath = _dev_source_pythonpath()
343
343
  if pythonpath is not None:
344
344
  lines.append(f'PYTHONPATH = "{_toml_escape(str(pythonpath))}"')
345
- return "\n".join(lines) + "\n" # nul-boundary: allow(Codex 設定の TOML 本文。区切りは TOML の文法で固定されており NUL 化すると設定が壊れる)
345
+ return "\n".join(lines) + "\n" # nul-boundary: allow(Codex 設定の TOML 本文。区切りは TOML の文法で固定されており NUL 化すると設定が壊れる。要素側は _toml_escape が str.splitlines の行境界 10 文字を封じることを保証する)
346
346
 
347
347
 
348
348
  def _cursor_core_rule() -> str:
@@ -668,12 +668,110 @@ Claude Code, Codex, and Cursor remain compatible.
668
668
  )
669
669
 
670
670
 
671
+ # Escape map for TOML basic strings. Maps character codes to their escape sequences:
672
+ # - C0 control characters (0x00–0x1F): \uXXXX format, except short forms for
673
+ # Backspace (0x08→\b), Tab (0x09→\t), Newline (0x0A→\n), Form feed (0x0C→\f),
674
+ # Carriage return (0x0D→\r)
675
+ # - Delete (0x7F), C1 control characters (0x80–0x9F): \uXXXX format
676
+ # - Line separator (0x2028) and Paragraph separator (0x2029): \uXXXX format
677
+ # - Backslash (\) and double quote ("): require escaping in TOML basic strings
678
+ _TOML_ESCAPE_MAP: dict[int, str] = {
679
+ 0x00: "\\u0000", 0x01: "\\u0001", 0x02: "\\u0002", 0x03: "\\u0003",
680
+ 0x04: "\\u0004", 0x05: "\\u0005", 0x06: "\\u0006", 0x07: "\\u0007",
681
+ 0x08: "\\b", 0x09: "\\t", 0x0A: "\\n", 0x0B: "\\u000b", 0x0C: "\\f",
682
+ 0x0D: "\\r", 0x0E: "\\u000e", 0x0F: "\\u000f", 0x10: "\\u0010",
683
+ 0x11: "\\u0011", 0x12: "\\u0012", 0x13: "\\u0013", 0x14: "\\u0014",
684
+ 0x15: "\\u0015", 0x16: "\\u0016", 0x17: "\\u0017", 0x18: "\\u0018",
685
+ 0x19: "\\u0019", 0x1A: "\\u001a", 0x1B: "\\u001b", 0x1C: "\\u001c",
686
+ 0x1D: "\\u001d", 0x1E: "\\u001e", 0x1F: "\\u001f", 0x7F: "\\u007f",
687
+ 0x80: "\\u0080", 0x81: "\\u0081", 0x82: "\\u0082", 0x83: "\\u0083",
688
+ 0x84: "\\u0084", 0x85: "\\u0085", 0x86: "\\u0086", 0x87: "\\u0087",
689
+ 0x88: "\\u0088", 0x89: "\\u0089", 0x8A: "\\u008a", 0x8B: "\\u008b",
690
+ 0x8C: "\\u008c", 0x8D: "\\u008d", 0x8E: "\\u008e", 0x8F: "\\u008f",
691
+ 0x90: "\\u0090", 0x91: "\\u0091", 0x92: "\\u0092", 0x93: "\\u0093",
692
+ 0x94: "\\u0094", 0x95: "\\u0095", 0x96: "\\u0096", 0x97: "\\u0097",
693
+ 0x98: "\\u0098", 0x99: "\\u0099", 0x9A: "\\u009a", 0x9B: "\\u009b",
694
+ 0x9C: "\\u009c", 0x9D: "\\u009d", 0x9E: "\\u009e", 0x9F: "\\u009f",
695
+ 0x2028: "\\u2028", 0x2029: "\\u2029",
696
+ ord("\\"): "\\\\", ord('"'): '\\"',
697
+ }
698
+
699
+ # Escape map for TOML multi-line basic strings. DERIVED from _TOML_ESCAPE_MAP
700
+ # (never hand-copied): a hand-written duplicate previously lost VT (0x0B) while
701
+ # removing the neighbouring Tab/Newline entries, emitting invalid TOML. Deriving
702
+ # it makes that class of single-codepoint omission structurally impossible and
703
+ # keeps both maps in sync when the escaped set is extended.
704
+ # Exactly three codepoints are excluded, and no others:
705
+ # - 0x09 Tab / 0x0A Newline: kept literal, since multi-line strings are their
706
+ # natural home (readability of the generated instructions block)
707
+ # - 0x22 double quote: not escaped unconditionally here. Multi-line strings only
708
+ # need quotes escaped in runs that could break the `"""` delimiter, which
709
+ # _escape_toml_quote_runs handles separately.
710
+ _TOML_MULTILINE_ESCAPE_MAP: dict[int, str] = {
711
+ k: v for k, v in _TOML_ESCAPE_MAP.items() if k not in (0x09, 0x0A, 0x22)
712
+ }
713
+
714
+
715
+ def _escape_toml_quote_runs(value: str) -> str:
716
+ """Escape quote sequences in TOML multi-line string values.
717
+
718
+ Prevents the value from breaking out of a multi-line basic string when
719
+ delimited by triple quotes. A run of quotes is escaped in full when it is
720
+ 3 or more characters long, or when it touches the end of the value (a
721
+ trailing run merges with the closing ``\"\"\"`` delimiter, so even a single
722
+ trailing quote would produce four in a row).
723
+
724
+ Scans the input exactly once and never re-reads its own output: the two
725
+ conditions are OR-ed within a single pass on purpose. A two-stage variant
726
+ (escape long runs, then re-scan for trailing quotes) misreads the ``"`` of
727
+ an already-emitted ``\\"`` as an unescaped quote and inserts a second
728
+ backslash, corrupting values whose trailing run is 3 or more quotes long.
729
+ Every decision here is made from the ORIGINAL string: the run length and
730
+ whether the run ends at ``len(value)``.
731
+ """
732
+ if not value:
733
+ return value
734
+ result: list[str] = []
735
+ i = 0
736
+ while i < len(value):
737
+ if value[i] == '"':
738
+ start = i
739
+ while i < len(value) and value[i] == '"':
740
+ i += 1
741
+ run_length = i - start
742
+ touches_end = i == len(value)
743
+ if run_length >= 3 or touches_end:
744
+ result.append('\\"' * run_length)
745
+ else:
746
+ result.append('"' * run_length)
747
+ else:
748
+ result.append(value[i])
749
+ i += 1
750
+ return "".join(result)
751
+
752
+
671
753
  def _toml_escape(value: str) -> str:
672
- return value.replace("\\", "\\\\").replace('"', '\\"')
754
+ """Escape a string for use as a TOML basic string literal value.
755
+
756
+ Encodes all C0 control characters (including LF and TAB), DEL, C1 control
757
+ characters, line/paragraph separators, and the special characters backslash
758
+ and double-quote. Ensures the result fits on a single line with no embedded
759
+ line breaks, preserving the TOML key-value syntax.
760
+ """
761
+ return value.translate(_TOML_ESCAPE_MAP)
673
762
 
674
763
 
675
764
  def _toml_multiline_escape(value: str) -> str:
676
- return value.replace("\\", "\\\\").replace('"""', '\\"\\"\\"')
765
+ """Escape a string for use as a TOML multi-line basic string literal value.
766
+
767
+ Encodes control characters except LF and TAB (which are preserved for
768
+ readability) using _TOML_MULTILINE_ESCAPE_MAP, which is derived from
769
+ _TOML_ESCAPE_MAP by excluding exactly those two plus the double quote, then
770
+ prevents quote sequences from breaking the triple-quote delimiter in a
771
+ single left-to-right pass. Does not guarantee line isolation; callers must
772
+ manage their own line structure within the multi-line string.
773
+ """
774
+ return _escape_toml_quote_runs(value.translate(_TOML_MULTILINE_ESCAPE_MAP))
677
775
 
678
776
 
679
777
  def _dev_source_pythonpath() -> Path | None: