reprompt-cli 1.5.0__tar.gz → 1.7.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.gitignore +1 -0
  2. reprompt_cli-1.7.1/.pre-commit-hooks.yaml +26 -0
  3. reprompt_cli-1.7.1/.testmondata-shm +0 -0
  4. reprompt_cli-1.7.1/.testmondata-wal +0 -0
  5. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/CHANGELOG.md +31 -0
  6. reprompt_cli-1.7.1/CONTRIBUTING.md +120 -0
  7. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/PKG-INFO +59 -11
  8. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/README.md +58 -10
  9. reprompt_cli-1.7.1/Screenshot 2026-03-24 at 09.45.03.png +0 -0
  10. reprompt_cli-1.7.1/action.yml +211 -0
  11. reprompt_cli-1.7.1/docs/demo.gif +0 -0
  12. reprompt_cli-1.7.1/docs/icons/brand-icon-128.png +0 -0
  13. reprompt_cli-1.7.1/docs/icons/brand-icon-16.png +0 -0
  14. reprompt_cli-1.7.1/docs/icons/brand-icon-256.png +0 -0
  15. reprompt_cli-1.7.1/docs/icons/brand-icon-32.png +0 -0
  16. reprompt_cli-1.7.1/docs/icons/brand-icon-48.png +0 -0
  17. reprompt_cli-1.7.1/docs/icons/brand-icon-512.png +0 -0
  18. reprompt_cli-1.7.1/docs/icons/brand-icon-96.png +0 -0
  19. reprompt_cli-1.7.1/docs/icons/brand-icon.svg +22 -0
  20. reprompt_cli-1.7.1/docs/icons/cli-favicon-128.png +0 -0
  21. reprompt_cli-1.7.1/docs/icons/cli-favicon-16.png +0 -0
  22. reprompt_cli-1.7.1/docs/icons/cli-favicon-256.png +0 -0
  23. reprompt_cli-1.7.1/docs/icons/cli-favicon-32.png +0 -0
  24. reprompt_cli-1.7.1/docs/icons/cli-favicon-48.png +0 -0
  25. reprompt_cli-1.7.1/docs/icons/cli-favicon-512.png +0 -0
  26. reprompt_cli-1.7.1/docs/icons/cli-favicon-96.png +0 -0
  27. reprompt_cli-1.7.1/docs/icons/cli-favicon.svg +13 -0
  28. reprompt_cli-1.7.1/docs/icons/cli-icon-128.png +0 -0
  29. reprompt_cli-1.7.1/docs/icons/cli-icon-16.png +0 -0
  30. reprompt_cli-1.7.1/docs/icons/cli-icon-256.png +0 -0
  31. reprompt_cli-1.7.1/docs/icons/cli-icon-32.png +0 -0
  32. reprompt_cli-1.7.1/docs/icons/cli-icon-48.png +0 -0
  33. reprompt_cli-1.7.1/docs/icons/cli-icon-512.png +0 -0
  34. reprompt_cli-1.7.1/docs/icons/cli-icon-96.png +0 -0
  35. reprompt_cli-1.7.1/docs/icons/cli-icon.svg +15 -0
  36. reprompt_cli-1.7.1/docs/icons/favicon-128.png +0 -0
  37. reprompt_cli-1.7.1/docs/icons/favicon-16.png +0 -0
  38. reprompt_cli-1.7.1/docs/icons/favicon-256.png +0 -0
  39. reprompt_cli-1.7.1/docs/icons/favicon-32.png +0 -0
  40. reprompt_cli-1.7.1/docs/icons/favicon-48.png +0 -0
  41. reprompt_cli-1.7.1/docs/icons/favicon-512.png +0 -0
  42. reprompt_cli-1.7.1/docs/icons/favicon-96.png +0 -0
  43. reprompt_cli-1.7.1/docs/icons/favicon.svg +16 -0
  44. reprompt_cli-1.7.1/docs/icons/generate.sh +44 -0
  45. reprompt_cli-1.7.1/docs/superpowers/specs/2026-03-24-v14-command-consolidation-design.md +287 -0
  46. reprompt_cli-1.7.1/docs/superpowers/specs/2026-03-25-v1.5-dashboard-design.md +338 -0
  47. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/pyproject.toml +1 -1
  48. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/__init__.py +1 -1
  49. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/chatgpt.py +13 -0
  50. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/claude_code.py +10 -0
  51. reprompt_cli-1.7.1/src/reprompt/adapters/codex.py +239 -0
  52. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/handler.py +10 -26
  53. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/manifest.py +2 -0
  54. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/protocol.py +10 -1
  55. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/cli.py +392 -84
  56. reprompt_cli-1.7.1/src/reprompt/core/agent.py +319 -0
  57. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/analyzer.py +3 -1
  58. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/compress.py +72 -1
  59. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/conversation.py +2 -0
  60. reprompt_cli-1.7.1/src/reprompt/core/cost.py +96 -0
  61. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/dedup.py +15 -0
  62. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/extractors.py +19 -6
  63. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/extractors_zh.py +2 -1
  64. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/insights.py +14 -0
  65. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/pipeline.py +16 -1
  66. reprompt_cli-1.7.1/src/reprompt/core/privacy_scan.py +210 -0
  67. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/suggestions.py +4 -2
  68. reprompt_cli-1.7.1/src/reprompt/mcp.py +335 -0
  69. reprompt_cli-1.7.1/src/reprompt/output/agent_terminal.py +143 -0
  70. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/dashboard_terminal.py +16 -2
  71. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/terminal.py +78 -5
  72. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/storage/db.py +16 -4
  73. reprompt_cli-1.7.1/tests/test_agent.py +383 -0
  74. reprompt_cli-1.7.1/tests/test_agent_cli.py +178 -0
  75. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_cli.py +13 -4
  76. reprompt_cli-1.7.1/tests/test_bridge_e2e.py +343 -0
  77. reprompt_cli-1.7.1/tests/test_codex_adapter.py +319 -0
  78. reprompt_cli-1.7.1/tests/test_copy_flag.py +133 -0
  79. reprompt_cli-1.7.1/tests/test_cost.py +93 -0
  80. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db_effectiveness.py +77 -0
  81. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_e2e.py +2 -2
  82. reprompt_cli-1.7.1/tests/test_lint_cli.py +184 -0
  83. reprompt_cli-1.7.1/tests/test_mcp.py +180 -0
  84. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_parse_conversation_claude.py +78 -0
  85. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_pipeline.py +1 -1
  86. reprompt_cli-1.7.1/tests/test_privacy_scan.py +311 -0
  87. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_suggestions.py +9 -2
  88. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/uv.lock +1 -1
  89. reprompt_cli-1.5.0/.testmondata +0 -0
  90. reprompt_cli-1.5.0/CLAUDE.md +0 -162
  91. reprompt_cli-1.5.0/CONTRIBUTING.md +0 -71
  92. reprompt_cli-1.5.0/action.yml +0 -100
  93. reprompt_cli-1.5.0/docs/launch-post.md +0 -116
  94. reprompt_cli-1.5.0/docs/roadmap.md +0 -112
  95. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-11-html-dashboard-design.md +0 -144
  96. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-11-merge-view-design.md +0 -136
  97. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-11-prompt-templates-design.md +0 -62
  98. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-22-prompt-compress-design.md +0 -512
  99. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-23-distill-design.md +0 -375
  100. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-23-v131-suggestions-source-design.md +0 -179
  101. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-24-v14-context-recovery-design.md +0 -342
  102. reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-24-v141-polish-design.md +0 -184
  103. reprompt_cli-1.5.0/module.yaml +0 -12
  104. reprompt_cli-1.5.0/scripts/launch/hn_monitor.py +0 -163
  105. reprompt_cli-1.5.0/scripts/launch/reddit_helper.py +0 -193
  106. reprompt_cli-1.5.0/src/reprompt/mcp.py +0 -207
  107. reprompt_cli-1.5.0/tests/test_lint_cli.py +0 -95
  108. reprompt_cli-1.5.0/tests/test_mcp.py +0 -113
  109. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.editorconfig +0 -0
  110. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  111. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  112. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  113. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  114. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  115. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/dependabot.yml +0 -0
  116. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/workflows/ci.yml +0 -0
  117. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/workflows/publish.yml +0 -0
  118. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.pre-commit-config.yaml +0 -0
  119. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/CODE_OF_CONDUCT.md +0 -0
  120. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/LICENSE +0 -0
  121. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/SECURITY.md +0 -0
  122. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/scripts/generate_demo_data.py +0 -0
  123. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/__init__.py +0 -0
  124. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/aider.py +0 -0
  125. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/base.py +0 -0
  126. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/claude_chat.py +0 -0
  127. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/cline.py +0 -0
  128. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/cursor.py +0 -0
  129. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/filters.py +0 -0
  130. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/gemini.py +0 -0
  131. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/openclaw.py +0 -0
  132. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/__init__.py +0 -0
  133. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/host.py +0 -0
  134. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/commands/__init__.py +0 -0
  135. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/commands/telemetry.py +0 -0
  136. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/commands/wrapped.py +0 -0
  137. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/config.py +0 -0
  138. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/__init__.py +0 -0
  139. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/dashboard.py +0 -0
  140. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/digest.py +0 -0
  141. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/distill.py +0 -0
  142. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/effectiveness.py +0 -0
  143. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/lang_detect.py +0 -0
  144. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/library.py +0 -0
  145. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/lint.py +0 -0
  146. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/merge_view.py +0 -0
  147. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/models.py +0 -0
  148. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/persona.py +0 -0
  149. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/privacy.py +0 -0
  150. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/prompt_dna.py +0 -0
  151. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/recommend.py +0 -0
  152. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/scorer.py +0 -0
  153. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/segmenter.py +0 -0
  154. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/session_meta.py +0 -0
  155. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/session_type.py +0 -0
  156. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/style.py +0 -0
  157. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/templates.py +0 -0
  158. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/timeutil.py +0 -0
  159. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/trends.py +0 -0
  160. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/wrapped.py +0 -0
  161. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/demo.py +0 -0
  162. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/__init__.py +0 -0
  163. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/base.py +0 -0
  164. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/local_embed.py +0 -0
  165. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/ollama.py +0 -0
  166. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/openai_embed.py +0 -0
  167. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/tfidf.py +0 -0
  168. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/mcp_main.py +0 -0
  169. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/__init__.py +0 -0
  170. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/chartjs.min.js +0 -0
  171. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/compress_terminal.py +0 -0
  172. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/distill_terminal.py +0 -0
  173. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/export.py +0 -0
  174. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/html_report.py +0 -0
  175. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/json_out.py +0 -0
  176. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/markdown.py +0 -0
  177. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/wrapped_html.py +0 -0
  178. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/wrapped_terminal.py +0 -0
  179. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/py.typed +0 -0
  180. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/sharing/__init__.py +0 -0
  181. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/sharing/client.py +0 -0
  182. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/sharing/clipboard.py +0 -0
  183. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/storage/__init__.py +0 -0
  184. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/__init__.py +0 -0
  185. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/collector.py +0 -0
  186. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/consent.py +0 -0
  187. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/events.py +0 -0
  188. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/prompt.py +0 -0
  189. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/queue.py +0 -0
  190. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/sender.py +0 -0
  191. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/__init__.py +0 -0
  192. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/conftest.py +0 -0
  193. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/aider_chat_history.md +0 -0
  194. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/chatgpt_conversations.json +0 -0
  195. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/claude_chat_export.json +0 -0
  196. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/claude_session.jsonl +0 -0
  197. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/cline_task/api_conversation_history.json +0 -0
  198. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/export/default_export.md +0 -0
  199. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/export/full_export.md +0 -0
  200. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/gemini_session.json +0 -0
  201. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/openclaw_session.jsonl +0 -0
  202. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_aider.py +0 -0
  203. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_chatgpt.py +0 -0
  204. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_claude.py +0 -0
  205. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_claude_chat.py +0 -0
  206. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_cline.py +0 -0
  207. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_gemini.py +0 -0
  208. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_openclaw.py +0 -0
  209. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_analyzer.py +0 -0
  210. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_handler.py +0 -0
  211. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_integration.py +0 -0
  212. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_manifest.py +0 -0
  213. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_protocol.py +0 -0
  214. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cli.py +0 -0
  215. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cli_deprecations.py +0 -0
  216. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cli_library_effectiveness.py +0 -0
  217. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_clipboard.py +0 -0
  218. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compare_best_worst.py +0 -0
  219. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress.py +0 -0
  220. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_cli.py +0 -0
  221. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_dna.py +0 -0
  222. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_html.py +0 -0
  223. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_insights.py +0 -0
  224. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_config.py +0 -0
  225. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_conversation.py +0 -0
  226. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_coverage_boost.py +0 -0
  227. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cursor_adapter.py +0 -0
  228. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_dashboard.py +0 -0
  229. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db.py +0 -0
  230. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db_digest.py +0 -0
  231. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db_trends.py +0 -0
  232. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_dedup.py +0 -0
  233. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_demo.py +0 -0
  234. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_deprecated_commands.py +0 -0
  235. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_digest.py +0 -0
  236. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_digest_cli.py +0 -0
  237. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_distill.py +0 -0
  238. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_distill_cli.py +0 -0
  239. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_distill_weights.py +0 -0
  240. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_effectiveness.py +0 -0
  241. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_embeddings_local.py +0 -0
  242. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_embeddings_ollama.py +0 -0
  243. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_embeddings_openai.py +0 -0
  244. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_empty_state.py +0 -0
  245. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_export.py +0 -0
  246. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_export_cli.py +0 -0
  247. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_export_snapshot.py +0 -0
  248. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors.py +0 -0
  249. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors_routing.py +0 -0
  250. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors_zh.py +0 -0
  251. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors_zh_e2e.py +0 -0
  252. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_html_report.py +0 -0
  253. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_import_cli.py +0 -0
  254. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_import_e2e.py +0 -0
  255. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_insights.py +0 -0
  256. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_insights_cli.py +0 -0
  257. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_insights_expanded.py +0 -0
  258. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_install_hook.py +0 -0
  259. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_lang_detect.py +0 -0
  260. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_library.py +0 -0
  261. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_lint.py +0 -0
  262. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_markdown.py +0 -0
  263. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_merge_view.py +0 -0
  264. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_models.py +0 -0
  265. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_output.py +0 -0
  266. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_parse_conversation_base.py +0 -0
  267. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_parse_conversation_chatgpt.py +0 -0
  268. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_persona.py +0 -0
  269. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy.py +0 -0
  270. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy_cli.py +0 -0
  271. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy_e2e.py +0 -0
  272. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy_output.py +0 -0
  273. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_prompt_dna.py +0 -0
  274. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_public_api.py +0 -0
  275. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_recommend.py +0 -0
  276. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_schema_version.py +0 -0
  277. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_score_cli.py +0 -0
  278. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_scorer.py +0 -0
  279. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_segmenter.py +0 -0
  280. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_session_type.py +0 -0
  281. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_share_e2e.py +0 -0
  282. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_sharing_client.py +0 -0
  283. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_source_filter.py +0 -0
  284. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_style.py +0 -0
  285. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_style_trends.py +0 -0
  286. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_cli.py +0 -0
  287. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_collector.py +0 -0
  288. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_consent.py +0 -0
  289. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_e2e.py +0 -0
  290. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_events.py +0 -0
  291. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_prompt.py +0 -0
  292. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_queue.py +0 -0
  293. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_sender.py +0 -0
  294. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_template_cli.py +0 -0
  295. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_templates.py +0 -0
  296. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_timeutil.py +0 -0
  297. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_trends.py +0 -0
  298. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_trends_cli.py +0 -0
  299. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_use_cli.py +0 -0
  300. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped.py +0 -0
  301. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_cli.py +0 -0
  302. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_e2e.py +0 -0
  303. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_html.py +0 -0
  304. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_output.py +0 -0
  305. {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_share.py +0 -0
@@ -41,6 +41,7 @@ thoughts/
41
41
  .tldr/
42
42
  .tldrignore
43
43
  .worktrees/
44
+ CLAUDE.md
44
45
 
45
46
  # Launch / marketing drafts (not part of the codebase)
46
47
  docs/launch/
@@ -0,0 +1,26 @@
1
+ - id: reprompt-lint
2
+ name: reprompt lint
3
+ description: Check AI prompt quality in session files
4
+ entry: reprompt lint
5
+ language: python
6
+ pass_filenames: false
7
+ always_run: true
8
+ additional_dependencies: ["reprompt-cli"]
9
+
10
+ - id: reprompt-lint-strict
11
+ name: reprompt lint (strict)
12
+ description: Check AI prompt quality — fail on warnings too
13
+ entry: reprompt lint --strict
14
+ language: python
15
+ pass_filenames: false
16
+ always_run: true
17
+ additional_dependencies: ["reprompt-cli"]
18
+
19
+ - id: reprompt-lint-score
20
+ name: reprompt lint (score gate)
21
+ description: Check AI prompt quality — fail if avg score below threshold
22
+ entry: reprompt lint --score-threshold 50
23
+ language: python
24
+ pass_filenames: false
25
+ always_run: true
26
+ additional_dependencies: ["reprompt-cli"]
Binary file
Binary file
@@ -2,6 +2,37 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.6.1] - 2026-03-28
6
+
7
+ ### Fixed
8
+ - **Critical: `reprompt scan` crash** — `compute_pattern_effectiveness` failed on prompts containing SQL LIKE wildcards (`%`, `_`). Replaced `LIKE` with `INSTR()` for exact substring matching.
9
+ - **Score calibration** — single-paragraph prompts incorrectly received 0/20 for Position (instruction was treated as "buried in the middle"). Now correctly scores instruction-at-start as optimal position.
10
+ - **Compress grammar bugs** — fixed leading whitespace after filler deletion, dangling "that" after "the thing is" removal, orphaned commas, and remnant pleasantry fragments.
11
+ - **Deprecated command references** — `reprompt library` and `reprompt trends` references in report footer and scan guidance now point to `reprompt template list` and `reprompt digest --trends`.
12
+ - **Wrong adapter names** — `--source` help examples used non-existent `chatgpt-ext`; fixed to `chatgpt-export`.
13
+
14
+ ### Improved
15
+ - **Compress engine** — added 15 filler phrases (`kind of`, `sort of`, `additionally`, `the fact that`, etc.) and 16 phrase simplification rules (`take a look at` → `check`, `let me know` → removed, etc.). Added post-compression cleanup pass for whitespace, punctuation, and sentence capitalization. Typical savings improved from 3-33% to 38-60%.
16
+ - **Score UX** — suggestions now sorted by impact (high first); paper citations dimmed; new "Very Poor" grade tier for scores under 20.
17
+ - **CLI help** — added usage examples to 7 key commands (score, scan, compress, compare, distill, lint, privacy). Added Quick Start guide to main `--help`. Standardized `--source` option across all commands with `-s` shorthand.
18
+ - **Help panels** — moved `digest` from Manage to Analyze panel. Listed all 9 adapters in `scan --help`.
19
+ - Tests: 1490 → 1497
20
+
21
+ ## [1.6.0] - 2026-03-28
22
+
23
+ ### Added
24
+ - **Agent workflow analysis** — `reprompt agent` detects error loops, tool call patterns, and session efficiency from existing session files. Zero config, zero instrumentation.
25
+ - **Codex CLI adapter** — full support for OpenAI Codex CLI sessions (`~/.codex/sessions/`), including user/assistant turns, tool calls (shell + function), error detection with exit codes, and file path tracking. 9th adapter.
26
+ - **Sensitive content detection** — `reprompt privacy --deep` scans stored prompts for API keys, JWT tokens, emails, IP addresses, passwords, env secrets, and home paths. All regex-based, zero network.
27
+ - **Chrome Web Store extension** — `install-extension` now defaults to the published extension ID; `extension-status` shows the Chrome Web Store install link.
28
+ - **Extension E2E tests** — 8 tests covering the full extension -> Native Messaging -> DB -> CLI pipeline across 3 sources.
29
+
30
+ ### Changed
31
+ - **ConversationTurn model** — added `tool_names` and `error_text` fields for richer agent analysis (backward-compatible defaults)
32
+ - **Claude Code adapter** — now extracts individual tool names (Read, Edit, Bash, etc.) from tool_use blocks, not just counts
33
+ - **Suggestions** — `distill` now suggests `reprompt agent`; `agent` suggests `--loops-only` and `privacy --deep`
34
+ - Tests: 1397 -> 1490+
35
+
5
36
  ## [1.5.0] - 2026-03-25
