cc-session-tools 3.12.2__tar.gz → 3.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. {cc_session_tools-3.12.2/src/cc_session_tools.egg-info → cc_session_tools-3.13.0}/PKG-INFO +1 -1
  2. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/pyproject.toml +1 -1
  3. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/ccmsg.py +13 -1
  4. cc_session_tools-3.13.0/src/cc_session_tools/lib/messaging/session_ref.py +59 -0
  5. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/sessions_db.py +18 -0
  6. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/send-session-message/SKILL.md +9 -1
  7. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0/src/cc_session_tools.egg-info}/PKG-INFO +1 -1
  8. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools.egg-info/SOURCES.txt +1 -0
  9. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/LICENSE +0 -0
  10. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/README.md +0 -0
  11. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/setup.cfg +0 -0
  12. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/__init__.py +0 -0
  13. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/__init__.py +0 -0
  14. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/ccd.py +0 -0
  15. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/ccr.py +0 -0
  16. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/ccs.py +0 -0
  17. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/ccsched.py +0 -0
  18. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/ccst.py +0 -0
  19. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/migrate_ccmsg.py +0 -0
  20. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/migrate_ccsched.py +0 -0
  21. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/migrate_sessions_db.py +0 -0
  22. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/cli/migrate_telemetry.py +0 -0
  23. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/config/api-keys.example +0 -0
  24. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/config/hooks-bundle.json +0 -0
  25. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/config/session-tag-hook.json +0 -0
  26. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/hooks_install.py +0 -0
  27. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/__init__.py +0 -0
  28. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/api_keys.py +0 -0
  29. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/bun_tools.py +0 -0
  30. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/claude_flags.py +0 -0
  31. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/claude_md_install.py +0 -0
  32. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/context_overrides.py +0 -0
  33. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/db.py +0 -0
  34. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/debug.py +0 -0
  35. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/doctor.py +0 -0
  36. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/doctor_mutes.py +0 -0
  37. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/hook_registry.py +0 -0
  38. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/install_sync.py +0 -0
  39. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/levenshtein.py +0 -0
  40. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/machine_identity.py +0 -0
  41. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/__init__.py +0 -0
  42. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/addressing.py +0 -0
  43. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/cursor.py +0 -0
  44. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/lock.py +0 -0
  45. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/message.py +0 -0
  46. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/move_safety.py +0 -0
  47. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/repository.py +0 -0
  48. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/retention.py +0 -0
  49. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/service.py +0 -0
  50. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/messaging/store.py +0 -0
  51. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/occupancy.py +0 -0
  52. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/paths.py +0 -0
  53. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/__init__.py +0 -0
  54. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/backup.py +0 -0
  55. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/classify.py +0 -0
  56. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/cutover.py +0 -0
  57. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/dump.py +0 -0
  58. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/formatting.py +0 -0
  59. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/importers.py +0 -0
  60. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/init_paths.py +0 -0
  61. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/init_service.py +0 -0
  62. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/manifest.py +0 -0
  63. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/naming.py +0 -0
  64. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/readiness.py +0 -0
  65. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/rehydrate.py +0 -0
  66. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/rename_group.py +0 -0
  67. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/reorganize.py +0 -0
  68. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/repository.py +0 -0
  69. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/resolve.py +0 -0
  70. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/service.py +0 -0
  71. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/session_output.py +0 -0
  72. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/store.py +0 -0
  73. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/sync_check.py +0 -0
  74. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/sync_lock.py +0 -0
  75. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/sync_notify.py +0 -0
  76. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/vector_clock.py +0 -0
  77. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/vector_clock_store.py +0 -0
  78. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/verify.py +0 -0
  79. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/pdata/write_log.py +0 -0
  80. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/picker.py +0 -0
  81. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/proc_lock.py +0 -0
  82. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/prompts.py +0 -0
  83. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/roots.py +0 -0
  84. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/rules.py +0 -0
  85. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/__init__.py +0 -0
  86. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/bundled_jobs.py +0 -0
  87. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/cadence.py +0 -0
  88. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/cursor.py +0 -0
  89. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/digest.py +0 -0
  90. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/due.py +0 -0
  91. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/duration.py +0 -0
  92. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/jobspec.py +0 -0
  93. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/ledger.py +0 -0
  94. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/lock.py +0 -0
  95. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/notify.py +0 -0
  96. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/reconcile.py +0 -0
  97. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/registry.py +0 -0
  98. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/runner.py +0 -0
  99. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/state.py +0 -0
  100. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/store.py +0 -0
  101. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/surface.py +0 -0
  102. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/throttle.py +0 -0
  103. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/scheduler/worker.py +0 -0
  104. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/session_gc.py +0 -0
  105. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/sessions.py +0 -0
  106. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/sessions_repair.py +0 -0
  107. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/shell_install.py +0 -0
  108. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/tasklist.py +0 -0
  109. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/telemetry_store.py +0 -0
  110. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/text_wrap.py +0 -0
  111. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/lib/timefmt.py +0 -0
  112. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/analyse-cc-usage/SKILL.md +0 -0
  113. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/clean-hook-sessions/SKILL.md +0 -0
  114. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py +0 -0
  115. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/compact-smart/SKILL.md +0 -0
  116. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/context-override/SKILL.md +0 -0
  117. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/delete-sessions/SKILL.md +0 -0
  118. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py +0 -0
  119. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/do-executor-critic-assessor-loop/SKILL.md +0 -0
  120. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/extract-pptx/SKILL.md +0 -0
  121. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/extract-pptx/scripts/extract_pptx.py +0 -0
  122. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/extract-to-text/SKILL.md +0 -0
  123. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/extract-to-text/scripts/extract_to_text.py +0 -0
  124. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/find-claude-code-session/SKILL.md +0 -0
  125. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/generate-8digit-code/SKILL.md +0 -0
  126. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/generate-8digit-code/scripts/generate_8digit_code.py +0 -0
  127. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/list-empty-sessions/SKILL.md +0 -0
  128. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/list-empty-sessions/scripts/list_empty_sessions.py +0 -0
  129. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/manage-recurring-cc-jobs-using-ccsched/SKILL.md +0 -0
  130. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/move-session/SKILL.md +0 -0
  131. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/move-session/hooks/sessionstart-pending-rename.sh +0 -0
  132. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/move-session/scripts/cc_session_rules.py +0 -0
  133. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/move-session/scripts/move_session.py +0 -0
  134. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-design-schema/SKILL.md +0 -0
  135. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +0 -0
  136. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-do-init/SKILL.md +0 -0
  137. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-do-manual-migration/SKILL.md +0 -0
  138. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-do-update-consuming-skills/SKILL.md +0 -0
  139. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-do-update-project-docs/SKILL.md +0 -0
  140. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-pdata-resolve-conflicts/SKILL.md +0 -0
  141. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-project-layout-reference/SKILL.md +0 -0
  142. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/pm-update-central-files/SKILL.md +0 -0
  143. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/CALIBRATION.md +0 -0
  144. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/SKILL.md +0 -0
  145. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/analyze_context.py +0 -0
  146. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/duplicates.py +0 -0
  147. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/measure.py +0 -0
  148. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/report.py +0 -0
  149. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/tokens.py +0 -0
  150. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/usage.py +0 -0
  151. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/select-agent-model/SKILL.md +0 -0
  152. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/update-command-cache/SKILL.md +0 -0
  153. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools/skills/update-command-cache/scripts/update_command_cache.py +0 -0
  154. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools.egg-info/dependency_links.txt +0 -0
  155. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools.egg-info/entry_points.txt +0 -0
  156. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools.egg-info/requires.txt +0 -0
  157. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/cc_session_tools.egg-info/top_level.txt +0 -0
  158. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/__init__.py +0 -0
  159. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/attribution.py +0 -0
  160. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/cache.py +0 -0
  161. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/ccusage_wrapper.py +0 -0
  162. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/cli.py +0 -0
  163. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/data/pricing.json +0 -0
  164. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/parent_inference.py +0 -0
  165. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/parser.py +0 -0
  166. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/pricing.py +0 -0
  167. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/query.py +0 -0
  168. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/report.py +0 -0
  169. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/schema.py +0 -0
  170. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/claude_code_usage/session_names.py +0 -0
  171. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/__init__.py +0 -0
  172. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/after_response.py +0 -0
  173. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/bash_hard_deny.py +0 -0
  174. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/bash_security_review.py +0 -0
  175. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/cache.py +0 -0
  176. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/catchup.py +0 -0
  177. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/confirm_8digit.py +0 -0
  178. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/context_window_warning.py +0 -0
  179. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/last_screenshot.py +0 -0
  180. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/marker_allow.py +0 -0
  181. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/markers.py +0 -0
  182. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/messaging_deliver.py +0 -0
  183. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/model_info.py +0 -0
  184. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/normalise.py +0 -0
  185. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/pdata_sync.py +0 -0
  186. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/pending_migration.py +0 -0
  187. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/pending_rename.py +0 -0
  188. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/script_allowlist.py +0 -0
  189. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/session_tag.py +0 -0
  190. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/stats.py +0 -0
  191. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/telemetry.py +0 -0
  192. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/telemetry_query.py +0 -0
  193. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/telemetry_trim.py +0 -0
  194. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/transcript.py +0 -0
  195. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/src/hooks/worklog_guard.py +0 -0
  196. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_after_response.py +0 -0
  197. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_api_keys.py +0 -0
  198. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_attribution.py +0 -0
  199. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_bash_hard_deny.py +0 -0
  200. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_bash_security_review.py +0 -0
  201. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_bash_security_review_allowlist.py +0 -0
  202. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_bun_tools.py +0 -0
  203. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cache.py +0 -0
  204. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cache_sqlite.py +0 -0
  205. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccr_orphans.py +0 -0
  206. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccs_emptiness.py +0 -0
  207. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccs_eta.py +0 -0
  208. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccs_list_mode.py +0 -0
  209. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccs_scope_flags.py +0 -0
  210. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccs_sentinel_sort.py +0 -0
  211. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccs_session_counts.py +0 -0
  212. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_bundle_discovery.py +0 -0
  213. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_ccsched_jobs_cli.py +0 -0
  214. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_cli.py +0 -0
  215. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_context_override_cli.py +0 -0
  216. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_doctor.py +0 -0
  217. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_gc_prune.py +0 -0
  218. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_gc_report.py +0 -0
  219. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_hook_dispatcher.py +0 -0
  220. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_hooks_allowlist.py +0 -0
  221. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_hooks_install_prune.py +0 -0
  222. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_hooks_install_zero_arg.py +0 -0
  223. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_hooks_uninstall.py +0 -0
  224. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_install_everything.py +0 -0
  225. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_machine_identity_cli.py +0 -0
  226. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_main_gate.py +0 -0
  227. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_cli.py +0 -0
  228. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_init_cli.py +0 -0
  229. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_readiness_cli.py +0 -0
  230. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_reconcile_cli.py +0 -0
  231. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_rename_group_cli.py +0 -0
  232. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_reorganize_cli.py +0 -0
  233. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_sync_cli.py +0 -0
  234. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_pdata_verify_cli.py +0 -0
  235. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_repair_sessions_cli.py +0 -0
  236. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_sessions_cli.py +0 -0
  237. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_shell_install.py +0 -0
  238. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_skills_install.py +0 -0
  239. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_skills_uninstall.py +0 -0
  240. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_telemetry_query.py +0 -0
  241. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccst_telemetry_trim.py +0 -0
  242. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_ccusage_wrapper.py +0 -0
  243. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_claude_flags.py +0 -0
  244. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_claude_md_install.py +0 -0
  245. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_clean_hook_sessions_format.py +0 -0
  246. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli.py +0 -0
  247. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli_api_launchers.py +0 -0
  248. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli_ccd.py +0 -0
  249. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli_ccd_dry_run.py +0 -0
  250. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli_ccr.py +0 -0
  251. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli_ccs.py +0 -0
  252. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_cli_version.py +0 -0
  253. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_confirm_8digit.py +0 -0
  254. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_context_overrides.py +0 -0
  255. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_context_window_warning.py +0 -0
  256. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_date_format_conformance.py +0 -0
  257. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_db.py +0 -0
  258. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_debug.py +0 -0
  259. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_doctor_mutes.py +0 -0
  260. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_empty_session.py +0 -0
  261. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_hook_cache.py +0 -0
  262. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_hooks_install.py +0 -0
  263. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_hooks_install_records.py +0 -0
  264. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_install_sync.py +0 -0
  265. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_last_screenshot.py +0 -0
  266. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_levenshtein.py +0 -0
  267. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_machine_identity.py +0 -0
  268. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_marker_allow.py +0 -0
  269. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_migrate_ccmsg.py +0 -0
  270. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_migrate_ccsched.py +0 -0
  271. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_migrate_sessions_db.py +0 -0
  272. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_migrate_telemetry.py +0 -0
  273. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_model_info.py +0 -0
  274. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_normalise.py +0 -0
  275. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_occupancy.py +0 -0
  276. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_parent_inference.py +0 -0
  277. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_parser.py +0 -0
  278. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_paths.py +0 -0
  279. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_pdata_audit_skill.py +0 -0
  280. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_pdata_post_migration_skills.py +0 -0
  281. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_pending_migration_hook.py +0 -0
  282. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_picker.py +0 -0
  283. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_pricing.py +0 -0
  284. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_proc_lock.py +0 -0
  285. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_prompts.py +0 -0
  286. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_query.py +0 -0
  287. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_report.py +0 -0
  288. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_roots.py +0 -0
  289. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_rules.py +0 -0
  290. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_scheduler_bundled_jobs.py +0 -0
  291. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_schema.py +0 -0
  292. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_script_allowlist.py +0 -0
  293. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_session_names.py +0 -0
  294. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_session_tag.py +0 -0
  295. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_sessions.py +0 -0
  296. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_sessions_db.py +0 -0
  297. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_sessions_db_migration_chain.py +0 -0
  298. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_sessions_repair.py +0 -0
  299. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_tasklist.py +0 -0
  300. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_telemetry.py +0 -0
  301. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_telemetry_store.py +0 -0
  302. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_text_wrap.py +0 -0
  303. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_timefmt.py +0 -0
  304. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_transcript.py +0 -0
  305. {cc_session_tools-3.12.2 → cc_session_tools-3.13.0}/tests/test_worklog_guard.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cc-session-tools
