stravinsky 0.2.52__py3-none-any.whl → 0.4.18__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.

Potentially problematic release.


This version of stravinsky might be problematic. Click here for more details.

Files changed (58) hide show
  1. mcp_bridge/__init__.py +1 -1
  2. mcp_bridge/auth/token_store.py +113 -11
  3. mcp_bridge/cli/__init__.py +6 -0
  4. mcp_bridge/cli/install_hooks.py +1265 -0
  5. mcp_bridge/cli/session_report.py +585 -0
  6. mcp_bridge/config/MANIFEST_SCHEMA.md +305 -0
  7. mcp_bridge/config/README.md +276 -0
  8. mcp_bridge/config/hook_config.py +249 -0
  9. mcp_bridge/config/hooks_manifest.json +138 -0
  10. mcp_bridge/config/rate_limits.py +222 -0
  11. mcp_bridge/config/skills_manifest.json +128 -0
  12. mcp_bridge/hooks/HOOKS_SETTINGS.json +175 -0
  13. mcp_bridge/hooks/README.md +215 -0
  14. mcp_bridge/hooks/__init__.py +119 -60
  15. mcp_bridge/hooks/edit_recovery.py +42 -37
  16. mcp_bridge/hooks/git_noninteractive.py +89 -0
  17. mcp_bridge/hooks/keyword_detector.py +30 -0
  18. mcp_bridge/hooks/manager.py +8 -0
  19. mcp_bridge/hooks/notification_hook.py +103 -0
  20. mcp_bridge/hooks/parallel_execution.py +111 -0
  21. mcp_bridge/hooks/pre_compact.py +82 -183
  22. mcp_bridge/hooks/rules_injector.py +507 -0
  23. mcp_bridge/hooks/session_notifier.py +125 -0
  24. mcp_bridge/{native_hooks → hooks}/stravinsky_mode.py +51 -16
  25. mcp_bridge/hooks/subagent_stop.py +98 -0
  26. mcp_bridge/hooks/task_validator.py +73 -0
  27. mcp_bridge/hooks/tmux_manager.py +141 -0
  28. mcp_bridge/hooks/todo_continuation.py +90 -0
  29. mcp_bridge/hooks/todo_delegation.py +88 -0
  30. mcp_bridge/hooks/tool_messaging.py +267 -0
  31. mcp_bridge/hooks/truncator.py +21 -17
  32. mcp_bridge/notifications.py +151 -0
  33. mcp_bridge/prompts/multimodal.py +24 -3
  34. mcp_bridge/server.py +214 -49
  35. mcp_bridge/server_tools.py +445 -0
  36. mcp_bridge/tools/__init__.py +22 -18
  37. mcp_bridge/tools/agent_manager.py +220 -32
  38. mcp_bridge/tools/code_search.py +97 -11
  39. mcp_bridge/tools/lsp/__init__.py +7 -0
  40. mcp_bridge/tools/lsp/manager.py +448 -0
  41. mcp_bridge/tools/lsp/tools.py +637 -150
  42. mcp_bridge/tools/model_invoke.py +208 -106
  43. mcp_bridge/tools/query_classifier.py +323 -0
  44. mcp_bridge/tools/semantic_search.py +3042 -0
  45. mcp_bridge/tools/templates.py +32 -18
  46. mcp_bridge/update_manager.py +589 -0
  47. mcp_bridge/update_manager_pypi.py +299 -0
  48. stravinsky-0.4.18.dist-info/METADATA +468 -0
  49. stravinsky-0.4.18.dist-info/RECORD +88 -0
  50. stravinsky-0.4.18.dist-info/entry_points.txt +5 -0
  51. mcp_bridge/native_hooks/edit_recovery.py +0 -46
  52. mcp_bridge/native_hooks/todo_delegation.py +0 -54
  53. mcp_bridge/native_hooks/truncator.py +0 -23
  54. stravinsky-0.2.52.dist-info/METADATA +0 -204
  55. stravinsky-0.2.52.dist-info/RECORD +0 -63
  56. stravinsky-0.2.52.dist-info/entry_points.txt +0 -3
  57. /mcp_bridge/{native_hooks → hooks}/context.py +0 -0
  58. {stravinsky-0.2.52.dist-info → stravinsky-0.4.18.dist-info}/WHEEL +0 -0