6
37
 
7
38
  ### Added
@@ -0,0 +1,120 @@
1
+ # Contributing to reprompt
2
+
3
+ Thanks for your interest in contributing! reprompt is an open-source prompt intelligence tool, and contributions of all kinds are welcome.
4
+
5
+ ## Quick Links
6
+
7
+ - [Good First Issues](https://github.com/reprompt-dev/reprompt/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
8
+ - [Help Wanted](https://github.com/reprompt-dev/reprompt/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
9
+
10
+ ## Development Setup
11
+
12
+ ```bash
13
+ git clone https://github.com/reprompt-dev/reprompt
14
+ cd reprompt
15
+ uv venv
16
+ uv pip install -e ".[dev]"
17
+ ```
18
+
19
+ ## Running Tests
20
+
21
+ ```bash
22
+ uv run pytest tests/ -v
23
+ uv run pytest tests/ -v --cov=reprompt # with coverage
24
+ ```
25
+
26
+ ## Code Style
27
+
28
+ We use [ruff](https://docs.astral.sh/ruff/) for linting and formatting:
29
+
30
+ ```bash
31
+ uv run ruff check src/ tests/
32
+ uv run ruff format src/ tests/
33
+ ```
34
+
35
+ ## Type Checking
36
+
37
+ We use [mypy](https://mypy-lang.org/) in strict mode:
38
+
39
+ ```bash
40
+ uv run mypy src/reprompt/
41
+ ```
42
+
43
+ ## Pull Requests
44
+
45
+ 1. Fork the repo and create a feature branch
46
+ 2. Write tests for new functionality
47
+ 3. Ensure all tests pass and coverage doesn't decrease
48
+ 4. Run `ruff check` and `ruff format`
49
+ 5. Run `mypy src/reprompt/` -- must pass clean
50
+ 6. Submit a PR with a clear description
51
+
52
+ ### Before Submitting
53
+
54
+ - **Comment on the issue first** — introduce yourself and outline your approach before writing code. This avoids wasted work and duplicate effort.
55
+ - **One PR per issue** — don't submit multiple PRs for the same issue.
56
+ - PRs from brand-new GitHub accounts with no prior project engagement will generally not be reviewed.
57
+
58
+ ## Common Contribution Areas
59
+
60
+ ### Adding Adapters (new AI tool support)
61
+
62
+ Adding a new adapter is the easiest way to contribute. Each adapter is ~50-100 lines:
63
+
64
+ 1. Create `src/reprompt/adapters/your_tool.py`
65
+ 2. Subclass `BaseAdapter` from `adapters/base.py`
66
+ 3. Implement:
67
+ - `name` property -- adapter identifier (e.g., `"copilot"`)
68
+ - `default_session_path` -- where the tool stores sessions
69
+ - `discover_sessions()` -- find session files
70
+ - `parse_session(path)` -- extract `Prompt` objects
71
+ - Optional: `parse_conversation(path)` -- extract full conversation turns
72
+ 4. Register in `core/pipeline.py` → `get_adapters()`
73
+ 5. Add tests in `tests/test_your_tool_adapter.py`
74
+
75
+ **Reference adapters:**
76
+ - `adapters/cline.py` -- simplest (~80 lines, JSON format)
77
+ - `adapters/aider.py` -- markdown parsing
78
+ - `adapters/cursor.py` -- SQLite/vscdb format
79
+
80
+ ### Adding Lint Rules
81
+
82
+ Each lint rule is a standalone function in `core/lint.py`:
83
+
84
+ 1. Add your rule check in `lint_prompt()`
85
+ 2. Return a `LintViolation` with `severity="error"` or `"warning"`
86
+ 3. Add tests in `tests/test_lint.py`
87
+
88
+ ### Adding Privacy Patterns
89
+
90
+ Extend sensitive content detection in `core/privacy_scan.py`:
91
+
92
+ 1. Add a regex pattern to the `PATTERNS` dict
93
+ 2. Add category mapping in `CATEGORY_MAP`
94
+ 3. Add safety filter if needed (to exclude false positives)
95
+ 4. Add tests in `tests/test_privacy_scan.py`
96
+
97
+ ## Architecture
98
+
99
+ ```
100
+ src/reprompt/
101
+ ├── cli.py # Typer CLI (21 commands)
102
+ ├── config.py # pydantic-settings configuration
103
+ ├── core/ # Business logic
104
+ │ ├── models.py # Prompt dataclass
105
+ │ ├── scorer.py # Research-calibrated 0-100 scoring
106
+ │ ├── lint.py # Quality linter
107
+ │ ├── compress.py # 4-layer prompt compression
108
+ │ ├── distill.py # Conversation distillation
109
+ │ ├── agent.py # Agent workflow analysis
110
+ │ ├── privacy_scan.py # Sensitive content detection
111
+ │ └── pipeline.py # Orchestrator
112
+ ├── adapters/ # 9 AI tool parsers
113
+ ├── storage/ # SQLite layer
114
+ ├── bridge/ # Browser extension Native Messaging
115
+ └── output/ # Report formatters (terminal, JSON, HTML)
116
+ ```
117
+
118
+ ## Questions?
119
+
120
+ Open an issue or start a discussion. We're happy to help you get started.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reprompt-cli
3
- Version: 1.5.0
3
+ Version: 1.7.1
4
4
  Summary: Discover, analyze, and optimize your prompts from AI coding sessions
5
5
  Project-URL: Homepage, https://github.com/reprompt-dev/reprompt
6
6
  Project-URL: Repository, https://github.com/reprompt-dev/reprompt
@@ -45,16 +45,18 @@ Description-Content-Type: text/markdown
45
45
 
46
46
  # `re:prompt`
47
47
 
48
- **Prompt Intelligence for AI power users** -- understand, optimize, and manage your AI conversations.
48
+ **Analyze what you type into AI tools** -- prompt scoring, agent error loops, leaked credential detection, conversation distillation.
49
49
 
50
50
  [![PyPI version](https://img.shields.io/pypi/v/reprompt-cli)](https://pypi.org/project/reprompt-cli/)
51
51
  [![Python 3.10+](https://img.shields.io/pypi/pyversions/reprompt-cli)](https://pypi.org/project/reprompt-cli/)
52
52
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
53
- [![Tests](https://img.shields.io/badge/tests-1397-brightgreen)](https://github.com/reprompt-dev/reprompt)
53
+ [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](https://github.com/reprompt-dev/reprompt/actions)
54
54
  [![Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen)](https://github.com/reprompt-dev/reprompt)
55
55
 
56
56
  ---
57
57
 
58
+ ![reprompt demo](docs/demo.gif)
59
+
58
60
  ## See it in action
59
61
 
60
62
  ```bash
@@ -67,18 +69,18 @@ $ reprompt
67
69
  ╰────────────────────────────────────────────────────────────╯
68
70
 
69
71
  $ reprompt score "Fix the auth bug in src/login.ts where JWT expires"
70
- Score: 74/100
71
- Structure: 18/25 | Context: 22/25 | Position: 15/20 | Repetition: 9/15 | Clarity: 10/15
72
- Tip: Add the error message for +15% accuracy
72
+ Score: 40/100 (Fair)
73
+ Structure: 0/25 | Context: 8/25 | Position: 20/20 | Repetition: 0/15 | Clarity: 12/15
74
+ Tip: Include the error message -- debug prompts with errors are 3.7x more effective
73
75
 
74
76
  $ reprompt distill --last 3 --summary
75
77
  Session: feature-dev (42 turns, 18 important)
76
78
  Key moments: initial spec → auth module → test failures → JWT fix → passing
77
79
  Context: "Building auth system with JWT refresh tokens for Express API"
78
80
 
79
- $ reprompt compress "请帮我看一下这个代码,就是那个 login 的那个文件,好像有点问题"
80
- Before: 31 tokens → After: 15 tokens (52% saved)
81
- "看一下 login 文件的问题"
81
+ $ reprompt compress "I was wondering if you could please help me refactor this code. Basically what I need is to split this function into smaller helpers and add error handling."
82
+ Before: 28 tokens → After: 14 tokens (50% saved)
83
+ "Help me refactor this code. Split this function into smaller helpers and add error handling."
82
84
  ```
83
85
 
84
86
  ## What it does
@@ -88,17 +90,18 @@ $ reprompt compress "请帮我看一下这个代码,就是那个 login 的那
88
90
  | Command | Description |
89
91
  |---------|-------------|
90
92
  | `reprompt` | Instant dashboard -- prompts, sessions, avg score, top categories |
91
- | `reprompt scan` | Auto-discover prompts from 8 AI tools |
93
+ | `reprompt scan` | Auto-discover prompts from 9 AI tools |
92
94
  | `reprompt score "prompt"` | Research-backed 0-100 scoring with 30+ features |
93
95
  | `reprompt compare "a" "b"` | Side-by-side prompt analysis (or `--best-worst` for auto-selection) |
94
96
  | `reprompt insights` | Personal patterns vs research-optimal benchmarks |
95
97
  | `reprompt style` | Prompting fingerprint with `--trends` for evolution tracking |
98
+ | `reprompt agent` | Agent workflow analysis -- error loops, tool patterns, session efficiency |
96
99
 
97
100
  ### Optimize
98
101
 
99
102
  | Command | Description |
100
103
  |---------|-------------|
101
- | `reprompt compress "prompt"` | 4-layer prompt compression (50%+ token savings typical) |
104
+ | `reprompt compress "prompt"` | 4-layer prompt compression (40-60% token savings typical) |
102
105
  | `reprompt distill` | Extract important turns from conversations with 6-signal scoring |
103
106
  | `reprompt distill --export` | Recover context when a session runs out -- paste into new session |
104
107
  | `reprompt lint` | Prompt quality linter with GitHub Action support |
@@ -108,6 +111,7 @@ $ reprompt compress "请帮我看一下这个代码,就是那个 login 的那
108
111
  | Command | Description |
109
112
  |---------|-------------|
110
113
  | `reprompt privacy` | See what data you sent where -- file paths, errors, PII exposure |
114
+ | `reprompt privacy --deep` | Scan for sensitive content: API keys, tokens, passwords, PII |
111
115
  | `reprompt report` | Full analytics: hot phrases, clusters, patterns (`--html` for dashboard) |
112
116
  | `reprompt digest` | Weekly summary comparing current vs previous period |
113
117
  | `reprompt wrapped` | Prompt DNA report -- persona, scores, shareable card |
@@ -145,6 +149,7 @@ Session type (debugging, feature-dev, exploration, refactoring) is auto-detected
145
149
  | Tool | Format | Auto-discovered by `scan` |
146
150
  |------|--------|--------------------------|
147
151
  | Claude Code | JSONL | Yes |
152
+ | Codex CLI | JSONL | Yes |
148
153
  | Cursor | .vscdb | Yes |
149
154
  | Aider | Markdown | Yes |
150
155
  | Gemini CLI | JSON | Yes |
@@ -176,6 +181,48 @@ reprompt distill --last 1 # distill your most recent conversation
176
181
  reprompt install-hook # adds post-session hook to Claude Code
177
182
  ```
178
183
 
184
+ ### Browser extension
185
+
186
+ Capture prompts from ChatGPT, Claude.ai, and Gemini directly in your browser:
187
+
188
+ 1. **Install the extension** from [Chrome Web Store](https://chromewebstore.google.com/detail/reprompt/ojdccpagaanchmkninlbgbgemdcjckhn)
189
+ 2. **Connect to the CLI:** `reprompt install-extension`
190
+ 3. **Verify:** `reprompt extension-status`
191
+
192
+ Captured prompts sync locally via Native Messaging -- nothing leaves your machine.
193
+
194
+ ### CI integration
195
+
196
+ #### GitHub Action
197
+
198
+ ```yaml
199
+ # .github/workflows/prompt-lint.yml
200
+ - uses: reprompt-dev/reprompt@main
201
+ with:
202
+ score-threshold: 50 # fail if avg prompt score < 50
203
+ strict: true # fail on warnings too
204
+ comment-on-pr: true # post quality report as PR comment
205
+ ```
206
+
207
+ #### pre-commit
208
+
209
+ ```yaml
210
+ # .pre-commit-config.yaml
211
+ repos:
212
+ - repo: https://github.com/reprompt-dev/reprompt
213
+ rev: v1.7.0
214
+ hooks:
215
+ - id: reprompt-lint
216
+ ```
217
+
218
+ #### Direct CLI
219
+
220
+ ```bash
221
+ reprompt lint --score-threshold 50 # exit 1 if avg score < 50
222
+ reprompt lint --strict # exit 1 on warnings
223
+ reprompt lint --json # machine-readable output
224
+ ```
225
+
179
226
  ## Privacy
180
227
 
181
228
  - All analysis runs locally. No prompts leave your machine.
@@ -188,6 +235,7 @@ reprompt install-hook # adds post-session hook to Claude Code
188
235
  ## Links
189
236
 
190
237
  - **Website:** [getreprompt.dev](https://getreprompt.dev)
238
+ - **Chrome Extension:** [Chrome Web Store](https://chromewebstore.google.com/detail/reprompt/ojdccpagaanchmkninlbgbgemdcjckhn)
191
239
  - **PyPI:** [reprompt-cli](https://pypi.org/project/reprompt-cli/)
192
240
  - **Changelog:** [CHANGELOG.md](CHANGELOG.md)
193
241
  - **Privacy:** [getreprompt.dev/privacy](https://getreprompt.dev/privacy)
@@ -1,15 +1,17 @@
1
1
  # `re:prompt`
2
2
 
3
- **Prompt Intelligence for AI power users** -- understand, optimize, and manage your AI conversations.
3
+ **Analyze what you type into AI tools** -- prompt scoring, agent error loops, leaked credential detection, conversation distillation.
4
4
 
5
5
  [![PyPI version](https://img.shields.io/pypi/v/reprompt-cli)](https://pypi.org/project/reprompt-cli/)
6
6
  [![Python 3.10+](https://img.shields.io/pypi/pyversions/reprompt-cli)](https://pypi.org/project/reprompt-cli/)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
- [![Tests](https://img.shields.io/badge/tests-1397-brightgreen)](https://github.com/reprompt-dev/reprompt)
8
+ [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](https://github.com/reprompt-dev/reprompt/actions)
9
9
  [![Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen)](https://github.com/reprompt-dev/reprompt)
10
10
 
11
11
  ---
12
12
 
13
+ ![reprompt demo](docs/demo.gif)
14
+
13
15
  ## See it in action
14
16
 
15
17
  ```bash
@@ -22,18 +24,18 @@ $ reprompt
22
24
  ╰────────────────────────────────────────────────────────────╯
23
25
 
24
26
  $ reprompt score "Fix the auth bug in src/login.ts where JWT expires"
25
- Score: 74/100
26
- Structure: 18/25 | Context: 22/25 | Position: 15/20 | Repetition: 9/15 | Clarity: 10/15
27
- Tip: Add the error message for +15% accuracy
27
+ Score: 40/100 (Fair)
28
+ Structure: 0/25 | Context: 8/25 | Position: 20/20 | Repetition: 0/15 | Clarity: 12/15
29
+ Tip: Include the error message -- debug prompts with errors are 3.7x more effective
28
30
 
29
31
  $ reprompt distill --last 3 --summary
30
32
  Session: feature-dev (42 turns, 18 important)
31
33
  Key moments: initial spec → auth module → test failures → JWT fix → passing
32
34
  Context: "Building auth system with JWT refresh tokens for Express API"
33
35
 
34
- $ reprompt compress "请帮我看一下这个代码,就是那个 login 的那个文件,好像有点问题"
35
- Before: 31 tokens → After: 15 tokens (52% saved)
36
- "看一下 login 文件的问题"
36
+ $ reprompt compress "I was wondering if you could please help me refactor this code. Basically what I need is to split this function into smaller helpers and add error handling."
37
+ Before: 28 tokens → After: 14 tokens (50% saved)
38
+ "Help me refactor this code. Split this function into smaller helpers and add error handling."
37
39
  ```
38
40
 
39
41
  ## What it does
@@ -43,17 +45,18 @@ $ reprompt compress "请帮我看一下这个代码,就是那个 login 的那
43
45
  | Command | Description |
44
46
  |---------|-------------|
45
47
  | `reprompt` | Instant dashboard -- prompts, sessions, avg score, top categories |
46
- | `reprompt scan` | Auto-discover prompts from 8 AI tools |
48
+ | `reprompt scan` | Auto-discover prompts from 9 AI tools |
47
49
  | `reprompt score "prompt"` | Research-backed 0-100 scoring with 30+ features |
48
50
  | `reprompt compare "a" "b"` | Side-by-side prompt analysis (or `--best-worst` for auto-selection) |
49
51
  | `reprompt insights` | Personal patterns vs research-optimal benchmarks |
50
52
  | `reprompt style` | Prompting fingerprint with `--trends` for evolution tracking |
53
+ | `reprompt agent` | Agent workflow analysis -- error loops, tool patterns, session efficiency |
51
54
 
52
55
  ### Optimize
53
56
 
54
57
  | Command | Description |
55
58
  |---------|-------------|
56
- | `reprompt compress "prompt"` | 4-layer prompt compression (50%+ token savings typical) |
59
+ | `reprompt compress "prompt"` | 4-layer prompt compression (40-60% token savings typical) |
57
60
  | `reprompt distill` | Extract important turns from conversations with 6-signal scoring |
58
61
  | `reprompt distill --export` | Recover context when a session runs out -- paste into new session |
59
62
  | `reprompt lint` | Prompt quality linter with GitHub Action support |
@@ -63,6 +66,7 @@ $ reprompt compress "请帮我看一下这个代码,就是那个 login 的那
63
66
  | Command | Description |
64
67
  |---------|-------------|
65
68
  | `reprompt privacy` | See what data you sent where -- file paths, errors, PII exposure |
69
+ | `reprompt privacy --deep` | Scan for sensitive content: API keys, tokens, passwords, PII |
66
70
  | `reprompt report` | Full analytics: hot phrases, clusters, patterns (`--html` for dashboard) |
67
71
  | `reprompt digest` | Weekly summary comparing current vs previous period |
68
72
  | `reprompt wrapped` | Prompt DNA report -- persona, scores, shareable card |
@@ -100,6 +104,7 @@ Session type (debugging, feature-dev, exploration, refactoring) is auto-detected
100
104
  | Tool | Format | Auto-discovered by `scan` |
101
105
  |------|--------|--------------------------|
102
106
  | Claude Code | JSONL | Yes |
107
+ | Codex CLI | JSONL | Yes |
103
108
  | Cursor | .vscdb | Yes |
104
109
  | Aider | Markdown | Yes |
105
110
  | Gemini CLI | JSON | Yes |
@@ -131,6 +136,48 @@ reprompt distill --last 1 # distill your most recent conversation
131
136
  reprompt install-hook # adds post-session hook to Claude Code
132
137
  ```
133
138
 
139
+ ### Browser extension
140
+
141
+ Capture prompts from ChatGPT, Claude.ai, and Gemini directly in your browser:
142
+
143
+ 1. **Install the extension** from [Chrome Web Store](https://chromewebstore.google.com/detail/reprompt/ojdccpagaanchmkninlbgbgemdcjckhn)
144
+ 2. **Connect to the CLI:** `reprompt install-extension`
145
+ 3. **Verify:** `reprompt extension-status`
146
+
147
+ Captured prompts sync locally via Native Messaging -- nothing leaves your machine.
148
+
149
+ ### CI integration
150
+
151
+ #### GitHub Action
152
+
153
+ ```yaml
154
+ # .github/workflows/prompt-lint.yml
155
+ - uses: reprompt-dev/reprompt@main
156
+ with:
157
+ score-threshold: 50 # fail if avg prompt score < 50
158
+ strict: true # fail on warnings too
159
+ comment-on-pr: true # post quality report as PR comment
160
+ ```
161
+
162
+ #### pre-commit
163
+
164
+ ```yaml
165
+ # .pre-commit-config.yaml
166
+ repos:
167
+ - repo: https://github.com/reprompt-dev/reprompt
168
+ rev: v1.7.0
169
+ hooks:
170
+ - id: reprompt-lint
171
+ ```
172
+
173
+ #### Direct CLI
174
+
175
+ ```bash
176
+ reprompt lint --score-threshold 50 # exit 1 if avg score < 50
177
+ reprompt lint --strict # exit 1 on warnings
178
+ reprompt lint --json # machine-readable output
179
+ ```
180
+
134
181
  ## Privacy
135
182
 
136
183
  - All analysis runs locally. No prompts leave your machine.
@@ -143,6 +190,7 @@ reprompt install-hook # adds post-session hook to Claude Code
143
190
  ## Links
144
191
 
145
192
  - **Website:** [getreprompt.dev](https://getreprompt.dev)
193
+ - **Chrome Extension:** [Chrome Web Store](https://chromewebstore.google.com/detail/reprompt/ojdccpagaanchmkninlbgbgemdcjckhn)
146
194
  - **PyPI:** [reprompt-cli](https://pypi.org/project/reprompt-cli/)
147
195
  - **Changelog:** [CHANGELOG.md](CHANGELOG.md)
148
196
  - **Privacy:** [getreprompt.dev/privacy](https://getreprompt.dev/privacy)