3
- Version: 3.12.2
3
+ Version: 3.13.0
4
4
  Summary: Claude Code session management CLI tools (ccd, ccr, ccs, claude-code-usage, ccst) and hook library (hooks package)
5
5
  Author: raffishquartan
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cc-session-tools"
7
- version = "3.12.2"
7
+ version = "3.13.0"
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" }
@@ -14,10 +14,12 @@ from datetime import datetime, timezone
14
14
  from pathlib import Path
15
15
 
16
16
  from cc_session_tools import __version__
17
+ from cc_session_tools.lib import sessions_db
17
18
  from cc_session_tools.lib.messaging import service, store
18
19
  from cc_session_tools.lib.messaging.addressing import SessionContext
19
20
  from cc_session_tools.lib.messaging.lock import AlreadyClaimedError
20
21
  from cc_session_tools.lib.messaging.message import ToKind
22
+ from cc_session_tools.lib.messaging.session_ref import resolve_session_ref
21
23
 
22
24
 
23
25
  def _build_parser() -> argparse.ArgumentParser:
@@ -30,7 +32,11 @@ def _build_parser() -> argparse.ArgumentParser:
30
32
 
31
33
  send_p = sub.add_parser("send", help="Compose and route a message.")
32
34
  rcpt = send_p.add_argument_group("recipient (exactly one)")