@@ -1,23 +0,0 @@
1
- import os
2
- import sys
3
- import json
4
-
5
- MAX_CHARS = 30000
6
-
7
- def main():
8
- try:
9
- data = json.load(sys.stdin)
10
- tool_response = data.get("tool_response", "")
11
- except Exception:
12
- return
13
-
14
- if len(tool_response) > MAX_CHARS:
15
- header = f"[TRUNCATED - {len(tool_response)} chars reduced to {MAX_CHARS}]\n"
16
- footer = "\n...[TRUNCATED]"
17
- truncated = tool_response[:MAX_CHARS]
18
- print(header + truncated + footer)
19
- else:
20
- print(tool_response)
21
-
22
- if __name__ == "__main__":
23
- main()
@@ -1,204 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: stravinsky
3
- Version: 0.2.52
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
- Project-URL: Repository, https://github.com/GratefulDave/stravinsky
6
- Project-URL: Issues, https://github.com/GratefulDave/stravinsky/issues
7
- Author: Stravinsky Team
8
- License: MIT
9
- Keywords: claude,gemini,mcp,oauth,openai
10
- Requires-Python: >=3.11
11
- Requires-Dist: aiofiles>=23.1.0
12
- Requires-Dist: cryptography>=41.0.0
13
- Requires-Dist: google-auth-oauthlib>=1.0.0
14
- Requires-Dist: google-auth>=2.20.0
15
- Requires-Dist: httpx>=0.24.0
16
- Requires-Dist: jedi>=0.19.2
17
- Requires-Dist: keyring>=25.7.0
18
- Requires-Dist: mcp>=1.2.1
19
- Requires-Dist: openai>=1.0.0
20
- Requires-Dist: psutil>=5.9.0
21
- Requires-Dist: pydantic>=2.0.0
22
- Requires-Dist: python-dotenv>=1.0.0
23
- Requires-Dist: rich>=13.0.0
24
- Requires-Dist: ruff>=0.14.10
25
- Requires-Dist: tenacity>=8.5.0
26
- Provides-Extra: dev
27
- Requires-Dist: mypy>=1.10.0; extra == 'dev'
28
- Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
29
- Requires-Dist: pytest>=8.0.0; extra == 'dev'
30
- Requires-Dist: ruff>=0.4.0; extra == 'dev'
31
- Description-Content-Type: text/markdown
32
-
33
- <div align="center">
34
- <img src="https://raw.githubusercontent.com/GratefulDave/stravinsky/main/assets/logo.png" width="300" alt="Stravinsky Logo">
35
- <h1>Stravinsky</h1>
36
- <p><strong>The Avant-Garde MCP Bridge for Claude Code</strong></p>
37
- <p><em>Movement • Rhythm • Precision</em></p>
38
- </div>
39
-
40
- ---
41
-
42
- ## What is Stravinsky?
43
-
44
- **Multi-model AI orchestration** with OAuth authentication for Claude Code.
45
-
46
- ## Features
47
-
48
- - 🔐 **OAuth Authentication** - Secure browser-based auth for Google (Gemini) and OpenAI (ChatGPT)
49
- - 🤖 **Multi-Model Support** - Seamlessly invoke Gemini and GPT models from Claude
50
- - 🛠️ **31 MCP Tools** - Model invocation, code search, LSP integrations, session management, and more
51
- - 🧠 **7 Specialized Agents** - Stravinsky (orchestrator), Delphi (advisor), Dewey (documentation), and more
52
- - 🔄 **Background Tasks** - Spawn parallel agents with full tool access via Claude Code CLI
53
- - 📝 **LSP Integration** - Full Language Server Protocol support for Python (jedi)
54
- - 🔍 **AST-Aware Search** - Structural code search and refactoring with ast-grep
55
-
56
- ## Quick Start
57
-
58
- ### Installation
59
-
60
- **From PyPI (Recommended):**
61
-
62
- ```bash
63
- # One-shot with uvx - no installation needed!
64
- claude mcp add stravinsky -- uvx stravinsky
65
-
66
- # Or install globally first:
67
- uv tool install stravinsky
68
- claude mcp add stravinsky -- stravinsky
69
- ```
70
-
71
- **From Source (for development):**
72
-
73
- ```bash
74
- uv tool install --editable /path/to/stravinsky
75
- claude mcp add stravinsky -- stravinsky
76
- ```
77
-
78
- ### Authentication
79
-
80
- ````bash
81
- # Login to Google (Gemini)
82
- stravinsky-auth login gemini
83
-
84
- # Login to OpenAI (ChatGPT Plus/Pro required)
85
- stravinsky-auth login openai
86
-
87
- # Check status
88
- stravinsky-auth status
89
-
90
- # Logout
91
- stravinsky-auth logout gemini
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
- ````
102
-
103
- ## Add to Your CLAUDE.md
104
-
105
- After installing globally, add this to your project's `CLAUDE.md`:
106
-
107
- ```markdown
108
- ## Stravinsky MCP (Parallel Agents)
109
-
110
- Use Stravinsky MCP tools. **DEFAULT: spawn parallel agents for multi-step tasks.**
111
-
112
- ### Agent Tools
113
-
114
- - `agent_spawn(prompt, agent_type, description)` - Spawn background agent with full tool access
115
- - `agent_output(task_id, block)` - Get results (block=True to wait)
116
- - `agent_progress(task_id)` - Check real-time progress
117
- - `agent_list()` - Overview of all running agents
118
- - `agent_cancel(task_id)` - Stop a running agent
119
-
120
- ### Agent Types
121
-
122
- - `explore` - Codebase search, "where is X?" questions
123
- - `dewey` - Documentation research, implementation examples
124
- - `frontend` - UI/UX work, component design
125
- - `delphi` - Strategic advice, architecture review
126
-
127
- ### Parallel Execution (MANDATORY)
128
-
129
- For ANY task with 2+ independent steps:
130
-
131
- 1. **Immediately use agent_spawn** for each independent component
132
- 2. Fire all agents simultaneously, don't wait
133
- 3. Monitor with agent_progress, collect with agent_output
134
-
135
- ### ULTRATHINK / ULTRAWORK
136
-
137
- - **ULTRATHINK**: Engage exhaustive deep reasoning, multi-dimensional analysis
138
- - **ULTRAWORK**: Maximum parallel execution - spawn agents aggressively for every subtask
139
- ````
140
-
141
- ## Tools (31)
142
-
143
- | Category | Tools |
144
- | ---------------- | ---------------------------------------------------------------------------------- |
145
- | **Model Invoke** | `invoke_gemini`, `invoke_openai`, `get_system_health` |
146
- | **Environment** | `get_project_context`, `task_spawn`, `task_status`, `task_list` |
147
- | **Agents** | `agent_spawn`, `agent_output`, `agent_cancel`, `agent_list`, `agent_progress` |
148
- | **Code Search** | `ast_grep_search`, `ast_grep_replace`, `grep_search`, `glob_files` |
149
- | **LSP** | `lsp_diagnostics`, `lsp_hover`, `lsp_goto_definition`, `lsp_find_references`, etc. |
150
- | **Sessions** | `session_list`, `session_read`, `session_search` |
151
- | **Skills** | `skill_list`, `skill_get` |
152
-
153
- ## Agent Prompts (7)
154
-
155
- | Prompt | Purpose |
156
- | ----------------- | ------------------------------------------------------------- |
157
- | `stravinsky` | Task orchestration, planning, and goal-oriented execution. |
158
- | `delphi` | Strategic technical advisor (GPT-based) for hard debugging. |
159
- | `dewey` | Documentation and multi-repository research specialist. |
160
- | `explore` | Specialized for codebase-wide search and structural analysis. |
161
- | `frontend` | UI/UX Engineer (Gemini-optimized) for component prototyping. |
162
- | `document_writer` | Technical documentation and specification writer. |
163
- | `multimodal` | Visual analysis expert for UI screenshots and diagrams. |
164
-
165
- ## Development
166
-
167
- ```bash
168
- # Install in development mode
169
- uv pip install -e .
170
-
171
- # Run server
172
- stravinsky
173
- ```
174
-
175
- ## Project Structure
176
-
177
- ```
178
- stravinsky/
179
- ├── mcp_bridge/ # Python MCP server
180
- │ ├── server.py # Entry point
181
- │ ├── auth/ # OAuth (Google & OpenAI)
182
- │ ├── tools/ # Model invoke, search, skills
183
- │ ├── prompts/ # Agent system prompts
184
- │ └── config/ # Bridge configuration
185
- ├── pyproject.toml # Build system
186
- └── README.md # This file
187
- ```
188
-
189
- ## Troubleshooting
190
-
191
- ### OpenAI "Port 1455 in use"
192
-
193
- The Codex CLI uses the same port. Stop it with: `killall codex`
194
-
195
- ### OpenAI Authentication Failed
196
-
197
- - Ensure you have a ChatGPT Plus/Pro subscription
198
- - Tokens expire occasionally; run `stravinsky-auth login openai` to refresh
199
-
200
- ## License
201
-
202
- MIT
203
-
204
- ---
@@ -1,63 +0,0 @@
1
- mcp_bridge/__init__.py,sha256=1PHsAGbNJxj2_h0lehC9jzS9Pgx7eDxyLsUXGgyT-LI,23
2
- mcp_bridge/server.py,sha256=QdWgYZHHI4zWV6R7bE0qA3Go77rxmet__qo4nsY_Qt4,25391
3
- mcp_bridge/server_tools.py,sha256=IIC_2X6gNFks5ohc9Fzmg3b5FhcWCusvo15r7DqDphQ,27378
4
- mcp_bridge/auth/__init__.py,sha256=AGHNtKzqvZYMLQ35Qg6aOabpxBqmkR-pjXv8Iby9oMw,797
5
- mcp_bridge/auth/cli.py,sha256=jaXyrzq6HwnW61g6CHHcj8bF5PJLYrYufD_jmN0jeiQ,8502
6
- mcp_bridge/auth/oauth.py,sha256=gWYk3KJWbUM1J5AKVDJ_4k4zdQzwwaYJZ5J25If0r8c,12804
7
- mcp_bridge/auth/openai_oauth.py,sha256=0Ks2X-NXLCBzqs3xnbj9QLZpugICOX5qB5y5vtDENOo,11522
8
- mcp_bridge/auth/token_refresh.py,sha256=goWp1Wz3yWOoFuxvFMDZLjo8gLPXcajZxHpzZtSoKcQ,3760
9
- mcp_bridge/auth/token_store.py,sha256=3A6TZJ7Wju6QfhALeX4IMhY5jzb9OWMrDzwRbfAukiU,5650
10
- mcp_bridge/config/__init__.py,sha256=uapHdrSWWrafVKD9CTB1J_7Dw0_RajRhoDGjy9zH21o,256
11
- mcp_bridge/config/hooks.py,sha256=WvWC6ZUc8y1IXPlGCjLYAAsGGigd5tWeGiw585OGNwA,4624
12
- mcp_bridge/hooks/__init__.py,sha256=WF4AavhTD1IcrB4RTLSB0e3GGeEFxeljM3QlHXC9OO0,2867
13
- mcp_bridge/hooks/agent_reminder.py,sha256=OxKPxi7e2MIBm44Ebzzl9j9fDV5bBgogGF0lj7wun5s,1913
14
- mcp_bridge/hooks/auto_slash_command.py,sha256=LUndZHxUzEF7PQuOdp3v7VfqNUgsiDE2gzI_TkR9he4,5280
15
- mcp_bridge/hooks/budget_optimizer.py,sha256=Im0qSGVUdRByk04hP5VyKt7tjlDVYG0LJb6IeUjjnj8,1323
16
- mcp_bridge/hooks/comment_checker.py,sha256=MslXZYiHjfxjUU7VzmZfa1n2WR9o4lnaktJ6eUPBUDs,3772
17
- mcp_bridge/hooks/compaction.py,sha256=UXTwmyo9C4Jm3j72KvVU11ukSAHaGaTey_h3L43e3rY,1186
18
- mcp_bridge/hooks/context_monitor.py,sha256=IEr75e_gqbPEUslxxfkwftiy6alDmJxQhSB6cy8BVg4,1885
19
- mcp_bridge/hooks/directory_context.py,sha256=0VjdJITJIGUqR4-q-wZlB6kmkFQMraaFvU2Nz2PnJCM,1225
20
- mcp_bridge/hooks/edit_recovery.py,sha256=CyhdFF3rV-sqZ13Mn8I8I5oMqB2KLIl6Bziv7GcsX0o,1749
21
- mcp_bridge/hooks/empty_message_sanitizer.py,sha256=iZZnETju1wBvJXV1k4msV8FxLNg5LkVm2eaFA2nQWxI,6606
22
- mcp_bridge/hooks/keyword_detector.py,sha256=5kztrsQ2NtT5qdDTC-J49nxPB_D0tIjT1AVAAry4FPE,4866
23
- mcp_bridge/hooks/manager.py,sha256=SG08soeyHSzfl9NE9yX2x5B_NEbv9LxJnmRBUaOhGfE,5835
24
- mcp_bridge/hooks/parallel_enforcer.py,sha256=qzPB7PX22Laz6yC3MCbAmYBhP59P9ac6WHpgXOABOuQ,3651
25
- mcp_bridge/hooks/pre_compact.py,sha256=SeVMdknqiXich_m7MLSMk_GVh570qva8XIl8-sFDMfQ,6328
26
- mcp_bridge/hooks/preemptive_compaction.py,sha256=x4-dLWCconVFD-nR93P1EB_tG9n4LHdESq7uDFS3ut8,7937
27
- mcp_bridge/hooks/session_idle.py,sha256=5wo6XakXglWVCP-HN1i976OptfntwCNnbjxoM--veh4,3525
28
- mcp_bridge/hooks/session_recovery.py,sha256=c5eoIWJAgMTPY0wq_64MmCUNLCB_GSowZlA3lo4R9LU,6260
29
- mcp_bridge/hooks/todo_enforcer.py,sha256=LRvVxYILqQ6YuQl3tky4hgyD-irXIPDE5e0EdKr6jcc,2274
30
- mcp_bridge/hooks/truncator.py,sha256=Rse93FS2aJxJGUOJIGY_ZYAS4yIUQBpBlVFo-IYbbKE,598
31
- mcp_bridge/native_hooks/context.py,sha256=JBHqnX75qtMO3JAEFooBEAK6DxcsVaXykhrP7tdFm6E,949
32
- mcp_bridge/native_hooks/edit_recovery.py,sha256=1OWpb3v87txFUsgnNe1hoeTI7rIKCkKYONld5BK1TyA,1503
33
- mcp_bridge/native_hooks/stravinsky_mode.py,sha256=UCiBk4YtGX6ubKTXYyGZUBIQG_CuFlHKPW-8S494BqU,2856
34
- mcp_bridge/native_hooks/todo_delegation.py,sha256=3bdOKXcNDTjyV9sQlxQEsvop7nOHcqu6SOdvSnStQko,1520
35
- mcp_bridge/native_hooks/truncator.py,sha256=h3hb8sZXTvc59C0-5GdZwCVZHlxBKdo47JT9TMxHG3g,530
36
- mcp_bridge/prompts/__init__.py,sha256=wzveum1x50IXGkE0JFpvHAj8P0yqnSrgtrmyIIpnnBI,358
37
- mcp_bridge/prompts/delphi.py,sha256=ZlnLY2o1PrK3CxLLaCkozAGPIAJ5OFmw5u8o6-LXmgI,4960
38
- mcp_bridge/prompts/dewey.py,sha256=u5OaOj8kinZERflWvUv4M4WVAwxw0kJrNT00wHksIHI,9264
39
- mcp_bridge/prompts/document_writer.py,sha256=hiCbxgTU8HKPJkS0eNpPPtzSqDXPreApU2OqiS6zh-0,5618
40
- mcp_bridge/prompts/explore.py,sha256=oZxh4fe4KNGa_ozakJSpLYeQVfO4-jQ2M1BSOw1Sw10,5801
41
- mcp_bridge/prompts/frontend.py,sha256=j91I8k5vcVed13eeX-Ebiv49x9Qj4HO_SQN1xhB8TLQ,4943
42
- mcp_bridge/prompts/multimodal.py,sha256=Svw11N392LjshalasOd80X0Qw_qtOMqu_lD-_HmQDIo,1936
43
- mcp_bridge/prompts/planner.py,sha256=wcdXIxPlZM0UYd9KQSKXnuXTRj2acSnqlqeQ_NxxEqw,6985
44
- mcp_bridge/prompts/stravinsky.py,sha256=gJgzMgsa6u0fLbFWOkPY2lq78-yJTuD46wrnk-5rem0,27498
45
- mcp_bridge/tools/__init__.py,sha256=SRnMaUni0BhlvCABBEYeyveNiOAMQPNBXmjUKG6aXQA,1150
46
- mcp_bridge/tools/agent_manager.py,sha256=aJlz_i0dy2MyxWV_rF5LAOzCoTG09GkTLmNE1KB2A0w,31280
47
- mcp_bridge/tools/background_tasks.py,sha256=bwbVYWCDzuXb3Q_OdIr10r76lgjFTphfjdTmOHYZI7w,5252
48
- mcp_bridge/tools/code_search.py,sha256=sR-alLQuxaXUFB9hby_wQsQu3Io644wdnpdOM_vm0aw,9978
49
- mcp_bridge/tools/continuous_loop.py,sha256=MM3FnF3ULuR32h0tqJP8uF48iJg6R9dbyHy_36KLOls,2100
50
- mcp_bridge/tools/init.py,sha256=sU95M9M_tjsfuew389TrFrxxeCavuSC16qbkydk_6PU,1586
51
- mcp_bridge/tools/model_invoke.py,sha256=dET6V7Z6b5KbgtyZO0HH2E18yWd-d2531bffIM0_xrg,32457
52
- mcp_bridge/tools/project_context.py,sha256=bXKxuW1pGjtIbeNjMgpBoQL-d_CI94UPBVpRjUyhX20,4707
53
- mcp_bridge/tools/session_manager.py,sha256=tCVLLvO-Kttla7OxPImb_NSGL_9aW46ilq5ej_IcnlA,9252
54
- mcp_bridge/tools/skill_loader.py,sha256=RQ5eC357pm-6q85G3EyrQugz0S3OO5lxWtM9n9ECF-c,6010
55
- mcp_bridge/tools/task_runner.py,sha256=xjE3MXv62gcUCwOEwHjAGL_Ud_ZlKFBN0UHpvFjj3uk,3918
56
- mcp_bridge/tools/templates.py,sha256=A7eFk08Y2TZ2FPnsYLkVYCGOm1dd8scpNfcjCl_vC24,5928
57
- mcp_bridge/tools/lsp/__init__.py,sha256=fLiII9qgeachI3MlkO6uGulfUH3T0YDeyEfO65bbxdw,549
58
- mcp_bridge/tools/lsp/tools.py,sha256=nfXT3LBD5Mas_98f1zwu62jkpInGXUR-1vLl1zIykUw,16315
59
- mcp_bridge/utils/__init__.py,sha256=pbHV4nq5SLUYcAyTmLUZYrp293Ctud57X8hwsMGA_BM,20
60
- stravinsky-0.2.52.dist-info/METADATA,sha256=STvBvkJjq9moBLq9_-fQS83e0v0wL7L-nKKp8_SMZzg,7091
61
- stravinsky-0.2.52.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
62
- stravinsky-0.2.52.dist-info/entry_points.txt,sha256=BISwF7i71Oen7jFVmBXz8fxiU11Cp415wPF0xXG2Q3s,97
63
- stravinsky-0.2.52.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- stravinsky = mcp_bridge.server:main
3
- stravinsky-auth = mcp_bridge.auth.cli:main
File without changes