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.

Files changed (79) hide show
  1. stravinsky-0.2.37/.github/workflows/publish.yml +37 -0
  2. {stravinsky-0.1.12 → stravinsky-0.2.37}/CLAUDE.md +5 -0
  3. stravinsky-0.2.37/INSTALL.md +484 -0
  4. {stravinsky-0.1.12 → stravinsky-0.2.37}/PKG-INFO +15 -9
  5. {stravinsky-0.1.12 → stravinsky-0.2.37}/README.md +12 -7
  6. stravinsky-0.2.37/error.log +4 -0
  7. stravinsky-0.2.37/install_native_hooks.py +53 -0
  8. stravinsky-0.2.37/mcp_bridge/__init__.py +1 -0
  9. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/cli.py +89 -44
  10. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/oauth.py +88 -63
  11. stravinsky-0.2.37/mcp_bridge/hooks/__init__.py +49 -0
  12. stravinsky-0.2.37/mcp_bridge/hooks/agent_reminder.py +61 -0
  13. stravinsky-0.2.37/mcp_bridge/hooks/auto_slash_command.py +186 -0
  14. stravinsky-0.2.37/mcp_bridge/hooks/budget_optimizer.py +38 -0
  15. stravinsky-0.2.37/mcp_bridge/hooks/comment_checker.py +136 -0
  16. stravinsky-0.2.37/mcp_bridge/hooks/compaction.py +32 -0
  17. stravinsky-0.2.37/mcp_bridge/hooks/context_monitor.py +58 -0
  18. stravinsky-0.2.37/mcp_bridge/hooks/directory_context.py +40 -0
  19. stravinsky-0.2.37/mcp_bridge/hooks/edit_recovery.py +41 -0
  20. stravinsky-0.2.37/mcp_bridge/hooks/empty_message_sanitizer.py +240 -0
  21. stravinsky-0.2.37/mcp_bridge/hooks/keyword_detector.py +122 -0
  22. stravinsky-0.2.37/mcp_bridge/hooks/manager.py +96 -0
  23. stravinsky-0.2.37/mcp_bridge/hooks/preemptive_compaction.py +157 -0
  24. stravinsky-0.2.37/mcp_bridge/hooks/session_recovery.py +186 -0
  25. stravinsky-0.2.37/mcp_bridge/hooks/todo_enforcer.py +75 -0
  26. stravinsky-0.2.37/mcp_bridge/hooks/truncator.py +19 -0
  27. stravinsky-0.2.37/mcp_bridge/native_hooks/context.py +38 -0
  28. stravinsky-0.2.37/mcp_bridge/native_hooks/edit_recovery.py +46 -0
  29. stravinsky-0.2.37/mcp_bridge/native_hooks/stravinsky_mode.py +109 -0
  30. stravinsky-0.2.37/mcp_bridge/native_hooks/truncator.py +23 -0
  31. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/delphi.py +3 -2
  32. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/dewey.py +105 -21
  33. stravinsky-0.2.37/mcp_bridge/prompts/stravinsky.py +660 -0
  34. stravinsky-0.2.37/mcp_bridge/server.py +689 -0
  35. stravinsky-0.1.12/mcp_bridge/server.py → stravinsky-0.2.37/mcp_bridge/server_tools.py +53 -372
  36. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/__init__.py +10 -3
  37. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/agent_manager.py +344 -187
  38. stravinsky-0.2.37/mcp_bridge/tools/init.py +50 -0
  39. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/lsp/tools.py +15 -15
  40. stravinsky-0.2.37/mcp_bridge/tools/model_invoke.py +779 -0
  41. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/skill_loader.py +51 -47
  42. stravinsky-0.2.37/mcp_bridge/tools/task_runner.py +141 -0
  43. stravinsky-0.2.37/mcp_bridge/tools/templates.py +175 -0
  44. {stravinsky-0.1.12 → stravinsky-0.2.37}/pyproject.toml +3 -2
  45. stravinsky-0.2.37/repro_spawn.py +29 -0
  46. stravinsky-0.2.37/stdout_handshake_auditor.py +85 -0
  47. stravinsky-0.2.37/tests/manual_test_hooks.py +57 -0
  48. stravinsky-0.2.37/tests/test_hooks.py +56 -0
  49. {stravinsky-0.1.12 → stravinsky-0.2.37}/uv.lock +13 -33
  50. stravinsky-0.2.37/verify_tools.py +43 -0
  51. stravinsky-0.1.12/.stravinsky/agents/agent_9b9fd4f0.out +0 -1
  52. stravinsky-0.1.12/.stravinsky/agents.json +0 -17
  53. stravinsky-0.1.12/mcp_bridge/__init__.py +0 -5
  54. stravinsky-0.1.12/mcp_bridge/prompts/stravinsky.py +0 -329
  55. stravinsky-0.1.12/mcp_bridge/tools/model_invoke.py +0 -233
  56. stravinsky-0.1.12/mcp_bridge/tools/task_runner.py +0 -97
  57. {stravinsky-0.1.12 → stravinsky-0.2.37}/.gitignore +0 -0
  58. {stravinsky-0.1.12 → stravinsky-0.2.37}/.mcp.json +0 -0
  59. /stravinsky-0.1.12/.stravinsky/agents/agent_9b9fd4f0.log → /stravinsky-0.2.37/.stravinsky/agents.json +0 -0
  60. {stravinsky-0.1.12 → stravinsky-0.2.37}/assets/logo.png +0 -0
  61. {stravinsky-0.1.12 → stravinsky-0.2.37}/assets/logo.png.txt +0 -0
  62. {stravinsky-0.1.12 → stravinsky-0.2.37}/assets/logo_small.png +0 -0
  63. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/__init__.py +0 -0
  64. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/openai_oauth.py +0 -0
  65. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/auth/token_store.py +0 -0
  66. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/config/__init__.py +0 -0
  67. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/config/hooks.py +0 -0
  68. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/__init__.py +0 -0
  69. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/document_writer.py +0 -0
  70. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/explore.py +0 -0
  71. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/frontend.py +0 -0
  72. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/prompts/multimodal.py +0 -0
  73. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/background_tasks.py +0 -0
  74. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/code_search.py +0 -0
  75. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/continuous_loop.py +0 -0
  76. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/lsp/__init__.py +0 -0
  77. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/project_context.py +0 -0
  78. {stravinsky-0.1.12 → stravinsky-0.2.37}/mcp_bridge/tools/session_manager.py +0 -0
  79. {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.1.12
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.0.0
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
- ```bash
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
- ```bash
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,4 @@
1
+ Building stravinsky @ file:///Users/davidandrews/PycharmProjects/stravinsky
2
+ Built stravinsky @ file:///Users/davidandrews/PycharmProjects/stravinsky
3
+ Installed 61 packages in 150ms
4
+ INFO:mcp_bridge.server:Starting Stravinsky MCP Bridge Server...
@@ -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"