cc-session-tools 3.1.0__tar.gz → 3.2.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 (278) hide show
  1. {cc_session_tools-3.1.0/src/cc_session_tools.egg-info → cc_session_tools-3.2.0}/PKG-INFO +5 -1
  2. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/README.md +4 -0
  3. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/pyproject.toml +1 -1
  4. cc_session_tools-3.2.0/src/cc_session_tools/skills/compact-smart/SKILL.md +87 -0
  5. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0/src/cc_session_tools.egg-info}/PKG-INFO +5 -1
  6. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools.egg-info/SOURCES.txt +1 -0
  7. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_bundle_discovery.py +12 -0
  8. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/LICENSE +0 -0
  9. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/setup.cfg +0 -0
  10. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/__init__.py +0 -0
  11. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/__init__.py +0 -0
  12. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/ccd.py +0 -0
  13. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/ccmsg.py +0 -0
  14. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/ccr.py +0 -0
  15. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/ccs.py +0 -0
  16. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/ccsched.py +0 -0
  17. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/ccst.py +0 -0
  18. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/migrate_ccmsg.py +0 -0
  19. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/migrate_ccsched.py +0 -0
  20. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/migrate_sessions_db.py +0 -0
  21. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/cli/migrate_telemetry.py +0 -0
  22. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/config/hooks-bundle.json +0 -0
  23. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/config/session-tag-hook.json +0 -0
  24. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/hooks_install.py +0 -0
  25. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/__init__.py +0 -0
  26. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/claude_flags.py +0 -0
  27. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/claude_md_install.py +0 -0
  28. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/context_overrides.py +0 -0
  29. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/db.py +0 -0
  30. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/debug.py +0 -0
  31. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/doctor.py +0 -0
  32. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/doctor_mutes.py +0 -0
  33. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/hook_registry.py +0 -0
  34. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/install_sync.py +0 -0
  35. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/levenshtein.py +0 -0
  36. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/machine_identity.py +0 -0
  37. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/__init__.py +0 -0
  38. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/addressing.py +0 -0
  39. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/cursor.py +0 -0
  40. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/lock.py +0 -0
  41. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/message.py +0 -0
  42. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/move_safety.py +0 -0
  43. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/repository.py +0 -0
  44. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/retention.py +0 -0
  45. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/service.py +0 -0
  46. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/messaging/store.py +0 -0
  47. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/occupancy.py +0 -0
  48. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/paths.py +0 -0
  49. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/__init__.py +0 -0
  50. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/backup.py +0 -0
  51. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/classify.py +0 -0
  52. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/cutover.py +0 -0
  53. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/dump.py +0 -0
  54. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/formatting.py +0 -0
  55. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/importers.py +0 -0
  56. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/init_paths.py +0 -0
  57. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/init_service.py +0 -0
  58. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/manifest.py +0 -0
  59. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/naming.py +0 -0
  60. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/rehydrate.py +0 -0
  61. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/rename_group.py +0 -0
  62. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/reorganize.py +0 -0
  63. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/repository.py +0 -0
  64. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/resolve.py +0 -0
  65. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/service.py +0 -0
  66. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/session_output.py +0 -0
  67. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/store.py +0 -0
  68. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/sync_check.py +0 -0
  69. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/sync_lock.py +0 -0
  70. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/sync_notify.py +0 -0
  71. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/vector_clock.py +0 -0
  72. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/vector_clock_store.py +0 -0
  73. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/verify.py +0 -0
  74. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/pdata/write_log.py +0 -0
  75. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/picker.py +0 -0
  76. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/proc_lock.py +0 -0
  77. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/prompts.py +0 -0
  78. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/roots.py +0 -0
  79. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/rules.py +0 -0
  80. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/__init__.py +0 -0
  81. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/bundled_jobs.py +0 -0
  82. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/cadence.py +0 -0
  83. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/cursor.py +0 -0
  84. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/digest.py +0 -0
  85. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/due.py +0 -0
  86. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/duration.py +0 -0
  87. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/jobspec.py +0 -0
  88. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/ledger.py +0 -0
  89. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/lock.py +0 -0
  90. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/notify.py +0 -0
  91. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/reconcile.py +0 -0
  92. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/registry.py +0 -0
  93. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/runner.py +0 -0
  94. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/state.py +0 -0
  95. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/store.py +0 -0
  96. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/surface.py +0 -0
  97. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/throttle.py +0 -0
  98. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/scheduler/worker.py +0 -0
  99. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/session_gc.py +0 -0
  100. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/sessions.py +0 -0
  101. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/sessions_db.py +0 -0
  102. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/sessions_repair.py +0 -0
  103. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/shell_install.py +0 -0
  104. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/tasklist.py +0 -0
  105. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/lib/telemetry_store.py +0 -0
  106. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/prompts/pdata-migration-claude-md-update.md +0 -0
  107. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/prompts/pdata-migration-skills-update.md +0 -0
  108. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/analyse-cc-usage/SKILL.md +0 -0
  109. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/clean-hook-sessions/SKILL.md +0 -0
  110. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py +0 -0
  111. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/context-override/SKILL.md +0 -0
  112. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/delete-sessions/SKILL.md +0 -0
  113. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py +0 -0
  114. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/do-executor-critic-assessor-loop/SKILL.md +0 -0
  115. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/find-claude-code-session/SKILL.md +0 -0
  116. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/generate-8digit-code/SKILL.md +0 -0
  117. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/generate-8digit-code/scripts/generate_8digit_code.py +0 -0
  118. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/list-empty-sessions/SKILL.md +0 -0
  119. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/list-empty-sessions/scripts/list_empty_sessions.py +0 -0
  120. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/manage-recurring-cc-jobs-using-ccsched/SKILL.md +0 -0
  121. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/move-session/SKILL.md +0 -0
  122. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/move-session/hooks/sessionstart-pending-rename.sh +0 -0
  123. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/move-session/scripts/cc_session_rules.py +0 -0
  124. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/move-session/scripts/move_session.py +0 -0
  125. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-pdata-conflict-resolution/SKILL.md +0 -0
  126. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +0 -0
  127. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-pdata-do-migrate/SKILL.md +0 -0
  128. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-pdata-schema-design/SKILL.md +0 -0
  129. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-project-init/SKILL.md +0 -0
  130. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-project-layout-reference/SKILL.md +0 -0
  131. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/pm-update-central-files/SKILL.md +0 -0
  132. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/CALIBRATION.md +0 -0
  133. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/SKILL.md +0 -0
  134. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/analyze_context.py +0 -0
  135. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/duplicates.py +0 -0
  136. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/measure.py +0 -0
  137. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/report.py +0 -0
  138. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/tokens.py +0 -0
  139. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/usage.py +0 -0
  140. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/select-agent-model/SKILL.md +0 -0
  141. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/send-session-message/SKILL.md +0 -0
  142. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/update-command-cache/SKILL.md +0 -0
  143. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools/skills/update-command-cache/scripts/update_command_cache.py +0 -0
  144. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools.egg-info/dependency_links.txt +0 -0
  145. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools.egg-info/entry_points.txt +0 -0
  146. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools.egg-info/requires.txt +0 -0
  147. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/cc_session_tools.egg-info/top_level.txt +0 -0
  148. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/__init__.py +0 -0
  149. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/attribution.py +0 -0
  150. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/cache.py +0 -0
  151. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/ccusage_wrapper.py +0 -0
  152. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/cli.py +0 -0
  153. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/data/pricing.json +0 -0
  154. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/parent_inference.py +0 -0
  155. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/parser.py +0 -0
  156. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/pricing.py +0 -0
  157. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/query.py +0 -0
  158. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/report.py +0 -0
  159. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/schema.py +0 -0
  160. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/claude_code_usage/session_names.py +0 -0
  161. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/__init__.py +0 -0
  162. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/after_response.py +0 -0
  163. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/bash_hard_deny.py +0 -0
  164. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/bash_security_review.py +0 -0
  165. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/cache.py +0 -0
  166. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/catchup.py +0 -0
  167. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/confirm_8digit.py +0 -0
  168. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/context_window_warning.py +0 -0
  169. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/last_screenshot.py +0 -0
  170. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/marker_allow.py +0 -0
  171. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/markers.py +0 -0
  172. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/messaging_deliver.py +0 -0
  173. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/model_info.py +0 -0
  174. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/normalise.py +0 -0
  175. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/pdata_sync.py +0 -0
  176. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/pending_migration.py +0 -0
  177. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/pending_rename.py +0 -0
  178. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/session_tag.py +0 -0
  179. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/stats.py +0 -0
  180. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/telemetry.py +0 -0
  181. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/telemetry_query.py +0 -0
  182. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/telemetry_trim.py +0 -0
  183. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/transcript.py +0 -0
  184. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/src/hooks/worklog_guard.py +0 -0
  185. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_after_response.py +0 -0
  186. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_attribution.py +0 -0
  187. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_bash_hard_deny.py +0 -0
  188. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_bash_security_review.py +0 -0
  189. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cache.py +0 -0
  190. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cache_sqlite.py +0 -0
  191. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccr_orphans.py +0 -0
  192. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccs_emptiness.py +0 -0
  193. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccs_eta.py +0 -0
  194. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccs_list_mode.py +0 -0
  195. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccs_scope_flags.py +0 -0
  196. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccs_sentinel_sort.py +0 -0
  197. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccs_session_counts.py +0 -0
  198. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_ccsched_jobs_cli.py +0 -0
  199. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_cli.py +0 -0
  200. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_context_override_cli.py +0 -0
  201. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_doctor.py +0 -0
  202. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_gc_prune.py +0 -0
  203. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_gc_report.py +0 -0
  204. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_hook_dispatcher.py +0 -0
  205. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_hooks_install_prune.py +0 -0
  206. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_hooks_install_zero_arg.py +0 -0
  207. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_hooks_uninstall.py +0 -0
  208. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_install_everything.py +0 -0
  209. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_machine_identity_cli.py +0 -0
  210. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_main_gate.py +0 -0
  211. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_cli.py +0 -0
  212. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_init_cli.py +0 -0
  213. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_reconcile_cli.py +0 -0
  214. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_rename_group_cli.py +0 -0
  215. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_reorganize_cli.py +0 -0
  216. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_sync_cli.py +0 -0
  217. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_pdata_verify_cli.py +0 -0
  218. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_repair_sessions_cli.py +0 -0
  219. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_sessions_cli.py +0 -0
  220. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_shell_install.py +0 -0
  221. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_skills_install.py +0 -0
  222. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_skills_uninstall.py +0 -0
  223. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_telemetry_query.py +0 -0
  224. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccst_telemetry_trim.py +0 -0
  225. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_ccusage_wrapper.py +0 -0
  226. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_claude_flags.py +0 -0
  227. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_claude_md_install.py +0 -0
  228. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cli.py +0 -0
  229. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cli_ccd.py +0 -0
  230. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cli_ccd_dry_run.py +0 -0
  231. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cli_ccr.py +0 -0
  232. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cli_ccs.py +0 -0
  233. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_cli_version.py +0 -0
  234. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_confirm_8digit.py +0 -0
  235. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_context_overrides.py +0 -0
  236. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_context_window_warning.py +0 -0
  237. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_db.py +0 -0
  238. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_debug.py +0 -0
  239. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_doctor_mutes.py +0 -0
  240. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_empty_session.py +0 -0
  241. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_hook_cache.py +0 -0
  242. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_hooks_install.py +0 -0
  243. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_install_sync.py +0 -0
  244. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_last_screenshot.py +0 -0
  245. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_levenshtein.py +0 -0
  246. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_machine_identity.py +0 -0
  247. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_marker_allow.py +0 -0
  248. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_migrate_ccmsg.py +0 -0
  249. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_migrate_ccsched.py +0 -0
  250. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_migrate_sessions_db.py +0 -0
  251. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_migrate_telemetry.py +0 -0
  252. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_model_info.py +0 -0
  253. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_normalise.py +0 -0
  254. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_occupancy.py +0 -0
  255. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_parent_inference.py +0 -0
  256. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_parser.py +0 -0
  257. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_paths.py +0 -0
  258. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_pending_migration_hook.py +0 -0
  259. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_picker.py +0 -0
  260. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_pricing.py +0 -0
  261. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_proc_lock.py +0 -0
  262. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_prompts.py +0 -0
  263. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_query.py +0 -0
  264. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_report.py +0 -0
  265. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_roots.py +0 -0
  266. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_rules.py +0 -0
  267. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_scheduler_bundled_jobs.py +0 -0
  268. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_schema.py +0 -0
  269. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_session_names.py +0 -0
  270. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_session_tag.py +0 -0
  271. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_sessions.py +0 -0
  272. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_sessions_db.py +0 -0
  273. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_sessions_repair.py +0 -0
  274. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_tasklist.py +0 -0
  275. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_telemetry.py +0 -0
  276. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_telemetry_store.py +0 -0
  277. {cc_session_tools-3.1.0 → cc_session_tools-3.2.0}/tests/test_transcript.py +0 -0
  278. {cc_session_tools-3.1.0 → cc_session_tools-3.2.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.1.0
3
+ Version: 3.2.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
@@ -575,6 +575,10 @@ Curates the SHA-256 command cache the `bash-security-review` hook reads (`CCCS_U
575
575
 
576
576
  Archives (tar.gz, verified) then deletes `bash-security-review`'s own hook-security-check session transcripts — those whose first user message begins "Review this shell command for security risks" — which otherwise pile up by the thousands and pollute `claude --resume`/`--continue`. Triggers on "clean up hook sessions", "archive old hook security sessions", or `--resume` being cluttered with security-check conversations. Dry-run by default; 8-digit gated for `--execute` (via `generate-8digit-code`). Also runs unattended weekly via the bundled `clean-hook-sessions-weekly` job (see [Scheduled-task catch-up](#scheduled-task-catch-up)).
577
577
 
578
+ ### `compact-smart`
579
+
580
+ Drafts the compaction-preservation paragraph you'd otherwise ask Claude for by hand before `/compact`, then hands back the exact `/compact <paragraph>` command to run — it never invokes `/compact` itself (Claude Code excludes that command from what a skill can invoke). Triggers on `/compact-smart`, "give me a paragraph to pass to compact", "draft a compact instruction", "help me compact this session". Covers decisions and their rationale (especially mid-session corrections), file/PR/branch pointers, standing constraints, and outstanding tasks split into "Claude's next steps" vs. "the user's own to-dos" — then shows you the draft to confirm or edit (including dropping an unrelated thread) before finalizing. Refreshes the session's `working/WORKLOG.md` if one already exists (never creates one), which also clears the `worklog-guard` PreCompact hook's staleness gate for the command it hands back.
581
+
578
582
  See `docs/design.md` for the full design and CLI contract.
579
583
 
580
584
  ## Inter-session messaging
@@ -518,6 +518,10 @@ Curates the SHA-256 command cache the `bash-security-review` hook reads (`CCCS_U
518
518
 
519
519
  Archives (tar.gz, verified) then deletes `bash-security-review`'s own hook-security-check session transcripts — those whose first user message begins "Review this shell command for security risks" — which otherwise pile up by the thousands and pollute `claude --resume`/`--continue`. Triggers on "clean up hook sessions", "archive old hook security sessions", or `--resume` being cluttered with security-check conversations. Dry-run by default; 8-digit gated for `--execute` (via `generate-8digit-code`). Also runs unattended weekly via the bundled `clean-hook-sessions-weekly` job (see [Scheduled-task catch-up](#scheduled-task-catch-up)).
520
520
 
521
+ ### `compact-smart`
522
+
523
+ Drafts the compaction-preservation paragraph you'd otherwise ask Claude for by hand before `/compact`, then hands back the exact `/compact <paragraph>` command to run — it never invokes `/compact` itself (Claude Code excludes that command from what a skill can invoke). Triggers on `/compact-smart`, "give me a paragraph to pass to compact", "draft a compact instruction", "help me compact this session". Covers decisions and their rationale (especially mid-session corrections), file/PR/branch pointers, standing constraints, and outstanding tasks split into "Claude's next steps" vs. "the user's own to-dos" — then shows you the draft to confirm or edit (including dropping an unrelated thread) before finalizing. Refreshes the session's `working/WORKLOG.md` if one already exists (never creates one), which also clears the `worklog-guard` PreCompact hook's staleness gate for the command it hands back.
524
+
521
525
  See `docs/design.md` for the full design and CLI contract.
522
526
 
523
527
  ## Inter-session messaging
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cc-session-tools"
7
- version = "3.1.0"
7
+ version = "3.2.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" }
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: compact-smart
3
+ description: Draft a compaction-preservation paragraph from the current session and hand back the exact /compact command to run - automates what the user otherwise asks for by hand ("give me a paragraph to pass to /compact"). Use when the user runs /compact-smart, or says "give me a paragraph to pass to compact", "draft a compact instruction", "help me compact this session", "what should I tell compact to keep", or is about to /compact and wants to be sure nothing important gets lost.
4
+ ---
5
+
6
+ # compact-smart
7
+
8
+ Drafts the instructions `/compact [instructions]` should carry, then hands back the exact
9
+ command to run. Does **not** invoke `/compact` itself - Claude Code's own docs explicitly
10
+ exclude `/compact` from the set of built-in commands a skill can invoke, so the deliverable
11
+ here is a ready-to-run command, not a compaction event.
12
+
13
+ ## Why this exists
14
+
15
+ Real usage (a week of transcripts across every project) shows the user asking, by hand, for
16
+ "a paragraph to pass to /compact" roughly 3 times for every bare `/compact` call - and
17
+ re-explaining what counts as "relevant" nearly every time. What already survives compaction
18
+ automatically (project-root `CLAUDE.md`, memory files, system/environment info) is re-loaded
19
+ fresh from disk; what does **not** reliably survive is anything that only ever existed in
20
+ the conversation itself - decisions, corrections, standing agreements, outstanding to-dos.
21
+ A `/compact` instruction protects those for the *next* compaction only; the resulting
22
+ summary is itself just conversation text again and can be trimmed by a *later* one - so this
23
+ skill also refreshes the session's `WORKLOG.md`, if it has one, as a second, more durable
24
+ safeguard.
25
+
26
+ ## What to draft
27
+
28
+ Review the conversation so far (you already have it loaded - no need to re-read the
29
+ transcript file from disk) and produce a paragraph covering, in this order:
30
+
31
+ 1. **Decisions and their rationale** - especially any point where the initial plan or
32
+ approach was found wrong and corrected mid-session. State the corrected approach and WHY
33
+ it changed, not just what the original plan was.
34
+ 2. **Concrete artifact pointers** - file paths, PR numbers, branch names, commit hashes,
35
+ OpenSpec change names, or anything else someone would need to go find the actual work.
36
+ 3. **Standing constraints or policies** established or confirmed during this session that
37
+ must carry forward (e.g. "no attribution lines in commits", "confirm before opening a
38
+ PR", a data-handling rule agreed mid-session). These are easy for a generic summary to
39
+ drop silently because they're usually stated once, early, and never repeated.
40
+ 4. **Outstanding tasks, split into two distinct groups**: what you (Claude) will do next,
41
+ and - separately and explicitly labeled - anything that is the *user's own* action to
42
+ take (e.g. "you still need to delete branch X yourself", "review the PR before merging").
43
+ Do not fold these two categories together.
44
+ 5. **An explicit "what happens next" statement.** Never leave this implicit.
45
+
46
+ Keep it dense and concrete - file paths and specific facts, not vague summary language.
47
+
48
+ ## Handling `working/WORKLOG.md`
49
+
50
+ Check whether the current session has one: `$CLD_SESSION_DIR/working/WORKLOG.md`.
51
+
52
+ - **If it exists**: update it with the same substance as the draft above (append or rewrite
53
+ its "current state" section - match whatever structure the file already uses). This
54
+ repo's own `worklog-guard` PreCompact hook blocks a manual `/compact` if this file is more
55
+ than an hour stale, so refreshing it here also clears that gate for the command you're
56
+ about to hand back.
57
+ - **If it does not exist**: do not create one. `ccd`/`ccr` never create a WORKLOG.md
58
+ automatically - it is opt-in scratch content the user or Claude may choose to keep during
59
+ a session, not mandatory state. Creating one here for the first time would be the skill
60
+ inventing a convention that has never applied to this session.
61
+
62
+ ## Confirmation step
63
+
64
+ Show the drafted paragraph to the user before finalizing anything. Do not skip this even if
65
+ the draft feels obviously complete - the point is to catch a miss before compaction discards
66
+ the detail, not after. Accept:
67
+
68
+ - Approval as-is, or
69
+ - Free-form edits, or
70
+ - An explicit exclusion ("drop the X thread, keep everything else") - a stale, unrelated
71
+ tangent that happened to occur in the same session is a real, recurring case; when asked,
72
+ remove that content from the paragraph rather than trying to talk the user out of it.
73
+
74
+ This is a single review-and-edit round, not a multi-question interview - draft first, then
75
+ let the user correct it in one pass. Asking a series of clarifying questions before drafting
76
+ anything reintroduces exactly the friction this skill exists to remove.
77
+
78
+ ## Final output
79
+
80
+ Once confirmed, present the exact command on its own line, ready to copy or type verbatim:
81
+
82
+ ```
83
+ /compact <finalized paragraph>
84
+ ```
85
+
86
+ Do not summarize what you're about to do instead of showing the literal command - the
87
+ command itself is the deliverable.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cc-session-tools
3
- Version: 3.1.0
3
+ Version: 3.2.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
@@ -575,6 +575,10 @@ Curates the SHA-256 command cache the `bash-security-review` hook reads (`CCCS_U
575
575
 
576
576
  Archives (tar.gz, verified) then deletes `bash-security-review`'s own hook-security-check session transcripts — those whose first user message begins "Review this shell command for security risks" — which otherwise pile up by the thousands and pollute `claude --resume`/`--continue`. Triggers on "clean up hook sessions", "archive old hook security sessions", or `--resume` being cluttered with security-check conversations. Dry-run by default; 8-digit gated for `--execute` (via `generate-8digit-code`). Also runs unattended weekly via the bundled `clean-hook-sessions-weekly` job (see [Scheduled-task catch-up](#scheduled-task-catch-up)).
577
577
 
578
+ ### `compact-smart`
579
+
580
+ Drafts the compaction-preservation paragraph you'd otherwise ask Claude for by hand before `/compact`, then hands back the exact `/compact <paragraph>` command to run — it never invokes `/compact` itself (Claude Code excludes that command from what a skill can invoke). Triggers on `/compact-smart`, "give me a paragraph to pass to compact", "draft a compact instruction", "help me compact this session". Covers decisions and their rationale (especially mid-session corrections), file/PR/branch pointers, standing constraints, and outstanding tasks split into "Claude's next steps" vs. "the user's own to-dos" — then shows you the draft to confirm or edit (including dropping an unrelated thread) before finalizing. Refreshes the session's `working/WORKLOG.md` if one already exists (never creates one), which also clears the `worklog-guard` PreCompact hook's staleness gate for the command it hands back.
581
+
578
582
  See `docs/design.md` for the full design and CLI contract.
579
583
 
580
584
  ## Inter-session messaging
@@ -108,6 +108,7 @@ src/cc_session_tools/prompts/pdata-migration-skills-update.md
108
108
  src/cc_session_tools/skills/analyse-cc-usage/SKILL.md
109
109
  src/cc_session_tools/skills/clean-hook-sessions/SKILL.md
110
110
  src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py
111
+ src/cc_session_tools/skills/compact-smart/SKILL.md
111
112
  src/cc_session_tools/skills/context-override/SKILL.md
112
113
  src/cc_session_tools/skills/delete-sessions/SKILL.md
113
114
  src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py
@@ -151,3 +151,15 @@ def test_pm_pdata_audit_and_migrate_are_bundled_skills():
151
151
  discovered = {p.name for p in ccst._discover_skills(ccst._discover_source_dir())}
152
152
  assert "pm-pdata-do-audit-and-prepare-to-migrate" in discovered
153
153
  assert "pm-pdata-do-migrate" in discovered
154
+
155
+
156
+ def test_compact_smart_is_a_bundled_skill():
157
+ """compact-smart drafts a /compact preservation paragraph and hands back the exact
158
+ command to run - see openspec/changes/add-compact-smart-skill (archived) for the design.
159
+ Pure instruction skill, no backing script - this discovery assertion plus a frontmatter
160
+ sanity check is the extent of what's mechanically testable (design.md Decision 1)."""
161
+ skills = {p.name: p for p in ccst._discover_skills(ccst._discover_source_dir())}
162
+ assert "compact-smart" in skills
163
+ text = (skills["compact-smart"] / "SKILL.md").read_text()
164
+ assert text.startswith("---\nname: compact-smart\n")
165
+ assert "/compact-smart" in text