thwip-cli 1.0.0__py3-none-any.whl

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.
@@ -0,0 +1,157 @@
1
+ Metadata-Version: 2.5
2
+ Name: thwip-cli
3
+ Version: 1.0.0
4
+ Summary: Universal coding agent multiplexer: detect, switch, and route between AI coding agents seamlessly
5
+ Project-URL: Homepage, https://github.com/tanmayhutt/thwip-cli
6
+ Project-URL: Repository, https://github.com/tanmayhutt/thwip-cli
7
+ Author-email: Tanmay <tanmay@users.noreply.github.com>
8
+ License-Expression: MIT
9
+ Keywords: ai,cli,coding-agent,llm,multiplexer
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development :: Libraries
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: anthropic>=0.40
20
+ Requires-Dist: click>=8.0
21
+ Requires-Dist: google-genai>=1.0
22
+ Requires-Dist: httpx>=0.27
23
+ Requires-Dist: openai>=1.50
24
+ Requires-Dist: prompt-toolkit>=3.0
25
+ Requires-Dist: rich>=13.0
26
+ Requires-Dist: tenacity>=9.0
27
+ Requires-Dist: tomli-w>=1.0
28
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
29
+ Provides-Extra: all
30
+ Requires-Dist: mistralai>=1.0; extra == 'all'
31
+ Provides-Extra: dev
32
+ Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
33
+ Requires-Dist: pytest>=8.0; extra == 'dev'
34
+ Requires-Dist: ruff>=0.7; extra == 'dev'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # thwip
38
+
39
+ > Universal Coding Agent Multiplexer
40
+ >
41
+ > Detect all installed AI coding agents on your device, combine them in a unified terminal interface, and hot-swap models mid-conversation when hitting rate limits without losing context.
42
+
43
+ ---
44
+
45
+ ## Features
46
+
47
+ - **Auto-Detection**: Discovers installed AI coding agents (Claude Code, Antigravity, Gemini CLI, OpenAI/Codex, Aider, Copilot, Cursor, Windsurf, Cline, Ollama) and configured credentials.
48
+ - **Context Portability**: Switch between Anthropic Claude, Google Gemini, OpenAI Codex, or local Ollama mid-project. Conversation history and working files transfer directly.
49
+ - **Dynamic UI**: Terminal interface adapts its status bar, capabilities, and theme based on the active provider.
50
+ - **Capability Disclaimers**: Highlights when an agent lacks specific capabilities such as file editing or code execution.
51
+ - **Rate Limit Failover**: Detects HTTP 429 errors or quota exhaustion and prompts instant switching to ready fallback models.
52
+ - **Tool Layer**: Shared file editing, code execution (Python, Node, Shell), and Git integration across connected models.
53
+ - **Session Persistence**: Save and resume sessions across projects with `/session save` and `/session load`.
54
+ - **Terminal Ergonomics**: Autocompletion (Tab), keyboard shortcuts (Ctrl+S, Ctrl+T, Ctrl+H), and streaming markdown rendering.
55
+
56
+ ---
57
+
58
+ ## Quickstart
59
+
60
+ ### 1. Installation
61
+
62
+ Install in editable mode or via pip:
63
+
64
+ ```bash
65
+ git clone https://github.com/thwip-cli/thwip.git
66
+ cd thwip
67
+ pip install -e .
68
+ ```
69
+
70
+ ### 2. Launching thwip
71
+
72
+ Start the interactive terminal in your current project directory:
73
+
74
+ ```bash
75
+ thwip
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Slash Commands and Shortcuts
81
+
82
+ | Command | Action |
83
+ |:---|:---|
84
+ | `/switch [agent] [model]` | Switch active agent or model mid-conversation |
85
+ | `/agents` | Show all detected coding agents, company status, and capabilities |
86
+ | `/models [agent]` | List available models for current or target agent |
87
+ | `/status` | Display current session, project, and token stats |
88
+ | `/limits` | View token usage, quota, and spend metrics |
89
+ | `/detect` | Re-scan system for newly installed coding agents |
90
+ | `/session save [name]` | Save current chat session |
91
+ | `/session load <name>` | Load a previously saved session |
92
+ | `/session list` | List all saved sessions |
93
+ | `/session clear` | Clear current conversation memory |
94
+ | `/history` | View conversation history with model attribution badges |
95
+ | `/cost` | Show estimated session and cumulative cost |
96
+ | `/project [path]` | View or change project working directory |
97
+ | `Ctrl + S` | Quick switch agent prompt |
98
+ | `Ctrl + T` | Show agent status |
99
+ | `Ctrl + H` | View history |
100
+ | `/quit` | Exit thwip |
101
+
102
+ ---
103
+
104
+ ## Supported Companies and Agents
105
+
106
+ | Company | Agent | Capabilities |
107
+ |:---|:---|:---|
108
+ | Anthropic | Claude Code (Sonnet, Opus, Haiku) | Chat, File Edit, Code Run, Terminal, Git, Search |
109
+ | Google | Antigravity / Gemini CLI (2.5 Pro, 2.5 Flash) | Chat, File Edit, Code Run, Terminal, Browser, Search |
110
+ | OpenAI | Codex / ChatGPT (GPT-4.1, o3, o4-mini) | Chat, File Edit, Code Run, Terminal |
111
+ | DeepSeek | DeepSeek V3 / R1 Reasoner | Chat, File Edit, Code Run, Reasoning |
112
+ | Groq | Llama 3.3 70B, Mixtral | Chat, File Edit, Code Run |
113
+ | Ollama | Local Models (Llama 3.3, Qwen Coder, DeepSeek R1) | Chat, File Edit, Code Run (Local, Offline) |
114
+ | OpenRouter | Multi-Company Models | Gateway Routing |
115
+
116
+ ---
117
+
118
+ ## Configuration (`~/.thwip/config.toml`)
119
+
120
+ thwip auto-detects existing API keys from environment variables and existing agent configs (`~/.claude.json`, `~/.gemini/config.json`). Configuration can also be set manually:
121
+
122
+ ```toml
123
+ [defaults]
124
+ agent = "claude"
125
+ model = "claude-sonnet-4"
126
+ project = "."
127
+ theme = "dark"
128
+ stream = true
129
+ auto_save = true
130
+
131
+ [keys]
132
+ anthropic = "sk-ant-..."
133
+ google = "AIza..."
134
+ openai = "sk-..."
135
+ deepseek = "sk-..."
136
+ groq = "gsk_..."
137
+ openrouter = "sk-or-..."
138
+
139
+ [ollama]
140
+ host = "http://localhost:11434"
141
+
142
+ [fallback]
143
+ enabled = true
144
+ chain = [
145
+ "claude/claude-sonnet-4",
146
+ "google/gemini-2.5-pro",
147
+ "openai/gpt-4.1",
148
+ "deepseek/deepseek-chat",
149
+ "ollama/llama3.3"
150
+ ]
151
+ ```
152
+
153
+ ---
154
+
155
+ ## License
156
+
157
+ MIT License
@@ -0,0 +1,28 @@
1
+ thwip/__init__.py,sha256=ELzHKoDapuxNrSHDIjgDwhb-7gCn_jdfIMT6SYJZoLw,95
2
+ thwip/__main__.py,sha256=RQjUJB6y9OtUscFdYkVmljsUL19N2qXoxXvcxheh5ok,108
3
+ thwip/cli.py,sha256=UqSLv5W4C_ieKmYTXaPxbjnQ9SqRnIrLYQszMoknmMw,23639
4
+ thwip/config.py,sha256=oJWiXjsWOdaUN_YKebFxkTsD5XEvn3CZNksByUlTTS0,11494
5
+ thwip/detector.py,sha256=1FCJgFUGdTtOw6hXPsBAuWda_rVdSx676o-iV4dI07w,8764
6
+ thwip/limits.py,sha256=w_rOVlK9zbExVDUOVUq7XGWgTWdL2CcF3fL_MUMGHAs,2732
7
+ thwip/session.py,sha256=hznXcW6JpQeCnHJVwE8xShC6qfoZgMebTqw20eTIy8Y,6245
8
+ thwip/shortcuts.py,sha256=XM1r-G5h1tBHVygpDp6-MrPZusberL1-XnLMu4mGDJA,2936
9
+ thwip/theme.py,sha256=1yQ5VJRvjI2g9GjWQrta8_pZdfZFRTW68oKvoz2culA,11487
10
+ thwip/utils.py,sha256=1oLQ-R2V_NLrhcLP26DKNE0QWWYKGSPJKapiPD2MrQs,3497
11
+ thwip/agents/__init__.py,sha256=kJzBUHwa7GcoAzJJzzqfcEoFJyBA7rkuptXa-2MvQT8,3271
12
+ thwip/agents/base.py,sha256=MjKPgJ5AgEyLQoE3AkTVB7yB4Iy0UaTrOKs4EHLbOfA,10907
13
+ thwip/agents/claude_agent.py,sha256=l0DBSyb0JslPooXZZfug8CfjUPi6LTMXu5irN8ysRzU,12273
14
+ thwip/agents/deepseek_agent.py,sha256=CkvhRRp-hSYS8-3dGzADOiMnMKzu5EMMVGutEALqs1M,7682
15
+ thwip/agents/google_agent.py,sha256=WeGdUPn0KAqwc0uj07DZob_MnVfmy3Cl2I81un_ypXs,10782
16
+ thwip/agents/groq_agent.py,sha256=PQFk8ErVM9Sx4VkZuHp_Vby2G18seh3nyCJoVSZn9LY,5780
17
+ thwip/agents/ollama_agent.py,sha256=LAN6XJcwN3x6txQWqiuXTR2qkb_W_Cj6Oi7xzm1pJM0,6095
18
+ thwip/agents/openai_agent.py,sha256=FK7ecLMip9hCGk0J6bzN2uG3UvDS6y37HqxnMgpORk8,10885
19
+ thwip/agents/openrouter_agent.py,sha256=BkgCf4aFsZbZAe6a_9KegGoz_pApRr8G8cxJYJliJTE,6188
20
+ thwip/tools/__init__.py,sha256=EJmteIf9bic1f1C_vlOfOEyKi-MSXdwfEq7IYdUSI0k,7715
21
+ thwip/tools/code_runner.py,sha256=EzVItRwjURNqIyF5QpuE0yCr6x7rfeV1ZYbyl7DSylo,2140
22
+ thwip/tools/file_editor.py,sha256=FyIabeQHLY-c2j9Mwm9XVlaKHBsDPpmmNsySi9E92Ps,3915
23
+ thwip/tools/git_ops.py,sha256=fBR3-dgZNauyHFgyGMnUO3rGt298pn_ULyQpS32Fxgo,1248
24
+ thwip/tools/terminal.py,sha256=_mkmMbjDFLnk-varVQrLMWv9Zo6BEpkqByle2vDnxhg,2330
25
+ thwip_cli-1.0.0.dist-info/METADATA,sha256=jYl8XpolB62CsgoRIgxinTCIrxcnAd5tLfFy8K_FrmQ,5492
26
+ thwip_cli-1.0.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
27
+ thwip_cli-1.0.0.dist-info/entry_points.txt,sha256=5l8hp5C3goRwxTyT3sQfLIJ3fkBlM0OOHeEMoDCQwbQ,41
28
+ thwip_cli-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ thwip = thwip.cli:main