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.
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.gitignore +1 -0
- reprompt_cli-1.7.1/.pre-commit-hooks.yaml +26 -0
- reprompt_cli-1.7.1/.testmondata-shm +0 -0
- reprompt_cli-1.7.1/.testmondata-wal +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/CHANGELOG.md +31 -0
- reprompt_cli-1.7.1/CONTRIBUTING.md +120 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/PKG-INFO +59 -11
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/README.md +58 -10
- reprompt_cli-1.7.1/Screenshot 2026-03-24 at 09.45.03.png +0 -0
- reprompt_cli-1.7.1/action.yml +211 -0
- reprompt_cli-1.7.1/docs/demo.gif +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-128.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-16.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-256.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-32.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-48.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-512.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon-96.png +0 -0
- reprompt_cli-1.7.1/docs/icons/brand-icon.svg +22 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-128.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-16.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-256.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-32.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-48.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-512.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon-96.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-favicon.svg +13 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-128.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-16.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-256.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-32.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-48.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-512.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon-96.png +0 -0
- reprompt_cli-1.7.1/docs/icons/cli-icon.svg +15 -0
- reprompt_cli-1.7.1/docs/icons/favicon-128.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon-16.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon-256.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon-32.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon-48.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon-512.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon-96.png +0 -0
- reprompt_cli-1.7.1/docs/icons/favicon.svg +16 -0
- reprompt_cli-1.7.1/docs/icons/generate.sh +44 -0
- reprompt_cli-1.7.1/docs/superpowers/specs/2026-03-24-v14-command-consolidation-design.md +287 -0
- reprompt_cli-1.7.1/docs/superpowers/specs/2026-03-25-v1.5-dashboard-design.md +338 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/pyproject.toml +1 -1
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/__init__.py +1 -1
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/chatgpt.py +13 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/claude_code.py +10 -0
- reprompt_cli-1.7.1/src/reprompt/adapters/codex.py +239 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/handler.py +10 -26
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/manifest.py +2 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/protocol.py +10 -1
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/cli.py +392 -84
- reprompt_cli-1.7.1/src/reprompt/core/agent.py +319 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/analyzer.py +3 -1
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/compress.py +72 -1
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/conversation.py +2 -0
- reprompt_cli-1.7.1/src/reprompt/core/cost.py +96 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/dedup.py +15 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/extractors.py +19 -6
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/extractors_zh.py +2 -1
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/insights.py +14 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/pipeline.py +16 -1
- reprompt_cli-1.7.1/src/reprompt/core/privacy_scan.py +210 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/suggestions.py +4 -2
- reprompt_cli-1.7.1/src/reprompt/mcp.py +335 -0
- reprompt_cli-1.7.1/src/reprompt/output/agent_terminal.py +143 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/dashboard_terminal.py +16 -2
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/terminal.py +78 -5
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/storage/db.py +16 -4
- reprompt_cli-1.7.1/tests/test_agent.py +383 -0
- reprompt_cli-1.7.1/tests/test_agent_cli.py +178 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_cli.py +13 -4
- reprompt_cli-1.7.1/tests/test_bridge_e2e.py +343 -0
- reprompt_cli-1.7.1/tests/test_codex_adapter.py +319 -0
- reprompt_cli-1.7.1/tests/test_copy_flag.py +133 -0
- reprompt_cli-1.7.1/tests/test_cost.py +93 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db_effectiveness.py +77 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_e2e.py +2 -2
- reprompt_cli-1.7.1/tests/test_lint_cli.py +184 -0
- reprompt_cli-1.7.1/tests/test_mcp.py +180 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_parse_conversation_claude.py +78 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_pipeline.py +1 -1
- reprompt_cli-1.7.1/tests/test_privacy_scan.py +311 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_suggestions.py +9 -2
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/uv.lock +1 -1
- reprompt_cli-1.5.0/.testmondata +0 -0
- reprompt_cli-1.5.0/CLAUDE.md +0 -162
- reprompt_cli-1.5.0/CONTRIBUTING.md +0 -71
- reprompt_cli-1.5.0/action.yml +0 -100
- reprompt_cli-1.5.0/docs/launch-post.md +0 -116
- reprompt_cli-1.5.0/docs/roadmap.md +0 -112
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-11-html-dashboard-design.md +0 -144
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-11-merge-view-design.md +0 -136
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-11-prompt-templates-design.md +0 -62
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-22-prompt-compress-design.md +0 -512
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-23-distill-design.md +0 -375
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-23-v131-suggestions-source-design.md +0 -179
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-24-v14-context-recovery-design.md +0 -342
- reprompt_cli-1.5.0/docs/superpowers/specs/2026-03-24-v141-polish-design.md +0 -184
- reprompt_cli-1.5.0/module.yaml +0 -12
- reprompt_cli-1.5.0/scripts/launch/hn_monitor.py +0 -163
- reprompt_cli-1.5.0/scripts/launch/reddit_helper.py +0 -193
- reprompt_cli-1.5.0/src/reprompt/mcp.py +0 -207
- reprompt_cli-1.5.0/tests/test_lint_cli.py +0 -95
- reprompt_cli-1.5.0/tests/test_mcp.py +0 -113
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.editorconfig +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/dependabot.yml +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/workflows/ci.yml +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.github/workflows/publish.yml +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/.pre-commit-config.yaml +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/CODE_OF_CONDUCT.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/LICENSE +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/SECURITY.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/scripts/generate_demo_data.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/aider.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/base.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/claude_chat.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/cline.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/cursor.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/filters.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/gemini.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/adapters/openclaw.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/bridge/host.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/commands/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/commands/telemetry.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/commands/wrapped.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/config.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/dashboard.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/digest.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/distill.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/effectiveness.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/lang_detect.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/library.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/lint.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/merge_view.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/models.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/persona.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/privacy.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/prompt_dna.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/recommend.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/scorer.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/segmenter.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/session_meta.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/session_type.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/style.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/templates.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/timeutil.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/trends.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/core/wrapped.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/demo.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/base.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/local_embed.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/ollama.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/openai_embed.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/embeddings/tfidf.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/mcp_main.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/chartjs.min.js +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/compress_terminal.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/distill_terminal.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/export.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/html_report.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/json_out.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/markdown.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/wrapped_html.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/output/wrapped_terminal.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/py.typed +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/sharing/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/sharing/client.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/sharing/clipboard.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/storage/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/collector.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/consent.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/events.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/prompt.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/queue.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/src/reprompt/telemetry/sender.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/__init__.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/conftest.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/aider_chat_history.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/chatgpt_conversations.json +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/claude_chat_export.json +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/claude_session.jsonl +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/cline_task/api_conversation_history.json +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/export/default_export.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/export/full_export.md +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/gemini_session.json +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/fixtures/openclaw_session.jsonl +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_aider.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_chatgpt.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_claude.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_claude_chat.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_cline.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_gemini.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_adapter_openclaw.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_analyzer.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_handler.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_integration.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_manifest.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_bridge_protocol.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cli_deprecations.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cli_library_effectiveness.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_clipboard.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compare_best_worst.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_dna.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_html.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_compress_insights.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_config.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_conversation.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_coverage_boost.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_cursor_adapter.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_dashboard.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db_digest.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_db_trends.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_dedup.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_demo.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_deprecated_commands.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_digest.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_digest_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_distill.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_distill_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_distill_weights.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_effectiveness.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_embeddings_local.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_embeddings_ollama.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_embeddings_openai.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_empty_state.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_export.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_export_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_export_snapshot.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors_routing.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors_zh.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_extractors_zh_e2e.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_html_report.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_import_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_import_e2e.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_insights.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_insights_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_insights_expanded.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_install_hook.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_lang_detect.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_library.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_lint.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_markdown.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_merge_view.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_models.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_output.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_parse_conversation_base.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_parse_conversation_chatgpt.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_persona.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy_e2e.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_privacy_output.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_prompt_dna.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_public_api.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_recommend.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_schema_version.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_score_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_scorer.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_segmenter.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_session_type.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_share_e2e.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_sharing_client.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_source_filter.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_style.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_style_trends.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_collector.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_consent.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_e2e.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_events.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_prompt.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_queue.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_telemetry_sender.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_template_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_templates.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_timeutil.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_trends.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_trends_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_use_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_cli.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_e2e.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_html.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_output.py +0 -0
- {reprompt_cli-1.5.0 → reprompt_cli-1.7.1}/tests/test_wrapped_share.py +0 -0
|
@@ -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.
|
|
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
|
-
**
|
|
48
|
+
**Analyze what you type into AI tools** -- prompt scoring, agent error loops, leaked credential detection, conversation distillation.
|
|
49
49
|
|
|
50
50
|
[](https://pypi.org/project/reprompt-cli/)
|
|
51
51
|
[](https://pypi.org/project/reprompt-cli/)
|
|
52
52
|
[](https://opensource.org/licenses/MIT)
|
|
53
|
-
[](https://github.com/reprompt-dev/reprompt/actions)
|
|
54
54
|
[](https://github.com/reprompt-dev/reprompt)
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
+

|
|
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:
|
|
71
|
-
Structure:
|
|
72
|
-
Tip:
|
|
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 "
|
|
80
|
-
Before:
|
|
81
|
-
"
|
|
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
|
|
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 (
|
|
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
|
-
**
|
|
3
|
+
**Analyze what you type into AI tools** -- prompt scoring, agent error loops, leaked credential detection, conversation distillation.
|
|
4
4
|
|
|
5
5
|
[](https://pypi.org/project/reprompt-cli/)
|
|
6
6
|
[](https://pypi.org/project/reprompt-cli/)
|
|
7
7
|
[](https://opensource.org/licenses/MIT)
|
|
8
|
-
[](https://github.com/reprompt-dev/reprompt/actions)
|
|
9
9
|
[](https://github.com/reprompt-dev/reprompt)
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+

|
|
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:
|
|
26
|
-
Structure:
|
|
27
|
-
Tip:
|
|
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 "
|
|
35
|
-
Before:
|
|
36
|
-
"
|
|
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
|
|
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 (
|
|
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)
|
|
Binary file
|