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.
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/CHANGELOG.md +11 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/PKG-INFO +1 -1
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/__init__.py +1 -1
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/adapters.py +101 -3
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_adapters.py +641 -2
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/CLAUDE.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/architect.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/code-reviewer.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/design-critic.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/developer.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/doc-writer.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/interviewer.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/planner.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/project-setup.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/security-reviewer.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/systematic-debugger.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/tester.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/wt_developer.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/wt_systematic-debugger.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/agents/wt_tester.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/breaking-changes.txt +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/deletions.txt +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/config-policy.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/nul-boundary.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/parallel-agents-setup.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/platform-adapters.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/docs/settings.json.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/_hook_utils.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/check_agent_invocation.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/consolidate_memory.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/permission_handler.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/permission_handler_toast.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/planner_check.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/post_tool.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/pre_compact.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/pre_tool.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/recall_autorebuild.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/recall_inject.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/restore_session.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/select_tier.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/session_start.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/session_stop.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/session_utils.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/statusline.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/stop.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/tier_autoapply.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/tier_gap_check.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/hooks/worktree_guard.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/memory/.gitkeep +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/permission_rules.json +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/rules/promoted/index.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/settings.json +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/brainstorm/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/codex-review/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/develop/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/doc/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/extract-lib/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/init-session/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/init-session/scripts/session_guard.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/mcp-config/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/parallel-agents/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/pattern-status/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/promote-pattern/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/recall/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/report-timestamp/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/review-phase/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/reference.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/skills/start/SKILL.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.claude/state/.gitkeep +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/.gitignore +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/ARCHITECTURE.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSE +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/fastembed-LICENSE +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/fastembed-NOTICE +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/numpy-LICENSE +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/onnxruntime-LICENSE +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/README.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/hatch_build.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/pyproject.toml +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/__main__.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/_db_params.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/_excludes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/_terminal.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_ask.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_doctor.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_init.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_list.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_metrics.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_plan.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_recall.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_run.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_tier.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/cli_update.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/db.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/embedding.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/gitutil.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/mcp_server.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrate.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/001_initial.sql +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/003_tier_cost.sql +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/004_agent_outcomes.sql +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/005_drop_agent_tier_bandit.sql +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/006_review_decisions_severity.sql +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/README.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/migrations/__init__.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/paths.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/plan_validator.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/platforms.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/pricing.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/question.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/recall_chunker.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/recall_index.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/src/c3/usage_ingester.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/__init__.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/_pre_compact_helpers.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/conftest.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/README.md +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/mainline.jsonl +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/__init__.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_check_agent_invocation.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_consolidate_memory.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_hook_utils.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_permission_handler.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_permission_handler_toast.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_planner_check.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_planner_check_dev.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_post_tool.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_pre_tool.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_recall_autorebuild.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_recall_inject.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_record_agent_outcome.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_record_review_decision.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_restore_session.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_review_hint_inject.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_select_tier.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_select_tier_escalation.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_session_start.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_session_stop.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_session_utils.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_settings_tier_autoapply_registration.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_similarity_boost.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_statusline.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_statusline_template_sync.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_sync_check.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_template_guard.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_tier_autoapply.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_tier_gap_check.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/hooks/test_tier_security_fixes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/__init__.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/_skill_helpers.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_init_session_no_task_type.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_parallel_agents_skill_tier.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_planner_lightweight.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_recall_skill.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_session_backlog_reconciliation.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_session_guard.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_setup_templates.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_start_skill_new_flow.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_check_deletions.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_ask.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_doctor.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_doctor_launcher.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_entry.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_init.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_list.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_metrics.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_plan.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_recall.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_run.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_tier.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_update_breaking_changes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_cli_update_deletions.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_db.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_docstring_consistency.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_embedding.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_excludes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_extract_breaking_changes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_gitutil.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_mcp_server_elicit.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_migrate.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_no_bare_python_launcher.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_nul_boundary_lint.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_paths.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_plan_validator.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_pre_compact.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_precompact_additional.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_precompact_toctou_fixes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_pricing.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_recall_chunker.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_recall_index.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_references_migration.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_session_utils_additional.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_skill_no_builtin_conflict.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_statusline.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_stop_additional.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_stop_hook.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_stop_precompact_fixes.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_sync_template_stop.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_template_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.52.0 → claude_code_conductor-2.52.1}/tests/test_usage_ingester.py +0 -0
- {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.
|
|
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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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:
|