33
- rcpt.add_argument("--to-session", metavar="UUID")
35
+ rcpt.add_argument(
36
+ "--to-session", metavar="UUID|NAME|PREFIX",
37
+ help="a session uuid, a session name (YYYYMMDD-<tag>) or a uuid prefix of 8+ hex "
38
+ "characters; names and prefixes are resolved in the sessions store",
39
+ )
34
40
  rcpt.add_argument("--to-project", metavar="NAME")
35
41
  rcpt.add_argument("--to-description", metavar="TEXT")
36
42
  send_p.add_argument("--subject", required=True)
@@ -94,6 +100,11 @@ def _resolve_recipient(args: argparse.Namespace) -> tuple[ToKind, str]:
94
100
  )
95
101
  kind, val = chosen[0]
96
102
  assert val is not None # the filter above guarantees this; narrows for mypy
103
+ if kind == "session":
104
+ val = resolve_session_ref(
105
+ val, find_by_name=sessions_db.find_exact,
106
+ find_by_prefix=sessions_db.find_by_uuid_prefix,
107
+ )
97
108
  return kind, val
98
109
 
99
110
 
@@ -189,6 +200,7 @@ def _cmd_read(args: argparse.Namespace) -> int:
189
200
  return 1
190
201
  print(f"id: {message.id}")
