stravinsky 0.2.37__tar.gz → 0.4.36__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.4.36/.claude/HOOKS_INTEGRATION.md +316 -0
- stravinsky-0.4.36/.claude/agents/HOOKS.md +437 -0
- stravinsky-0.4.36/.claude/agents/code-reviewer.md +209 -0
- stravinsky-0.4.36/.claude/agents/debugger.md +253 -0
- stravinsky-0.4.36/.claude/agents/delphi.md +491 -0
- stravinsky-0.4.36/.claude/agents/dewey.md +245 -0
- stravinsky-0.4.36/.claude/agents/explore.md +890 -0
- stravinsky-0.4.36/.claude/agents/frontend.md +471 -0
- stravinsky-0.4.36/.claude/agents/implementation-lead.md +164 -0
- stravinsky-0.4.36/.claude/agents/research-lead.md +129 -0
- stravinsky-0.4.36/.claude/agents/stravinsky.md +612 -0
- stravinsky-0.4.36/.claude/commands/delphi.md +5 -0
- stravinsky-0.4.36/.claude/commands/dewey.md +54 -0
- stravinsky-0.4.36/.claude/commands/git-master.md +112 -0
- stravinsky-0.4.36/.claude/commands/index.md +49 -0
- stravinsky-0.4.36/.claude/commands/publish.md +86 -0
- stravinsky-0.4.36/.claude/commands/review.md +67 -0
- stravinsky-0.4.36/.claude/commands/str/index.md +199 -0
- stravinsky-0.4.36/.claude/commands/str/list_watchers.md +96 -0
- stravinsky-0.4.36/.claude/commands/str/search.md +205 -0
- stravinsky-0.4.36/.claude/commands/str/start_filewatch.md +136 -0
- stravinsky-0.4.36/.claude/commands/str/stats.md +71 -0
- stravinsky-0.4.36/.claude/commands/str/stop_filewatch.md +89 -0
- stravinsky-0.4.36/.claude/commands/str-cancel.md +51 -0
- stravinsky-0.4.36/.claude/commands/str-clean.md +68 -0
- stravinsky-0.4.36/.claude/commands/str-unwatch.md +42 -0
- stravinsky-0.4.36/.claude/commands/str-watch.md +45 -0
- stravinsky-0.4.36/.claude/commands/strav.md +288 -0
- stravinsky-0.4.36/.claude/commands/verify.md +60 -0
- stravinsky-0.4.36/.claude/commands/version.md +5 -0
- stravinsky-0.4.36/.claude/hooks/comment_checker.py +193 -0
- stravinsky-0.4.36/.claude/hooks/context_monitor.py +153 -0
- stravinsky-0.4.36/.claude/hooks/notification_hook.py +103 -0
- stravinsky-0.4.36/.claude/hooks/parallel_execution.py +243 -0
- stravinsky-0.4.36/.claude/hooks/parallel_reinforcement.py +85 -0
- stravinsky-0.4.36/.claude/hooks/pre_compact.py +123 -0
- stravinsky-0.4.36/.claude/hooks/session_recovery.py +263 -0
- stravinsky-0.4.36/.claude/hooks/stravinsky_mode.py +146 -0
- stravinsky-0.4.36/.claude/hooks/subagent_stop.py +98 -0
- stravinsky-0.4.36/.claude/hooks/todo_continuation.py +90 -0
- stravinsky-0.4.36/.claude/hooks/todo_delegation.py +93 -0
- stravinsky-0.4.36/.claude/hooks/tool_messaging.py +263 -0
- stravinsky-0.4.36/.claude/rules/deployment_safety.md +51 -0
- stravinsky-0.4.36/.claude/rules/pypi_deployment.md +220 -0
- stravinsky-0.4.36/.claude/settings.json +189 -0
- stravinsky-0.4.36/.claude/skills/chrome-devtools/SKILL.md +81 -0
- stravinsky-0.4.36/.claude/skills/sqlite/SKILL.md +77 -0
- stravinsky-0.4.36/.claude/skills/supabase/SKILL.md +74 -0
- stravinsky-0.4.36/.coverage +0 -0
- stravinsky-0.4.36/.gitignore +50 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_22ea4fd7.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_2adee6b3.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_2f19ccb0.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_4312ce18.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_4efc8f46.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_61c9181c.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_61f58446.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_64e18f27.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_6510e677.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_70ddf50b.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_7afbeeb2.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_7bf8bd61.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_7c4c4581.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_91993dfa.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_a0bd5fb4.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_a500ada6.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_abc732c9.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_b9c789bd.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_c061a891.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_c1671b80.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_c95f8211.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_d4e46c9b.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_d80fba02.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_ed55bb33.log +1 -0
- stravinsky-0.4.36/.stravinsky/agents/agent_f90a5968.log +1 -0
- stravinsky-0.4.36/.stravinsky/mcp_mode +1 -0
- stravinsky-0.4.36/ARCHITECTURE.md +1133 -0
- stravinsky-0.4.36/ARCHITECTURE_FLOWS.md +599 -0
- stravinsky-0.4.36/ARCHITECTURE_MAP.md +715 -0
- stravinsky-0.4.36/AUTO_INDEXING_TEST_SUMMARY.md +353 -0
- stravinsky-0.4.36/BASELINE_INDEX.md +363 -0
- stravinsky-0.4.36/BASELINE_SUMMARY.md +303 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/CLAUDE.md +98 -16
- stravinsky-0.4.36/COMPREHENSIVE_TEST_IMPLEMENTATION.txt +602 -0
- stravinsky-0.4.36/COVERAGE_REPORT.md +226 -0
- stravinsky-0.4.36/DELEGATION_FLOW_VERIFICATION.md +437 -0
- stravinsky-0.4.36/FILEWATCHER_DOCS_UPDATE_SUMMARY.md +186 -0
- stravinsky-0.4.36/FILEWATCHER_README.md +413 -0
- stravinsky-0.4.36/LSP_CLEANUP_FIX.md +141 -0
- stravinsky-0.4.36/MANUAL_TESTING_CHECKLIST.md +368 -0
- stravinsky-0.4.36/PKG-INFO +502 -0
- stravinsky-0.4.36/README.md +459 -0
- stravinsky-0.4.36/TESTING_AUTO_INDEXING.md +348 -0
- stravinsky-0.4.36/TESTING_SUMMARY_FINAL.md +234 -0
- stravinsky-0.4.36/TEST_ARTIFACTS_README.md +430 -0
- stravinsky-0.4.36/TEST_COVERAGE_INVOKE_GEMINI_AGENTIC.md +144 -0
- stravinsky-0.4.36/TEST_EXECUTION_REPORT.md +157 -0
- stravinsky-0.4.36/TEST_PLAN_AUTO_INDEXING.md +500 -0
- stravinsky-0.4.36/auth0.txt +1 -0
- stravinsky-0.4.36/deploy.sh +215 -0
- stravinsky-0.4.36/docs/AGENTS.md +382 -0
- stravinsky-0.4.36/docs/AGENT_WORKFLOW.md +974 -0
- stravinsky-0.4.36/docs/CALL_FLOW_DIAGRAM.txt +168 -0
- stravinsky-0.4.36/docs/COMMANDS_CONSOLIDATION_REPORT.md +310 -0
- stravinsky-0.4.36/docs/COMMANDS_QUICK_SUMMARY.md +114 -0
- stravinsky-0.4.36/docs/DEPLOYMENT.md +121 -0
- stravinsky-0.4.36/docs/FILEWATCHER_ARCHITECTURE.md +530 -0
- stravinsky-0.4.36/docs/FILEWATCHER_IMPLEMENTATION_SUMMARY.md +375 -0
- stravinsky-0.4.36/docs/FILE_WATCHER.md +357 -0
- stravinsky-0.4.36/docs/GEMINI_API_KEY_USAGE.md +280 -0
- stravinsky-0.4.36/docs/HOOKS.md +277 -0
- stravinsky-0.4.36/docs/HOOKS_INSTALLATION.md +194 -0
- stravinsky-0.4.36/docs/IMPLEMENTATION_PLAN.md +768 -0
- stravinsky-0.4.36/docs/INDEX_TOOL_CALL_LOGGING.md +189 -0
- stravinsky-0.4.36/docs/INJECTION_POINT_CODE_LOCATIONS.txt +322 -0
- stravinsky-0.4.36/docs/INSTALL.md +370 -0
- stravinsky-0.4.36/docs/INTELLIGENT_SEARCH_DESIGN.md +650 -0
- stravinsky-0.4.36/docs/KEYRING_AUTH_FIX.md +216 -0
- stravinsky-0.4.36/docs/LSP_MIGRATION_GUIDE.md +1452 -0
- stravinsky-0.4.36/docs/MCP_TOOL_CALL_INJECTION_POINTS.md +377 -0
- stravinsky-0.4.36/docs/MODEL_ROUTING.md +72 -0
- stravinsky-0.4.36/docs/PARALLEL_EXECUTION_FIX.md +247 -0
- stravinsky-0.4.36/docs/QUERY_CLASSIFIER_DESIGN.md +533 -0
- stravinsky-0.4.36/docs/QUICKSTART.md +127 -0
- stravinsky-0.4.36/docs/QUICK_REFERENCE_INJECTION_POINTS.md +97 -0
- stravinsky-0.4.36/docs/README.md +79 -0
- stravinsky-0.4.36/docs/README_COMMANDS_ANALYSIS.md +180 -0
- stravinsky-0.4.36/docs/README_filewatcher.md +213 -0
- stravinsky-0.4.36/docs/REPORT_INDEX.txt +189 -0
- stravinsky-0.4.36/docs/SEARCH_STRATEGY_TEST_SUITE.md +308 -0
- stravinsky-0.4.36/docs/SEARCH_TOOLS_ANALYSIS.md +826 -0
- stravinsky-0.4.36/docs/SEMANTIC_INDEXING_INDEX.md +214 -0
- stravinsky-0.4.36/docs/SEMANTIC_SEARCH_BEST_PRACTICES.md +1392 -0
- stravinsky-0.4.36/docs/SEMANTIC_SEARCH_QUICK_START.md +215 -0
- stravinsky-0.4.36/docs/SEMANTIC_SEARCH_TESTING_INDEX.md +278 -0
- stravinsky-0.4.36/docs/SEMANTIC_SEARCH_TEST_REPORT.md +225 -0
- stravinsky-0.4.36/docs/SEMANTIC_WATCHER_USAGE.md +400 -0
- stravinsky-0.4.36/docs/TEMPLATES_STRUCTURE.md +170 -0
- stravinsky-0.4.36/docs/TROUBLESHOOTING.md +382 -0
- stravinsky-0.4.36/docs/USAGE.md +537 -0
- stravinsky-0.4.36/docs/architecture_workflow.md +157 -0
- stravinsky-0.4.36/docs/filewatcher_design_summary.md +287 -0
- stravinsky-0.4.36/docs/filewatcher_integration_design.md +606 -0
- stravinsky-0.4.36/docs/filewatcher_quick_reference.md +448 -0
- stravinsky-0.4.36/docs/remediation_plan.md +38 -0
- stravinsky-0.4.36/docs/semantic_indexing_analysis.md +444 -0
- stravinsky-0.4.36/docs/semantic_indexing_quick_start.md +422 -0
- stravinsky-0.4.36/htmlcov/.gitignore +2 -0
- stravinsky-0.4.36/htmlcov/class_index.html +411 -0
- stravinsky-0.4.36/htmlcov/coverage_html_cb_6fb7b396.js +733 -0
- stravinsky-0.4.36/htmlcov/favicon_32_cb_58284776.png +0 -0
- stravinsky-0.4.36/htmlcov/function_index.html +2059 -0
- stravinsky-0.4.36/htmlcov/index.html +223 -0
- stravinsky-0.4.36/htmlcov/keybd_closed_cb_ce680311.png +0 -0
- stravinsky-0.4.36/htmlcov/status.json +1 -0
- stravinsky-0.4.36/htmlcov/style_cb_6b508a39.css +377 -0
- stravinsky-0.4.36/htmlcov/z_bb9220b593e8850a___init___py.html +133 -0
- stravinsky-0.4.36/htmlcov/z_bb9220b593e8850a_manager_py.html +539 -0
- stravinsky-0.4.36/htmlcov/z_bb9220b593e8850a_tools_py.html +1110 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09___init___py.html +146 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_agent_manager_py.html +1218 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_background_tasks_py.html +260 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_code_search_py.html +483 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_continuous_loop_py.html +163 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_init_py.html +148 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_model_invoke_py.html +1457 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_project_context_py.html +237 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_query_classifier_py.html +420 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_semantic_search_py.html +3418 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_session_manager_py.html +397 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_skill_loader_py.html +312 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_task_runner_py.html +236 -0
- stravinsky-0.4.36/htmlcov/z_bbf7571ef27a4a09_templates_py.html +286 -0
- stravinsky-0.4.36/jwt_io.txt +1 -0
- stravinsky-0.4.36/mcp_bridge/__init__.py +1 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/auth/__init__.py +16 -6
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/auth/cli.py +9 -6
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/auth/oauth.py +1 -2
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/auth/openai_oauth.py +4 -7
- stravinsky-0.4.36/mcp_bridge/auth/token_refresh.py +130 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/auth/token_store.py +112 -11
- stravinsky-0.4.36/mcp_bridge/cli/__init__.py +6 -0
- stravinsky-0.4.36/mcp_bridge/cli/install_hooks.py +1204 -0
- stravinsky-0.4.36/mcp_bridge/cli/session_report.py +582 -0
- stravinsky-0.4.36/mcp_bridge/config/MANIFEST_SCHEMA.md +305 -0
- stravinsky-0.4.36/mcp_bridge/config/README.md +276 -0
- stravinsky-0.4.36/mcp_bridge/config/hook_config.py +247 -0
- stravinsky-0.4.36/mcp_bridge/config/hooks_manifest.json +138 -0
- stravinsky-0.4.36/mcp_bridge/config/rate_limits.py +317 -0
- stravinsky-0.4.36/mcp_bridge/config/skills_manifest.json +128 -0
- stravinsky-0.4.36/mcp_bridge/hooks/HOOKS_SETTINGS.json +175 -0
- stravinsky-0.4.36/mcp_bridge/hooks/README.md +215 -0
- stravinsky-0.4.36/mcp_bridge/hooks/__init__.py +125 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/agent_reminder.py +4 -4
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/auto_slash_command.py +5 -5
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/budget_optimizer.py +2 -2
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/comment_checker.py +3 -4
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/compaction.py +2 -2
- stravinsky-0.4.36/mcp_bridge/hooks/context.py +39 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/context_monitor.py +2 -2
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/directory_context.py +3 -3
- stravinsky-0.4.36/mcp_bridge/hooks/edit_recovery.py +47 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/empty_message_sanitizer.py +2 -2
- stravinsky-0.4.36/mcp_bridge/hooks/git_noninteractive.py +89 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/keyword_detector.py +32 -4
- stravinsky-0.4.36/mcp_bridge/hooks/manager.py +155 -0
- stravinsky-0.4.36/mcp_bridge/hooks/notification_hook.py +101 -0
- stravinsky-0.4.36/mcp_bridge/hooks/parallel_enforcer.py +127 -0
- stravinsky-0.4.36/mcp_bridge/hooks/parallel_execution.py +123 -0
- stravinsky-0.4.36/mcp_bridge/hooks/pre_compact.py +122 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/preemptive_compaction.py +83 -10
- stravinsky-0.4.36/mcp_bridge/hooks/rules_injector.py +499 -0
- stravinsky-0.4.36/mcp_bridge/hooks/session_idle.py +116 -0
- stravinsky-0.4.36/mcp_bridge/hooks/session_notifier.py +125 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/session_recovery.py +4 -5
- {stravinsky-0.2.37/mcp_bridge/native_hooks → stravinsky-0.4.36/mcp_bridge/hooks}/stravinsky_mode.py +52 -17
- stravinsky-0.4.36/mcp_bridge/hooks/subagent_stop.py +96 -0
- stravinsky-0.4.36/mcp_bridge/hooks/task_validator.py +73 -0
- stravinsky-0.4.36/mcp_bridge/hooks/tmux_manager.py +140 -0
- stravinsky-0.4.36/mcp_bridge/hooks/todo_continuation.py +90 -0
- stravinsky-0.4.36/mcp_bridge/hooks/todo_delegation.py +91 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/hooks/todo_enforcer.py +2 -2
- stravinsky-0.4.36/mcp_bridge/hooks/tool_messaging.py +267 -0
- stravinsky-0.4.36/mcp_bridge/hooks/truncator.py +22 -0
- stravinsky-0.4.36/mcp_bridge/notifications.py +150 -0
- stravinsky-0.4.36/mcp_bridge/prompts/__init__.py +13 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/dewey.py +30 -20
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/explore.py +46 -8
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/multimodal.py +24 -3
- stravinsky-0.4.36/mcp_bridge/prompts/planner.py +220 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/stravinsky.py +107 -29
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/server.py +274 -21
- stravinsky-0.4.36/mcp_bridge/server_tools.py +1171 -0
- stravinsky-0.4.36/mcp_bridge/tools/__init__.py +49 -0
- stravinsky-0.4.36/mcp_bridge/tools/agent_manager.py +1134 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/background_tasks.py +15 -18
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/code_search.py +98 -13
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/continuous_loop.py +0 -1
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/init.py +1 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/lsp/__init__.py +12 -5
- stravinsky-0.4.36/mcp_bridge/tools/lsp/manager.py +442 -0
- stravinsky-0.4.36/mcp_bridge/tools/lsp/tools.py +1013 -0
- stravinsky-0.4.36/mcp_bridge/tools/model_invoke.py +1596 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/project_context.py +1 -2
- stravinsky-0.4.36/mcp_bridge/tools/query_classifier.py +406 -0
- stravinsky-0.4.36/mcp_bridge/tools/semantic_search.py +3316 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/session_manager.py +0 -2
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/skill_loader.py +0 -1
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/task_runner.py +4 -6
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/tools/templates.py +33 -19
- stravinsky-0.4.36/mcp_bridge/update_manager.py +585 -0
- stravinsky-0.4.36/mcp_bridge/update_manager_pypi.py +297 -0
- stravinsky-0.4.36/owasp.txt +1 -0
- stravinsky-0.4.36/pre_deploy_check.sh +126 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/pyproject.toml +16 -2
- stravinsky-0.4.36/rfc7519.txt +1 -0
- stravinsky-0.4.36/run-mcp.sh +3 -0
- stravinsky-0.4.36/security_advisory.txt +1 -0
- stravinsky-0.4.36/test_agentic_api.py +64 -0
- stravinsky-0.4.36/test_auth_visibility.py +100 -0
- stravinsky-0.4.36/test_coverage_report.md +206 -0
- stravinsky-0.4.36/test_lsp_cleanup.py +103 -0
- stravinsky-0.4.36/test_lsp_manager.py +307 -0
- stravinsky-0.4.36/test_plan_uncovered_tools.md +868 -0
- stravinsky-0.4.36/tests/MANUAL_TEST_GUIDE.md +414 -0
- stravinsky-0.4.36/tests/QUERY_CLASSIFICATION_GUIDE.md +375 -0
- stravinsky-0.4.36/tests/QUICK_REFERENCE.md +165 -0
- stravinsky-0.4.36/tests/README.md +89 -0
- stravinsky-0.4.36/tests/README_AUTO_INDEXING_TESTS.md +354 -0
- stravinsky-0.4.36/tests/README_LSP_TESTS.md +259 -0
- stravinsky-0.4.36/tests/README_QUERY_CLASSIFICATION.md +344 -0
- stravinsky-0.4.36/tests/TEST_IMPLEMENTATION_SUMMARY.md +391 -0
- stravinsky-0.4.36/tests/TEST_RESULTS_direct_gemini.md +299 -0
- stravinsky-0.4.36/tests/conftest.py +8 -0
- stravinsky-0.4.36/tests/manual_test_auto_indexing.py +788 -0
- stravinsky-0.4.36/tests/test_agent_manager.py +834 -0
- stravinsky-0.4.36/tests/test_api_key_auth.py +134 -0
- stravinsky-0.4.36/tests/test_auto_indexing.py +665 -0
- stravinsky-0.4.36/tests/test_code_search.py +780 -0
- stravinsky-0.4.36/tests/test_direct_gemini.py +321 -0
- stravinsky-0.4.36/tests/test_file_watcher.py +349 -0
- stravinsky-0.4.36/tests/test_file_watcher_no_index.py +404 -0
- stravinsky-0.4.36/tests/test_hooks.py +29 -0
- stravinsky-0.4.36/tests/test_invoke_gemini_agentic.py +926 -0
- stravinsky-0.4.36/tests/test_lsp_tools.py +730 -0
- stravinsky-0.4.36/tests/test_mcp_server_integration.py +169 -0
- stravinsky-0.4.36/tests/test_new_hooks.py +330 -0
- stravinsky-0.4.36/tests/test_query_classification.py +982 -0
- stravinsky-0.4.36/tests/test_query_classifier.py +566 -0
- stravinsky-0.4.36/tests/test_symlink_boundary.py +148 -0
- stravinsky-0.4.36/tests/test_update_manager.py +1120 -0
- stravinsky-0.4.36/tests/verify_semantic_search.py +155 -0
- stravinsky-0.4.36/uv.lock +2572 -0
- stravinsky-0.4.36/verify_gemini_key.py +37 -0
- stravinsky-0.2.37/.gitignore +0 -35
- stravinsky-0.2.37/.mcp.json +0 -3
- stravinsky-0.2.37/.stravinsky/agents.json +0 -0
- stravinsky-0.2.37/PKG-INFO +0 -204
- stravinsky-0.2.37/README.md +0 -172
- stravinsky-0.2.37/install_native_hooks.py +0 -53
- stravinsky-0.2.37/mcp_bridge/__init__.py +0 -1
- stravinsky-0.2.37/mcp_bridge/hooks/__init__.py +0 -49
- stravinsky-0.2.37/mcp_bridge/hooks/edit_recovery.py +0 -41
- stravinsky-0.2.37/mcp_bridge/hooks/manager.py +0 -96
- stravinsky-0.2.37/mcp_bridge/hooks/truncator.py +0 -19
- stravinsky-0.2.37/mcp_bridge/prompts/__init__.py +0 -18
- stravinsky-0.2.37/mcp_bridge/server_tools.py +0 -547
- stravinsky-0.2.37/mcp_bridge/tools/__init__.py +0 -38
- stravinsky-0.2.37/mcp_bridge/tools/agent_manager.py +0 -822
- stravinsky-0.2.37/mcp_bridge/tools/lsp/tools.py +0 -526
- stravinsky-0.2.37/mcp_bridge/tools/model_invoke.py +0 -779
- stravinsky-0.2.37/tests/test_hooks.py +0 -56
- stravinsky-0.2.37/uv.lock +0 -1483
- {stravinsky-0.2.37/mcp_bridge/native_hooks → stravinsky-0.4.36/.claude/hooks}/context.py +0 -0
- {stravinsky-0.2.37/mcp_bridge/native_hooks → stravinsky-0.4.36/.claude/hooks}/edit_recovery.py +0 -0
- {stravinsky-0.2.37/mcp_bridge/native_hooks → stravinsky-0.4.36/.claude/hooks}/truncator.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/.github/workflows/publish.yml +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/INSTALL.md +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/assets/logo.png +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/assets/logo.png.txt +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/assets/logo_small.png +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/error.log +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/config/__init__.py +2 -2
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/config/hooks.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/delphi.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/document_writer.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/prompts/frontend.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/mcp_bridge/utils/__init__.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/repro_spawn.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/stdout_handshake_auditor.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/tests/manual_test_hooks.py +0 -0
- {stravinsky-0.2.37 → stravinsky-0.4.36}/verify_tools.py +0 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# Stravinsky Hooks Integration
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Stravinsky uses native Claude Code hooks for delegation enforcement and user messaging. All hooks are configured in `.claude/settings.json` and execute as Python scripts.
|
|
6
|
+
|
|
7
|
+
## Hook Types
|
|
8
|
+
|
|
9
|
+
### PreToolUse Hooks
|
|
10
|
+
|
|
11
|
+
**Purpose**: Intercept tool calls before execution to enforce delegation patterns.
|
|
12
|
+
|
|
13
|
+
#### 1. Stravinsky Mode Enforcer (`stravinsky_mode.py`)
|
|
14
|
+
|
|
15
|
+
**Location**: `mcp_bridge/native_hooks/stravinsky_mode.py`
|
|
16
|
+
|
|
17
|
+
**Matcher**: `Read,Search,Grep,Bash,Edit,MultiEdit`
|
|
18
|
+
|
|
19
|
+
**Behavior**:
|
|
20
|
+
- Checks for `~/.stravinsky_mode` marker file
|
|
21
|
+
- When active, blocks native file tools (Read, Grep, Bash, etc.)
|
|
22
|
+
- Forces use of Task tool for native subagent delegation
|
|
23
|
+
- Outputs user-friendly messages like: `🎭 explore('Delegating Grep (searching for 'auth')')`
|
|
24
|
+
|
|
25
|
+
**Example**:
|
|
26
|
+
```
|
|
27
|
+
User prompt: "Find all authentication code"
|
|
28
|
+
Without hook: Uses Grep directly
|
|
29
|
+
With hook: Blocks Grep, shows "🎭 explore('Delegating Grep (searching for 'auth')')", forces Task delegation
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Delegation Pattern**:
|
|
33
|
+
```python
|
|
34
|
+
# WRONG (blocked by hook)
|
|
35
|
+
Grep(pattern="auth", path="src/")
|
|
36
|
+
|
|
37
|
+
# CORRECT (enforced by hook)
|
|
38
|
+
Task(
|
|
39
|
+
subagent_type="explore",
|
|
40
|
+
prompt="Find all authentication implementations in src/",
|
|
41
|
+
description="Find auth code"
|
|
42
|
+
)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### PostToolUse Hooks
|
|
46
|
+
|
|
47
|
+
**Purpose**: Execute after tool completion for messaging and result processing.
|
|
48
|
+
|
|
49
|
+
#### 1. Truncator (`truncator.py`)
|
|
50
|
+
|
|
51
|
+
**Location**: `mcp_bridge/native_hooks/truncator.py`
|
|
52
|
+
|
|
53
|
+
**Matcher**: `*` (all tools)
|
|
54
|
+
|
|
55
|
+
**Behavior**: Truncates large tool outputs to prevent context overflow.
|
|
56
|
+
|
|
57
|
+
#### 2. Tool Messaging (`tool_messaging.py`)
|
|
58
|
+
|
|
59
|
+
**Location**: `mcp_bridge/native_hooks/tool_messaging.py`
|
|
60
|
+
|
|
61
|
+
**Matcher**: `mcp__stravinsky__*,mcp__grep-app__*,Task`
|
|
62
|
+
|
|
63
|
+
**Behavior**:
|
|
64
|
+
- Outputs concise messages about which tool/agent was used
|
|
65
|
+
- Format: `🔧 tool-name('description')` or `🎯 agent:model('description')`
|
|
66
|
+
|
|
67
|
+
**Examples**:
|
|
68
|
+
```
|
|
69
|
+
🔧 ast-grep('Searching AST in src/ for class definitions')
|
|
70
|
+
🔧 grep('Searching for authentication patterns')
|
|
71
|
+
🔧 lsp-diagnostics('Checking server.py for errors')
|
|
72
|
+
🎯 explore:gemini-3-flash('Finding all API endpoints')
|
|
73
|
+
🎯 delphi:gpt-5.2-medium('Analyzing architecture trade-offs')
|
|
74
|
+
🎯 frontend:gemini-3-pro-high('Designing login component')
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 3. Edit Recovery (`edit_recovery.py`)
|
|
78
|
+
|
|
79
|
+
**Location**: `mcp_bridge/native_hooks/edit_recovery.py`
|
|
80
|
+
|
|
81
|
+
**Matcher**: `Edit,MultiEdit`
|
|
82
|
+
|
|
83
|
+
**Behavior**: Backs up file state before edits for recovery.
|
|
84
|
+
|
|
85
|
+
#### 4. Todo Delegation (`todo_delegation.py`)
|
|
86
|
+
|
|
87
|
+
**Location**: `mcp_bridge/native_hooks/todo_delegation.py`
|
|
88
|
+
|
|
89
|
+
**Matcher**: `TodoWrite`
|
|
90
|
+
|
|
91
|
+
**Behavior**: After TodoWrite, enforces parallel Task delegation for independent todos.
|
|
92
|
+
|
|
93
|
+
**Example Output**:
|
|
94
|
+
```
|
|
95
|
+
[PARALLEL DELEGATION REQUIRED]
|
|
96
|
+
|
|
97
|
+
You just created 3 pending TODOs. Before your NEXT response:
|
|
98
|
+
|
|
99
|
+
1. Identify which TODOs are INDEPENDENT (can run simultaneously)
|
|
100
|
+
2. For EACH independent TODO, spawn a Task agent:
|
|
101
|
+
Task(subagent_type="explore", prompt="[TODO details]", run_in_background=true)
|
|
102
|
+
3. Fire ALL Task calls in ONE response - do NOT wait between them
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### UserPromptSubmit Hooks
|
|
106
|
+
|
|
107
|
+
**Purpose**: Execute before prompt processing to inject context.
|
|
108
|
+
|
|
109
|
+
#### 1. Context Injector (`context.py`)
|
|
110
|
+
|
|
111
|
+
**Location**: `mcp_bridge/native_hooks/context.py`
|
|
112
|
+
|
|
113
|
+
**Matcher**: `*` (all prompts)
|
|
114
|
+
|
|
115
|
+
**Behavior**: Injects project context (git status, rules, todos) into prompts.
|
|
116
|
+
|
|
117
|
+
## Configuration
|
|
118
|
+
|
|
119
|
+
**File**: `.claude/settings.json`
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"hooks": {
|
|
124
|
+
"PreToolUse": [
|
|
125
|
+
{
|
|
126
|
+
"matcher": "Read,Search,Grep,Bash,Edit,MultiEdit",
|
|
127
|
+
"hooks": [{
|
|
128
|
+
"type": "command",
|
|
129
|
+
"command": "python3 /path/to/stravinsky_mode.py"
|
|
130
|
+
}]
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"PostToolUse": [
|
|
134
|
+
{
|
|
135
|
+
"matcher": "*",
|
|
136
|
+
"hooks": [{
|
|
137
|
+
"type": "command",
|
|
138
|
+
"command": "python3 /path/to/truncator.py"
|
|
139
|
+
}]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"matcher": "mcp__stravinsky__*,mcp__grep-app__*,Task",
|
|
143
|
+
"hooks": [{
|
|
144
|
+
"type": "command",
|
|
145
|
+
"command": "python3 /path/to/tool_messaging.py"
|
|
146
|
+
}]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"matcher": "Edit,MultiEdit",
|
|
150
|
+
"hooks": [{
|
|
151
|
+
"type": "command",
|
|
152
|
+
"command": "python3 /path/to/edit_recovery.py"
|
|
153
|
+
}]
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"matcher": "TodoWrite",
|
|
157
|
+
"hooks": [{
|
|
158
|
+
"type": "command",
|
|
159
|
+
"command": "python3 /path/to/todo_delegation.py"
|
|
160
|
+
}]
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"UserPromptSubmit": [
|
|
164
|
+
{
|
|
165
|
+
"matcher": "*",
|
|
166
|
+
"hooks": [{
|
|
167
|
+
"type": "command",
|
|
168
|
+
"command": "python3 /path/to/context.py"
|
|
169
|
+
}]
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Hook Execution Flow
|
|
177
|
+
|
|
178
|
+
### Stravinsky Mode Active
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
User: "Find all auth code"
|
|
182
|
+
↓
|
|
183
|
+
PreToolUse (stravinsky_mode.py)
|
|
184
|
+
↓ Detects ~/.stravinsky_mode exists
|
|
185
|
+
↓ Tool: Grep
|
|
186
|
+
↓ BLOCK (exit code 2)
|
|
187
|
+
↓ Output: 🎭 explore('Delegating Grep (searching for 'auth')')
|
|
188
|
+
↓
|
|
189
|
+
Claude receives block + message
|
|
190
|
+
↓ Uses Task tool instead:
|
|
191
|
+
↓ Task(subagent_type="explore", prompt="Find all auth...", description="Find auth")
|
|
192
|
+
↓
|
|
193
|
+
PostToolUse (tool_messaging.py)
|
|
194
|
+
↓ Tool: Task
|
|
195
|
+
↓ Output: 🎯 explore:gemini-3-flash('Find auth')
|
|
196
|
+
↓
|
|
197
|
+
User sees both messages:
|
|
198
|
+
🎭 explore('Delegating Grep (searching for 'auth')')
|
|
199
|
+
🎯 explore:gemini-3-flash('Find auth')
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Normal Mode (No Stravinsky Mode)
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
User: "Read server.py"
|
|
206
|
+
↓
|
|
207
|
+
PreToolUse (stravinsky_mode.py)
|
|
208
|
+
↓ ~/.stravinsky_mode does NOT exist
|
|
209
|
+
↓ ALLOW (exit code 0)
|
|
210
|
+
↓
|
|
211
|
+
Read tool executes normally
|
|
212
|
+
↓
|
|
213
|
+
PostToolUse (truncator.py)
|
|
214
|
+
↓ Truncates output if too large
|
|
215
|
+
↓
|
|
216
|
+
User sees normal Read output
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### MCP Tool Usage
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
Claude: Uses lsp_diagnostics(file_path="server.py")
|
|
223
|
+
↓
|
|
224
|
+
PostToolUse (tool_messaging.py)
|
|
225
|
+
↓ Tool: mcp__stravinsky__lsp_diagnostics
|
|
226
|
+
↓ Output: 🔧 lsp-diagnostics('Checking server.py for errors')
|
|
227
|
+
↓
|
|
228
|
+
User sees: 🔧 lsp-diagnostics('Checking server.py for errors')
|
|
229
|
+
[followed by actual diagnostic results]
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Activating Stravinsky Mode
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Activate (blocks native tools, forces Task delegation)
|
|
236
|
+
touch ~/.stravinsky_mode
|
|
237
|
+
|
|
238
|
+
# Or with configuration
|
|
239
|
+
echo '{"active": true, "agent_type": "explore"}' > ~/.stravinsky_mode
|
|
240
|
+
|
|
241
|
+
# Deactivate (allows normal tool usage)
|
|
242
|
+
rm ~/.stravinsky_mode
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Agent Model Mapping
|
|
246
|
+
|
|
247
|
+
When user sees messages like `agent:model('description')`, the model shows which backend is being used:
|
|
248
|
+
|
|
249
|
+
| Agent | Model | Cost | Use Case |
|
|
250
|
+
|-------|-------|------|----------|
|
|
251
|
+
| explore | gemini-3-flash | Free | Code search, file reading |
|
|
252
|
+
| dewey | gemini-3-flash | Cheap | Documentation research |
|
|
253
|
+
| code-reviewer | sonnet | Cheap | Code quality analysis |
|
|
254
|
+
| debugger | sonnet | Medium | Root cause investigation |
|
|
255
|
+
| frontend | gemini-3-pro-high | Medium | UI/UX design |
|
|
256
|
+
| delphi | gpt-5.2-medium | Expensive | Strategic architecture |
|
|
257
|
+
|
|
258
|
+
## User Messaging Examples
|
|
259
|
+
|
|
260
|
+
### Successful Delegation
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
🎭 explore('Delegating Grep (searching for 'authentication')')
|
|
264
|
+
🎯 explore:gemini-3-flash('Find all auth implementations')
|
|
265
|
+
[Agent output: Found 15 authentication files...]
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Multi-Agent Parallel Execution
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
🎯 explore:gemini-3-flash('Find API endpoints')
|
|
272
|
+
🎯 dewey:gemini-3-flash('Research JWT best practices')
|
|
273
|
+
🎯 code-reviewer:sonnet('Review auth implementation')
|
|
274
|
+
[All agents execute in parallel, results aggregated]
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Strategic Consultation
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
🎯 delphi:gpt-5.2-medium('Architecture decision: WebSocket vs SSE')
|
|
281
|
+
[Delphi provides deep strategic analysis with trade-offs]
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Hook Benefits
|
|
285
|
+
|
|
286
|
+
1. **Enforcement**: PreToolUse hooks ensure delegation patterns are followed
|
|
287
|
+
2. **Transparency**: PostToolUse messaging shows which tools/agents are being used
|
|
288
|
+
3. **Cost Awareness**: Model names in messages (gemini-3-flash, gpt-5.2-medium) indicate cost
|
|
289
|
+
4. **Zero Overhead**: Hooks run in-process, no CLI spawning latency
|
|
290
|
+
5. **Hard Boundaries**: Native subagents inherit explicit tool lists, enforced at Claude Code level
|
|
291
|
+
6. **Fail-Safe**: Hooks fail open (allow on error) to prevent blocking workflow
|
|
292
|
+
|
|
293
|
+
## Debugging Hooks
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# Test hook directly
|
|
297
|
+
echo '{"toolName": "Grep", "params": {"pattern": "auth"}}' | python3 stravinsky_mode.py
|
|
298
|
+
# Should output delegation message if ~/.stravinsky_mode exists
|
|
299
|
+
|
|
300
|
+
# View hook output in Claude Code logs
|
|
301
|
+
tail -f ~/.claude/logs/hooks.log
|
|
302
|
+
|
|
303
|
+
# Disable hook temporarily
|
|
304
|
+
# Edit .claude/settings.json, remove hook from matcher
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Next Steps
|
|
308
|
+
|
|
309
|
+
1. **Test hooks**: Run `/stravinsky` command to activate mode, verify delegation enforcement
|
|
310
|
+
2. **Monitor messaging**: Check that tool messages appear in stderr
|
|
311
|
+
3. **Verify parallel execution**: TodoWrite → Task delegation should fire simultaneously
|
|
312
|
+
4. **Cost optimization**: Track which agents are used most, optimize routing
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
**Summary**: Stravinsky hooks provide transparent, enforced delegation with user-friendly messaging showing which specialist agent/tool is handling each task, with clear cost indicators via model names.
|