stravinsky 0.1.12__tar.gz → 0.2.37__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.
Potentially problematic release.
This version of stravinsky might be problematic. Click here for more details.
- stravinsky-0.2.37/.github/workflows/publish.yml +37 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/CLAUDE.md +5 -0
- stravinsky-0.2.37/INSTALL.md +484 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/PKG-INFO +15 -9
- {stravinsky-0.1.12 → stravinsky-0.2.37}/README.md +12 -7
- stravinsky-0.2.37/error.log +4 -0
- stravinsky-0.2.37/install_native_hooks.py +53 -0
- stravinsky-0.2.37/mcp_bridge/__init__.py +1 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/cli.py +89 -44
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/oauth.py +88 -63
- stravinsky-0.2.37/mcp_bridge/hooks/__init__.py +49 -0
- stravinsky-0.2.37/mcp_bridge/hooks/agent_reminder.py +61 -0
- stravinsky-0.2.37/mcp_bridge/hooks/auto_slash_command.py +186 -0
- stravinsky-0.2.37/mcp_bridge/hooks/budget_optimizer.py +38 -0
- stravinsky-0.2.37/mcp_bridge/hooks/comment_checker.py +136 -0
- stravinsky-0.2.37/mcp_bridge/hooks/compaction.py +32 -0
- stravinsky-0.2.37/mcp_bridge/hooks/context_monitor.py +58 -0
- stravinsky-0.2.37/mcp_bridge/hooks/directory_context.py +40 -0
- stravinsky-0.2.37/mcp_bridge/hooks/edit_recovery.py +41 -0
- stravinsky-0.2.37/mcp_bridge/hooks/empty_message_sanitizer.py +240 -0
- stravinsky-0.2.37/mcp_bridge/hooks/keyword_detector.py +122 -0
- stravinsky-0.2.37/mcp_bridge/hooks/manager.py +96 -0
- stravinsky-0.2.37/mcp_bridge/hooks/preemptive_compaction.py +157 -0
- stravinsky-0.2.37/mcp_bridge/hooks/session_recovery.py +186 -0
- stravinsky-0.2.37/mcp_bridge/hooks/todo_enforcer.py +75 -0
- stravinsky-0.2.37/mcp_bridge/hooks/truncator.py +19 -0
- stravinsky-0.2.37/mcp_bridge/native_hooks/context.py +38 -0
- stravinsky-0.2.37/mcp_bridge/native_hooks/edit_recovery.py +46 -0
- stravinsky-0.2.37/mcp_bridge/native_hooks/stravinsky_mode.py +109 -0
- stravinsky-0.2.37/mcp_bridge/native_hooks/truncator.py +23 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/delphi.py +3 -2
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/dewey.py +105 -21
- stravinsky-0.2.37/mcp_bridge/prompts/stravinsky.py +660 -0
- stravinsky-0.2.37/mcp_bridge/server.py +689 -0
- stravinsky-0.1.12/mcp_bridge/server.py → stravinsky-0.2.37/mcp_bridge/server_tools.py +53 -372
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/__init__.py +10 -3
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/agent_manager.py +344 -187
- stravinsky-0.2.37/mcp_bridge/tools/init.py +50 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/lsp/tools.py +15 -15
- stravinsky-0.2.37/mcp_bridge/tools/model_invoke.py +779 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/skill_loader.py +51 -47
- stravinsky-0.2.37/mcp_bridge/tools/task_runner.py +141 -0
- stravinsky-0.2.37/mcp_bridge/tools/templates.py +175 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/pyproject.toml +3 -2
- stravinsky-0.2.37/repro_spawn.py +29 -0
- stravinsky-0.2.37/stdout_handshake_auditor.py +85 -0
- stravinsky-0.2.37/tests/manual_test_hooks.py +57 -0
- stravinsky-0.2.37/tests/test_hooks.py +56 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/uv.lock +13 -33
- stravinsky-0.2.37/verify_tools.py +43 -0
- stravinsky-0.1.12/.stravinsky/agents/agent_9b9fd4f0.out +0 -1
- stravinsky-0.1.12/.stravinsky/agents.json +0 -17
- stravinsky-0.1.12/mcp_bridge/__init__.py +0 -5
- stravinsky-0.1.12/mcp_bridge/prompts/stravinsky.py +0 -329
- stravinsky-0.1.12/mcp_bridge/tools/model_invoke.py +0 -233
- stravinsky-0.1.12/mcp_bridge/tools/task_runner.py +0 -97
- {stravinsky-0.1.12 → stravinsky-0.2.37}/.gitignore +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/.mcp.json +0 -0
- /stravinsky-0.1.12/.stravinsky/agents/agent_9b9fd4f0.log → /stravinsky-0.2.37/.stravinsky/agents.json +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/assets/logo.png +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/assets/logo.png.txt +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/assets/logo_small.png +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/__init__.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/openai_oauth.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/token_store.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/config/__init__.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/config/hooks.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/__init__.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/document_writer.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/explore.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/frontend.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/multimodal.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/background_tasks.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/code_search.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/continuous_loop.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/lsp/__init__.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/project_context.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/session_manager.py +0 -0
- {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/utils/__init__.py +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*" # Trigger on version tags like v0.2.9
|
|
7
|
+
workflow_dispatch: # Allow manual trigger
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build-and-publish:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout code
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
uses: astral-sh/setup-uv@v4
|
|
26
|
+
with:
|
|
27
|
+
version: "latest"
|
|
28
|
+
|
|
29
|
+
- name: Build package
|
|
30
|
+
run: uv build
|
|
31
|
+
|
|
32
|
+
- name: Publish to PyPI
|
|
33
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
34
|
+
with:
|
|
35
|
+
# Disable OIDC trusted publishing - use API token instead
|
|
36
|
+
attestations: false
|
|
37
|
+
password: ${{ secrets.PYPY_API_TOKEN }}
|
|
@@ -43,6 +43,11 @@ claude mcp add stravinsky -- stravinsky
|
|
|
43
43
|
|
|
44
44
|
### Slash Commands (Skills)
|
|
45
45
|
|
|
46
|
+
Skills are discovered from:
|
|
47
|
+
- Project-local: `.claude/commands/**/*.md` (recursive)
|
|
48
|
+
- User-global: `~/.claude/commands/**/*.md` (recursive)
|
|
49
|
+
|
|
50
|
+
Common commands:
|
|
46
51
|
- `/stravinsky`: Task Orchestrator & Planner
|
|
47
52
|
- `/delphi`: Architecture & Debug Advisor
|
|
48
53
|
- `/dewey`: Documentation & Research
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
# Stravinsky Installation & Removal Guide
|
|
2
|
+
|
|
3
|
+
Complete installation, configuration, and removal instructions for Stravinsky MCP Bridge.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Installation](#installation)
|
|
10
|
+
- [Method 1: One-Shot with uvx (Recommended)](#method-1-one-shot-with-uvx-recommended)
|
|
11
|
+
- [Method 2: Global Installation with uv](#method-2-global-installation-with-uv)
|
|
12
|
+
- [Method 3: From Source (Development)](#method-3-from-source-development)
|
|
13
|
+
- [Authentication Setup](#authentication-setup)
|
|
14
|
+
- [Project Initialization](#project-initialization)
|
|
15
|
+
- [Verification](#verification)
|
|
16
|
+
- [Removal](#removal)
|
|
17
|
+
- [Complete Uninstall](#complete-uninstall)
|
|
18
|
+
- [Remove from Specific Project](#remove-from-specific-project)
|
|
19
|
+
- [Remove Authentication Tokens Only](#remove-authentication-tokens-only)
|
|
20
|
+
- [Troubleshooting](#troubleshooting)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
### Method 1: One-Shot with uvx (Recommended)
|
|
27
|
+
|
|
28
|
+
**Zero installation needed!** Claude Code will automatically download and run Stravinsky on demand.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Add to Claude Code MCP configuration
|
|
32
|
+
claude mcp add stravinsky -- uvx stravinsky
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Pros:**
|
|
36
|
+
- No manual installation
|
|
37
|
+
- Always uses latest version
|
|
38
|
+
- Automatic dependency management
|
|
39
|
+
- Minimal disk usage
|
|
40
|
+
|
|
41
|
+
**Cons:**
|
|
42
|
+
- Slightly slower first startup (downloads package)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### Method 2: Global Installation with uv
|
|
47
|
+
|
|
48
|
+
Install Stravinsky globally for faster startup times.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Install globally
|
|
52
|
+
uv tool install stravinsky
|
|
53
|
+
|
|
54
|
+
# Add to Claude Code
|
|
55
|
+
claude mcp add stravinsky -- stravinsky
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Pros:**
|
|
59
|
+
- Faster startup (pre-installed)
|
|
60
|
+
- Offline usage after installation
|
|
61
|
+
- Version pinning
|
|
62
|
+
|
|
63
|
+
**Cons:**
|
|
64
|
+
- Requires manual updates: `uv tool install --upgrade stravinsky`
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Method 3: From Source (Development)
|
|
69
|
+
|
|
70
|
+
For contributors or testing unreleased features.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Clone repository
|
|
74
|
+
git clone https://github.com/GratefulDave/stravinsky.git
|
|
75
|
+
cd stravinsky
|
|
76
|
+
|
|
77
|
+
# Install in development mode
|
|
78
|
+
uv tool install --editable .
|
|
79
|
+
|
|
80
|
+
# Add to Claude Code
|
|
81
|
+
claude mcp add stravinsky -- stravinsky
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Authentication Setup
|
|
87
|
+
|
|
88
|
+
Stravinsky supports **Google (Gemini)** and **OpenAI (ChatGPT)** authentication.
|
|
89
|
+
|
|
90
|
+
### Authenticate with Google (Gemini)
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
stravinsky-auth login gemini
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Opens browser for OAuth authentication. Credentials stored securely in system keyring.
|
|
97
|
+
|
|
98
|
+
### Authenticate with OpenAI (ChatGPT Plus/Pro)
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
stravinsky-auth login openai
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Requirements:**
|
|
105
|
+
- ChatGPT Plus or Pro subscription
|
|
106
|
+
- Port 1455 available (used by OAuth callback)
|
|
107
|
+
|
|
108
|
+
### Check Authentication Status
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
stravinsky-auth status
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Example output:
|
|
115
|
+
```
|
|
116
|
+
Authentication Status:
|
|
117
|
+
|
|
118
|
+
Gemini: ✓ Authenticated
|
|
119
|
+
Expires in: 2h 30m
|
|
120
|
+
Openai: ✗ Not authenticated
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Refresh Tokens
|
|
124
|
+
|
|
125
|
+
Tokens auto-refresh, but you can manually refresh:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
stravinsky-auth refresh gemini
|
|
129
|
+
stravinsky-auth refresh openai
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Project Initialization
|
|
135
|
+
|
|
136
|
+
Bootstrap any repository for Stravinsky usage:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Navigate to your project
|
|
140
|
+
cd /path/to/your/project
|
|
141
|
+
|
|
142
|
+
# Initialize Stravinsky
|
|
143
|
+
stravinsky-auth init
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**This creates:**
|
|
147
|
+
|
|
148
|
+
1. **`.claude/commands/`** - Slash commands:
|
|
149
|
+
- `/stravinsky` - Orchestrator
|
|
150
|
+
- `/delphi` - Strategic advisor
|
|
151
|
+
- `/dewey` - Documentation researcher
|
|
152
|
+
- `/context` - Git/rules/todo context
|
|
153
|
+
- `/health` - System health check
|
|
154
|
+
- `/list` - List background agents
|
|
155
|
+
- `/parallel` - Parallel execution
|
|
156
|
+
- `/version` - Version info
|
|
157
|
+
|
|
158
|
+
2. **`CLAUDE.md`** - Updated with Stravinsky usage instructions
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Verification
|
|
163
|
+
|
|
164
|
+
### 1. Check Installation
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# Check if installed
|
|
168
|
+
uv tool list | grep stravinsky
|
|
169
|
+
|
|
170
|
+
# Check version
|
|
171
|
+
stravinsky --version
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 2. Verify MCP Registration
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# List MCP servers in Claude Code
|
|
178
|
+
claude mcp list
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Should show `stravinsky` in the list.
|
|
182
|
+
|
|
183
|
+
### 3. Test Authentication
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
stravinsky-auth status
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 4. Test in Claude Code
|
|
190
|
+
|
|
191
|
+
Start a conversation in Claude Code and try:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
Can you list the Stravinsky tools available?
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Claude should respond with the list of 31 MCP tools.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Removal
|
|
202
|
+
|
|
203
|
+
### Complete Uninstall
|
|
204
|
+
|
|
205
|
+
Remove Stravinsky entirely from your system.
|
|
206
|
+
|
|
207
|
+
#### Step 1: Remove from Claude Code
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
claude mcp remove stravinsky
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
#### Step 2: Uninstall Package
|
|
214
|
+
|
|
215
|
+
**If installed with uvx:**
|
|
216
|
+
```bash
|
|
217
|
+
# Nothing to uninstall - uvx downloads on-demand
|
|
218
|
+
# Removal from Claude Code is sufficient
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**If installed globally with uv:**
|
|
222
|
+
```bash
|
|
223
|
+
uv tool uninstall stravinsky
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**If installed from source:**
|
|
227
|
+
```bash
|
|
228
|
+
uv tool uninstall stravinsky
|
|
229
|
+
# Optionally delete cloned repository
|
|
230
|
+
rm -rf /path/to/stravinsky
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### Step 3: Remove Authentication Tokens
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# Logout from both providers
|
|
237
|
+
stravinsky-auth logout gemini
|
|
238
|
+
stravinsky-auth logout openai
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
#### Step 4: Remove Project Configurations (Optional)
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# Remove from each project where you ran 'stravinsky-auth init'
|
|
245
|
+
cd /path/to/project
|
|
246
|
+
rm -rf .claude/commands/stravinsky/
|
|
247
|
+
rm -rf .claude/commands/delphi/
|
|
248
|
+
rm -rf .claude/commands/dewey/
|
|
249
|
+
rm -rf .claude/commands/context/
|
|
250
|
+
rm -rf .claude/commands/health/
|
|
251
|
+
rm -rf .claude/commands/list/
|
|
252
|
+
rm -rf .claude/commands/parallel/
|
|
253
|
+
rm -rf .claude/commands/version/
|
|
254
|
+
|
|
255
|
+
# Manually remove Stravinsky sections from CLAUDE.md
|
|
256
|
+
# (Edit file and remove sections added by init)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
#### Step 5: Clean System Keyring (Optional)
|
|
260
|
+
|
|
261
|
+
Tokens are stored in your system keyring. To verify removal:
|
|
262
|
+
|
|
263
|
+
**macOS:**
|
|
264
|
+
```bash
|
|
265
|
+
# Open Keychain Access app
|
|
266
|
+
# Search for "stravinsky"
|
|
267
|
+
# Delete any found entries
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Linux:**
|
|
271
|
+
```bash
|
|
272
|
+
# Using secret-tool (if available)
|
|
273
|
+
secret-tool clear service stravinsky
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Windows:**
|
|
277
|
+
```powershell
|
|
278
|
+
# Tokens stored in Windows Credential Manager
|
|
279
|
+
# Open: Control Panel → Credential Manager
|
|
280
|
+
# Remove entries containing "stravinsky"
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
### Remove from Specific Project
|
|
286
|
+
|
|
287
|
+
Keep Stravinsky installed but remove from one project.
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
cd /path/to/project
|
|
291
|
+
|
|
292
|
+
# Remove slash commands
|
|
293
|
+
rm -rf .claude/commands/stravinsky/
|
|
294
|
+
rm -rf .claude/commands/delphi/
|
|
295
|
+
rm -rf .claude/commands/dewey/
|
|
296
|
+
rm -rf .claude/commands/context/
|
|
297
|
+
rm -rf .claude/commands/health/
|
|
298
|
+
|
|
299
|
+
# Edit CLAUDE.md manually to remove Stravinsky instructions
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
### Remove Authentication Tokens Only
|
|
305
|
+
|
|
306
|
+
Keep Stravinsky installed but clear credentials.
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# Remove specific provider
|
|
310
|
+
stravinsky-auth logout gemini
|
|
311
|
+
stravinsky-auth logout openai
|
|
312
|
+
|
|
313
|
+
# Verify removal
|
|
314
|
+
stravinsky-auth status
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Output should show:
|
|
318
|
+
```
|
|
319
|
+
Authentication Status:
|
|
320
|
+
|
|
321
|
+
Gemini: ✗ Not authenticated
|
|
322
|
+
Openai: ✗ Not authenticated
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Troubleshooting
|
|
328
|
+
|
|
329
|
+
### "stravinsky: command not found"
|
|
330
|
+
|
|
331
|
+
**Cause:** Stravinsky not installed or not in PATH.
|
|
332
|
+
|
|
333
|
+
**Solution:**
|
|
334
|
+
```bash
|
|
335
|
+
# If using uvx, this is expected (Claude Code handles it)
|
|
336
|
+
# If using uv tool install, ensure ~/.local/bin is in PATH
|
|
337
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
338
|
+
|
|
339
|
+
# Or reinstall
|
|
340
|
+
uv tool install stravinsky
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### "Port 1455 already in use" (OpenAI login)
|
|
344
|
+
|
|
345
|
+
**Cause:** Codex CLI or another process using port 1455.
|
|
346
|
+
|
|
347
|
+
**Solution:**
|
|
348
|
+
```bash
|
|
349
|
+
# Find process
|
|
350
|
+
lsof -i :1455
|
|
351
|
+
|
|
352
|
+
# Kill Codex CLI if running
|
|
353
|
+
killall codex
|
|
354
|
+
|
|
355
|
+
# Retry login
|
|
356
|
+
stravinsky-auth login openai
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### "OAuth failed" (Gemini/OpenAI)
|
|
360
|
+
|
|
361
|
+
**Cause:** Network issues, invalid credentials, or expired session.
|
|
362
|
+
|
|
363
|
+
**Solution:**
|
|
364
|
+
```bash
|
|
365
|
+
# Clear existing token
|
|
366
|
+
stravinsky-auth logout gemini # or openai
|
|
367
|
+
|
|
368
|
+
# Retry login
|
|
369
|
+
stravinsky-auth login gemini # or openai
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### "MCP server not responding"
|
|
373
|
+
|
|
374
|
+
**Cause:** Stravinsky process crashed or not started.
|
|
375
|
+
|
|
376
|
+
**Solution:**
|
|
377
|
+
```bash
|
|
378
|
+
# Check Claude Code logs
|
|
379
|
+
claude mcp logs stravinsky
|
|
380
|
+
|
|
381
|
+
# Restart Claude Code
|
|
382
|
+
# The MCP server will auto-restart
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### "Token expired" messages
|
|
386
|
+
|
|
387
|
+
**Cause:** Access token expired and auto-refresh failed.
|
|
388
|
+
|
|
389
|
+
**Solution:**
|
|
390
|
+
```bash
|
|
391
|
+
# Manually refresh
|
|
392
|
+
stravinsky-auth refresh gemini # or openai
|
|
393
|
+
|
|
394
|
+
# Or re-login
|
|
395
|
+
stravinsky-auth login gemini # or openai
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Can't find `.claude/commands/` after init
|
|
399
|
+
|
|
400
|
+
**Cause:** Wrong directory or init failed.
|
|
401
|
+
|
|
402
|
+
**Solution:**
|
|
403
|
+
```bash
|
|
404
|
+
# Ensure you're in project root
|
|
405
|
+
pwd
|
|
406
|
+
|
|
407
|
+
# Re-run init with verbose output
|
|
408
|
+
stravinsky-auth init
|
|
409
|
+
|
|
410
|
+
# Check for error messages
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Dependencies
|
|
416
|
+
|
|
417
|
+
All dependencies are automatically installed:
|
|
418
|
+
|
|
419
|
+
- `mcp>=1.2.1`
|
|
420
|
+
- `pydantic>=2.0.0`
|
|
421
|
+
- `httpx>=0.24.0`
|
|
422
|
+
- `python-dotenv>=1.0.0`
|
|
423
|
+
- `google-auth-oauthlib>=1.0.0`
|
|
424
|
+
- `google-auth>=2.20.0`
|
|
425
|
+
- `openai>=1.0.0`
|
|
426
|
+
- `cryptography>=41.0.0`
|
|
427
|
+
- `rich>=13.0.0`
|
|
428
|
+
- `aiofiles>=23.1.0`
|
|
429
|
+
- `psutil>=5.9.0`
|
|
430
|
+
- `keyring>=25.7.0`
|
|
431
|
+
- `jedi>=0.19.2`
|
|
432
|
+
- `ruff>=0.14.10`
|
|
433
|
+
- `tenacity>=8.5.0`
|
|
434
|
+
|
|
435
|
+
**You don't need to install anything manually.**
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## Getting Help
|
|
440
|
+
|
|
441
|
+
- **Documentation:** [README.md](./README.md)
|
|
442
|
+
- **Issues:** [GitHub Issues](https://github.com/GratefulDave/stravinsky/issues)
|
|
443
|
+
- **Claude Code Docs:** [Claude Code MCP Guide](https://docs.anthropic.com/claude/docs/model-context-protocol)
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## Quick Reference
|
|
448
|
+
|
|
449
|
+
### Installation
|
|
450
|
+
```bash
|
|
451
|
+
# Recommended: uvx
|
|
452
|
+
claude mcp add stravinsky -- uvx stravinsky
|
|
453
|
+
|
|
454
|
+
# OR: Global install
|
|
455
|
+
uv tool install stravinsky
|
|
456
|
+
claude mcp add stravinsky -- stravinsky
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Authentication
|
|
460
|
+
```bash
|
|
461
|
+
stravinsky-auth login gemini # Google OAuth
|
|
462
|
+
stravinsky-auth login openai # OpenAI OAuth
|
|
463
|
+
stravinsky-auth status # Check status
|
|
464
|
+
stravinsky-auth logout <provider> # Remove credentials
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Project Setup
|
|
468
|
+
```bash
|
|
469
|
+
cd /path/to/project
|
|
470
|
+
stravinsky-auth init # Create slash commands + update CLAUDE.md
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Complete Removal
|
|
474
|
+
```bash
|
|
475
|
+
claude mcp remove stravinsky # Remove from Claude Code
|
|
476
|
+
uv tool uninstall stravinsky # Uninstall package
|
|
477
|
+
stravinsky-auth logout gemini # Clear credentials
|
|
478
|
+
stravinsky-auth logout openai
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
**Last Updated:** v0.2.34
|
|
484
|
+
**License:** MIT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stravinsky
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.37
|
|
4
4
|
Summary: MCP Bridge for Claude Code with Multi-Model Support. Install globally: claude mcp add --scope user stravinsky -- uvx stravinsky. Add to CLAUDE.md: See https://pypi.org/project/stravinsky/
|
|
5
5
|
Project-URL: Repository, https://github.com/GratefulDave/stravinsky
|
|
6
6
|
Project-URL: Issues, https://github.com/GratefulDave/stravinsky/issues
|
|
@@ -15,13 +15,14 @@ Requires-Dist: google-auth>=2.20.0
|
|
|
15
15
|
Requires-Dist: httpx>=0.24.0
|
|
16
16
|
Requires-Dist: jedi>=0.19.2
|
|
17
17
|
Requires-Dist: keyring>=25.7.0
|
|
18
|
-
Requires-Dist: mcp>=1.
|
|
18
|
+
Requires-Dist: mcp>=1.2.1
|
|
19
19
|
Requires-Dist: openai>=1.0.0
|
|
20
20
|
Requires-Dist: psutil>=5.9.0
|
|
21
21
|
Requires-Dist: pydantic>=2.0.0
|
|
22
22
|
Requires-Dist: python-dotenv>=1.0.0
|
|
23
23
|
Requires-Dist: rich>=13.0.0
|
|
24
24
|
Requires-Dist: ruff>=0.14.10
|
|
25
|
+
Requires-Dist: tenacity>=8.5.0
|
|
25
26
|
Provides-Extra: dev
|
|
26
27
|
Requires-Dist: mypy>=1.10.0; extra == 'dev'
|
|
27
28
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
@@ -76,7 +77,7 @@ claude mcp add stravinsky -- stravinsky
|
|
|
76
77
|
|
|
77
78
|
### Authentication
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
````bash
|
|
80
81
|
# Login to Google (Gemini)
|
|
81
82
|
stravinsky-auth login gemini
|
|
82
83
|
|
|
@@ -88,7 +89,16 @@ stravinsky-auth status
|
|
|
88
89
|
|
|
89
90
|
# Logout
|
|
90
91
|
stravinsky-auth logout gemini
|
|
91
|
-
|
|
92
|
+
|
|
93
|
+
### Slash Commands
|
|
94
|
+
|
|
95
|
+
Slash commands are discovered from:
|
|
96
|
+
- Project-local: `.claude/commands/**/*.md` (recursive)
|
|
97
|
+
- User-global: `~/.claude/commands/**/*.md` (recursive)
|
|
98
|
+
|
|
99
|
+
Commands can be organized in subdirectories (e.g., `.claude/commands/strav/stravinsky.md`).
|
|
100
|
+
|
|
101
|
+
````
|
|
92
102
|
|
|
93
103
|
## Add to Your CLAUDE.md
|
|
94
104
|
|
|
@@ -126,7 +136,7 @@ For ANY task with 2+ independent steps:
|
|
|
126
136
|
|
|
127
137
|
- **ULTRATHINK**: Engage exhaustive deep reasoning, multi-dimensional analysis
|
|
128
138
|
- **ULTRAWORK**: Maximum parallel execution - spawn agents aggressively for every subtask
|
|
129
|
-
|
|
139
|
+
````
|
|
130
140
|
|
|
131
141
|
## Tools (31)
|
|
132
142
|
|
|
@@ -192,7 +202,3 @@ The Codex CLI uses the same port. Stop it with: `killall codex`
|
|
|
192
202
|
MIT
|
|
193
203
|
|
|
194
204
|
---
|
|
195
|
-
|
|
196
|
-
<div align="center">
|
|
197
|
-
<small>Built with obsession by the Google Deepmind team.</small>
|
|
198
|
-
</div>
|
|
@@ -45,7 +45,7 @@ claude mcp add stravinsky -- stravinsky
|
|
|
45
45
|
|
|
46
46
|
### Authentication
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
````bash
|
|
49
49
|
# Login to Google (Gemini)
|
|
50
50
|
stravinsky-auth login gemini
|
|
51
51
|
|
|
@@ -57,7 +57,16 @@ stravinsky-auth status
|
|
|
57
57
|
|
|
58
58
|
# Logout
|
|
59
59
|
stravinsky-auth logout gemini
|
|
60
|
-
|
|
60
|
+
|
|
61
|
+
### Slash Commands
|
|
62
|
+
|
|
63
|
+
Slash commands are discovered from:
|
|
64
|
+
- Project-local: `.claude/commands/**/*.md` (recursive)
|
|
65
|
+
- User-global: `~/.claude/commands/**/*.md` (recursive)
|
|
66
|
+
|
|
67
|
+
Commands can be organized in subdirectories (e.g., `.claude/commands/strav/stravinsky.md`).
|
|
68
|
+
|
|
69
|
+
````
|
|
61
70
|
|
|
62
71
|
## Add to Your CLAUDE.md
|
|
63
72
|
|
|
@@ -95,7 +104,7 @@ For ANY task with 2+ independent steps:
|
|
|
95
104
|
|
|
96
105
|
- **ULTRATHINK**: Engage exhaustive deep reasoning, multi-dimensional analysis
|
|
97
106
|
- **ULTRAWORK**: Maximum parallel execution - spawn agents aggressively for every subtask
|
|
98
|
-
|
|
107
|
+
````
|
|
99
108
|
|
|
100
109
|
## Tools (31)
|
|
101
110
|
|
|
@@ -161,7 +170,3 @@ The Codex CLI uses the same port. Stop it with: `killall codex`
|
|
|
161
170
|
MIT
|
|
162
171
|
|
|
163
172
|
---
|
|
164
|
-
|
|
165
|
-
<div align="center">
|
|
166
|
-
<small>Built with obsession by the Google Deepmind team.</small>
|
|
167
|
-
</div>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
def install():
|
|
6
|
+
project_root = Path.cwd()
|
|
7
|
+
settings_path = project_root / ".claude" / "settings.json"
|
|
8
|
+
|
|
9
|
+
# Create .claude directory if missing
|
|
10
|
+
settings_path.parent.mkdir(exist_ok=True)
|
|
11
|
+
|
|
12
|
+
# Initial settings
|
|
13
|
+
if settings_path.exists():
|
|
14
|
+
try:
|
|
15
|
+
settings = json.loads(settings_path.read_text())
|
|
16
|
+
except Exception:
|
|
17
|
+
settings = {}
|
|
18
|
+
else:
|
|
19
|
+
settings = {}
|
|
20
|
+
|
|
21
|
+
if "hooks" not in settings:
|
|
22
|
+
settings["hooks"] = {}
|
|
23
|
+
|
|
24
|
+
hooks = settings["hooks"]
|
|
25
|
+
|
|
26
|
+
# Hook 1: UserPromptSubmit (Context)
|
|
27
|
+
hooks["UserPromptSubmit"] = [
|
|
28
|
+
{
|
|
29
|
+
"type": "command",
|
|
30
|
+
"command": f"python3 {project_root}/mcp_bridge/native_hooks/context.py"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
# Hook 2: PostToolUse (Recovery & Truncation)
|
|
35
|
+
# We chain them or use a dispatcher. Chaining is easier in the JSON.
|
|
36
|
+
hooks["PostToolUse"] = [
|
|
37
|
+
{
|
|
38
|
+
"type": "command",
|
|
39
|
+
"command": f"python3 {project_root}/mcp_bridge/native_hooks/truncator.py"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"command": f"python3 {project_root}/mcp_bridge/native_hooks/edit_recovery.py",
|
|
44
|
+
"matcher": ["Edit", "MultiEdit"]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
# Save
|
|
49
|
+
settings_path.write_text(json.dumps(settings, indent=2))
|
|
50
|
+
print(f"✅ Stravinsky native hooks installed to {settings_path}")
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
install()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.32"
|