191
202
  print(f"from: {message.from_session} ({message.from_project})")
203
+ print(f"from_uuid: {message.from_uuid}")
192
204
  print(f"to: {message.to_kind}={message.to_value}")
193
205
  print(f"subject: {message.subject}")
194
206
  print(f"status: {message.status}")
@@ -0,0 +1,59 @@
1
+ """Resolve a `ccmsg send --to-session` reference to a full session uuid."""
2
+ from __future__ import annotations
3
+
4
+ import re
5
+ from collections.abc import Callable
6
+
7
+ from cc_session_tools.lib.sessions_db import SessionRow
8
+
9
+ _UUID = re.compile(r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")
10
+ _UUID_PREFIX = re.compile(r"[0-9a-f]{8}[0-9a-f-]*")
11
+ _SESSION_NAME = re.compile(r"\d{8}-\S+")
12
+
13
+ _FORMS = (
14
+ "a session uuid, a session name (YYYYMMDD-<tag>) or a uuid prefix of at least 8 hex characters"
15
+ )
16
+
17
+
18
+ class SessionRefError(ValueError):
19
+ """The reference cannot be resolved to exactly one session."""
20
+
21
+
22
+ def resolve_session_ref(
23
+ ref: str,
24
+ *,
25
+ find_by_name: Callable[[str], list[SessionRow]],
26
+ find_by_prefix: Callable[[str], list[SessionRow]],
27
+ ) -> str:
28
+ """Return the full lowercase uuid `ref` names.
29
+
30
+ A canonical uuid is returned as given: the sessions store only records sessions opened
31
+ through ccd/ccr, so a valid uuid it has not seen must still be addressable. A session name is
32
+ tried before a uuid prefix because a date-prefixed name can also read as hex."""
33
+ ref = ref.strip()
34
+ if _UUID.fullmatch(ref.lower()):
35
+ return ref.lower()
36
+
37
+ is_name = _SESSION_NAME.fullmatch(ref) is not None
38
+ is_prefix = _UUID_PREFIX.fullmatch(ref.lower()) is not None
39
+ if not is_name and not is_prefix:
40
+ raise SessionRefError(f"{ref!r} is not {_FORMS}")
41
+
42
+ rows = find_by_name(ref) if is_name else []
43
+ if not rows and is_prefix:
44
+ rows = find_by_prefix(ref.lower())
45
+ if not rows:
46
+ raise SessionRefError(
47
+ f"no session matches {ref!r}; the sessions store only knows sessions opened with "
48
+ "ccd or ccr, so pass the full uuid for any other session"
49
+ )
50
+ uuids = {row.uuid for row in rows}
51
+ if len(uuids) > 1:
52
+ lines = "\n".join(
53
+ f" {row.uuid[:8]} {row.basename} {row.project_dir}"
54
+ for row in sorted(rows, key=lambda r: (r.uuid, str(r.project_dir)))
55
+ )
56
+ raise SessionRefError(
57
+ f"{ref!r} matches {len(uuids)} sessions; retry with a full uuid:\n{lines}"
58
+ )
59
+ return next(iter(uuids))
@@ -626,6 +626,24 @@ def find_exact(basename: str, *, path: Path | None = None) -> list[SessionRow]:
626
626
  conn.close()
627
627
 
628
628
 
629
+ def find_by_uuid_prefix(prefix: str, *, path: Path | None = None) -> list[SessionRow]:
630
+ """Every row whose uuid starts with `prefix`. `prefix` must hold only hex digits and
631
+ dashes (the caller validates), so it contains no LIKE wildcard."""
632
+ try:
633
+ conn = connect(path=path, readonly=True)
634
+ except sqlite3.OperationalError:
635
+ return []
636
+ try:
637
+ rows = conn.execute(
638
+ "SELECT project_dir, basename, uuid, start_date, last_opened, last_active "
639
+ "FROM sessions WHERE uuid LIKE ?",
640
+ (prefix + "%",),
641
+ ).fetchall()
642
+ return [_row_to_session(r) for r in rows]
643
+ finally:
644
+ conn.close()
645
+
646
+
629
647
  # ---------------------------------------------------------------------------
630
648
  # sessions_migration_ambiguous
631
649
  # ---------------------------------------------------------------------------
@@ -21,7 +21,15 @@ Do not send for things the user can see in this session, or to talk to yourself.
21
21
  Decide which of three addressing modes fits, and **confirm with the user when it
22
22
  is ambiguous**:
23
23
 
24
- 1. `--to-session <uuid>` - a specific known session (you have its uuid).
24
+ 1. `--to-session <ref>` - a specific known session. `<ref>` is a full uuid, a session name
25
+ (the `cc-sessions/` directory name, `YYYYMMDD-<tag>`) or a uuid prefix of at least 8 hex
26
+ characters, for example the leading characters shown in a received message's sender field. A
27
+ name or prefix is resolved in the sessions store and the message is stored for the full uuid.
28
+ It exits 2 and stores nothing when nothing matches or when it matches several sessions (a
29
+ forked session): the error lists the candidates, so retry with a full uuid. The store knows
30
+ only sessions opened with `ccd`/`ccr`; for any other session pass the full uuid. `ccmsg read`
31
+ prints the sender's full uuid on its `from_uuid:` line, so you can reply to a session you know
32
+ only from a message.
25
33
  2. `--to-project <name>` - any session in a named project.
26
34
  3. `--to-description "<text>"` - "whoever is working on X". Surfaced to candidate
27
35
  sessions; one claims it.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cc-session-tools
3
- Version: 3.12.2
3
+ Version: 3.13.0
4
4
  Summary: Claude Code session management CLI tools (ccd, ccr, ccs, claude-code-usage, ccst) and hook library (hooks package)
5
5
  Author: raffishquartan
6
6
  License: MIT License
@@ -62,6 +62,7 @@ src/cc_session_tools/lib/messaging/move_safety.py
62
62
  src/cc_session_tools/lib/messaging/repository.py
63
63
  src/cc_session_tools/lib/messaging/retention.py
64
64
  src/cc_session_tools/lib/messaging/service.py
65
+ src/cc_session_tools/lib/messaging/session_ref.py
65
66
  src/cc_session_tools/lib/messaging/store.py
66
67
  src/cc_session_tools/lib/pdata/__init__.py
67
68
  src/cc_session_tools/lib/pdata/backup.py