cc-session-tools 3.10.1__tar.gz → 3.10.2__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.
- {cc_session_tools-3.10.1/src/cc_session_tools.egg-info → cc_session_tools-3.10.2}/PKG-INFO +1 -1
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/pyproject.toml +1 -1
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2/src/cc_session_tools.egg-info}/PKG-INFO +1 -1
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/model_info.py +24 -19
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_context_window_warning.py +23 -0
- cc_session_tools-3.10.2/tests/test_model_info.py +67 -0
- cc_session_tools-3.10.1/tests/test_model_info.py +0 -30
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/LICENSE +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/README.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/setup.cfg +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/ccd.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/ccmsg.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/ccr.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/ccs.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/ccsched.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/ccst.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_ccmsg.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_ccsched.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_sessions_db.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_telemetry.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/config/hooks-bundle.json +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/config/session-tag-hook.json +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/hooks_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/bun_tools.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/claude_flags.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/claude_md_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/context_overrides.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/db.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/debug.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/doctor.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/doctor_mutes.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/hook_registry.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/install_sync.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/levenshtein.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/machine_identity.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/addressing.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/cursor.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/lock.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/message.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/move_safety.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/repository.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/retention.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/service.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/store.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/occupancy.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/paths.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/backup.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/classify.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/cutover.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/dump.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/formatting.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/importers.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/init_paths.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/init_service.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/manifest.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/naming.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/readiness.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/rehydrate.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/rename_group.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/reorganize.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/repository.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/resolve.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/service.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/session_output.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/store.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/sync_check.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/sync_lock.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/sync_notify.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/vector_clock.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/vector_clock_store.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/verify.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/write_log.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/picker.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/proc_lock.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/prompts.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/roots.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/rules.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/bundled_jobs.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/cadence.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/cursor.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/digest.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/due.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/duration.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/jobspec.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/ledger.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/lock.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/notify.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/reconcile.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/registry.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/runner.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/state.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/store.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/surface.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/throttle.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/worker.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/session_gc.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/sessions.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/sessions_db.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/sessions_repair.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/shell_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/tasklist.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/telemetry_store.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/text_wrap.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/analyse-cc-usage/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/clean-hook-sessions/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/compact-smart/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/context-override/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/delete-sessions/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/do-executor-critic-assessor-loop/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/extract-pptx/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/extract-pptx/scripts/extract_pptx.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/extract-to-text/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/extract-to-text/scripts/extract_to_text.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/find-claude-code-session/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/generate-8digit-code/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/generate-8digit-code/scripts/generate_8digit_code.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/list-empty-sessions/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/list-empty-sessions/scripts/list_empty_sessions.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/manage-recurring-cc-jobs-using-ccsched/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/move-session/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/move-session/hooks/sessionstart-pending-rename.sh +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/move-session/scripts/cc_session_rules.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/move-session/scripts/move_session.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-design-schema/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-do-init/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-do-manual-migration/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-do-update-consuming-skills/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-do-update-project-docs/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-pdata-resolve-conflicts/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-project-layout-reference/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/pm-update-central-files/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/CALIBRATION.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/analyze_context.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/duplicates.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/measure.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/report.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/tokens.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/usage.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/select-agent-model/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/send-session-message/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/update-command-cache/SKILL.md +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/skills/update-command-cache/scripts/update_command_cache.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools.egg-info/SOURCES.txt +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools.egg-info/dependency_links.txt +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools.egg-info/entry_points.txt +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools.egg-info/requires.txt +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools.egg-info/top_level.txt +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/attribution.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/cache.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/ccusage_wrapper.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/data/pricing.json +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/parent_inference.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/parser.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/pricing.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/query.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/report.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/schema.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/claude_code_usage/session_names.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/__init__.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/after_response.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/bash_hard_deny.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/bash_security_review.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/cache.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/catchup.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/confirm_8digit.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/context_window_warning.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/last_screenshot.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/marker_allow.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/markers.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/messaging_deliver.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/normalise.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/pdata_sync.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/pending_migration.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/pending_rename.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/script_allowlist.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/session_tag.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/stats.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/telemetry.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/telemetry_query.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/telemetry_trim.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/transcript.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/hooks/worklog_guard.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_after_response.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_attribution.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_bash_hard_deny.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_bash_security_review.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_bash_security_review_allowlist.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_bun_tools.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cache.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cache_sqlite.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccr_orphans.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccs_emptiness.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccs_eta.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccs_list_mode.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccs_scope_flags.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccs_sentinel_sort.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccs_session_counts.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_bundle_discovery.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_ccsched_jobs_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_context_override_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_doctor.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_gc_prune.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_gc_report.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_hook_dispatcher.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_hooks_allowlist.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_hooks_install_prune.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_hooks_install_zero_arg.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_hooks_uninstall.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_install_everything.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_machine_identity_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_main_gate.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_init_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_readiness_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_reconcile_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_rename_group_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_reorganize_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_sync_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_pdata_verify_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_repair_sessions_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_sessions_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_shell_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_skills_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_skills_uninstall.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_telemetry_query.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccst_telemetry_trim.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_ccusage_wrapper.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_claude_flags.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_claude_md_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cli.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cli_ccd.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cli_ccd_dry_run.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cli_ccr.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cli_ccs.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_cli_version.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_confirm_8digit.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_context_overrides.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_db.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_debug.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_doctor_mutes.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_empty_session.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_hook_cache.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_hooks_install.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_hooks_install_records.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_install_sync.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_last_screenshot.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_levenshtein.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_machine_identity.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_marker_allow.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_migrate_ccmsg.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_migrate_ccsched.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_migrate_sessions_db.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_migrate_telemetry.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_normalise.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_occupancy.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_parent_inference.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_parser.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_paths.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_pdata_audit_skill.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_pdata_post_migration_skills.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_pending_migration_hook.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_picker.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_pricing.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_proc_lock.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_prompts.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_query.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_report.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_roots.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_rules.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_scheduler_bundled_jobs.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_schema.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_script_allowlist.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_session_names.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_session_tag.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_sessions.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_sessions_db.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_sessions_db_migration_chain.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_sessions_repair.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_tasklist.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_telemetry.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_telemetry_store.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_text_wrap.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_transcript.py +0 -0
- {cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/tests/test_worklog_guard.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "cc-session-tools"
|
|
7
|
-
version = "3.10.
|
|
7
|
+
version = "3.10.2"
|
|
8
8
|
description = "Claude Code session management CLI tools (ccd, ccr, ccs, claude-code-usage, ccst) and hook library (hooks package)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -5,8 +5,8 @@ source of truth this table is migrating from). Consumed by
|
|
|
5
5
|
context_window_warning to phrase its nudge in terms of "% of the model's
|
|
6
6
|
actual window" and to estimate a per-model cache-read cost.
|
|
7
7
|
|
|
8
|
-
Figures current as of 2026-
|
|
9
|
-
Mythos 5 / Opus 5 / Opus 4.6-4.8 / Sonnet 5 / Sonnet 4.6 all 1,000,000 tokens
|
|
8
|
+
Figures current as of 2026-09-29 (Claude 5 family; 5.5/5.1 ids added). Context windows: Fable 5 /
|
|
9
|
+
Mythos 5 / Opus 5 / Opus 4.6-4.8 / Sonnet 5 / Sonnet 5.5 / Opus 5.5 / Fable 5.1 / Sonnet 4.6 all 1,000,000 tokens
|
|
10
10
|
(the default, not a beta long-context mode); Haiku 4.5 stays at 200,000.
|
|
11
11
|
Prices are the standard (non-cached) input rate per million tokens.
|
|
12
12
|
|
|
@@ -25,50 +25,55 @@ design spec's section 2.
|
|
|
25
25
|
"""
|
|
26
26
|
from __future__ import annotations
|
|
27
27
|
|
|
28
|
+
import re
|
|
29
|
+
|
|
28
30
|
_WINDOW_1M = {
|
|
29
31
|
"claude-fable-5", "claude-mythos-5",
|
|
30
32
|
"claude-opus-5", "claude-opus-4-8", "claude-opus-4-7", "claude-opus-4-6",
|
|
31
33
|
"claude-sonnet-5", "claude-sonnet-4-6",
|
|
34
|
+
"claude-sonnet-5-5", "claude-opus-5-5", "claude-fable-5-1",
|
|
32
35
|
}
|
|
33
36
|
_PRICE = {
|
|
34
37
|
"claude-fable-5": 10.00, "claude-mythos-5": 10.00,
|
|
35
38
|
"claude-opus-5": 5.00, "claude-opus-4-8": 5.00, "claude-opus-4-7": 5.00, "claude-opus-4-6": 5.00,
|
|
36
39
|
"claude-sonnet-5": 3.00, "claude-sonnet-4-6": 3.00,
|
|
40
|
+
# Assumed equal to the family's existing price (no published figure for these ids); the
|
|
41
|
+
# price only feeds the rough "~$/turn in cache reads" estimate.
|
|
42
|
+
"claude-sonnet-5-5": 3.00, "claude-opus-5-5": 5.00, "claude-fable-5-1": 10.00,
|
|
43
|
+
"claude-haiku-4-5": 1.00,
|
|
37
44
|
}
|
|
38
45
|
_NAME = {
|
|
39
46
|
"claude-fable-5": "Fable 5", "claude-mythos-5": "Mythos 5",
|
|
40
47
|
"claude-opus-5": "Opus 5", "claude-opus-4-8": "Opus 4.8",
|
|
41
48
|
"claude-opus-4-7": "Opus 4.7", "claude-opus-4-6": "Opus 4.6",
|
|
42
49
|
"claude-sonnet-5": "Sonnet 5", "claude-sonnet-4-6": "Sonnet 4.6",
|
|
50
|
+
"claude-sonnet-5-5": "Sonnet 5.5", "claude-opus-5-5": "Opus 5.5",
|
|
51
|
+
"claude-fable-5-1": "Fable 5.1", "claude-haiku-4-5": "Haiku 4.5",
|
|
43
52
|
}
|
|
44
53
|
_DEFAULT_WINDOW = 200_000
|
|
45
54
|
_DEFAULT_PRICE = 5.00
|
|
46
55
|
_DEFAULT_NAME = "an unrecognized model"
|
|
47
56
|
|
|
48
57
|
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
_DATED_SNAPSHOT = re.compile(r"(.+)-\d{8}")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _canonical(model_id: str) -> str:
|
|
62
|
+
"""A dated snapshot id (`<id>-YYYYMMDD`) resolves to its undated row. Applied once, and
|
|
63
|
+
only for an exactly-eight-digit suffix: any other suffix (or a snapshot of an unknown id)
|
|
64
|
+
stays unrecognised. `[1m]`/`-latest` are not handled - transcripts' `message.model` never
|
|
65
|
+
carries them."""
|
|
66
|
+
match = _DATED_SNAPSHOT.fullmatch(model_id)
|
|
67
|
+
return match.group(1) if match else model_id
|
|
51
68
|
|
|
52
69
|
|
|
53
70
|
def context_window(model_id: str) -> int:
|
|
54
|
-
if model_id in _WINDOW_1M
|
|
55
|
-
return 1_000_000
|
|
56
|
-
if _is_haiku_4_5(model_id):
|
|
57
|
-
return 200_000
|
|
58
|
-
return _DEFAULT_WINDOW
|
|
71
|
+
return 1_000_000 if _canonical(model_id) in _WINDOW_1M else _DEFAULT_WINDOW
|
|
59
72
|
|
|
60
73
|
|
|
61
74
|
def input_price_per_mtok(model_id: str) -> float:
|
|
62
|
-
|
|
63
|
-
return _PRICE[model_id]
|
|
64
|
-
if _is_haiku_4_5(model_id):
|
|
65
|
-
return 1.00
|
|
66
|
-
return _DEFAULT_PRICE
|
|
75
|
+
return _PRICE.get(_canonical(model_id), _DEFAULT_PRICE)
|
|
67
76
|
|
|
68
77
|
|
|
69
78
|
def display_name(model_id: str) -> str:
|
|
70
|
-
|
|
71
|
-
return _NAME[model_id]
|
|
72
|
-
if _is_haiku_4_5(model_id):
|
|
73
|
-
return "Haiku 4.5"
|
|
74
|
-
return _DEFAULT_NAME
|
|
79
|
+
return _NAME.get(_canonical(model_id), _DEFAULT_NAME)
|
|
@@ -180,3 +180,26 @@ def test_override_end_to_end_via_real_store(tmp_path, monkeypatch, capsys):
|
|
|
180
180
|
out = capsys.readouterr()
|
|
181
181
|
assert rc == 0
|
|
182
182
|
assert out.out == ""
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
@pytest.mark.parametrize(
|
|
186
|
+
("model_id", "name", "cost"),
|
|
187
|
+
[
|
|
188
|
+
("claude-sonnet-5-5", "Sonnet 5.5", "0.07"),
|
|
189
|
+
("claude-opus-5-5", "Opus 5.5", "0.13"),
|
|
190
|
+
("claude-fable-5-1", "Fable 5.1", "0.26"),
|
|
191
|
+
],
|
|
192
|
+
)
|
|
193
|
+
def test_new_5x_models_are_measured_against_their_one_million_token_window(
|
|
194
|
+
tmp_path, monkeypatch, capsys, model_id, name, cost
|
|
195
|
+
):
|
|
196
|
+
p = tmp_path / "t.jsonl"
|
|
197
|
+
_write_transcript(p, [{"type": "assistant", "message": {"model": model_id,
|
|
198
|
+
"usage": {"input_tokens": 266000, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0}}}])
|
|
199
|
+
monkeypatch.setattr(cww, "_is_overridden", lambda session_id: False)
|
|
200
|
+
rc, out = _run_main(monkeypatch, capsys, {"transcript_path": str(p), "session_id": "s1"})
|
|
201
|
+
reason = json.loads(out.out)["reason"]
|
|
202
|
+
assert "~27% of the 1M-token window" in reason
|
|
203
|
+
assert name in reason
|
|
204
|
+
assert f"~${cost}/turn" in reason
|
|
205
|
+
assert "unrecognized" not in reason
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from hooks import model_info
|
|
2
|
+
|
|
3
|
+
CASES = [
|
|
4
|
+
("claude-fable-5", 1_000_000, 10.00, "Fable 5"),
|
|
5
|
+
("claude-mythos-5", 1_000_000, 10.00, "Mythos 5"),
|
|
6
|
+
("claude-opus-5", 1_000_000, 5.00, "Opus 5"),
|
|
7
|
+
("claude-opus-4-8", 1_000_000, 5.00, "Opus 4.8"),
|
|
8
|
+
("claude-opus-4-7", 1_000_000, 5.00, "Opus 4.7"),
|
|
9
|
+
("claude-opus-4-6", 1_000_000, 5.00, "Opus 4.6"),
|
|
10
|
+
("claude-sonnet-5", 1_000_000, 3.00, "Sonnet 5"),
|
|
11
|
+
("claude-sonnet-4-6", 1_000_000, 3.00, "Sonnet 4.6"),
|
|
12
|
+
("claude-sonnet-5-5", 1_000_000, 3.00, "Sonnet 5.5"),
|
|
13
|
+
("claude-opus-5-5", 1_000_000, 5.00, "Opus 5.5"),
|
|
14
|
+
("claude-fable-5-1", 1_000_000, 10.00, "Fable 5.1"),
|
|
15
|
+
("claude-haiku-4-5-20251001", 200_000, 1.00, "Haiku 4.5"),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_known_models():
|
|
20
|
+
for model_id, window, price, name in CASES:
|
|
21
|
+
assert model_info.context_window(model_id) == window
|
|
22
|
+
assert model_info.input_price_per_mtok(model_id) == price
|
|
23
|
+
assert model_info.display_name(model_id) == name
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_unrecognized_model_falls_back():
|
|
27
|
+
assert model_info.context_window("claude-nonexistent-9") == 200_000
|
|
28
|
+
assert model_info.input_price_per_mtok("claude-nonexistent-9") == 5.00
|
|
29
|
+
assert model_info.display_name("claude-nonexistent-9") == "an unrecognized model"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_empty_model_id_falls_back():
|
|
33
|
+
assert model_info.context_window("") == 200_000
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_dated_snapshot_ids_resolve_like_their_family_id():
|
|
37
|
+
"""Claude Code can report a dated snapshot id (`<family>-YYYYMMDD`); it must resolve to the
|
|
38
|
+
same row as the undated id, not fall to the 200k default."""
|
|
39
|
+
for base, window, price, name in CASES:
|
|
40
|
+
if base.startswith("claude-haiku"):
|
|
41
|
+
continue
|
|
42
|
+
dated = f"{base}-20261001"
|
|
43
|
+
assert model_info.context_window(dated) == window
|
|
44
|
+
assert model_info.input_price_per_mtok(dated) == price
|
|
45
|
+
assert model_info.display_name(dated) == name
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_unknown_dated_and_decorated_ids_stay_unrecognised():
|
|
49
|
+
for model_id in (
|
|
50
|
+
"claude-sonnet-5-9-20261001",
|
|
51
|
+
"claude-nonexistent-9-20261001",
|
|
52
|
+
"claude-sonnet-5-5-2026100", # 7 digits
|
|
53
|
+
"claude-sonnet-5-5-202610011", # 9 digits
|
|
54
|
+
"claude-sonnet-5-5-latest",
|
|
55
|
+
"claude-sonnet-5-5[1m]",
|
|
56
|
+
"claude-sonnet-5-5-20261001-20261002", # normalised once only
|
|
57
|
+
"claude-haiku-4-5-garbage",
|
|
58
|
+
):
|
|
59
|
+
assert model_info.context_window(model_id) == 200_000, model_id
|
|
60
|
+
assert model_info.display_name(model_id) == "an unrecognized model", model_id
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_id_that_merely_starts_with_a_known_id_is_not_recognised():
|
|
64
|
+
"""Guards against a future lazy prefix implementation (already true before the fix):
|
|
65
|
+
`claude-sonnet-5-9` must not inherit `claude-sonnet-5`'s row."""
|
|
66
|
+
assert model_info.context_window("claude-sonnet-5-9") == 200_000
|
|
67
|
+
assert model_info.display_name("claude-sonnet-5-9") == "an unrecognized model"
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
from hooks import model_info
|
|
2
|
-
|
|
3
|
-
CASES = [
|
|
4
|
-
("claude-fable-5", 1_000_000, 10.00, "Fable 5"),
|
|
5
|
-
("claude-mythos-5", 1_000_000, 10.00, "Mythos 5"),
|
|
6
|
-
("claude-opus-5", 1_000_000, 5.00, "Opus 5"),
|
|
7
|
-
("claude-opus-4-8", 1_000_000, 5.00, "Opus 4.8"),
|
|
8
|
-
("claude-opus-4-7", 1_000_000, 5.00, "Opus 4.7"),
|
|
9
|
-
("claude-opus-4-6", 1_000_000, 5.00, "Opus 4.6"),
|
|
10
|
-
("claude-sonnet-5", 1_000_000, 3.00, "Sonnet 5"),
|
|
11
|
-
("claude-sonnet-4-6", 1_000_000, 3.00, "Sonnet 4.6"),
|
|
12
|
-
("claude-haiku-4-5-20251001", 200_000, 1.00, "Haiku 4.5"),
|
|
13
|
-
]
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def test_known_models():
|
|
17
|
-
for model_id, window, price, name in CASES:
|
|
18
|
-
assert model_info.context_window(model_id) == window
|
|
19
|
-
assert model_info.input_price_per_mtok(model_id) == price
|
|
20
|
-
assert model_info.display_name(model_id) == name
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def test_unrecognized_model_falls_back():
|
|
24
|
-
assert model_info.context_window("claude-nonexistent-9") == 200_000
|
|
25
|
-
assert model_info.input_price_per_mtok("claude-nonexistent-9") == 5.00
|
|
26
|
-
assert model_info.display_name("claude-nonexistent-9") == "an unrecognized model"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def test_empty_model_id_falls_back():
|
|
30
|
-
assert model_info.context_window("") == 200_000
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_ccmsg.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_ccsched.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_sessions_db.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/cli/migrate_telemetry.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/config/hooks-bundle.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/claude_flags.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/claude_md_install.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/context_overrides.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/doctor_mutes.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/hook_registry.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/install_sync.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/machine_identity.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/__init__.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/addressing.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/cursor.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/lock.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/message.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/repository.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/retention.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/service.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/messaging/store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/__init__.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/backup.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/classify.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/cutover.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/formatting.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/importers.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/init_paths.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/init_service.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/manifest.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/naming.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/readiness.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/rehydrate.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/rename_group.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/reorganize.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/repository.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/resolve.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/service.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/session_output.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/sync_check.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/sync_lock.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/sync_notify.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/vector_clock.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/verify.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/pdata/write_log.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/cadence.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/cursor.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/digest.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/due.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/duration.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/jobspec.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/ledger.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/lock.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/notify.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/reconcile.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/registry.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/runner.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/state.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/store.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/surface.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/throttle.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/scheduler/worker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/sessions_repair.py
RENAMED
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/shell_install.py
RENAMED
|
File without changes
|
|
File without changes
|
{cc_session_tools-3.10.1 → cc_session_tools-3.10.2}/src/cc_session_tools/lib/telemetry_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|